Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 38

 
Vitalie Postolache:

Poi passate l'argomento alla funzione, dato che viene fornito. Anche se è meglio rimuoverlo, è una tautologia.

E non tutti gli ordini nel ciclo saranno ricalcolati.

for(i=OrdersTotal()-1; i>=0; i--)
Ho una buona idea per confrontare con altri EAs nello stesso ticker.
L'ho corretto, ho inserito un argomento, l'ho messo nello scope globale, ora genera un avviso che questo argomento è già usato come input in altre funzioni

Il biglietto con sovrascrittura, lavorando dall'ultimo ordine con un Martin.

e poi come rimuovere la dichiarazione globale 'count' hides alla linea...

è interessante farlo funzionare come dovrebbe.

Finora, il tester mostra risultati abbastanza buoni, e a volte "errori insormontabili nell'Expert Advisor".

 

Saluti.

Mi sono imbattuto in una registrazione in questo formato:

if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0;

Cioè... qui l'istruzione condizionale if è stata sostituita da una funzione commerciale di tipo bool invece di un'espressione. Ho capito bene che tale scrittura è uguale a :

if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?

Ho cercato sia nell'Aiuto che nel tutorial - non ho trovato un tale formato.

Posso usare questo modo per scrivere direttamente funzioni di tipo diverso invece di un'espressione? E se sì, quale sarebbe l'algoritmo?

 
trader781:
L'ho sistemato, ho messo un argomento, l'ho messo nello scope globale, ora ricevo un avviso che questo argomento è già usato come input in altre funzioni

Biglietto con sovrascrittura, lavoro dall'ultimo ordine con martin

e poi come rimuovere la dichiarazione di 'count' nasconde la dichiarazione globale alla linea...

È interessante farlo funzionare come dovrebbe.

Finora, il tester mostra risultati abbastanza buoni, ma ci sono "errori insormontabili nell'Expert Advisor".

Per favore mostratemi la versione corretta, perché indovinare esce senza il codice.
 
spoiltboy:

Saluti.

Mi sono imbattuto in una registrazione in questo formato:

if (OrderSelect(ticket, SELECT_BY_TICKET)) OrderModify(ticket, OrderOpenPrice(), SL, TP, 0;

Cioè... qui l'istruzione condizionale if è stata sostituita da una funzione commerciale di tipo bool invece di un'espressione. Ho capito bene che tale scrittura è uguale a :

if(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0};?

Ho cercato sia nell'Aiuto che nel tutorial - non ho trovato un tale formato.

Posso usare questo modo per scrivere direttamente funzioni di tipo diverso invece di un'espressione? Se sì, quale sarebbe l'algoritmo?

Proprio così,se(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; non funziona. La condizione non deve essere buttata fuori dalle parentesi.

Mase(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; è possibile.

 
Vitalie Postolache:

Proprio comese(OrderSelect(ticket,SELECT_BY_TICKET))==true {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; non funziona. La condizione non deve essere buttata fuori dalle parentesi.

Mase(OrderSelect(ticket,SELECT_BY_TICKET)==true) {OrderModify(ticket,OrderOpenPrice(), SL, TP,0}; è possibile.

Sì, mi è sfuggito un refuso con una parentesi. Altrimenti, la domanda è pertinente.
 
Vitalie Postolache:
Per favore, mostratemi la versione corretta, perché senza il codice è un'ipotesi.

Ok.

Più o meno ho finito quello che potevo. La descrizione è fatta. L'obiettivo è capire perché non funziona come vorrei.

File:
count.mq4  19 kb
 
//+------------------------------------------------------------------+
//|                                                      ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss     = 1000; //Стоплосс ордера  
extern double TakeProfit   = 1500; //Тейкпрофит ордера
extern double TrailingStop = 1000; // трал
extern int    Delta        = 100; //Расстояние от цены для установки ордера
extern double LOT          = 0.1; //Объём позиции
extern int    Magic        =200;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  if (TrailingStop!=0) Trailing();
  
   //ИНДИКАТОР RSI
   double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
   double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
  
   int b,s,p,res;
   double BuyPrice=Ask+Delta*Point;
   double SellPrice=Bid-Delta*Point;
  
   for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP) b++;
        if (OrderType()==OP_SELLSTOP) s++;        
      }  
    }
      double SL,TP;
//---- buy stop
   if(RSI0>50&&RSI1<50)
     {
          
      res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
     }        
//---- sell stop  
   if(RSI0<50&&RSI1>50)
     {

      res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red );
     }
//---- buy stop делете
      if(RSI0<50&&RSI1>50)
    {
     OrderDelete( OrderTicket());
    
    }
//---- sell stop делете
      if(RSI0>50&&RSI1<50)
    {
     OrderDelete( OrderTicket());
    
    }
//----
   return(0);
  }
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------

void Trailing()
{
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol()||OrderMagicNumber()==Magic)
       if(OrderType()==OP_BUY)
         {
          if(TrailingStop>0)  
            {                
              if(Bid-OrderOpenPrice()>TrailingStop)
               {
                 if(OrderStopLoss()<Bid-TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
                  }
               }
            }
         }
        
        if(OrderType()==OP_SELL)
         {
           if(TrailingStop>0)  
            {                
              if((OrderOpenPrice()-Ask)>TrailingStop)
               {
                 if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
                  }
               }
            }
         }  
   }
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
Gli ordini non vengono cancellati per favore aiutatemi
 

Gli ordini non vengono cancellati per favore aiutatemi
come ha ottenuto un biglietto di un ordine non aperto?
 
trader781:
e come ha ottenuto il biglietto per l'ordine non aperto?
Giusto? Non riesco proprio a metterlo dentro.
for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
             if (сигнал_bue) OrderDelete(OrderTicket());
                 else b++;
        if (OrderType()==OP_SELLSTOP)
             if (сигнал_sell) OrderDelete(OrderTicket());
                 else s++;
      }  
    }
 
Movlat Baghiyev:
Giusto? Non riesco proprio a metterlo dentro.
for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
             if (сигнал_bue) OrderDelete(OrderTicket());
                 else b++;
        if (OrderType()==OP_SELLSTOP)
             if (сигнал_sell) OrderDelete(OrderTicket());
                 else s++;
      }  
    }
Non so come spiegarlo. Ma è sicuramente un capolavoro.