Нужна подсказка программиста

 

Здравствуйте.

У меня проблема, в простейшем коде тестер выдаёт ошибку, а компиляция проходит без замечаний.

//===========================================================1.4000================================================
double Z=1.4000;
for (i=0;i<OrdersTotal();i++)
{OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber()!=400)
{ if (Ask==Z+0.0015)
OrderSend(Symbol(),OP_BUYLIMIT,lot,Z,3,Ask-(SL+15)*Point,Ask+(TP-15)*Point,"My order #"+i,400,0,Green);
}}

Смысл кода: если Ask подходит к отметке в 1.4015, идет проверка по Магику=400, если ордеров с таким магиком среди открытых или отложеных нет - открыть отложенный ордер.

При тестировании выдаёт ошибку TestGenerator: unmatched data error (volume limit 106 at 2009.08.06 9:45 exceeded)

Заранее спасибо!!!

 

Это ошибка не в коде, а в котировках.

Поищите по форуму.

 
Уменьшил период тестирования - ошибок нет, но и ни одна позиция не открылась.
 

а такая цена точно есть на периоде тестирования?

 
dem220 >>:
Уменьшил период тестирования - ошибок нет, но и ни одна позиция не открылась.

Пишите больше логов - проще будет искать баги.

 
dem220 >>:
Уменьшил период тестирования - ошибок нет, но и ни одна позиция не открылась.

Не нравятся мне Ваши условия, требуется точное совпадение, что при дискретных котировках может и не сработать.

Предпочтительно брать область приближения, типа этого. Спецы уточнят.

//if (Ask==Z+0.0015) // не нравится
//так должно работать надежнее
extern int Delta=3;
...................
if (MatAbs(Ask-Z-0.0015)<=Delta*Point)// попадание в область +-Delta пунктов он цели
 
//+------------------------------------------------------------------+
//| MyTrend7.mq4 |
//| Dimon |
//| Dom |
//+------------------------------------------------------------------+
#property copyright "Dimon"
#property link "Dom"
extern int SL=150;
extern int TP=30;
extern double lot=0.1;
extern int i;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
 {
//----
 //----
 return(0);
 }
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
 {
//----
 //----
 return(0);
 }
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
 {
//===========================================================1.4000================================================
 double Z=1.4000;
 for (i=0;i<OrdersTotal();i++)
 {OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
 if (OrderMagicNumber()!=400)
 { if (Ask==Z+0.0015)
 OrderSend(Symbol(),OP_BUYLIMIT,lot,Z,3,Ask-(SL+15)*Point,Ask+(TP-15)*Point,"My order #"+i,400,0,Green);  
 }}
//===========================================================1.4100=================================================
 double Z1=1.4100;
 for (i=0;i<OrdersTotal();i++)
 {OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
 if (OrderMagicNumber()!=410)
 { if (Ask==Z1+0.0015)
 OrderSend(Symbol(),OP_BUYLIMIT,lot,Z1,3,Ask-(SL+15)*Point,Ask+(TP-15)*Point,"My order #"+i,410,0,Green);
}}  
 //===========================================================1.4150=================================================
 double Z2=1.4150;
 for (i=0;i<OrdersTotal();i++)
 {OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
 if (OrderMagicNumber()!=415)
 { if (Ask==Z2+0.0015)
 OrderSend(Symbol(),OP_BUYLIMIT,lot,Z2,3,Ask-(SL+15)*Point,Ask+(TP-15)*Point,"My order #"+i,415,0,Green);
}}  
 //----
 return(0);
 }
//+------------------------------------------------------------------+
Вот пока весь код. Он состоит из одинаковых блоков.
 

granit77 12.08.2009 16:17



//if (Ask==Z+0.0015) // не нравится
//так должно работать надежнее
extern int Delta=3;
...................
if (MatAbs(Ask-Z-0.0015)<=Delta*Point)// попадание в область +-Delta пунктов он цели


Спасибо за код, но он проблемы не решает.
 
space_cowboy >>:

а такая цена точно есть на периоде тестирования?


Да есть.

 

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

Print ("Обозначение места в коде "); можно цифры ставить или описание операции которая будет проделана в следующий момент.


На мой взгляд у тебя что-то с данными не так. Возможно слишком близко стопы ставишь. Или ненормализованные значения цен.

 

ну правильно всё, тело цикла не выполнится ни разу т.к. OrdersTotal()=0, а цикл у тебя от 0 до OrdersTotal() исключительно

делай так:

for (i=0;i<=OrdersTotal();i++)

PS и как правильно подсказали сравнивать double на равенство гиблое дело