[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 502

 
правка | удалить Помогите найти ф-цию для выставления ордеров, учитывающая проскальзывание и без 130-134 ошибок.
 
nuan:
правка | удалить Помогите найти ф-цию для выставления ордеров, учитывающая проскальзывание и без 130-134 ошибок.

Свой вариант покажите.
 
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point,"BUY",0,0,Red);

Print(GetLastError());

при любых значениях SL и TP выдает 134, часто вообще не ставит ордер.

открывает при условии if(NumberOfOrders(NULL)==0)


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

 
извините, почему ставится не один ордер разобрался
 
nuan:
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point,"BUY",0,0,Red);

Print(GetLastError());

при любых значениях SL и TP выдает 134, часто вообще не ставит ордер.

открывает при условии if(NumberOfOrders(NULL)==0)


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


ERR_NOT_ENOUGH_MONEY 134 Недостаточно денег для совершения операции
 

Доброго времени суток. Делаю советник, в нем открывается 2 ордера в определенном условии (образно скажем так: при повышении и понижении цены). При повышении открывается 2, когда цена идет вниз, то закрываются эти 2 и открываются новые 2. Один ордер идет без тейк профита, второй с тейком. Проблема со вторым. Во время, когда приходит час его смерти, он не выбирается, вот код для удаления оредров:

for (int a = 0; a < OrdersTotal()-1; a++)
    if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES))
        if (OrderComment() == "MyOrd" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

Такой же и для OP_BUY. Сравниваю комментарии, чтобы знать точно, что это ордер открытый моим советником, а не ручками или другим советником. Вот проблема с OrderSelect, он просто не хочет выбирать ордер с тейк профитом. Когда доходит a до его номера, то OrderSelect возвращает false. В журнале тестера ошибки нет, GetLastError тоже говорит, что все в порядке (возвращает 0). Почему он не выбирается? Почему нет ошибки, если он не смог его выбрать? Всем спасибо.

 
Вопрос в догонку. Почему в тестере, когда ставлю период на месяц+, тогда в результатах появляются пятизнаки? Везде, где ставятся цены у меня стоит NormalizeDouble(SomeValue, Digits). И только в результатах, журнал не ругается, хотя когда еще не знал про функцию округления, тогда ругался.
 

условие

a < OrdersTotal()-1

проверяется на каждой итерации.

подумайте - чему будет равно а, и чему OrdersTotal()-1 - после первой итерации

 
Solree:

OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

У лота и цены разные Digits.
 

Solree:

NormalizeDouble(OrderLots(), Digits)


и ещё - лот не так просто нормализовать.
надо учитывать допустимый шаг изменения лота.
например, если шаг 0.01, то нормализация на 2
а если шаг 0.1, то нормализация на 1
Причина обращения: