Benötige Hilfe beim Erstellen eines EA

 

Hallo liebe MT5 EA Community,

ich würde gerne einen EA erstellen, der nach über- bzw unterschreiten der Nachtrange eine Limitorder auf den EA10 setzt, sobald der EA10 ebenfalls die Nachtrange verlassen hat. Ich möchte über ein Panel bestimmen, ob ausschließlich long oder short berücksichtigt wird. Ausserdem sollen max. 2 Trades am Tag vorgenommen werden und TP und SL nach ATR bestimmt werden (TP=2*ATR;SL=2*ATR). Für das Positionsmanagement (Positionsgröße) nutze ich ein Add-On namens StereoTrader.

Ich wäre euch unfassbar dankbar, wenn mir jmnd unter die Arme greifen könnte. :)

Hier der Code, den ich bisher geschrieben habe:

//+------------------------------------------------------------------+
//|                                                EA10 Beak-Out     |
//|                                                                  |
//|                                     https://www.stereotrader.net |
//+------------------------------------------------------------------+
#property copyright "blabla""
#property link      "https://www.xy.net"
#property version   "1.00"
#property strict
/*

   DESCRIPTION:
   
   EA10 Beak-Out lets the user define a time range. Depending on the desired direction
   (short/long), this SEA creates a limit order, 
   on EMA10 price level as soon as EMA10 is out of range.
   
   Stop Loss determinded with ATR (1xATR), same for TP (2xATR)
   
   Furhtermore an exit time may be defined, as well as a minimal and 
   a maximal value for the range to become valid.
   
   Optimierung: Kein Long über Privot R2/ Kein Short unter Pivot S2

*/
//+------------------------------------------------------------------+
//| Includes                                                         |
//+------------------------------------------------------------------+
#include <StereoTrader_API\StereoAPI.mqh>

//--- Remove these lines if indicator shall not appear in a separate window
#property indicator_separate_window
#property indicator_height 48

//+------------------------------------------------------------------+
//| StereoEA declaration                                             |
//+------------------------------------------------------------------+
DECLARE_SEA_BEGIN("Roys Break-Out")
//+------------------------------------------------------------------+
//| Fields                                                           |
//+------------------------------------------------------------------+
CSNumEdit         m_EMA;         //--- EMA look back period
CSTimeEdit        m_begintime;   //--- Edit field begin time
CSTimeEdit        m_endtime;     //--- Edit field end time
CSNumEdit         m_maxtrades;   //--- Max trades per day
CSNumEdit         m_magicnumber; //--- Magic number of EA
CSButton          m_sell;        //--- Sell 
CSButton          m_buy;         //--- Buy

//+------------------------------------------------------------------+
//| Vars used between SEA_INDICATE & SEA_EVALUATE                    |
//+------------------------------------------------------------------+
double range_low,range_high;
bool range_isvalid;
int tradesthisday;

        

       

//+------------------------------------------------------------------+
//| Initialization function                                          |
//+------------------------------------------------------------------+
SEA_INIT
  {
//--- Add edit fields
      _Panel.AddTimeEdit(m_begintime,"Begin","00:00");
      _Panel.AddTimeEdit(m_endtime,"End","08:00");
      _Panel.AddNumEditX(m_EMA,"EMA period",10,false,0,100,1); 
      _Panel.AddNumEditX(m_maxtrades,"Trades max",2,false,1,99,0);
      _Panel.AddNumEditX(m_magicnumber,"Magic Nr",92,false,1,999999999,0);
      _Panel.AddButton(m_sell,"Trade","IGNORE","SELL",false);  
      _Panel.AddButton(m_buy,"Trade","IGNORE","BUY",false);     
//---
   return(true);
  }
  
       //+-----------------------------------+
      //| Check ob eine Position offen ist  |
      //+-----------------------------------+     
       //
        bool hasPendO() {
        for (int i=0; i < OrdersTotal(); i++) {
           ulong ticket = OrderGetTicket(i);
           if(OrderSelect(ticket)) {
            if (OrderGetInteger(ORDER_MAGIC) == m_magicnumber && OrderGetString(ORDER_SYMBOL) == _Symbol && ticket != 0){
            return true;
            break;
              }
           }
             }
           return false;
          }
  
  
  
  //+------------------------------------------------------------------+
//| Indication                                                         |
//+--------------------------------------------------------------------+
SEA_INDICATE
   {
   
      //+---------------------------------------+
      //| Init new day                          |
      //+---------------------------------------+
      if (IsNewDay())
         range_isvalid=false;
         
         
      //+---------------------------------------+
      //| Find ATR value for SL and TP          |  
      //+---------------------------------------+
      
         int SL=_Bars.ATR(14,1);
         int TP=_Bars.ATR(14,1)*2.0;
         int EMAPrice=_Bars.EMA(10,1);
                 
         
      //+---------------------------------------+
      //| Find range by reach of end time       |
      //+---------------------------------------+
      
      //--- End time reached?
      if (_Hour==m_endtime.Hour() && _Minute==m_endtime.Minute() && !range_isvalid)
         {
         //--- End time from last candle
         datetime timeend=_PrevBar.time;
         //--- Find begin / buffer values
         int begin_h=m_begintime.Hour();
         int begin_m=m_begintime.Minute();
         
         //--- Latest after one day (1440x60) the time must occur
         //--- if not, the symbol does not have that time
         range_low=999999;
         range_high=0;
         datetime timebegin=0;
         for (int i=1;i<1441;i++)
            {
            if (_Bars.Hour(i)==begin_h && _Bars.Minute(i)==begin_m)
               {
               //--- Begin time from found candle
               timebegin=_Bars.Time(i);
               //--- Highest high and lowest low
               range_low=_Bars.LowestLow(i,1);
               range_high=_Bars.HighestHigh(i,1);
            
               //--- Show cluster
               DrawCluster("Breakout range",timebegin,range_low,timeend,range_high,clrOrange,clrWhite);
               DrawLine("Long",range_high,clrGreen,timebegin,21.00,1,0,null);
               DrawLine("Short",range_low,clrRed,timebegin,21.00,1,0,null);
               break;
               }
            if (timebegin>0)
               break;
            }
         }
   }
   
