Sistem Demo veya Gerçek Hesapta Hata Veriyor

 

Merhabalar arkadaşlar,

daha önceleri kademeli olarak her düşüşte buy işlemi açan bir strateji üzerinde çalıştığımı belirtmiş desteklerinizi istemiştim. Öncelikle yardımcı olan herkese teşekkürler. Şuan istediğim sonuca ulaştım ve strateji modun da sorunsuz olarak sistemim çalışıyor. Yani benim belirlediğim aralıklarla her düşüşte işlem açıyor ancak bunu demo veya gerçek hesapta çalıştırmak istediğimde hata alıyorum inceleyerek nerede hata olduğunu söyleyebilir misiniz? Şimdiden çok teşekkürler. 

Tüm kodlar aşağıda;

//include the trade Library
#include <Trade\Trade.mqh>
CTrade Trade;
input int                              Ilk_TP                        =  750;     // İlk işlemin Tp Noktası
input int                              Sonraki_TP                    =  750;     //Diğer işlemlerin Tp noktası
input int                              Dusus_Puani                   =  500;     //Kademeli Düşüş Puanı
input double                           Lot_Miktari                   =  0.01;     //Lot Miktarı

void OnTick()
{
//---------------------------------------------------------------------------
//ANA EA KODU 
//---------------------------------------------------------------------------   
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);

   int toplam_acik_pozisyonlar = ToplamAcikPozisyonlar();
   if(toplam_acik_pozisyonlar == 0)
   {
      BuyPozisyonuAc(Lot_Miktari,0,Ask + (Ilk_TP * _Point));
   }
   else 
   {
      ulong Son_Bilet = Son_Bilet_Dongusu();
      
      if(PositionSelectByTicket(Son_Bilet) == true)
      {
         double Pozisyonun_A_fiyati = PositionGetDouble(POSITION_PRICE_OPEN);
         double Pozisyonun_Volumu = PositionGetDouble(POSITION_VOLUME);
         
         if(Ask < (Pozisyonun_A_fiyati - (Dusus_Puani*_Point))) 
         {
            BuyPozisyonuAc(Pozisyonun_Volumu,0,Ask + (Sonraki_TP * _Point));
         }
         
      }
   }
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Açık Pozisyonları Al toplam işlevi                               |
//+------------------------------------------------------------------+
int ToplamAcikPozisyonlar()
{
   int toplam_aktif_siparisler = 0;
   
   for(int i=PositionsTotal()-1; i>=0; i--) // Tüm açık pozisyonlar arasında geçiş yapın (EA tarafından açılmayanlar dahil)
   {
      ulong ticretNumarasi = 0;
      
      if(PositionGetSymbol(i) == Symbol())   //sembolle eşleşir ve sonraki işlemler için konumu seçer
      {
         ticretNumarasi = PositionGetTicket(i); // Bu, pozisyon listemizde göründükleri sıraya göre açık pozisyonu seçer.
         if(ticretNumarasi == 0)
         {
            Print("Pozisyon var ama seçilmedi. Hata: ", GetLastError());  
            ResetLastError();
            continue;
         }
         else
         {
            toplam_aktif_siparisler++;
         }     
      } 
   }//for döngüsünün sonu
   
   return toplam_aktif_siparisler;
}//işlev sonu

//+------------------------------------------------------------------+
//| Mevcut Kâr / Zarar işlevini al                                   |
//+------------------------------------------------------------------+
double Mev_KarZarar()
{
   double toplamkarzarar = 0;
   
   for(int i=PositionsTotal()-1; i>=0; i--) // Tüm açık pozisyonlar arasında geçiş yapın (EA tarafından açılmayanlar dahil)
   {
      ulong ticretNumarasi = 0;
      
      if(PositionGetSymbol(i) == Symbol())//sembolle eşleşir ve sonraki işlemler için konumu seçer
      {
         ticretNumarasi = PositionGetTicket(i); // Bu, pozisyon listemizde göründükleri sıraya göre açık pozisyonu seçer.
         if(ticretNumarasi == 0)
         {
            Print("Pozisyon var ama seçilmedi. Hata: ", GetLastError());  
            ResetLastError();
            continue;
         }
         else

         {
            toplamkarzarar = toplamkarzarar + PositionGetDouble(POSITION_PROFIT);
         }       
      }      
   }
   
   return toplamkarzarar;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Son Pozisyon bilet numarası işlevini al                          |
//+------------------------------------------------------------------+
ulong Son_Bilet_Dongusu()
{
   ulong SonBilet = 0;
   long SonBiletZamani = 0;
   
   for(int i=PositionsTotal()-1; i>=0; i--) 
   {
      ulong ticretNumarasi = 0;
      
      
      if(PositionGetSymbol(i) == Symbol())
      {
         ticretNumarasi = PositionGetTicket(i); 
         if(ticretNumarasi == 0)
         {
            Print("Pozisyon var ama seçilmedi. Hata: ", GetLastError());  
            ResetLastError();
            continue;
         }
         else
         {
            if(PositionGetInteger(POSITION_TIME) > SonBiletZamani)
            {
               SonBilet = ticretNumarasi;
               SonBiletZamani = PositionGetInteger(POSITION_TIME);               
            }
             
         }        
      }   
   }
   
   return SonBilet;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Buy Pozisyonu Acma                                     | 
//+------------------------------------------------------------------+

void BuyPozisyonuAc(double LotSize, double StopLoss, double TakeProfit)
{
   double posLot = LotSize;
   double posSL = StopLoss;
   double posTP = TakeProfit;
   double ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   
   int tries = 5;
   while(tries > 0) // İlk deneme başarısız olursa, açılış pozisyonlarını yeniden denemek için döngü yapın
   {
      Trade.Buy(posLot,_Symbol,ask,posSL,posTP,NULL); 
      
      if(Trade.ResultRetcode()==TRADE_RETCODE_PLACED || Trade.ResultRetcode()==TRADE_RETCODE_DONE) 
      {
         tries = 0;
         //position_Taken_on_Signal = true;
         Print(" Ticket# ile satın alma siparişi başarıyla verildi: ",Trade.ResultOrder());                  
      }
      else
      {
         if(tries > 0) // Eğer buradaysak, pozisyon açık değil demektir.
         {
            tries--;
            Alert("İstendiği gibi satın alma pozisyonu açmaya çalışılıyor");
            Sleep(250); 
         }
         else
         {
            Alert(" Satın alma emri talebi tamamlanamadı. Hata: ",GetLastError());
            ResetLastError();
         }
      }    
   }
   
}
//+------------------------------------------------------------------+
 
Yasar Sari:

Merhabalar arkadaşlar,

daha önceleri kademeli olarak her düşüşte buy işlemi açan bir strateji üzerinde çalıştığımı belirtmiş desteklerinizi istemiştim. Öncelikle yardımcı olan herkese teşekkürler. Şuan istediğim sonuca ulaştım ve strateji modun da sorunsuz olarak sistemim çalışıyor. Yani benim belirlediğim aralıklarla her düşüşte işlem açıyor ancak bunu demo veya gerçek hesapta çalıştırmak istediğimde hata alıyorum inceleyerek nerede hata olduğunu söyleyebilir misiniz? Şimdiden çok teşekkürler. 

Tüm kodlar aşağıda;

Gerçek yada demo hesapta çalıştırmak istediğinizde aldığınız hatayı da buraya yazarmisiniz
 
Ümit UYSAL #:
Gerçek yada demo hesapta çalıştırmak istediğinizde aldığınız hatayı da buraya yazarmisiniz
Sondan ikinci bildiri olan "İstendiği gibi satın alma pozisyonu açmaya çalışılıyor" hatasını veriyor ancak işlem açmıyor.
 

Aldığım hata bu işlem açmaya çalışıyor hatasını veriyor sürekli, biri yardım edebilirse çok memnun olurum.

 
Yasar Sari #:

Aldığım hata bu işlem açmaya çalışıyor hatasını veriyor sürekli, biri yardım edebilirse çok memnun olurum.

hata mesajı değil o kodda alarm koymuşsunuz alış işlemi deneniyor aqma olmuyor. mesaja GetLasterror() kodunu koysaydınız eğer bir hata varsa anlaışılır.

 
Mustafa Damgaci #:

hata mesajı değil o kodda alarm koymuşsunuz alış işlemi deneniyor aqma olmuyor. mesaja GetLasterror() kodunu koysaydınız eğer bir hata varsa anlaışılır.

void BuyPozisyonuAc(double LotSize, double StopLoss, double TakeProfit)
{
   double posLot = LotSize;
   double posSL = StopLoss;
   double posTP = TakeProfit;
   double ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   
   int tries = 5;
   while(tries > 0) // İlk deneme başarısız olursa, açılış pozisyonlarını yeniden denemek için döngü yapın
   {
      Trade.Buy(posLot,_Symbol,ask,posSL,posTP,NULL); 
      
      if(Trade.ResultRetcode()==TRADE_RETCODE_PLACED || Trade.ResultRetcode()==TRADE_RETCODE_DONE) 
      {
         tries = 0;
         //position_Taken_on_Signal = true;
         Print(" Ticket# ile satın alma siparişi başarıyla verildi: ",Trade.ResultOrder());                  
      }
      else
      {
         if(tries > 0) // Eğer buradaysak, pozisyon açık değil demektir.
         {
            tries--;
            Alert("İstendiği gibi satın alma pozisyonu açmaya çalışılıyor");
            Sleep(250); 
         }
         else
         {
            Alert(" Satın alma emri talebi tamamlanamadı. Hata: ",GetLastError());
            ResetLastError();
         }
      }    
   }
   
}

While döngüsü içerisinde alarmları burada döngüyü sağlayamadığı için mi veriyor acaba hatayı? kodların tamamını üstte verdim hocam bir bakabilir misiniz ben ne kadar uğraştıysam bulamadım sorunu.

 
Mustafa Damgaci #:

hata mesajı değil o kodda alarm koymuşsunuz alış işlemi deneniyor aqma olmuyor. mesaja GetLasterror() kodunu koysaydınız eğer bir hata varsa anlaışılır.

GetLasterror() kodunu alarma eklediğimde 4756 hatasını alıyorum hataya baktığımda "Alım-satım isteğinin gönderilmesi başarısız oldu" hatası ile karşılaştım.

 
Güncel
 

stoploss  rakamı uygun olmaya bilir  ,  trade.buy işleme sokmadan  önce posssl ve  postp değerlerini basıp görelim  uygun rakamlar mı bu değerler fiyata çok yakın olamaz altında  veya üstünde olamaz  megatif olamaz  vesaire kontrol edilmeli  bunu belirleyen durdurma seviyesi minumumu var spreead farkı bu dikkate alındımı 

SYMBOL_TRADE_STOPS_LEVEL bunu inceleyin
 
Mustafa Damgaci #:

stoploss  rakamı uygun olmaya bilir  ,  trade.buy işleme sokmadan  önce posssl ve  postp değerlerini basıp görelim  uygun rakamlar mı bu değerler fiyata çok yakın olamaz altında  veya üstünde olamaz  megatif olamaz  vesaire kontrol edilmeli  bunu belirleyen durdurma seviyesi minumumu var spreead farkı bu dikkate alındımı 

SYMBOL_TRADE_STOPS_LEVEL bunu inceleyin
Hocam stoploss zaten 0 olarak Ontick de yani yok örneğin EURUSD  de 100 puanlık her düşüşte Sl 0 TP ask+150 point şeklinde spread farklı burada kurtarır zaten çok küçük aralıklarla işlem açtırmıyorum örneğin Altında 150 pointlik düşüşte sl 0 tp 300 point yazıyorum vs vs koda trade.ResultRetcode() u eklendiğimde 

10026 TRADE_RETCODE_SERVER_DISABLES_AT
Otomatik ticaret sunucu tarafından devre dışı bırakıldı.

Hatası ile karşılaştım. Ancak MetaQuotes dahil birçok firmada çalıştırmayı denedim şirketlerin algoritmik trade izin vermeme gibi bir durumu söz konusu değil. Strateji modunda harika şekilde çalışıyor ancak demo veya gerçek hesapta sürekli bu hatayı veriyor kodları defalarca inceledim gözümden kacan bir yer olmalı ancak bulamıyorum. Döngülerin herhangi birinde hata yapmış olabilir miyim?
 

manuel elle işlem yaparken sorun çıkmıyor ise algo  çalışırken çıkıyorsa aracı kurum engelliyor otamatik alım satımı bir kaç şirket izin vermiyor duymuştum 

TRADE_RETCODE_SERVER_DISABLES_AT  yanıtı ancak aracı kurumla çözülebilir

TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)

bu değer true okumalısın

TRADE_RETCODE_ONLY_REAL 

TRADE_RETCODE_ olan lar var sadece sembolde de kıstılama olabiliyor.


while(tries > 0)

 buna ne gerek var ben yıllardır otomatik ticaret yapıyorum  ilk seferde işlemin olmamasının bir mantığı yok  emir fişi aldığın anda bu sisteme kuyruğa girer bu emrin gerçekleşmemesi

diye bir olay mql5 de zaten teorik olarak anlamı yok 

CTrade::Buy nesnesine bakarsan zaten tüm koşullar gerçekleşmeden OrderSend işleme girmez 

yani ben burada tekrar denencek birşey göremiyorum   zaten trade nesnesi herşeyi düşünmüş 

https://www.mql5.com/tr/articles/643&nbsp; bu makale de faydalı olabilir




 

Neden: