Experts: Exemples tirés du livre "Réseaux neuronaux pour le trading algorithmique avec MQL5" - page 4

 
pas de " our_model.net ", où allons-nous ?
 
اللعبه :

MQL5 :

المؤلف : MetaQuotes

اخرزميات انا عالم التكنولوجيا الجديدة ومطور برامج ومنشء تطبيقات
 
Merci beaucoup à l'auteur pour ce livre ! Le seul inconvénient)))) - mon Alice Pro a perdu la magie de la "conscience" pour moi) Avec tout mon respect, Igor.
 
//+------------------------------------------------------------------+
//|Avancé 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;

   // Contrôle de la diffusion
   double spread = (SymbolInfoDouble(_Symbol, SYMBOL_ASK) - SymbolInfoDouble(_Symbol, SYMBOL_BID)) / _Point;
   if(spread > MaxSpreadPoints) return;

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

   // Tendances filtrées (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;

      // FVG haussier (tendance haussière)
      if(high0 < low2 && price > ma)
        {
         isBullishFVG = true;
         fvgHigh = low2;
         fvgLow = high0;
         break;
        }
      // FVG baissier (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("L'ordre d'achat a été exécuté : ", res.retcode);
   else
      Print("Ordre d'achat 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("Sell order gönderildi :", res.retcode);
   else
      Print("L'ordre de vente a été exécuté : ", res.retcode);
  }
//+------------------------------------------------------------------+
 
Lorsque j'utilise le fichier gpt_not_norm.net après avoir exécuté le script "gpt_test_not_norm", j'obtiens l'erreur suivante

" Error of Feed Forward : 0" dans le testeur de stratégie

Je me suis assuré de mettre la variable d'entrée "BarsToLine" à 40, que j'ai utilisé pour la collecte et l'entraînement du modèle.

Si j'utilise le script "attention", cela fonctionne correctement.


 
C'est un travail formidable et très utile, mais il y a un problème (Erreur du mode de chargement gpt_not_norm.net : 5008).
 

Bonjour à tous. Je crois que beaucoup d'entre nous ont fait des erreurs et c'est très frustrant. Pour être honnête avec vous, j'étais moi aussi très enthousiaste au début pour faire fonctionner l'expert advisor et comme prévu, je me suis retrouvé dans une pile d'erreurs.

Si vous avez de la patience et que vous parcourez le livre en regardant le code étape par étape, je vous garantis que vous ferez ce qu'il faut et que vous obtiendrez les résultats que vous souhaitez. Ce dont vous avez le plus besoin, c'est de comprendre le langage mql5 du mieux que vous pouvez.


J'ai la chance de pouvoir faire fonctionner l'ensemble du code et le conseiller expert fonctionne également, mais j'ai besoin d'une stratégie.


Encore une chose. Chaque fois que le code est en cours d'exécution et que je l'arrête, j'obtiens deux objets tampons qui fuient dans la mémoire. J'ai besoin d'aide pour trouver ce bug.

 
607967 #:

Une dernière chose. Chaque fois que le code est en cours d'exécution et que je l'arrête, j'obtiens deux objets tampons qui fuient dans la mémoire. J'ai besoin d'aide pour trouver ce bug.

Cela se produit généralement lorsque les handles d'indicateurs ne sont pas libérés de la mémoire du terminal lors de la suppression de l'EA.

Essayez de remplacer :

//+------------------------------------------------------------------+
//| Fonction de désinitialisation de l'expert|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(!!net)
      delete net;
   if(!!trade)
      delete trade;
   IndicatorRelease(h_RSI);
   IndicatorRelease(h_MACD);
  }

à :

//+------------------------------------------------------------------+
//| Fonction de désinitialisation de l'expert|
//+------------------------------------------------------------------+
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);
    }
  } // Ce code n'est pas testé.