MT4 - aprire un ordine una sola volta al verificarsi di una condizione

 

ciao a tutti, 

ho un problema da nabbo, ma non ne esco, 

ho un semplice EA di prova che prende due medie e le incrocia, ogni volta che si incrociano a seconda del tipo di incrocio , la  variabile signal  diventa  "SELL" o "BUY".

poi metto un IF variabile SELL  apri ordine....

funziona benissimo, eccetto che mi apre 60 ordini, cioè ( ragionando a time frame di 1m ) un ordine ogni tick / secondo

io desidero che apra un solo ordine ogni volta che avviene l'incrocio delle due medie. Non trovo un modo per farlo:

avevo pensato "conto gli ordini", e gliene faccio aprire "numero totale + 1 " ma non funziona, ho provato con la variabile time 0 e se diverso da zero non eseguire IF nulla, non riesco



// PROBLEMA  PROBLEMA PROBLEMA : apre 60 ordini ( su time frame 1 minuto ) 

// dichiaro le variabili

input int SmallSMA=10;

input int BigSMA=20;

//datetime LastActionTime = 0; // prova numero 19 cambio strada usando variabile tempo 



void OnTick()

    { 

   string signal ="";

   double SmallMovingAverage1 = iMA(_Symbol, _Period, SmallSMA, 0, MODE_SMA, PRICE_CLOSE, 1);

   double BigMovingAverage1 = iMA(_Symbol, _Period, BigSMA, 0, MODE_SMA, PRICE_CLOSE, 1);

   double SmallMovingAverage2 = iMA(_Symbol, _Period, SmallSMA, 0, MODE_SMA, PRICE_CLOSE, 2);

   double BigMovingAverage2 = iMA(_Symbol, _Period, BigSMA, 0, MODE_SMA, PRICE_CLOSE,2);

// scelgo quando è SELL

      if (BigMovingAverage1 > SmallMovingAverage1)

      if (BigMovingAverage2 < SmallMovingAverage2)

   {

   signal ="sell";

   }

// scelgo quando è buy

      if (BigMovingAverage1 < SmallMovingAverage1)

      if (BigMovingAverage2 > SmallMovingAverage2)

   {

   signal ="buy";

   }

    // credo la doppia condizione con cui aprire l'ordine BUY

   //if ((LastActionTime != Time[0]) && (signal == "buy") ) // prova numero 19 cambio strada usando variabile tempo  e metto doppia condizione, con tempo zero che dovrebbe essere esegue una volta ma non funziona

  if (signal == "buy") 

   {

     OrderSend (Symbol(), OP_BUY, 0.01, Ask, 0, 0, 0, NULL, 0, 0, Green) ;

   //  LastActionTime = Time[0]; // resetto la variabile

   }

 // credo la doppia condizione con cui aprire l'ordine SELL

  //  if ((LastActionTime != Time[0]) && (signal == "sell") )

  if  (signal == "sell") 

     OrderSend (Symbol(), OP_SELL, 0.01, Bid, 0, 0, 0, NULL, 0, 0, Green) ;

     // LastActionTime = Time[0];  // resetto la variabile



 }

 


 


 
Marco_Angiolini:

ciao a tutti, 

ho un problema da nabbo, ma non ne esco, 

ho un semplice EA di prova che prende due medie e le incrocia, ogni volta che si incrociano a seconda del tipo di incrocio , la  variabile signal  diventa  "SELL" o "BUY".

poi metto un IF variabile SELL  apri ordine....

funziona benissimo, eccetto che mi apre 60 ordini, cioè ( ragionando a time frame di 1m ) un ordine ogni tick / secondo

io desidero che apra un solo ordine ogni volta che avviene l'incrocio delle due medie. Non trovo un modo per farlo:

avevo pensato "conto gli ordini", e gliene faccio aprire "numero totale + 1 " ma non funziona, ho provato con la variabile time 0 e se diverso da zero non eseguire IF nulla, non riesco




 


Intanto dovresti unire le if sia del buy che del sell in una sola if con l'operatore & & altrimenti la prima if così come l'hai scritta non viene presa in considerazione. Poi prima di aprire un ordine dovresti fare un controllo sugli ordini e nel caso non ci siano aprire.