Sistemi Esperti: Simple MA Expert Advisor

 

Simple MA Expert Advisor:

Qualcosa per coloro che vogliono provare il nuovo Strategy Tester e non hanno alcun EA.

Simple MA Expert Advisor

Author: Karlis Balcers

 

Nel tester dà un errore:

2010.04.28 06:27:44 Core 1 Errore di creazione del processo [2]

 
1Serg:

Nel tester dà un errore:

2010.04.28 06:27:44 Core 1 Errore di creazione del processo [2]

Aggiornare all'ultima versione e verificare la presenza del file metatester.exe nella directory principale del programma.
 
Renat:
Aggiornare all'ultima versione e verificare la presenza del file metatester.exe nella directory principale del programma.

Grazie, funziona.

Mancano l'ottimizzatore e la visualizzazione.

 
1Serg:

Mancano l'ottimizzatore e la visualizzazione.

L'ottimizzatore è presente: basta aumentare l'altezza della finestra del tester.

La visualizzazione sarà disponibile in un secondo momento.

 
Renat:

L'ottimizzatore è presente: basta aumentare l'altezza della finestra del tester.

La visualizzazione avverrà in seguito.

Forte!

 

Saluti,

Signor/Signora tsaktuo, ho studiato il suo codice K_eSimpleMA ed è stato molto utile per capire come è la struttura di un EA, così come concetti come lavorare con gli incroci SMA.

Apprezzo molto che tu abbia condiviso questo articolo e ti ringrazio molto.

D'altra parte ho un paio di domande, entrambe relative alla funzioneSymbolInfoTick :


Il manuale di MQL5 dice cheSymbolInfoTick(Symbol(),tick) restituisce i prezzi correnti di un simbolo specificato in una variabile di tipo MqlTick e dice anche che la funzione restituisce true se ha successo, altrimenti restituisce false.

Secondo quanto detto sopra, quello che ho capito è che il messaggio ("Failed to get Symbol info!") viene stampato se non c'è un tick ricevuto,. È corretto ? Se non è corretto, potreste dirmi di cosa si tratta?

L'altra domanda è: cosa succede se il messaggio viene stampato ogni tick?

Ancora una volta, grazie.

 

C'è:

trReq.sl=tick.ask-_Point*sl; // livello di Stop Loss dell'ordine

trReq.tp=tick.ask+_Point*tp; // Livello di take profit dell'ordine

necessario:

trReq.sl=tick.bid-_Point*sl; // livello di stop loss dell'ordine

trReq.tp=tick.bid+_Point*tp; // Livello di take profit dell'ordine

e modificare di conseguenza per SELL.

L'acquisto viene effettuato al prezzo ask, ma viene chiuso al prezzo bid.

Se si desidera limitare il profitto e la perdita, ad esempio, a 20 punti, occorre contare esattamente 20 punti dal prezzo bid (prezzo di chiusura) per BUY e ask (prezzo di chiusura) per SELL.

 

Puoi dirmi per favore come aggiungere a questo codice per fare trading sul trend MACD senza stop?

Long: il MACD sta salendo, la MA veloce ha incrociato la MA lenta dall'alto verso il basso.

Croy Long: MACD in aumento veloce MA incrociato lento MA dal basso verso l'alto

Short: MACD in calo veloce ha incrociato la MA lenta dall'alto verso il basso

Short: la MA veloce decrescente del MACD ha incrociato quella lenta dal basso verso l'alto

Ho provato in questo modo:

//+------------------------------------------------------------------+
//|MACD&DEMA.mq5 |
//|Copyright 2010, Gruppo AM2. |
//| http://www.am2_group.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, AM2 Group."
#property link      "http://www.am2_group.net"
#property version   "1.00"

//--- parametri di ingresso
input int Periods=2;          // Media mobile di periodo 1
input int Shift=38;           // Media mobile di periodo 2
input int SL=30;              // Stop Loss
input int TP=100;             // Prendere profitto
input int MAGIC=3072010;      // Consigliere del numero magico

MqlTradeRequest trReq;
MqlTradeResult trRez;
int ma1Handle;
int ma2Handle;
int macdHandle;               // Maniglia dell'indicatore MACD
double ma1Val[];
double ma2Val[];
double macdVal[]; // array dinamico per la memorizzazione dei valori MACD numerici per le barre giornaliere
  
int sl;
int tp;
//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'esperto|
//+------------------------------------------------------------------+
int OnInit()
{
   //Impostare i valori predefiniti per tutte le richieste di nuovi ordini
      trReq.action=TRADE_ACTION_DEAL;
      trReq.magic=MAGIC;
      trReq.symbol=Symbol();                 // Simbolo commerciale
      trReq.volume=0.1;                      // Volume richiesto per una transazione in lotti
      trReq.deviation=1;                     // Massimo scostamento possibile dal prezzo richiesto
      trReq.type_filling=ORDER_FILLING_AON;  // Tipo di esecuzione dell'ordine
      trReq.type_time=ORDER_TIME_GTC;        // Tempo di esecuzione dell'ordine
      trReq.comment="MA Sample";
   //termine
  
   //Creare la maniglia per 2 indicatori MA
      ma1Handle=iMA(Symbol(),PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
      ma2Handle=iMA(Symbol(),PERIOD_CURRENT,Periods+Shift,0,MODE_EMA,PRICE_CLOSE);
   //--- Ottenere l'handle dell'indicatore MACD
      macdHandle=iMACD(NULL,PERIOD_D1,15,26,1,PRICE_CLOSE);
   //termine
  
   //i parametri di ingresso sono di sola lettura
      tp=0;
      sl=0;
   //termine
  
   //Supporto per un conto con 5 decimali
      if(_Digits==5)
      {
         sl*=10;
         tp*=10;
      }
   //termine
      
   return(0);
}
//+------------------------------------------------------------------+
//| Funzione di deinizializzazione dell'esperto|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Funzione tick dell'esperto|
//+------------------------------------------------------------------+
void OnTick()
  {
  
   MqlTick tick; //variabile per le informazioni sui tick
   if(!SymbolInfoTick(Symbol(),tick))
   {
      Print("Failed to get Symbol info!");
      return;
   }
  
   /Copia i valori più recenti degli indicatori MA in un buffer
   int copied=CopyBuffer(ma1Handle,0,0,4,ma1Val);
   if(copied>0)
      copied=CopyBuffer(ma2Handle,0,0,4,ma2Val);
      copied=CopyBuffer(macdHandle,0,0,4,macdVal);
   if(copied>0)
   {
      //Se MAPeriod > MAPeriod + Shift -> BUY
      if(ma1Val[1]>ma2Val[1] && macdVal[1]>macdVal[2])
      {
         trReq.price=tick.bid;                   // SymbolInfoDouble(NULL,SYMBOL_BID);
         trReq.sl=tick.bid-_Point*sl;            // Livello di stop loss dell'ordine
         trReq.tp=tick.bid+_Point*tp;            // Livello di take profit dell'ordine
         trReq.type=ORDER_TYPE_BUY;              // Tipo di ordine
         OrderSend(trReq,trRez);
      }
      //Se MAPeriod < MAPeriod + Shift -> SELL
      else if(ma1Val[1]<ma2Val[1] && macdVal[1]<macdVal[2])
      {
         trReq.price=tick.ask;
         trReq.sl=tick.ask+_Point*sl;            // Livello di stop loss dell'ordine
         trReq.tp=tick.ask-_Point*tp;            // Livello di take profit dell'ordine
         trReq.type=ORDER_TYPE_SELL;             // Tipo di ordine
         OrderSend(trReq,trRez);
      }
   }

  }
//+------------------------------------------------------------------+
 
Automated-Trading:

Semplice MA EA:

Autore: outkast

Ciao Outkast,

Sono nuovo di EA ho appena importato il signor tsaktuo esimpleMA, dal momento che davvero non capisco il codice, lo vedo in esecuzione sul mio grafico, ma dovrei impostare alcuni dei valori MA, non so bisogno di aiuto bisogno di un corso o un libro.

 

Sono stato felice di trovare il vostro esempio di codice perché ha risolto il mio problema di bufferizzare la MA e di farla apparire su un grafico. Grazie per averlo pubblicato.

L'unica domanda che ho è: come si prende la decisione di chiudere l'ordine aperto?

Grazie