Açık ticareti kontrol etme sorunları - sayfa 2

 
dazamate :


 int start(){
   static datetime Time0;
   if (Time0 == Time[ 0 ]) return ; Time0 = Time[ 0 ];
   // A new bar has started.

WHRoeder, Bu kod çok basit görünüyor ama nasıl çalıştığını kafamda çözemiyorum, eğer time0'ı time[0]'a eşit yapıyorsa, time0 her time[0]'a eşitse if ifadesi her zaman doğru olmaz mı? Çalışmadığını söylemiyorum ama böyle bir yapıda nasıl çalıştığını anlamıyorum.

1. tik: Zaman0 Zaman[ 0 ] 'a eşit değildir, bu nedenle dönüş yürütülmez, Zaman0 Zaman[ 0 ] olarak ayarlanır (geçerli çubuğun başlangıç zamanı) başlatma işlevinin geri kalanı yürütülür.

2. ve sonraki tikler: Eğer Time0 hala mevcut çubuğun başlangıç zamanına eşitse, o zaman hala aynı çubuktayız, dönüş gerçekleştirilir ve başlatma işlevinden çıkılır. Eğer Time0 mevcut çubuğun başlangıç zamanına eşit değilse, o zaman yeni bir çubuk üzerindeyizdir, dönüş gerçekleştirilmez, Time0 Time[ 0 ] olarak ayarlanır (yeni mevcut çubuğun başlangıç zamanı) başlatma fonksiyonunun geri kalanı yürütülür .

 
dazamate :

Bekleyen bir emir verilirse ve x miktarında çubukla tetiklenmezse iptal edileceği bir sayaç yapmaya nasıl giderim? Bulabildiğim tek şey, her yeni çubuk oluştuğunda sayılacak bir sayaç koymak ve eğer sayılan çubuk miktarı == bekleyen emirler iptal edilmeden önce belirtilen izin verilen çubuklar. Çubuk sayacı, bekleyen yeni bir sipariş her açıldığında sıfırlanıyor mu? Kulağa nasıl geliyor?

Bekleyen siparişleri kontrol eden, her bir siparişin ne zaman açıldığını, ne kadar sürdüğünü ve zaman sınırından daha uzun olup olmadığını kontrol eden bir fonksiyon oluştururdum.

 
dazamate :

1hr tf'de eurusd, usdchf, gbpusd, usdjpy'yi tarayan bir fonksiyon yapmak istiyorum. Son 06:00 gmt mum kayıtlarına geri döner, her çift için 6gmt -6gmt aralığını kaydeden ve kaydeden önceki 06:00 gmt mum kayıtlarına 24 bar daha geri döner. Ardından tüm çiftlerden 6gmt - 6gmt aralığını karşılaştırır ve en yüksek olanı döndürür. 1 zaman çizelgesine eklenmiş bir ea'nın bunu yapması mümkün müdür?

Bunun gibi tüm problemlerde kod hakkında düşünmeden önce çözümünüzü bulmanız gerekir. . IMO. Bir akış şeması oluşturun veya bir sözde kod yazın. . . önce mantıklı bir çözüm bul. . sonra koda bakın.

Son sorunuzu yanıtlamak için, evet bunu yapmak mümkündür, örneğin, farklı bir çiftten belirli bir mumun açık değerini almak için EA'nın açık olduğu çifti kullanırdım. . .

iOpen( string symbol, int timeframe, int shift)

4 çiftin öfkesi için değerlerinizi aldıktan sonra, bunun gibi bir şey kullanarak en büyüğünü kolayca belirleyebilirsiniz:

   MathMax ( double value4, ( MathMax ( double value3, ( MathMax ( double value1, double value2))))) ;

. . . veya değerleri bir diziye koyabilir ve ArraySort kullanabilirsiniz. . . genellikle bir şeyi yapmanın birden fazla yolu vardır, öncelikle probleminizi nasıl çözeceğinize dair bir planınız olmalıdır.

DÜZENLEME: Bunların bazılarının Strateji test cihazı ile doğru çalışmayacağını unutmayın.

 
extern int      iOpenHour                = 6 ;

int start()
  {
  
int b, scannedhour;
datetime bartime;
double dibsclose, dibsopen, prevdayrange;

for (b= 0 ; b<= 24 ; b++)                                   // scans the last 24 bars 
   {
      bartime = iTime ( "EURUSD" , 60 , b);                 // checks the open time of each bar
      scannedhour = TimeHour (bartime);                 // extracts the hour of that bar
    
       if ( scannedhour == iOpenHour )                   // Check to see if scanned hour = Dibs hour
         {
            dibsclose    = iOpen ( "EURUSD" , 60 , b);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen     = iOpen ( "EURUSD" , 60 , b- 24 );   // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange = (dibsclose-dibsopen);       // Calculate the range of the Dibs day
         }                                             // End of if statement
    }                                                   // End of for statement


Comment ( "Prev Dibs day range is..." ,prevdayrange, "dibsclose  =  " , dibsclose, "dibsopen  =  " ,dibsopen, "Scannedhour=" ,scannedhour);      


   return ( 0 );
  }

Pekala, bu benim son 06:00 çubuğunu bulana kadar eurusd 1 saatlik grafiği tarayacak, açık olduğunu kaydedecek, o çubuğun açılışını kaydetmek için 24 çubuk daha geriye gidecek bir kod yazma girişimim (06:00 gününün başlangıcı) ) ve bunlardan seçilen 2 çubuktan açık-açık aralığı alır.

Sürpriz sürpriz işe yaramıyor. Lol ------> http://myfacewhile.com/307/

Bana s*ktiğimi söyle. Yoksa bunu yanlış yoldan mı anladım? denedim hehe

 

Bir sorun tespit edildi. . . 24 saat öncesi b, b+24'tür. . çubuklar geçerli çubuktan ( 0 ) sola doğru sayar

dibsopen     = iOpen( "EURUSD" , 60 , b- 24 );   // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)

change to:

dibsopen     = iOpen( "EURUSD" , 60 , b+ 24 );   // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)

Yorum eklemek için aferin, girmek için çok iyi bir uygulama. . . :-)

 
RaptorUK :

Bir sorun tespit edildi. . . 24 saat öncesi b, b+24'tür. . çubuklar geçerli çubuktan ( 0 ) sola doğru sayar

Yorum eklemek için aferin, girmek için çok iyi bir uygulama. . . :-)


Vay canına, bunu fark etmem biraz zaman alacaktı, lol. Tüm bunları doğru yaptığıma inanamıyorum - o aptal hata. Şimdi bir yere vardığımı hissediyorum. Evet, ne yaptığımı takip etmeme yardımcı olmak için yorumları ekledim ve ne yapmaya çalıştığımı görmenizi sizler için çok kolay hale getirdim. Şimdi 4 çifti karşılaştırmasını sağlayacağım ve en yüksek değere sahip olanı tüküreceğim. Onunla nasıl gittiğimi size bildireceğim. Teşekkürler RaptorUK
 
İyi şeyler, aferin. Rica ederim :-)
 
extern int      iOpenHour                = 6 ;

int start()
  {
                                                             //  Array Categorys ( 1  EURUSD, 2 GBPUSD, 3 USDCHF, 4 USDJPY )
int b[ 4 ], scannedhour[ 4 ];
datetime bartime[ 4 ];
double dibsclose[ 4 ], dibsopen[ 4 ], prevdayrange[ 4 ];

//----------------------------------------------------------------------------------------------
//        EURUSD PREV DAY RANGE CALC

for (b[ 1 ]= 0 ; b[ 1 ]<= 24 ; b[ 1 ]++)                               // scans the last 24 bars on eurusd
   {
      bartime[ 1 ] = iTime ( "EURUSD" , 60 , b[ 1 ]);               // checks the open time of each bar
      scannedhour[ 1 ] = TimeHour (bartime[ 1 ]);                 // extracts the hour of that bar
    
       if ( scannedhour[ 1 ] == iOpenHour )                     // Check to see if scanned hour = Dibs hour
         {
            dibsclose[ 1 ]    = iOpen ( "EURUSD" , 60 , b[ 1 ]);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[ 1 ]     = iOpen ( "EURUSD" , 60 , b[ 1 ]+ 24 ); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[ 1 ] = (dibsclose[ 1 ]-dibsopen[ 1 ]);   // Calculate the range of the Dibs day
         }                                                   // End of if statement
    }                                                       // End of for statement
    

//----------------------------------------------------------------------------------------------
//        GBPUSD PREV DAY RANGE CALC

for (b[ 2 ]= 0 ; b[ 2 ]<= 24 ; b[ 2 ]++)                               // scans the last 24 bars on eurusd
   {
      bartime[ 2 ] = iTime ( "GBPUSD" , 60 , b[ 2 ]);               // checks the open time of each bar
      scannedhour[ 2 ] = TimeHour (bartime[ 2 ]);                 // extracts the hour of that bar
    
       if ( scannedhour[ 2 ] == iOpenHour )                     // Check to see if scanned hour = Dibs hour
         {
            dibsclose[ 2 ]    = iOpen ( "GBPUSD" , 60 , b[ 2 ]);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[ 2 ]     = iOpen ( "GBPUSD" , 60 , b[ 2 ]+ 24 ); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[ 2 ] = (dibsclose[ 2 ]-dibsopen[ 2 ]);   // Calculate the range of the Dibs day
         }                                                   // End of if statement
    }                                                       // End of for statement



//----------------------------------------------------------------------------------------------
//        USDCHF PREV DAY RANGE CALC

for (b[ 3 ]= 0 ; b[ 3 ]<= 24 ; b[ 3 ]++)                               // scans the last 24 bars on eurusd
   {
      bartime[ 3 ] = iTime ( "EURUSD" , 60 , b[ 3 ]);               // checks the open time of each bar
      scannedhour[ 3 ] = TimeHour (bartime[ 3 ]);                 // extracts the hour of that bar
    
       if ( scannedhour[ 3 ] == iOpenHour )                     // Check to see if scanned hour = Dibs hour
         {
            dibsclose[ 3 ]    = iOpen ( "USDCHF" , 60 , b[ 3 ]);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[ 3 ]     = iOpen ( "USDCHF" , 60 , b[ 3 ]+ 24 ); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[ 3 ] = (dibsclose[ 3 ]-dibsopen[ 3 ]);   // Calculate the range of the Dibs day
         }                                                   // End of if statement
    }                                                       // End of for statement


//----------------------------------------------------------------------------------------------
//        USDJPY PREV DAY RANGE CALC

for (b[ 4 ]= 0 ; b[ 4 ]<= 24 ; b[ 4 ]++)                               // scans the last 24 bars on eurusd
   {
      bartime[ 4 ] = iTime ( "USDJPY" , 60 , b[ 4 ]);               // checks the open time of each bar
      scannedhour[ 4 ] = TimeHour (bartime[ 4 ]);                 // extracts the hour of that bar
    
       if ( scannedhour[ 4 ] == iOpenHour )                     // Check to see if scanned hour = Dibs hour
         {
            dibsclose[ 4 ]    = iOpen ( "USDJPY" , 60 , b[ 4 ]);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[ 4 ]     = iOpen ( "USDJPY" , 60 , b[ 4 ]+ 24 ); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[ 4 ] = (dibsclose[ 4 ]-dibsopen[ 4 ]);   // Calculate the range of the Dibs day
         }                                                   // End of if statement
    }                                                       // End of for statement




//----------------------------------------------------------------------------------------------



Comment ( "DIBS RANGE EURUSD:..." , prevdayrange[ 1 ],         //Display Ranges of each pair
         "DIBS RANGE GBPUSD:..." , prevdayrange[ 2 ],
         "DIBS RANGE USDCHF:..." , prevdayrange[ 3 ],
         "DIBS RANGE USDJPY:..." , prevdayrange[ 4 ]);      


   return ( 0 );
  }
Pekala, tüm değişkenleri dizilere çevirdim ve her biri için kontrolleri çalıştırdım. Şimdi çalışmayı durdurdu. Bunun gibi birden fazla for döngüsüne sahip olmak mümkün değil mi?
 
dazamate :
Pekala, tüm değişkenleri dizilere çevirdim ve her biri için kontrolleri çalıştırdım. Şimdi çalışmayı durdurdu. Bunun gibi birden fazla for döngüsüne sahip olmak mümkün değil mi?
Evet yapabilirsiniz, sorun değil, ancak for döngüsü dizininde bir dizi kullanmayın, isterseniz her seferinde b kullanabilirsiniz. Her bir for döngüsü için 0'a sıfırlanır, bu nedenle yeniden kullanmak sorun olmaz. aslında bir diziyi ne için kullanmanız GEREKİYOR? sadece aralık değerleri için değil mi?
 
RaptorUK :
Evet yapabilirsiniz, sorun değil, ancak for döngüsü dizininde bir dizi kullanmayın, isterseniz her seferinde b kullanabilirsiniz. Her bir for döngüsü için 0'a sıfırlanır, bu nedenle yeniden kullanmak sorun olmaz. aslında bir diziyi ne için kullanmanız GEREKİYOR? sadece aralık değerleri için değil mi?
Ahhh evet ne dediğinizi anlıyorum, düzelteceğim ve nasıl gideceğime bakacağım. Hızlı yanıtlar adamım, eğer bu yemek beni zengin ederse sana biraz geri ödeyeceğim lol