Grafik nesneleri oluşturmayı nasıl öğrenebilirim? MQL4. - sayfa 2

 
barabashkakvn :
Puanlarınızın saatini ve tarihini biliyorsanız, yalnızca bool TrendCreate() öğesini çağırmanız gerekir.

Tavsiye için teşekkürler. Her şeyin daha kolay olduğu ortaya çıktı.

Böyle mi yaptı:

 #property strict
#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   long    chart_ID= 0 ;         // ID графика
   string name= "TrendLine" ;   // имя линии
   int     sub_window= 0 ;       // номер подокна
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим трендовую линию по заданным координатам
   if (! ObjectCreate (chart_ID,name, OBJ_TREND ,sub_window,Time[ 41 ], 1.0656 ,Time[ 65 ], 1.0494 ))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать линию тренда! Код ошибки = " , GetLastError ());
       return ;
     }
   
  }
//+------------------------------------------------------------------+

PS Anlayamadığım bir şey, örnekte neden tam olarak bu sayıların seçildiği:

InpDate1= 35 ;        
InpPrice1= 60 ;        
InpDate2= 65 ;        
InpPrice2= 40 ; 

Onlardan, trend çizgisi aralığın ortasında bir yere yerleştirilir.

 
Şimdi sıradaki görev, sağdaki çizgiye nasıl devam edileceğini çözmek ve EA'da çizginin değerini almak mı?
 
forexman77 :

...

Onlardan, trend çizgisi aralığın ortasında bir yere yerleştirilir.

Yani bu sadece ana görevi OBJ_TREND nesnesinin oluşturulmasını ve çalışmasını göstermek olan bir komut dosyasıdır. Ve rakamlar netlik için alınmıştır.
 
forexman77 :
Şimdi sıradaki görev, sağdaki çizgiye nasıl devam edileceğini çözmek ve EA'da çizginin değerini almak mı?

Her şey komut dosyası kodunda:

 //+------------------------------------------------------------------+
//| Создает линию тренда по заданным координатам                     |
//+------------------------------------------------------------------+
bool TrendCreate( const long             chart_ID= 0 ,         // ID графика
.
.
.
//--- включим (true) или отключим (false) режим продолжения отображения линии влево
   ObjectSetInteger (chart_ID,name, OBJPROP_RAY_LEFT ,ray_left);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger (chart_ID,name, OBJPROP_RAY_RIGHT ,ray_right);
.
.
.
 
barabashkakvn :

Her şey komut dosyası kodunda:

1. Test cihazından arandığında fırsatlar açılır. Her yerde optimizasyon harcarsam sıfırlar. İşlemin optimizasyonundan herhangi bir çalıştırma başlatırım. Nasıl olunur?

2. Bir anlaşma olursa (her anlaşmada) satırın kaydedildiğinden, değilse silindiğinden nasıl emin olabilirim?

   long    chart_ID= 0 ;         // ID графика
   string name= "TrendLine" ;   // имя линии
   int     sub_window= 0 ;       // номер подокна
   ObjectDelete (chart_ID,name);
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим трендовую линию по заданным координатам
   if (! ObjectCreate (chart_ID,name, OBJ_TREND ,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать линию тренда! Код ошибки = " , GetLastError ());
       return ( 0 );
     }
    ObjectSet( "TrendLine" ,OBJPROP_TIME1,Time[minbar]);
    ObjectSet( "TrendLine" ,OBJPROP_PRICE1,Low[minbar]);
    ObjectSet( "TrendLine" ,OBJPROP_TIME2,Time[IPMIN]);
    ObjectSet( "TrendLine" ,OBJPROP_PRICE2,Low[IPMIN]);

   if (IPMIN!= 0 ){ double uroven= ObjectGetValueByTime (chart_ID,name,Time[ 1 ],sub_window);}
   
}
Print ( "uroven=" ,uroven);
if (Time[ 0 ] > b && Close[ 1 ] < uroven){Opn_B= true ;}
 
İşlemlerin sizin tarafınızdan kontrol edilmesi gerekir. Ancak her anlaşmanın kendi satırına sahip olması için, oluştururken her satıra benzersiz bir ad atamanız gerekir.
 
barabashkakvn :
İşlemlerin sizin tarafınızdan kontrol edilmesi gerekir. Ancak her anlaşmanın kendi satırına sahip olması için, oluştururken her satıra benzersiz bir ad atamanız gerekir.
Nasıl? Bir örnek alabilir miyim?
 
forexman77 :
Nasıl? Bir örnek alabilir miyim?
Örnekleri olan yardım etsin lütfen.
 

Test sırasında grafik nesneler

Testleri görselleştirirken, EA gerçek bir çizelge ile etkileşime girer. Görselleştirme olmadan normal testler sırasında EA, çizilmemiş bir "sanal" grafikle çalışır, bu durumda nüanslar mümkündür. Test cihazı optimizasyon modunda çalışırken grafik nesnelerle çalışma desteklenmez.

Çalışmak için iki gün, ancak optimizasyonun gerçekleştirilemeyeceği ortaya çıktı.

Bir gösterge yapmak için merak ediyorum? Expert Advisor'daki satırın değerini bunun üzerinden alabilecek miyim?

Kim ne diyecek. Belki birileri bu konuyu zaten incelemiştir?

 
forexman77 :

...

Bir gösterge yapmak için merak ediyorum? Expert Advisor'daki satırın değerini bunun üzerinden alabilecek miyim?

...

Gösterge grafik nesneler oluşturur ve ardından parametrelerini alırsa, hayır.

Ancak yine de, bir gösterge kullanarak her şeyi çözmek daha kolaydır. Göstergede hesaplamalar yapılır ve sonuçları gösterge arabellekleri aracılığıyla görüntülenir.

Ayrıca bir alternatif var. Satırlar yerine, line parametreleriyle global değişkenler oluşturun, ancak GetValueByShift() işlevi çalışmaz, analogunu yazmanız gerekir.