Eine Frage an MQL-Experten - Seite 14

 

Weiterführung der Frage:

Der Algorithmus für eine solche Bedingung ist wie folgt implementiert, hier ist der Filter selbst:

//================фильтр   - начало схождения ===================
 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-го фильтра ======================

Und hier ist die eigentliche Zugangsbedingung:

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

Aber der Expert Advisor scheint die Filterbedingung nicht zu sehen! Sie eröffnet weiterhin Positionen, ohne darauf zu achten

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

Ich verstehe nicht, warum. Wiederholte Überwachung der Online-Eröffnung von Positionen. Aber der Filter funktioniert nicht! Der Expert Advisor sieht sie nicht. Bitte sagen Sie mir, wo es falsch ist?

Und noch eine Frage. Was ist der richtige Weg, um in globalen Variablen setzen (es ist die erste Option im Moment)

bool Trade_Filter2=0; oder einfach bool Trade_Filter2;

 
Rita:

die Fortführung der Frage:

...

Geben Sie MA_11, MA_21, DELTA_MA_2 in Coment() aus und sehen Sie, was dort steht. Kommentar() eingefügt nach double DELTA_MA_2...

Der MACD wird aus zwei verschiedenen Zeichen verglichen, sie können sehr unterschiedliche Dimensionen haben.

 

Es gibt einen Kommentar. Der Kommentar ist auf "Filter erlaubt (oder verweigert) die Eingabe" eingestellt), etwa so:

Auf diese Weise hergestellt:

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, "Фильтр Отключен", "\
Ich stelle visuell fest, dass die Linien immer noch auseinanderlaufen und der Kommentar "Filter verbietet die Eingabe" anzeigt! Aber die Eingabe wird trotzdem durchgeführt - der EA beachtet den Filter nicht.

Die Dimensionalität der Werkzeuge ist die gleiche, oder (bei unterschiedlicher Dimensionalität) - programmatisch mit Hilfe von Koeffizienten auf die gleiche reduziert (dies wird im obigen Code nicht gezeigt, um ihn nicht zu überladen). Das ist gut so!

 

Aber double DELTA_MA_2, MA_11, MA_21- werden unter f-i Comment() angegeben

Aber Trade_Filter2 wird in globalen Variablen deklariert! Also, ich denke, in dem Kommentar ist alles richtig gemacht!

 
Deaktivieren Sie Ihren Kommentar für eine Weile und versuchen Sie, ihn von verschiedenen Stellen aus auszugeben. Von der Überprüfung der Filterbedingungen bis hin zur Verwendung des Filters. Auf diese Weise finden Sie die Linie, an der die Verzerrung auftritt.
 
OK, danke, Dimitri! Ich werde versuchen, Ihre Empfehlung nach dem Wochenende umzusetzen.
 
Drucken Sie die Werte aller Ihrer Parameter in Print aus und platzieren Sie sie unmittelbar nach dem Operator, der die Bestellung öffnet.
 

Guten Tag. Nach dem heutigen Update von mt4 kann ich den EA-Code nicht mehr kompilieren. Der Compiler gibt 30 seltsame Fehler aus.

Können Sie mir bitte sagen, warum in den folgenden Zeilen plötzlich Fehler auftreten
Code:

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' - nicht deklarierter Bezeichner Exp_ARBITR_2Line_Spread_002Mod.mq4 125 35

on_off4' - nicht deklarierter Bezeichner Exp_ARBITR_2Line_Spread_002Mod.mq4 140 47

on_off41' - nicht deklarierter Bezeichner Exp_ARBITR_2Line_Spread_002Mod.mq4 142 47

Und wie kann man sie korrigieren?

 
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");
 }

Lässt es sich so kompilieren?

Aber es ist besser so:

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");       

Wenn ich richtig telepathiert habe, sollte dies funktionieren