MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 557

 
Ihor Herasko :

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.

Teşekkür ederim.
 
Rustam Bikbulatov :

Ç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


     int countS = 3 ;
   if (LastTime!= iTime ( NULL , 1 , 0 )){
       for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )){
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()== 321 ){ 
         if ( OrderType ()== OP_SELL ){
           irvb= OrderClose ( OrderTicket (), 0.01 , Ask , 3 ,CLR_NONE);
           LastTime= iTime ( NULL , 1 , 0 ); countS--; if (countS== 0 ) break ;   
          }}}}} 

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?
 
Rustam Bikbulatov :


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.

 
Ihor Herasko :

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

 
harbor :
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

TradeBiff - отправка почты со скриншотами
TradeBiff - отправка почты со скриншотами
  • 2018.05.19
  • Maxim Kuznetsov
  • www.mql5.com
Очень важно получать детальные оповещения о действиях любого робота. Универсальный способ оповещений - это отправка почты. TradeBiff будет следить за изменениями и отправлять вам необходимые отчёты. Таким образом у вас в почтовом ящике получится хороший торговый журнал. Постановка задачи Ставим себя на место заказчика и формулируем задачу...
 
Özel bir işlevden çağrıldığında " TimeCurrent() " öğesinin son işaretin zamanını döndüreceğini doğru anlıyor muyum?
 
Asa saas :
Ö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.

 
Decromor :

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 -------------------------- -------------