Her 10 Pipte Bir Referans Çizgisi Nasıl Çizilir

 

İşte her zaman kullandığım kullanışlı bir komut dosyası. Piyasadaki hareketi ölçmeme yardımcı olmak için her 10 pipste bir referans çizgileri çiziyor. Ekranın sağ tarafındaki fiyatlara bakarak bunu anlamaya çalışırken gerçekten hayal kırıklığına uğradım ve bir senaryo oluşturdum. Senaryo, yeni başlayanlar için çizim nesneleri alıştırması yapmak için iyi olabilir.

 int start()
{  
     int nLines = 40 ;                                   // Number of total line to draw
     double lineInterval = 0.0010 ;                       // Interval between lines
     ObjectsDeleteAll ( 0 , OBJ_HLINE );                     // Clear all the lines from the window - CAREFUL!
     double normPrice = NormalizeDouble (Close[ 1 ], 3 );     // Current price is rounded to nearest "10"
     for ( int ix = 0 ; ix < nLines; ix++)                 // Loop span number of times
        {
             ObjectCreate ( "tensLines" +ix, OBJ_HLINE , 0 , 0 , normPrice+((ix-(nLines/ 2 ))*lineInterval));     // Place half above and half below the current price
             ObjectSet ( "tensLines" +ix, OBJPROP_COLOR , DarkSlateGray );       // Make the lines look better
        }
     return ( 0 ); //All done
}
 
MisterDog :

İşte her zaman kullandığım kullanışlı bir komut dosyası. Piyasadaki hareketi ölçmeme yardımcı olmak için her 10 pipste bir referans çizgileri çiziyor. Ekranın sağ tarafındaki fiyatlara bakarak bunu anlamaya çalışırken gerçekten hayal kırıklığına uğradım ve bir senaryo oluşturdum. Senaryo, yeni başlayanlar için çizim nesneleri alıştırması yapmak için iyi olabilir.

Bunu bir CI değil komut dosyası yapın, yakın fiyattan değil 0'dan hesaplayın, grafiğin yalnızca görünür kısmından çizin (WinPriceMax() ve kız kardeşi), fiyat sınırı aştığında güncelleyin (sizin durumunuzda, satır aralığı = 10 pip) ), OBJ_HLINE yerine OBJ_RECTANGLE kullanın.

Açılan tüm çizelgelerde senkronize olacaktır.

:D

 

Veya . . . bunu bir Gösterge haline getirin. . biraz daha fazla koda ihtiyaç duyar, bu nedenle yalnızca yeni bir çubuğun başlangıcında yenilenir. . .

 int deinit()
   {
   for ( int ix = 0 ; ix < nLines; ix++) // delete my horizontal lines
      {
       ObjectDelete ( "tensLines" +ix);
      }
   return ( 0 );
   }


int start()
   {  
   int nLines = 40 ;                                   // Number of total line to draw
   double lineInterval = 0.0010 ;                       // Interval between lines
   double normPrice = NormalizeDouble (Close[ 1 ], 3 );     // Current price is rounded to nearest "10"

   for ( int ix = 0 ; ix < nLines; ix++)                 // Loop span number of times
      {
       if ( ObjectFind ( "tensLines" +ix) < 0 ) 
         ObjectCreate ( "tensLines" +ix, OBJ_HLINE , 0 , 0 , normPrice+((ix-(nLines/ 2 ))*lineInterval));     // Place half above and half below the current price

       else ObjectSet ( "tensLines" +ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/ 2 ))*lineInterval));
       ObjectSet ( "tensLines" +ix, OBJPROP_COLOR , DarkSlateGray );       // Make the lines look better
      }
   return ( 0 ); //All done
   }
 
onewithzachy :

Bunu bir CI değil komut dosyası yapın, yakın fiyattan değil 0'dan hesaplayın, grafiğin yalnızca görünür kısmından çizin (WinPriceMax() ve kız kardeşi), fiyat sınırı aştığında güncelleyin (sizin durumunuzda, satır aralığı = 10 pip) ), OBJ_HLINE yerine OBJ_RECTANGLE kullanın.

Açılan tüm çizelgelerde senkronize olacaktır.

:D


Bunların hepsi, " OBJ_HLINE yerine O BJ_RECTANGLE " kısmı dışında anlamlıdır. Neden dikdörtgenler?
 
RaptorUK :

Veya . . . bunu bir Gösterge haline getirin. . biraz daha fazla koda ihtiyaç duyar, bu nedenle yalnızca yeni bir çubuğun başlangıcında yenilenir. . .


Evet elbette -- çok daha iyi. Söyleyin bana, ObjectDelete gibi şeyler için bir çeşit "joker karakter" kullanmanın bir yolu var mı? Böyle bir şey yapmak istiyorum, ObjectDelete ( "tensLines"* ); başka bir deyişle, "tensLines" ile başlayan her şeyi silin.
 
MisterDog :

Bunların hepsi "OBJ_HLINE yerine O BJ_RECTANGLE" kısmı dışında mantıklı. Neden dikdörtgenler?

Yıllardır bu ızgara şeyim var, zaten fiyatları sağ tarafta hiç görmüyorum, muhtemelen dikdörtgeni sevmiyorsunuz, WindowsBarsPerChart() ve belki de WindowsFirstVisibleBar() kullanın.

Grafiğin sağ alt kısmına bakın, 25/341. Bu, gridin 25 pip ve grafiğin yüksekliğinin 341 pip olduğu anlamına gelir.

