Çoklu para birimi danışmanı hakkında soru - sayfa 7

 
TAMAM! Şimdi anlayacağım. Ancak test eden kişi, Expert Advisor'ın hangi enstrümana bağlı olduğunu bilmiyor.
 

datetime iTime (dize sembolü, int zaman çerçevesi, int shift)

Karşılık gelen grafikten (sembol, zaman çerçevesi) shift parametresi tarafından belirtilen çubuğun açılış zamanının değerini döndürür. Hata durumunda işlev 0 döndürür. Hata hakkında ek bilgi almak için GetLastError() işlevini çağırın. Geçerli çizelge için, her bir çubuğun açılış saati ile ilgili bilgiler önceden tanımlanmış Time[] dizisindedir. Parametreler: sembol - Aletin sembolik adı. NULL, geçerli karakter anlamına gelir. zaman çerçevesi - Dönem. Grafik dönemlerinden biri olabilir. 0, mevcut grafiğin periyodu anlamına gelir. shift - Zaman serilerinden alınan değerin indeksi (geçerli çubuğa göre belirtilen sayıda periyot önce kaydırma).

-------------------------------------------------- -------------------------------------------------- -----------------

Anladığım kadarıyla, burada önce örneğin şunu sormalısınız:

statik int prevtimeEURUSD = 0;

sonra ihtiyacımız olan çiftin koduna girin

 double TTTTTT = iTime ( " EURUSD " , 60 , 0 ) ; 
if ( TTTTTT == prevtimeEURUSD ) 
       return ( 0 ) ;
   prevtimeEURUSD = TTTTTT
 
rid :

...

Anladığım kadarıyla burada ilk önce şunu sormanız gerekiyor, örneğin:

statik int prevtimeEURUSD = 0;

sonra ihtiyacımız olan çiftin koduna girin

 double TTTTTT = iTime ( " EURUSD " , 60 , 0 ) ; 
if ( TTTTTT == prevtimeEURUSD ) 
       return ( 0 ) ;
   prevtimeEURUSD = TTTTTT

Evet. ProtoType'ta (Rosh) nasıl yapıldığını görün. Bir bağlantı eklemeye çalıştım, bir şey işe yaramadı (CodeBase'de arayarak bulabilirsiniz). isNewBar() işlevinde bunun için iki boyutlu bir dizi oluşturulur - sipariş büyük bir güçtür!
 
,teşekkür ederim! Bu uzmana sahibim. Şimdi. Bir bakacağım.
 
Sevgili Klerk!
Çok para birimi göstergesi yapmak istiyorum, örneğin iki çift. İlk olarak, bu çiftlerin alıntılarının tek bir forma getirilmesi gerekir (örneğin, bunları bir yüzde değişimine dönüştürün, yani (Kapat[i]-Kapat[i+1])/%100 - bu doğru mu?), ve sonra, aralarındaki farkın dinamiklerini görmek istersem, bunları göstergeye girin. Nasıl yapılır???
 

Farkın dinamiklerine ihtiyacınız varsa, yüzdelere dönüştürmek gerekli değildir, bunu şu şekilde yapabilirsiniz:

 int start (){
 
 double Point1 = MarketInfo ( " GBPUSD " , MODE_POINT ) ;
 double Point2 = MarketInfo ( " USDJPY " , MODE_POINT ) ;
 
 
 MacdBuffer [ 0 ] = iMACD ( " GBPUSD " , 0 , 12 , 26 , 9 , PRICE_CLOSE , MODE_MAIN , 0 ) / Point1
              + iMACD ( " USDJPY " , 0 , 12 , 26 , 9 , PRICE_CLOSE , MODE_MAIN , 0 ) / Point2 ;
     Comment ( " MACD " + MacdBuffer [ 0 ]) ;         
 
return ( 0 ) ;
}
 
Çok teşekkür ederim Xeon!!!! Deneyeceğim!
 
Xeon! Baştan ihtiyacın olanı düşürmek zor değilse... Yoksa ben hala çaydanlık !!!
 
nido :
Xeon! Baştan ihtiyacın olanı düşürmek zor değilse... Yoksa ben hala çaydanlık !!!


Aslında, bu birkaç dakika içinde bir test komut dosyasında yazılmıştır (kod bloklarını kontrol etmek için)

Senin için bir gösterge çizmem gerekiyordu :-)

 //+------------------------------------------------------------------+
//|                                                    MultyMACD.mq4 |
//|                                           Copyright © 2007, xeon |
//|                                                       xeon@nm.ru |
//+------------------------------------------------------------------+
#property copyright " Copyright © 2007, xeon "
#property link      " xeon@nm.ru "
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1  2
//---- buffers
double MacdBuffer [] ;
double SignalBuffer [] ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init (){
   IndicatorBuffers ( 2 ) ;
   SetIndexStyle ( 0 , DRAW_HISTOGRAM ) ;
   SetIndexBuffer ( 0 , MacdBuffer ) ;
   SetIndexStyle ( 1 , DRAW_LINE ) ;
   SetIndexBuffer ( 1 , SignalBuffer ) ;
   SetIndexEmptyValue ( 0 , 0.0 ) ;
   SetIndexEmptyValue ( 1 , 0.0 ) ;
   SetIndexLabel ( 0 , " MACD " ) ;
   SetIndexLabel ( 1 , " Signal " ) ;
   IndicatorShortName ( " MultyMACD " ) ;
     
 
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit ()
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start (){
 
   if ( IsOptimization () == true || IsTesting () == true ){ Comment ( " В тестере будет ошибка деления на 0. описано - в справке по MarketInfo " ) ; return ( 0 ) ; }
//----
 double Point1 = MarketInfo ( " GBPUSD " , MODE_POINT ) ;
 double Point2 = MarketInfo ( " USDJPY " , MODE_POINT ) ;
 
 
 MacdBuffer [ 0 ] = iMACD ( " GBPUSD " , 0 , 12 , 26 , 9 , PRICE_CLOSE , MODE_MAIN , 0 ) / Point1
              + iMACD ( " USDJPY " , 0 , 12 , 26 , 9 , PRICE_CLOSE , MODE_MAIN , 0 ) / Point2 ;
 
 for ( int i = 9 ; i >= 0 ; i -- ){
     SignalBuffer [ 0 ] = iMAOnArray ( MacdBuffer , 0 , 9 , 0 , MODE_SMA , i ) ;
 }
  
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+

umarım anlarsın

ps, göstergenin yalnızca çevrimiçi çalışacağını unutmayın, geçmiş üzerinde bir döngü oluşturmanız gerekecek

 
xeon :
nido :
Xeon! Baştan ihtiyacın olanı düşürmek zor değilse... Yoksa ben hala çaydanlık !!!


Aslında, bu birkaç dakika içinde bir test komut dosyasında yazılmıştır (kod bloklarını kontrol etmek için)

Senin için bir gösterge çizmem gerekiyordu :-)

 //+------------------------------------------------------------------+
//|                                                    MultyMACD.mq4 |
//|                                           Copyright © 2007, xeon |
//|                                                       xeon@nm.ru |
//+------------------------------------------------------------------+
#property copyright " Copyright © 2007, xeon "
#property link      " xeon@nm.ru "
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1  2
//---- buffers
double MacdBuffer [] ;
double SignalBuffer [] ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init (){
   IndicatorBuffers ( 2 ) ;
   SetIndexStyle ( 0 , DRAW_HISTOGRAM ) ;
   SetIndexBuffer ( 0 , MacdBuffer ) ;
   SetIndexStyle ( 1 , DRAW_LINE ) ;
   SetIndexBuffer ( 1 , SignalBuffer ) ;
   SetIndexEmptyValue ( 0 , 0.0 ) ;
   SetIndexEmptyValue ( 1 , 0.0 ) ;
   SetIndexLabel ( 0 , " MACD " ) ;
   SetIndexLabel ( 1 , " Signal " ) ;
   IndicatorShortName ( " MultyMACD " ) ;
     
 
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit ()
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start (){
 
   if ( IsOptimization () == true || IsTesting () == true ){ Comment ( " В тестере будет ошибка деления на 0. описано - в справке по MarketInfo " ) ; return ( 0 ) ; }
//----
 double Point1 = MarketInfo ( " GBPUSD " , MODE_POINT ) ;
 double Point2 = MarketInfo ( " USDJPY " , MODE_POINT ) ;
 
 
 MacdBuffer [ 0 ] = iMACD ( " GBPUSD " , 0 , 12 , 26 , 9 , PRICE_CLOSE , MODE_MAIN , 0 ) / Point1
              + iMACD ( " USDJPY " , 0 , 12 , 26 , 9 , PRICE_CLOSE , MODE_MAIN , 0 ) / Point2 ;
 
 for ( int i = 9 ; i >= 0 ; i -- ){
     SignalBuffer [ 0 ] = iMAOnArray ( MacdBuffer , 0 , 9 , 0 , MODE_SMA , i ) ;
 }
  
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+

umarım anlarsın

ps, göstergenin yalnızca çevrimiçi çalışacağını unutmayın, geçmişte bir döngü oluşturmanız gerekecek

TEŞEKKÜRLER Xeon!!! Bir danışman fikri hakkında size kişisel olarak yazabilir miyim? E-posta adresim: ni_do@mail.ru
Neden: