Birden fazla çift kullanırken EA çatışıyor... - sayfa 2

 
DomGilberto :
Özür dilerim - Bunu doğru şekilde açıklamadığım için bu benim hatam. MA'ların havalandırılması için D1, 4Hr ve son olarak 1Hr'ye bakıyorum (bir sürü başka filtre arasında) - Hepsi sıralandığında, H1'de herhangi bir çubuk 21 EMA ONCE'a geri çekilene kadar bekleyecek ve sonra oradan yükseklerin üzerinde bir emir ve 60 EMA - ATR'nin altında bir durak yerleştirir.

21 EMA'ya geri çekilme yalnızca bir kez gerçekleşir. Oradan, 21 EMA'ya herhangi bir geri çekilme aramayı bırakacak. Ancak yapılması gereken, mevcut açık BEKLEMEDEKİ siparişin lotlarla, stoplarla ve her saat kapanışından SONRA kar elde ettiğinden emin olmaktır. Ancak, çözemiyorum, neden bazen kusursuz çalışıyor ve her H1 kapanışından sonra bekleyen siparişi güncelliyor ve diğer zamanlarda çalışmıyor? Bekleyen emrin kendisini güncellemesinin nedeni " " if (OrderStopLoss() < iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0 ) - ATR) ".

Bu doğru değilse, o zaman olmaz - ANCAK, bunun doğru olduğu sayısız zaman vardır, ancak siparişi silmez ve yeni değerlerle yeni bir tane yerleştirmez mi?

Yukarıdaki kodda videoya göre bir şey görüp göremediğinizden emin değil misiniz? (Düzelttiğiniz ilk kod). Umarım daha nettir?

Sanırım bunu zor ve zahmetli bir şekilde yapmak zorunda kalacaksın. . . ilgili değişkenleri yazdırın, Strateji Test Cihazında zaman içinde ilerleyin, gerekirse tik adım işaretleyin, değişkenlerin ne olduğunu doğrulayın. . . o zaman bir şey yapmaları gerektiğini ve yapmadıklarını fark ederseniz, o koda odaklanabilirsiniz.

Başka birinin kodundaki basit sözdizimi sorunlarını tespit etmek nispeten kolaydır, stratejilerini kodlarken hataları tespit etmek daha zordur ve çok daha fazla zaman alır, bir kere, bunu yapabilmek için stratejinin de anlaşılması gerekir, değilse de daha iyisi, kodlamayı yapan kişi.

 
Evet haklısın! Şimdi tam olarak bunu yapacağım :) teşekkürler Raptor!
 
Kafamda netleştirmem gereken bir şey var; bu kod burada, döngüde, onun OrderDelete() işlevini yerine getirdiğinden ve döngünün her H1 kapanışında döngü yaptığından nasıl emin olabilirim? Bunun nedeni, döngünün H1 temelinde yapılıp yapılmadığını gösteren "int başlangıcında" buna sahip olmam mı? ("IsNewCandle()") ?

 int start()
 {
   if (IsNewCandle())
      {
      CheckForMaTrade(); //signals, deletions and candle trails only need checked on a new candle.
      }

   if (OpenOrdersThisPair( Symbol ())> 0 )
      {
       if (UseMoveToBreakEven)MoveToBreakEven(); //Move to b/e, normal trail and MA_trail need to trail on each tick
       if (Use_MA_Trail)MA_Trail();
      }
   
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  
if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET, MODE_TRADES)==True)
{  
            
       if (OpenOrdersThisPair( Symbol ())> 0 && OrderSymbol()== Symbol () && OrderType()==OP_SELL)
         {
         CloseHalfOrder1(); 
         }
   
       if (OpenOrdersThisPair( Symbol ())> 0 && OrderSymbol()== Symbol () && OrderType()==OP_BUY)
         {
         CloseHalfOrder(); 
         }   
     }
}
 for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--)
         {
         if (! OrderSelect (b, SELECT_BY_POS, MODE_TRADES)) continue ;
           
         if ( OrderType() == OP_BUYSTOP &&
            OrderMagicNumber() == MagicNumber &&
            OrderSymbol() == Symbol () )        
            {
             if (OrderStopLoss() < iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0 ) - ATR)  
               {
               Stored_BuyPrice = OrderOpenPrice();   
               DeleteOrder = OrderDelete(OrderTicket()); 
               }

             if (OpenOrdersThisPair( Symbol ()) == 0 && DeleteOrder)   // If there are no open orders = place a new order. 
               {
               int NewBuyOrder = OrderSend ( Symbol (), OP_BUYSTOP, LotSize, Stored_BuyPrice, 3 , BuyStopPrice, btp, NULL , MagicNumber, 0 , Green);
               if (NewBuyOrder == - 1 ) Print ( "New Buy Order Last Error = " , GetLastError ());
               }
            }
         }
bool IsNewCandle()
   {
   static datetime  Bar1Time;
   if(Bar1Time == Time[1]) //"Time" used to be "Bars" with no brackets 
      return(false);
      
   Bar1Time = Time[1]; //"Time" used to be "Bars" with no brackets 
   return(true);
   }
 
DomGilberto :
Kafamda netleştirmem gereken bir şey var; bu kod burada, döngüde, onun OrderDelete() işlevini yerine getirdiğinden ve döngünün her H1 kapanışında döngü yaptığından nasıl emin olabilirim? Bunun nedeni, döngünün H1 temelinde yapılıp yapılmadığını gösteren "int başlangıcında" buna sahip olmam mı? ("IsNewCandle()") ?


CheckForMATrade(), yeni H1 çubuğunun başlangıcında bir kez olacak bir H1 grafiği üzerinde çalışıyorsanız, her yeni çubuk için bir kez çağrılır. . . gerisi her kene yürütülür.

Yeni çubuğun başlangıcı için doğru ATR değerini mi hesaplıyorsunuz? Bar 0'a yeni başladığınızı göz önünde bulundurarak, gerçekten Bar 0'a dayalı MA almak istiyor musunuz? göstergeler benim işim değil o yüzden yanlış olduğunu söylediğimi düşünme, sadece soruyorum

 
Evet, MA-ATR matematiğini iki kez kontrol etmek için bir baskı yaptım. Bu doğru. Bar 1'de yapıyorum (En son kapatılan H1 çubuğu). Matematik doğru, sadece hesaplamaların HER H1 Çubuğu'nda tutarlı bir şekilde yapıldığını düşünmüyorum...
 
DomGilberto :
Evet, MA-ATR matematiğini iki kez kontrol etmek için bir baskı yaptım. Bu doğru. Bar 1'de yapıyorum (En son kapatılan H1 çubuğu). Matematik doğru, sadece hesaplamaların HER H1 Çubuğu'nda tutarlı bir şekilde yapıldığını düşünmüyorum...

MA olsa çubuk 1'de değil. . .

 iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0    ) - ATR)  
 
İyi nokta - teşekkürler :) Sanırım siparişi neden silmediğini biliyorum... EĞER OrderStopLoss MA-ATR'den > DEĞİLSE, o zaman hiçbir şey yapmayacaktır... Yani mantıklı... Sadece bazen bakıyorum ve sanki siparişi silmek ve gerektiğinde yeni bir sipariş vermek istemiyormuş gibi mi?

Sakıncası yoksa son bir soru - Hala bu poxy Sipariş Değiştirme hatası 1 alıyorum! Çıktısını aldığımda buradan mı geliyor? Herhangi bir fikir?

 //+----------------------------------------------------------------------------------------------------------------------------------------+  
//Moving Average Trailing Stop Function
//+----------------------------------------------------------------------------------------------------------------------------------------+   
void MA_Trail()

{

   double ATR = iATR ( NULL , 60 , 14 , 1 );
   double MA = iMA ( NULL , 60 ,MA_Period, 0 , 1 , 0 , 1 );
   
   double BuyStopPriceMath = MA - ATR;
   double SellStopPriceMath = MA + ATR;
   
   double BuyStopPrice = NormalizeDouble (BuyStopPriceMath, 5 );
   double SellStopPrice = NormalizeDouble (SellStopPriceMath, 5 );

   for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--)
     {
       if ( OrderSelect (b,SELECT_BY_POS,MODE_TRADES))
         if (OrderMagicNumber()==MagicNumber)
             if (OrderSymbol()== Symbol ())
               {
               //buy order section - This is where the stop will trail based 
               // upon a fixed point value stated on the EA. It will trail with price.
               if (OrderType()==OP_BUY)
                  {
                   if (OrderStopLoss() > BuyStopPrice) break ; 
                   if (OrderStopLoss() < BuyStopPrice)
                     bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(), 0 , CLR_NONE );
                   if (!BuyModify) Print ( " Buy Trailing Stop Failed: " , GetLastError ());
                   }     

               // sell order section - This is where the stop will trail based 
               // upon a fixed point value stated on the EA. It will trail with price.     
               if (OrderType()==OP_SELL)
                  {
                   if (OrderStopLoss() < SellStopPrice) break ; 
                   if (OrderStopLoss() > SellStopPrice)
                     bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(), 0 , CLR_NONE );
                   if (!SellModify) Print ( " Sell Trailing Stop Failed: " , GetLastError ());
                  }
               }   
     }
}
 
DomGilberto :
İyi nokta - teşekkürler :) Sanırım siparişi neden silmediğini biliyorum... EĞER OrderStopLoss MA-ATR'den > DEĞİLSE, o zaman hiçbir şey yapmayacaktır... Yani mantıklı... Sadece bazen bakıyorum ve sanki siparişi silmek ve gerektiğinde yeni bir sipariş vermek istemiyormuş gibi mi?

Sakıncası yoksa son bir soru - Hala bu poxy Sipariş Değiştirme hatası 1 alıyorum! Çıktısını aldığımda buradan mı geliyor? Herhangi bir fikir?

Sorun bu. . . (OP_SELL için benzer)

 if ( OrderStopLoss() < BuyStopPrice )

. . . ve bir hata 1 aldığınızda bunun nedeni OrderStopLoss() == BuyStopPrice yani siparişi aynı StopLoss değerine sahip olacak şekilde değiştiriyorsunuz, dolayısıyla hata 1 yani şimdi bir yandan OrderStopLoss() == BuyStopPrice'ın nasıl olduğunu merak ediyorsunuz. diğer yandan OrderStopLoss() < BuyStopPrice

Yazıdaki bağlantıyı takip edip gözleriniz kanayana kadar okudunuz mu? Bahse girerim yapmadın. . . https://www.mql5.com/en/forum/146380 bu konuyu görmezden gelmeye devam ederseniz sizi yakalamaya devam edecek ve zaman kaybetmeye devam edeceksiniz. . . onunla başa çık, anla, daha fazla acı çekme, mutlu ol

 

Tamam, hepsini tekrar okuyacağım - ekli video ile soruna geri dönersek, nasıl çözdüğümü aşağıda düşünüyorum, ANCAK, Satın alma tarafında çalışmıyor mu? Bazı nedenlerden dolayı, hiçbir işlem tetiklenmeyecektir. Ancak satış tarafında, TAM benim istediğim gibi çalışıyor?

Satın alma tarafında her şey TAMAMEN tersine çevrilir. Tüm bu if ifadeleri sadece hareketli ortalamalardır. Değiştirdiğim belirli satır " triggerBarTime +H1_high >= ema21". Alış tarafında = " triggerBarTime +H1_low <= ema21" - "triggerBarTime" alırsam hem alış hem de satış emirleri üzerinde çalışacak. Ancak, "triggerBarTime"da bırakırsam, Satış Tarafında mükemmel bir şekilde çalışacaktır (olduğu gibi, HER çubuktaki siparişleri kapatın, mükemmel bir şekilde yeniden hesaplayın ve ayarlanmış parametrelerle yeni bir sipariş verin!?) AMA HİÇBİR sipariş vermeyin Satın alma tarafında herhangi bir şey yaptınız mı? Bu yapmam gereken gerçekten önemli bir ayar...

Bu videoyu izleyin: http://screencast.com/t/uJu3nlNxAXDF - Umarım bu gerçekten iyi açıklamalıdır! :D


Yardımcı olamayacaksan merak etme :)

     // Check for Moving Averages Fanned up ON THE DAILY TIME FRAME, creating an UP bias.   
     if (D1_Bias== "None" ) 
       if (Daily_3<Daily_5)
         if (Daily_5<Daily_8)
             if (Daily_8<Daily_10)
               if (Daily_10<Daily_12)
                   if (Daily_12<Daily_15)
                     if (Daily_15<Daily_30)
                         if (Daily_30<Daily_35)
                           if (Daily_35<Daily_40)
                               if (Daily_40<Daily_45)
                                 if (Daily_45<Daily_50)
                                     if (Daily_50<Daily_60)
                                       {
                                       D1_Bar=Time[ 1 ];
                                       D1_Bias= "Daily is Down" ;
                                       Comment ( "Bias is: " +D1_Bias+ " since: " +TimeToStr(D1_Bar,TIME_DATE|TIME_MINUTES));
                                       }
   
   // Check for Moving Averages Fanned up ON THE 4 HOUR TIME FRAME, creating an UP bias.  
     if (H4_Bias== "None" ) 
       if (Hour4_3<Hour4_5)
         if (Hour4_5<Hour4_8)
             if (Hour4_8<Hour4_10)
               if (Hour4_10<Hour4_12)
                   if (Hour4_12<Hour4_15)
                     if (Hour4_15<Hour4_30)
                         if (Hour4_30<Hour4_35)
                           if (Hour4_35<Hour4_40)
                               if (Hour4_40<Hour4_45)
                                 if (Hour4_45<Hour4_50)
                                     if (Hour4_50<Hour4_60)
                                       {
                                       H4_Bar=Time[ 1 ];
                                       H4_Bias= "4 Hour is Down" ;
                                       Comment ( "Bias is: " +H4_Bias+ " since: " +TimeToStr(H4_Bar,TIME_DATE|TIME_MINUTES));
                                       }
   
   // Check for Moving Averages Fanned down creating an DOWN bias.  
   if (D1_Bias== "Daily is Down" && H4_Bias== "4 Hour is Down" && H1_Bias== "None" )
       if (CurrentSmallFish1<CurrentSmallFish2)
         if (CurrentSmallFish2<CurrentSmallFish3)
             if (CurrentSmallFish3<CurrentSmallFish4)
               if (CurrentSmallFish4<CurrentSmallFish5)
                   if (CurrentSmallFish5<CurrentSmallFish6)
                     if (CurrentSmallFish6<CurrentBigFish1)
                         if (CurrentBigFish1<CurrentBigFish2)
                           if (CurrentBigFish2<CurrentBigFish3)
                               if (CurrentBigFish3<CurrentBigFish4)
                                 if (CurrentBigFish4<CurrentBigFish5)
                                     if (CurrentBigFish5<CurrentBigFish6)
                                       {
                                       triggerBarTime=Time[ 1 ];
                                       H1_Bias= "Down" ;
                                       Comment ( "Bias is: " +H1_Bias+ " since: " +TimeToStr(triggerBarTime,TIME_DATE|TIME_MINUTES));
                                       H4_Bias= "4 Hour is Down" ;
                                       Comment ( "Bias is: " +H4_Bias+ " since: " +TimeToStr(H4_Bar,TIME_DATE|TIME_MINUTES));
                                       D1_Bias= "Daily is Down" ;
                                       Comment ( "Bias is: " +D1_Bias+ " since: " +TimeToStr(D1_Bar,TIME_DATE|TIME_MINUTES));
                                       }
   
   ///////////////////////////////////////////////////////////////////////////////////////
   
   H1_high  = iHigh( NULL , PERIOD_H1 , 1 );
   H1_close = iClose( NULL , PERIOD_H1 , 1 );
   if (H1_Bias== "Down" && H4_Bias== "4 Hour is Down" && D1_Bias== "Daily is Down" && triggerBarTime+H1_high >= ema21 && H1_close < CurrentBigFish6)
      {
      OrderEntry( 1 ); // Sell function is called.
      }
 
Herhangi bir fikir?
Neden: