Sistemi Esperti: Esempi tratti dal libro "Reti neurali per il trading algoritmico con MQL5" - pagina 4

 
non c'è " nostro_modello.net", cosa stiamo andando a fare?
 
اللعبه :

MQL5 :

المؤلف : MetaQuotes

اخرزميات انا عالم التكنولجيا الجديدة ومطور برامج ومنشء تطبيقات
 
Grazie mille all'autore per il libro! L'unico neo)))) - la mia Alice Pro ha perso la magia della "coscienza" per me) Con rispetto, Igor.
 
//+------------------------------------------------------------------+
//|FVG avanzato 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 diffondere
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("FVG EA avanzato 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;

   // Diffondere il 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;

      // FVG rialzista (sadece yükselen trendde aç)
      if(high0 < low2 && price > ma)
        {
         isBullishFVG = true;
         fvgHigh = low2;
         fvgLow = high0;
         break;
        }
      // FVG ribassista (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("Ordine d'acquisto:", res.retcode);
   else
      Print("Ordine di acquisto 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("Ordine di vendita:", res.retcode);
   else
      Print("Ordine di vendita hatası: ", res.retcode);
  }
//+------------------------------------------------------------------+
 
Quando utilizzo gpt_not_norm.net dopo aver eseguito lo script "gpt_test_not_norm" ottengo il seguente errore

" Errore di Feed Forward: 0" nel tester della strategia.

Mi sono assicurato di impostare la variabile di input "BarsToLine" a 40, che ho utilizzato per la raccolta e per l'addestramento del modello.

Se uso lo script "attention" funziona bene.


 
È un lavoro fantastico e molto utile, ma c'è un problema.(Errore della modalità di caricamento gpt_not_norm.net: 5008)C'è una soluzione per questo?
 

Ciao a tutti. Credo che molti di noi siano incappati in errori ed è molto frustrante. Ad essere sincero, anch'io ero molto entusiasta all'inizio di far funzionare l'expert advisor e come previsto mi sono ritrovato in un mucchio di errori.

Se avete pazienza e leggete il libro guardando il codice passo per passo, vi garantisco che vi troverete a fare la cosa giusta e a ottenere i risultati che desiderate. La cosa più importante è capire al meglio il linguaggio mql5.


Fortunatamente sono riuscito a far funzionare l'intero codice e anche l'expert advisor funziona, ma ho bisogno di una strategia.


Un'altra cosa. Ogni volta che il codice è in esecuzione e lo fermo, due oggetti buffer perdono memoria. Ho bisogno di aiuto per trovare questo bug.

 
607967 #:

Un'altra cosa. Ogni volta che il codice è in esecuzione e lo fermo, si verificano due perdite di memoria di oggetti buffer. Ho bisogno di aiuto per trovare questo bug.

Di solito succede quando gli handle degli indicatori non vengono rilasciati dalla memoria del terminale dopo la rimozione di EA.

Provate a cambiare:

//+------------------------------------------------------------------+
//| Funzione di deinizializzazione dell'esperto|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(!!net)
      delete net;
   if(!!trade)
      delete trade;
   IndicatorRelease(h_RSI);
   IndicatorRelease(h_MACD);
  }

a:

//+------------------------------------------------------------------+
//| Funzione di deinizializzazione dell'esperto|
//+------------------------------------------------------------------+
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);
    }
  } // Questo codice non è stato testato.