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

 
Mike:
1.オールマッチ。
2.そのようなパラメータはありません。
他のスレッドで、この問題はMT4では解決不可能と言われました。:(

2.別ウィンドウでMAが表示されるなんて、どこでパラメータを知ったんだろう。でも...Indicators --> Oscillators --> OscillatorのMoving Averagesを取ると、"Apply to:" とあります。

そのため、別のインディケータを別のウィンドウに入れようとすると、ENUM_APPLIED_PRICE 列挙からの標準価格だけでなく、既にウィンドウ内にあるそのインディケータのデータにも適用されるケースがある。もしかしたら、あなたはこのような状況になっているだけかもしれません。

3.何が問題なのか?3つのMAが、(あなたの発言によれば)類似した3つのMAに対応していないこと?だから、解けないのではなく、ナンセンスなんです。正しく作れば、必ず一致する。それぞれのパラメータを持つ3つの別々のMAか、同じパラメータを持つ3つのMAを3つのバッファを持つ1つのインジケータに詰め込んだものか、何が違うのでしょうか...。違いがわかりますか?しないんです。そして、もしそれが見えたら、MAKの計算に矛盾がないかを探してください。

ところで...Alligatorは3つのMAを1つのインジケーターにしたもので、それぞれにパラメータがあります。3つの別々のMAで同じようにパラメータを設定すれば、一致するはずです。でも、これだけのバクチを別ウィンドウで...。そこで ...一例として

 
Mike:
3MA(4,9,14)のインディケータを作り、その正しさを確認するために、MA(4), MA(9), MA(14) の三つのインディケータがあるウィンドウと比較することにしました。身の毛もよだつ思いです。:)
インジケータウィンドウのセルフスケーリング機能を無効にしてみてください。
"MA(4), MA(9), MA(14)" の3つの指標がある場合、指標ウィンドウはこのウィンドウに付けられた最初の指標によって自己拡大縮小されます。あなたの場合、おそらくMA(4)でしょう。
 

上のタイムフレームから内蔵インジケータの値を取得するのですが、このタイムフレーム内で取得する設計をお願いします。

例えば、現在のチャートは15分ですが、日によって計算されたインジケータの値を取得する必要がありますが、45分前に、これを行うにはどうすればよいですか?

ここでは、現在のバーに対してのみ、インジケータの値を返す簡単なアルゴリズムを紹介します。

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

 
Leo59:
インジケータウィンドウのセルフスケーリングを無効にしてみると、もしかしたら落ち着くかもしれません。
"3つのインディケータがMA(4), MA(9), MA(14) "の場合、インディケータウィンドウは、そのウィンドウに取り付けられた最初のインディケータによって自己拡大縮小されます。あなたの場合、おそらくMA(4)でしょう。
このセルフスケーリングはどこで無効にするのですか?
 
Artyom Trishkin:

2.別ウィンドウでMAが表示されるなんて、どこでパラメータを知ったんだろう。でも...Indicators --> Oscillators --> OscillatorのMoving Averagesを取ると、"Apply to:" とあります。

そのため、別のインディケータを別のウィンドウに入れようとすると、ENUM_APPLIED_PRICE 列挙からの標準価格だけでなく、既にウィンドウ内にあるそのインディケータのデータにも適用されるケースがある。もしかしたら、あなたはこのような状況になっているだけかもしれません。

3.何が問題なのか?3つのMAが、(あなたの発言によれば)類似した3つのMAに対応していないこと?だから、解けないのではなく、ナンセンスなんです。正しく作れば、必ず一致する。それぞれのパラメータを持つ3つの別々のMAか、同じパラメータを持つ3つのMAを3つのバッファを持つ1つのインジケータに詰め込んだものか、何が違うのでしょうか...。違いがわかりますか?しないんです。そして、それが見えたら、MAKの計算のミスマッチを探します。

ところで...Alligatorは3つのMAを1つのインジケーターにしたもので、それぞれにパラメータがあります。3つの別々のMAと同じようにパラメータを設定すれば、一致します。でも、これだけのバクチを別ウィンドウで...。そこで ...一例として

Artyom、「申し込む」-そこには価格の一覧しかない。MA計算が正しく、3MAインジケータのあるウィンドウに、4、9、14と周期を変えたインジケータを1つ追加して、3本の線すべてをチェックします。いずれの場合も、単一指標は3MA指標の対応するラインと一致する
 
Mike:
アルチョム 「申し込む」......そこには価格の羅列しかない。MA計算は正しく、3本の線はすべて、3MAインディケータウィンドウに周期4、次に9、次に14のインディケータを1つ追加してチェックされています。それぞれの場合、単一指標は3MA指標の対応するラインと一致する
では、何が問題なのでしょうか?窓によってラインが異なるという、視覚的なミスマッチが気になるのですね。Ctrl+Dを押して、インジケーターの線に マウスを移動させ、データウィンドウで一致するかどうか見てください...
 
-Aleks-:

上のタイムフレームから内蔵インジケータの値を取得するのですが、このタイムフレーム内で取得する設計をお願いします。

例えば、現在のチャートは15分ですが、日によって計算されたインジケータの値を取得する必要がありますが、45分前に、これを行うにはどうすればよいですか?

ここでは、現在のバーに対してのみ、インジケータの値を返す簡単なアルゴリズムを紹介します。

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

質問には答えられないが、機能は簡略化でき、大幅にスピードアップできる。
インジケータを初期化する際に、静的配列

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

で、iDelta()内のifはすべて置き換えることができる。

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

 
Mike:

質問には答えられないが、機能は簡略化でき、大幅にスピードアップできる。
インジケーターの初期化時に、静的な配列 である

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

で、iDelta() 内のifはすべて置き換えることができます。

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

ありがとうございます!やってみます!もしかしたら良くなるかもしれませんね。

 
Mike:

質問には答えられないが、機能は簡略化でき、大幅にスピードアップできる。
インジケーターの初期化では、静的な配列を 作成します。

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

であり、iDelta() 内の全てのifを置き換えることができる。

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

書いてあるとおりにやったのですが、思うようにいきませんでした。まだ具体的にどこが悪いのかわかりません。プリントしないと......。

文字列がよくわからないのですが。

else           Fibo = -arrFibo[-Variant];

配列のマイナスインデックスを要求しているのでしょうか?
 
-Aleks-:

書いていただいた通りにやったのですが、思うようにいきません~まだ何が悪いのかわかりません~印刷しないと・・・。

ラインについてはよくわからない。

else           Fibo = -arrFibo[-Variant];

配列のマイナスインデックスを要求していることが判明したりするのでしょうか?
Variant が負の場合、式 -Variant は配列フェッチのための正のインデックスを与える。
同じ場合、負のFibo値が必要なので、-arrFiboとなります。
理由: