MQL5 Kullanan Hisse Osilatörü - sayfa 2

 
DV2010 : ama neden   Değişen Değerler (kontrol edildi!) Gösterge dizisine yazılmasına rağmen değişen Özkaynak değeri Göstergede görüntülenmiyor mu?

Orada hiçbir şey yazılmaz, döngü çağrılmaz. Kendiniz kontrol edin.
 

İşin aslı, döngü tüm kenelerde çağrılır!

İşte, kendiniz görün! Çıktıyı döngü gövdesine özel olarak yerleştirdi:

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime & time[],
                 const double & open[],
                 const double & high[],
                 const double & low[],
                 const double & close[],
                 const long & tick_volume[],
                 const long & volume[],
                 const int & spread[]){
   for ( int i = prev_calculated; i <= rates_total- 1 ; ++i){
       Print ( "Equity - OnCalculate - Cycle: prev_calculated=" ,prev_calculated, "   rates_total=" ,rates_total);
       Print ( "Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=" , AccountInfoDouble ( ACCOUNT_EQUITY ));
      Values[i] = AccountInfoDouble ( ACCOUNT_EQUITY );
   }
   return rates_total;
}

Ve işte nihai sonuç:

 2011.01 . 20 13 : 58 : 56      Core 1   OnTester result 0
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 23 : 59 : 59    order performed sell 0.15 at 1.33829 [ # 13 sell 0.15 EURUSD at 1.33829 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 23 : 59 : 59    deal performed [ # 13 sell 0.15 EURUSD at 1.33829 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 23 : 59 : 59    deal # 13 sell 0.15 EURUSD at 1.33829 done (based on order # 13 )
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 23 : 59 : 59    position closed due end of test at 1.33829 [buy 0.15 EURUSD 1.33593 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 22 : 00 : 00    Equity - OnCalculate - Cycle: AccountInfoDouble ( ACCOUNT_EQUITY )= 9949.299999999999
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 22 : 00 : 00    Equity - OnCalculate - Cycle: prev_calculated= 6418    rates_total= 6419
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    CTrade::PositionOpen: instant buy 0.15 EURUSD at 1.33593 [done at 0.00000 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    order performed buy 0.15 at 1.33593 [ # 12 buy 0.15 EURUSD at 1.33593 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    deal performed [ # 12 buy 0.15 EURUSD at 1.33593 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    deal # 12 buy 0.15 EURUSD at 1.33593 done (based on order # 12 )
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    instant buy 0.15 EURUSD at 1.33593 ( 1.33577 / 1.33593 / 1.33577 )
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    CTrade::PositionClose: instant buy 0.15 EURUSD at 1.33593 [done at 0.00000 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    order performed buy 0.15 at 1.33593 [ # 11 buy 0.15 EURUSD at 1.33593 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    deal performed [ # 11 buy 0.15 EURUSD at 1.33593 ]
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    deal # 11 buy 0.15 EURUSD at 1.33593 done (based on order # 11 )
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    instant buy 0.15 EURUSD at 1.33593 ( 1.33577 / 1.33593 / 1.33577 )
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    Equity - OnCalculate - Cycle: AccountInfoDouble ( ACCOUNT_EQUITY )= 9929.65
2011.01 . 20 13 : 58 : 56      Core 1    2011.01 . 14 21 : 00 : 00    Equity - OnCalculate - Cycle: prev_calculated= 6417    rates_total= 6418
 
DV2010 :

İşin aslı, döngü tüm kenelerde çağrılır!

İşte, kendiniz görün! Çıktıyı döngü gövdesine özel olarak yerleştirdi:

Ve işte nihai sonuç:

Peki ya test? Grafikteki göstergeyi çalıştırın ve her şeyi göreceksiniz. Düzenlemelerimi eklemeyi unutmayın.
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 

Tarihte test edilen süre içinde Özkaynaktaki değişimi görmem gerekmesine rağmen burada test ediyorum.

Düzenlemeleriniz yapıldı, Gösterge hem test modunda hem de sürükleyip yeni bir grafiğe bırakılarak başlatıldı.

Gösterge hem mevcut tekliflere kadar olan tüm dönemde hem de herhangi bir zaman diliminde çalışır (veya "her şeyi göreceksin" tam olarak ne anlama gelir?)

Ancak, günlük çıktısının değiştiğini göstermesine rağmen Özkaynak değeri sabit kalır.

(Aksi takdirde, Print aracılığıyla değilse, döngünün çalışıp çalışmadığını başka nasıl anlayabilirsiniz?)

...Her ihtimale karşı, eklenmiş bir göstergeye sahip bir Uzman Danışmanın "iskeleti":

 #property copyright "Copyright 2010, Pavlov Sergei"
#property link       ""
#property version   "1.00"

#include <\..\Experts\_My\Classes\ClassExpert\ClassExpert.mqh>
ClassExpert Expert1;

int Equity1= 0 ;
void OnInit (){
   Equity1 = iCustom ( NULL , 0 , "Equity" ,
                           5 ,           // Период
                           0 ,           // Смещение
                           MODE_SMA ,   // Метод рассчета
                           PRICE_CLOSE // считаем по ценам закрытия)
                          );
   Expert1.Init();
}
void OnTick (){
   Expert1. OnTick ();
}
void OnDeinit ( const int reason){
   Expert1.Deinit();
}
 
DV2010 :

Tarihte test edilen süre içinde Özkaynaktaki değişimi görmem gerekmesine rağmen burada test ediyorum.

Düzenlemeleriniz yapıldı, Gösterge hem test modunda hem de sürükleyip yeni bir grafiğe bırakılarak başlatıldı.

Ve gösterge hem mevcut tekliflere kadar olan tüm süre boyunca hem de herhangi bir zaman diliminde çalışır (veya “her şeyi göreceksin” tam olarak ne anlama geliyor?)

Ancak, günlük çıktısının değiştiğini göstermesine rağmen Özkaynak değeri sabit kalır.

(Aksi takdirde, Print aracılığıyla değilse, döngünün çalışıp çalışmadığını başka nasıl anlayabilirsiniz?)

...Her ihtimale karşı, eklenmiş bir göstergeye sahip bir Uzman Danışmanın "iskeleti":

Expert Advisor'a yanlış indikatör eklemenin bir anlamı yoktur, daha iyi hale getirmez. Sürümümü henüz kontrol etmediniz mi?
 

Belki yanılıyorum ama test tamamlandıktan sonra göstergenin grafikteki görüntüsünü test sırasında yapılan hesaplamalarla karşılaştırmıyor musunuz?

Gerçek şu ki, test cihazından özel bir göstergenin sonuçları (hesaplanan diziler) hiçbir şekilde grafiğe aktarılmaz, ancak belirtilen gösterge grafikte yeni bir hesaplama için basitçe başlatılır.

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 

Bu göstergeyi bir dakika tablosunda çalıştırın ( açık bir pozisyon varlığında) ve 10-15 dakika içinde benzer bir resim elde edeceksiniz.


kod:

 //+------------------------------------------------------------------+
//|                                             Equity_Indicator.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1   "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1   1
//--- indicator buffers
double Values[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Values, INDICATOR_DATA );
   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN , 100 );
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
   ArraySetAsSeries (Values,false);
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {


   Print ( "prev_calculated=" ,prev_calculated, "   rates_total=" ,rates_total);
   int limit=prev_calculated;
   if (limit> 0 ) limit--;

//---Блок заполнения Индикатора и журнала сообщений значениями
   for ( int i=limit; i<rates_total;++i)
     {
      Values[i]= AccountInfoDouble ( ACCOUNT_EQUITY );
     }
   return rates_total;
  }
//+------------------------------------------------------------------+
 

Rosh , sana göstergemde neyin yanlış olduğunu zaten sordum ve tam olarak nasıl kontrol ettiğimi yazdım.   seçiminiz dahil. Ben de bunu size mümkün olduğunca detaylı bir şekilde açıklamaya çalıştım, siz ise sadece kısaca “döngü çalışmıyor” ve “her şeyi kendiniz göreceksiniz” yazdınız.

... Renat , test tamamlandıktan sonra göstergenin grafikte gösterilmesi, anladığım kadarıyla, test sırasında yapılan hesaplamalar ve gösterge dizisinin doldurulması temelinde gerçekleşir. Ancak, test cihazından alınan sonuçların, test cihazından gelen özel gösterge tablosuna aktarılmaması ne anlama gelir?

Öyleyse neden bunlara ihtiyaç duyuluyor ve dizi atamasını koddan çıkardıktan hemen sonra gösterge çizgisi neden kayboluyor (sabit bir yatay olsa da, ancak kayboluyor)?

Bana öyle geldi ki, OnCalculated ile doldurulmuş gösterge değerleri dizisi arasındaki yazışmalar ve grafikteki gösterge değerleri nettir, aksi takdirde Gösterge değerleri nasıl başlatılır?

Anlaması zor… Önemsiz bir iş gibi görünüyor, ama birkaç gündür bununla mücadele ediyorum ve tarihte nasıl farklı bir şekilde çözülebileceğine ve olup olmayacağına dair ipucu bile verebilecek birini bulmak zor. hiç çözülmez.

Bir kez daha anladığım kadarıyla ben (yanlışsam düzeltin, zorlaştırmıyorsa).

1.      Test cihazında test süresini belirliyorum ve göstergem eklenmiş olarak bir Uzman Danışman seçiyorum.

2.      OnCalculated'a ilk çağrı önceki _ hesaplanan parametrelerle çağrılır =0 ve oranlar _ toplam = testin başlangıcına karşılık gelen tik (çubuk) sayısı. Bu süre içerisinde bakiyenin değeri başlangıç ve sabit seviyede kalır.

3.      Test süresi içinde Çubuklarla Hesaplanan sonraki çağrılar, her bir çubuk için gerçekleşir ve burada değişen verilerle gösterge değerleri dizisini başlatabilirsiniz (örneğin, yazdığım gibi yaptığım fiyatı çoğaltın, ancak o zaman neden Hisse senedi değerlerini değiştiren fiyatları değiştirmek yerine başlatamıyorum ?)

Ve genel olarak, işte buradasınız - bir profesyonel. Bu, umarım, çözülmekte olan basit bir görev midir, yoksa MetaTrader hala büyüyüp böyle “yüksekliklere” mi ulaşıyor? :)))

Bu sorunu çözmek için basit vizyonumu önerdim ama işe yaramıyor.

O zaman nasıl uygulanabilir - geriye dönük test sonuçlarına dayalı fiyat tablosunun altındaki Öz Sermaye tablosu?

 
Size bir şeye cevap vereceğim, görselleştirme modu görünene kadar sorununuzu çözmek o kadar kolay değil. Test sırasında öz sermaye verilerini bir dosyaya yazmak olan bir çözüm var. daha sonra bu dosyadaki verileri gösterge arabelleğine yazın, böylece bir öz sermaye grafiği oluşturun.
 

Rosh, çevrimiçi sürüm zaten yayınlandı, ancak öncelikle Tarih ile çalışan bir kişi olarak, geçmiş verilere dayalı çalışan bir sürüme ihtiyacım var. Ve buradaki asıl zorluğun ne olabileceğini anlamak benim için hala zor.

Daha ılımlı sayıda işlem nedeniyle (Al ve Sat'a tıklamak için zar zor zamanı olan fazladan bir soyucu değilse), çevrimiçi denge tablosu zaten bir tüccar tarafından sunulur.

Aslında, Hisse Senedi dinamikleri uzun bir tarih boyunca yüzlerce hatta binlerce işlemle kritik hale gelir, ancak test cihazındaki grafikte bu dinamiklerin fiyat dinamikleri ile basit bir karşılaştırması prensipte sağlamaz (tabii ki, MetaQuote, programcılar için ana şeyin, bireysel zayıf ve güçlü pozisyon dizilerini analiz etmeden hazır Uzman Danışmanların hızlı bir şekilde taranması olduğunu düşünür).