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

 
iClose: boş - hata. Fonksiyon hata vermiyor. Şu anda kullanılmayan değeri döndürür.
 
Burada " iClose() aracının sunucusundan (DC) değeri alır " diye okudum.
 
Artyom Trishkin :
Hayır böyle değil. İşlevle ilgili yardımda, dönüş değeri hakkında ne diyor?
kapatırım

Geri dönüş değeri

İlgili grafiğin çubuğun kapanış fiyatının değeri (shift parametresi ile gösterilir) veya bir hata olması durumunda 0 . Hata hakkında daha fazla bilgi almak için GetLastError() işlevini çağırın.

0 değilse, hata olmadığı ortaya çıkıyor. Ama değer de değişmiyor... bu yüzden beni şaşırtan RefreshRates(); olmadan güncellenmiyor.
 
Mikhail Nazarenko :

Ve zaman çerçevesini mevcut olandan farklı bir şeye değiştirirseniz, veriler RefreshRates() ile bile zamanında güncellenmeyi durduracaktır. iClose ve benzerlerinin temel işlevlerini ortaya çıkarır. MT4'te alakasız saçmalıklar veriyorlar. Bilgi ürünlerinin %80'inin MT4'ün bu benzersiz özelliklerini dikkate almadığından eminim. Daha fazla yaşamak nasıl?)))

TF'yi değiştirmek hiçbir şey yapmaz. Geçerli iClose değeri, grafik döneminden bağımsız olarak Teklif değerine eşittir.
 
Alexey Viktorov :
TF'yi değiştirmek hiçbir şey yapmaz. Geçerli iClose değeri, grafik döneminden bağımsız olarak Teklif değerine eşittir.

Bir danışman yaptım ve bir günlüğüne M5'te başlattım. Saat değişikliği sırasında her bir değer için yatay çizgiler çizer: iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M5,1), iClose(symbol, PERIOD_ M1,1 ),Close[1] ],Teklif etmek

  1. iClose(symbol, PERIOD_ M5,1) ),Close[1] - tam olarak grafikte gösterildiği gibi
  2. Teklif yakındı, bir sonraki onay işareti
  3. iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M1,1) - bazen eşleşiyorlardı ve bazen özellikle akşamları RefreshRates() bağlandıktan sonra bile tam bir saçmalık gösteriyorlardı.

Geliştiricilere soru. Yanlış bilgi veriyorlarsa ve verilerini güncellemek yine de imkansızsa, MQL4'te neden iClose işlevlerine vb. ihtiyacım var?

 
Mikhail Nazarenko :

Bir danışman yaptım ve bir günlüğüne M5'te başlattım. Saat değişikliği sırasında her bir değer için yatay çizgiler çizer: iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M5,1), iClose(symbol, PERIOD_ M1,1 ),Close[1] ],Teklif etmek

  1. iClose(symbol, PERIOD_ M5,1) ),Close[1] - tam olarak grafikte gösterildiği gibi
  2. Teklif yakındı, bir sonraki onay işareti
  3. iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M1,1) - bazen eşleşiyorlardı ve bazen özellikle akşamları RefreshRates() bağlandıktan sonra bile tam bir saçmalık gösteriyorlardı.

Geliştiricilere soru. Yanlış bilgi veriyorlarsa ve verilerini güncellemek zaten imkansızsa, MQL4'te neden iClose işlevlerine vb. ihtiyacım var?

Biraz saçmalık. Yalnızca, herhangi bir nedenle yürütmede bir gecikme varsa, RefreshRates() öğesini çağırmak gerekir. Uzun bir döngü gibi durumlar veya sadece bir siparişin açılması için bir emir gönderirken fiyatların güncellenmesi gibi durumlar. Versiyonunuz sorun olmamalı. Fiyat değerlerini bu kadar yanlış alan bir kod örneği verseniz daha iyi olur.

Şimdi bu kodu çalıştırdım

 double close_H1,
       close_M1;

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

/************************Expert tick function************************/
void OnTick ()
 {
   if (NewBar( PERIOD_M5 ))
   {
    close_H1 = iClose ( _Symbol , PERIOD_M5 , 1 );
    close_M1 = iClose ( _Symbol , PERIOD_M1 , 1 );
     if (close_H1 != close_M1)
       Print (close_H1, " != " , close_M1);
   }
   Comment (close_H1, "\n" ,
          close_M1, "\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 ;
 } /******************************************************************/
aslında, bir dakikanın kapanışı , grafiğin herhangi bir yüksek periyoduyla aynı zamana denk gelmelidir. Daha sonra günlükte bir şey yazılı olup olmadığına bakacağım.
 
Mikhail Nazarenko :

Ve zaman çerçevesini mevcut olandan farklı bir şeye değiştirirseniz, veriler RefreshRates() ile bile zamanında güncellenmeyi durduracaktır.

Bu iddiayı destekleyecek test kodu var mı? Bunu kendim fark etmedim. TF'yi değiştirirken, sadece geçmişin değiştirilmesini bekleriz ve sonra çalışırız.


iClose ve benzerlerinin temel işlevlerini ortaya çıkarır. MT4'te alakasız saçmalıklar veriyorlar.

Çok gürültülü bir açıklama. Bazı durumlarda bu mümkündür, ancak bunun için hata kodları vardır. Onları kontrol etmezseniz, sonucun kullanılıp kullanılamayacağını asla anlayamazsınız.


Bilgi ürünlerinin %80'inin MT4'ün bu benzersiz özelliklerini dikkate almadığından eminim. Daha fazla yaşamak nasıl?)))

Daha fazlasını söyleyeceğim: neredeyse tüm programlar bir şeyi hesaba katmaz. Yeni sürümler bunun için var. Bir ürün artık desteklenmediğinde, çalışmaz hale getirilir.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov :

Biraz saçmalık. Yalnızca, herhangi bir nedenle yürütmede bir gecikme varsa, RefreshRates() öğesini çağırmak gerekir. Uzun bir döngü veya sadece bir siparişin açılması için bir emir gönderirken fiyatların güncellenmesi gibi durumlar. Versiyonunuz sorun olmamalı. Fiyat değerlerini bu kadar yanlış alan bir kod örneği verseniz daha iyi olur.

Şimdi bu kodu çalıştırdım

aslında, bir dakikanın kapanışı , grafiğin daha yüksek herhangi bir periyoduyla aynı zamana denk gelmelidir. Daha sonra günlükte bir şey yazılı olup olmadığına bakacağım.

Kodum benzer. OnTick'te Hata

close_H1 = iClose ( _Symbol , PERIOD_M5 , 1 );

gerekli

close_H1 = iClose ( _Symbol , PERIOD_H1 , 1 );
close_M5 = Close[1];
if(close_H1 != close_M5)
	Print(close_H1, " != " , close_M5);
if(close_M1 != close_M5)
	Print(close_M1, " != " , close_M5);


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.

 
Ihor Herasko :

Bu iddiayı destekleyecek test kodu var mı? Bunu kendim fark etmedim. TF'yi değiştirirken, sadece geçmişin değiştirilmesini bekleriz ve sonra çalışırız.


Çok gürültülü bir açıklama. Bazı durumlarda bu mümkündür, ancak bunun için hata kodları vardır. Onları kontrol etmezseniz, sonucun kullanılıp kullanılamayacağını asla anlayamazsınız.


Daha fazlasını söyleyeceğim: neredeyse tüm programlar bir şeyi hesaba katmaz. Yeni sürümler bunun için var. Bir ürün artık desteklenmediğinde, çalışmaz hale getirilir.

İşte kod, koyun ve kontrol edin. Her mumda bir kibritim yok. Alpari gerçek EURCHF M5.

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);
   
     Comment(
               close_H1, " H1\n",
               close_M1, " M1\n",
               close_M5, " M5\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;
 }/******************************************************************/

 
Mikhail Nazarenko :
iClose: boş - hata. Fonksiyon hata vermiyor. Şu anda kullanılmayan değeri döndürür.

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