Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Есть вопросы автору статьи? Обсуди их на форуме!
Forex Trader
114252
Forex Trader 2006.09.13 21:32 
библиотечная функция меняет размер в первом измерении массива
вот кусок кода как это делается...
 ...
 if(cntOrd<=0) return(false);
 ...
 int    cntTik[1]={0};                      ArrayResize(cntTik,cntOrd);
 double TikProp[1][3]={0.0,0.0,0.0};        ArrayResize(TikProp,cntOrd);
 double InfoOrders[1][4]={0.0,0.0,0.0,0.0}; ArrayResize(InfoOrders,cntOrd);
 
 for(i=0; i<cntOrd; i++)
   {
    cntTik[i]=iOrd_cur[i+1][5];                                       err_otlov(89);
    TikProp[i][0]=MarketInfo(MagicToString(cntTik[i]),MODE_POINT);    err_otlov(90);
    TikProp[i][1]=ContractPr(cntTik[i],1,accLeverage);                err_otlov(91);
    TikProp[i][2]=ContractPr(cntTik[i],0,accLeverage);
   }
 if(err_otlov(94)>0) Print("cntOrd/i=",cntOrd,"/",i,"   Size cntTik/TikProp=",ArraySize(cntTik),"/",ArraySize(TikProp));
 ...



иногда при перекомпиляции возникает ошибка

23:44:17 2006.05.30 14:05 Moving_Average EURUSD,M30: R111 стр.90: ERROR=4002/
23:44:17 2006.05.30 14:05 Moving_Average EURUSD,M30: R111 стр.91: ERROR=4002/
23:44:17 2006.05.30 14:05 Moving_Average EURUSD,M30: R111 стр.94: ERROR=4002/
23:44:17 2006.05.30 14:05 Moving_Average EURUSD,M30: cntOrd/i=1/1 Size cntTik/TikProp=1/0


при повторной перекомпиляции ошибка исчезает ?!

Forex Trader
114252
Forex Trader 2006.09.13 22:12  
А что в этой ситуации возвращает ArrayResize(TikProp,cntOrd); и какой результат GetLastError() после этого?
Forex Trader
114252
Forex Trader 2006.09.30 18:29  
А что в этой ситуации возвращает ArrayResize(TikProp,cntOrd); и какой результат GetLastError() после этого?

чтобы это выяснить, добавил немного кода и подождал...
повторение ситуации.
код:
...
 int    cntTik[1]={0};                      ArrayResize(cntTik,cntOrd);
 double TikProp[1][3]={0.0,0.0,0.0};        ArrayResize(TikProp,cntOrd);
 double InfoOrders[1][4]={0.0,0.0,0.0,0.0}; int tmp0=ArrayResize(InfoOrders,cntOrd);
 err_otlov(86);
 for(i=0; i<cntOrd; i++)        //заполним массив свойств ордеров
   {
    cntTik[i]=iOrd_cur[i+1][5]; err_otlov(89);
    TikProp[i][0]=MarketInfo(MagicToString(cntTik[i]),MODE_POINT); err_otlov(90);
    TikProp[i][1]=ContractPr(cntTik[i],1,accLeverage); err_otlov(91);//PiP
    TikProp[i][2]=ContractPr(cntTik[i],0,accLeverage); //StLot
   }
 if(err_otlov(94)>0) Print("cntOrd/i=",cntOrd,"/",i,"   Size cntTik/TikProp=",ArraySize(cntTik),"/",ArraySize(TikProp),"/",tmp0);

...

int err_otlov(int stroka)
{
 int er_=GetLastError(); 
 if(er_>4000){Print("XXX стр.",stroka,": ERROR=",er_,"/");
              return(er_);}
 return(0);
}



принтует:

16:55:51 2006.01.02 20:00 Moving_Average EURUSD,M30: R111 стр.90: ERROR=4002/
16:55:51 2006.01.02 20:00 Moving_Average EURUSD,M30: R111 стр.91: ERROR=4002/
16:55:51 2006.01.02 20:00 Moving_Average EURUSD,M30: R111 стр.94: ERROR=4002/
16:55:51 2006.01.02 20:00 Moving_Average EURUSD,M30: cntOrd/i=1/1 Size cntTik/TikProp=1/0/0

чтобы ошибка исчезла, достаточно перегрузить терминал.

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий