初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 441

 

何が間違っているのか、教えていただけませんか?

価格が最後にMAを越えてから、ゼロバーを除いて何本経過したかを計算する必要があります。

   if(Bars>1400)
     {
      int Stop;
      double MATcycle;
      for(int i=0;i!=1000 || Stop!=1; i++)
        {
         MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
         if(MATcycle<High[i+1] && MATcycle>Low[i+1])
           {
            Stop=1;
            Print("MATcycle=",MATcycle," i=",i);
           }
         else return (0);
        }

 
-Aleks-:

何が間違っているのか、教えていただけませんか?

あなたは - 価格が最後にMAを越えてから何バーが経過したかを数える必要があります - ゼロバーを含まず。

   if(Bars>1400)
     {
      int Stop;
      double MATcycle;
      for(int i=0;i<1000 || Stop==1; i++)
        {
         MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
         if(MATcycle<High[i+1] && MATcycle>Low[i+1])
           {
            Stop=1;
            Print("MATcycle=",MATcycle," i=",i);
           }
         else return (0);
        }

私が理解する限り、クロスを識別してstop=1を設定した時点で、サイクルから即座に終了があります。OK、それならさらに踏み込んで、クロスが発生したローソクの番号を覚えておく必要があります。すなわち

自分で書いた方が簡単です。

for( int i = 1; i < 1000; i++ )
{
 iMaValue = ...;   // Значение МА на i свече
 if( iMaValue < High[ i ] && iMaValue > low[ i ] )
 {
  num = i;   // Запоминаем номер свечи, на котором произошло пересечение
  break;     // Выходим из цикла
 }
}

これは、あなたがキャンドルの番号を特定したことです。数= 2と現在のものを考慮しない場合は、交差1キャンドルが形成されたので(またはあなたが好きなようにそれを解釈する)。

 
Tapochun:

私が理解する限り、クロスオーバーを確認し、stop=1を設定した時点で、サイクルから即座に終了があります。よし、それならもっと踏み込んで、クロスオーバーが発生したローソク足の番号を覚えておく必要がありますね。すなわち

自分で書いた方が簡単です。

これは、あなたがキャンドルの番号を特定したことです。数字=2で現在を無視すれば、クロスから1本のローソク足が形成されたことになる(まあ、好きなように解釈すればいいのだが)。

ありがとうございます。


int Stop=0;
   if(Bars>1400)
     {
     
      double MATcycle;
      for(int i=1;(i!=1000 || Stop==0); i++)
        {
         MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
         if(MATcycle<=High[i] && MATcycle>=Low[i])
           {
            Print("MATcycle=",MATcycle," i=",i);
            Stop=i;
            break;
           }
        }
     }

 
alph:
リアルなテスターフィギュアなのかどうか、教えてください。また、3,000円のデポで1年というのは、良い結果なのか悪い結果なのか?
答えは簡単で、EAをテストしている場合、テスターの性能は本物ではありません。ストラテジーテスターは、トレーダーがATCのパフォーマンスをチェックしたり、オンラインでマニュアルストラテジーをテストするために使用します。
 
-Aleks-:

ありがとうございました。


int Stop=0;
   if(Bars>1400)
     {
     
      double MATcycle;
      for(int i=1;(i!=1000 || Stop==0); i++)
        {
         MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
         if(MATcycle<=High[i] && MATcycle>=Low[i])
           {
            Print("MATcycle=",MATcycle," i=",i);
            Stop=i;
            break;
           }
        }
     }

そのように書いてはいけません。なぜなら、最後の1000バーの間にクロスオーバーがなかった場合、まず、ループが継続され、次に、ストーリーが終了してクロスオーバーがない場合、ストップ=0なので、ループからの出口がないため、ループ/エラーになることがあります。上に書いたような書き方をしたほうがいいんです。

 
Tapochun:

そのように書いてはいけません。なぜなら、最後の1000バーの間にクロスオーバーがなかった場合、第一に、サイクルは継続され、第二に、ループ/エラーになる可能性があります。ストーリーが終了してクロスオーバーが発生しなかった場合、Stop = 0なので、サイクルからの出口がないことになるからです。上に書いたような書き方をしたほうがいいんです。

or "記号は機能しません。式によると、ループは1000小節でオーバーシュートするか、必要な結果が見つかり次第、終了します。それとも、必要な結果、つまりMAが交差すれば、1000バーより前に終わるのでしょうか?
 
-Aleks-:
or」記号は機能しないのでしょうか - 条件では、1000本のバーに達するか、目的の結果が見つかり次第終了するとあります。またはそれは望ましい結果、すなわちMAの交差の場合、1000バー前に終わるのだろうか?
|| は、括弧内の条件の少なくとも1つが真であれば、サイクルを繰り返すことを意味します。 したがって、i >= 1000 であっても stop = 0 であれば、サイクルは続き、i は増分し続けるので、(履歴から外れた場合に)間違った MA 値を引き起こすことになります。そして、break演算 子は、目的の結果が出たときにループを終了させる役割を担っている。
 
Tapochun:
|| は、括弧内の条件の少なくとも一つが真であれば、ループが繰り返されることを意味します。したがって、i >= 1000 であっても stop = 0 であれば、ループは継続し、i は増分し続け、(履歴に異常値がある場合)間違った MA 値を引き起こすことになります。また、break演算 子は、目的の結果を見つけたときにループを終了させる役割を担っている。
了解です!分かりやすい説明ありがとうございます。どちらかの条件が悪いとループが止まってしまうと思ったのですが...。
 

こんにちは2015.09.19_02:13AM MSCです。ArrayResize()関数の 中で、コンパイラは次のように記述しています。

は,配列のサイズと逆である.int と書いても書かなくても,カンマが必要である.intを書かないと、「-」と表示されます。

タイプ無しで変更しました。そして、&参照と角括弧を削除したところ、うまくいきました。
警告:普通に書いた場合、 -- コンパイラが書いた場合:識別子を隠す

グローバルレベルの宣言です。そして、グローバルレベルでの識別子宣言を削除したところ、-が書き込まれました。

エラー、未宣言の識別子です。そして、配列のHigh[]とLow[]をHighP[]とLowP[]に変更しました。ない

を助けました。コンパイラが同じことを書いている。02:27 MSC。スクリーンショットのファイルを添付します。

ファイル:
 
Николай Никитюк:

こんにちは2015.09.19_02:13AM MSCです。ArrayResize()関数の 中で、コンパイラはとにかくこう書きます。

は,配列のサイズと逆である.int と書いても書かなくても,カンマが必要である.intを書かないと、「-」と表示されます。

"タイプなし "です。そして、&参照と角括弧を削除しました〜!助かりました。
警告:普通に書いた場合、 -- コンパイラが書いた場合:識別子を隠す

グローバルレベルの宣言です。そして、グローバルレベルでの識別子宣言を削除したところ、-が書き込まれました。

エラー、未宣言の識別子です。そして、配列のHigh[]とLow[]をHighP[]とLowP[]に変更しました。ない

を助けました。コンパイラが同じことを書いている。02:27 MSC。スクリーンショットのファイルを添付します。

  1. 画像はこのように挿入してください:フォーラム:画像の挿入方法
  2. アドバイスされていることを全く読まないのですか?

    トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

    初心者の方からの質問

    カルプトフ ウラジミール さん 2015.09.17 18:46

    1. ArrayResize のスペルが間違っている。そうあるべきなのです。
      //--- устанавливаю размеры массивов с запасом (reserve)
      ArrayResize(mrate,16,9);
      ArrayResize(maVal,16,9);
      ArrayResize(fVal,3,2);
      ArrayResize(zVal,3);
    2. そして、配列に時系列フラグを設定すると、次のようになります。
      //--- массив максимальных цен баров
      ArraySetAsSeries(High,true);
      //---  
      ArraySetAsSeries(Low,true);


理由: