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

 
Mikhail Mishanin :

Gülümsedi) olmamalı)

Eğer savaş - normal bir spread ile ticaret içinse, girdiye "limitini" koymanız ve spread limitin üzerindeyse ticareti görmezden gelmeniz yeterlidir.

Yayılma, devrilme olmadan bile işlemlerle uzatılabilir.

Yayılmam 10 birimden 45'e kadar oldukça fazla yüzüyor

45. ekranı beklemek zorundasın

Aynı zamanda, fonksiyon oldukça tatmin edici olan ortalama 17'yi dikkate alır.

Rollover'dan 1 saat sonra 100-140'a yükseliyor, kodu sürüyorum ve nasıl davrandığını görüyorum.

 
Vitaly Muzichenko :

Ancak şu şekilde yazabilirsiniz:

Doğru çalışması gerekiyor gibi görünüyor.

Bu mantığı sevmiyorum.

Fonksiyona ilk giriş:

res = 0 ;

Bu nedenle koşul

 if (dt.hour== 22 && res<_sp)

bitmiş değil.

Ve sonra bir şeyi araştırmak için bir arzu yoktur. Neden böyle bir koşul?

   if (tc> LONG_MAX - 1 )
genel olarak, tüm mantık benim için net değil.
 
Alexey Viktorov :

Bu mantığı sevmiyorum.

Fonksiyona ilk giriş:

res = 0 ;

Bu nedenle koşul

 if (dt.hour== 22 && res<_sp)

bitmiş değil.

Ve sonra bir şeyi araştırmak için bir arzu yoktur. Neden böyle bir koşul?

   if (tc> LONG_MAX - 1 )
genel olarak, tüm mantık benim için net değil.

1. Bu koşul, süre 22 saat iken, devrildikten sonraki 1 saat içindir. Ancak bu yalnızca ilk başlangıçtadır ve terminal her zaman danışmanla çalışır, bu da bir kez boş olduğu anlamına gelir.

Belki de bir zaman çerçevesi değişikliği durumunda statik olarak bildirilmesi gerekir.

2. if(tc> LONG_MAX -1) = uzun limitler aralık dışındaysa tc değişkenini sıfırlayın. Örneğin, aynı hafta sonu terminal bazen aşırı yüklendiğinden, bunun gerçekleşmesi olası değildir.

---

Kodu değiştirdim, muhtemelen son:

 void OnTick ()
{
 int sp = SymbolInfoInteger ( Symbol (), SYMBOL_SPREAD );
   if (CheckSpr(sp)) {
       // Здесь код отправки
   }
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
bool CheckSpr( int _sp)
{
   static int ts= 0 ;
   static ulong tc= 0 ;
   static int res= 0 ;
   TimeGMT (dt);
   if (res<_sp && ( dt.hour== 22 ||dt.hour== 23 )) { // Если 2 часа после Rollover спред упадёт до нормального - торгуем
       Comment ( "Rollover: Спред: " ,_sp, ", Средний: " ,res, ", Тиков: " ,tc);
       return ( false );
   }
   tc++;
   ts += _sp;
   res =ts/tc;
   if (tc< 500 ) {
       Comment ( "Тиков менее 500: " ,tc, ", Спред: " ,_sp, ", Средний: " ,res);
       return ( false );
   }
   if (res>_sp) {
       Comment ( "Торгуем: Спред: " ,_sp, ", Средний: " ,res, ", Тиков: " ,tc);
       return ( true );
   }
   Comment ( "Не торгуем - спред завышен: Спред: " ,_sp, ", Средний: " ,res, ", Тиков: " ,tc);
   return ( false );
}

PS teste koydum

Not _ kod düzeltildi

----

Not _ _ S. _ S. _ Devir işleminden sonra 1 saat daha eklendi, aksi takdirde bazı işlem masalarında çok yüksek bir spread yazdım.

Son sürüm 20 saat çalıştı ve sonuç gayet iyi

Ortalama günlük spread 10-45 pp, ancak çoğunlukla 10-17, ortalama 19 olarak hesaplandı

Katıldığınız için hepinize teşekkür ederim, eklemek istediğiniz bir şey varsa yazın!

 
Vitaly Muzichenko :

Belki de bir zaman çerçevesi değişikliği durumunda statik olarak bildirilmesi gerekir.

İçeri girdim, çalışması gerekiyor gibi görünüyor, geri almamalıyım), şimdi gerçekten sadece sıfırlama/atama noktaları ile uğraşmanız gerekiyor.

 

Forumda bir konu gördüm ama bulamadım.

Kendinizi çubukta her an açılabilen bir pozisyonla sınırlamanız gerekiyor, şimdi bu seçenek, ama bence "ağır"

 if ( Bars ( Symbol (), PERIOD_CURRENT , Buy.LastOpenTime, TimeCurrent ())== 0 ) return ; // Открывать не более 1 на баре

Kolaylaştırmak için ne ikame edilebilir?

 
Vitaly Muzichenko :

Forumda bir konu gördüm ama bulamadım.

Kendinizi çubukta her an açılabilen bir pozisyonla sınırlamanız gerekiyor, şimdi bu seçenek, ama bence "ağır"

Kolaylaştırmak için ne ikame edilebilir?

"Kendimizi barda her an açılabilen tek bir pozisyonla sınırlamamız gerekiyor..."

Çok genel ifadeler, bu semboldeki çubuk başına bir kez OrderSend gönderebileceğiniz anlamına mı geliyor?

 
Mikhail Mishanin :

"Kendimizi barda her an açılabilen tek bir pozisyonla sınırlamamız gerekiyor..."

Çok genel ifadeler, bu semboldeki çubuk başına bir kez OrderSend gönderebileceğiniz anlamına mı geliyor?

Evet. EA, H1 saatinde çalışır ve 10:17'de bir pozisyon açabilir, 11:00'den önce, yani mevcut çubukta yapılmalıdır - artık açılmayacaktır.

 
Vitaly Muzichenko :

Evet. EA, H1 saatinde çalışır ve 10:17'de bir pozisyon açabilir, 11:00'den önce, yani mevcut çubukta yapılmalıdır - artık açılmayacaktır.

eprst, yine şartlar tam değil bence, "şeytan ayrıntıda gizlidir", basit bir şekilde metin ise

bir pozisyon açtı - "yasaklama bayrağını" ayarlayın ve / veya "zamanı" kaydedin (karşılaştırma için hangisi ve aynısı (kaynak) olursa olsun)

Yeni bir çubuk açıldı - "yasaklama bayrağını" kaldırdı ...

Soru: Ya pozisyon bir şekilde değiştirilmişse?

H1 - 3600.0 için saniye cinsinden yeni bir bar - doTB bölenini nasıl tanımladığıma bir örnek

BARii[].time - M1'li çubukların zamanı ve isteğe bağlı olabilir ve 1'den büyük veya eşitse, farklı "çubuklardan" "zaman" anlamına gelir

 if ( MathFloor (BARii[ 0 ].time/doTB)- MathFloor (BARii[ 1 ].time/doTB)>= 1.0 ) //если бар закрылся
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
Mikhail Mishanin :

eprst, yine şartlar tam değil bence, "şeytan ayrıntıda gizlidir", basit bir şekilde metin ise

bir pozisyon açtı - "yasaklama bayrağını" ayarlayın ve / veya "zamanı" kaydedin (karşılaştırma için hangisi ve aynısı (kaynak) olursa olsun)

Yeni bir çubuk açıldı - "yasaklama bayrağını" kaldırdı ...

Soru: Ya pozisyon bir şekilde değiştirilirse?

H1 - 3600.0 için saniye cinsinden yeni bir bar - doTB bölenini nasıl tanımladığıma bir örnek

BARii[].time - M1'li çubukların zamanı ve isteğe bağlı olabilir ve 1'den büyük veya eşitse, farklı "çubuklardan" "zaman" anlamına gelir

Nedense, bayraklardaki seçenek bana uymadı, ne olduğunu hatırlamıyorum ama yerine

 if ( Bars ( Symbol (), PERIOD_CURRENT , Buy.LastOpenTime, TimeCurrent ())== 0 ) return ; // Открывать не более 1 на баре

Tamam, başka bir uygulama hakkında düşüneceğim

 
Vitaly Muzichenko :

Nedense, bayraklardaki seçenek bana uymadı, ne olduğunu hatırlamıyorum ama yerine

Tamam, başka bir uygulama hakkında düşüneceğim

Ve bu uygulama daha yavaşlar mı? Benzer şekilde, kodum bir "çubukta" veya farklı olanlarda iki kez tanımlar. Sadece benim "true" versiyonumda farklı "çubuklarda", "true" versiyonunuzda bir çubuktayken, == karşılaştırmasını "0" ile özellikle tamsayı ile atlıyorum ve muhtemelen durumu şununla değiştirebilirim: > 0.0 veya > 0.9, düşünmeniz gerekiyor...