Como faço para fechar todos os pedidos com lucro total em pips? - página 7

 
khasan kayumov:
Alguém poderia, por favor, aconselhar como fechar todos os pedidos pelo lucro total em pips?

Leia os posts, alguns eu não entendi. Acho que ainda não os encontrei.

Entendi esta pergunta da seguinte forma: como fechar as ordens abertas para diferentes instrumentos quando o lucro é alcançado.

Talvez não seja muito inteligente, mas é a maneira como eu a implementei:

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;
                    }
                }    
            }          
         }
     }
}
//+------------------------------------------------------------------+
//|Конец                                                             |
//+------------------------------------------------------------------+
 

O que eu não entendo é isto.

Você está ganhando dinheiro ou ganhando pontos?

Por que procurar resultados complexos quando o resultado (MAIN!) está sempre à sua frente: se você está satisfeito com os lucros totais (em dinheiro!) de todos os negócios, então feche a maldita coisa!

 
Artemij:

O que eu não entendo é isto.

Você está ganhando dinheiro ou ganhando pontos?

Por que se preocupar em buscar resultados complexos, quando o resultado necessário (MAIN!) está sempre à sua frente: se o lucro total (em dinheiro!) de todos os negócios lhe convém, então feche tudo!


Se o lucro é em dinheiro, então quando você muda o tamanho do lote, você deve alterar proporcionalmente o valor do lucro. Isto é inconveniente.

 
Vadym Kulish:

Leia os posts, alguns deles eu não entendi. Acho que ainda não os encontrei.

Entendi esta pergunta da seguinte forma: como fechar as ordens abertas para diferentes instrumentos quando o lucro é alcançado.

Talvez não seja muito elegante, mas foi assim que eu implementei esta pergunta:

Por que precisamos de uma pausa tão grande? Tudo está funcionando rápido agora.

Eu fecho sem nenhuma pausa.

 
Renat Akhtyamov:

Por que a longa pausa? Está funcionando rápido agora...

Eu não faço nenhuma pausa.


É um resquício do código anterior - eu não entendi a natureza do erro e o significado doMarketInfo(OrderSymbol(),MODE_ASK), Deixei-o lá só por precaução. O Expert Advisor está incompleto.