MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1896

 
Vitaly Muzichenko #:

問題を解決する方法がわからない

ティックチャート、つまりティックが来て - バッファを1つずらして描画したいのですが

60本の最後のティック、つまり60本のバーを描画する必要があります。

---

これは、"Ticky "ウィンドウに実装されているように行う必要があります。


バーではなく、ラインです。

新しいウィンドウにバーを描画するコードです。役立つかもしれません。

ファイル:
SaveTicks.mq4  6 kb
 
Vitaly Muzichenko #:

問題を解決する方法がわからない

ティックチャート、つまりティックが来て - バッファを1つずらして描画したいのですが

60本の最後のティック、つまり60本のバーを描画する必要があります。

---

ティック」ウィンドウに実装されているように行う必要があります


この問題を解決するためには、別の配列が必要です。60 などの固定長でもよい。ループの助けを借りてデータを1つずつシフトするたびに、ティックで満たされる必要があります。各ティックが書き込まれた後、この配列はBuffer配列にコピーされ、そのデータがチャートに表示されるはずです。

 
Valeriy Yastremskiy #:

バーではなく、ラインです。

このコードでは、新しいウィンドウに棒グラフを描画します。それは助かるかもしれない。

何も得ることができなかった。もしかして、私の見方が悪いのか?


Mihail Matkovskij(ミハイル・マトコフスキー #:

この問題を解決するには、もう1つ配列が必要です。60 などの固定長でもよい。ループを利用してデータを1つずつシフトさせながら、ティックで埋めていく必要があります。各ティックが書き込まれた後、この配列はBuffer配列にコピーされ、そのデータがチャートに表示されるはずです。

シフトのやり方がわからない。

差し支えなければ、コードを表示してください。

 
Vitaly Muzichenko #:

何も得ることができなかった。私の見方が悪いのかもしれませんが。


シフトの仕方がわからない。

もしよろしければ、コードを見せていただけませんか?

A[0]=Bidとする。

for(i=0;i<60;i++){A[i+1]=A[i]}

 
Valeriy Yastremskiy #:

A[0]=Bidとする。

for(i=0;i<60;i++){A[i+1]=A[i]}

やった、うまくいった。

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  Buffer1[0]=b;
  for(int j=10; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
  }
  return(rates_total);
}

---

なんか、ループがなくても大丈夫な気がしてきた。

そうなんですか?

 
Vitaly Muzichenko #:

やった、うまくいった。

---

なんか、このサイクルはなくてもいいような気がする。

本当ですか?

タイムスリップでは、このループは隠されており、どちらから動いても違いはありません。MKLではシフト機能は見当たりませんね。それは、インデックスの仕事です。先入れ先出しである。Pythonではそうなっています。MCLには存在しないようです。

 

ここで、何が問題なのか?

正常に動作し始めるが、新しいバーのたびにオフセットが発生し、範囲外になる。

どうすれば回避できるのか?

---

追伸:これでいいんだと思います、正常に動作しています、追加したのは

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
  }
 
Vitaly Muzichenko #:

ここで、何が問題なのか?

正常に動作し始めるが、新しいバーのたびにオフセットが発生し、範囲外になる。

どうすれば回避できるのか?

---

追伸:正常に動作しているようなので、追加しました。

インデックスの小さい側では0未満,大きい側では配列の次元数以上であることを確認します.配列や最後の値をゼロにするのは、ちょっと論理的ではありません。

 
Valeriy Yastremskiy #:

は,インデックスの小さい側で 0 より小さいかどうかを,大きい側で配列の次元より大きいかどうかを調べます.配列や最後の値をゼロにすることは論理的ではありません。

利用可能なすべての歴史のための配列、私はそれを必要としない。

文字通り50~100本の棒が必要なんです。

このように


 

こんにちは。

毎日のフラクタルの値を、その値や縦線で表示しています。線は表示されず、値は0となります。

以下はコードの一部です。

 double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 0);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);
   ObjectSetText("signal00",DoubleToString(FractalDayUpper,5),18,"Times New Roman", clrRed);


何が問題なのか、教えてください。