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

 
Öncelikle, Raptor'u daha önce benimle bu konuyu gündeme getirdiğini biliyorum ama nereye yazdığını hatırlayamıyorum ve daha da önemlisi nerede yanlış yaptığımı anlıyorum?

Bildiğim kadarıyla, herhangi bir karşılık gelen Çifte eklenen EA'nın her zaman yalnızca o çift üzerinde çalışabilmesi için doğru yazıyordum. Şu anda, GBPCAD ve GBPUSD'nin başarılı olmadığını fark ettim, yani GBPCAD stoploss, hesaplamanın GBPUSD çifti tarafından yapıldığını düşünüyor... ....

Magicnumber==1234;

Aptal olduğum herhangi bir öneri veya alan, lütfen vurgulamaktan çekinmeyin :(

 //+-------------------------------------------------------------------------------------+
//| Order Buy Function                                                                  |
//+-------------------------------------------------------------------------------------+   

//Place a pending buystop if no orders exists.. pending or otherwise.
if (direction== 0 )
{ 
       double btp=buy_takeprofit_price;
      
       double Min_Lot = MarketInfo( Symbol (),MODE_MINLOT);

       double Lot_Step = MarketInfo( Symbol (),MODE_LOTSTEP);

       double BuyLotSize =(RiskedAmount/(pips_to_bsl/pips))/ 10 ;
       double Lots = NormalizeDouble (BuyLotSize, 2 );
      LotSize = MathFloor (Lots/Lot_Step)*Lot_Step;

  
       static double Stored_BuyPrice;

       if (OpenOrdersThisPair( Symbol ())== 0 )
         {
         int BuyTicketOrder= OrderSend ( Symbol (),OP_BUYSTOP,LotSize,buyPrice, 3 ,BuyStopPrice,btp, NULL ,MagicNumber, 0 ,Green);  >>>> // I am not sure if its this part? There is no way for this first OrderSend to tell what pair it is?
         if (BuyTicketOrder == - 1 ) Print ( "First Buy Order Last Error = " , GetLastError ());
         } 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



       for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--)
         {
         if (! OrderSelect (b,SELECT_BY_POS,MODE_TRADES)) continue ;
           
         if (OrderType()==OP_BUYSTOP) 
             if (OrderMagicNumber()==MagicNumber)
               if (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==True) // 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 ());
            }
      }
} 
 
DomGilberto :
Öncelikle, Raptor'u daha önce benimle bu konuyu gündeme getirdiğini biliyorum ama nereye yazdığını hatırlayamıyorum ve daha da önemlisi nerede yanlış yaptığımı anlıyorum?

Bildiğim kadarıyla, herhangi bir karşılık gelen Çifte eklenen EA'nın her zaman yalnızca o çift üzerinde çalışabilmesi için doğru yazıyordum. Şu anda, GBPCAD ve GBPUSD'nin başarılı olmadığını fark ettim, yani GBPCAD stoploss, hesaplamanın GBPUSD çifti tarafından yapıldığını düşünüyor... ....

Magicnumber==1234;

Aptal olduğum herhangi bir öneri veya alan, lütfen vurgulamaktan çekinmeyin :(

Sorununuz açık, ancak parantez girintilerini ve koşulları kullanma şekliniz nedeniyle görmek biraz zor olabilir. . . bunu yap:

       for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--)
         {
         if (! OrderSelect (b,SELECT_BY_POS,MODE_TRADES)) continue ;
           
         if (OrderType()==OP_BUYSTOP) 
             if (OrderMagicNumber()==MagicNumber)
               if (OrderSymbol()== Symbol ())                                   // if the symbol matches do . . . 
                   if (OrderStopLoss()< iMA ( NULL , 60 ,MA_Period, 0 , 1 , 0 , 0 )-ATR)   //  . . . .  this
                        {
                        Stored_BuyPrice = OrderOpenPrice();                 // and this
                        DeleteOrder = OrderDelete(OrderTicket());           // and this
                        }

         if (OpenOrdersThisPair( Symbol ())== 0 && DeleteOrder==True) // If there are no open orders = place a new order.   //  this happens even if the symbol didn't match . . .
            {
             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 ());
            }
      }

Sanırım demek istediğin şuydu. . .

     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 ());
               }
            }
         }
 
Ah tamam - orada kaçırdığım çok küçük bir şey. Ayrıca, ilk OrderSend() işlevi çağrıldığında orada yanlış bir şey mi yapıyorum? Bunu soruyorum çünkü o noktada emirlerin hangi çifte gönderilmesi gerektiğini bilip bilmediğini mantıklı bir şekilde düşünmeye çalışıyorum. Bu aptalca bir soru olabilir, ama o kısımda yanlış bir şey yapmıyorum, değil mi? "BuyTicketOrder" gönderme işlevi bölümü?

Benim için bir parça fark ettiğin için teşekkürler :)
 
DomGilberto :
Ah tamam - orada kaçırdığım çok küçük bir şey. Ayrıca, ilk OrderSend() işlevi çağrıldığında orada yanlış bir şey mi yapıyorum? Bunu soruyorum çünkü o noktada emirlerin hangi çifte gönderilmesi gerektiğini bilip bilmediğini mantıklı bir şekilde düşünmeye çalışıyorum. Bu aptalca bir soru olabilir, ama o kısımda yanlış bir şey yapmıyorum, değil mi? "BuyTicketOrder" gönderme işlevi bölümü?

Benim için bir parça fark ettiğin için teşekkürler :)
Symbol(), EA'nın üzerinde çalıştığı grafiğin sembolüdür. . . yanlış anlayamaz, sadece bir sembol olabilir
 
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//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 );

//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.
   for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--)
     {
       if ( OrderSelect (b,SELECT_BY_POS,MODE_TRADES))
         if (OrderMagicNumber()==MagicNumber)
             if (OrderSymbol()== Symbol ())
               if (OrderType()==OP_BUY)
               {
                 if (OrderStopLoss() > BuyStopPrice) break ; 
                   if (OrderStopLoss() < BuyStopPrice)
                     bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(), 0 , CLR_NONE );
                     if (BuyModify < 0 ) 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.     
   for ( int s= OrdersTotal ()- 1 ; s>= 0 ; s--)
     {
       if ( OrderSelect (s,SELECT_BY_POS,MODE_TRADES))
         if (OrderMagicNumber()==MagicNumber)
             if (OrderSymbol()== Symbol ())
               if (OrderType()==OP_SELL)
               {
                 if (OrderStopLoss() < SellStopPrice) break ; 
                   if (OrderStopLoss() > SellStopPrice)
                     bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(), 0 , CLR_NONE );
                     if (SellModify < 0 ) Print ( " Sell Trailing Stop Failed: " , GetLastError ());
               }   
     }

  }
Tamam - Sanırım soruna neden olan şey bu. Bu kısımdaki kodu az önce güncelledim ve artık kablodan GBPCAD fiyatlarına kadar her tikte titremeyi bırakmış görünüyor... Şimdi bu saatlik kapanışta kendini güncelleyene kadar tek durak fiyatta kaldı... bu yüzden yapacağım. onaylamak.

Bu sana uygun görünüyor mu? Ayrıca, bu kısmi sipariş kapanışlarına sahip olduğum için, muhtemelen parantezlerin "OrderSymbol()==Symbol())" ile ilgili olarak doğru konumda olduğunu iki kez kontrol etmem gerektiğini varsayıyorum?
 
if (OpenOrdersThisPair( Symbol ()) == 0
Bunu kaç kez aramak istiyorsun? Her sipariş için (kodunuz)? Mevcut grafikte bekleyen her sipariş için (RaptorUK kodu)? Veya BİR KEZ, bekleyenleri saklayıp sildikten SONRA?
 
DomGilberto :
Tamam - Sanırım soruna neden olan şey bu. Bu kısımdaki kodu az önce güncelledim ve artık kablodan GBPCAD fiyatlarına kadar her tikte titremeyi bırakmış görünüyor... Şimdi bu saatlik kapanışta kendini güncelleyene kadar tek durak fiyatta kaldı... bu yüzden yapacağım. onaylamak.

Bu sana uygun görünüyor mu? Ayrıca, bu kısmi sipariş kapanışlarına sahip olduğum için, muhtemelen parantezlerin "OrderSymbol()==Symbol())" ile ilgili olarak doğru konumda olduğunu iki kez kontrol etmem gerektiğini varsayıyorum?

Tamam görünüyor, evet, her zaman diş tellerinizi kontrol edin ve mümkün olan her yerde hayatı kendiniz için kolaylaştırın, eğer bu diş telleri eklemek anlamına geliyorsa, öyle yapın, ancak diş telleri ve girintilerle tutarlı olmaya çalışın.

İki döngüye ihtiyacınız yok, biri yapacak. . .

 //+----------------------------------------------------------------------------------------------------------------------------------------+  
//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 ());
                  }
               }   
     }

OrderModify() bir bool, true veya false döndürür, int değil. . . bu nedenle SellModify asla 0'dan küçük olmayacaktır. . . Aynı şeyi dün ForexFactory'de de yazdım.

 

Emir her silindiğinde - ki bekleyen emrin silinmesini istiyorum HER 1 saatte bir kapatılır ve ardından aynı parametrelerle VEYA varsa, yeni duraklar, hedefler ve lot büyüklüğüne göre yeni bir emir açılır. (OrderStopLoss() < iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0 ) - ATR) "

YENİ bekleyen sipariş için (silme işleminden sonra) saklamam gereken tek şey, söz konusu kurulumdaki ilk giriş fiyatıdır. ( Stored_BuyPrice = OrderOpenPrice(); )


Komik çünkü yukarıdaki kodun ilk kısmı aynı zamanda göndermek üzere olduğum başka bir konu ile bağlantılı. Benzer bir soruyla yeni bir konu açmak yerine burada soracağım, sorun olmazsa? Aşağıdaki bağlantıya göz atın - sahip olduğum ve çözmekte zorlandığım sorunu açıklayan sadece birkaç dakikalık bir video...

O kadar çok kod yazdım ki, ama şimdi bunun tamir etmem gereken bir verimsizlik vakası olduğunu anlamaya başlıyorum...

Video: http://screencast.com/t/4nl8AaH8Sag

Bunu yalnızca sınırlı miktarda kod sağlayarak gerçekten belirsiz hale getirdiysem, biraz daha mı yapacağım?

 
Teşekkürler Raptor - Evet, bunu şimdi fark ettim. Bir karışıklık olduğu için kodumu temizlemek için biraz zaman harcadım. Yukarıda verdiğiniz örnekteki gibi Prints kullanmaya çalışmak gibi amatör hatalar lol.
 
DomGilberto :

Emir her silindiğinde - ki bekleyen emrin silinmesini istiyorum HER 1 saatte bir kapatılır ve ardından aynı parametrelerle VEYA varsa, yeni duraklar, hedefler ve lot büyüklüğüne göre yeni bir emir açılır. (OrderStopLoss() < iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0 ) - ATR) "

YENİ bekleyen sipariş için (silme işleminden sonra) saklamam gereken tek şey, o özel kurulumdaki ilk giriş fiyatıdır. ( Stored_BuyPrice = OrderOpenPrice(); )


Komik çünkü yukarıdaki ilk kod parçası aynı zamanda göndermek üzere olduğum başka bir konu ile bağlantılı. Benzer bir soruyla yeni bir konu açmak yerine burada soracağım, sorun olmazsa? Aşağıdaki bağlantıya göz atın - sahip olduğum sorunu açıklayan sadece birkaç dakikalık bir video ve çözmekte zorlanıyorum...

O kadar çok kod yazdım ki, ama şimdi bunun tamir etmem gereken bir verimsizlik vakası olduğunu anlamaya başlıyorum...

Video: http://screencast.com/t/4nl8AaH8Sag

Bunu yalnızca sınırlı miktarda kod sağlayarak gerçekten belirsiz hale getirdiysem, biraz daha fazla mı yapacağım?

Yanlış anladıysam düzeltin. . . ancak videodaki çubukların çoğu için 21 EMA'ya geri dönüş alamadınız
 
Özür dilerim - Bu, doğru şekilde açıklamadığım için 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?