Uzman Danışmanlar: "Algoritmik Ticaret için MQL5’te Sinir Ağları" kitabından örnekler - sayfa 4

 
" our_model.net" yok , nereye gidiyoruz?
 
اللعبه :

MQL5 :

المؤلف : MetaQuotes

اخرزميات انا عالم التكنولوجيا الجديدة ومطور برامج ومنشء تطبيقات
 
Kitap için yazara çok teşekkür ederim! Tek eksi)))) - Alice Pro'm benim için "bilinç" büyüsünü kaybetti) Saygılarımla, Igor.
 
//+------------------------------------------------------------------+
//|Gelişmiş 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 yayılma
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("Gelişmiş 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;

   // Yayılma 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;

      // Boğa FVG (sadece yükselen trendde aç)
      if(high0 < low2 && price > ma)
        {
         isBullishFVG = true;
         fvgHigh = low2;
         fvgLow = high0;
         break;
        }
      // Ayı 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("Satın alma emri gönderildi: ", res.retcode);
   else
      Print("Sipariş hatası satın alın: ", 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("Satış emri gönderildi: ", res.retcode);
   else
      Print("Satış emri hatası: ", res.retcode);
  }
//+------------------------------------------------------------------+
 
"gpt_test_not_norm" komut dosyasını çalıştırdıktan sonra gpt_not_norm.net dosyasını kullandığımda aşağıdaki hatayı alıyorum

" Strateji test cihazında "İleri Besleme Hatası: 0

Modeli toplamak ve eğitmek için kullandığım "BarsToLine" giriş değişkenini 40 olarak ayarladığımdan emin oldum.

"dikkat" komut dosyasını kullanırsam iyi çalışır


 
Harika ve çok faydalı bir çalışma fakat bir sorun var.(Error of load mode gpt_not_norm.net: 5008)Bunun için bir çözüm var mı?
 

Herkese merhaba. Birçoğumuzun hatalarla karşılaştığına ve bunun çok sinir bozucu olduğuna inanıyorum. Dürüst olmak gerekirse, ben de başlangıçta uzman danışmanın çalışmasını sağlamak için çok heyecanlıydım ve beklendiği gibi kendimi bir yığın hatanın içinde buldum.

Sabrınız varsa ve kodu adım adım incelerken kitabı gözden geçirirseniz, kendinizi doğru şeyi yaparken ve istediğiniz sonuçları alırken bulacağınızı garanti ederim. En çok ihtiyacınız olan şey mql5 dilini olabildiğince iyi anlamak.


Şanslıyım ki tüm kodu çalıştırabiliyorum ve uzman danışman da çalışıyor ama bir stratejiye ihtiyacım var.


Bir şey daha var. Kod her çalıştığında ve onu durdurduğumda, bellekte sızan iki arabellek nesnesi alıyorum. Bu hatayı bulmak için yardıma ihtiyacım var.

 
607967 #:

Bir şey daha var. Kod her çalıştığında ve ben onu durdurduğumda, bellekte sızan iki tampon nesnesi alıyorum. Bu hatayı bulmak için yardıma ihtiyacım var.

Bu genellikle gösterge tutamaçları EA kaldırıldığında terminalin belleğinden serbest bırakılmadığında olur.

Değiştirmeyi deneyin:

//+------------------------------------------------------------------+
//| Uzman başlangıçtan kaldırma işlevi|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   if(!!net)
      delete net;
   if(!!trade)
      delete trade;
   IndicatorRelease(h_RSI);
   IndicatorRelease(h_MACD);
  }

için:

//+------------------------------------------------------------------+
//| Uzman başlangıçtan kaldırma işlevi|
//+------------------------------------------------------------------+
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);
    }
  } // Bu kod test edilmemiştir.