Это ошибка не в коде, а в котировках.
Поищите по форуму.
а такая цена точно есть на периоде тестирования?
Не нравятся мне Ваши условия, требуется точное совпадение, что при дискретных котировках может и не сработать.
Предпочтительно брать область приближения, типа этого. Спецы уточнят.
//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 пунктов он цели
Я вставляю комментарии в код которые записываются в журнал и всегда можно увидеть в каком месте кода происходит ошибка
Print ("Обозначение места в коде "); можно цифры ставить или описание операции которая будет проделана в следующий момент.
На мой взгляд у тебя что-то с данными не так. Возможно слишком близко стопы ставишь. Или ненормализованные значения цен.
ну правильно всё, тело цикла не выполнится ни разу т.к. OrdersTotal()=0, а цикл у тебя от 0 до OrdersTotal() исключительно
делай так:
for (i=0;i<=OrdersTotal();i++)
PS и как правильно подсказали сравнивать double на равенство гиблое дело
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
У меня проблема, в простейшем коде тестер выдаёт ошибку, а компиляция проходит без замечаний.
//===========================================================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)
Заранее спасибо!!!