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

 
Durum şudur: Geçmişteki bir çubuğun indeksi X değişkeninde saklanır, yeni bir tane göründüğünde bir kayma olduğu ve bu nedenle X'in zaten başka bir çubuğu işaret ettiği bilinmektedir. Nasıl düzeltilir? Fikir şudur: her yeni çubukla sayacı artırın (count++) ve onu X'e ekleyin. Böylece, X, ofsetten bağımsız olarak her zaman aynı çubuğu işaret edecektir. Ancak bir sorun var, EA başlatıldığında, ilk mevcut çubuğun dikkate alınmaması gerekiyor, başlangıçta sayımın sadece -1 değerine sahip olması durumunda çözülmesi kolay olduğunu düşünüyorum. Yani, artıştan sonraki mevcut çubukta, sayım "0"a eşit olacak ve bir sonraki yeni çubukta (başlatmadan sonra ilk 1 çubuk kaydırma meydana geldiğinde) "1"e eşit olacaktır. Ne düşünüyorsun? Belki de hiç sanmıyorum?
 
Nerd Trader # :
Durum şudur: Geçmişteki bir çubuğun indeksi X değişkeninde saklanır, yeni bir tane göründüğünde bir kayma olduğu ve bu nedenle X'in zaten başka bir çubuğu işaret ettiği bilinmektedir. Nasıl düzeltilir? Fikir şudur: her yeni çubukla sayacı artırın (count++) ve onu X'e ekleyin. Böylece, X, ofsetten bağımsız olarak her zaman aynı çubuğu işaret edecektir. Ancak bir sorun var, EA başlatıldığında, ilk mevcut çubuğun dikkate alınmaması gerekiyor, başlangıçta sayımın sadece -1 değerine sahip olması durumunda çözülmesi kolay olduğunu düşünüyorum. Yani, artıştan sonraki mevcut çubukta, sayım "0"a eşit olacak ve bir sonraki yeni çubukta (başlatmadan sonra ilk 1 çubuk kaydırma meydana geldiğinde) "1"e eşit olacaktır. Ne düşünüyorsun? Belki de hiç sanmıyorum?

Bu bir gösterge ise, o zaman yeterlidir

 bool    ArraySetAsSeries (
   const void &  array[],     // массив по ссылке
   bool          flag         // true означает обратный порядок индексации
   );

kullanılan tüm dizilere ve gösterge arabelleklerine.

Ardından sıfır çubuğu, Rates_total-1 olacaktır.

ArraySetAsSeries - Операции с массивами - Справочник MQL4
ArraySetAsSeries - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArraySetAsSeries - Операции с массивами - Справочник MQL4
 
Nerd Trader # :
Durum şudur: Geçmişteki bir çubuğun indeksi X değişkeninde saklanır, yeni bir tane göründüğünde bir kayma olduğu ve bu nedenle X'in zaten başka bir çubuğu işaret ettiği bilinmektedir. Nasıl düzeltilir? Fikir şudur: her yeni çubukla sayacı artırın (count++) ve onu X'e ekleyin. Böylece, X, ofsetten bağımsız olarak her zaman aynı çubuğu işaret edecektir. Ancak bir sorun var, EA başlatıldığında, ilk mevcut çubuğun dikkate alınmaması gerekiyor, başlangıçta sayımın sadece -1 değerine sahip olması durumunda çözülmesi kolay olduğunu düşünüyorum. Yani, artıştan sonraki mevcut çubukta, sayım "0"a eşit olacak ve bir sonraki yeni çubukta (başlatmadan sonra ilk 1 çubuk kaydırma meydana geldiğinde) "1"e eşit olacaktır. Ne düşünüyorsun? Belki de hiç sanmıyorum?
       datetime x=время нужного бара;
       int index= iBarShift ( _Symbol , 0 ,x);
 
MakarFX # :
Neden böyle donmalar?
 
Alexey Viktorov # :
Neden böyle donmalar?
benim için daha kolay)
 
MakarFX # :
benim için daha kolay)

Ama işlemci daha ağır...

 
Alexey Viktorov # :

Ama işlemci daha ağır...

Hangi fonksiyonların hangi yükü taşıdığını bilmiyorum. Bununla ilgili bir yerde okuyabilir misin?
 
Nerd Trader # :
Durum şudur: Geçmişteki bir çubuğun indeksi X değişkeninde saklanır, yeni bir tane göründüğünde bir kayma olduğu ve bu nedenle X'in zaten başka bir çubuğu işaret ettiği bilinmektedir. Nasıl düzeltilir? Fikir şudur: her yeni çubukla sayacı artırın (count++) ve onu X'e ekleyin. Böylece, X, ofsetten bağımsız olarak her zaman aynı çubuğu işaret edecektir. Ancak bir sorun var, EA başlatıldığında, ilk mevcut çubuğun dikkate alınmaması gerekiyor, başlangıçta sayımın sadece -1 değerine sahip olması durumunda çözülmesi kolay olduğunu düşünüyorum. Yani, artıştan sonraki mevcut çubukta, sayım "0"a eşit olacak ve bir sonraki yeni çubukta (başlatmadan sonra ilk 1 çubuk kaydırma meydana geldiğinde) "1"e eşit olacaktır. Ne düşünüyorsun? Belki de hiç sanmıyorum?

Orada değil. Bir danışman / gösterge yüklerken, terminalin içindeyse, terminalin dışında bir girdi veya harici veya global bir değişken olmadığı sürece X'te hiçbir şey yoktur, bu yüzden önce oraya bir şey yazılmalıdır. Ve sonra toplam çubuk sayısındaki değişiklikleri saymak aptalca olur (yeni bir çubuğun görünümünü hesaba katarak). bunun gibi

tarihsaat BarTime;

FlagNewBar= false ;
if (BarTime!= iTime ( NULL , 0 , 0 ))
{
 BarTime= iTime ( NULL , 0 , 0 );
 FlagNewBar= true ;
}
if (FlagNewBar== true )
{
// И когда тру, делаем что нужно делать когда появился новый бар, 
//на следующем тике флаг нового бара будет ложь, так как БарТайм время все время существования нулевого бара будет равным
}
 

Selamlar. Lütfen bana söyle. Başlatma veya kene sırasında MT5'te test nasıl tanımlanır?

Şimdiye kadar yalnızca OnDeinit( ) işlevine yapılan çağrıdan hemen önce çağrılan OnTester() öğesini buldum.

 
@Alexey Viktorov @MakarFX ilginç, oldukça uygun çözümler. Teşekkür ederim.

@Valeriy Yastremskiy X dizini ayrıca OnInit() içine yerleştirilir. Kodum şöyle görünür:
last_time = iTime ( NULL , 0 , 0 );

   if (last_time > bar.time_open){
    bar.time_open = last_time;
    coint++;//стартовое значение -1
  }
Bana gelince, FlagNewBar ile olan koşul gereksiz.