Systemhandel 게시글

Einfacher Expert Advisor mit DeMarker-Indikator für MetaTrader 4

첨부파일
32418.zip (1.46 KB, 다운로드 0회)

Hey Trader-Kollegen! Heute möchte ich euch meinen einfachsten Expert Advisor (EA) vorstellen, den ich je entwickelt habe. Ich habe lange darüber nachgedacht, einen EA für mein Trading zu nutzen, und jetzt ist es endlich soweit! Ich freue mich auf euer Feedback, nachdem ihr alles gelesen habt.

Dieser EA funktioniert für ein einzelnes Währungspaar. Alle Einstellungen wie Zeitrahmen, Lot-Größe, Stop-Loss und Take-Profit könnt ihr ganz einfach im Menü konfigurieren.


extern ENUM_TIMEFRAMES TF  = PERIOD_CURRENT;// Wählt den Zeitrahmen
extern int period          = 8;// DeMarker-Periode
extern double lt           = 0.01;// Lots
extern int sl              = 100;// Stop-Loss
extern int tp              = 100;// Take-Profit
extern double OB           = 0.7;// Überverkauft
extern double OS           = 0.3;// Überkauft
extern bool OPENBAR        = false;// Trading beim Öffnen der neuen Kerze

Hier ist der Clou: Ich teile die Variablen in drei Teile auf:
1. Daten | Zeitrahmen
2. Order
3. Paar

//+------------------------------------------------------------------+

//-- Zeitrahmen | Indikator
double dmrk[5];
int signal  =-1;//-- 0.kaufen 1.verkaufen
int hold = 0;

//-- Order
int ticket  =0;
double lot  =0.0;
int typ     =-1;

//-- Paar
datetime t1=0;
bool newbar=false;
bool entry =false;

//+------------------------------------------------------------------+

In der Funktion OnInit() initialisiere ich das DeMarker-Indikator-Array und überprüfe die minimale Lot-Größe, die je nach Broker-Anforderungen erforderlich ist.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   ArrayInitialize(dmrk,0.0);
  //---
      const double test_lot   = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
      if(lt<test_lot)   lt    = test_lot;
  }

In der Funktion OnTick() berechne ich den Indikator und bestimme die Kauf- und Verkaufssignale.

//---------------------------------------------------------------------------
   signal = -1;
//---------------------------------------------------------------------------

//--- Berechnung
   for(int i=0; i<ArraySize(dmrk); i++)
     {
      dmrk[i]  =  iDeMarker(Symbol(),TF,period,i);
     }
//---

   if(dmrk[1] > OB)
     {
      hold = 1;//set
     }
   else
      if(dmrk[1] < OS)
        {
         hold = -1;//set
        }
      else
        {
         hold = 0;//reset
        }

   if(hold ==  1)
     {
      if(dmrk[0]<OB && dmrk[1]>OB)
        {
         signal = OP_SELL;
        }
     }
   if(hold == -1)
     {
      if(dmrk[0]>OS && dmrk[1]<OS)
        {
         signal = OP_BUY;
        }
     }

Um ein Kauf- oder Verkaufssignal zu eröffnen...

//---------------------------------------------------------------------------
   if(signal != -1)
      if(newbar==true)
         if(entry==false)//Tür offen
           {
            //---
            entry =true;//set
            //---

            if(signal == OP_BUY)
              {
               ticket = OrderSend(Symbol(),OP_BUY,lt,Ask,(int)((Ask-Bid)/Point,
                                  sl>0?Bid-sl*Point:0.0,
                                  tp>0?Bid+tp*Point:0.0,
                                  EAName+":signal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold),
                                  EANumber,
                                  0,
                                  clrBlue);
               signal=-1;
               //hold =0;
              }//reset
              }//reset signal

          }

Und für das Schließen...

   if(entry == true) // Schließen
     {

      if(OrderSelect(ticket,SELECT_BY_TICKET))
      {
         if(OrderCloseTime() == 0)//-- Order aktiv
           {
            /*  todo Bedingung zum Schließen  */
            //entry = false;
           }
         //else
            if(OrderCloseTime() != 0)//--  geschlossen durch 1. manuell 2. sl/tp 3. ea
              {
               entry = false;//reset entry
              }
        }
     }

  



연관 포스트

댓글 (0)