RefreshRates() işlevi neyi günceller? - sayfa 3

 
Artyom Trishkin :

iXXXXX işlevlerindeki hatalardan şüpheleniyorsanız, SymbolInfoXXXX işlevlerini kullanın.

iXXXXX'i SymbolInfoXXXX ile değiştirmenin bir örneği vardır.

 
Mikhail Nazarenko :

Kodum benzer. OnTick'te Hata

gerekli

Mevcut M5 zaman dilimine sahipsek, M5'i H1 ve M1 ile karşılaştırmamız gerekir.

Mevcut zaman çerçevesi, yani M5, benim için doğru bir şekilde görüntülendi. Sorun H1 ve M1 ile oldu.

Gerçek EURCHF M5'i Alpari'de kontrol ettim ama Print yerine her seviyede yatay segmentler çizdim.

Evet, ilk başta H1'i böyle koydum ama sonra karşılaştırmanın çok nadir olacağına karar verdim. Bu yüzden M5 olarak değiştirdim.

Micheal Nazarenko :

iXXXXX'i SymbolInfoXXXX ile değiştirmenin bir örneği vardır.

Artyom bir hata yaptı...

iClose yerine kullanabilirsiniz

 int    CopyClose ( 
   string            symbol_name,       // имя символа 
   ENUM_TIMEFRAMES   timeframe,         // период 
   int               start_pos,         // откуда начнем  
   int               count,             // сколько копируем 
   double            close_array[]       // массив для копирования цен закрытия 
   );

aşağı yukarı böyle

 double close_M5[];
     CopyClose ( _Symbol , PERIOD_M5 , 1 , 1 , close_M5);

Böylece sihirli değneğin bir hareketi ile birkaç çubuğun değerlerini alabilirsiniz.

İşlev doğru veya yanlış döndürür, ancak bu örnekte kontrol etmedim. Kendiniz tahmin edebilirsiniz...

 
Alexey Viktorov :
Evet, ilk başta H1'i böyle koydum ama sonra karşılaştırmanın çok nadir olacağına karar verdim. Bu yüzden M5 olarak değiştirdim.

Kodunuzu oraya ekledim ve yukarıda yayınladım. Sürümünüzü eve koydum, sonuç aynı. Hemen hemen her M5 mumunda bir uyumsuzluk var. Sonuçlarınız neler?

 
Mikhail Nazarenko :

Kodunuzu oraya ekledim ve yukarıda yayınladım. Sürümünüzü eve koydum, sonuç aynı. Hemen hemen her M5 mumunda bir uyumsuzluk var. Sonuçlarınız neler?

Burada değiştirmeniz gerekiyor

 if (NewBar( PERIOD_M5 ))

üzerinde

 if (NewBar( PERIOD_H1 ))
 
Alexey Viktorov :

Burada değiştirmeniz gerekiyor

üzerinde

Hayır, _Period daha iyidir. H1'den sıfır teklifin görünmesini zorla bekleyeceğimizden ve cari dönem düzenli olarak güncellenmektedir . Verilerin saat güncellendiğinde değil, saatin ilk saniyelerinde alınması gerekir.

Bir örnek eklemek ve kontrol etmek istiyorum
double close_H1,close_M5,
       close_M1;

/*******************Expert initialization function*******************/
int OnInit()
 {
  return(INIT_SUCCEEDED);
 }/*******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(NewBar(PERIOD_M5))
   {
    close_H1 = iClose(_Symbol, PERIOD_H1, 1);
    close_M1 = iClose(_Symbol, PERIOD_M1, 1);
    close_M5 = Close[1];
    
    
    if(close_H1 != close_M5)
      Print(close_H1, " H1 != M5 ", close_M5);
    if(close_M1 != close_M5)
      Print(close_M1, " M1 != M5 ", close_M5);
    
    double ARRAY_M1[];
    CopyClose(_Symbol, PERIOD_M1, 1, 1, ARRAY_M1);
    double ARRAY_H1[];
    CopyClose(_Symbol, PERIOD_H1, 1, 1, ARRAY_H1);
    
    if(ARRAY_H1[0] != close_M5)
      Print(ARRAY_H1[0], " CopyClose H1 != M5 ", close_M5);
    if(ARRAY_M1[0] != close_M5)
      Print(ARRAY_M1[0], " CopyClose M1 != M5 ", close_M5);
   
     Comment(
               close_H1, " H1\n",
               close_M1, " M1\n",
               close_M5, " M5\n",
               ARRAY_H1[0], " CopyCloseH1\n",
               ARRAY_M1[0], " CopyCloseM1\n"
            );
         
  }       
 }/******************************************************************/

/**********************Expert OnDeinit function**********************/
void OnDeinit(const int reason)
 {
  Comment("");
 }/******************************************************************/

bool NewBar(ENUM_TIMEFRAMES tf)
  {
   static datetime nt = 0;
   datetime tm = iTime(_Symbol, tf, 0);
   if(tm == 0)
      return false;
   if(tm != nt)
     {
      nt = tm;
      return true;
     }
   return false;
 }/******************************************************************/ 

 
Alexey Viktorov :

Burada değiştirmeniz gerekiyor

üzerinde

Sonuç, iClose() ile aynıdır; Daha sonra iClose ve CopyClose aynı yerden veri alır.

Документация по MQL5: Доступ к таймсериям и индикаторам / iClose
Документация по MQL5: Доступ к таймсериям и индикаторам / iClose
  • www.mql5.com
iClose - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mikhail Nazarenko :

Hayır, _Period daha iyidir. H1'den sıfır fiyat teklifinin görünmesini zorla bekleyeceğimizden ve cari dönem düzenli olarak güncellendiğinden . Verilerin saat güncellendiğinde değil, saatin ilk saniyelerinde alınması gerekir.

Bir örnek eklemek ve kontrol etmek istiyorum

Görünüşe göre yeni bir çubuğun görünümünün işlevinin nasıl çalıştığını anlamıyorsunuz.

 bool NewBar( ENUM_TIMEFRAMES tf)
  {
   static datetime nt = 0 ;
   datetime tm = iTime ( _Symbol , tf, 0 );
   if (tm == 0 )
       return false ;
   if (tm != nt)
     {
      nt = tm;
       return true ;
     }
   return false ;
 } /******************************************************************/ 

Ve bu nedenle

Micheal Nazarenko :

Sonuç, iClose() ile aynıdır; Daha sonra iClose ve CopyClose aynı yerden veri alır.

Yeni bir TICK değeri geldiğinde OHLC'den bar kapanış değerleri ve/veya diğerlerini alırken değerler her zaman sorunsuzdur.
 
Alexey Viktorov :

Görünüşe göre yeni bir çubuğun görünümünün işlevinin nasıl çalıştığını anlamıyorsunuz.

Ve bu nedenle

Yeni bir TICK değeri geldiğinde OHLC'den bar kapanış değerleri ve/veya diğerlerini alırken değerler her zaman sorunsuzdur.

Soruyu cevapla. iClose (1) işlevi neden yeni bir mum hakkında güncel olmayan bilgileri veya bir hatayı değil de eski bilgileri döndürüyor? Bu bir hata.

 
Mikhail Nazarenko :

Soruyu cevapla. iClose (1) işlevi neden yeni bir mum hakkında güncel olmayan bilgileri veya bir hatayı değil de eski bilgileri döndürüyor? Bu bir hata.

Bu bir hataysa, herkeste veya hemen hemen herkeste olmalıdır. Sadece sizseniz, kodda bir sorun var.

Artık M15'te yeni bir çubuk H1 tanımına sahip bir Uzman Danışmanım var.

 /************************Expert tick function************************/
void OnTick ()
 {
   if (NewBar( PERIOD_H1 ))
   {
    close_H1 = iClose ( _Symbol , PERIOD_H1 , 1 );
     CopyClose ( _Symbol , PERIOD_M5 , 1 , 1 , close_M5);
    close_M1 = iClose ( _Symbol , PERIOD_M1 , 1 );
     if (close_H1 != close_M1)
       Print (close_H1, " != " , close_M1);
   }
   Comment (close_H1, "\n" ,
          close_M5[ 0 ], "\n" ,
          close_M1, "\n"
         );
 } /******************************************************************/

Ve işte yorumda ne var

Farklılıklar yok.

 
Tamam, tüm geliştiricilere ilgileri için teşekkürler, NewBar gibi koltuk değnekleri oluşturmaya gittim.))) Konu kapanmıştır.