Expert Advisors: Beispiele aus dem Buch „Neuronale Netze für den algorithmischen Handel mit MQL5“ - Seite 4

 
kein " unser_model.net", wohin gehen wir?
 
اللعبه :

MQL5 :

المؤلف : MetaQuotes

اخرزميات انا عالم التكنولوجيا الجديدة ومطور برامج ومنشء تطبيقات
 
Vielen Dank an die Autorin für das Buch! Das einzige Minus)))) - meine Alice Pro hat für mich den Zauber des "Bewusstseins" verloren) Mit Respekt, Igor.
 
//+------------------------------------------------------------------+
//|Erweiterte FVG EA.mq5 |
//+------------------------------------------------------------------+
#property strict

input double Lots = 0.1;
input int TakeProfit = 200;
input int StopLoss = 200;
input int MaxLookback = 50;
input int Slippage = 5;
input int MagicNumber = 123456;
input double MaxSpreadPoints = 20.0; // Maksimum izin verilen spread
input int MA_Period = 50; // Trend filtresi
input int StartHour = 8;  // İşlem saat aralığı başlangıç
input int EndHour = 20;   // İşlem saat aralığı bitiş

//+------------------------------------------------------------------+
int OnInit()
  {
   Print("Advanced FVG EA başlatıldı.");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   // Yeni bar kontrolü
   static datetime lastBarTime = 0;
   MqlRates candles[3];
   if(CopyRates(_Symbol, PERIOD_M5, 0, 3, candles) < 3) return;
   if(candles[0].time == lastBarTime) return;
   lastBarTime = candles[0].time;

   // Zaman filtresi
   int currentHour = TimeHour(TimeCurrent());
   if(currentHour < StartHour || currentHour >= EndHour) return;

   // Spread kontrolü
   double spread = (SymbolInfoDouble(_Symbol, SYMBOL_ASK) - SymbolInfoDouble(_Symbol, SYMBOL_BID)) / _Point;
   if(spread > MaxSpreadPoints) return;

   // Pozisyon kontrolü
   if(PositionSelect(_Symbol)) return;

   // Trend filtresi (MA)
   double ma = iMA(_Symbol, PERIOD_M5, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);
   double price = SymbolInfoDouble(_Symbol, SYMBOL_BID);

   // FVG tespiti
   double fvgHigh = 0;
   double fvgLow = 0;
   bool isBullishFVG = false;
   bool isBearishFVG = false;

   MqlRates rates[];
   if(CopyRates(_Symbol, PERIOD_M5, 2, MaxLookback, rates) < 3) return;

   for(int i = 0; i < ArraySize(rates)-2; i++)
     {
      double high0 = rates[i].high;
      double low2 = rates[i+2].low;
      double low0 = rates[i].low;
      double high2 = rates[i+2].high;

      // Bullish FVG (sadece yükselen trendde aç)
      if(high0 < low2 && price > ma)
        {
         isBullishFVG = true;
         fvgHigh = low2;
         fvgLow = high0;
         break;
        }
      // Bearish FVG (sadece düşen trendde aç)
      else if(low0 > high2 && price < ma)
        {
         isBearishFVG = true;
         fvgHigh = low0;
         fvgLow = high2;
         break;
        }
     }

   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

   // İşlem açma
   if(isBullishFVG && bid <= fvgHigh && bid >= fvgLow)
     {
      trade_buy(ask);
     }
   else if(isBearishFVG && ask >= fvgLow && ask <= fvgHigh)
     {
      trade_sell(bid);
     }
  }
//+------------------------------------------------------------------+
void trade_buy(double price)
  {
   double sl = price - StopLoss * _Point;
   double tp = price + TakeProfit * _Point;

   MqlTradeRequest req = {};
   MqlTradeResult res  = {};

   req.action = TRADE_ACTION_DEAL;
   req.symbol = _Symbol;
   req.volume = Lots;
   req.type = ORDER_TYPE_BUY;
   req.price = price;
   req.sl = NormalizeDouble(sl, _Digits);
   req.tp = NormalizeDouble(tp, _Digits);
   req.deviation = Slippage;
   req.magic = MagicNumber;
   req.comment = "FVG Buy";

   if(OrderSend(req, res))
      Print("Kaufauftrag gönderildi:", res.retcode);
   else
      Print("Kaufauftrag hatası: ", res.retcode);
  }
