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

 
Valeriy Yastremskiy #:

はい、私の場合、ゼロバーではなく、1本目から始めなければなりません)とは、いいことですね。

なぜかというと、ゼロバーが他のバーと一緒に左側に移動してしまうからです。そして、ゼロ以外のバーをすべてずらすと、1番目と2番目のインデックスで2つの等しい値が得られることになります。

追伸:データをシフトする場合、空きセルは必ず上書きしなければならない。そうでない場合は、同じ値が2つ並ぶことになります。

 
Valeriy Yastremskiy #:

ZZZY シフト前のゼロの値を上書きすると、ゼロインデックスの値を失います。

まさにその通りです。

 
Valeriy Yastremskiy #:

μlのリングバッファーとは

のようなものです。

static int head=0;
for(i=head,count=0;count<ArraySize(A);i++,count++)
  {
   if(i>=ArraySize(A))i=0;
   DoSomething(A[i]);
  }

いやしくも

static int head=0;
for(i=head,count=0;count<ArraySize(A);count++)
  {
   if(++i>=ArraySize(A))i=0;
   DoSomething(A[i]);
  }
 
JRandomTrader #:

みたいな感じ。

いやしくも

配列のインデックスシフト量(μl)。動作するはずですが。ついでに言うと、指数変化サイクル(これはサイクルです)と課題サイクルの重さはあまり変わらないはずです。

 
Vitaly Muzichenko #:

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

これが課題です。

完成したコードはこんな感じですが、ループがちょっと怖いですね。

---

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

このコードでは、1つの配列を指定する必要があります。

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );

どのインデックスから書き込み、どのインデックスからコピーするかは、配列のシフト方向に依存します。したがって、インデックス0に常に新しいデータを格納したい場合は、0からコピーし、1から書き込むことになります。したがって、インデックス0と1の値は同一になり、その後、新しい値が0にコピーされることになります。

また、ArrayCopy()の内部がユーザーと同じループになっているかは非常に疑問です。このように、あるサイズの配列を持っていると、毎ティックごとに1ずつシフトして、行として表示されるインジケータ・バッファにコピーされる...。

 
デイリーファクトの内訳関数を教えてください。
//+----------------------------------------------------------------------------+
//|Определение пробоя дневного фрактала вверх                                  |
//+----------------------------------------------------------------------------+
int BreakdownSignalUpD1()
  {
   int sig=-1;
   double resistD1 = GetNearestUpFractal(PERIOD_D1);
   if (resistD1 < Ask)
     sig=0;
   if (resistD1 >= Ask)
     sig=1;  
   return(sig);
  }

そして、その内訳を画面に表示する機能は以下の通りです。

ObjectCreate("signal100",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal100",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE, 40);
   ObjectSetText("signal100",DoubleToString(BreakdownSignalUpD1(),0),18,"Times New Roman", clrRed);

0か1かではなく、0が "YES" 1が "NO "と表示させる方法を教えてください。

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

 
EVGENII SHELIPOV #:
デイリーファクトの内訳関数を教えてください。

そして、その内訳を画面に表示する機能は以下の通りです。

0か1かではなく、0が "YES" 1が "NO "と表示させる方法を教えてください。

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

string boolToStr(bool value) { return ((value) ? "true" : "false"); }
 
EVGENII SHELIPOV #:
日中ファクトリーの内訳機能を教えてください。

そして、その内訳を画面に表示する機能は以下の通りです。

0か1かではなく、0が "YES" 1が "NO "と表示させる方法を教えてください。

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

ObjectSetText("signal100",BreakdownSignalUpD1()==0?"Да":"Нет",18,"Times New Roman", clrRed);

こんな感じ。

 
JRandomTrader #:

そんな感じです。

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

 
Alexey Viktorov #:

このコードでは、1つの配列を指定する必要があります。

どのインデックスから書き込み、どのインデックスをコピーするかは、配列のオフセット方向に依存します。つまり、インデックス0に常に新しいデータを格納するのであれば、0からコピーし、1から書き込む。したがって、インデックス0と1の値は同一となり、その後、0に新しい値がコピーされます。

また、ArrayCopy()の内部がユーザーと同じループになっているかは非常に疑問です。このように、あるサイズの配列を持っていると、毎ティックごとに1ずつシフトして、行として表示されるインジケータ・バッファにコピーされる...というわけです。

やってみます。

---

全体として、私のコードは正常に動作しています、それは1時間以上です