Expert Advisors: Simple MA Expert Advisor

 

Simple MA Expert Advisor:

Etwas für diejenigen die den neuen Strategietester ausprobieren wollen und keinen EA haben.

Simple MA Expert Advisor

Autor: Karlis Balcers

 

Im Tester gibt es einen Fehler:

2010.04.28 06:27:44 Core 1 Prozess-Erstellungsfehler [2]

 
1Serg:

Im Tester gibt es einen Fehler:

2010.04.28 06:27:44 Core 1 Prozess-Erstellungsfehler [2]

Bitte aktualisieren Sie auf den neuesten Build und suchen Sie dann nach der Datei metatester.exe im Stammverzeichnis des Programms.
 
Renat:
Bitte aktualisieren Sie auf den neuesten Build und suchen Sie dann nach der Datei metatester.exe im Stammverzeichnis des Programms.

Danke, es funktioniert.

Der Optimierer und die Visualisierung fehlen.

 
1Serg:

Es fehlen der Optimierer und die Visualisierung.

Der Optimierer ist vorhanden - erhöhen Sie einfach die Höhe des Prüffensters.

Die Visualisierung wird später folgen.

 
Renat:

Der Optimierer ist da - vergrößern Sie einfach die Höhe des Testfensters.

Die Visualisierung kommt später.

Cool!

 

Herzliche Grüße,

Herr/Frau tsaktuo, ich habe Ihren Code K_eSimpleMA studiert und es war sehr nützlich, um zu verstehen, wie die Struktur eines EA ist, sowie Konzepte, wie man mit SMA Kreuze arbeiten.

Ich schätze es sehr, dass Sie diesen Artikel geteilt haben, und ich danke Ihnen vielmals.

Auf der anderen Seite habe ich ein paar Fragen; beide sind mit SymbolInfoTick Funktionverbunden :


Das Handbuch von MQL5 sagt über dieFunktion SymbolInfoTick(Symbol(),tick) , dass sie die aktuellen Preise eines bestimmten Symbols in einer Variablen des Typs MqlTick zurückgibt, und es sagt auch, dass die Funktion bei Erfolg true zurückgibt, andernfalls false.

Nach dem, was ich oben verstanden habe, wird die Meldung ("Failed to get Symbol info!") gedruckt, wenn kein Tick empfangen wird. Ist dies korrekt? Wenn das nicht korrekt ist, könnten Sie mir bitte sagen, worum es geht?

Die andere Frage ist: Was passiert, wenn die Meldung bei jedem Tick gedruckt wird?

Nochmals vielen Dank.

 

Es gilt:

trReq.sl=tick.ask-_Point*sl; // Stop Loss Level der Order

trReq.tp=tick.ask+_Point*tp; // Take Profit-Level der Order

benötigt:

trReq.sl=tick.bid-_Point*sl; // Stop-Loss-Level der Order

trReq.tp=tick.bid+_Point*tp; // Take Profit-Level der Order

und entsprechend für SELL ändern.

Der Kauf erfolgt zum Briefkurs, wird aber zum Geldkurs geschlossen.

Wenn Sie Gewinn und Verlust z.B. auf 20 Punkte begrenzen wollen, sollten Sie genau 20 Punkte vom Geldkurs (Schlusskurs) für BUY und vom Briefkurs (Schlusskurs) für SELL abzählen.

 

Können Sie mir bitte sagen, wie ich diesen Code ergänzen kann, damit er auf den MACD-Trend ohne Stopps handelt?

Long: MACD wächst schnell MA gekreuzt langsam MA von oben nach unten

Croy Long: MACD steigt schnell MA gekreuzt langsam MA von unten nach oben

Short: MACD abnehmende schnelle MA gekreuzt die langsame von oben nach unten

Short: MACD abnehmender schneller MA hat den langsamen von unten nach oben gekreuzt

Ich habe es so versucht:

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

//--- Eingabeparameter
input int Periods=2;          // Gleitender Durchschnitt für Zeitraum 1
input int Shift=38;           // Gleitender Durchschnitt für Zeitraum 2
input int SL=30;              // Stop Loss
input int TP=100;             // Gewinnmitnahme
input int MAGIC=3072010;      // Berater für magische Zahlen

MqlTradeRequest trReq;
MqlTradeResult trRez;
int ma1Handle;
int ma2Handle;
int macdHandle;               // MACD-Indikator-Handle
double ma1Val[];
double ma2Val[];
double macdVal[]; // dynamisches Array zur Speicherung numerischer MACD-Werte für Tagesbalken
  
int sl;
int tp;
//+------------------------------------------------------------------+
//| Experteninitialisierungsfunktion|
//+------------------------------------------------------------------+
int OnInit()
{
   //Standardvariablen für alle neuen Auftragsanforderungen festlegen
      trReq.action=TRADE_ACTION_DEAL;
      trReq.magic=MAGIC;
      trReq.symbol=Symbol();                 // Handelssymbol
      trReq.volume=0.1;                      // Gewünschtes Volumen für ein Geschäft in Losen
      trReq.deviation=1;                     // Maximal mögliche Abweichung vom gewünschten Preis
      trReq.type_filling=ORDER_FILLING_AON;  // Art der Auftragsausführung
      trReq.type_time=ORDER_TIME_GTC;        // Ausführungszeit der Bestellung
      trReq.comment="MA Sample";
   //Ende
  
   //Handle für 2 MA-Indikatoren erstellen
      ma1Handle=iMA(Symbol(),PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
      ma2Handle=iMA(Symbol(),PERIOD_CURRENT,Periods+Shift,0,MODE_EMA,PRICE_CLOSE);
   //---Handle für MACD-Indikator holen
      macdHandle=iMACD(NULL,PERIOD_D1,15,26,1,PRICE_CLOSE);
   //Ende
  
   //Eingabeparameter sind ReadOnly
      tp=0;
      sl=0;
   //Ende
  
   //Suppoprt für Konto mit 5 Dezimalstellen
      if(_Digits==5)
      {
         sl*=10;
         tp*=10;
      }
   //Ende
      
   return(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
  {
  
   MqlTick tick; //Variable für Tick-Informationen
   if(!SymbolInfoTick(Symbol(),tick))
   {
      Print("Failed to get Symbol info!");
      return;
   }
  
   //Kopieren der letzten MA-Indikatorwerte in einen Puffer
   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)
   {
      //Wenn MAPeriode > MAPeriode + Umschalttaste -> KAUFEN
      if(ma1Val[1]>ma2Val[1] && macdVal[1]>macdVal[2])
      {
         trReq.price=tick.bid;                   // SymbolInfoDouble(NULL,SYMBOL_BID);
         trReq.sl=tick.bid-_Point*sl;            // Stop-Loss-Niveau des Auftrags
         trReq.tp=tick.bid+_Point*tp;            // Take-Profit-Niveau des Auftrags
         trReq.type=ORDER_TYPE_BUY;              // Art der Bestellung
         OrderSend(trReq,trRez);
      }
      //Wenn MAPeriode < MAPeriode + Shift -> VERKAUFEN
      else if(ma1Val[1]<ma2Val[1] && macdVal[1]<macdVal[2])
      {
         trReq.price=tick.ask;
         trReq.sl=tick.ask+_Point*sl;            // Stop-Loss-Niveau des Auftrags
         trReq.tp=tick.ask-_Point*tp;            // Take-Profit-Niveau des Auftrags
         trReq.type=ORDER_TYPE_SELL;             // Art der Bestellung
         OrderSend(trReq,trRez);
      }
   }

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

Einfacher MA EA:

Autor: outkast

Hallo Outkast,

Ich bin neu in EA's ich gerade importiert Mr. tsaktuo esimpleMA, da ich wirklich nicht verstehen, den Code, ich sehe es läuft auf meinem Chart, aber bin ich annehmen, um einige der MA-Werte, ich weiß nicht brauchen Hilfe brauchen eine Klasse oder ein Buch.

 

Ich war froh, Ihr Code-Beispiel zu finden, denn es löste mein Problem, den MA zu puffern und auf einem Diagramm erscheinen zu lassen. Danke für die Veröffentlichung.

Die einzige Frage, die ich habe, ist, wie die Entscheidung getroffen wird, den offenen Auftrag zu schließen.

Vielen Dank