Profesyonel değilim ama bu kodun yanlış olduğunu düşünüyorum. Recount değişkeni her zaman doğrudur. Bu nedenle, her tik yeni bir çubuk olarak ele alınacaktır. Bu değişken neden orada? Neden CopyClose çağrılıyor? Gönderilen kodlar doğru işlem için kontrol edildi mi? Eğer yanılıyorsam, lütfen düzeltin ve açıklayın.
Her şeyi tekrar kontrol ettim ve bir hata buldum. Ekli dosyanın kendisinde Recount'un false olarak atanması yok, ancak örnek kodda her şey doğru.
Belki yanılıyorum ama bence doğru yol bu.
if(TNew>m_TOld)Aksi takdirde sayfalama (geçmiş düzenleme) sırasında yanlış olacaktır.
Bunun ne olduğunu ve bu kontrolün neden eklendiğini açıklayabilir misiniz?
if(... && TNew)Ben anlamadım. Bu koşul ne zaman doğru, ne zaman yanlıştır? Teşekkür ederim
Bunun ne olduğunu ve bu kontrolün neden eklendiğini açıklayabilir misiniz?
Bunu anlamıyorum. Bu koşul ne zaman doğru ve ne zaman yanlıştır? Teşekkür ederim
Imho, TNew'nin m_TOld'a eşit olmadığını ve aynı zamanda sıfıra eşit olmadığını kontrol eder (yani D'1970.01.01.01 00:00:00:00')....
İkinci koşul, yine imho, fonksiyonun
datetime TNew=datetime(SeriesInfoInteger(symbol,timeframe,SERIES_LASTBAR_DATE));
sıfırdan farklı bir şey döndürdü...
Şimdi betiği bu fonksiyonla çalıştırdım - bana tam olarak 0 döndürdü. Belki de hafta sonu olduğu içindir.
Bunun ne olduğunu ve bu kontrolün neden eklendiğini açıklayabilir misiniz?
Bunu anlamıyorum. Bu koşul ne zaman doğru ve ne zaman yanlış? Teşekkür ederim.
Belki yanılıyorum ama bence doğru yol bu.
Aksi takdirde, sayfalama (geçmiş düzenleme) sırasında çalışma yanlışlığı olacaktır.
Bunun ne olduğunu ve bu kontrolün neden eklendiğini açıklayabilir misiniz?
Anlamıyorum. Bu koşul ne zaman doğru, ne zaman yanlış? Teşekkür ederim.
Bunu bir önlem olarak yapmanın daha mantıklı olacağını düşünüyorum.
if(TNew>m_TOld && TNew) TNew geçmiş değiştirildiğinde hala sıfır olmasına rağmen. TNew değişkenine herhangi bir zamanda sıfır girebilir, bu nedenle her zaman sıfır olup olmadığını kontrol etmelisiniz.
Sınıfınızda küçük bir hata var( kodu gördüğümçoğu fonksiyonda olduğugibi ). IsNewBar yöntemini ilk kez çağırdığınızda, gerçek bir yeni çubuğunvarlığına bakılmaksızın her zaman true değerini döndürüyor .
Ancak böyle bir fonksiyon statik bir değişken içerir ve bu nedenle bu fonksiyonun birkaç çağrısını kullanamayız.
Son çubuğun açık kalma süresini tutmak için iki boyutlu bir dizi de kullanılabilir.
class CIsNewBar{
private:
long checkedMs;
datetime lastBarOpenedAt;
bool lastValue;
CTickUtils tickUtils;
public:
CIsNewBar(){}
~CIsNewBar(){}
bool isNewBar(){
MqlTick tick;
SymbolInfoTick(_Symbol, tick);
long tickMs = tick.time_msc;
if(checkedMs >= tickMs){ //bu işlevi bu tik üzerinde zaten işlediniz mi?
return lastValue; //so, tamponlanmış değeri döndür
}
datetime time[1];
CopyTime(_Symbol, _Period, 0, 1, time);
if(lastBarOpenedAt != time[0]){
lastBarOpenedAt = time[0];
lastValue = true;
} else {
lastValue = false;
}
checkedMs = tickMs;
return lastValue;
}
Bunun yukarıda belirtilen sorunları çözen hızlı ve hafif bir sınıf olduğunu düşünüyorum.
Bu sürüm:
- .isNewBar() fonksiyonu ilk kez çağrıldığında yanlış uyarı vermeyecektir.
- Statik değişkenler kullanmadan fonksiyonun her çağrılışında yeni değişkenlerin sürekli olarak yeniden oluşturulmasını ortadan kaldırır, bu da yürütmeyi hızlandırır.
- çubuk başına yalnızca bir kez true döndürür.
- hafif bir bellek ayak izine sahiptir.
class CIsNewBar{ private: datetime lastBarOpenedAt; datetime time[1]; public: CIsNewBar(){CopyTime(_Symbol, _Period, 0, 1, time);lastBarOpenedAt = time[0];} ~CIsNewBar(){} bool isNewBar(){ CopyTime(_Symbol, _Period, 0, 1, time); if(lastBarOpenedAt < time[0]){ lastBarOpenedAt = time[0]; return(true); } else { return(false);} } };
Sınıfı uygulamak için:
CIsNewBar someName; void OnTick(){ if(someName.isNewBar()){ /// Yeni çubuk olay işleyicisini çağır veya /// Yeni çubuk için çalışma yapın. } }
- www.mql5.com
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
IsNewBar:
Bir çubuk değişikliğinin ne zaman gerçekleştiğini belirlemek için CIsNewBar sınıfı.
Author: Nikolay Kositsin