//+------------------------------------------------------------------+
void trade_sell(double price)
  {
   double sl = price + StopLoss * _Point;
   double tp = price - TakeProfit * _Point;

   MqlTradeRequest req = {};
   MqlTradeResult res  = {};

   req.action = TRADE_ACTION_DEAL;
   req.symbol = _Symbol;
   req.volume = Lots;
   req.type = ORDER_TYPE_SELL;
   req.price = price;
   req.sl = NormalizeDouble(sl, _Digits);
   req.tp = NormalizeDouble(tp, _Digits);
   req.deviation = Slippage;
   req.magic = MagicNumber;
   req.comment = "FVG Sell";

   if(OrderSend(req, res))
      Print("Verkaufsauftrag gönderildi:", res.retcode);
   else
      Print("Verkaufsauftrag hatası: ", res.retcode);
  }
//+------------------------------------------------------------------+
 
Wenn ich gpt_not_norm.net nach der Ausführung des Skripts "gpt_test_not_norm" verwende, erhalte ich die folgende Fehlermeldung

" Error of Feed Forward: 0" im Strategie-Tester

Ich habe darauf geachtet, die "BarsToLine"-Eingangsvariable auf 40 zu setzen, die ich zum Sammeln und zum Trainieren des Modells verwendet habe.

Wenn ich das Skript "attention" verwende, funktioniert es einwandfrei.


 
Es ist eine großartige und sehr nützliche Arbeit, aber es gibt ein Problem.(Fehler des Lademodus gpt_not_norm.net: 5008)Gibt es eine Lösung dafür?
 

Hallo zusammen. Ich glaube, dass viele von uns auf Fehler gestoßen sind und das ist sehr frustrierend. Um ehrlich zu sein, war auch ich anfangs sehr aufgeregt, um den Expertenberater zum Laufen zu bringen und fand mich erwartungsgemäß in einem Haufen von Fehlern wieder.

Wenn Sie Geduld haben und das Buch durchgehen, während Sie sich den Code Schritt für Schritt ansehen, garantiere ich Ihnen, dass Sie das Richtige tun und die gewünschten Ergebnisse erzielen werden. Das Wichtigste ist, die Sprache mql5 so gut wie möglich zu verstehen.


Ich bin zum Glück in der Lage, den gesamten Code zum Laufen zu bringen, und der Expert Advisor funktioniert auch, aber ich brauche eine Strategie.


Eine weitere Sache. Immer wenn der Code läuft und ich ihn stoppe, bekomme ich zwei Pufferobjekte, die im Speicher auslaufen. Ich brauche Hilfe bei der Suche nach diesem Fehler.

 
607967 #:

Eine weitere Sache. Immer wenn der Code läuft und ich ihn stoppe, bekomme ich zwei Pufferobjekte, die im Speicher auslaufen. Ich brauche Hilfe bei der Suche nach diesem Fehler.

Das passiert normalerweise, wenn Indikator-Handles beim Entfernen von EA nicht aus dem Speicher des Terminals freigegeben werden.

Versuchen Sie zu ändern:

//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(!!net)
      delete net;
   if(!!trade)
      delete trade;
   IndicatorRelease(h_RSI);
   IndicatorRelease(h_MACD);
  }

zu:

//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(!!net)
      delete net;
   if(!!trade)
     delete trade;
   if(h_RSI != INVALID_HANDLE || h_MACD != INVALID_HANDLE)
    {
     IndicatorRelease(h_RSI);
     IndicatorRelease(h_MACD);
    }
  } // Dieser Code ist ungetestet.