Uyarı: Uzmanlar Tarafından Gönderilen MT4 Terminal Kopyalama Emirleri - sayfa 5

 

Merhaba arkadaşlar:

Daha önce cevap vermediğim için üzgünüm: Metaquotes'tan herhangi bir bildirim almadığım için gönderilerinizden haberim yoktu. Gerçekten de RaptorUK'un önerdiği gibi bir işaret açtım ama ona hiç cevap vermediler. Gerektiğinde JamesMadden ile aynı şeyi yapıyorum: Sadece siparişi kapatıyorum ve formayı bırakıyorum. O kadar riskli değilse, orada bırakıyorum! (EA'm kârlıysa, uzun vadede kaybetmekten daha fazlasını kazanır) Ancak tabi ki böceği sevmiyorum.

Şimdi yapı 600 ile ilgili yeni sorunlarım var ve bilmek istiyorum, eğer biri biliyorsa, onlara nasıl cevap verirsiniz? :)

PD: Bu gönderi güncellendiğinde bu web uygulamasının bana bir e-posta göndermesini nasıl sağlayabilirim? Konuya zaten aboneyim.

 
Ricardo1 :

Merhaba arkadaşlar:

Daha önce cevap vermediğim için üzgünüm: Metaquotes'tan herhangi bir bildirim almadığım için gönderilerinizden haberim yoktu. Gerçekten de RaptorUK'un önerdiği gibi bir işaret açtım, ama ona hiç cevap vermediler. Gerektiğinde JamesMadden ile aynı şeyi yapıyorum: Sadece siparişi kapatıyorum ve formayı bırakıyorum. O kadar riskli değilse, orada bırakıyorum! (EA'm kârlıysa, uzun vadede kaybetmekten daha fazlasını kazanır) Ancak tabi ki böceği sevmiyorum.

Şimdi yapı 600 ile ilgili yeni sorunlarım var ve bilmek istiyorum, eğer biri biliyorsa, onlara nasıl cevap verirsiniz? :)

öğrendiğinde bana haber ver. . . Mart 2013'ten hiç yanıt almamış açık bir biletim var. Önerebileceğim tek şey, her seferinde haber veya cevap istemek için yeni yorumlar eklemeye devam etmek.


PD: Bu gönderi güncellendiğinde bu web uygulamasının bana bir e-posta göndermesini nasıl sağlayabilirim? Konuya zaten aboneyim.

e-posta bildirimleri birkaç yıldır çalışmıyor. . . belki bunu Servis Masasına bildirebilirsin
 
RaptorUK :
öğrendiğinde bana haber ver. . . Mart 2013'ten hiç yanıt almamış açık bir biletim var. Önerebileceğim tek şey, her seferinde haber veya cevap istemek için yeni yorumlar eklemeye devam etmek.

e-posta bildirimleri birkaç yıldır çalışmıyor. . . belki bunu Servis Masasına bildirebilirsin



Merhaba,

Bu konuyu yeni buldum çünkü tam olarak bu sorunu aramaya başladım. Sorunu daha önce fark etmemiştim ama bugün başıma geldi.

Daha önce belirtildiği gibi alım satımları kaydeden uzman günlüğünden bağımsız olarak, EA veya şahsen yapılan tüm alım satımları kaydeden MetaTrader günlüğü vardır. Bugün portföyümde, yalnızca birkaç saniye önce yapılan bir işlemin kopyası olan bir işlem buldum, ancak ikinci işlem uzmanlar günlüğünde veya MetaTrader günlüğünde görünmedi.

Brokerimden gelen taleplerin günlüklerini yürütülen işlemlerle karşılaştırmasını istedim, ancak onların günlük tutmadıklarından veya araştırmak istemeyeceklerinden şüpheleniyorum.

