Discussione sull’articolo "Guida Step-By-Step alla scrittura di un Expert Advisor in MQL5 per Principianti" - pagina 12

 

Vi prego di perdonarmi, all'epoca non avevo capito come usare questo pulsante, ma ora credo di averlo capito.

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.13.22.13';
 if(OrdersTotal()==0)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

Vi prego di perdonarmi, allora non capivo come usare questo pulsante, ora credo di averlo capito.

Il problema è la condizione:

if( OrdersTotal() == 0 )

Manca un controllo che la data specificata data1 si sia verificata. Ora si dovrebbe aprire un ordine immediatamente con il primo tick, se non ci sono ordini aperti! In altre parole, dovete fare come qui,

if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)

ma specificare il giorno, l'ora, il minuto e il secondo corretti (pochi secondi).

Sì e un'altra cosa. I prezzi sl e tp dovrebbero essere normalizzati, altrimenti si potrebbero verificare degli errori.

 

Qualcosa ha smesso di unirsi al grafico e per favore ditemi cosa significa normalizzare i prezzi sl e tp?

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.3;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.15.08.30';
 if(OrdersTotal()==0 && Hour( )==15 && Minute( )==08 && Seconds( )>=30)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==15 && Minute( )==09 && Seconds( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

Vi prego di perdonarmi, non avevo capito come utilizzare questo pulsante, ora credo di averlo capito.

extern datetime date1=D'2014.10.28 13:22:13';
extern datetime date2=D'2014.10.29 13:22:13';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket = 0;

void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - nessuna posizione
   case 0:
   {
     // Quando arriva l'ora della data1, aprire una posizione
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend( ... );
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 era una posizione
   case 1:
   {
     // Chiudere la posizione all'arrivo dell'ora della data2
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

Quando si verifica la data1 apriamo una posizione, quando si verifica la data2 la chiudiamo, dopodiché non facciamo nulla fino al riavvio.

 
Grenjohn:

Qualcosa ha smesso di unirsi al grafico e per favore ditemi cosa significa normalizzare i prezzi sl e tp?

https://www.mql5.com/it/docs/convert/normalizedouble
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Grazie a tutti per l'aiuto e per la pazienza, ma finora, purtroppo, non funziona!!!?

Sto cercando di aggiungere un Expert Advisor, ma non viene aggiunto!!!?

extern datetime date1=D'2014.10.29 22:29:10';
extern datetime date2=D'2014.10.29 21:30:00';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.30;
int ticket = 0;
void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - nessuna posizione
   case 0:
   {
     // Quando arriva l'ora della data1, aprire una posizione
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 era una posizione
   case 1:
   {
     // Chiudere la posizione quando arriva l'ora della data2
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket,Lots,Bid,20,Green) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}


 
Grenjohn:

Grazie a tutti per l'aiuto e per la pazienza, ma finora, purtroppo, non funziona!!!?

Sto cercando di aggiungere un Expert Advisor, ma non viene aggiunto!!!?


Significa che non è stato creato un Expert Advisor, ma un indicatore.

Creare un nuovo EA attraverso la procedura guidata e sostituire solo il codice della funzione OnStart e tutte le variabili globali/parametri esterni.

 
komposter:

Significa che non è stato creato un Expert Advisor, ma un indicatore.

Create un nuovo EA attraverso la procedura guidata e sostituite solo il codice della funzione OnStart e tutte le variabili globali/parametri esterni.

Molto probabilmente ha creato un Expert Advisor, ma con la funzione OnStart(), che è solo per gli script.
 
Grenjohn:

Grazie a tutti per l'aiuto e per la pazienza, ma finora, purtroppo, non funziona!!!?

Sto cercando di aggiungere un Expert Advisor, ma non viene aggiunto!!!?


Creare un nuovo Expert Advisor in MQL4, copiare il codice esistente e sostituire la linea

void OnStart()

da

void OnTick()

Questo nel caso in cui si voglia creare un Expert Advisor. Se si desidera creare uno script, creare un nuovo script e copiare completamente il codice esistente senza modifiche (anche se non ha senso uno script in caso di trading basato sul tempo).

 
Dall'articolo:
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

Dove si trova il codice che soddisfa questa descrizione? Non capisco qualcosa, oppure non c'è nulla di simile nel codice.