Hatalar, hatalar, sorular - sayfa 3032

 
Andrey Dik :

Teşekkürler Andrey. Soruyu tam olarak anlayan tek kişi sensin.


şimdi her şey istendiği gibi çalışıyor, göstergeler ilk çalıştırmada yalnızca bir kez ve daha sonra - her biri yeni çubuğunda yalnızca bir kez tam olarak hesaplanıyor.


ikinci göstergenin son kodu, umarım birileri için faydalı olacaktır:

İşte düşünmeniz gereken şeyin başlangıcı

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

Hatalar, hatalar, sorular

Alexey Viktorov , 2021.05.28 08:36

Neden böyle bir kontrol?

 //проверка готовности данных и индикатора на другом TF
if ( SeriesInfoInteger ( Symbol (), tf, SERIES_SYNCHRONIZED ))
{
   if ( iBars ( Symbol (), tf) != BarsCalculated (handleFr)) return 0 ;
}
else return 0 ;

Koşul dönüşü 0 olmadan yazmak daha kolay olacaktır; ve her şey...

Her yeni çubukta koşul karşılanacak ve senkronizasyondan bağımsız olarak tüm çubuklar yeniden hesaplanacaktır. Döküntü kodu yazdınız ve onu bir terminal hatası olarak ilettiniz ...


Ve Igor Makanu bundan daha önce de bahsetmişti…
 

Hatırlatmak isterim.

1. En az bir grafiğin açık olduğu her sembol için, gelen onay işaretlerini işlemek için ayrı bir iş parçacığı çalışır. Belirli bir sembol için birkaç çizelge açılabilir, ancak akış yine aynı olacaktır.

2. Sembol akışı çizelgeleri değil, zaman serilerini işler. Yani, CopyRates isteğine verilen veri dizileri

3. Sembolünüze OnTick veya OnCalculate'de senkronize olup olmadığını sormanın faydası yoktur. Tabii ki evet!

4. Tüm zaman serileri en küçüğünden en büyüğüne doğru işlenir. Önce bir onay işareti uygulanıyor, ardından bu zaman serisinde oluşturulan tüm göstergeler hesaplanıyor. M1 üzerinde çalışan bir göstergeden aynı H1 sembolü için veri isterseniz, uygulanan onay işaretiyle asla veri alamazsınız. Hangi hileleri kullanırsanız kullanın, veriler her zaman bir tık geri olacaktır. Çünkü zaman dilimlerinin sıralı işlenmesiyle sembol başına bir iş parçacığı.

5. Önceki ifade, Uzman Danışmanlar ve komut dosyaları için geçerli değildir, çünkü Uzman Danışmanlar ve komut dosyaları her biri kendi ayrı iş parçacığında çalışır.

 
Slava :

Hatırlatmak isterim.

1. En az bir grafiğin açık olduğu her sembol için, gelen onay işaretlerini işlemek için ayrı bir iş parçacığı çalışır. Belirli bir sembol için birkaç çizelge açılabilir, ancak akış yine aynı olacaktır.

2. Sembol akışı çizelgeleri değil, zaman serilerini işler. Yani, CopyRates isteğine verilen veri dizileri

3. Sembolünüze OnTick veya OnCalculate'de senkronize olup olmadığını sormanın faydası yoktur. Tabii ki evet!

4. Tüm zaman serileri en küçüğünden en büyüğüne doğru işlenir. Önce bir onay işareti uygulanıyor, ardından bu zaman serisinde oluşturulan tüm göstergeler hesaplanıyor. M1 üzerinde çalışan bir göstergeden aynı H1 sembolü için veri isterseniz, uygulanan onay işaretiyle asla veri alamazsınız. Hangi hileleri kullanırsanız kullanın, veriler her zaman bir tık geri olacaktır. Çünkü zaman dilimlerinin sıralı işlenmesiyle sembol başına bir iş parçacığı.

5. Önceki ifade, Uzman Danışmanlar ve komut dosyaları için geçerli değildir, çünkü Uzman Danışmanlar ve komut dosyaları her biri kendi ayrı iş parçacığında çalışır.

Bunun gibi daha detaylı hatırlatıcılar lütfen! Teşekkür ederim!

 
Slava :

Hatırlatmak isterim.

4. Tüm zaman serileri en küçüğünden en büyüğüne doğru işlenir. Önce bir onay işareti uygulanıyor, ardından bu zaman serisinde oluşturulan tüm göstergeler hesaplanıyor. M1 üzerinde çalışan bir göstergeden aynı H1 sembolü için veri isterseniz, uygulanan onay işaretiyle asla veri alamazsınız. Hangi hileleri kullanırsanız kullanın, veriler her zaman bir tık geri olacaktır. Çünkü zaman dilimlerinin sıralı işlenmesiyle sembol başına bir iş parçacığı.

5. Önceki ifade, Uzman Danışmanlar ve komut dosyaları için geçerli değildir, çünkü Uzman Danışmanlar ve komut dosyaları her biri kendi ayrı iş parçacığında çalışır.

M1 üzerinde çalışan bir EA, M1'de (veya başka herhangi bir TF?) üzerinde üst TF'den veri alan bir gösterge kullanırsa, yeni bir çubuğun ilk işaretinde mevcut değeri döndüremeyeceğini doğru anlıyorum. neyse, n tiklerde üst TF hesaplamasına ulaşacak mı?

Az önce bu davranışla karşılaştım ve göstergede bir sorun aradım ve şimdi böyle olması gerektiği ortaya çıktı. Ancak durum buysa, OHLC modunda test yaparken kritik olan birkaç onay işaretini atlamanız gerektiğinden, teste büyük ölçüde müdahale eder.

 
Slava :

2. Sembol akışı çizelgeleri değil, zaman serilerini işler. Yani, CopyRates isteğine verilen veri dizileri

....

4. Tüm zaman serileri en küçüğünden en büyüğüne doğru işlenir. Önce bir onay işareti uygulanıyor, ardından bu zaman serisinde oluşturulan tüm göstergeler hesaplanıyor. M1 üzerinde çalışan bir göstergeden aynı H1 sembolü için veri isterseniz, uygulanan onay işaretiyle asla veri alamazsınız. Hangi hileleri kullanırsanız kullanın, veriler her zaman bir tık geri olacaktır. Çünkü zaman dilimlerinin sıralı işlenmesiyle sembol başına bir iş parçacığı.

TF'yi değiştirirken neden siyah ekranlar "Güncelleme" görünüyor?

daha önce kullandığım grafiği açtım (EURUSD'de H1), göstergeden çıktım, 2-3 dakika hiçbir şey yapmadı, sonra sırayla junior grafiğine geçtiniz (M30 ... M1), bir "siyah ekran güncellemesi" görünebilir 10 saniye

dahası, bu siyah ekran yapıya bağlıdır - terminalde siyah ekran olmadığında ve geçmişin yüklendiğinden emin olduğunuz için gerçekten çileden çıktığında, terminal için bir grafik çizmeniz yeterlidir, ancak bazıları için bu siyah ekranı beklemenizin nedeni


bu nedenle, soru şudur: başka bir TF'deki göstergeyi çağıran göstergeden ne sıklıkta başka bir TF'ye erişmeniz gerekir, yani. gösterge M5'te başlatılırsa ve her 30 dakikada bir H1'deki göstergeyi arayacaksa - CopyBuffer() her zaman H1'den doğru verileri alacak mı?

ya da bir gerçek değil, bu nedenle her işarette H1'de "göstergeyi çekin" (bağlantıların koptuğu seçenekler henüz dikkate alınmamıştır)

 

başka bir fonksiyonda bir döngü/fonksiyondaki değişkenlerle nasıl çalışılır?

görünürlüğü daha küresel hale getirmek mümkün mü?

 
Igor Makanu :

TF'yi değiştirirken neden siyah ekranlar "Güncelleme" görünüyor?

daha önce kullandığım grafiği açtım (EURUSD'de H1), göstergeden çıktım, 2-3 dakika hiçbir şey yapmadı, sonra sırayla junior grafiğine geçtiniz (M30 ... M1), bir "siyah ekran güncellemesi" görünebilir 10 saniye

dahası, bu siyah ekran yapıya bağlıdır - terminalde siyah ekran olmadığında ve geçmişin yüklendiğinden emin olduğunuz için gerçekten çileden çıktığında, terminal için bir grafik çizmeniz yeterlidir, ancak bazıları için bu siyah ekranı beklemenizin nedeni


bu nedenle, soru şudur: başka bir TF'deki göstergeyi çağıran göstergeden ne sıklıkta başka bir TF'ye erişmeniz gerekir, yani. gösterge M5'te başlatılırsa ve her 30 dakikada bir H1'deki göstergeyi arayacaksa - CopyBuffer() her zaman H1'den doğru verileri alacak mı?

ya da bir gerçek değil, bu nedenle her işarette H1'de "göstergeyi çekin" (bağlantıların koptuğu seçenekler henüz dikkate alınmamıştır)

Glory'nin sözlerine dayanarak, bunun bir gerçek olmadığına inanıyorum.

tüm hesaplamalar sadece bir tik üzerinden yapıldığından, bağlı göstergeler zinciri sonuna kadar tamamlanmayabilir ve bir sonraki tik için beklemeniz gerekir.

ama çok ilginç yanlış anlamalar var, cevaplarını belgelerde bulamamıştım.

tikler gitmediğinde ne yapmalı (örneğin hafta sonları)? Mevcut TF üzerinde çalışan bir indikatör eklerseniz, sorunsuz bir şekilde çizilecektir ve ilginç bir şekilde, bunun için bir kene varış gerekli değildir! ancak gösterge başka bir TF'den veri isterse, yeni bir tik gelene kadar hiçbir şey yapamaz ve hafta sonları keneler gitmez!

tamam ontimerde ChartRedraw (ChartID()) adını vereceğiz ve Comment (cnt); olduğundan emin olmak için cnt'nin 1 arttığında cnt'nin ekranda düzgün bir şekilde işaretlediğini ancak göstergenin çizilmediğini görüyoruz.

ancak içerik menüsünden Yenile butonu ile ekranı yenilemeniz yeterlidir, ardından baştan sona hesaplama yapıldıktan sonra gösterge başarılı bir şekilde çizilir.

şekline dönüştü   Akla tam tersi gelse de ChartRedraw() ve Reload by düğmesi aynı şey değildir.


ZY İkinci gösterge kod örneğiniz çalışıyor, ancak Uzman kodu daha hızlı.

 
Andrey Dik :

tikler gitmediğinde ne yapmalı (örneğin hafta sonları)? Mevcut TF üzerinde çalışan bir indikatör eklerseniz, sorunsuz bir şekilde çizilecektir ve ilginç bir şekilde, bunun için bir kene varış gerekli değildir!

gerekli değil

bir grafiğe bir gösterge eklediğinizde, kesin olarak tanımlanmış bir çağrı dizisi vardır: OnInit() ve hemen OnCalculated() , yani. ilk OnCalculated() kene gelmeden önce çağrılır, bu nedenle prev_calc 0 ile karşılaştırılmalıdır, çünkü sunucu ile bir onay veya bağlantı geldiğinde, OnCalculated() tekrar çağrılacak ve bu prev_calc sıfıra eşit olacaktır.

Andrey Dik :

Akla tam tersi gelse de ChartRedraw() ve Update by button aynı şey olmadığı ortaya çıktı.

büyük olasılıkla ChartSetSymbolPeriod() öğesini NULL parametrelerle ve geçerli dönemle kullanmanız gerekir, yardımcı olacaktır

 
Igor Makanu :

büyük olasılıkla ChartSetSymbolPeriod() öğesini NULL parametrelerle ve geçerli dönemle kullanmanız gerekir, yardımcı olacaktır

ChartSetSymbolPeriod

Aynı sembol ve zaman çerçevesiyle ChartSetSymbolPeriod'u çağırmak, grafiği güncellemek için kullanılabilir (terminaldeki Yenile komutuna benzer). Grafiğin güncellenmesi, ona bağlı göstergelerin yeniden hesaplanmasını tetikler. Böylece kene olmasa bile (örneğin hafta sonları) grafikteki göstergeyi hesaplayabilirsiniz.

yardım etti. yine de, şimdi hatırladığım kadarıyla Ac Puşkin şöyle derdi:

Oh, ne kadar harika keşiflerimiz var
Aydınlanma ruhunu hazırlayın
Ve tecrübe, zor hataların oğlu,
Ve dahi, paradokslar arkadaş,
Ve şans, mucit tanrıdır.

 
Andrey Dik :


tikler gitmediğinde ne yapmalı (örneğin hafta sonları)? Mevcut TF üzerinde çalışan bir indikatör eklerseniz, sorunsuz bir şekilde çizilecektir ve ilginç bir şekilde, bunun için bir kene varış gerekli değildir! ancak gösterge başka bir TF'den veri isterse, yeni bir tik gelene kadar hiçbir şey yapamaz ve hafta sonları keneler gitmez!


Başka bir zaman diliminden o anda hazır olan veriler alınacaktır. Yani, çıktıda tüm veriler mükemmel bir şekilde senkronize edilecektir.