Yarım lotları kapatmak. - sayfa 18

 


Tamam (GÜNCELLEME!) Yani temelde, "yarı yarı yarıya vs"nin sürekli kapanmasından kurtuldum. lotlarda ikinci OrderClose() çağrıldığında (tüm mavi if ifadesinin olduğu yerde - görünüşe göre bu işe yarıyor!) - ANCAK, FIRST OrderClose() işlevi "True" olmadığı sürece bunun HEPSİ olarak çağrılmasını İSTEMİYORUM ve başarılı oldu. "Close_Half_Order_Buy==True" da çalışmıyor...

Bunu bitirmek için birinin yardımını isterim :)

( Kodun etine açıklık getirmek için birçok "Baskı" yı kaldırdım.)

 //+--------------------------------------------------------------------------------------------------+
//| Close OP_BUY Half lots @ 1:1 Function                                                            |
//+--------------------------------------------------------------------------------------------------+
void CloseHalfOrder()
{   
   
   static datetime partclosedonce;
   static datetime partclosedtwice; 
   
   double minLot=MarketInfo( Symbol (),MODE_MINLOT);

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

   double half= MathFloor (OrderLots()/ 2 /lotStep)*lotStep;
   
   double EMA_Bar = iClose( NULL , PERIOD_H1 , 1 );
   double EMA_MA = iMA ( Symbol (), 60 , 21 , 0 , 1 , 0 , 0 );

   
for ( int c= OrdersTotal ()- 1 ; c>= 0 ; c--)
      {
       if ( OrderSelect (c,SELECT_BY_POS,MODE_TRADES)== true )

       double FirstTarget_Buy = OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/ 2 );
      	Print ( "FirstTarget_Buy: " ,DoubleToStr(FirstTarget_Buy, Digits ));
      
       if (OrderMagicNumber()==MagicNumber)
         if (OrderSymbol()== Symbol ())
             if (OrderLots()>minLot)
               if (OrderOpenTime() != partclosedonce)
            {
            
             if (OrderType()==OP_BUY && Bid >= FirstTarget_Buy+( Point / 2 )) 
               {
               bool Close_Half_Order_Buy=OrderClose(OrderTicket(),half,Bid, 5 ,Blue);
               if (Close_Half_Order_Buy!=TRUE) Print ( "Close_Half_Order_Buy Last Error = " , GetLastError ());
               }
            }
         
       if (Close_Half_Order_Buy==True && OrderOpenPrice() > OrderStopLoss())
         {
         MoveToBreakEven(); 
         }
           if (Close_Half_Order_Buy==True)
               {
               partclosedonce = OrderOpenTime();
               } 
      
      if(partclosedonce != partclosedtwice && OrderOpenTime() != partclosedtwice) // I dont want this to run UNLESS the first OrderClose() is successful.
         {
           if (OrderType()==OP_BUY && EMA_Bar < EMA_MA)
               {
               bool EMA_Buy_Close=OrderClose(OrderTicket(),half,Bid, 5 , CLR_NONE );
               if (EMA_Buy_Close!=TRUE) Print ( "EMA_Buy_Close Last Error = " , GetLastError ());
               if (EMA_Buy_Close==True)partclosedtwice = OrderOpenTime();
               }     
          }        
     }
}


	          
 
Herhangi biri?
 
DomGilberto :


Tamam (GÜNCELLEME!) Yani temelde, "yarı yarı yarıya vs"nin sürekli kapanmasından kurtuldum. lotlarda ikinci OrderClose() çağrıldığında (tüm mavi if ifadesinin olduğu yerde - görünüşe göre bu işe yarıyor!) - ANCAK, FIRST OrderClose() işlevi "True" olmadığı sürece bunun HEPSİ olarak çağrılmasını İSTEMİYORUM ve başarılı oldu. "Close_Half_Order_Buy==True" da çalışmıyor...

Bunu bitirmek için birinin yardımını isterim :)

Aşağıdaki kod derlenir (MagicNumber değişkenini bildirerek ve MoveToBreakEven() işlevini yorumlayarak) ancak test edilmemiştir.

 //+--------------------------------------------------------------------------------------------------+
//| Close OP_BUY Half lots @ 1:1 Function                                                            |
//+--------------------------------------------------------------------------------------------------+
void CloseHalfOrder() {
   static bool FirstBuyTarget_hit = false , SecondBuyTarget_hit = false ;
   int ct = 0 ;
   double minLot = MarketInfo( Symbol (),MODE_MINLOT);
   double lotStep = MarketInfo( Symbol (),MODE_LOTSTEP);
   double EMA_Bar = iClose( NULL , PERIOD_H1 , 1 );
   double EMA_MA = iMA ( Symbol (), 60 , 21 , 0 , 1 , 0 , 0 );
        
   for ( int c = OrdersTotal () - 1 ; c >= 0 ; c--)
       if ( OrderSelect (c,SELECT_BY_POS))
         if (OrderSymbol() == Symbol () && OrderType() <= OP_SELL)
             if (OrderMagicNumber() == MagicNumber) {
               double half= MathFloor (OrderLots()/ 2 /lotStep)*lotStep;
               double FirstTarget_Buy = OrderOpenPrice() + ((OrderTakeProfit() - OrderOpenPrice()) / 2 );
               Print ( "FirstTarget_Buy: " , DoubleToStr(FirstTarget_Buy, Digits ));
                                        
               ct++;
                                        
               if (!FirstBuyTarget_hit)
                   if (OrderType() == OP_BUY && Bid >= FirstTarget_Buy + ( Point / 2 )) {
                     if (OrderClose(OrderTicket(),half,Bid, 5 ,Blue)) {
                        MoveToBreakEven();
                        FirstBuyTarget_hit = true ;
                         break ;
                     }
                     else
                         Print ( "Close_Half_Order_Buy Last Error = " , GetLastError ());
                  }
                                        
               if (FirstBuyTarget_hit && !SecondBuyTarget_hit) 
                   if (OrderType() == OP_BUY && EMA_Bar < EMA_MA) {
                     if (OrderClose(OrderTicket(),half,Bid, 5 , CLR_NONE ))
                        SecondBuyTarget_hit = true ;
                     else
                         Print ( "EMA_Buy_Close Last Error = " , GetLastError ());                    
                  }

               break ;
            }
   if (ct == 0 ) {
      FirstBuyTarget_hit = false ;
      SecondBuyTarget_hit = false ;
   }
}

Yukarıdaki kod, döviz çifti başına yalnızca bir siparişin verildiğini varsayar.

 

Omg, yardımın için çok teşekkür ederim! gerçekten takdir ediyorum :)

Son bir şeyde bana yardım eder misin; şu anda SABİT 1:2 kar alma hedefim var (zor TP). Aslında bunu siparişten kaldırmak istiyorum. Bununla birlikte, yukarıda görebileceğiniz gibi, ilgili OrderClose() işlevleri, OrderClose() işlevlerinin nerede kapanması gerektiğini hesaplamak için OrderTakeProfit()'i kullanır.

Sorum şu, OrderTakeProfit() fiyatını saklamanın bir yolu var mı, ancak bunu siparişte sabitlemek yerine OrderClose() @ OrderTakeProfit() fiyatını kullanarak belirli bir lot miktarını kapatmak istiyorum? Bunun nedeni, bazen büyük kazançlar elde edecek bir ticarete sahip olacağım, ancak açık siparişle OrderTakeProfit() sabitlediğim için, tüm lotlar orada kapanacak ve bu çıkışta yalnızca bazı lotları kısmen kapatmak istiyorum. fiyat. Büyük koşucular için arka stop kullanıyorum... Bu mantıklı mı?

Bu kadar! Sonra işim bitti ve tozlandım! En sonunda!

GÜNCELLEME: Yukarıdaki kod, onu yazmanın güzel bir yoludur. Biraz oynadım ama tam olarak doğru sırayla kapanmıyor. Hala önce gelenin yarısını kapatır. Statik tarih saatini kullanmadan önce sahip olduğumla aynı mı? Düşüncesi olan var mı?

 
(bu konuyu bitirmiş gibi hissediyorum)

Kelimenin tam anlamıyla yukarıdaki son 2 sorum var ve bu bitti mi? Tek bilmem gereken, OrderTakeProfit() fiyatını nasıl saklayabilirim, böylece onu değiştirdiğimde, bir OrderClose() yapmak için tam olarak bu fiyatı kullanabilir miyim? Statik Çift işe yarar mı?
 
DomGilberto :

GÜNCELLEME: Yukarıdaki kod, onu yazmanın güzel bir yoludur. Biraz oynadım ama tam olarak doğru sırayla kapanmıyor. Hala önce gelenin yarısını kapatır. Statik tarih saatini kullanmadan önce sahip olduğumla aynı mı? Düşüncesi olan var mı?

Yukarıdaki kodda yaptığınız değişiklikleri ve günlük/günlük girişlerini (veya ekran görüntülerini) gönderin.

 
DomGilberto :

Omg, yardımın için çok teşekkür ederim! gerçekten takdir ediyorum :)

Son bir şeyde bana yardım eder misin; şu anda SABİT 1:2 kar alma hedefim var (zor TP). Aslında bunu siparişten kaldırmak istiyorum. Bununla birlikte, yukarıda görebileceğiniz gibi, ilgili OrderClose() işlevleri, OrderClose() işlevlerinin nerede kapanması gerektiğini hesaplamak için OrderTakeProfit()'i kullanır.

Sorum şu, OrderTakeProfit() fiyatını saklamanın bir yolu var mı, ancak bunu siparişte sabitlemek yerine OrderClose() @ OrderTakeProfit() fiyatını kullanarak belirli bir lot miktarını kapatmak istiyorum? Bunun nedeni, bazen büyük kazançlar elde edecek bir ticarete sahip olacağım, ancak açık siparişle OrderTakeProfit() sabitlediğim için, tüm lotlar orada kapanacak ve bu çıkışta yalnızca bazı lotları kısmen kapatmak istiyorum. fiyat. Büyük koşucular için arka stop kullanıyorum... Bu mantıklı mı?

Bu kadar! Sonra işim bitti ve tozlandım! En sonunda!

GÜNCELLEME: Yukarıdaki kod, onu yazmanın güzel bir yoludur. Biraz oynadım ama tam olarak doğru sırayla kapanmıyor. Hala önce gelenin yarısını kapatır. Statik tarih saatini kullanmadan önce sahip olduğumla aynı mı? Düşüncesi olan var mı?


karınızı büyük bir seviyeye ayarlayın ve OrderClose() fonksiyonlarının nerede kapanması gerektiğini hesaplamak için OrderTakeProfit() kullanan ilgili OrderClose() fonksiyonlarını kullanmaya devam edebilirsiniz. yalnızca OrderClose() işlevlerinin kapanması gereken hesaplamada bir değişiklik yapın
 
deVries - kelimenin tam anlamıyla bunu bu sabah anladım... Başka bir değişiklik yapmaya başladım... sonra ilk sipariş verildiği anda değiştirmem gerektiğini fark ettim...

On üç - Üzerinde hiçbir değişiklik yapmadım. Gönderdiğim kodla aynı şekilde çalıştı, ancak statik tarih saatinin aksine statik bir bool mu kullanıyorsunuz? Geri testi yaptığımda görebildiğim tek gerçek fark bu mu? Bunun dışında hareketli ortalama ve altındaki kapanış ile ikinci OrderClose() işlevi ; diğer orderclose()'dan önce gelirse yine de kapanır mı?
 
DomGilberto :

On üç - Üzerinde hiçbir değişiklik yapmadım. Gönderdiğim kodla aynı şekilde çalıştı, ancak statik tarih saatinin aksine statik bir bool mu kullanıyorsunuz? Geri testi yaptığımda görebildiğim tek gerçek fark bu mu? Bunun dışında hareketli ortalama ve altındaki kapanış ile ikinci OrderClose() işlevi; diğer orderclose()'dan önce gelirse yine de kapanır mı?
Soru işaretini kullanmanla, bana mı soruyorsun yoksa vurgulanan kısmı mı söylüyorsun emin değilim. Test cihazı, ikinci kısmi kapanışın birinciden önce gerçekleştiğini gösteriyorsa, lütfen strateji test cihazı tarafından oluşturulan günlük/günlükteki işlem sonuçlarınızı, ikinci kısmi kapanışın (hareketli ortalama) ilk kısmi kapanıştan önce gerçekleştiğini gösteren gönderin.
 
Thirteen :
Soru işaretini kullanmanla, bana mı soruyorsun yoksa vurgulanan kısmı mı söylüyorsun emin değilim. Test cihazı, ikinci kısmi kapanışın birinciden önce gerçekleştiğini gösteriyorsa, lütfen strateji test cihazı tarafından oluşturulan günlük/günlükteki işlem sonuçlarınızı, ikinci kısmi kapanışın (hareketli ortalama) ilk kısmi kapanıştan önce gerçekleştiğini gösteren gönderin.

Bana geri döndüğün için teşekkürler Onüç - Günlüğü bugün daha sonra yayınlayacağım :)

Neden: