Как закрыть все ордера по общему профиту в пунктах? - страница 7

 
khasan kayumov:
Кто нибудь подскажите пожалуйста Как закрыть все ордера по общему профиту в пунктах?

Прочитал посты, некоторые я не понял. Наверное сними не сталкивался.

Для себя этот вопрос я понял так: как закрыть открытые ордера по разным инструментам при достижении заданного профита.

Может быть не совсем элегантно, но я вопрос реализовал так:

extern int    iPrftAc       = 35;   // Закрытие всех ордеров по текущему счету.
.......

if (AccountProfit() > iPrftAc)
   {
    Print("//--> Закрытие ордеров: Условие достижения ПРИБЫЛИ ПО ТЕКУЩЕМУ СЧЕТУ!;");
    vOrderClose(9,0,"");          
   }
........
void vOrderClose(int f_iTypOrdDel,  //Тип операции выбранного ордера на удаление
                 int f_iOrderTicket,//Номер тикета ордера
                 string f_sNamSig)  //Наименование сигнала
{
.......
 if (f_iTypOrdDel==9) // Удаление всех открытых и отложенных ордеров по всем финансовым инструментам.
     {
      int CloseOrdSymAll = 0;
      do {
          CloseOrdSymAll = 0;
          for (int i=0; i<=OrdersTotal(); i++)
            {
             if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
                {
                 switch(OrderType())
                    {
                     case OP_BUY     :f_sCmdType = "OP_BUY";
                                      f_bResult = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),iSlippage,clrBlue);
                                      if (f_bResult == true) Print("//---> vOrderClose: ",f_iTypOrdDel,") Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType,"  successfully");
                                      else {
                                            Print("//--->vOrderClose: № ",f_iTypOrdDel,". Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType,", failed. Error:", GetLastError());
                                            Sleep(1000);
                                           }  
                                      CloseOrdSymAll++;
                                      break;
                                         
                     case OP_BUYLIMIT:f_sCmdType = "OP_BUYLIMIT";
                                      f_bResult = OrderDelete(OrderTicket(),CLR_NONE);
                                      if (f_bResult == true) Print("//---> vOrderClose: ",f_iTypOrdDel,") Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType," successfully");
                                      else {
                                            Print("//--->vOrderClose: № ",f_iTypOrdDel,". Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType,", failed. Error:", GetLastError());
                                            Sleep(1000);
                                           }  
                                      CloseOrdSymAll++;
                                      break;
                                         
                     case OP_BUYSTOP :f_sCmdType = "OP_BUYSTOP";
                                      f_bResult = OrderDelete(OrderTicket(),CLR_NONE);
                                      if (f_bResult == true) Print("//---> vOrderClose: ",f_iTypOrdDel,") Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType," successfully");
                                      else {
                                            Print("//--->vOrderClose: № ",f_iTypOrdDel,". Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType,", failed. Error:", GetLastError());
                                            Sleep(1000);
                                           }  
                                      CloseOrdSymAll++;
                                      break;
                                         
                     case OP_SELL    :f_sCmdType = "OP_SELL";
                                      f_bResult = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),iSlippage,clrRed);
                                      if (f_bResult == true) Print("//---> vOrderClose: ",f_iTypOrdDel,") Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType," successfully");
                                      else {
                                            Print("//--->vOrderClose: № ",f_iTypOrdDel,". Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType,", failed. Error:", GetLastError());
                                            Sleep(1000);
                                           }  
                                      CloseOrdSymAll++;
                                      break;
                                         
                     case OP_SELLLIMIT:f_sCmdType = "OP_SELLLIMIT";
                                       f_bResult = OrderDelete(OrderTicket(),CLR_NONE);
                                       if (f_bResult == true) Print("//---> vOrderClose: ",f_iTypOrdDel,") Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType," successfully");
                                       else {
                                             Print("//--->vOrderClose: № ",f_iTypOrdDel,". Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType,", failed. Error:", GetLastError());
                                             Sleep(1000);
                                            }  
                                       CloseOrdSymAll++;
                                       break;
                                         
                     case OP_SELLSTOP :f_sCmdType = "OP_SELLSTOP";
                                       f_bResult = OrderDelete(OrderTicket(),CLR_NONE);
                                       if (f_bResult == true) Print("//---> vOrderClose: ",f_iTypOrdDel,") Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType," successfully");
                                       else {
                                             Print("//--->vOrderClose: № ",f_iTypOrdDel,". Order(#",OrderTicket(),") Type(#",OrderType(),") ",f_sCmdType,", failed. Error:", GetLastError());
                                             Sleep(1000);
                                            }  
                                       CloseOrdSymAll++;
                                       break;
                    }
                }    
            }          
         }
     }
}
//+------------------------------------------------------------------+
//|Конец                                                             |
//+------------------------------------------------------------------+
 

А я вот что-то не понимаю.

Вы деньги зарабатываете или пункты? 

Зачем заморачиваться на поиск сложных результатов, когда искомый (ГЛАВНЫЙ!) результат всегда перед глазами: если общий профт (В ДЕНЬГАХ!) всех сделок Вас устраивает, закрываем всё к чёртовой матери!

 
Artemij:

А я вот что-то не понимаю.

Вы деньги зарабатываете или пункты? 

Зачем заморачиваться на поиск сложных результатов, когда искомый (ГЛАВНЫЙ!) результат всегда перед глазами: если общий профт (В ДЕНЬГАХ!) всех сделок Вас устраивает, закрываем всё к чёртовой матери!


Если прибыль в деньгах, то при изменении размера лота надо будет пропорционально менять значение прибыли.  Это неудобно.

 
Vadym Kulish:

Прочитал посты, некоторые я не понял. Наверное сними не сталкивался.

Для себя этот вопрос я понял так: как закрыть открытые ордера по разным инструментам при достижении заданного профита.

Может быть не совсем элегантно, но я вопрос реализовал так:

А зачем пауза такая большая? Сейчас всё шустро работает...

Я вообще без паузы закрываю.

 
Renat Akhtyamov:

А зачем пауза такая большая? Сейчас всё шустро работает...

Я вообще без паузы закрываю.


Это пережиток предыдущих вариантов кода, кода я не понимал природы ошибки, что  смысл в MarketInfo(OrderSymbol(),MODE_ASK), теперь оставил на всякий случай. Експерт не дописан.