Einfachen moving average mit magic number

 
Hallo Freunde ich brauche einen einfachen ea mit moving average ema der soll kaufen wenn er über 50 tage linie ist und schliessen und verkaufen wenn er unter der 50 tage linie ist undzwar mit magic number. Natürlich wenn ich short  gegangen bin soll er wenn er über der 50 tage linie ist schliessen und kaufen.
 
trader-1978:
Hallo Freunde ich brauche einen einfachen ea mit moving average ema der soll kaufen wenn er über 50 tage linie ist und schliessen und verkaufen wenn er unter der 50 tage linie ist undzwar mit magic number. Natürlich wenn ich short  gegangen bin soll er wenn er über der 50 tage linie ist schliessen und kaufen.

Entweder du suchst dir selber was in der codebase, programmierst selber oder beauftragst einen freelacer

 
trader-1978:
Hallo Freunde ich brauche einen einfachen ea mit moving average ema der soll kaufen wenn er über 50 tage linie ist und schliessen und verkaufen wenn er unter der 50 tage linie ist undzwar mit magic number. Natürlich wenn ich short  gegangen bin soll er wenn er über der 50 tage linie ist schliessen und kaufen.

 Hallo, hier ist ein einfacher EA. Macht aber keine Profite!


//+------------------------------------------------------------------+
//|                                                    MA_Trader.mq5 |
//|                                       Copyright 2021, Name       |
//|                                                  Seite           |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, Name"
#property link      "webseite"
#property version   "1.00"

#include <Trade/Trade.mqh>
#include <Trade/SymbolInfo.mqh>
CTrade m_trade;
CSymbolInfo m_symbol;
CPositionInfo  m_position;
CHistoryOrderInfo m_history;

input long Magic        = 1234567; // Magic Nummer
input double Lots       = 0.10; // Volumen
input int  MA_TAGELINIE = 50; // Wert EMA Tagelinie

int    MA=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
//--- Moving Average indicator
   MA=iMA(_Symbol,PERIOD_CURRENT,MA_TAGELINIE,0,MODE_EMA,PRICE_CLOSE);
   if(MA==INVALID_HANDLE) {
      printf("Error creating MA indicator");
      return(INIT_FAILED);
   }

   if(!m_symbol.Name(_Symbol)) // sets symbol name
      return(INIT_FAILED);

   RefreshRates();
//---
   m_trade.SetExpertMagicNumber(Magic);
   if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK))
      m_trade.SetTypeFilling(ORDER_FILLING_FOK);
   else if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC))
      m_trade.SetTypeFilling(ORDER_FILLING_IOC);
   else
      m_trade.SetTypeFilling(ORDER_FILLING_RETURN);


   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {

   double Ask           = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid           = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   double open          = iOpen(NULL,PERIOD_CURRENT,0);
   double close1        = iClose(NULL,PERIOD_CURRENT,1);

   //--- get current Moving Average
   double   mawert[1];

   if(CopyBuffer(MA,0,0,1,mawert)!=1) {
      Print("CopyBuffer from iMA failed, no data");
      return;
   }

   static ENUM_POSITION_TYPE tipe_letzte_position=-1;
   for(int i=PositionsTotal()-1; i>=0; i--) // Gibt die Anzahl der aktuellen Positionen zurück
      if(m_position.SelectByIndex(i)) // wählt die Position nach Index für den weiteren Zugriff auf seine Eigenschaften aus
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==Magic) {
            tipe_letzte_position=m_position.PositionType();  // Ruft den Positionstyp ab
            if(tipe_letzte_position==POSITION_TYPE_SELL && close1 > mawert[0] && open > close1) {
               ClosePos();
               Comment("Close Sell");
            }
            if(tipe_letzte_position==POSITION_TYPE_BUY && close1 < mawert[0] && open < close1) {
               ClosePos();
               Comment("Close Buy");
            }
            return;
         }



   if(close1 < mawert[0] && open < close1)
      // Handelsbedinungen
      m_trade.Sell(Lots,NULL,Bid);

   if(close1 > mawert[0] && open > close1)
      m_trade.Buy(Lots,NULL,Ask);

}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Checks if the specified filling mode is allowed                  |
//+------------------------------------------------------------------+
bool IsFillingTypeAllowed(int fill_type) {
//--- Obtain the value of the property that describes allowed filling modes
   int filling=m_symbol.TradeFillFlags();
//--- Return true, if mode fill_type is allowed
   return((filling & fill_type)==fill_type);
}
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates() {
//--- refresh rates
   if(!m_symbol.RefreshRates())
      return(false);
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
}
//+------------------------------------------------------------------+
void ClosePos() {
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==Magic) { // Prüft nach Symbol und Magicnummer
            m_trade.PositionClose(m_position.Ticket());
         }
}

Gruß Igor