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

 
Вот, проверил этот код сейчас на реальном счёте, всё ок, рыночные ордера все модифицировал, но вот только отложки не тронул. В чём беда? Как думаете?
 
Noterday:
Вот, проверил этот код сейчас на реальном счёте, всё ок, рыночные ордера все модифицировал, но вот только отложки не тронул. В чём беда? Как думаете?


в условии

         if(cmd==OP_BUY || cmd==OP_SELL)

и в условии

if(cmd==OP_BUY)
 
Не понял :(
 
Noterday:
Не понял :(

Там же и в названии скрипта звучит фраза, что только рыночные ордера... уберите эти условия для рыночных ордеров, тогда будут выполняться условия для рыночных и отложенных - вот и все. Нет не все - внимательно ознакомьтесь с этим - требования и ограничения... и вбейте в обязательном порядке выполнение этих минимальных ограничений в соответствующие условия Ваших отложенных ордеров, чтобы и они выполнялись тоже.
 
KONDOR:


Так у меня таких строчек вообще нет, я не выбираю тип СОВСЕМ, а модифицирую ВСЕ ПОПАВШИЕСЯ, будь то отложенник или рыночный.
 
Noterday:
Так у меня таких строчек вообще нет, я не выбираю тип СОВСЕМ, а модифицирую ВСЕ ПОПАВШИЕСЯ, будь то отложенник или рыночный.

Я же и пишу Вам внимательно ознакомьтесь: "Ограничение по дистанции заморозки FreezeLevel.

Закрытие рыночных ордеров не осуществляется, если значения StopLoss или TakeProfit нарушают требования по параметру FreezeLevel.
Модификация StopLoss или TakeProfit рыночных ордеров не осуществляется, если значения StopLoss или TakeProfit нарушают требования по параметру StopLevel.
Удаление и модификация отложенных ордеров не осуществляется, если заявленная цена открытия ордера нарушает требования по параметру Freezelevel."
 

Всё, разобрался, ошибка была тут:

if (OrdersTotal()!=0)
  {
   
   bool   modify;
   int    Done=0;
   for (i = 1; i <= OrdersTotal(); i++)
      {
       if (OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES) == true)
         {
          Stop = OrderStopLoss();
          Take = OrderTakeProfit();
          Print("Пробую модифицировать ",i," ордер (#",OrderTicket(),")");
          modify = OrderModify(OrderTicket(),0,SL,TP,0,0);                          <<<--------------------- во втором параметре OrderModify нужно ставить не ноль а Orderopenprice()
          if (modify==true) Done++;
          if (modify==false)
            {
             int error = GetLastError();
             Print("                 Неудача... Ошибка ",error);
             Sleep(5000);
            }
         }
       }
    Alert("Модифицировано  ",Done,"  из  ",OrdersTotal());
    Sleep(10000);
   }
 
Noterday:
Так у меня таких строчек вообще нет, я не выбираю тип СОВСЕМ, а модифицирую ВСЕ ПОПАВШИЕСЯ, будь то отложенник или рыночный.


Кроме этого в условии этом

( cmd==OP_BUYLIMIT || cmd==OP_SELLSTOP)

меняете аналогично под выбираемый ордер (меняете условие определения типа ордера на одно из этих:

Constant Value Description
OP_BUY 0 Buying position.
OP_SELL 1 Selling position.
OP_BUYLIMIT 2 Buy limit pending position.
OP_SELLLIMIT 3 Sell limit pending position.
OP_BUYSTOP 4 Buy stop pending position.
OP_SELLSTOP 5 Sell stop pending position.
и уже потом проверяете на соответствие "Требований и ограничения при проведении торговых операций" того или иного выбранного ордера, у каждого типа выбранного ордера свои требования и ограничения... а здесь скрипт только для рыночных... Правьте по аналогии и все - вся инфа у Вас есть. Спокойно, внимательно и методично.

 
Да всё верно изначально написано было, ошибка в выше описанной фигне была. ВСЕМ СПАСИБО! =)))
 
Скажите,а можно ли ускорять процесс тестирования?
Причина обращения: