Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 102

 
STARIJ :

Grafikteki fiyat aşağıdan yukarıya dikey eksen boyuncadır ve çubukların zamanı ve numaralandırması yatay eksen boyunca sağa doğrudur

Sıfır çubuğu, şu anda mevcut olan son çubuktur. Aşağıdaki çubuklar geçmişte mevcuttur, ancak henüz test kullanıcısı için mevcut değildir. Biraz sonra, bu çubuk hesaplandığında, test cihazı kendisi için sıfır olacak olan bir sonraki çubuğa geçecektir.


Bu yüzden doğru anladım, bir sonraki çubuğun Açık fiyatı test cihazında göründüğü anda sıfır olur[0]. Ve gösterge, akım[0]'dan önce 500'ü saymaya başlayacak şekilde yapılırsa, test cihazı göstergeyi mevcut [0] çubuğundan ~ 2 yıl (500 D1 çubuğu) önce hesaplayacaktır...

Bununla bağlantılı olarak şu soru ortaya çıkıyor:

Şimdi gösterge, eski bir versiyon olan Start() olayının işlenmesine dayanmaktadır. Her iCustom() çağrısında test yapılırken, gösterge önceki 500 çubukta hesaplanır, test cihazının 1600 çalışması bir buçuk saat boyunca sayılır.
OnCalculate() olayının işlenmesine dayalı olarak bir gösterge oluşturabilirsiniz; bu, bir sonraki OnCalculate() öğesine kadar yalnızca hesaplanmamış çubukların hesaplanmasını düzenlemenize olanak tanır - ancak bu, anladığım kadarıyla şu anda gerçek bir veri akışındadır. MQL4 referansından.
Ve test cihazında, her iCustom() çağrısı için hesaplanan çubukların sayısını azaltacak mı?

 
MikeZv :

Bu yüzden doğru anladım, bir sonraki çubuğun Açık fiyatı test cihazında göründüğü anda sıfır olur[0]. Ve gösterge, akım[0]'dan önce 500'ü saymaya başlayacak şekilde yapılırsa, test cihazı göstergeyi mevcut [0] çubuğundan ~ 2 yıl (500 D1 çubuğu) önce hesaplayacaktır...

Bununla bağlantılı olarak şu soru ortaya çıkıyor:

Şimdi gösterge, eski bir versiyon olan Start() olayının işlenmesine dayanmaktadır. Her iCustom() çağrısında test yapılırken, gösterge önceki 500 çubukta hesaplanır, test cihazının 1600 çalışması bir buçuk saat boyunca sayılır.
OnCalculate() olayının işlenmesine dayalı olarak bir gösterge oluşturabilirsiniz; bu, bir sonraki OnCalculate() öğesine kadar yalnızca hesaplanmamış çubukların hesaplanmasını düzenlemenize olanak tanır - ancak bu, anladığım kadarıyla şu anda gerçek bir veri akışındadır. MQL4 referansından.
Ve test cihazında, her iCustom() çağrısı için hesaplanan çubukların sayısını azaltacak mı?


Gösterge sadece çarpık yazılmış, bu yüzden yavaş, profesyonel yeniden yazmaya ihtiyacınız var, o zaman tüm geçmişi sayacak ve çok hızlı bir şekilde .. hepsi bu..

 
Nikolay Ivanov :


Gösterge sadece çarpık yazılmış, bu yüzden yavaş, profesyonel yeniden yazmaya ihtiyacınız var, o zaman tüm geçmişi sayacak ve çok hızlı bir şekilde .. hepsi bu..


Zaten yeniden yazılmış... :)

 

Eski göstergeyi temel alarak [ OnCalculate() üzerinde] yeni bir gösterge yazdı [On Start()], bu sorun yukarıda dile getirildi.
5 yıl boyunca (D1 dönemi) birbirleriyle karşılaştırmak için bir script çalıştırıyorum - bire bir, tüm değerler aynı.
Aynı ICustom(), Expert Advisor'a kopyalandı ve Expert Advisor test edilirken bir dosyaya çıktı.
Eski göstergenin değerleri komut dosyasındaki gibi görüntüleniyor, yeni göstergelerin değerlerinin hepsi farklı !!!
Start() üzerindeki gösterge için Expert Advisor'daki iCustom() neden komut dosyasındakiyle aynı şekilde görüntüleniyor,
ve OnCalculate() üzerindeki gösterge için Expert Advisor'daki çıktı komut dosyasındaki çıktıdan farklı mı?


 

Merhaba.

Çocuklar, bana kimin geldiğini söyleyin.

Bazı ikili brokerler, örneğin Grand Capital, işlemdeki kâr yoluyla değil, hesap bakiyesine/bakiyelerine gelir/çekiş olarak hesaptan gelir tahakkuk eder ve hesaptan para yazar.


Bir işlemin sonucunu nasıl öğreneceğime dair birkaç alternatif çalışma seçeneğim var ama yine de en doğru olanı bakiye satırının değerini ve gelir/zarar miktarını okumaktır.

Bu bağlamda, soru şudur - bu "şu anda", ancak işlemlerin tarihi boyunca nasıl yapılabilir? Yani, terazi türünün tüm kayıtlarını yineleyebilen, sırasıyla yorumu ve değerin kendisini okuyabilen bazı işlevlerle (MQL4'te yerleşik olarak) ilgileniyorum. Birkaç yıllık programlama için ilk defa böyle bir görevle karşılaştım.

 
MikeZv :

[OnCalculate() üzerinde] eskisine [Start()] dayalı yeni bir gösterge yazdım, bu sorun yukarıda gündeme getirildi.
5 yıl boyunca (D1 dönemi) birbirleriyle karşılaştırmak için bir script çalıştırıyorum - bire bir, tüm değerler aynı.
Aynı ICustom(), Expert Advisor'a kopyalandı ve Expert Advisor test edilirken bir dosyaya çıktı.
Eski göstergenin değerleri komut dosyasındaki gibi görüntüleniyor, yeni göstergelerin değerlerinin hepsi farklı !!!
Start() üzerindeki gösterge için Expert Advisor'daki iCustom() neden komut dosyasındakiyle aynı şekilde görüntüleniyor,
ve OnCalculate() üzerindeki gösterge için Expert Advisor'daki çıktı komut dosyasındaki çıktıdan farklı mı?


Uzun süre tahmin edebilirsiniz.

Kodu yanlış veri türü dönüştürme, değişken adlarının yinelenmesi (yani, şimdi ayrılmış adlar eski kodda kullanılıyor) için kontrol ederdim - sonuç olarak, değişken alması gereken yanlış değerleri yakalar ( her şeyden önce, OnCalculate'de kullanılan değişkenlerin adlarını kontrol edin - open, high, low, close, vb. - bunlar her zaman eski kodlarda bulunabilir).
iCustom'a gelince, bu en kolay seçenektir ve buradaki hatalar büyük olasılıkla yanlış geçirilen parametrelerle ilişkilendirilebilir (yine yukarıda belirtilen nedenlerden dolayı).

Tüm değerleri yazdırın veya hata ayıklama modunda çalıştırın ve tutarsızlığın nerede olduğunu kontrol edin.
 
Artyom Kuraev :

Uzun süre tahmin edebilirsiniz.

Kodu yanlış veri türü dönüştürme, değişken adlarının yinelenmesi (yani, şimdi ayrılmış adlar eski kodda kullanılıyor) için kontrol ederdim - sonuç olarak, değişken alması gereken yanlış değerleri yakalar ( her şeyden önce, OnCalculate'de kullanılan değişkenlerin adlarını kontrol edin - open, high, low, close, vb. - bunlar her zaman eski kodlarda bulunabilir).
iCustom'a gelince, bu en kolay seçenektir ve buradaki hatalar büyük olasılıkla yanlış geçirilen parametrelerle ilişkilendirilebilir (yine yukarıda belirtilen nedenlerden dolayı).

Tüm değerleri yazdırın veya hata ayıklama modunda çalıştırın ve tutarsızlığın nerede olduğunu kontrol edin.
Komut dosyasında, her iki göstergenin çıktısı aynıdır.

Komut dosyasındaki iCustom() içeren satırlar Uzman Danışmana KOPYALANIR. Aynı parametreler iletilir.

 
MikeZv :

Komut dosyasındaki iCustom() içeren satırlar Uzman Danışmana KOPYALANIR. Aynı parametreler iletilir.

Kopyalanmış olmaları ve hatalara yol açabilmeleri. Sadece olası nedenleri ve ilk önce neyi kontrol edeceğimi önerdim.

İkinci nokta ve sonra bu büyük olasılıkla en açık cevaptır - göstergenin kendisi yeniden çizilir ve geçmişe bindirildiğinde, bazı değerler verir ve strateji test modunda çalışırken - diğerleri. Bir keresinde yeniden çizim hakkında yazmıştım, iki resme bakabilirsiniz .

Hiçbir şeyde ısrar etmiyorum ama yanıtlarken deneyimlerim bana rehberlik ediyor. Önerdiğim seçeneklerin hiçbirinin uygun olmadığından eminseniz, diğer yanıtları bekleyin veya çok daha fazla başlangıç bilgisi verin :)

 
Artyom Kuraev :

Merhaba.

Çocuklar, bana kimin geldiğini söyleyin.

Bazı ikili brokerler, örneğin Grand Capital, işlemdeki kâr yoluyla değil, hesap bakiyesine/bakiyelerine gelir/çekiş olarak hesaptan gelir tahakkuk eder ve hesaptan para yazar.


Bir işlemin sonucunu nasıl öğreneceğime dair birkaç alternatif çalışma seçeneğim var ama yine de en doğru olanı bakiye satırının değerini ve gelir/zarar miktarını okumaktır.

Bu bağlamda, soru şudur - bu "şu anda", ancak işlemlerin tarihi boyunca nasıl yapılabilir? Yani, terazi türünün tüm kayıtlarını yineleyebilen, sırasıyla yorumu ve değerin kendisini okuyabilen bazı işlevlerle (MQL4'te yerleşik olarak) ilgileniyorum. Birkaç yıllık programlama için ilk defa böyle bir görevle karşılaştım.


 #define OP_BALANCE 6
#define OP_CREDIT   7

artı

 OrdersHistoryTotal
 StringFind ( OrderComment (),txt, 0 )
 
Taras Slobodyanik :

artı

TEŞEKKÜR ETMEK!

Her şey çalıştı!