Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 850

 
Artyom Trishkin :
Eğri göstergesini düzenleyin. Yalnızca bağlam menüsünün komutunda gerçekleşen tam bir yeniden hesaplama ile sizin için bir çizgi çizebilir.
Alexey Viktorov :

mql4'te de var.

Teşekkür ederim.

 
Koltuk değneği yardımıyla çıktım). Zaman aldığı dikey çizgiyi manuel olarak sürükledikten sonra güncellemek için göstergeye ihtiyacım vardı. Nesne sürükleme olayı işlevini kullandım ve TF'yi değiştirme işlevini, orijinaline dönüşle koydum. Yalnızca bazı nedenlerden dolayı güncelleme, yaklaşık birkaç saniye gecikmeli olarak tetiklenir. TF veya başka bir şeyi değiştirme işlevi çok yavaş çalışıyor, anlamadım.
 
khorosh :
Koltuk değneği ile çıktım). Zaman aldığı dikey çizgiyi manuel olarak sürükledikten sonra güncellemek için göstergeye ihtiyacım vardı. Nesne sürükleme olayı işlevini kullandım ve TF'yi değiştirme işlevini, orijinaline dönüşle koydum. Yalnızca bazı nedenlerden dolayı güncelleme birkaç saniye gecikmeli olarak tetiklenir. TF veya başka bir şeyi değiştirme işlevi çok yavaş çalışıyor, anlamadım.

Bu işlev eşzamansızdır. Yalnızca komutu olay kuyruğuna koymanın sonucunu döndürür.

Anında güncelleme için, grafik değiştirme komutundan sonra ChartRedraw() komutunu çalıştırın.

Genel olarak, elbette, yanlış yaklaşım. Grafiği yalnızca satır taşındıktan sonra güncellemeniz gerekiyorsa, gösterge yeniden hesaplama döngüsü OnCalculate() öğesinden değil, ChartEvent() öğesinden çağrılmalıdır - satır ofsetini yakaladı - gösterge yeniden hesaplama işlevi olarak adlandırılır ve tam bir performans gösterecektir. yeni verilerle satır yeniden hesaplama döngüsü (bazı veriler için satır gerekli mi?)

Yoksa gösterge doğru şekilde yapılmadı mı ve mevcut verilerdeki sıfır çubuğunu güncellemiyor ve onu yendiniz mi?

 
ilyav :

Birisi MT5'teki danışman kodunu düzeltmeme yardım edebilir mi?

Kılavuzları okudum ama derleme yaparken 2 uyarıyı geçemiyorum.

'xxx' beyanı küresel beyanı gizler

ve

tür dönüştürme nedeniyle olası veri kaybı

Başvurduğum danışman

Global değişkenlerin adlarını aptalca düzelttim ve türleri sıraya koydum.

Tembelliğinizin üstesinden gelmek için 10.000.000 ruble ödeyebilirsiniz.

Dosyalar:
 
Artyom Trishkin :

Global değişkenlerin adlarını aptalca düzelttim ve türleri sıraya koydum.

Tembelliğinizin üstesinden gelmek için 10.000.000 ruble ödeyebilirsiniz.

Çok teşekkürler.

Nasıl düzelttiğimi göstermekten utanıyorum)

int CountTrades(uzun PositionID1)

 
Artyom Trishkin :

Bu işlev eşzamansızdır. Yalnızca komutu olay kuyruğuna koymanın sonucunu döndürür.

Anında güncelleme için, grafik değiştirme komutundan sonra ChartRedraw() komutunu çalıştırın.

Genel olarak, elbette, yanlış yaklaşım. Grafiği yalnızca satır taşındıktan sonra güncellemeniz gerekiyorsa, gösterge yeniden hesaplama döngüsü OnCalculate() öğesinden değil, ChartEvent() öğesinden çağrılmalıdır - satır ofsetini yakaladı - gösterge yeniden hesaplama işlevi olarak adlandırılır ve tam bir performans gösterecektir. yeni verilerle satır yeniden hesaplama döngüsü (bazı veriler için satır gerekli mi?)

Yoksa gösterge doğru şekilde yapılmadı mı ve mevcut verilerdeki sıfır çubuğunu güncellemiyor ve onu yendiniz mi?

Gösterge, son sayılmayan çubukları sayar. Ve dikey sürüklendikten sonra, dikeyin yeni zamanını okuduktan sonra tamamen yeniden hesaplanmalıdır. Burada bunun hakkında yazdım ve nasıl çalıştığına dair ekran görüntüleri yayınladım.

Teşekkürler, fikrinizi deneyeceğim. Genel olarak, göstergelerde zayıfım, her zaman esas olarak danışmanlarla uğraştım.

 
Artyom Trishkin :

Bu işlev eşzamansızdır. Yalnızca komutu olay kuyruğuna koymanın sonucunu döndürür.

Anında güncelleme için, grafik değiştirme komutundan sonra ChartRedraw() komutunu çalıştırın.

Genel olarak, elbette, yanlış yaklaşım. Grafiği yalnızca satır taşındıktan sonra güncellemeniz gerekiyorsa, gösterge yeniden hesaplama döngüsü OnCalculate() öğesinden değil, ChartEvent() öğesinden çağrılmalıdır - satır ofsetini yakaladı - gösterge yeniden hesaplama işlevi olarak adlandırılır ve tam bir performans gösterecektir. yeni verilerle satır yeniden hesaplama döngüsü (bazı veriler için satır gerekli mi?)

Yoksa gösterge doğru şekilde yapılmadı mı ve mevcut verilerdeki sıfır çubuğunu güncellemiyor ve onu yendiniz mi?

tavsiye ettiğin gibi yaptı. Her şey harika çıktı. Şimdi, sürükledikten hemen sonra gösterge tamamen yeniden çizilir. Tekrar teşekkürler.

 
khorosh :

tavsiye ettiğin gibi yaptı Her şey harika çıktı. Şimdi, sürükledikten hemen sonra gösterge tamamen yeniden çizilir. Tekrar teşekkürler.

Benim için zevkti. Ama OnCalculate() içinde çizim yapmalı mı, yapmamalı mı?

Sonuçta, tabloya atarken, hala herhangi bir çizgi hareketini bilmiyor, ancak çizgiyi çizmesi gerekiyor.

 
Artyom Trishkin :

Benim için zevkti. Ama OnCalculate()'de çizim yapmalı mı, yapmamalı mı?

Sonuçta, tabloya atarken, hala herhangi bir çizgi hareketini bilmiyor, ancak çizgiyi çizmesi gerekiyor.

Gösterge grafiğe yerleştirildiğinde, init() içinde bir dikey oluşturulur ve başlangıçta buna bir süre ayarlanır, örneğin, Zaman[10]. Kodu OnChartEvent() ve OnCalculate() içinde çoğalttım. Tüm çubuklar için yeniden hesaplama yalnızca OnChartEvent'te yapıldı.

 
khorosh :

Gösterge grafiğe yerleştirildiğinde, init() içinde bir dikey oluşturulur ve başlangıçta buna bir süre ayarlanır, örneğin, Zaman[10]. Kodu OnChartEvent() ve OnCalculate() içinde çoğalttım. Tüm çubuklar için yeniden hesaplama yalnızca OnChartEvent'te yapıldı.

Örneğin, Refresh() işlevini gerekli biçimsel parametrelerle yapmak ve gerektiğinde onu çağırmak daha iyi değil mi?

Ve bu arada, bir tarih aralığıyla Bars() kullanarak OnCalculate() işlevinin dışındaki göstergede oranları_toplamını alırken, göstergenin donmasıyla karşılaşabilirsiniz:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

iBarShift'e benzer

Nikolai Semko , 2018.04.05 23:47

Şimdilik bu seçenek , ancak şimdi hizmet masasına aboneliğimi iptal ettiğim Barlar işlevinin askıya alınmasıyla ilgili bu hatayı atlaması için onu tamamlamak istiyorum.

Bu hatanın özü, Bars işlevindeki start_time ve stop_time'ın her ikisinin de aynı çubuğun içinde veya gelecekte (sıfır çubuğunun sağında) olması durumunda, bu işlevin 10 saniyeden fazla donmasıdır.

Belki biraz sonra, yine de doğru sürümü daha hızlı yapacağım, ancak daha hantal.