Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Как протестировать программу перед покупкой?
luxerman
113
luxerman 2016.07.20 13:56 

Не срабатывает функция ExpertRemove();

if(BuyCnt == 0)//запуск только одного ордера
{

ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

}

if(OrderSelect(ticket, SELECT_BY_POS)==true){
       double stopper = OrderStopLoss();   //стоплосс этого ордера
          if(Price <= stopper){     //Price это Bid, тут условие если B
              ExpertRemove();
            }
          }

При таком варианте эта функция не срабатывает

Vladimir Paukas
4099
Vladimir Paukas 2016.07.20 14:13  
luxerman:

Не срабатывает функция ExpertRemove();

if(BuyCnt == 0)//запуск только одного ордера
{

ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

}

if(OrderSelect(ticket, SELECT_BY_POS)==true){
       double stopper = OrderStopLoss();   //стоплосс этого ордера
          if(Price <= stopper){     //Price это Bid, тут условие если B
              ExpertRemove();
            }
          }

При таком варианте эта функция не срабатывает



OrderSelect надо делать по MODE_HISTORY  если ордер закрылся, его там искать надо.
luxerman
113
luxerman 2016.07.20 14:20  
paukas:

OrderSelect надо делать по MODE_HISTORY  если ордер закрылся, его там искать надо.
А более подробнее можете, я просто новичок в этом
Alexey Viktorov
5172
Alexey Viktorov 2016.07.20 15:08  

paukas по невнимательности дал неправильный совет. Бывает. Выбор ордера по тикету не зависит от места его положения, в истории или в рынке.

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

if(OrderSelect(ticket, SELECT_BY_TICKET)) // == true можно не писать

Vladimir Paukas
4099
Vladimir Paukas 2016.07.20 15:24  
AlexeyVik:

paukas по невнимательности дал неправильный совет. Бывает. Выбор ордера по тикету не зависит от места его положения, в истории или в рынке.

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

if(OrderSelect(ticket, SELECT_BY_TICKET)) // == true можно не писать

Переменная ticket например при обрыве связи не обнулится ли? Может тыркнуть на кнопку другого тф, временно отключиться электричество, случайно закрыть терминал. По истории надежней проверять.
luxerman
113
luxerman 2016.07.20 15:37  
AlexeyVik:

paukas по невнимательности дал неправильный совет. Бывает. Выбор ордера по тикету не зависит от места его положения, в истории или в рынке.

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

if(OrderSelect(ticket, SELECT_BY_TICKET)) // == true можно не писать

Всеравно перезапускается эксперт
Vladimir Paukas
4099
Vladimir Paukas 2016.07.20 15:58  
luxerman:
Всеравно перезапускается эксперт

В каком смысле?  Удаляется с графика, а потом снова появляется?
luxerman
113
luxerman 2016.07.20 20:09  
paukas:

В каком смысле?  Удаляется с графика, а потом снова появляется?
Не правильно сформулировал. Эксперт не удаляется. Заново запускается OrderSend.
Vladimir Paukas
4099
Vladimir Paukas 2016.07.21 04:34  
luxerman:
Не правильно сформулировал. Эксперт не удаляется. Заново запускается OrderSend.

Правильно. OrderSend  же  у вас впереди  стоит, вот первым и выполняется. Поставвьте в конец,

Сначала проверьте нужно ли удалять, а  потом уже запускайте новый ордер. Вот так


if(OrderSelect(ticket, SELECT_BY_POS)){
       double stopper = OrderStopLoss();   //стоплосс этого ордера
          if(Price <= stopper){     //Price это Bid, тут условие если B
              ExpertRemove();

            }

f(BuyCnt == 0)//запуск только одного ордера
{

ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

}

luxerman
113
luxerman 2016.07.21 08:59  
paukas:

Правильно. OrderSend  же  у вас впереди  стоит, вот первым и выполняется. Поставвьте в конец,

Сначала проверьте нужно ли удалять, а  потом уже запускайте новый ордер. Вот так


if(OrderSelect(ticket, SELECT_BY_POS)){
       double stopper = OrderStopLoss();   //стоплосс этого ордера
          if(Price <= stopper){     //Price это Bid, тут условие если B
              ExpertRemove();

            }

f(BuyCnt == 0)//запуск только одного ордера
{

ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

}


Так не работает

Тут просто не срабатывает условие

(BuyCnt == 0)//запуск только одного ордера
{

ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");

}

ExpertRemove();

Так работает и неважно где находится ExpertRemove();

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