//+------------------------------------------------------------------+
//| Check signal                                                     |
//+------------------------------------------------------------------+
SEA_EVALUATE
   {
      //+-----------------------------------+
      //| Init new day                      |
      //+-----------------------------------+
      if (IsNewDay())
         {
         Flat();
         tradesthisday=0;
         }

      //+-----------------------------------+
      //| Exit criteria                     |
      //+-----------------------------------+
         
      if (tradesthisday>=m_maxtrades.Value())
         return;  
         
       //--- Init values
      bool confirmedlong=true;
      bool confirmedshort=true;
    //const symbol = Symbol();
    //bool PositionOpen=Symbol(); 
         


         

         
      //+---------------------------------------+
      //| Place limit orders if no order exists |
      //+---------------------------------------+
      
     if (hasPendO())
         {
       
          confirmedlong=_Bars.EMA(10,1)>range_high;         
          confirmedshort=_Bars.EMA(10,1)<range_low;
          
          
         if (confirmedshort && m_sell.IsChecked())
            //Selllimit auf EMA price
            //SL 1*ATR
            //TP 2*ATR
             {
        //  DeleteSellOrders();
            SellOrder(EMAPrice);
            SL(SL);
            TP(TP);
        return;}
               
                
              
         if (confirmedlong && m_buy.IsChecked())
            //Selllimit auf EMA price
            //SL 1*ATR
            //TP 2*ATR
             {
       //   DeleteBuyOrders();
            BuyOrder(EMAPrice);
            SL(SL);
            TP(TP);
            }
            
         }    
       }            

       
DECLARE_SEA_END


Folgende Infos habe ich über's Fehlerjournal erhalten:

'==' - illegal operation use EA10 BreakOut unfertig.mq5 86 46

possible loss of data due to type conversion from 'double' to 'int' EA10 BreakOut unfertig.mq5 114 16

possible loss of data due to type conversion from 'double' to 'int' EA10 BreakOut unfertig.mq5 115 16

possible loss of data due to type conversion from 'double' to 'int' EA10 BreakOut unfertig.mq5 116 22

'EMAPrice' - undeclared identifier EA10 BreakOut unfertig.mq5 208 23

'SL' - pointer to this function type is not supported yet EA10 BreakOut unfertig.mq5 209 16

'SL' - function call missing, open parenthesis expected EA10 BreakOut unfertig.mq5 209 16

'TP' - pointer to this function type is not supported yet EA10 BreakOut unfertig.mq5 210 16

'TP' - function call missing, open parenthesis expected EA10 BreakOut unfertig.mq5 210 16

'EMAPrice' - undeclared identifier EA10 BreakOut unfertig.mq5 221 22

'SL' - pointer to this function type is not supported yet EA10 BreakOut unfertig.mq5 222 16

'SL' - function call missing, open parenthesis expected EA10 BreakOut unfertig.mq5 222 16

'TP' - pointer to this function type is not supported yet EA10 BreakOut unfertig.mq5 223 16

'TP' - function call missing, open parenthesis expected EA10 BreakOut unfertig.mq5 223 16

11 errors, 4 warnings 12 5


Ich freue mich auf eure Antworten und seid bitte nicht zu hart, ich bin wirklich arger Anfänger und hab versucht mir passende Codeschnipsel zusammen zu suchen. 


 

Naja vielleicht solltest Du erst einmal lernen, wie MQL5 funktioniert, Dein Code hat sehr wenig mit MQ zu tun :(

Lies mal:

Quickstart for newbies: https://www.mql5.com/de/articles/496
und: https://www.mql5.com/de/articles/100
(Schrittweiser Leitfaden für Anfänger zum Schreiben eines Expert Advisors in MQL5)

Daneben gibt es die Suche z. B. nach den Kochbüchern: https://www.mql5.com/de/search#!keyword=kochbuch

Oder er hat eine ganze Reihe geschrieben wie mit welchen Indikatoren ein Handelssystem gebaut werden kann: https://www.mql5.com/de/users/m.aboud/publications

Ich sage Dir: Hier suchen führt zu weitaus besseren Ergebnissen als ChatGPT, dessen Ergebnisse sind Schrott:
https://www.mql5.com/en/forum/442128
https://www.mql5.com/en/forum/444173

Schnelleinstieg oder Kurzanleitung für Anfänger
Schnelleinstieg oder Kurzanleitung für Anfänger
  • www.mql5.com
Liebe Leser, in diesem Artikel möchte ich Ihnen vermitteln und zeigen, wie man sich möglichst schnell und einfach die Grundlagen der Erstellung automatischer Handelssysteme, wie die Arbeit mit Indikatoren u. a., erschließt. Der Beitrag richtet sich an Neueinsteiger, in ihm kommen weder komplizierte noch schwer zu verstehende Beispiele zur Anwendung.
 

Hi Carl,

vielen Dank für die Links! Ich werd mich dort durcharbeiten.

Jepp, ChatGTP führt zu keinen brauchbaren Ergebnissen.

Grund der Beschwerde: