[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 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