MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 557
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
OrderSelect() terminal içinde yürütülür, sunucuya herhangi bir istek yapılmaz. Bu nedenle, her işarette sipariş listesine erişmekte yanlış bir şey yoktur. Çoğu danışman bunu yapar.
Ancak diziyle ilgili soru zaten programın mimarisine atıfta bulunuyor. Çok sayıda siparişle çalışan karmaşık bir Uzman Danışman söz konusu olduğunda, bu basitçe gereklidir. EA basit mantıkla tek bir sıra ile çalışırsa, dizi gereksiz hale gelir.
Sadece bir dizi emir olsa bile, OrderSelect()'i çağırmadan yapamayacağınız gerçeğini açıklığa kavuşturmaya değer. Sonuçta, her tikte bu düzenin hala var olup olmadığını kontrol etmek gerekir. Ayrıca ayarlarını değiştirebilir.
Çocuklar, nasıl çözeceğimi ve nereden başlayacağımı söyleyin!
Örneğin: Çok fazla 0.01 olan 15 sipariş var. Bir noktada 0,07 hacimli bir anlaşmayı/anlaşmaları kapatmak gerekir.
Soru, bir OrderClose(..) ile 7 siparişin veya 0.07 lotluk bir hacmin nasıl kapatılacağıdır.
Hemen 0,07 koyarsanız, 0,01 hacimli işlemleri görmez.
Programlamada yeniyseniz
CounS şeklinde bir sayacın nasıl yapılacağını önerdiler.
Dakikada 0,01 lotluk üç işlem kapatılmalıdır. Şimdi soru, tüm siparişlerin sırayla hesaplanması için nasıl dönüştürüleceği ortaya çıktı.
( int i = OrdersTotal ()- 1 ; i>= 0 ; i--){ anlamına geliyorsa, son siparişlerden sırayla git,
Eğer for(int p=0; p<OrdersTotal(); p++){ ise, birinciden bire kadar.
Sayaç çalışır, ancak parti büyüklüğü örneğin 0,15 olduğunda, 0,03 lot ile kapanmaz, ancak her dakika 0,01 ile kapanır.
Ne eklemeyi önerirsiniz?
Sipariş sayısı ve parti büyüklüğü ne olursa olsun toplam parti büyüklüğünün bir kısmını kapatmak nasıl mümkün olur?CounS şeklinde bir sayacın nasıl yapılacağını önerdiler.
Dakikada 0,01 lotluk üç işlem kapatılmalıdır. Şimdi soru, tüm siparişlerin sırayla hesaplanması için nasıl dönüştürüleceği ortaya çıktı.
( int i = OrdersTotal ()- 1 ; i>= 0 ; i--){ anlamına geliyorsa, son siparişlerden sırayla git,
Eğer for(int p=0; p<OrdersTotal(); p++){ ise, birinciden bire kadar.
Sayaç çalışır, ancak parti büyüklüğü örneğin 0,15 olduğunda, 0,03 lot ile kapanmaz, ancak her dakika 0,01 ile kapanır.
Ne eklemeyi önerirsiniz?
Sipariş sayısı ve parti büyüklüğü ne olursa olsun toplam parti büyüklüğünün bir kısmını kapatmak nasıl mümkün olur?Böyle bir görevi ayarlarken (bu arada çok garip), "Hesap Geçmişi" listesiyle çalışmanız gerekir. Her yeni iterasyonda, bu listeyi gözden geçirmeli ve mevcut dakika içinde kapatılan emirleri bulmalı, hacimlerini toplamalısınız. Hacim yeterli değilse, bir şekilde gerekli olanları (ihtiyacınız kadar; bu yüzden nasıl diye sormayın, bu sizin için bir soru) sıralayın ve tek bir sıra alın. 0.01'de kapatın. Bir sonraki yinelemede, her şey yeniden.
Böyle bir görevi ayarlarken (bu arada çok garip), "Hesap Geçmişi" listesiyle çalışmanız gerekir. Her yeni iterasyonda, bu listeyi gözden geçirmeli ve mevcut dakika içinde kapatılan emirleri bulmalı, hacimlerini toplamalısınız. Hacim yeterli değilse, bir şekilde gerekli olanları (ihtiyacınız kadar; bu yüzden nasıl diye sormayın, bu sizin için bir soru) sıralayın ve tek bir sıra alın. 0.01'de kapatın. Bir sonraki yinelemede, her şey yeniden.
Yapmaya çalışacağım! Teşekkür ederim
Terminalden posta mesajları göndermeyi yapılandıramıyorum
eskiden mail.ru üzerinden çalışıyordum, şimdi ben de kayıt oluyorum, test mesajı kaybolmuyor
bununla ilgilenen var mı?
kendiniz için (satılık değil), posta ile ilgili sorunların doğru şekilde ele alınması:
1) localhost'ta iletecek, teslimatı garanti eden ve yetkilendirme ve istenmeyen e-posta koruması ile akıllı hale gelmeyen bir posta göndericisi kurun. Aksi takdirde, danışmanlar çok hızlı bir şekilde her türlü "kara" listeye girerler.
Zor değil - yerleşik bir win smtp ve basit ayarlarla ücretsiz olanlar var, kendiniz yazabilirsiniz :-)
2) SendMail() için bir alternatif kullanın. Tüm süreci kontrol etmek için etiketler, bayraklar, isteğe bağlı olarak html ve resimlerle daha makul raporlar gönderin.
1+2'yi bir araya getirdiğinizde toplam 3 :-) elde edersiniz, bu çok makul ve istikrarlı bir çözümdür.
posta gönderme hakkında daha fazla bilgi: https://www.mql5.com/ru/blogs/post/718364
-----
SendMail ve MT kurulumunun özellikleri hakkında yardıma ihtiyacınız varsa, ekran görüntüleri, kaynaklardan alıntılar, hata teşhisi ekleyin.
böylece sadece bir "yeraltı vuruşu" değildi
Özel bir işlevden çağrıldığında "TimeCurrent()" öğesinin son tik saatini döndüreceğini doğru anlıyor muyum?
Evet
Selamlar!
Bir siparişe numarasına göre OrderSelect komutunu kullanarak ulaşabilirsiniz.
Soru şu ki, hepsini sıralamamak için mevcut siparişlerin sayısını önceden bilmek mümkün müdür? Örneğin, yeni bir sipariş açarken bu numarayı unutmayın.
Anladığım kadarıyla bu numara 1'den başlayarak sıralanıyor. Nüanslar nelerdir?
Şimdiden teşekkürler.
Selamlar!
Bir siparişe numarasına göre OrderSelect komutunu kullanarak ulaşabilirsiniz.
Soru şu ki, hepsini sıralamamak için mevcut siparişlerin sayısını önceden bilmek mümkün müdür? Örneğin, yeni bir sipariş açarken bu numarayı unutmayın.
Anladığım kadarıyla bu numara 1'den başlayarak sıralanıyor. Nüanslar nelerdir?
Şimdiden teşekkürler.
SiparişGönder
SiparişSeç
Beynimi kırdım lütfen yardım edin!
Bir korelasyon hesaplama bloğu yazdı. Ancak OANDA ve Investing.com çok farklı sonuçlar veriyor! Ve bu komik - ve birbirleriyle örtüşmüyorlar!
nerede hatalıyım?
Mevcut döviz çifti EURUSD, GBPUSD ile korelasyonu kontrol ediyorum.
harici dize SubSymbol = "GBPUSD";
harici int korelasyon_zamanı = 24; // seçilen döviz çiftlerinin korelasyonunun kontrol edilmesi için kaç saat
.....
// -------------------------- Korelasyon Hesaplama Bloğu --------------------- - ----------------
int nokta = 15;
int barlar_numarası = MathRound(korelasyon_zamanı*60/dönem);
doublesymbol_avg = 0;
double subsymbol_avg = 0;
çift sembol_fiyat[], altsembol_fiyat[];
çift x,y;
int j;
int kaydırma = 0;
ArrayResize (symbol_price, bar_number);
ArrayResize(subsymbol_fiyat, barlar_numara);
için (j=0; j < bar_number; j++)
{
symbol_price[j] = (iHigh(NULL,period,j+shift) - iLow(NULL,period,j+shift))/2;
subsymbol_price[j] = (iHigh(SubSymbol,period,j+shift) - iLow(SubSymbol,period,j+shift))/2;
symbol_avg = symbol_avg + symbol_fiyat[j];
subsymbol_avg = subsymbol_avg + subsymbol_fiyat[j];
}
symbol_avg = symbol_avg/bars_number;
subsymbol_avg = subsymbol_avg/bars_number;
çift ss_xx = 0;
çift ss_xy = 0;
çift ss_yy = 0;
için (j=0; j < bar_number; j++)
{
x = sembol_fiyat[j] - sembol_avg;
y = altsembol_fiyat[j] - altsembol_avg;
ss_xy = ss_xy + x*y;
ss_xx = ss_xx + x*x;
ss_yy = ss_yy + y*y;
}
çift korelasyon = ss_xy/MathSqrt(ss_xx*ss_yy);
Alert(korelasyon, " ", bar_sayı);
ArrayFree(sembol_fiyat);
ArrayFree(altsimge_fiyat);
// -------------------------- Korelasyon hesaplama bloğunun sonu -------------------------- -------------