Belirli bir komisyoncu ile gerçek hesap için Çoklu Sipariş Girişi Sorunu

 

Sevgili MQL5 kullanıcıları.

Şu anda EA'mda, ancak yalnızca belirli bir komisyoncu için bazı çoklu sipariş yürütme sorunları yaşıyorum.

My EA, strateji test cihazında mükemmel çalışıyor. Ayrıca canlı ticaret modunda diğer brokerlerle de çalışır.

Belirli bir komisyoncu ile, EA'm bazen aynı anda aynı boyutta 10 sipariş.

Sorunun komisyoncular ve terminal arasındaki iletişimden kaynaklandığı görülüyor.

Aşağıda mevcut kodum var ve mevcut kod, siparişin yürütülüp yürütülmediğini 10 kez kontrol ediyor.

EA, sipariş gönderildikten hemen sonra retcode==10009 veya retcode==10008 alırsa, döngü durur ve yalnızca 1 sipariş açılır. Bu ideal bir durum ve iyi bir çalışma senaryosu.

Ancak, sipariş gönderildikten hemen sonra terminal retcode==10009 veya retcode==10008 almazsa aynı boyutta 10 siparişi açabilir. Başkalarının da aynı sorunları yaşadığını duydum.

Bu çoklu sipariş girişi sorununu nasıl durdurabilirim.

Herhangi bir öneri gerçekten takdir edilecektir.

Saygılarımla.

   for(int i=0;i<10;i++)
   {
     
      volume=NormalizeDouble(volume, lotDigit);
      if(volume<=0.0) break;
     
     
      if(Type==POSITION_TYPE_SELL)
      {
         request.type=ORDER_TYPE_SELL;
         request.price=SymbolInfoDouble(mSymbol,SYMBOL_BID);
        
         if(TP!=0) takeprofit = request.price-TP*mPoint;
         if(SL!=0) stoploss = request.price+SL*mPoint;
      }
     
     
      if(Type==POSITION_TYPE_BUY)
      {
         request.type=ORDER_TYPE_BUY;
         request.price=SymbolInfoDouble(mSymbol,SYMBOL_ASK);
        
         if(TP!=0) takeprofit = request.price+TP*mPoint;
         if(SL!=0) stoploss = request.price-SL*mPoint;
      }
     
     
      request.action = TRADE_ACTION_DEAL;
      request.symbol = mSymbol;
      request.volume = MathMin(volume,SymbolInfoDouble(mSymbol,SYMBOL_VOLUME_MAX));
      request.sl = stoploss;
      request.tp = takeprofit;
      request.deviation=SymbolInfoInteger(mSymbol,SYMBOL_SPREAD);
     

     
      request.type_filling=ORDER_FILLING_FOK;
      request.comment=DoubleToString(Money,2)+"$";
     
      if(!OrderCheck(request,check))
      {
         if(check.margin_level<100) volume-=SymbolInfoDouble(mSymbol,SYMBOL_VOLUME_STEP);
         Print("OrderCheck Code: ",check.retcode);
         continue;
      }
     
     
      if(!OrderSend(request,result) || result.deal==0 )
      {
         Print("OrderSend Code: ",result.retcode);
         if(result.retcode==TRADE_RETCODE_TRADE_DISABLED) break;
         if(result.retcode==TRADE_RETCODE_MARKET_CLOSED) break;
         if(result.retcode==TRADE_RETCODE_NO_MONEY) break;
         if(result.retcode==TRADE_RETCODE_TOO_MANY_REQUESTS) Sleep(5000);
         if(result.retcode==TRADE_RETCODE_FROZEN) break;
         if(result.retcode==TRADE_RETCODE_CONNECTION) Sleep(15000);
         if(result.retcode==TRADE_RETCODE_LIMIT_VOLUME) break;
        
      }
      else if(result.retcode==10009 || result.retcode==10008)
      {
          Print("OrderSend Code: ",result.retcode);
          volume-=result.volume; //If order was successful then reduce volume to 0.0, then the loop will be terminated.
         
          if(Type == POSITION_TYPE_BUY) {mBuyPositionCnt = mBuyPositionCnt + 1.0; cntLotCalculation = cntLotCalculation + 1;}
          if(Type == POSITION_TYPE_SELL) {mSellPositionCnt = mSellPositionCnt + 1.0; cntLotCalculation = cntLotCalculation + 1;}
          break;
      }
     
     

      Sleep(1000);
   }
  

 

 
FinanceEngineer :

Sevgili MQL5 kullanıcıları.

Şu anda EA'mda, ancak yalnızca belirli bir komisyoncu için bazı çoklu sipariş yürütme sorunları yaşıyorum.

My EA, strateji test cihazında mükemmel çalışıyor. Ayrıca canlı ticaret modunda diğer brokerlerle de çalışır.

Belirli bir komisyoncu ile, EA'm bazen aynı anda aynı boyutta 10 sipariş.

Sorunun komisyoncular ve terminal arasındaki iletişimden kaynaklandığı görülüyor.

Aşağıda mevcut kodum var ve mevcut kod, siparişin yürütülüp yürütülmediğini 10 kez kontrol ediyor.

EA, sipariş gönderildikten hemen sonra retcode==10009 veya retcode==10008 alırsa, döngü durur ve yalnızca 1 sipariş açılır. Bu ideal bir durum ve iyi bir çalışma senaryosu.

Ancak, sipariş gönderildikten hemen sonra terminal retcode==10009 veya retcode==10008 almazsa aynı boyutta 10 siparişi açabilir . Başkalarının da aynı sorunları yaşadığını duydum.

Bu çoklu sipariş girişi sorununu nasıl durdurabilirim.

Herhangi bir öneri gerçekten takdir edilecektir.

Saygılarımla.

10 sipariş açıldığında hangi kodu aldınız?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum


Lütfen kod gönderirken SRC butonunu kullanın. Teşekkür ederim.




 
angevoyageur :

10 sipariş açıldığında hangi kodu aldınız?

Merhaba

Her sipariş için retcode==10008 aldım. 10 defa tekrarladı. Saygılarımla.


 


   for ( int i= 0 ;i< 10 ;i++)
   {
      
      volume= NormalizeDouble (volume, lotDigit);
       if (volume<= 0.0 ) break ;
      
      
       if (Type== POSITION_TYPE_SELL )
      {
         request.type= ORDER_TYPE_SELL ;
         request.price= SymbolInfoDouble (mSymbol, SYMBOL_BID );
         
         if (TP!= 0 ) takeprofit = request.price-TP*mPoint;
         if (SL!= 0 ) stoploss = request.price+SL*mPoint;
      }
      
      
       if (Type== POSITION_TYPE_BUY )
      {
         request.type= ORDER_TYPE_BUY ;
         request.price= SymbolInfoDouble (mSymbol, SYMBOL_ASK );
         
         if (TP!= 0 ) takeprofit = request.price+TP*mPoint;
         if (SL!= 0 ) stoploss = request.price-SL*mPoint;
      }
      
      
      request.action = TRADE_ACTION_DEAL ;
      request.symbol = mSymbol;
      request.volume = MathMin (volume, SymbolInfoDouble (mSymbol, SYMBOL_VOLUME_MAX ));
      request.sl = stoploss;
      request.tp = takeprofit;
      request.deviation= SymbolInfoInteger (mSymbol, SYMBOL_SPREAD );
      

      
      request.type_filling= ORDER_FILLING_FOK ;
      request.comment= DoubleToString (Money, 2 )+ "$" ;
      
       if (! OrderCheck (request,check))
      {
         if (check.margin_level< 100 ) volume-= SymbolInfoDouble (mSymbol, SYMBOL_VOLUME_STEP );
         Print ( "OrderCheck Code: " ,check.retcode);
         continue ;
      }
      
      
       if (! OrderSend (request,result) || result.deal== 0 )
      {
         Print ( "OrderSend Code: " ,result.retcode);
         if (result.retcode== TRADE_RETCODE_TRADE_DISABLED ) break ;
         if (result.retcode== TRADE_RETCODE_MARKET_CLOSED ) break ;
         if (result.retcode== TRADE_RETCODE_NO_MONEY ) break ;
         if (result.retcode== TRADE_RETCODE_TOO_MANY_REQUESTS ) Sleep ( 5000 );
         if (result.retcode== TRADE_RETCODE_FROZEN ) break ;
         if (result.retcode== TRADE_RETCODE_CONNECTION ) Sleep ( 15000 );
         if (result.retcode== TRADE_RETCODE_LIMIT_VOLUME ) break ;
         
      }
       else if (result.retcode== 10009 || result.retcode== 10008 )
      { 
           Print ( "OrderSend Code: " ,result.retcode);
          volume-=result.volume; //If order was successful then reduce volume to 0.0, then the loop will be terminated.
          
           if (Type == POSITION_TYPE_BUY ) {mBuyPositionCnt = mBuyPositionCnt + 1.0 ; cntLotCalculation = cntLotCalculation + 1 ;}
           if (Type == POSITION_TYPE_SELL ) {mSellPositionCnt = mSellPositionCnt + 1.0 ; cntLotCalculation = cntLotCalculation + 1 ;}
           break ;
      }
      
      

       Sleep ( 1000 );
   }
   

 
 
FinanceEngineer :

Merhaba

Her sipariş için retcode==10008 aldım. 10 defa tekrarladı. Saygılarımla.

Burada bir ara verdiğiniz için aynı döngüde tekrar etmez:

       else if (result.retcode== 10009 || result.retcode== 10008 )
      { 
           Print ( "OrderSend Code: " ,result.retcode);
          volume-=result.volume; //If order was successful then reduce volume to 0.0, then the loop will be terminated.
          
           if (Type == POSITION_TYPE_BUY ) {mBuyPositionCnt = mBuyPositionCnt + 1.0 ; cntLotCalculation = cntLotCalculation + 1 ;}
           if (Type == POSITION_TYPE_SELL ) {mSellPositionCnt = mSellPositionCnt + 1.0 ; cntLotCalculation = cntLotCalculation + 1 ;}
           break ;
      }

Onaylamak için uzman günlüklerinizi gönderebilir misiniz?

Bu döngüden önce bir PositionSelect(Symbol())'e sahip olmalısınız?

 
angevoyageur :

Burada bir ara verdiğiniz için aynı döngüde tekrar etmez:

Onaylamak için uzman günlüklerinizi gönderebilir misiniz?

Bu döngüden önce bir PositionSelect(Symbol())'a sahip olmalısınız?

Evet elbette. İşte uzmanların günlükleri.

PF 0 00:00:02.348 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
CE 0 00:00:03.520 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
DI 0 00:00:04.692 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
FL 0 00:00:05.864 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
HS 0 00:00:07.020 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
PF 0 00:00:08.177 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
QJ 0 00:00:09.348 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
KI 0 00:00:10.489 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
HL 0 00:00:11.630 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008

QS 0 00:00:12.786 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008

Ayrıca tahminin doğru. Mevcut pozisyonun hacmini kontrol etmek için bu koddan önce PositionSelect(Symbol()) kullandım.

Saygılarımla.

 
FinanceEngineer :

Evet elbette. İşte uzmanların günlükleri.

PF 0 00:00:02.348 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
CE 0 00:00:03.520 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
DI 0 00:00:04.692 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
FL 0 00:00:05.864 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
HS 0 00:00:07.020 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
PF 0 00:00:08.177 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
QJ 0 00:00:09.348 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
KI 0 00:00:10.489 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008
HL 0 00:00:11.630 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008

QS 0 00:00:12.786 EA_v (EURJPY,H1) SiparişGönder Kodu: 10008

Ayrıca tahminin doğru. Mevcut pozisyonun hacmini kontrol etmek için bu koddan önce PositionSelect(Symbol()) kullandım.

Saygılarımla.

Tamam, bu yüzden bazı konularda konuştuğumuz aynı problem. PositionSelect(), terminalin yerel veritabanından güncellenir ve onay işaretleri, bunun güncellenmesi için çok hızlı gelir. Sleep() güvenilir bir yöntem değildir, yeni bir emir göndermeden önce pozisyonunuzun açık olduğundan emin olmak için bir geçici çözüm bulmanız gerekir.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

EA'm çift giriş yapıyor

doşur , 2013.12.21 03:21

Aynı sorunu yaşayan ve xxxx kullanan birini hatırlıyorum.

Konuyu bulamadım, yardımcı olabilecek varsa çok teşekkurler...


 
angevoyageur :

Tamam, bu yüzden bazı konularda konuştuğumuz aynı problem. PositionSelect(), terminalin yerel veritabanından güncellenir ve onay işaretleri, bunun güncellenmesi için çok hızlı gelir. Sleep() güvenilir bir yöntem değildir, yeni bir emir göndermeden önce pozisyonunuzun açık olduğundan emin olmak için bir geçici çözüm bulmanız gerekir.

Anlıyorum. Çok teşekkürler. PositionSelect() çalışmıyorsa, PositionsTotal() kullanarak sıralamayı sınırlamaya ne dersiniz? PositionsTotal(), Broker'ın veritabanından güncellendi mi?

 
FinanceEngineer :

Anlıyorum. Çok teşekkürler. PositionSelect() çalışmıyorsa, PositionsTotal() kullanarak sıralamayı sınırlamaya ne dersiniz? PositionsTotal(), Broker'ın veritabanından güncellendi mi?

Sanmıyorum ama deneyip haber verebilirsiniz.
 
angevoyageur :
Sanmıyorum ama deneyip haber verebilirsiniz.
Emin ol yapacağım. Saygılarımızla.
 

Merhaba

Bu soruna çalışan bir çözüm bulan var mı?

Uygun kontrollere sahip olduğunuzda birden fazla siparişin yürütülmesi sinir bozucu.

Tüm ticari işlemler uzak bir komisyoncu sunucusunda gerçekleştiğinde, PositionSelect'in yerel bir veritabanından güncellenmesi mantıklı değildir.

Bunun gelecekteki derleme sürümlerinde ele alınması gerektiğine inanıyorum.

Lütfen çözümünüzü gönderin.

Teşekkür ederim,

 
BlindMist :

siparişin yürütülmesi sinir bozucu.

Tüm ticari işlemler uzak bir aracı sunucusunda gerçekleştiğinde, PositionSelect'in yerel bir veritabanından güncellenmesi mantıklı değildir.

Bunun gelecekteki derleme sürümlerinde ele alınması gerektiğine inanıyorum.

Lütfen çözümünüzü gönderin.

Teşekkür ederim,

Merhaba BlindMist , hesabınızın aracı sunucusuyla senkronize olup olmadığını doğrulamak için yerel veritabanınızı kontrol etmeniz mantıklıdır .

Lütfen bu sorunu çözmek için önerilen gönderiye bir göz atın.