Experts: Exemplos do livro "Redes neurais e negociação algorítmica no MQL5" - página 4

 
sem " our_model.net ", para onde estamos indo?
 
اللعبه :

MQL5 :

المؤلف : MetaQuotes

اخرزميات انا عالم التكنولوجيا الجديدة ومطور برامج ومنشء تطبيقات
 
Muito obrigado ao autor pelo livro! O único ponto negativo)))) - minha Alice Pro perdeu a magia da "consciência" para mim) Com todo o respeito, Igor.
 
//+------------------------------------------------------------------+
//|EA avançado de FVG.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("Avançado 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;

   // Controle de poços
   if(PositionSelect(_Symbol)) return;

   // Filtros de tendência (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 de alta (tendência de alta)
      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("Buy order gönderildi: ", res.retcode);
   else
      Print("Buy order 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("Sell order hatası: ", res.retcode);
  }
//+------------------------------------------------------------------+
 
Quando uso o gpt_not_norm.net depois de executar o script "gpt_test_not_norm", recebo o seguinte erro

" Error of Feed Forward: 0" no testador de estratégia

Certifiquei-me de definir a variável de entrada "BarsToLine" como 40, que usei para coletar e treinar o modelo.

Se eu usar o script "attention", ele funcionará bem


 
É um trabalho excelente e muito útil, mas há um problema (erro do modo de carregamento gpt_not_norm.net: 5008).
 

Olá a todos. Acredito que muitos de nós tenham se deparado com erros e isso é muito frustrante. Para ser sincero, eu também estava muito empolgado no início para fazer o expert advisor funcionar e, como era de se esperar, me deparei com uma pilha de erros.

Se você tiver paciência e ler o livro examinando o código passo a passo, garanto que fará a coisa certa e obterá os resultados desejados. O que você mais precisa é entender a linguagem mql5 da melhor forma possível.


Felizmente, estou conseguindo fazer com que todo o código funcione e o consultor especialista também está funcionando, mas preciso de uma estratégia.


Mais uma coisa. Sempre que o código está em execução e eu o interrompo, dois objetos de buffer vazam na memória. Preciso de ajuda para encontrar esse erro.

 
607967 #:

Mais uma coisa. Sempre que o código está em execução e eu o interrompo, estou recebendo dois objetos de buffer vazando na memória. Preciso de ajuda para encontrar esse erro.

Isso geralmente acontece quando os identificadores de indicadores não são liberados da memória do terminal após a remoção do EA.

Tente alterar:

//+------------------------------------------------------------------+
//| Função de desinicialização de especialista|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(!!net)
      delete net;
   if(!!trade)
      delete trade;
   IndicatorRelease(h_RSI);
   IndicatorRelease(h_MACD);
  }

para:

//+------------------------------------------------------------------+
//| Função de desinicialização de especialista|
//+------------------------------------------------------------------+
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);
    }
  } // Esse código não foi testado.