MQLエキスパートへの質問 - ページ 14

 

の続きです。

このような条件下でのアルゴリズムは以下のように実装されており、ここではフィルターそのものを紹介する。

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

そして、こちらがエントリー条件そのもの。

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

しかし、Expert Advisorはフィルターの条件を見ないようです!を気にすることなくポジションをオープンし続けます。

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

その理由がわからない。オンラインポジションの開設を繰り返し監視した。しかし、フィルターが作動しない!?Expert Advisorには表示されません。どこが間違っているのか、教えてください。

そしてもう一つの質問。グローバル変数 に設定する正しい方法は何ですか(現時点では最初の選択肢です)。

bool Trade_Filter2=0; あるいは単に boolTrade_Filter2 とする。

 
Rita:

の続きです。

...

Coment() で MA_11, MA_21, DELTA_MA_2 を出力し、何があるか見てみましょう。DELTA_MA_2 の後にComment() が挿入されています。

MACDは2つの異なるシンボルから比較され、それらは非常に異なる次元を持っている可能性があります。

 

コメントがあります。コメントは "Filter allows (or denies) entry")のように設定されています。

このように作りました。

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, "Фильтр Отключен", "\
目視で確認すると、線はまだ分岐しており、コメントには「フィルターが入力を禁止しています」と表示されているではありませんか。しかし、エントリーはまだ実行されています - EAはフィルタに注意を払いません。

ツールの次元は同じか、(次元が異なる場合) - プログラムで係数を用いて同じになるように縮小する(これは上のコードには示していない、散らかさないようにするため))。それでいいんです!(笑

 

しかし、double DELTA_MA_2, MA_11, MA_21- は、以下のように宣言されている f-i Comment()

しかし、Trade_Filter2グローバル変数 で宣言されています!ということで、コメントではすべて正しくできていると思います

 
しばらくコメントを無効にして、いろいろなところから出力してみてください。フィルターの状態を確認するところから、使用するところまで。そうすれば、歪みが発生するラインを見つけることができます。
 
OK、ありがとう、Dimitri!週末以降、あなたの推薦を利用してみるよ。
 
すべてのパラメータの値をPrintで印刷 し、注文開始オペレータの直後に配置します。
 

こんにちは。今日のmt4のアップデートの後、EAコードのコンパイルができない。コンパイラーから30個の変なエラーが出ている。

以下の行で突然エラーが表示されるのはなぜか、教えていただけませんか。
のコードで表示されます。

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' - 未宣言の識別子 Exp_ARBITR_2Line_Spread_002Mod.mq4 125 35

on_off4' - 未宣言の識別子 Exp_ARBITR_2Line_Spread_002Mod.mq4 140 47

on_off41' - 未宣言の識別子 Exp_ARBITR_2Line_Spread_002Mod.mq4 142 47

そして、それをどう修正するか?

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

このようにコンパイルされるのでしょうか?

でも、こっちの方がいいんですよ。

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

私が正しくテレパシーしていれば、これはうまくいくはずです。