Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 672

 
fxsaber:
Grazie!!!
 

Sto scrivendo un EA che lavora sulla base della martingala.

Come posso fare in modo che chiuda tutti gli ordini che ha aperto quando viene raggiunta la massima perdita ammissibile in pip su una coppia di valute?

 
RichLux:

Sto scrivendo un EA che lavora sulla base della martingala.

Come posso fare in modo che chiuda tutti gli ordini che ha aperto quando viene raggiunta la massima perdita ammissibile in pip su una coppia di valute?


double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }


la funzione restituisce i profitti nelle posizioni aperte, può essere filtrata per simbolo, tipo, magik

Poi si chiudono tutte le posizioni

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
 
Vladislav Andruschenko:

...

la funzione restituisce i profitti nelle pose di ottobre, può essere filtrata per simbolo, tipo, magik

Poi chiudere tutte le posizioni

Grazie, ma sono interessato a chiudere in perdita. Come può essere implementato?
 

Cioè, vi ho dato quanto sopra,

Quindi il profitto è un termine generico.

-20 è -20

se(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1)

 
Vladislav Andruschenko:

double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }

Grazie, ora capisco.

Quello che non è ancora chiaro nel codice è:(order_type<0||OrderType()==order_type) QUESTO può essere letto come "e ordine di vendere o comprare"?

 
RichLux:

order_type= OP_BUY OP_SELL -1

 

Il compilatore si lamenta anche diClosePosBySelect.

Questa funzione deve essere scritta separatamente?

 
I commenti non pertinenti a questo argomento sono stati spostati in "Mettere l'ora corrente sul grafico".
 

Vladislav Andruschenko

RichLux:

Il compilatore si lamenta anche diClosePosBySelect.

Questa funzione deve essere scritta separatamente?

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }