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

 
EVGENII SHELIPOV #:

こんにちは。

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

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


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

値が0なので、n本のローソク足の後にフラクタルが形成されます。

 
Vitaly Muzichenko #:

利用可能なすべての履歴のための配列、それは必要ありません。

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

こんな感じ。


インジケーターのポイントは何でしょうか?もちろん秘密でなければ)問題は時間表示にある。つまり、リアルティックの時間ではなく、ナンバーの時間です。TFのそれぞれのバー上の数字。

 
Valeriy Yastremskiy #:

インジケーターのポイントは何でしょうか?もちろん秘密でなければですが)そこで問題になるのは、もちろん時刻表示です。つまり、本当の刻限ではなく、数字の刻限なのです。TFのバーにはそれぞれの数字が書かれています。

ポイントは、オープンチャートで最後のティックを見ることです :)

P.S. * AskとBidの変更について

マーケットウォッチと同様


 
Tretyakov Rostyslav #:

値が0なので、n本のロウソクを境にフラクタルが形成される

新しい極限がなく、3本の小節の後にそれらが0、1、2であれば、フラクタルが形成されます。

double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 2);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);

何も変わっていない。

あるいは、また何かが間違っている。

 
Vitaly Muzichenko #:

やった、うまくいった。

---

なんか、このサイクルはなくてもいいんじゃないかと思う。

本当ですか?

私の知る限り、MQLにはシフト機能はないようです。だから、シフトはループの力を借りないとできない。なぜ似合わないのか?

P.S. 余分な配列のことですが、必要ありませんでした。あなたは正しくシフトして、バッファに入札値を書き込んでいるのです

 
EVGENII SHELIPOV #:

こんにちは。

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

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


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

なぜ、ゼロバーのフラクタルがゼロでないはずだと確信できるのでしょうか?いつまでたっても、あるだけで0にならない!


Tretyakov Rostyslav#:

値が0であるため、n本のロウソクを経てフラクタルが形成される

また、このようなことは、常に起こるわけでは ありません。n番目のバーがフラクタルである場合のみ!

 
Vitaly Muzichenko #:

意味は、オープンチャートで最後のティックを見ること :)

P.S. * AskとBidの変更について

マーケットウォッチと同様


スピード対策を考えていたのですが)))

 
Vitaly Muzichenko #:

意味は、オープンチャートで最後のティックを見ること :)

P.S. * AskとBidの変更について

マーケットウォッチと同様


ArrayCopy() の何が問題なのでしょうか?
Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
ArrayCopy - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
ArrayCopy() は良い解決策ではない?

ArrayCopy:ある配列から別の配列にコピーするためのものです。そして、ここでは各目盛りを追加する前に値をシフトする必要があります。したがって、ループを使うことでしか解決できない。

 
Artyom Trishkin #:
ArrayCopy() はあなたに合わない?

これの使い方、教えてください。

これが課題です。

以下は準備中のコードですが、ループがちょっと怖いです。

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDodgerBlue
#property indicator_label1  "Bid"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_label2  "Ask"

double Buffer1[];
double Buffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
{
  SetIndexBuffer(0,Buffer1);
  ArraySetAsSeries(Buffer1,true);
  SetIndexBuffer(1,Buffer2);
  ArraySetAsSeries(Buffer2,true);
  ArrayInitialize(Buffer1,EMPTY_VALUE);
  ArrayInitialize(Buffer2,EMPTY_VALUE);
  IndicatorSetInteger(INDICATOR_DIGITS,Digits());
  IndicatorSetString(INDICATOR_SHORTNAME,"Tick:");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
{
  int H=100;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }
  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  double a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  Buffer1[0]=b;
  Buffer2[0]=a;
  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }
  return(rates_total);
}
//+------------------------------------------------------------------+

---

繰り返しますが、ArrayCopy() の内部にはループがあり、おそらく複数のループが存在します。そのため、この置き換えによってコードが軽量化・高速化されることはほとんどありません。