MQL uzmanları için soru - sayfa 14

 

sorunun devamı:

Böyle bir durum için algoritma aşağıdaki gibi uygulanır, işte filtrenin kendisi:

 //================фильтр   - начало схождения ===================
 if (FILTER_ ) { //если выключатель   фильтра включен
//------------------------------------------------ 
//задаем вычисление ценовых линий на втором   баре
double   MA_11= ( iMA (Symbol_1, Period (),per2, 0 ,ma_method,Price, 2 )-
                 iMA (Symbol_1, Period (),per1, 0 ,ma_method,Price, 2 )) ;  
double   MA_21= ( iMA (Symbol_2, Period (),per2, 0 ,ma_method,Price, 2 )-
                 iMA (Symbol_2, Period (),per1, 0 ,ma_method,Price, 2 ))  ;    
double ДЕЛЬТА_MA_2 = MathAbs (MA_11 - MA_21); //разность между ценовыми линиями на 2 баре
//
if (ДЕЛЬТА_MA_2 >=  ДЕЛЬТА_MA) // если линии начинают сходится, разрешаем вход
       Trade_Filter2= true ;       else Trade_Filter2= false ; 
//-------------------------------------------------                 
         }   // выключатель   фильтра включен
//================== конец блока 2-го фильтра ======================

Ve işte giriş koşulu:

 if   ( TradeDOWN== true   && .... ) {             //если условия соответствуют заданным 
if (Trade_Filter2== true || ! FILTER_ ) {       //  фильтр включен/выключен  
 ..... открвываем позиции: продаем первый инструмент и покупаем второй    

Ancak danışman, filtre koşullarını görmüyor gibi görünüyor! Daha önce olduğu gibi, dikkat etmeden pozisyonlar açar.

if (Trade_Filter2== true || ! FILTER_ ) { .....

nedenini anlamıyorum. Çevrimiçi pozisyonların açılışını tekrar tekrar izledi. Ama filtre çalışmıyor! Danışman görmüyor ... Söyle bana, lütfen, buradaki yanlışlık nerede?

Ve başka bir soru. Global değişkenleri ayarlamanın doğru yolu nedir (şimdi ilk seçenek var), -

bool Trade_Filter2=0 ; veya sadece Trade_Filter2'yi bool ;

 
Rita :

sorunun devamı:

...

Coment() içinde MA_11, MA_21, DELTA_MA_2 yazdırın ve orada ne olduğunu görün. Yorum() çift DELTA_MA_2'den sonra ekle...

MACD iki farklı sembolle karşılaştırılır, çok farklı boyutlara sahip olabilirler.

 

Bir yorum var. Yorum, aşağıdaki gibi "Filtre girişe izin verir (veya girişe izin vermez)") yazıtlarını içerir:

Şu şekilde yapılır:

string on_off=StringConcatenate  (on_off,
"1-й(текущий)инстр.=",Symbol_1," 2-й инстр.=",Symbol_2," ",.....
"ДельтаТекущая/ДельтаЗаданная = ", ДЕЛЬТА_MA," / ",ДЕЛЬТА, "\n", 
 "MA_1 ",Symbol_1, "= ", MA_1 , "\n",
 "MA_2 ",Symbol_2, "= ", MA_2 , "\n",

 //--------------------------------------------------------------------------------

if (Trade_Filter2==true && FILTER_==true )  
        string  on_off4 = StringConcatenate (on_off4, "Фильтр Разрешает вход", "\n");
if (Trade_Filter2==false && FILTER_==true )  
        string  on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход", "\n");
if (FILTER_==false   )  
        string  on_off42 = StringConcatenate (on_off42, "Фильтр Отключен", "\
Çizgilerin hala birbirinden ayrıldığını ve yorumun "Filtre girişi yasaklıyor" yazdığını görsel olarak gözlemliyorum! Ancak giriş hala uygulanmaktadır - danışman filtreye dikkat etmez.

Aletlerin boyutları aynıdır veya (farklı boyutlarda) - katsayılar yardımıyla programlı olarak aynı düzeye indirgenmiştir (bu, karışıklık olmaması için yukarıdaki kodda gösterilmemiştir)). Bununla - sipariş!

 

Ancak işlevin altında çift DELTA_MA_2, MA_11, MA_21 bildirilir ve Comment()

Ama Trade_Filter2 global değişkenlerde bildirildi! Yani, bence - buradaki yorumda her şey doğru şekilde yapıldı!

 
Yorumunuzu bir süreliğine kapatın ve farklı yerlerden görüntülemeye çalışın. Filtre koşullarının kontrol edildiği yerden kullanıldığı yere kadar. Böylece bozulmanın meydana geldiği çizgiyi bulacaksınız.
 
Tamam, teşekkürler Dmitry! Hafta sonundan sonra önerinizi deneyeceğim.
 
Tüm parametrelerinizin değerlerini Print'te yazdırın ve sipariş açma operatöründen hemen sonra koyun.
 

Tünaydın. Bugünkü MT4 güncellemesinden sonra EA kodu derlenmedi. Derleyici tarafından anlaşılmaz 30 hata üretilir.

Lütfen bana söyle. neden hatalar bu tür satırlarda aniden ortaya çıkıyor?
kod:

 if (Trade_Filter2== true && FILTER_== true )  
         string   on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход" , "\n" );
if (Trade_Filter2== false && FILTER_== true )  
         string   on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход" , "\n" );
if (FILTER_== false    )  
         string   on_off42 = StringConcatenate (on_off42, "Фильтр Отключен" , "\n" );       
'on_off' - bildirilmemiş tanımlayıcı Exp_ARBITR_2Line_Spread_002Mod.mq4 125 35

'on_off4' - bildirilmemiş tanımlayıcı Exp_ARBITR_2Line_Spread_002Mod.mq4 140 47

'on_off41' - bildirilmemiş tanımlayıcı Exp_ARBITR_2Line_Spread_002Mod.mq4 142 47

Ve onları nasıl düzeltebilirim?

 
if (Trade_Filter2== true && FILTER_== true )  
 {
   string on_off4;
  on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход" , "\n" );
 }
if (Trade_Filter2== false && FILTER_== true )  
 {
   string on_off41;
  on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход" , "\n" );
 }
if (FILTER_== false )  
 {
   string on_off42;
  on_off42 = StringConcatenate (on_off42, "Фильтр Отключен" , "\n" );
 }

Bu şekilde mi derleniyor?

Ama böylesi daha iyi:

 string on_off4;
string on_off41;
string on_off42;
if (Trade_Filter2 == true && FILTER_ == true ) on_off4 = "Фильтр Разрешает вход\n" ;
if (Trade_Filter2 == false && FILTER_ == true ) on_off41 = "фильтр Запрещает вход\n" ;
if (FILTER_ == false ) on_off42 = "Фильтр Отключен\n" ;
 
string on_off4, on_off41, on_off42;
if (Trade_Filter2== true && FILTER_== true )  
        on_off4 = StringConcatenate ( on_off4, "Фильтр Разрешает вход" , "\n" );
if (Trade_Filter2== false && FILTER_== true )  
        on_off41 = StringConcatenate (on_off41, "фильтр Запрещает вход" , "\n" );
if (FILTER_== false    )  
        on_off42 = StringConcatenate (on_off42, "Фильтр Отключен" , "\n" );       

Doğru telepati yaptıysam, bu işe yaramalı.