:D

 
onewithzachy :

Yıllardır bu ızgara şeyim var, zaten fiyatları sağ tarafta hiç görmüyorum, muhtemelen dikdörtgeni sevmiyorsunuz, WindowsBarsPerChart() ve belki de WindowsFirstVisibleBar() kullanın.

Grafiğin sağ alt kısmına bakın, 25/341. Bu, gridin 25 pip ve grafiğin yüksekliğinin 341 pip olduğu anlamına gelir.

:D

Aslında bunu parmaklıklarla düzenleme şeklini seviyorum. Göze kolay. "Nasılsa sağ tarafta fiyatları göremezsiniz" diyorsunuz. Al ya da sat gibi iki seçenekle neden %50-50 şansım olduğunu merak etmişimdir ama zamanın %80'inde yanılmışımdır. ;-)
 
MisterDog :
Aslında bunu parmaklıklarla düzenleme şeklini seviyorum. Göze kolay. "Nasılsa sağ tarafta fiyatları göremezsiniz" diyorsunuz. Al ya da sat gibi iki seçenekle neden %50-50 şansım olduğunu merak etmişimdir ama zamanın %80'inde yanılmışımdır . ;-)

Aynı şekilde ...

:D

 
MisterDog :
Aslında bunu parmaklıklarla düzenleme şeklini seviyorum. Göze kolay. "Nasılsa sağ tarafta fiyatları göremezsiniz" diyorsunuz. Al ya da sat gibi iki seçenekle neden %50-50 şansım olduğunu merak etmişimdir ama zamanın %80'inde yanılmışımdır. ;-)

Bunu cevaplamak çok kolay. . . EA'ları test ederken gördüklerimin doğru olduğunu varsayarsak. Bu sizin riskiniz:ödül, eğer 20 riskiniz ve 80 (veya benzeri bir oran) ödülünüz varsa, nasıl %20'lik bir kazanma oranına sahip olabileceğinizi görebiliyorum. . . bu o kadar basit değil çünkü küçük işlemler yapıyorsanız Spread'i hesaba katmanız gerekiyor. . .
 
onewithzachy, O BJ_RECTANGLE stil çizelgenizi oluşturmaya çalışıyorum. " WindowsBarsPerChart() ve belki de WindowsFirstVisibleBar()"dan bahsettiniz. Çubukların ekranın sol tarafından sağa doğru nasıl hareket ettirileceğini bulmakta hala zorlanıyorum. Ama düzeni beğendim! Bunun nasıl yapılacağına dair herhangi bir ipucu var mı?
 
MisterDog :
onewithzachy, O BJ_RECTANGLE stil çizelgenizi oluşturmaya çalışıyorum. " WindowsBarsPerChart() ve belki de WindowsFirstVisibleBar()"dan bahsettiniz. Çubukların ekranın sol tarafından sağa doğru nasıl hareket ettirileceğini bulmakta hala zorlanıyorum. Ama düzeni beğendim! Bunun nasıl yapılacağına dair herhangi bir ipucu var mı?

Merhaba BayDog,

Basit.

1. Bir çubuktan diğerine olan zaman mesafesini alın. Bunu, mevcut bar süresini önceki bar süresiyle çıkararak veya periyodu 60 saniye ile çarparak bulabiliriz, ikincisini seçin, çünkü Pazartesi günü zaman boşluğu var.

 datetime Bar_Time_Gap; // or integer type

Bar_Time_Gap = Time [ 0 ] - Time [ 1 ]; // or Time [7] - Time [8] or whatever
Bar_Time_Gap = Period ()* 60 ;

2. WindowsFirstVisibleBar() en soldaki çubuktur. Bu çubuktan çizmeye başlayın veya daha iyisi, o çubuğun solundan, örneğin 5 çubuktan sola çizmeye başlayın. WindowsFirstVisibleBar()' ın dönüşünün 20 olduğunu söyleyin. Bu, en soldaki çubuğun çubuk [20] olduğu anlamına gelir, ardından çubuk [25]'ten çizime başlayın. Ben aslında [Barlar - 1]'den çiziyorum.

 datetime Start;

Start = Time [ WindowFirstVisibleBar () + 5 ];                   //which is the same ...
Start = Time [ WindowFirstVisibleBar ()] - 5 * Bar_Time_Gap;   //... with this one

3. WindowsBarsPerChart(), grafikteki çubukların sayısıdır . WindowsBarsPerChart()' ın dönüşünün 35 ve WindowsFirstVisibleBar()'ın 20 olduğunu söyleyin. Yani [0] çubuğundan başlayarak sağ tarafta yaklaşık 15 çubuk boş alan var. Bu dikdörtgenin sonunu o boş alanın en sağındaki çubuğa çizin ya da daha iyisi, o çubuğun n sağından, diyelim ki 5 çubuk sağa doğru çizmeye başlayın .

 datetime End;
int Right_Bar = WindowBarsPerChart () - WindowFirstVisibleBar () + 5 ;

End = Time[ 0 ] + Right_Bar * Bar_Time_Gap;

Yeni çubuk geldiğinde bu sağ çubuk sola hareket edecek, bu yüzden dikdörtgenin ucu görünecek ve onu tekrar çizmemiz gerekiyor.

Umarım burada hata yapmıyorum, çünkü bu kadar hızlı yazdım.

:D