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

 
figurelli :
Merhaba FinanceEngineer , belki orijinal kodunuzu çoklu sipariş probleminizi kontrol etmeye başlamanız daha iyi olur, çünkü bunu yaparsak muhtemelen burada diğer kritik noktaları ele alacağız ve odağı kaybetmeyeceğiz, ne düşünüyorsunuz?

merhaba figürlü

Bu benim yeni kodum. Bu konudaki çoklu sipariş sorununu gündeme getirdiğimden beri değiştim.

Şimdiye kadar bu kod birkaç broker ile iyi çalışıyor. Değişiklikten sonra henüz çoklu sipariş sorunu bulunamadı. BlindMist, bu komisyoncu ile çoklu sipariş probleminden kaçınıp kaçınamayacağını görmek için bu kodu deneyebilir.

 for ( int i= 0 ;i< 10 ;i++)
   {

      
 
      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     = strComment;
      request.magic         = EAMagic;
      
      
      
       if (! OrderCheck (request,check))
      {
         if (check.margin_level< 100 ) volume-= SymbolInfoDouble (mSymbol, SYMBOL_VOLUME_STEP );
         Print ( "OrderCheck Code: " ,check.retcode);
         continue ;
      }
      

      
       bool checkOrderSend = OrderSend (request, result);
      
       if (result.retcode== 10009 || result.retcode== 10008 )
      { 
           Print ( "OrderSend was successful. Code: " ,result.retcode);
          volume-=result.volume; //If order was successful then reduce volume to 0.0, then the loop will be terminated.

          
           break ;
      }
       else
      {
           Print (ResultRetcodeDescription(result.retcode));
      }
      

       Sleep ( 1000 );
      
   }
   

 

 
 
FinanceEngineer :

merhaba figürlü

Bu benim yeni kodum. Bu konudaki çoklu sipariş sorununu gündeme getirdiğimden beri değiştim.

Şimdiye kadar bu kod birkaç broker ile iyi çalışıyor. Değişiklikten sonra henüz çoklu sipariş sorunu bulunamadı. BlindMist, bu komisyoncuyla çoklu sipariş probleminden kaçınıp kaçınamayacağını görmek için bu kodu deneyebilir.

Lütfen kod gönderirken SRC butonunu kullanın.

Gönderdiğiniz kod (tümü) çifte emirleri önleyemez ve aksine bazı durumlarda çifte emirleri tetikleyebilir.

 
angevoyageur :

Lütfen kod gönderirken SRC butonunu kullanın.

Gönderdiğiniz kod (tümü) çifte emirleri önleyemez ve aksine bazı durumlarda çifte emirleri tetikleyebilir.

Döngü içinde 10 saat uyku ayarlamak dışında bir çözüm varsa daha iyi ne olabilir?
 
FinanceEngineer :

merhaba figürlü

Bu benim yeni kodum. Bu konudaki çoklu sipariş sorununu gündeme getirdiğimden beri değiştim.

Şimdiye kadar bu kod birkaç broker ile iyi çalışıyor. Değişiklikten sonra henüz çoklu sipariş sorunu bulunamadı. BlindMist, bu komisyoncuyla çoklu sipariş probleminden kaçınıp kaçınamayacağını görmek için bu kodu deneyebilir.

Merhaba FinanceEngineer , orijinal kodunuzda Print("OrderSend Code: "...) if { } ve else { } konumunda olduğunu unutmayın.

Ancak { }'de bir kesinti olur ve hata ayıklama kodunuz retcode = 10008 (TRADE_RETCODE_PLACED) x 10'u gösterir.

Dolayısıyla, çıkarımla, if { } koşul hata ayıklamasını yazdırıyordunuz ve aranız hiç kullanılmadı.

 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 ;
      }

Şimdi kodunuzu değiştirdiniz ve daha net görünüyorsunuz, ancak artık OrderSend()'in dönüş değerini değil, sadece result.retcode'u test ettiğinizi unutmayın. Bunu, daha önce sorduğum checkOrderSend (*** buraya bakın) değişkenini kullanarak düzeltebilirsiniz:

       bool checkOrderSend= OrderSend (request,result);

       if (checkOrderSend) // (*** look here)
        {
         if (result.retcode== 10009 || result.retcode== 10008 )
           {
             Print ( "OrderSend was successful. Code: " ,result.retcode);
            volume-=result.volume; //If order was successful then reduce volume to 0.0, then the loop will be terminated.
             break ;
           }
         else
           {
             Print (ResultRetcodeDescription(result.retcode));
           }
        }
       else 
        {
         Print ( "OrderSend execution error." );
        }

Bu nedenle, bence yapılacak ilk şey, bu testi düzeltmek ve bildirdiğiniz aynı sorunlu komisyoncuyu kullanarak tekrar kontrol etmektir. Sorun tekrar olmazsa, tebrikler, hatayı gerçekten çözdünüz, yani bu, kodunuzun geleceğe yönelik veya en güvenli olduğunu göstermez, ancak hatayı bulduğumuz anlamına gelir.

Aslında, hata oluşmadığı için kodunuzu tekrar unutabilir veya değiştirmekten kaçınabilirsiniz, ancak bu durumda, artık OrderSend() dönüş değerini test etmediğinize dikkat etmelisiniz.

Umarım bu bilgiler size yardımcı olabilir.

 
figurelli :

Merhaba FinanceEngineer , orijinal kodunuzda Print("OrderSend Code: "...) if { } ve else { } konumunda olduğunu unutmayın.

Ancak { }'de bir kesinti olur ve hata ayıklama kodunuz retcode = 10008 (TRADE_RETCODE_PLACED) x 10'u gösterir.

Dolayısıyla, çıkarımla, if { } koşul hata ayıklamasını yazdırıyordunuz ve aranız hiç kullanılmadı.

Şimdi kodunuzu değiştirdiniz ve daha net görünüyorsunuz, ancak artık OrderSend()'in dönüş değerini değil, sadece result.retcode'u test ettiğinizi unutmayın. Bunu, daha önce sorduğum checkOrderSend (*** buraya bakın) değişkenini kullanarak düzeltebilirsiniz:

Bu nedenle, bence yapılacak ilk şey, bu testi düzeltmek ve bildirdiğiniz aynı sorunlu komisyoncuyu kullanarak tekrar kontrol etmektir. Sorun tekrar olmazsa, tebrikler, hatayı gerçekten çözdünüz, yani bu, kodunuzun geleceğe yönelik veya en güvenli olduğunu göstermez, ancak hatayı bulduğumuz anlamına gelir.

Aslında, hata oluşmadığı için kodunuzu tekrar unutabilir veya değiştirmekten kaçınabilirsiniz, ancak bu durumda, artık OrderSend() dönüş değerini test etmediğinize dikkat etmelisiniz.

Umarım bu bilgiler size yardımcı olabilir.

Peki ya iade edilen kod 10010?

Çift giriş emri herhangi bir komisyoncuda gerçekleşebilir, çok daha fazla onay aldığınız için bunu Alpari ile alma olasılığınız daha yüksektir.

 
angevoyageur :

Peki ya iade edilen kod 10010?

Çift giriş emri herhangi bir komisyoncuda gerçekleşebilir, çok daha fazla onay aldığınız için bunu Alpari ile alma olasılığınız daha yüksektir.

Bana soruyorsanız, daha önce de söylediğim gibi, bu kodu geleceğe yönelik ve yeterince güvenli olarak görmüyorum ve bu, dönüş kodunun eksikliğiyle ilgili sadece bir örnek, bu yüzden lütfen tekrar okuyun.

Ancak, kod yazarına soruyorsanız, doğrudan ona sormaya ne dersiniz?

 
figurelli :

Merhaba FinanceEngineer , orijinal kodunuzda Print("OrderSend Code: "...) if { } ve else { } konumunda olduğunu unutmayın.

Ancak { }'de bir kesinti olur ve hata ayıklama kodunuz retcode = 10008 (TRADE_RETCODE_PLACED) x 10'u gösterir.

Dolayısıyla, çıkarımla, if { } koşul hata ayıklamasını yazdırıyordunuz ve aranız hiç kullanılmadı.

Şimdi kodunuzu değiştirdiniz ve daha net görünüyorsunuz, ancak artık OrderSend()'in dönüş değerini değil, sadece result.retcode'u test ettiğinizi unutmayın. Bunu, daha önce sorduğum checkOrderSend (*** buraya bakın) değişkenini kullanarak düzeltebilirsiniz:

Bu nedenle, bence yapılacak ilk şey, bu testi düzeltmek ve bildirdiğiniz aynı sorunlu komisyoncuyu kullanarak tekrar kontrol etmektir. Sorun tekrar olmazsa, tebrikler, hatayı gerçekten çözdünüz, yani bu, kodunuzun geleceğe yönelik veya en güvenli olduğunu göstermez, ancak hatayı bulduğumuz anlamına gelir.

Aslında, hata oluşmadığı için kodunuzu tekrar unutabilir veya değiştirmekten kaçınabilirsiniz, ancak bu durumda, artık OrderSend() dönüş değerini test etmediğinize dikkat etmelisiniz.

Umarım bu bilgiler size yardımcı olabilir.

Merhaba

Kulağa garip geldiğini biliyorum. Önceki kodda dönen OrderSend(request,result) değerini kontrol ettiğimde birden fazla sipariş sorunu ile karşılaştım. Şimdi yeni kodumda, OrderSend(request,result)'un döndürülen değerini kontrol etmiyorum (ancak terminalin yeni yapısında hata oluşmasını önlemek için yine de döndürülen değeri bazı değişkenlere atadım.

Yeni kod ile çoklu sipariş sorunu yaşamıyorum. Çok fazla kene gönderme konusunda itibarı olan Alpari İngiltere'yi kullandım. Kodum mükemmel olmayabilir ama bu şekilde düşünün. Meta Trader 5'te kontrol edilmesi gereken oldukça fazla sayıda iade kodu var.

Birincisi OrderCheck'ten dönen değer, ikincisi OrderSend'den dönen değer ve üçüncüsü de result.retcode'da atanan dönen değerdir. Döndürülen ilk iki değer hangisi olursa olsun, gerçekten en çok önemsememiz gereken şey, sonuncusu artı fiilen yürütülen hacim miktarıdır.

Bu gerçeğe dayanarak, kodumu daha basit hale getirdim, sadece doğrudan result.retcode'u kontrol etmeye gittim. Yanlışım varsa lütfen düzelt. Bence MT5'teki sipariş yürütme kesinlikle MT4'ten çok daha karmaşık ve çoğumuzun kafası karışmış durumda.

Yalnızca mantığı kullanarak net bir vaka oluşturamazsak, deneyleri kullanarak net bir vaka oluşturabiliriz. Bu nedenle, BlindMist'e veya diğer kişilere, OrderSend işlevini kontrol etmeyi atlamanın gerçekten yardımcı olup olmayacağını görmek için komisyoncularıyla bu kodu denemelerini öneririm.

Saygılarımla.

 
figurelli :
Bana soruyorsanız, daha önce de söylediğim gibi, bu kodu geleceğe yönelik ve yeterince güvenli olarak görmüyorum ve bu, dönüş kodunun eksikliğiyle ilgili sadece bir örnek, bu yüzden lütfen tekrar okuyun.

Ancak, kod yazarına soruyorsanız, doğrudan ona sormaya ne dersiniz?

Bu konuya katılan herkese sordum. 10010 koduyla ilgili mesajınızı kaçırdım, nerede?

 
angevoyageur :

Bu konuya katılan herkese sordum. 10010 koduyla ilgili mesajınızı kaçırdım, nerede?

Merhaba Alain,

Bilmeniz gerekenler benim için net değil, çünkü biz sadece FinanceEngineer'in yeni kodundan ve orijinal koddan değiştirilen OrderSend() dönüş kodunu test etme konusunda bir tavsiyeden bahsediyoruz.

Orijinal kodunun ve yeni kodunun 10010 kod testi olmadığını unutmayın, bu yüzden sizinle ilgiliyse neden ilk mesajından beri sormadınız?

Her neyse, bir FOK doldurma politikası için neden 10010 kod testine ihtiyacınız olduğunu açıklayabilir misiniz?

Bu seni ve diğer Moderatörlerin konuştuğunu ilk görüşüm olmadığı için, bizimle paylaşabileceğiniz FOK (Fill Or Kill) emirleri için bu kod testinin gerçekten gerekli olduğu bazı durumlar biliyor musunuz?

Şimdiden teşekkürler.

 
FinanceEngineer :

Merhaba

Kulağa garip geldiğini biliyorum. Önceki kodda OrderSend(request,result)'un dönen değerini kontrol ettiğimde çoklu sipariş sorunu ile karşılaştım. Şimdi yeni kodumda, OrderSend(request,result)'un döndürülen değerini kontrol etmiyorum (ancak terminalin yeni yapısında hata oluşmasını önlemek için yine de döndürülen değeri bazı değişkenlere atadım.

Yeni kod ile çoklu sipariş sorunu yaşamıyorum. Çok fazla kene gönderme konusunda itibarı olan Alpari İngiltere'yi kullandım. Kodum mükemmel olmayabilir ama bu şekilde düşünün. Meta Trader 5'te kontrol edilmesi gereken oldukça fazla sayıda iade kodu var.

Birincisi OrderCheck'ten dönen değer, ikincisi OrderSend'den dönen değer ve üçüncüsü de result.retcode'da atanan dönen değerdir. Döndürülen ilk iki değer hangisi olursa olsun, gerçekten en çok önemsememiz gereken şey, sonuncusu artı fiilen yürütülen hacim miktarıdır.

Bu gerçeğe dayanarak, kodumu daha basit hale getirdim, sadece doğrudan result.retcode'u kontrol etmeye gittim. Yanlışım varsa lütfen düzelt. MT5'teki emir yürütmenin kesinlikle MT4'ten çok daha karmaşık olduğunu ve çoğumuzun kafasının karıştığını düşünüyorum.

Yalnızca mantığı kullanarak net bir vaka oluşturamazsak, deneyleri kullanarak net bir vaka oluşturabiliriz. Bu nedenle, BlindMist'e veya diğer kişilere, OrderSend işlevini kontrol etmeyi atlamanın gerçekten yardımcı olup olmayacağını görmek için komisyoncularıyla bu kodu denemelerini öneririm.

Saygılarımla.

  • OrderSend() dönüş kodunun atlanması, çift sipariş sorunuyla ilgili değildir. Basit bir tesadüf.
  • OrderCheck() ayrıca bir sipariş göndermeden ÖNCE bazı hataları önlemek için olduğu için alakasız.
  • OrderSend() false döndürürse, bir sorun olduğunu bilirsiniz, böylece hangisini kontrol edebilir ve ihtiyaçlarınıza göre işleyebilirsiniz.
  • OrderSend() true değerini döndürdüyse, işte zorluklar başlıyor... sonraki mesaja bakın.
Neden: