Yarım lotları kapatmak. - sayfa 16

 
Tamam biraz ilerleme kaydettim. Yine de bir sorunum var. Herhangi bir pariteye ilk kez bir emir verirsem, tarihte karşılaştırılacak bir ticaretim OLMADIĞINDA, emrin yarısını KAPATMAZ... Bu durumda, ilk ticaret 1:1 gittiyse, Tarih havuzunda karşılaştırılacak hiçbir şeyi olmadığı için pozisyonun yarısını kapatmayacak... Aynı şekilde, neyi yanlış yaptığımdan tam olarak emin değilim, ancak tarihte karşılaştırılacak bir ticaret olsa bile, ( OrderOpenTime()), hala aynı fiyata sürekli olarak kapatıyor mu?

 int start()
{
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET, MODE_TRADES)==True)
{  
   OrderEntryTime            = OrderOpenTime();
   datetime OrderEntryClosed = OrderCloseTime(); 
    CurrentSymbol            = OrderSymbol();
     if (OrderType() <= OP_SELL && CurrentSymbol == Symbol ())
         {   
         Print ( " The Selected Order " , CurrentSymbol, " matches this pair: " , Symbol ());
         Print ( " The Open Time of this order was: " , TimeToStr(OrderEntryTime, TIME_MINUTES | TIME_DATE));  
         }
         
   if (OpenOrdersThisPair( Symbol ())> 0 && CurrentSymbol== Symbol ())
     {
       // Need a for loop to compare historically closed trades that match with Symbol() and the "datetime OrderEntryTime = OrderOpenTime();" above.
     CheckHistoricalTrades(); 
     }
   }
}
}  
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  

void CheckHistoricalTrades()
{
for ( int Pos=OrdersHistoryTotal()- 1 ; Pos >= 0 ; Pos--) 
    {
     if ( OrderSelect (Pos, SELECT_BY_POS, MODE_HISTORY)  
        &&  OrderMagicNumber()  == MagicNumber            
        &&  CurrentSymbol       == Symbol ()            
        &&  OrderType()         <= OP_SELL
        &&  OrderEntryTime    >  OrderOpenTime() && OrderType()==OP_BUY)
          {
           Print ( " Last Order Open Time: " , TimeToStr(OrderOpenTime(), TIME_MINUTES | TIME_DATE), 
                   " Was not the same as current order: " , TimeToStr(OrderEntryTime, TIME_MINUTES | TIME_DATE));
          CloseHalfOrder();
          }
                 if (OrderEntryTime > OrderOpenTime() && OrderType()==OP_SELL)
                  {
                   Print ( "Last Order Open Time: " , TimeToStr(OrderOpenTime(), TIME_MINUTES | TIME_DATE), 
                     " Was not the same as current order: " , TimeToStr(OrderEntryTime, TIME_MINUTES | TIME_DATE));
                  CloseHalfOrder1(); // This just closes half of the position at 1:1 - then if OrderStopLoss > OrderOpenPrice() = MoveToBreakEven() void kicks in. 
                  }
                      
     }
}  
Sorunun yüzüme bakmak olduğunu biliyorum ama göremiyorum...
 
Bu, dergideki baskılar - bazı baskılar yukarıda gösterilmemiştir - ancak yukarıdakilerin tümü vardır.
 2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1: Last Order Open Time: 2010.02 . 04 09 : 22 Was not the same as current order: 2010.02 . 25 01 : 16 //>>> "Last Order Open time" here doesn't make sense?
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1: SELL First Target Closed: 0.03 OP_SELL First Closed - Open Time: 2010.02 . 05 15 : 07 //>>> This is the same as "The Last Order Open Time"?
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1: close # 16 sell 0.03 GBPJPY at 138.270 sl: 138.240 tp: 135.082 at price 136.637  //>>> Therefore, it closed it here.
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1: Ask >= FirstTarget_Sell - Current Ask: 136.637 FirstTarget_Sell: 136.676     //>>> The ask is at the OrderClose() price.
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1: FirstTarget_Sell: 136.676
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1: Order Ticker Number = 10
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1: The Lots to close is : 0.030
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1: Last Order Open Time: 2010.02 . 05 15 : 07 Was not the same as current order: 2010.02 . 25 01 : 16
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1:  The Open Time of this order was: 2010.02 . 25 01 : 16
2013.08 . 09 13 : 56 : 20      2010.02 . 25 09 : 16   Trend Fishing 3 Exits GBPJPY,H1:  The Selected Order GBPJPY matches this pair: GBPJPY
 
DomGilberto :

Yine de sahip olduğum sorun; Aynı "OP_BUY" veya "OP_SELL" i farklı fiyatlarla 4 defaya kadar kısmi olarak kapatmaya çalışıyorum... Sanırım sormam gereken soru şu, bir yol alabilir miyim, burada TÜM kısmi bir kuralım var mı? kapanışlar (belirli BİR işlemdeki herhangi bir lotun ve fiyatın) önceden tanımlanmış "OrderClose()" parametre setlerinde yalnızca BİR KEZ kısmen kapanacaktır...

Bu şekilde, şimdi bunu OrderOpenTime()'ı karşılaştırarak yapmayı düşünüyorum, esasen yalnızca bir kez çalışacak ve diğer herhangi bir OrderClose() işlevinin gerçekleşmesini kısıtlayacaktır... Sahip olabileceğim bir yol bulmak istiyorum. 4 OrderClose() işlevine uygulanan bir kural... (eğer bu mantıklıysa?)

İnsanların açık 4 sipariş önerdiğini biliyorum, ancak çok derine inmeden bu şekilde yapmak benim için daha az verimli.

Neden sadece bilet numarasını ve gerçekleştirilecek kalan mevcut kısmi kapanışların sayısını saklayan iki boyutlu bir diziye sahip değilsiniz.

Anahat/Sözde kod:

1. statik iki boyutlu diziyi tanımlayın: cOrders[][2].

2. girilen her yeni sipariş için: cSiparişlerin ilk boyutunu boyut+1 olarak yeniden boyutlandırın, yeni siparişin bilet numarasını [x][0]'a ve gerçekleştirmek için kalan kısmi kapanış sayısını (bu durumda, 4) [x]['e koyun] 1].

3. Herhangi bir zaman aralığında (örneğin, her başlangıç()), dizide dolaşın, saklanan bilet numarasını kullanarak her bir siparişi seçin ve kısmi bir kapatmanın gerekip gerekmediğini belirleyin.

4. Kısmi kapatmanın gerçekleştirilmesi gerekiyorsa (3. adıma bakın), OrderClose()'u kullanarak emri kısmen kapatın ve cOrders[x][0]'ı yeni bilet numarasını yansıtacak ve cOrders[x][1]'i 1 azaltacak şekilde güncelleyin.

5. Kapatılan veya gerçekleştirilecek kısmi kapanış sayısının 0 olduğu siparişleri siparişlerden kaldırın .

Tek sorun, platform/bilgisayar yeniden başlatıldığında ne yapılacağıdır. Bu bilgileri bir dosyada saklayabilir ve dosyayı platform yeniden başlatıldığında init() içinde okuyabilirsiniz.

 
Thirteen :

Neden sadece bilet numarasını ve gerçekleştirilecek kalan mevcut kısmi kapanışların sayısını saklayan iki boyutlu bir diziye sahip değilsiniz.

Anahat/Sözde kod:

1. statik iki boyutlu diziyi tanımlayın: cOrders[][2].

2. girilen her yeni sipariş için: cSiparişlerin ilk boyutunu boyut+1 olarak yeniden boyutlandırın, yeni siparişin bilet numarasını [x][0]'a ve gerçekleştirmek için kalan kısmi kapanış sayısını (bu durumda, 4) [x]['e koyun] 1].

3. Herhangi bir zaman aralığında (örneğin, her başlangıç()), dizide dolaşın, saklanan bilet numarasını kullanarak her bir siparişi seçin ve kısmi bir kapatmanın gerekip gerekmediğini belirleyin.

4. Kısmi kapatmanın gerçekleştirilmesi gerekiyorsa (3. adıma bakın), OrderClose()'u kullanarak emri kısmen kapatın ve cOrders[x][0]'ı yeni bilet numarasını yansıtacak ve cOrders[x][1]'i 1 azaltacak şekilde güncelleyin.

5. Kapatılan veya gerçekleştirilecek kısmi kapanış sayısının 0 olduğu siparişleri siparişlerden kaldırın.

Tek sorun, platform/bilgisayar yeniden başlatıldığında ne yapılacağıdır. Bu bilgileri bir dosyada saklayabilir ve dosyayı platform yeniden başlatıldığında init() içinde okuyabilirsiniz.

Sanırım bunu yapmanın en kolay yolu Magic Numbers ile. . . farklı parametreleri tanımlamak için sayının bölümlerini kullanın, örneğin: parça sayısı, sipariş numarası, gün, ay, EA numarası. . . tüm parçalar aynı Sihirli Numaraya sahip olacak ve Tarihte kolayca izlenebilecekti. Kapalı kısmın ve açık kalan kısmın her ikisinin de aynı Magic Number'a sahip olduğunu varsayıyorum. . .
 
Evet, öyle düşünüyorum. Sihirli sayı her zaman aynı "1234" mü?

Farklı parametreleri tanımlamak için sihirli sayının bölümlerini nasıl kullanacağım konusunda hiçbir fikrim yok? Bence OrderOpenTime() kullanmak mantıklı bir yol olmayacak... Bu iş parçacığının ne kadar uzun sürdüğüne inanamıyorum. Yüksek sesle gülmek.

Allah'a yemin ederim ki (herkesin de yardımıyla!) bu konuyu çözdüğümde bununla ilgili bir konu açacağım.
 
RaptorUK :
Bence bunu yapmanın en kolay yolu Magic Numbers ile. . . farklı parametreleri tanımlamak için sayının bölümlerini kullanın, örneğin: parça sayısı, sipariş numarası, gün, ay, EA numarası . . . tüm parçalar aynı Sihirli Numaraya sahip olacak ve Tarihte kolayca izlenebilecekti. Kapalı kısmın ve açık kalan kısmın her ikisinin de aynı Magic Number'a sahip olduğunu varsayıyorum. . .

Sihirli Sayının bilgi parçalarını kodlamak için kullanılması oldukça mümkündür, ancak birkaç olası sınırlama görüyorum. İlk olarak, Sihirli Sayı bir int'dir ve bu nedenle 10 basamak uzunluğundadır, burada en soldaki basamak yalnızca 1 veya 2 olabilir (ve en soldaki basamak 2 ise, en soldaki ikinci basamak 7 veya daha az olmalıdır) ). İkincisi, sadece mevcut siparişin kısmen kapatılmasının gerekip gerekmediğini (veya kapatılıp kapatılamayacağını) belirlemek için her bir siparişin tüm bölümlerini bulmak için tüm geçmişi gözden geçirmek her start() için daha fazla zaman alabilir. Sadece daha fazla zamanın önemsiz olup olmayacağından emin değilim.

 

Bekle, birkaç sihirli numaram olamaz mı? İlk OrderSend() için bir tane, OrderModify() için bir tane kullanın, pozisyonun yarısı ilk 1:1 hedefinde kapatıldıktan sonra MagicNumber değiştirilsin mi? Bu nedenle, 1:1'de ilk yarıyı kapatmak istediğimde, o anki açık "OP_BUY" ilk verdiğim sihirli sayıya karşılık geldiği sürece sadece 1:1 kapanacak? Kısmen kapandıktan sonra, bu sihirli sayıyı değiştirip değiştirelim mi?!

Yüksek sesle gülmek? Bu gerçekten basit değil mi?!

GÜNCELLEME: Açıkçası bugün buna bakmayı bırakmam gerekiyor - bir MagicNumber'ı değiştiremezsiniz - keşke yapabilseydiniz... (facepalm) - Tüm bunların ne kadar kolay olacağını hayal edebiliyor musunuz...

 
DomGilberto :
Bekle, birkaç sihirli numaram olamaz mı? İlk OrderSend() için bir tane, OrderModify() için bir tane kullanın, pozisyonun yarısı ilk 1:1 hedefinde kapatıldıktan sonra MagicNumber değiştirilsin mi? Bu nedenle, 1:1'de ilk yarıyı kapatmak istediğimde, o anki açık "OP_BUY" ilk verdiğim sihirli sayıya karşılık geldiği sürece sadece 1:1 kapanacak? Kısmen kapandıktan sonra, bu sihirli sayıyı değiştirip değiştirelim mi?!

Yüksek sesle gülmek? Bu gerçekten basit değil mi?!

Hayır. İlk olarak, ilk OrderSend()'den sonra, OrderModify() kullanarak Sihirli Numarayı ekleyemez/değiştiremezsiniz. İkincisi, OrderClose() kullanarak kısmi bir sipariş kapanışı yaptığınızda, yeni sipariş (sanırım) eski siparişle aynı Sihirli Numarayı alır.

 
Thirteen :

Hayır. İlk olarak, ilk OrderSend()'den sonra, OrderModify() kullanarak Sihirli Numarayı ekleyemez/değiştiremezsiniz. İkincisi, OrderClose() kullanarak kısmi bir sipariş kapanışı yaptığınızda, yeni sipariş (sanırım) eski siparişle aynı Sihirli Numarayı alır.


Evet. Ne kadar geri zekalı olduğumu anladım. Uzun gün!

Evet, ilk kısmi kapanıştan sonra kalan pozisyona hala ilk başladığı sihirli sayı atanır.

Şimdi gerçekten sinirimi bozuyor... Sihirli sayıyı değiştirebilseydim, çok kolay olurdu!? Bir pozisyonu BİR KEZ kısmen kapatmanın mantıklı bir yolu olmalıdır - ve bunu OrderClose() içinde belirtilen herhangi bir önceden tanımlanmış fiyatta birden çok kez yapın - MagicNumber()'ı değiştirmemize izin verecek bir güncelleme olması gerekiyor!
 

Hiç mantıklı düşünmüyorsun.

1. Sihirli sayıyı değiştirmek, OrderOpenTime()'ı bilmekten daha fazla size nasıl yardımcı olabilir? Bu siparişin tanımlayıcısı ile tamamen aynı anlama gelir.

2. timetostr ile neden gün/saat/dakika biçimine dönüştürüyorsunuz? OrderOpenTime() zaten zaman damgası biçimindedir ve şöyle görünür: 1375356521, siparişin açıldığı saniyeye kadar olan tam zamanı temsil eder.

Sihirli sayıyı değiştirebilseydiniz, siparişin sihirli numarasına sahip olmadığından emin olmak için siparişin sihirli numarasını karşılaştırırdınız, bu da zaten kısmen kapalı olduğu anlamına gelir değil mi?

Bunu yapabilseydiniz, neden siparişin OrderOpenTime'ını zaten kısmen kapalı olduğunu bildiğiniz zaman damgasıyla karşılaştıramıyorsunuz?

statik tarihsaat zatenpartkapalı;

parça kapatma siparişi başarılı olursa

zatenpartclosed = OrderOpenTime();

sipariş, parça kapama kriterlerini karşıladığında

if(OrderOpenTime() != zatenpartclosed )

Aynı anda birden fazla açık siparişi yönetiyorsanız, kısmi kapalı siparişlerin her bir zaman damgasını tutmak için bir dizi[] kullanın.