Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 239

 
Anatoli Kazharski #:

Bir sembolün veri içerip içermediğini nasıl öğrenebilirim, böylece içermiyorsa [Piyasa İzleme] penceresinde bırakmam?

SymbolInfoTick.

 
fxsaber #:

SymbolInfoTick.

Bu seçeneği denedim. Ne yazık ki çalışmıyor. Bir sembol [Market Watch] penceresine ilk kez eklenirse, henüz üzerinde veri yoktur ve SymbolInfoTick null değerler döndürür.

CopyXXX fonksiyonlarını da test ettim, ancak bir zaman aşımı yok ve sunucudan veri bekleme süreci yaklaşık 45 saniye sürüyor, bu çok uzun.

Bir karakterin kullanılamaz olup olmadığını öğrenmek için hızlı bir yola ihtiyacım var. Bunun gibi durumlardan bahsediyorum:


//---

Bu tür sembollerin sunucuda verileri yoktur ve [Piyasaya Genel Bakış] penceresine eklenmemeleri veya eklenmişlerse listeden çıkarılmaları için onları tanımlamanın bir yoluna ihtiyaç vardır.

Not: Belki de[ Piyasa İzleme] penceresinde sembolleri listeden kaldırma kilidini kaldırmanın bir yolu vardır?

 
Anatoli Kazharski #:

Bu seçeneği denedim. Ne yazık ki çalışmıyor. Bir sembol [Market Watch] penceresine ilk kez eklenirse, henüz üzerinde veri yoktur ve SymbolInfoTick null değerler döndürür.

Elle çalışan semboller elde etmek kolaydır.

  1. Tüm sembolleri birkaç tıklamayla Piyasa İzleme'ye ekleyin.
  2. Birkaç saniye içinde üzerlerindeki tik işaretleri alınacaktır.
  3. Tek bir fare tıklamasıyla zamana göre sıralama.
  4. Del tuşunu kullanarak elde edilen listenin kuyruklarından birini silme.
Tüm bunlar yarım dakika kadar sürecektir.
 
Anatoli Kazharski #:

Bu seçeneği denedim. Ne yazık ki çalışmıyor. Bir sembol [Market Watch] penceresine ilk kez eklenirse, henüz üzerinde veri yoktur ve SymbolInfoTick null değerler döndürür.

CopyXXX işlevlerini de test ettim, ancak zaman aşımı yok ve sunucudan veri bekleme işlemi yaklaşık 45 saniye sürüyor, bu çok uzun.

Bir karakterin kullanılamaz olup olmadığını öğrenmek için hızlı bir yola ihtiyacım var. Bunun gibi durumlardan bahsediyorum:


//---

Bu tür sembollerin sunucuda hiçbir verisi yoktur ve [Piyasa İzleme] penceresine eklenmemeleri veya eklenmişlerse listeden çıkarılmaları için bunları tanımlamanın bir yoluna ihtiyaç vardır.

Not: Belki de[Market Watch] penceresindeki listeden sembolleri kaldırma kilidini kaldırmanın bir yolu vardır?

Yaklaşık 6 yıldır bununla mücadele ediyorum ve geliştiricilerden burada işleri düzene koymalarını istiyorum.

Ne yazık ki, bu sorun çözülmedi ve şu anda herhangi biri bir finansal araca ilk kez eriştiğinde terminalin kilitlendiği durumlar var.

 
Anatoli Kazharski #:

Bir sembolün veri içerip içermediğini nasıl öğrenebilirim, böylece içermiyorsa [Piyasa İzleme] penceresinde bırakmam?

Böyle bir kontrolü bir döngü içinde kullanıyorum:

Ancak bundan sonra, Uzman Danışman grafik üzerindeyken sembolleri [Market Watch] penceresinden tek tek veya hepsini birden manuel olarak kaldıramıyorum:


Son alıntının zamanını kontrol etmeyi deneyin.

SymbolInfoInteger(name, SYMBOL_TIME);

Eğer 0 ise veri yok demektir.

Az önce açık grafiklere göre kontrol ettim.

2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) NZDUSD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EURGBP 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) GBPUSD 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) POZ3 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EDH4 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) BRZ3 1970.01.01 00:00:00
 
Sunucular arasında geçiş yaparak ek veri almak mümkündür. Bunun kod aracılığıyla uygulanmasının mümkün olup olmadığını bilmiyorum.
 
Nauris Zukas #:
Sunucular arasında geçiş yaparak ek veri almak mümkün. Bunu kod aracılığıyla uygulamanın mümkün olup olmadığını bilmiyorum.

"Sunucular arasında" derken "brokerlar arasında" demek istiyorsanız, profillerle oynamaya çalışmadığınız sürece pek mümkün değil.

Ancak bir brokerın farklı sunucuları arasında geçiş yapmam gerekseydi (Open'da çok sayıda, Finam'da iki tane vardı), bunu iptables/nftables ve bash komut dosyalarım aracılığıyla yapardım. Ama burada benim için daha kolay, Linux'um var.

 
JRandomTrader #:

Eğer "sunucular arasında" derken "brokerlar arasında" demek istiyorsanız.


.

 
Nauris Zukas #:


Evet, prensipte bu mümkündür.

Ancak, MQL programından sunucunun adını ve ip'sini öğrenmenin bir yolu olmadığından, sunucuları değiştirerek ve bağlantının hangi ip'ye gittiğini kontrol ederek bunları manuel olarak bulmanız gerekecektir.

Daha sonra, güvenlik duvarının yapılandırmasında değişiklikler yaparak, bazı sunuculara bağlantıyı yasaklamak (burada zaman aşımını önlemek için paketleri düşürmek değil, yeniden paketlemek gerekir) ve MT'yi başka bir sunucuya geçmeye zorlamak mümkündür.

Tekrar ediyorum, bunu Linux altında yapmak benim için zor değil, ancak Windows'ta nasıl yapılacağını hayal edemiyorum.

 
Alexey Viktorov #:

Son alıntının zamanını kontrol etmeyi deneyin.

0 ise veri yok demektir.

Az önce açık grafiklere baktım.

Bu aynı zamanda benzer bir durum için de geçerlidir:

Bu seçeneği denedim. Ne yazık ki uymuyor. Bir sembol [Market Watch] penceresine ilk kez eklenirse, henüz üzerinde veri yoktur ve SymbolInfoTick null değerler döndürür.

Keneler nadiren gelirse, bu tür tüm semboller hariç tutulacaktır.

fxsaber #:

Elle çalışan semboller elde etmek kolaydır.

  1. Tüm sembolleri birkaç tıklamayla Piyasa İzleme'ye ekleyin.
  2. Birkaç saniye içinde üzerlerindeki tik işaretleri alınacaktır.
  3. Tek bir fare tıklamasıyla zamana göre sıralama.
  4. Del tuşunu kullanarak elde edilen listenin kuyruklarından birini silme.
Tüm bunlar yarım dakika kadar sürecektir.

Hayır. Tam otomatiğe ihtiyacınız var.

Vladimir Pastushak #:

Zaten 6 yıldır bununla mücadele ediyorum ve geliştiricilerden buraya bir düzen getirmelerini istiyorum.

Ne yazık ki bu sorun çözülmüş değil ve şu anda herhangi biri bir finansal araca ilk kez eriştiğinde terminalin kapandığı durumlar var.

Bunu sadece aşağıdaki fonksiyonları çağırırken fark ettim:

  • Bars()
  • iBars()
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT)

//---

Terminal geliştiricileri:

1. Ticaret sunucusunda veri olmadan sembol ekleme olasılığını hariç tutun.

2. Market Watch] penceresinden sembol silme engellemesini devre dışı bırakmayı mümkün kılın veya bir hata ise düzeltin. Şimdi sadece terminali yeniden başlatarak yapılabilir.

3. CopyXXX gibi işlevler için, zaman aşımını (sunucudan veri beklemek için maksimum süre) ayarlamak için ek bir isteğe bağlı parametre ekleyin.

Bunu şu anda yeniden üretemiyorum. Şimdiye kadar gecikme olmadan çalışıyor. Ancak bazı durumlarda olabiliyor gibi görünüyor.

4. Aşağıdaki durumlarda Bars(), iBars(), SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT) fonksiyonlarını kullanırken sonsuz bekleme ile ilgili hatayı düzeltin:

  • sunucuya bağlantı yok
  • sembol hakkında veri yok

Programı çizelgeden silme girişimi terminalin birkaç dakika boyunca kilitlenmesine neden olabilir.

5. Sunucuya bağlantı yoksa fonksiyonları kullanırken sonsuz bekleme ile ilgili hata düzeltildi:

  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_FIRSTDATE)
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_LASTBAR_DATE)
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE)

Bu durumda, zaman aşımını (sunucudan veri beklemek için maksimum süre) ayarlamak için isteğe bağlı ek bir parametre de ekleyebilirsiniz.

//---

Not: Şimdiye kadar CopyXXX gibi fonksiyonlarla veri kontrolü yapan varyantta karar kıldım. Ancak yukarıda açıklanan sorunun tekrar ortaya çıkıp çıkmayacağını izleyeceğim.