MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 578

 

Çevrimdışı bir programınız var mı?

 
Baykuşun asılı olduğu zamandan farklı bir zaman diliminden alt göstergeleri nasıl elde edeceğimi söyleyebilir misiniz?
 
Galim_V :
Baykuşun asılı olduğu zamandan farklı bir zaman diliminden alt göstergeleri nasıl elde edeceğimi söyleyebilir misiniz?

1. Kuşu neden astınız? Yazık değil mi?

2. Yardım en az bir kez açıldı mı? Herhangi bir zaman diliminden bir Expert Advisor'da gösterge verilerinin alınması sorun değildir, çünkü gösterge verilerini elde etmeye yönelik fonksiyonların ilk iki parametresi, değerlerin alınması gereken grafiğin sembolünü ve periyodunu belirtmek için kullanılır.

Sonuçta, kodu düzenleyiciye yazdığınızda bile, işlevin biçimsel değişkenlerinin listesi size çok müdahaleci bir şekilde açılır - ve orada araç ipucunda görebilirsiniz - sembol ve zaman çerçevesi. Onlara dikkat etmemiş olman garip.

 
Artyom Trishkin :

Çevrimdışı bir programınız var mı?

Numara.

 
PolarSeaman :

Numara.

O zaman neden gereksiz yere sürekli bir yenileme?

Zamana ihtiyacın var mı? Zaman, ya son işareti alabilir: TimeCurrent() veya son yerel saat: TimeLocal()

Hafta sonu son tik saatini alırsanız, zamanlayıcı burada yardımcı olmaz - zaman Cuma'nın son tik veya son iş gününün son tik olur. Ve TimeLocal() size sunucu zamanını vermez - bir ofset ile yeniden hesaplamanız gerekir.

Ancak, sonunda tam olarak ne elde etmek istediğinizi bilmiyorum.

 
Artyom Trishkin :

1. Kuşu neden astınız? Yazık değil mi?

2. Yardım en az bir kez açıldı mı? Herhangi bir zaman diliminden bir Expert Advisor'da gösterge verilerinin alınması sorun değildir, çünkü gösterge verilerini elde etmeye yönelik fonksiyonların ilk iki parametresi, değerlerin alınması gereken grafiğin sembolünü ve periyodunu belirtmek için kullanılır.

Sonuçta, kodu düzenleyiciye yazdığınızda bile, işlevin biçimsel değişkenlerinin listesi size çok müdahaleci bir şekilde açılır - ve orada araç ipucunda görebilirsiniz - sembol ve zaman çerçevesi. Onlara dikkat etmemiş olman garip.

2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1: Yuvarlama 44.53781512605145 45.0 Bu, "normal" moddaki stokastik veridir. yani şöyle:

2=iStochastic(NULL,0,K,D,yavaşlama,Ortalama_yöntem,fiyat_alanı,MODE_MAIN,2);

burada soruyorum M5 2=iStochastic(NULL,5,K,D,slowing,Average_method,price_field,MODE_MAIN,2);

2018.07.04 22:23:05.680 alıyorum 2016.11.10 13:00:00 Arap01 EURUSD,H1: Yuvarlak 0.0 0.0



 
Artyom Trishkin :

Ancak, sonunda tam olarak ne elde etmek istediğinizi bilmiyorum.

Uyarı, bar kapanmadan iki saniye önce. Hafta sonları çalışmayacaktır.

 
PolarSeaman :

Bu yüzden bar kapanmadan iki saniye önce işaretsiz bir uyarıya ihtiyacım var.

Bunu yapmak kolay değil, daha doğru bir zamanlayıcı (en az 500 ms) çalıştırmanız ve önce yerel saat ile sunucu saatini senkronize etmeniz gerekiyor.
İşte size zaten söyledim:

kene varış anında, TimeCurrent()-TimeLocal() farkını hesaplarız
(bu, yerel ve sunucu saatini senkronize etmek için bir kez yapılır)

- bu, aracıya göre ofsettir, bu ofset gelecekte değişirse, zamanı yeniden hesaplamanız gerekir;
- danışmanın başlangıcında, (veya   çubuğun görünüşü   D1) ofseti dikkate alarak gerekli tüm süreleri yerel saatte yeniden hesaplıyoruz;
- zamanlayıcıda "saydığımız" şeyi bekliyoruz, aynı anda senkronizasyonu, komisyoncu ile iletişim kaybını, yerel okların çevirisini kontrol ediyoruz.

+/- 1 saniye yakalayabilirsin
 
Taras Slobodyanik :

Bunu yapmak kolay değil, daha doğru bir zamanlayıcı (en az 500 ms) çalıştırmanız ve önce yerel saat ile sunucu saatini senkronize etmeniz gerekiyor.
İşte size zaten söyledim:

+/- 1 saniye yakalayabilirsin

Teşekkür ederim. M5 çubuğunun kapanmasına kadar geçen süre saniye cinsinden nasıl yapılır. Şimdi H1'i görüntüler.

 #property strict
#property indicator_chart_window
//--- input parameters
#define MILLISEC_TIMER_INTERVAL         500 
int             timeOffset;
datetime        ServerLocalOffset;
datetime        prevTime,myTime,localtime;
bool            newBar = false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer (MILLISEC_TIMER_INTERVAL);
   
   datetime srvtime,tmpOffset;
   RefreshRates ();
   srvtime = TimeCurrent ();
   // Modified
   localtime = TimeLocal ()+ TimeGMTOffset ();
   if ( TimeHour (srvtime)> TimeHour (localtime)){
       // Server Time is still ahead of us
       int newOffset = TimeHour (srvtime)- TimeHour (localtime);
      ServerLocalOffset = (newOffset* 60 * 60 );
   } else if ( TimeHour (srvtime)< TimeHour (localtime)){
       // Server Time is Behind us
       int newOffset = TimeHour (localtime)- TimeHour (srvtime);
      ServerLocalOffset = (newOffset* 60 * 60 );
   } else {
       // No modification required
      ServerLocalOffset = srvtime;
   }
   localtime = TimeLocal ()-ServerLocalOffset;
   
   tmpOffset = TimeSeconds (srvtime) - TimeSeconds (localtime);
   if (tmpOffset < 30 && tmpOffset >= 0 ){
      timeOffset = TimeSeconds (srvtime) - TimeSeconds (localtime);
   }
   return ( INIT_SUCCEEDED );
  }
  
void OnDeinit ( const int reason)
  {
   EventKillTimer ();
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---
datetime sec;
   datetime localtime;
   localtime = TimeLocal ()+( TimeGMTOffset ()+( 60 * 60 ));
 sec= Time [ 0 ]-localtime-timeOffset;
 if (sec<= 2 ){ Alert ( "время откр. бара " , Time [ 0 ]);}
       Comment ( TimeToStr (sec, TIME_SECONDS ));
  }
//+------------------------------------------------------------------+
 
Mevcut periyotta bar kapanana kadar saniyeleri nasıl sayacağımı asla anlamadım. Yardım.