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

 
Artyom Trishkin:

すべてのアレイの向きが同じとは限りません。

わかりますが、ArraySetAsSeries(barsBuffer1 ,true)もセットしています; !

まあ、これが悩みの種半分です。しかし、新しいキャンドルを 追加する方法がわかりません。

こんな風にやってみました。

.........
   else
   {
      Print("tick_count = ",++tick_count);
      if(tick_count >= 5)
      {
         Print("Добавляем свечу.");
         
         double   O[1], H[1], L[1], C[1];
         O[0]  = newCandles_Open[3];
         H[0]  = newCandles_High[3];
         L[0]  = newCandles_Low[3];
         C[0]  = newCandles_Close[3];
         
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);
         
         ArrayInsert(barsBuffer1,O,0);
         ArrayInsert(barsBuffer2,H,0);
         ArrayInsert(barsBuffer3,L,0);
         ArrayInsert(barsBuffer4,C,0);
         
         tick_count = 0;
      }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}

うまくいかない...(((

 
Сергей Таболин:

わかりますが、ArraySetAsSeries(barsBuffer1 ,true)もセットしています; !

まあ、悩みは半分くらいですね。しかし、新しいキャンドルを 追加する方法 - 私は理解することはできません。

こんな風にやってみました。

うまくいかない...(((

申し訳ありませんが、インジケータ・バッファに割り当てられた配列は サイズ変更できません- 端末のサブシステムが行います。

   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);

論理を再考してください。私は全く知らないので、目に余るほど間違っているところしか示せません。

 
Artyom Trishkin:

もちろん、申し訳ありませんが、インジケータ・バッファに割り当てられた配列の サイズを 変更することはできません - これはターミナル・サブシステムによって処理されます。

論理を再考してください。私は全く知らないので、露骨に間違っていることを示すことしかできません。

私もそのように理解していますが

Artem、インジケーターバッファを サブシステムで制御しているということは、このサブシステムもサイズを大きくするということですか?つまり、新しいローソク足が表示されるまで、新しいインジケータ・ローソク足はチャートに描画できないのですか?

 
Сергей Таболин:

私もそのように理解していますが

Artemさん、インジケーターバッファを サブシステムで管理すると、そのサイズも大きくなるということですか?つまり、新しいローソク足がチャートに表示されるまでは、新しいインジケータのローソク足もチャートに描画できないのでしょうか?

新しいローソク足を引く」とはどういう意味ですか?

描画はできますが、バーを追加することはできません - まだ存在しません。

はい、インジケータアレイのサイズは端末が管理しています。また、そのうちの何人が前回の通話に参加していたかというデータも提供されます。

 
Artyom Trishkin:

新しいキャンドルを描く」とはどういう意味ですか?

いろいろ描けますが、バーはまだ存在しないので追加できません。

はい、端末自体がインジケータ配列のサイズに気を配っています。また、そのうちの何人が前回の通話に参加していたかというデータも提供されます。

ありがとうございます、失敗する理由がわかりました。

では、最後にもう一つ質問です。別の時間枠のローソク足をインジケータに表示できることは知っています。H2からのローソク足とH1からのローソク足が表示されている場合、1本のローソク足が生きている間に 2本のローソク足を引く必要があることを意味します。バッファはシステムで増やすだけなのに、どうしてこうなるのでしょうか?もしくは、お手数ですが、例のリンクを教えてください。もしかしたら解るかもしれない ))))

 
Сергей Таболин:

ありがとうございます、これでなぜうまくいかないのかがわかりました。

では、最後にもう一つ質問です。インジケータに他の時間枠のローソク足を表示できることは知っています。H2からのローソク足が表示され、H1からのローソク足が表示されている場合、1つのローソク足の寿命の間に 2つのローソク足を描画する必要があることを意味します。バッファはシステムで増やすだけなのに、どうしてこうなるのでしょうか?もしくは、お手数ですが、例のリンクを教えてください。たぶん、わかると思います)))

指標については、最新の記事で例を挙げていますが、ライブラリベースのものです。

そして、1本ではなく2本のローソク足を描く方法を理解するために、チャートを見てみましょう。H2でローソク足が開いていた時間と、H1で同じ時間のローソク足がどこにあるか見てみましょう。すべてが明らかになる。

 
Artyom Trishkin:

指標については、前回の記事で例を挙げましたが、いずれも図書館を利用したものです。

そして、1本ではなく2本のローソク足の描き方を理解するために、チャートを見てみましょう。H2上のローソク足が開いた時間と、H1上の同じ時間のローソク足がどこにあるか見てみましょう。すべてが明らかになる。

アーテム、私にはそれがわからないのです。

例えば、H2のローソク足が12:00に開いているとします。次回は14:00からです。しかし、H1では次は13:00からになります。このロジックでは、ローソク足が上位のTFで開くまで、インジケータの配列は増加しません。インジケーターの2本目のローソク足が描けないということでしょうか?それとも何?

説明しろよ、不明瞭なたこ焼き......。1つのチャートに2本(実際にはn本)のローソク足が描ける理由と方法。インジケータバッファの 0番目のインデックスを新しい値で埋めても(単純な代入)、インジケータは変化しないのはなぜですか?

そのような可能性を開発者に求めるべきかもしれませんね。このバッファに新しい要素を追加しました。これまでの要素をすべて左にずらして描画されます。やはり、私のインジケーターですね好きなように書いてます!チャートの新しいバーのオープニングにバインドしたくないのです。難しいですか?

 

ArtemとVladimirに感謝します。皆さんの回答や説明でイメージがわき、インジケーターが出来上がりました。また、ありがとうございました。


 

何が問題なのか、教えていただけませんか?

単純な変数宣言が ある。

input double   StopLoss=150.0;

実データでデバッグする場合、変数StopLossの設定値は「150」です。しかし、ヒストリカルデータのデバッグを有効にすると、同じコードの同じ変数が異なる値になっています。その理由は何でしょうか。そして、その問題にどう対処するか。

 
Sayberix:

何が問題なのか、教えていただけませんか?

単純な変数宣言が ある。

実データでデバッグする場合、変数StopLossの設定値は「150」です。しかし、ヒストリカルデータのデバッグを有効にすると、同じコードの同じ変数が異なる値になっています。その理由は何でしょうか。そして、その問題にどう対処するか。

ストラテジーテスターの「パラメータ」タブで値を確認します。実データ上でデバッグを有効にするとExpert Advisorは入力変数から値を取得し、履歴上で有効にするとテスター設定から値を取得します。

理由: