Sergey Gorokhov (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 75 След.
Отправка транзакций, Время прихода ответа на транзакцию
 
Дмитрий,
Вы же сами говорите что на разных серверах разная картина.
Отправка транзакций, Время прихода ответа на транзакцию
 
Дмитрий,

Уточните в связи с чем Вы проводите такие исследования? если вопрос чисто из любопытства то не видим оснований исследовать этот вопрос т.к. он тербует более детального анализа логов со стороны брокера.
Иными словами стоит ли игра свеч?
Если Вы столкнулись с какой-то реальной проблемой, опишите в чем её суть.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
это только В НОРМАЛЬНЫХ языках такое происходит, но не в Lua или JS

В чем проблема выводить данные по DDE (или odbc) и ловить их в своем приложении на любом "нормальном" языке?
get candle
 
s_mike@rambler.ru,
К сожалению причины не понятны, однако Старатель, правильно сказал, doesExist решает проблему.
Функции onInit, onStop, onClose
 
Владимир,
Если Вы сомневаетесь в компетенции поддержки, зачем тогда вообще спрашивать совета у поддержки?
Спросите у того кому вверите.
get candle
 
Цитата
s_mike@rambler.ru написал:
Нет, не подтвердилось. Инструмент на графике один
Инструмент или источник данных?
Ведь у одного инструмента могут быть графики от разных источников, таблица текущих торгов или обезличенные сделки.
Если говорить про индикаторы, то они само собой рассчитываются чуть позже появления графика-источника.
get candle
 
Старатель,
да такая ситуация возможна.
но как правило, она возникает когда в одном окне несколько графиков с разными источниками.
Один из графиков обновился и получил данные для построения свечи, а второй еще нет.
Оба покажут size+1, но на одном будут нулевые значения, а на втором нет.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Перечитал
Ваши посты переданы модератору для анализа.

Цитата
Владимир написал:
В моём коде индексы SP НЕ "заданы как числа"
Разве? А это что?
Код
SP[2]=0;


И наша рекомендация, на оборот, везде в индексах использовать числа, а не строки.
передавайте число а не строку в a[N][1][1]
Код
a[N][1][1]=tonumber(l:sub(i+1,i+1))
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Sergey Gorokhov , Какие ещё "матерные и нецензурные слова"?!
Вы прекрасно понимаете о чем речь, если нет перечитайте свои посты еще раз.
Еще одно предупреждение и Вас заблокируют.
Не используйте ненормативную лексику при написании сообщений.

Цитата
Владимир написал:
Sergey Gorokhov, Мне нужно, чтобы я ЗНАЛ, какого типа мои переменные и был уверен, что она не поменяет свой тип через миллисекунду. Повторяю: я ВСЕ свои данные заношу как строки (впрочем, Вы это могли увидеть по коду). А вот как интерпретатор их ВОСПРИНИМАЕТ - этого я уже не знаю.

Проблема не в интерпретаторе, а в Вашем понимании что строка НЕ равно число.
У Вас в Вашем же коде, индексы SP заданы как числа, а Вы пытаетесь обратиться к ним как к строкам.
О чем Вам уже три человека сказали.
Вы говорите что Вам нужны индексы строки, тогда почему Вы где-то используете числа а где-то строки??
проще и надежней везде использовать однотипный способ получения данных.

Вы сами запутались уже в своем же коде.

Вот это a[i][1][1] - должно быть числом а не строкой, о чем и было сказано выше #67
Функции onInit, onStop, onClose
 
Владимир,

Вы в начале задаете индексы как числа, а потом обращаетесь к ним как к строке
С нашей стороны было сделано предположение что Вам нужны индексы - числа, а не строки.
Если нужны строки то используйте их везде
Код
function r()local i,j,k;c=c+1;if c==10 then c=0;R();end;for i=0,N-1 do if a[i][9]~=-1 then j=a[i][2];a[i][2]=getParamEx(a[i][1][0],a[i][0],"LAST").param_value;k=0xFFFFFF;if j~=a[i][2]then if tonumber(j)>tonumber(a[i][2]) then k=0xFFCCCC;end;if tonumber(j)<tonumber(a[i][2]) then k=0xCCCCFF;end;end;j=CL[a[i][1][1]];if tonumber(a[i][1][5])==0 then j=0x666666;end;if f then SetColor(T,a[i][9],QTABLE_NO_INDEX,k,j,-1,-1);end;if tonumber(a[i][2])==0 then if f then SetColor(T,a[i][9],1,0,0xFFFFFF,-1,-1);end;end;if f then SetCell(T,a[i][9],1,a[i][0]);end;if f then SetCell(T,a[i][9],2,d0(a[i][1][5]));end;if f then SetCell(T,a[i][9],3,d0(a[i][2]));end;if f then SetCell(T,a[i][9],4,string.format("%1.2f",a[i][2]*a[i][1][3]*a[i][1][5]));end;if f then SetCell(T,a[i][9],5,string.format("%1.2f",a[i][1][6]));end;if f then SetCell(T,a[i][9],6,d0(string.format("%1.3f",a[i][1][7])));end;if f then SetCell(T,a[i][9],7,string.format("%1.2f",a[i][2]/a[i][1][7]*100-100));end;j=a[i][5][a[i][1][4]-1];if f then SetCell(T,a[i][9],8,d0(j));end;j=a[i][2]/j*100-100;if j>5 then if f then SetColor(T,a[i][9],9,0xCCCCFF,0,-1,-1);end;end;if j<-5 then if f then SetColor(T,a[i][9],9,0xFFCCCC,0,-1,-1);end;end;if f then SetCell(T,a[i][9],9,string.format("%1.2f",j));end;end;end;SetWindowCaption(T,"R="..SP[0].."+"..M[0].."="..SV[0].."/"..SR[0].." D="..SP[1].."+"..M[1].."="..SV[1].."/"..SR[1].." E="..SP[2].."+"..M[2].."="..SV[2].."/"..SR[2]);end
function R()local i,j,k,l;l=0;SP["0"]=0;SP["1"]=0;SP["2"]=0;SV["0"]=0;SV["1"]=0;SV["2"]=0;SR["0"]=0;SR["1"]=0;SR["2"]=0;for i=0,N-1 do a[i][2]=getParamEx(a[i][1][0],a[i][0],"LAST").param_value;SP[a[i][1][1]]=tonumber(SP[a[i][1][1]])+a[i][1][6];j=a[i][2]/a[i][1][7]*100-100;if j > 1 then SR[a[i][1][1]]=SR[a[i][1][1]]+a[i][1][6];end;SV[a[i][1][1]]=SV[a[i][1][1]]+(a[i][2]-a[i][1][7])*a[i][1][5]*a[i][1][3];j=a[i][2]/a[i][1][7]*100-100;k=0;j=a[i][2]/a[i][1][7]*100-100;if j<-5 and a[i][2]~=0 then k=1;end;if a[i][1][5]>0 then j=a[i][2]/a[i][5][a[i][1][4]-1]*100-100;if j>3 or j<-3 then k=1;end;end;if k==0 and a[i][9]~=-1 then l=1;a[i][9]=-1;end;if k~=0 and a[i][9]==-1 then if f then a[i][2]=0;a[i][9]=InsertRow(T,-1);end;end;end;if l~=0 then if f then Clear(T);end;i=0;for i=0,N-1 do if a[i][9]~=-1 then a[i][2]=0;if f then a[i][9]=InsertRow(T,-1);end;end;end;end;C=C+1;end
function OnStop() f=false;end
function b(n) local i=0;a[n][1][5]=0;a[n][1][6]=0;while i<a[n][1][4] do a[n][1][5]=a[n][1][5]+a[n][5][i];a[n][1][6]=a[n][1][6]+a[n][5][i]*a[n][5][i+1]*a[n][1][3];i=i+2;end;if a[n][1][5]~=0 then a[n][1][7]=a[n][1][6]/a[n][1][5]/a[n][1][3];else a[n][1][7]=a[n][5][a[n][1][4]-1];end;end
function d0(s) s=tonumber(s);if s==math.floor(s) then s=math.floor(s) end return tostring(s);end
function e() f=false;message("Файл бракованный!");sleep(5000);end
function main() local i,j,s;CL={0,0x9900,0x99};f=true;c=0;C=0;N=0;T=0;a={};M={};M[0]=0;M[1]=0;M[2]=0;SP={};SV={};SR={};F=io.open(getScriptPath().."//T","r");if F==nil then e();return;end;for l in F:lines() do s=l:sub(1,1);if s=="_" then loadstring(l:sub(2))();end;if s~="-" and s~="_" then i=l:find("\1");if i==nil then e();return;end;a[N]={};a[N][1]={};a[N][1][0]=l:sub(1,i-1);l=l:sub(i+1);i=l:find("\2");if i==nil then e();return;end;a[N][0]=l:sub(1,i-1);if l:sub(i+2,i+2)~="\3" or l:sub(i+4,i+4)~="\t" then e();return;end;a[N][1][1]=l:sub(i+1,i+1);a[N][1][2]=l:sub(i+3,i+3);l=l:sub(i+5);a[N][1][3]=getParamEx(a[N][1][0],a[N][0],"LOTSIZE").param_value;i=l:find("\t");if i==nil then e();return;end;a[N][2]=0;l=l:sub(i+1);a[N][3]=0;a[N][4]=0;a[N][5]={};j=0;while l:sub(1,1)~="#" do i=l:find("\t");if i==nil then e();return;end;s=l:sub(1,i-1);l=l:sub(i+1);i=s:find(":");if i==nil then e();return;end;a[N][5][j]=s:sub(1,i-1);a[N][5][j+1]=s:sub(i+1);j=j+2;end;a[N][1][4]=j;a[N][6]={};a[N][7]={};a[N][8]={};j=0;while j<12 do a[N][6][j]=0;a[N][7][j]=0;a[N][8][j]=0;j=j+1;end;l=l:sub(i+1);j=0;while j<12 do i=l:find("\4");if i==nil then break;end;i=l:find(":");if i==nil then e();return;end;a[N][6][j]=l:sub(2,i-1);l=l:sub(i+1);i=l:find(":");if i==nil then e();return;end;a[N][7][j]=l:sub(2,i-1);l=l:sub(i+1);i=l:find("\4");if i==nil then e();return;end;a[N][8][j]=l:sub(2,i-1);l=l:sub(i+1);j=j+1;end;a[N][9]=-1;b(N);N=N+1;end;end;F:close();T=AllocTable();AddColumn(T,1,"Тикер",true,QTABLE_STRING_TYPE,8);AddColumn(T,2,"Кол",true,QTABLE_STRING_TYPE,6);AddColumn(T,3,"Цена",true,QTABLE_STRING_TYPE,12);AddColumn(T,4,"Сумма",true,QTABLE_STRING_TYPE,12);AddColumn(T,5,"Затраты",true,QTABLE_STRING_TYPE,12);AddColumn(T,6,"Med",true,QTABLE_STRING_TYPE,12);AddColumn(T,7,"%",true,QTABLE_STRING_TYPE,12);AddColumn(T,8,"Last",true,QTABLE_STRING_TYPE,12);AddColumn(T,9,"%",true,QTABLE_STRING_TYPE,12);CreateWindow(T);SetWindowPos(T,0,0,900,560);R();F=io.open(getScriptPath().."//LOG","w");if F==nil then e();return;end;message("Скрипт запущен, акций: "..N);while f do sleep(1500);r();end;F:close();F=io.open(getScriptPath().."//TTT","w");if F==nil then e();return;end;i=0;while i<N do F:write(a[i][1][0].."\1"..a[i][0].."\2"..a[i][1][1].."\3"..a[i][1][2].."\t"..d0(a[i][2]).."\t");j=0;while j<a[i][1][4] do F:write(a[i][5][j]..":"..d0(a[i][5][j+1]).."\t");j=j+2;end;F:write("#");j=0;while j<12 do F:write(d0(a[i][6][j])..":"..d0(a[i][7][j])..":"..d0(a[i][8][j]).."\4");j=j+1;end;F:write("\n");i=i+1;end;F:close();message("Скрипт остановлен!");end
Функции onInit, onStop, onClose
 
Владимир,
Вынужден сделать второе предупреждение.
не допускайте матерных и нецензурных слов при общении на форуме.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Нет, ничего не смущает А что должно смущать?    
ответ уже был дан:
Цитата
Sergey Gorokhov написал:
Потому что SP[2] и SP["2"] - это разные вещи
Функции onInit, onStop, onClose
 
Старатель,
я раньше успел))

Владимир,
остальной код не проверял но наверняка там есть и другие похожие ошибки.
Функции onInit, onStop, onClose
 
Владимир,
как и ожидалось у Вас в a[N][1][1] попадает строка, а не число.
надо чтобы было число.
Потому что SP[2] и SP["2"] - это разные вещи
Исправьте например так:

Код
function r()local i,j,k;c=c+1;if c==10 then c=0;R();end;for i=0,N-1 do if a[i][9]~=-1 then j=a[i][2];a[i][2]=getParamEx(a[i][1][0],a[i][0],"LAST").param_value;k=0xFFFFFF;if j~=a[i][2]then if tonumber(j)>tonumber(a[i][2]) then k=0xFFCCCC;end;if tonumber(j)<tonumber(a[i][2]) then k=0xCCCCFF;end;end;j=CL[a[i][1][1]];if tonumber(a[i][1][5])==0 then j=0x666666;end;if f then SetColor(T,a[i][9],QTABLE_NO_INDEX,k,j,-1,-1);end;if tonumber(a[i][2])==0 then if f then SetColor(T,a[i][9],1,0,0xFFFFFF,-1,-1);end;end;if f then SetCell(T,a[i][9],1,a[i][0]);end;if f then SetCell(T,a[i][9],2,d0(a[i][1][5]));end;if f then SetCell(T,a[i][9],3,d0(a[i][2]));end;if f then SetCell(T,a[i][9],4,string.format("%1.2f",a[i][2]*a[i][1][3]*a[i][1][5]));end;if f then SetCell(T,a[i][9],5,string.format("%1.2f",a[i][1][6]));end;if f then SetCell(T,a[i][9],6,d0(string.format("%1.3f",a[i][1][7])));end;if f then SetCell(T,a[i][9],7,string.format("%1.2f",a[i][2]/a[i][1][7]*100-100));end;j=a[i][5][a[i][1][4]-1];if f then SetCell(T,a[i][9],8,d0(j));end;j=a[i][2]/j*100-100;if j>5 then if f then SetColor(T,a[i][9],9,0xCCCCFF,0,-1,-1);end;end;if j<-5 then if f then SetColor(T,a[i][9],9,0xFFCCCC,0,-1,-1);end;end;if f then SetCell(T,a[i][9],9,string.format("%1.2f",j));end;end;end;SetWindowCaption(T,"R="..SP[0].."+"..M[0].."="..SV[0].."/"..SR[0].." D="..SP[1].."+"..M[1].."="..SV[1].."/"..SR[1].." E="..SP[2].."+"..M[2].."="..SV[2].."/"..SR[2]);end
function R()local i,j,k,l;l=0;SP[0]=0;SP[1]=0;SP[2]=0;SV[0]=0;SV[1]=0;SV[2]=0;SR[0]=0;SR[1]=0;SR[2]=0;for i=0,N-1 do a[i][2]=getParamEx(a[i][1][0],a[i][0],"LAST").param_value;SP[a[i][1][1]]=tonumber(SP[a[i][1][1]])+a[i][1][6];j=a[i][2]/a[i][1][7]*100-100;if j > 1 then SR[a[i][1][1]]=SR[a[i][1][1]]+a[i][1][6];end;SV[a[i][1][1]]=SV[a[i][1][1]]+(a[i][2]-a[i][1][7])*a[i][1][5]*a[i][1][3];j=a[i][2]/a[i][1][7]*100-100;k=0;j=a[i][2]/a[i][1][7]*100-100;if j<-5 and a[i][2]~=0 then k=1;end;if a[i][1][5]>0 then j=a[i][2]/a[i][5][a[i][1][4]-1]*100-100;if j>3 or j<-3 then k=1;end;end;if k==0 and a[i][9]~=-1 then l=1;a[i][9]=-1;end;if k~=0 and a[i][9]==-1 then if f then a[i][2]=0;a[i][9]=InsertRow(T,-1);end;end;end;if l~=0 then if f then Clear(T);end;i=0;for i=0,N-1 do if a[i][9]~=-1 then a[i][2]=0;if f then a[i][9]=InsertRow(T,-1);end;end;end;end;C=C+1;end
function OnStop() f=false;end
function b(n) local i=0;a[n][1][5]=0;a[n][1][6]=0;while i<a[n][1][4] do a[n][1][5]=a[n][1][5]+a[n][5][i];a[n][1][6]=a[n][1][6]+a[n][5][i]*a[n][5][i+1]*a[n][1][3];i=i+2;end;if a[n][1][5]~=0 then a[n][1][7]=a[n][1][6]/a[n][1][5]/a[n][1][3];else a[n][1][7]=a[n][5][a[n][1][4]-1];end;end
function d0(s) s=tonumber(s);if s==math.floor(s) then s=math.floor(s) end return tostring(s);end
function e() f=false;message("Файл бракованный!");sleep(5000);end
function main() local i,j,s;CL={0,0x9900,0x99};f=true;c=0;C=0;N=0;T=0;a={};M={};M[0]=0;M[1]=0;M[2]=0;SP={};SV={};SR={};F=io.open(getScriptPath().."//T","r");if F==nil then e();return;end;for l in F:lines() do s=l:sub(1,1);if s=="_" then loadstring(l:sub(2))();end;if s~="-" and s~="_" then i=l:find("\1");if i==nil then e();return;end;a[N]={};a[N][1]={};a[N][1][0]=l:sub(1,i-1);l=l:sub(i+1);i=l:find("\2");if i==nil then e();return;end;a[N][0]=l:sub(1,i-1);if l:sub(i+2,i+2)~="\3" or l:sub(i+4,i+4)~="\t" then e();return;end;a[N][1][1]=tonumber(l:sub(i+1,i+1));a[N][1][2]=l:sub(i+3,i+3);l=l:sub(i+5);a[N][1][3]=getParamEx(a[N][1][0],a[N][0],"LOTSIZE").param_value;i=l:find("\t");if i==nil then e();return;end;a[N][2]=0;l=l:sub(i+1);a[N][3]=0;a[N][4]=0;a[N][5]={};j=0;while l:sub(1,1)~="#" do i=l:find("\t");if i==nil then e();return;end;s=l:sub(1,i-1);l=l:sub(i+1);i=s:find(":");if i==nil then e();return;end;a[N][5][j]=s:sub(1,i-1);a[N][5][j+1]=s:sub(i+1);j=j+2;end;a[N][1][4]=j;a[N][6]={};a[N][7]={};a[N][8]={};j=0;while j<12 do a[N][6][j]=0;a[N][7][j]=0;a[N][8][j]=0;j=j+1;end;l=l:sub(i+1);j=0;while j<12 do i=l:find("\4");if i==nil then break;end;i=l:find(":");if i==nil then e();return;end;a[N][6][j]=l:sub(2,i-1);l=l:sub(i+1);i=l:find(":");if i==nil then e();return;end;a[N][7][j]=l:sub(2,i-1);l=l:sub(i+1);i=l:find("\4");if i==nil then e();return;end;a[N][8][j]=l:sub(2,i-1);l=l:sub(i+1);j=j+1;end;a[N][9]=-1;b(N);N=N+1;end;end;F:close();T=AllocTable();AddColumn(T,1,"Тикер",true,QTABLE_STRING_TYPE,8);AddColumn(T,2,"Кол",true,QTABLE_STRING_TYPE,6);AddColumn(T,3,"Цена",true,QTABLE_STRING_TYPE,12);AddColumn(T,4,"Сумма",true,QTABLE_STRING_TYPE,12);AddColumn(T,5,"Затраты",true,QTABLE_STRING_TYPE,12);AddColumn(T,6,"Med",true,QTABLE_STRING_TYPE,12);AddColumn(T,7,"%",true,QTABLE_STRING_TYPE,12);AddColumn(T,8,"Last",true,QTABLE_STRING_TYPE,12);AddColumn(T,9,"%",true,QTABLE_STRING_TYPE,12);CreateWindow(T);SetWindowPos(T,0,0,900,560);R();F=io.open(getScriptPath().."//LOG","w");if F==nil then e();return;end;message("Скрипт запущен, акций: "..N);while f do sleep(1500);r();end;F:close();F=io.open(getScriptPath().."//TTT","w");if F==nil then e();return;end;i=0;while i<N do F:write(a[i][1][0].."\1"..a[i][0].."\2"..a[i][1][1].."\3"..a[i][1][2].."\t"..d0(a[i][2]).."\t");j=0;while j<a[i][1][4] do F:write(a[i][5][j]..":"..d0(a[i][5][j+1]).."\t");j=j+2;end;F:write("#");j=0;while j<12 do F:write(d0(a[i][6][j])..":"..d0(a[i][7][j])..":"..d0(a[i][8][j]).."\4");j=j+1;end;F:write("\n");i=i+1;end;F:close();message("Скрипт остановлен!");end
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Sergey Gorokhov, О Господи! Ну, ловите:
Код
   function  r() local  i,j,k;c = c +  1 ; if  c =  =  10   then  c =  0 ;R(); end ; for  i =  0 ,N -  1   do   if  a[i][ 9 ]~ =  -  1   then  j = a[i][ 2 ];a[i][ 2 ] =  getParamEx (a[i][ 1 ][ 0 ],a[i][ 0 ],"LAST").param_value;k =  0xFFFFFF ; if  j~ = a[i][ 2 ] then   if  tonumber(j) > tonumber(a[i][ 2 ])  then  k =  0xFFCCCC ; end ; if  tonumber(j) < tonumber(a[i][ 2 ])  then  k =  0xCCCCFF ; end ; end ;j = CL[a[i][ 1 ][ 1 ]]; if  tonumber(a[i][ 1 ][ 5 ]) =  =  0   then  j =  0x666666 ; end ; if  f  then   SetColor (T,a[i][ 9 ],QTABLE_NO_INDEX,k,j, -  1 , -  1 ); end ; if  tonumber(a[i][ 2 ]) =  =  0   then   if  f  then   SetColor (T,a[i][ 9 ], 1 , 0 , 0xFFFFFF , -  1 , -  1 ); end ; end ; if  f  then   SetCell (T,a[i][ 9 ], 1 ,a[i][ 0 ]); end ; if  f  then   SetCell (T,a[i][ 9 ], 2 ,d0(a[i][ 1 ][ 5 ])); end ; if  f  then   SetCell (T,a[i][ 9 ], 3 ,d0(a[i][ 2 ])); end ; if  f  then   SetCell (T,a[i][ 9 ], 4 , string.format ( "%1.2f" ,a[i][ 2 ] * a[i][ 1 ][ 3 ] * a[i][ 1 ][ 5 ])); end ; if  f  then   SetCell (T,a[i][ 9 ], 5 , string.format ( "%1.2f" ,a[i][ 1 ][ 6 ])); end ; if  f  then   SetCell (T,a[i][ 9 ], 6 ,d0( string.format ( "%1.3f" ,a[i][ 1 ][ 7 ]))); end ; if  f  then   SetCell (T,a[i][ 9 ], 7 , string.format ( "%1.2f" ,a[i][ 2 ]/a[i][ 1 ][ 7 ] *  100  -  100 )); end ;j = a[i][ 5 ][a[i][ 1 ][ 4 ] -  1 ]; if  f  then   SetCell (T,a[i][ 9 ], 8 ,d0(j)); end ;j = a[i][ 2 ]/j *  100  -  100 ; if  j >  5   then   if  f  then   SetColor (T,a[i][ 9 ], 9 , 0xCCCCFF , 0 , -  1 , -  1 ); end ; end ; if  j <  -  5   then   if  f  then   SetColor (T,a[i][ 9 ], 9 , 0xFFCCCC , 0 , -  1 , -  1 ); end ; end ; if  f  then   SetCell (T,a[i][ 9 ], 9 , string.format ( "%1.2f" ,j)); end ; end ; end ; SetWindowCaption (T,"R =  "..SP[0].."  + " .. M[ 0 ] .. " =  "..SV[0].." /" .. SR[ 0 ] .. " D =  "..SP[1].."  + " .. M[ 1 ] .. " =  "..SV[1].." /" .. SR[ 1 ] .. " E =  "..SP[2].."  + " .. M[ 2 ] .. " =  "..SV[2].." /" .. SR[ 2 ]); end 
 function  R() local  i,j,k,l;l =  0 ;SP[ 0 ] =  0 ;SP[ 1 ] =  0 ;SP[ 2 ] =  0 ;SV[ 0 ] =  0 ;SV[ 1 ] =  0 ;SV[ 2 ] =  0 ;SR[ 0 ] =  0 ;SR[ 1 ] =  0 ;SR[ 2 ] =  0 ; for  i =  0 ,N -  1   do  a[i][ 2 ] =  getParamEx (a[i][ 1 ][ 0 ],a[i][ 0 ],"LAST").param_value;SP[a[i][ 1 ][ 1 ]] = tonumber(SP[a[i][ 1 ][ 1 ]]) + a[i][ 1 ][ 6 ];j = a[i][ 2 ]/a[i][ 1 ][ 7 ] *  100  -  100 ; if  j  >   1   then  SR[a[i][ 1 ][ 1 ]] = SR[a[i][ 1 ][ 1 ]] + a[i][ 1 ][ 6 ]; end ;SV[a[i][ 1 ][ 1 ]] = SV[a[i][ 1 ][ 1 ]] + (a[i][ 2 ] - a[i][ 1 ][ 7 ]) * a[i][ 1 ][ 5 ] * a[i][ 1 ][ 3 ];j = a[i][ 2 ]/a[i][ 1 ][ 7 ] *  100  -  100 ;k =  0 ;j = a[i][ 2 ]/a[i][ 1 ][ 7 ] *  100  -  100 ; if  j <  -  5   and  a[i][ 2 ]~ =  0   then  k =  1 ; end ; if  a[i][ 1 ][ 5 ] >  0   then  j = a[i][ 2 ]/a[i][ 5 ][a[i][ 1 ][ 4 ] -  1 ] *  100  -  100 ; if  j >  3   or  j <  -  3   then  k =  1 ; end ; end ; if  k =  =  0   and  a[i][ 9 ]~ =  -  1   then  l =  1 ;a[i][ 9 ] =  -  1 ; end ; if  k~ =  0   and  a[i][ 9 ] =  =  -  1   then   if  f  then  a[i][ 2 ] =  0 ;a[i][ 9 ] =  InsertRow (T, -  1 ); end ; end ; end ; if  l~ =  0   then   if  f  then   Clear (T); end ;i =  0 ; for  i =  0 ,N -  1   do   if  a[i][ 9 ]~ =  -  1   then  a[i][ 2 ] =  0 ; if  f  then  a[i][ 9 ] =  InsertRow (T, -  1 ); end ; end ; end ; end ;C = C +  1 ; end 
 function   OnStop () f =  false ; end 
 function  b(n)  local  i =  0 ;a[n][ 1 ][ 5 ] =  0 ;a[n][ 1 ][ 6 ] =  0 ; while  i < a[n][ 1 ][ 4 ]  do  a[n][ 1 ][ 5 ] = a[n][ 1 ][ 5 ] + a[n][ 5 ][i];a[n][ 1 ][ 6 ] = a[n][ 1 ][ 6 ] + a[n][ 5 ][i] * a[n][ 5 ][i +  1 ] * a[n][ 1 ][ 3 ];i = i +  2 ; end ; if  a[n][ 1 ][ 5 ]~ =  0   then  a[n][ 1 ][ 7 ] = a[n][ 1 ][ 6 ]/a[n][ 1 ][ 5 ]/a[n][ 1 ][ 3 ]; else  a[n][ 1 ][ 7 ] = a[n][ 5 ][a[n][ 1 ][ 4 ] -  1 ]; end ; end 
 function   d0 (s) s = tonumber(s); if  s =  =  math.floor (s)  then  s =  math.floor (s)  end   return  tostring(s); end 
 function  e() f =  false ; message ( "Файл бракованный!" ); sleep ( 5000 ); end 
 function   main ()  local  i,j,s;CL = { 0 , 0x9900 , 0x99 };f =  true ;c =  0 ;C =  0 ;N =  0 ;T =  0 ;a = {};M = {};M[ 0 ] =  0 ;M[ 1 ] =  0 ;M[ 2 ] =  0 ;SP = {};SV = {};SR = {};F =  io.open ( getScriptPath () .. "//T","r"); if  F =  =  nil   then  e(); return ; end ; for  l  in  F:lines()  do  s = l:sub( 1 , 1 ); if  s =  =  "_"   then  loadstring(l:sub( 2 ))(); end ; if  s~ =  "-"   and  s~ =  "_"   then  i = l:find( "\1" ); if  i =  =  nil   then  e(); return ; end ;a[N] = {};a[N][ 1 ] = {};a[N][ 1 ][ 0 ] = l:sub( 1 ,i -  1 );l = l:sub(i +  1 );i = l:find( "\2" ); if  i =  =  nil   then  e(); return ; end ;a[N][ 0 ] = l:sub( 1 ,i -  1 ); if  l:sub(i +  2 ,i +  2 )~ =  "\3"   or  l:sub(i +  4 ,i +  4 )~ =  "\t"   then  e(); return ; end ;a[N][ 1 ][ 1 ] = l:sub(i +  1 ,i +  1 );a[N][ 1 ][ 2 ] = l:sub(i +  3 ,i +  3 );l = l:sub(i +  5 );a[N][ 1 ][ 3 ] =  getParamEx (a[N][ 1 ][ 0 ],a[N][ 0 ],"LOTSIZE").param_value;i = l:find( "\t" ); if  i =  =  nil   then  e(); return ; end ;a[N][ 2 ] =  0 ;l = l:sub(i +  1 );a[N][ 3 ] =  0 ;a[N][ 4 ] =  0 ;a[N][ 5 ] = {};j =  0 ; while  l:sub( 1 , 1 )~ =  "#"   do  i = l:find( "\t" ); if  i =  =  nil   then  e(); return ; end ;s = l:sub( 1 ,i -  1 );l = l:sub(i +  1 );i = s:find( ":" ); if  i =  =  nil   then  e(); return ; end ;a[N][ 5 ][j] = s:sub( 1 ,i -  1 );a[N][ 5 ][j +  1 ] = s:sub(i +  1 );j = j +  2 ; end ;a[N][ 1 ][ 4 ] = j;a[N][ 6 ] = {};a[N][ 7 ] = {};a[N][ 8 ] = {};j =  0 ; while  j <  12   do  a[N][ 6 ][j] =  0 ;a[N][ 7 ][j] =  0 ;a[N][ 8 ][j] =  0 ;j = j +  1 ; end ;l = l:sub(i +  1 );j =  0 ; while  j <  12   do  i = l:find( "\4" ); if  i =  =  nil   then   break ; end ;i = l:find( ":" ); if  i =  =  nil   then  e(); return ; end ;a[N][ 6 ][j] = l:sub( 2 ,i -  1 );l = l:sub(i +  1 );i = l:find( ":" ); if  i =  =  nil   then  e(); return ; end ;a[N][ 7 ][j] = l:sub( 2 ,i -  1 );l = l:sub(i +  1 );i = l:find( "\4" ); if  i =  =  nil   then  e(); return ; end ;a[N][ 8 ][j] = l:sub( 2 ,i -  1 );l = l:sub(i +  1 );j = j +  1 ; end ;a[N][ 9 ] =  -  1 ;b(N);N = N +  1 ; end ; end ;F:close();T =  AllocTable (); AddColumn (T, 1 ,"Тикер", true ,QTABLE_STRING_TYPE, 8 ); AddColumn (T, 2 ,"Кол", true ,QTABLE_STRING_TYPE, 6 ); AddColumn (T, 3 ,"Цена", true ,QTABLE_STRING_TYPE, 12 ); AddColumn (T, 4 ,"Сумма", true ,QTABLE_STRING_TYPE, 12 ); AddColumn (T, 5 ,"Затраты", true ,QTABLE_STRING_TYPE, 12 ); AddColumn (T, 6 ,"Med", true ,QTABLE_STRING_TYPE, 12 ); AddColumn (T, 7 ,"%", true ,QTABLE_STRING_TYPE, 12 ); AddColumn (T, 8 ,"Last", true ,QTABLE_STRING_TYPE, 12 ); AddColumn (T, 9 ,"%", true ,QTABLE_STRING_TYPE, 12 ); CreateWindow (T); SetWindowPos (T, 0 , 0 , 900 , 560 );R();F =  io.open ( getScriptPath () .. "//LOG","w"); if  F =  =  nil   then  e(); return ; end ; message ( "Скрипт запущен, акций: "  .. N); while  f  do   sleep ( 1500 );r(); end ;F:close();F =  io.open ( getScriptPath () .. "//TTT","w"); if  F =  =  nil   then  e(); return ; end ;i =  0 ; while  i < N  do  F:write(a[i][ 1 ][ 0 ] .. "\ 1 " .. a[i][ 0 ] .. "\ 2 " .. a[i][ 1 ][ 1 ] .. "\ 3 " .. a[i][ 1 ][ 2 ] .. "\t" .. d0(a[i][ 2 ]) .. "\t");j =  0 ; while  j < a[i][ 1 ][ 4 ]  do  F:write(a[i][ 5 ][j] .. ":" .. d0(a[i][ 5 ][j +  1 ]) .. "\t");j = j +  2 ; end ;F:write( "#" );j =  0 ; while  j <  12   do  F:write(d0(a[i][ 6 ][j]) .. ":" .. d0(a[i][ 7 ][j]) .. ":" .. d0(a[i][ 8 ][j]) .. "\ 4 ");j = j +  1 ; end ;F:write( "\n" );i = i +  1 ; end ;F:close(); message ( "Скрипт остановлен!" ); end 
  
Последняя версия, ругается на "attempt to perform arithmetic on a nil value". если отрезать SP, SV, SR - работает: рисует таблицу, меняет в ней данные, записывает результаты в файл. Вот прям ща и работает - советует акции Nokia продать.  ::  

для полной картины не хватает содержимого файла "//T"
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Нет, нельзя
почему? есть внятное объяснение?
Сомнение в нашей компетенции не является основанием.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Что Вы с ним делать-то будете?
Читать.
Воспроизводить
Анализировать
И в итоге выдать решение проблемы или по крайней мере объяснить.
Цитата
Владимир написал:
Тем более, без описания.
но мне не нужно, поверьте я тоже программист и тоже с нехилым опытом.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Я абсолютно точно знаю, что мне пришлось бы МЕСЯЦ рассказывать, что и как делает код
НЕ надо ничего рассказывать.

Цитата
Владимир написал:
Вы хотели отслеживать a? Ну, рискните - вот её описание:
Никто у Вас не спрашивал "описание"

нужен просто код. Всё.
без слов.
без объяснений.
скопировать содержимое проблемного lua файла и вставить сюда.
так можно?
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Sergey Gorokhov, Не вижу смысла. Тем более, что я за это время самостоятельно разобрался, почему возникают глюки.
Цитата
Sergey Gorokhov написал:
4) Если не хотите сотрудничать то увы ничем помочь не можем.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Sergey Gorokhov, SP- строка (массив) на три числа, а - сложное, разветвлённое дерево объектов с разнообразной информацией по тикерам, отследить которое не представляется возможным. В частности, этот код выполняется в "большом" прерывании, инициализация - в main, визуализация результатов - малом,обновление - в разных местах.
В виде КОДА а не слов.
Цитата
Владимир написал:
Sergey Gorokhov, Сергей, я 40 лет программистом, причём системщик, был даже когда-то в соавторы бортовой операционки включён. Поверьте, я кое-что смыслю в программировании.  ::  

Для того чтобы выложить "полную версию кода которая не работает" не надо быть программистом
Функции onInit, onStop, onClose
 
Владимир,
У Вас есть понимание что фраза "полная версия кода которая не работает." означает что в коде должно быть всё для того чтобы его можно было запустить и получить ошибку?
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Вот, я "повторил проблему на более компактном коде" - ошибка очевидна: у интерпретатора краша съезжает при вложенной индексации.

где в Вашем примере кода "a" и "SP"?
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Там алгоритмически сложный код, в котором любой запутается, а тут простейшее действие, выделенное мною после "ругательств" интерпретатора на арифметику.
1) Поверьте, поддержку это совсем не пугает
2) Вы понимаете что без отслеживания значений в "a" и "SP" разобраться в причинах не представляется возможным?
3) Можно повторить пробелму на отдельном, более компактном коде.
4) Если не хотите сотрудничать то увы ничем помочь не можем.
Функции onInit, onStop, onClose
 
Владимир,
Логично предположить что Вам надо привести свою версию кода которая не работает.
ПОЛНУЮ версию кода, а не пару строк которые ничего не значат
Функции onInit, onStop, onClose
 
Цитата
Nikolay написал:
Если у Вас в SP[a[i][1][1]] ничего нет, т.е. nil, то и будет ошибка.

он говорит что в SP[a[i][1][1]] что-то есть.
иначе, вот это ..SP[2]); - вернуло бы nil, а оно возвращает "0: SP[2]=0"
a[i][1][1]] равно 2, потому что
message(i..": SP["..a[i][1][1].."]"); -- печатает "0: SP[2]"
Функции onInit, onStop, onClose
 
Владимир,

Пример кода:
Код
local i = 0;
local a = {
   [0] = {
      [0] = {
         [0] = 1,
         [1] = 2
      },
      [1] = {
         [0] = 1,
         [1] = 2
      }
   }
};

local SP = {
   [0] = 2,
   [1] = 1,
   [2] = 0
}
message(i..": ");            -- печатает "0: "
message(i..": SP["..a[i][1][1].."]");      -- печатает "0: SP[2]"
message(i..": SP["..a[i][1][1].."]="..SP[2]);   -- печатает "0: SP[2]=0"
message(i..": SP["..a[i][1][1].."]="..SP[a[i][1][1]]);


не воспроизводится
Более быстрый способ, all_trades
 
Цитата
Костя написал:
В ОБЩЕМ проблема не решена
Если требуется анализ приложите полную версию скрипта.
перестало работать снятие активной заявки
 
Цитата
Владимир написал:
Александр, А зачем там вообще double? Код заявки - ЦЕЛОЕ число! Эксперимент показал, что его разрядности достаточно. Какому дебилу понадобилось объединить int и float в идиотский number, да ещё и на уровне исполнения использовать именно float? Мало других способов поймать приключения на свою задницу?

Просьба сдерживаться в выражениях иначе придется принять меры.

https://www.lua.org/manual/5.3/manual.html#2
The type number uses two internal representations, or two subtypes, one called integer and the other called float.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
ОЙ! Спасибо, конечно,  Sergey Gorokhov , И повторяю пожелание: нельзя ли дать возможность редактировать свои комменты - скажем, в течение 5 минут?

К сожалению ядро форума не предоставляет такой возможности.
В ближайшее время подобный функционал к добавлению не планируется.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Я не понимаю, ЧТО Вы считаете "примером кода".

например так:

Здравствуйте, у меня не работает функция SetColor, помогите.
пример кода:
Код
function main()
   local iT = AllocTable()
   AddColumn(iT, 1, "test1", true, QTABLE_CACHED_STRING_TYPE, 10)
   AddColumn(iT, 2, "test2", true, QTABLE_CACHED_STRING_TYPE, 10)
   CreateWindow(iT)
   SetWindowCaption(iT,"test")
   InsertRow(iT,1)
   SetCell(iT, 1, 1, "test1")
   SetCell(iT, 1, 2, "test2")
   SetColor(iT, 1, 2, 255, 0)
end


ответ такой:

У Вас не хватает параметров в функции SetColor,
исправьте так:
Код
SetColor (iT, 1, 2, 255, 0, -1, -1)
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Sergey Gorokhov ,Господи, да я и привёл пример кода, даже с комментариями!
Это не пример кода, а лишь пара строк по которым нет никакой возможности воспроизвести проблему.
Функции onInit, onStop, onClose
 
Владимир,
Цитата
Владимир написал:
1. Не работает раскраска ячеек: вызов SetCell меняет содержимое ячеек "автоматически", а вот на SetColor она пилюёт: всё остаётся чёрно-белым, а я бы хотел раскрасить таблицу как попугая: цвет - это тоже информация, и весьма наглядная.
Для анализа нужен пример кода, на котором воспроизводится проблема.

Цитата
Владимир написал:
2. Попытка динамически обновлять количество строк в таблице закончилась крахом. Я делал так:
Для анализа нужен пример кода, на котором воспроизводится проблема.
Словесное описание во всех подобных вопросах только вносит смуту и порождает лишние вопросы.
Проще - быстрее - надежней, привести пример кода на котором повторяется проблема (а не пару строк), тогда и решение Вы получите в разы быстрее.
Более быстрый способ, all_trades
 
Попробуйте SearchItems
Развитие Trans2Quik
 
Цитата
Юрий Z написал:
Данное API уже позволяет получать тики в обход qlua/qpile? Как знаю, оно уже давно значительно не обновлялось.

Нет не позволяет, но это же не делает его не "API для внешних программ"
если Вам нужен аналог qlua/qpile то для этого уже есть FIX Client Connector
но он платный.
Запуск скрипта через dofile
 
Цитата
Сергей написал:
В случае, если lua скрипт, запускаемый через окно Доступные скрипты, будет содержать только одну строчку dofile("Адрес скрипта lua, который хотим запустить"), могут ли быть какие то странности в работе такого скрипта по сравнению с тем, если бы он был запущен напрямую?

Если скриптов будет несколько, то в них не должно быть функций с одинаковыми именами, в остальном не должно быть проблем.
Развитие Trans2Quik
 
Цитата
Юрий Z написал:
Так же бы хотелось видеть расширение API для внешних программ, взаместо уступающих qlua/qpile.

Trans2Quik - это и есть  расширение API для внешних программ
Как убрать нуль после точки?, .0
 
Владимир,
То что ситуация повторяется не всегда, совершенно не значит что мы сможем разобраться по отдельным строкам кода.
Просьба привести полный пример кода на котором повторяется проблема, иначе разбор может затянуться на века.

Например, Вы знаете что  функция tonumber может принимать два параметра, а не один, и если случайно передать туда что попало во второй параметр, то тоже будет nil?
мы же не знаем что Вы туда передаете. ну "s" и что? а вдруг эта самая "s" и не "s" вовсе, а функция или еще что. Вот и получается что мы можем только гадать как у Вас там устроено, а Вы будете эти догадки отметать. И так по кругу пока воображения на догадки хватает.
Роботы всякие и прочие глупости
 
Цитата
s_mike@rambler.ru написал:
Сергей,

вот и приведите эту последовательность. Или последовательности.

только желательно в общем виде. Я пытался многими способами и все равно время от времени получаю от людей, которые пользуются моими роботами логи, в которых видны невообразимые чудеса в вопросе получаемых роботами данных.

Как уже было сказано и еще раз повторим, надежного способа НЕТ.
Нельзя надежно определить что данные актуальны в условиях непрерывно поступающих данных.
Можно примерно оценить актуальность, сравнивая текущее время с временем на самих данных (тут уже могут быть разные варианты с синхронизацией часов и т.п.)
Если Вы скажите, что это не надежно, то будете абсолютно правы, потому что как уже было сказано надежного способа НЕТ.
Роботы всякие и прочие глупости
 
s_mike@rambler.ru,
Михаил, к чему это все?
Мы же с Вами уже не один год общаемся и ровно этот вопрос совершенно точно уже обсуждали.
ответ не поменялся, надежного способа нет, есть разные варианты которые могут дать более менее правдивую оценку актуальности данных.
Таблица транзакций
 
Цитата
Старатель написал:
В OnTransReply как прочитать этот параметр?

Такой возможности нет
таблицы сделки и позиции, добавить поле
 
Попробуйте настройку
Преобразование целого числа в строку в QUIK 8.8+
 
Nikolay,
Тема про "math.tointeger" возникла из-за появления ".0", к большим числам она не относится.
Автор хотел исследовать вопрос и ему было предложено такое решение для ознакомления

Цитата
Nikolay написал:
С другой стороны, не очень понятно зачем вообще применять форматирование для чисел типа integer. tostring итак их выводит корректно. Если только вы не гарантируете тип integer для номера заявки. Но тогда это будет уже другой разговор
применять форматирование не нужно, в той же ветке сказано что tostring будет работать с большими числами, собственно Вы и сами это говорили.

По сути, с числами есть две проблемы, первая это появление ".0" у любых чисел, и эта проблема чинится предложенной функцией.
Вторая это некорректное преобразование 19ти значных дробных чисел в строку и решения для нее нет.
Но в практике, 19 ти значные числа есть только в номерах заявок/сделок, а для них нет никаких практических задач которые могли бы привести к преобразованию их в дробное число.
Преобразование целого числа в строку в QUIK 8.8+
 
Nikolay,
Допустим. А зачем делать арифметические операции с номером заявки/сделки?
Статус сессии.
 
Kolossi,
Да Вы правы, предложенный вариант с tradingphase не решает поставленной задачи.
Согласно биржевому протоколу, в указанном параметре tradingphase нет отдельного признака для вечерней сессии, а значит и в QUIK Вы его никак увидеть не сможете.
Сбой передачи данных по ODBC при переходе на 19-тизначный номер заявки, Сбой передачи данных по ODBC при переходе на 19-тизначный номер заявки
 
Цитата
Сергей написал:
Правда, хелп QUIK'а (info.chm от 20.07.20) версии 8.8.4 (ftp.quik.ru//public/updates/8.8/quik_8.8.4_upd.zip от 21.08.20) все еще упорно говорит нам о том, что там decimal, да еще и с 15 знаками в целой части.
Это ошибка в документации
приносим извинения.
Документацию обязательно поправим
SetCell
 
Цитата
Старатель написал:
Это указано и в 6, 7, 8.1 версиях. И там SetCell работает нормально с необязательным пятым параметром
Это ничего не значит
Как уже было сказано в соответствии с документацией, последнего параметра не должно быть, а Вы его передаете. Значит формально функция SetCell выдает правильный результат.
Если ранее работало по другому значит ранее работало не правильно.
SetCell
 
В документации сказано:
Цитата
Для столбцов со строковыми типами данных параметр «value» не задается.

т.е. формально, Вы указали параметр которого не должно быть и значит должен быть false
если его убрать то функция вернет true
Сбой передачи данных по ODBC при переходе на 19-тизначный номер заявки, Сбой передачи данных по ODBC при переходе на 19-тизначный номер заявки
 
Цитата
Алексей Украинцев написал:
Сергей, почему тогда у меня это не получается?
Читайте внимательней.
Цитата
Sergey Gorokhov написал:
К сожалению произошла ошибка, через терминал QUIK при экспорте по ODBC передать параметр номера заявки в виде числа нельзя.
Цитата
Sergey Gorokhov написал:
Да, это просто опечатка. В виде строки нельзя.
SetCell
 
Старатель,
просьба уточнить что передается в переменных. А еще лучше приведите полный код на котором повторяется проблема
Преобразование целого числа в строку в QUIK 8.8+
 
Цитата
Александр М написал:
Что еще предложите?
Предлагаем быть более внимательным в передаче параметров в функцию.
от куда у Вас возьмется параметр "x" если есть только переменная "a"?
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 75 След.
Наверх