Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Code Base'de yeni bir 3.09 sürümü yayınladı, indirebilirsiniz.
Biraz daha geliştirebilirsiniz.
if(ObjectFind(0,nm)<0) ObjectCreate(0,nm,OBJ_VLINE,0,t1,2);
Bu tür yapılarda ObjectFind() açıkça gereksizdir. ObjectCreate() ile oluştururken, listede isme göre arama yapmak ve ya yeni bir nesne oluşturmak ya da mevcut olanın bağlantı noktalarının parametrelerini değiştirmek benzer olacaktır.
.
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,false);
MQL programından oluşturulan nesneler için bu özellik false olarak zorlanır.
Benzer şekilde, OBJPROP_WIDTH değerini değiştirmenin bir anlamı yoktur, zaten 1'e eşit olacaktır.
Ölçümlerime göre bu düzenlemeler derleme süresini yaklaşık %10 azaltıyor.
Teşekkürler. Bunu aklımda tutacağım. Şu anda bir şey üzerinde çalışıyorum. Bir aksaklık var.
Üzerinde sadece ızgara olan 8 grafik açık.
Ağ bağlantısının 5 dakikalığına kesildiğini simüle ediyorum. Ağ açıldıktan sonraki görüntü bu. 2 grafik çöküyor.
Izgara sürüm 4.01'in yeni bir sürümünü ekliyorum.
Teşekkürler. Bunu aklımda tutacağım. Şu anda bir şey üzerinde çalışıyorum. Bir aksaklık var.
Üzerinde sadece ızgara olan 8 grafik açık.
Ağ bağlantısının 5 dakikalığına kesildiğini simüle ediyorum. Ağ açıldıktan sonraki görüntü bu. 2 grafik çöküyor.
Izgara sürüm 4.01'in yeni bir sürümünü ekliyorum.
Bu, terminal mimarisinin ve gösterge algoritmasının bir sonucudur. Gösterge sembol akışında yürütülür, yani hesaplanması sırasında geçmişle ilgili birçok işlem imkansızdır: tiklerin işlenmesi, diğer göstergelerin hesaplanması, sunucu ile geçmiş senkronizasyonu, sembol zaman dilimlerine göre geçmiş oluşturma veya yükleme vb.
Grid göstergesi uzun bir süre için hesaplandığından ve diğer sembol zaman dilimlerinden veri kullandığından, herhangi bir hata durumunda hesaplamasının kesilmesi arzu edilir. Cidden kodu yeniden yazmayacaksanız, bunu bu şekilde yapabilirsiniz:
bool isNewBar_i(datetime date,ENUM_TIMEFRAMES timeFrame,bool& error)
{
...
else
{
Print("Timeframe ",fTimeFrameName(timeFrame)," is not ready");
error=true;
}
ve böylece:
//--- определимся с цветом линии
if(_Period<PERIOD_H1) if(isNewBar_i(time[i],PERIOD_H1,error) && _Period<PERIOD_M30) line_color=new_hour;
if(_Period<PERIOD_D1) if(isNewBar_i(time[i],PERIOD_D1,error) && _Period<PERIOD_H4 ) line_color=new_day;
if(_Period<PERIOD_W1) if(isNewBar_i(time[i],PERIOD_W1,error) && _Period<PERIOD_D1 ) line_color=new_week;
if(_Period<PERIOD_MN1)if(isNewBar_i(time[i],PERIOD_MN1,error)&& _Period<PERIOD_MN1) line_color=new_mon;
//---
if(error) return(0);
Bu, terminal mimarisinin ve gösterge algoritmasının bir sonucudur. Gösterge sembol akışında yürütülür, yani hesaplama sürecinde geçmişle birçok işlem imkansızdır: tiklerin işlenmesi, diğer göstergelerin hesaplanması, geçmişin sunucu ile senkronizasyonu, sembol zaman dilimlerine göre geçmiş oluşturma veya yükleme vb.
Bu akış kavramını anlayamıyorum ve veri erişimi hakkındaki yardımı 50 kez okudum (( komut dosyası orada örnek olarak verilmiştir. Ve yürütülmesi yaklaşık bir dakika sürüyor (uzun bir süre), ama görünüşe göre almaya başladım. Doğru anladım mı, gösterge hesaplanırken, yani işlev yürütülmeye başladığında
int OnCalculate () {
bilgisayarın (terminalin) tüm kaynakları bu göreve verilir ve görev yürütülene (tamamlanana) kadar
return(rates_total); }
Aşağıdakilerden hiçbirini yapmamalısınız:
- eksikse bu sembolle geçmişi okumaya çalışın
- farklı bir zaman dilimi talep edin
- başka bir sembol talep edin
Sanırım programı nasıl yeniden yapacağımı anladım, ilk çağrıda tüm satırları ayarlamanız ve if(prev_calculated==0)'a kadar unutmanız gerekiyor.
Doğru mu?
S.Y.
Renat'ın değerlendirmesine göre 5. seviyeye sahibim :-)) , https://www.mql5.com/ru/forum/1165/page3 bir adım daha ileri gitti)))
Kod tamamen yeniden yazıldı. Başka bir zaman dilimi istenmiyor.
eğer sakıncası yoksa. Unlimit penceresinde mac. çubuklarını ayarlayın ve M15, M5 ve M1'den geçin. sonucu burada günlüğe gönderin. M1'de bir sorunum var - servise yazdım. Sadece bende mi yoksa herkeste mi olduğunu görmek istiyorum.
işte günlüğüm.
2010.06.17 11:39:55 Grid (EURUSD,M1) Hata veya ilk çalıştırma 1293476 çubuk için Time= 1.2 sn ObjectsTotal= 48010 _time= 2002.10.25 06:41:00
2010.06.17 11:39:52 Grid (EURUSD,M5) Hata veya ilk çalıştırma Time= 0.847192 bar için 0 sn ObjectsTotal= 423 _time= 2010.06.02 21:35:00
2010.06.17 11:39:48 Grid (EURUSD,M15) Failure or first run Time= 0.0 sec for 285186 bars ObjectsTotal= 962 _time= 2010.05.04 22:00:00
şimdiden teşekkürler. grid sürümü 4.11
Bu iş parçacığı kavramını anlayamıyorum ve veri erişimi hakkındaki yardımı 50 kez okudum (( kod orada örnek olarak verilmiştir. Ve yürütülmesi yaklaşık bir dakika sürüyor (uzun bir süre), ama sanırım anlamaya başlıyorum. Göstergenin hesaplaması devam ederken, yani fonksiyonun yürütülmeye başladığını doğru anlıyor muyum?
int OnCalculate () {
tüm bilgisayar (terminal) kaynakları bu göreve verilir ve görev yürütülene (bitirilene) kadar
return(rates_total); }
Aşağıdakilerden hiçbirini yapmamalısınız:
- eksikse bu sembolün geçmişini okumaya çalışmak
- başka bir zaman dilimi talep edin
Bunu talep edebilirsiniz, ancak veriler eksik veya yetersizse, OnCalculate() içinde beklemenin bir anlamı yoktur. Mevcut sembol için diğer göstergelerin verileriyle benzer şekilde.
- başka bir sembol talep etmek
.
Sanırım programı nasıl yeniden yapacağınızı anlıyorum, ilk çağrıda tüm satırları ayarlamanız ve if(prev_calculated==0) unutmanız gerekiyor.
eğer çok fazla sorun olmazsa. Unlimit penceresinde mac. çubuklarını ayarlayın ve M15, M5 ve M1'den geçin. Günlükte olacak sonucu buraya gönderin. M1'de bir sorunum var - servise yazdım. Sadece sorunun bende mi yoksa herkeste mi olduğunu görmek istiyorum.
2010.06.17 11:58:54 6op0k (EURUSD,M5) Başarısızlık veya ilk çalıştırma Zaman=0.847196 çubuk için 0sn ObjectsTotal=605_time=2010.06.02 21:55:00
2010.06.17 11:58:44 6op0k (EURUSD,M15) Hata veya ilk çalıştırma 285187 çubuk için Time=0.0sn ObjectsTotal=1108_time=2010.05.04 22:15:00
2010.06.17 11:58:59 6op0k (EURUSD,M1) Hata veya ilk çalıştırma 4009008 çubuk için Zaman=0.1sn ObjectsTotal=403_time=2010.06.15 07:45:00
2010.06.17 11:58:54 6op0k (EURUSD,M5) Hata veya ilk çalıştırma 847196 çubuk için Time=0.0sec ObjectsTotal=605_time=2010.06.02 21:55:00
2010.06.17 11:58:44 6op0k (EURUSD,M15) Hata veya ilk çalıştırma 285187 çubuk için Time=0.0sec ObjectsTotal=1108_time=2010.05.04 22:15:00
Teşekkür ederim. bu, sonunda her şeyi doğru yazdığım ve "gösterge" nin gerçekten istediğim gibi çalıştığı anlamına geliyor. yaşadığım başarısızlık terminalin bir sorunu (her şey normal). _time=2010.06.15 07:45:00). geliştiricilerin servis dex'inde sessiz kalması üzücü. en azından birkaç kelime yazarlardı (( gibi
Sorun çözüldü...sanıyoruz...teşekkürler
teşekkürler. demek ki sonunda her şeyi doğru yazmışım ve "gösterge" gerçekten istediğim gibi çalışıyor. yaşadığım hata terminalle ilgili bir sorun (iyi gidiyorsunuz. _time=2010.06.15 07:45:00). geliştiricilerin servis dex'inde sessiz kalması üzücü. en azından birkaç kelime yazarlardı (( gibi
Sorun giderildi...sanıyoruz...teşekkürler.
ve düzeltilebilir:
H1 gravfik üzerinde dikey veya yatay bir çizgi taşımak için, daha sonra başka bir zaman aralığına geçerseniz, gösterge ile ilgili olmayan çizgiler silinir.
Bu, fiyat adımını görsel olarak belirlemek için geçmişi kontrol etmek için çok uygun bir göstergedir, ancak daha küçük bir zaman aralığına geçerken eski zaman aralıklarına konulan işaretlerin (dikey ve yatay çizgiler) kaybolması nedeniyle rahatsız edici hale gelir.
Gösterge, terminal pencerelerinde fiyat ölçeğinin kullanılabilir görüntülenmesi sorununu mükemmel bir şekilde çözdü.
3021'e kadar olan derlemelerde derleme hiçbir hata göstermiyor ve her şey düzgün çiziliyor (hatta önceden derlenmiş sürümü terminalin yeni bir derlemesine atsanız bile).
Sonraki yapılarda derleme herhangi bir hata göstermez, ancak terminalde toplayıcı dikey işaretleme çizmez ve günlüklerde şöyle yazar: 1 sızdırılmış dizeler kaldı
Satırı yorumladıktan sonra:
StringConcatenate(line_name,IntegerToString(str.hour,2,'0'),":":",IntegerToString(str.min,2,'0'),"_N",line_counter);
terminal günlüklerindeki hata kaybolur (çizgiler çizilmemesine rağmen).
Hangi yolu kazmalı? Harika bir araç nasıl yeniden canlandırılır?