EA 2 sipariş verdiyse, ikisini de dergide görmeyi beklerdim. Masaüstü uygulaması herhangi bir nedenle isteği çoğaltsa bile, sunucunun ikinci işlemi yanıtlamasını ve kaydetmesini beklerdim. Daha çok, ticaretin istemciden değil sunucudan yürütüldüğü görülüyor.

Bu sorunu ilk kez fark ettim ve sorunu yeniden oluşturmanın bir yolunu bulamıyorum. Şu anda üzerinde çalıştığım miktarlar çok küçük, bu yüzden değer önemli değil ama MetaTrader'ın uygulanabilirliği konusunda endişe uyandırıyor.

Bir süredir etrafta dolaşan bir konuya düşüncelerimi ödünç vereyim dedim.

Düzenlemek:

Daha fazla kontrol ettim ve başka bir örnek buldum. Sipariş zaten zararı durdur ile kapatılmıştı, bu yüzden fark etmedim. Her iki durumda da EA beklenen bir sipariş verdi. Bu, günlükte hemen ardından verilen hayali siparişe karşılık gelen bir oturum açma mesajı gösterir.

Hayali bir siparişin oluştuğunu düşünen başka biri varsa, lütfen günlükteki giriş mesajını kontrol edin. Önemli olabilir.

 

Görünüşe göre bu sinir bozucu sorundan etkilenen tek kişi ben değilim. Spikedog ile aynı, EA'm, milisaniyeler içinde aynı lot boyutunun başka bir mükerrer girişiyle sonuçlanan bir piyasa emri talep etti, yinelenen emir günlüğü Günlük'te gösterildi, ancak Uzmanlar sekmesinde gösterilmedi; O zamandan beri, OrderSend()'den hemen önce aynı çubuk içinde çift ticareti (yalnızca açık çubukta ticaret) filtreleyerek bu soruna karşı daha iyi korunmak için kodlarımı biraz değiştirdim.

Bu yinelenen ticaret sorununu ilk kez yaşadım; o zamandan beri 3 broker ile 500'den fazla işlem açmıştı ve şimdiye kadar hiç sorun yaşamadı. BTW, sonraki işlemler tekrar iyi çalışıyor.

Ekteki gibi, yinelenen sorun oluştuğunda OrderSend() işleme kodum. EA'mın yinelenen siparişin nedeni olduğunu göremiyorum. Şu anda düşünebildiğim tek olası neden, belki de çok nadir bir durumda, sunucu OrderSend'imi işliyor ancak bir şekilde "-1" döndürüyor ve EA'm, 1.'yi requote olarak değerlendiren başka bir istekte bulunmaya devam ediyor. Sadece benim spekülasyonum.


             bool Buy_Ticket = false ;
             while (Buy_Ticket== false ){     //Loop to solve Requote issues
               for ( int BT_count= 0 ; BT_count < RequoteTries; BT_count++){
                   if (! IsTradeAllowed ()) Sleep (RequoteTries_WaitingTime);
                   RefreshRates ();

                   int B_Spread = MarketInfo ( Symbol (), MODE_SPREAD );   //TO CAPTURE EXACT SPREAD UPON BUY ORDER FOR SL
                  Buy_Ticket = OrderSend ( Symbol (), 0 ,order_lotsize, Ask ,Slippage, 0 , 0 ,EntryCode_comment,Magic, 0 ,Blue) > 0 ;

               
                   if (Buy_Ticket== true ){     //Modify to give SL & TP if new buy order executed
                     for ( int buyMod= 0 ; buyMod < OrdersTotal (); buyMod++){
                         if ( OrderSelect (buyMod, SELECT_BY_POS , MODE_TRADES )){
                           if (( OrderSymbol ()!= Symbol ()) || ( OrderType ()!= OP_BUY )) continue ;
                           if (( OrderStopLoss ()== 0 ) && ( OrderTakeProfit ()== 0 )){
                               double B_SL = NormalizeDouble (( OrderOpenPrice ()-((B_Spread* Point )+stoploss)), Digits );
                               double B_TP = NormalizeDouble (( OrderOpenPrice ()+takeprofit), Digits );

                               bool buy_ModSL_succeed = false ;
                               while (buy_ModSL_succeed== false ){     //Loop to solve SL+TP modify Requote issues   
                                 for ( int buyMod_count= 0 ; buyMod_count < RequoteTries; buyMod_count++){
                                     if (! IsTradeAllowed ()) Sleep ( 5000 );
                                     RefreshRates ();                                 
                                     if ( OrderModify ( OrderTicket (), OrderOpenPrice (), B_SL, B_TP, 0 , Red)== false ) continue ;
                                    buy_ModSL_succeed = true ;
                                     Print (entrycode_txt, " initiated Long trade successfully modified SL & TP." );
                                     break ;                        
                                 }   //End FOR loop for requote handling
                                 if (buy_ModSL_succeed == false ){
                                    getError = GetLastError();
                                     Alert ( "Error: " ,getError, " in Buy order#:" , OrderTicket (), " modify for SL:" ,B_SL, " & TP:" ,B_TP, " after " ,RequoteTries, " attempts." );
                                     break ;
                                 }
                              }   //End WHILE loop for SL+TP modify requote handling
                           }   //End IF statement to select new orders without SL & TP
                        }   //End IF orderselect
                     }   //End FOR loop to modify new orders without SL & TP 
                  }   //End IF statement when buy order accepted & need SL+TP modify

                   if (Buy_Ticket== false ) continue ;
                   else break ;
               }   //----------------------------//End FOR loop to carry out ordersend for buy trade when requote
               if (Buy_Ticket== false ) break ;     //Exit WHILE loop to handle Requote issues, fail to buy
            }   //-------------------------------//End WHILE loop to solve Requote issues
 
BigFisherman :

EA'mın yinelenen siparişin nedeni olduğunu göremiyorum.

Kodunuzda bu hata ile bağlantılı olabilir, düzeltip tekrar test etmelisiniz. . .

                  Buy_Ticket = OrderSend ( Symbol (), 0 ,order_lotsize, Ask ,Slippage, 0 , 0 ,EntryCode_comment,Magic, 0 ,Blue) > 0 ;

               
                   if (Buy_Ticket== true ){     //Modify to give SL & TP if new buy order executed

OrderSend() bool değil int döndürür, bu nedenle dönüş değerinin "true" olup olmadığını kontrol etmek yanlıştır.

 

@BigFisherman

BTW yor kodu ile neler oluyor?

 if (Buy_Ticket== true ){     //Modify to give SL & TP if new buy order executed
 if (Buy_Ticket== false ) continue ;

ve yeniden ?

 else break ;
 
RaptorUK :

Kodunuzda bu hata ile bağlantılı olabilir, düzeltip tekrar test etmelisiniz. . .

OrderSend() bool değil int döndürür, bu nedenle dönüş değerinin "true" olup olmadığını kontrol etmek yanlıştır.


Öneri için raptoruk'a teşekkürler. Haklısın :)
 
BigFisherman :

Öneri için raptoruk'a teşekkürler. Farkındayım. Bununla birlikte, sunulan kod biraz kafa karıştırıcı olsa da geçerli olduğundan, yinelenen ticaretin nedeninin bu olduğunu düşünmüyorum.
Kod nasıl geçerlidir? OrderSend() çalışırsa 0'dan büyük bir değer alırsınız, yani bilet numarası, başarısız olursa -1 döndürülür, true veya false için test edersiniz. . . kodunuzu düzeltin ve belirsizliği ortadan kaldırın .
 
RaptorUK :
Kod nasıl geçerlidir? OrderSend() çalışırsa, 0'dan büyük bir değer alırsınız, yani bilet numarası, başarısız olursa -1 alırsınız, true veya false için test ediyorsunuz. . . kodunuzu düzeltin ve belirsizliği kaldırın.



Tekrar teşekkürler.

Şerefe!

 
RaptorUK :
Kod nasıl geçerlidir? OrderSend() çalışırsa 0'dan büyük bir değer alırsınız, yani bilet numarası, başarısız olursa -1 döndürülür, true veya false için test edersiniz. . . kodunuzu düzeltin ve belirsizliği kaldırın.


Merhaba RaptorUK,



Tam olarak bu konunun konusuyla ilgili olmayan bir sorum var, ancak önceki yazımı mql4 kodlama anlayışımı derinleştirmek için bir örnek olarak kullanmayı umuyorum ve belki de benim gibi diğer yeni başlayanlara da yardımcı olabilir (eğer bunun konu dışı olduğunu ve ihtiyacı olduğunu düşünüyorsanız) yeni konu, lütfen bunu silin ve bana bildirin).

İlk başta Buy_Ticket'i int yerine bool olarak ilan etme yöntemim konusunda biraz kafam karıştı, bu yüzden üzerinde daha fazla test yaptım. OrderSend()'i bool olarak okumanın orijinal yolunu kabul etsem de, kodlamanın (kafa karıştırıcı) iyi bir yolu değil, ancak testim bunun geçerli olduğunu gösteriyor. Okumayı kolaylaştırmak için aşağıdakileri kodladım, lütfen tavsiye ve zaman ayırdığınız için teşekkürler.


Not: Tavsiye edildiği gibi, EA'mı OrderSend()'i int olarak okuyacak şekilde değiştirdim.



 //+------------------------------------------------------------------+
//|                                                    Test_Bool.mq4 |
//|                                     Copyright 2014, BigFisherman |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, BigFisherman"

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---
   
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
{
//---
   
   for ( int SimRun= 0 ; SimRun< 3 ; SimRun++){
       bool Buy_Ticket = 0 ;
       int Ordersend = 0 ;             //AS AN EXAMPLE TO SIMULATE OrderSend() RETURNED CODE

       switch (SimRun)
      {
         case 0 : break ;             //FOR Ordersend==0
         case 1 :
         {
            Ordersend = 1 ;           //SIMULATE SUCCESSFUL ORDERSEND() RETURNING TICKET NO. > 0
             break ;
         }
         case 2 :
         {
            Ordersend = - 1 ;         //SIMULATE FAILED ORDERSEND() RETURNING "-1"
             break ;
         }
      }
      
      
       // (MY ORIGINAL WAY OF CODING)   Buy_Ticket = OrderSend(Symbol(),0,order_lotsize,Ask,Slippage,0,0,EntryCode_comment,Magic,0,Blue) > 0;
      Buy_Ticket = Ordersend > 0 ;   //SIMPLIFIED CODE FOR EASIER READING
      
      
       if (Buy_Ticket== true ){
         Print ( "** Buy_Ticket returns true  **  SimRun: " +SimRun+ "  Ordersend: " +Ordersend+ "  Buy_Ticket: " +Buy_Ticket);
      }
       else {                         //if (Buy_Ticket==false)
         Print ( "** Buy_Ticket returns false **  SimRun: " +SimRun+ "  Ordersend: " +Ordersend+ "  Buy_Ticket: " +Buy_Ticket);
      }
   }
   return ( 0 );
}
//+------------------------------------------------------------------+


günlük

2014.03.30 12:57:31.223 2014.03.25 23:30  Test_Bool AUDJPY,M30: ** Buy_Ticket returns false **  SimRun: 0  Ordersend: 0  Buy_Ticket: 0
2014.03.30 12:57:31.223 2014.03.25 23:30  Test_Bool AUDJPY,M30: ** Buy_Ticket returns true  **  SimRun: 1  Ordersend: 1  Buy_Ticket: 1
2014.03.30 12:57:31.223 2014.03.25 23:30  Test_Bool AUDJPY,M30: ** Buy_Ticket returns false **  SimRun: 2  Ordersend: -1  Buy_Ticket: 0