初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 195

 
Artyom Trishkin:

価格がMAを上方にクロスするポイントを見つける。これが検索範囲の開始点となる。

価格がMAを下方に横切った点を見つける。これが停止範囲となる。

この範囲でのみiHighest()を取る。

また、MA点の検索をどのように実装すれば、2つの極限点のみを検索し、無限大に検索することができないか。
 
GlaVredFX:
また、MA点の探索をどのように実装すれば、2つの極点のみを探索し、無限大にならないか。 私も理解していますが、もし難しくなければどのようにコードで実装すればよいのでしょうか。

一つの方法は、グローバルEAプログラムレベルで変数を作成し(EAヘッダーで変数を宣言)、この変数に最後の交差が行われたバーの開始時刻を書き込むことです。これにより、CopyBufferの 第3の呼び出し形式を利用することができるようになります。

必要な時間間隔の開始日と終了日の基準

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   datetime  start_time,           // с какой даты
   datetime  stop_time,            // по какую дату
   double    buffer[]              // массив, куда будут скопированы данные
   );

ここでstart_timeは変数からの時間だけで、stop_timeはサーバーの最後の既知の引用の時間である。

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
GlaVredFX:
また、MAの点の探索をどのように実装すれば、外側の2点のみを探索し、無限大まで探索することができるのか。 言葉では私も理解していますが、もし難しくなければ、どのようにコードで実装すればいいのでしょうか。

MAから離れる動きを見つけるまでループする必要があるのです。

この黄色の四角で囲った部分は、2つ目の価格-MA交差点に到達する前にループを中断することになります。最大値は、最初の右クロスオーバーで見つかります


追伸:ハイライトした2つの部分の違いは何でしょうか?

 
Vitaly Muzichenko:

追伸:ハイライトした2つの部分の違いは何でしょうか?

つまり、1点目は2点目より高いかもしれないし、低いかもしれない。

これはあくまで一例です。しかし、常に同一であることを意味するものではありません。



誰か似たような条件のコード例を投げてくれませんかね...。

MA>0barの現在値。
バー番号、価格<MAを探し、バー番号1が見つかれば、バッファ2に値を書き込む
次の番号を探す 価格>MAは2番のバーを見つけ、バッファ1に値を書き込む
検索を停止します。
そして、バッファ1とバッファ2の値の間で、最安値のLowを探します。
現在のMA値<0barの場合
バーの数を探して、Price>MAは、1バーの数を見つけ、バッファ2に値を書き込む
次の番号のPrice<MAが見つかった番号2のバーを 探し、バッファ1に値を書き込む
検索を停止します。
そして、バッファ1とバッファ2の値の間で、最も高い価格のHighを探します。

 
GlaVredFX:

1点目が2点目より高かったり低かったり、異なる場合があります。

あくまで一例です。しかし、それはいつまでも同じということではありません。



誰か似たような条件のコード例を投げてくれませんかね...。

現在値 MA> 0 bar
Price <MA というバー番号を探して いるところ、1バーの番号が見つかったので、その値をバッファ2に書き込む
次の番号を探す 価格>MAは2番のバーを見つけ、バッファ1に値を書き込む
検索を停止します。
そして、バッファ1とバッファ2の値の間で、最安値のLowを探します。
現在のMA値<0barの場合
バーの数を探して、Price>MAは、1バーの数を見つけ、バッファ2に値を書き込む
次の番号のPrice<MAが見つかった番号2のバーを 探し、バッファ1に値を書き込む
検索を停止します。
そして、バッファ1とバッファ2の値の間で、最も高い価格のHighを探します。

画像に従うと、ループを開始し、条件MA<Valueが見つかるまで検索する必要があります。

これが見つかったら、配列に「高値」を記入する。MA>Priceの条件を見つけるまでサイクルを実行し、この場所を見つけるとすぐに - サイクルを中断します。

そして、その配列の中で、私たちはピーク価格を探しているのです

 
Vitaly Muzichenko:

画像に従うと、ループを実行し、条件MA<Valueが見つかるまで検索するはずです。

これが見つかったら、配列に「高値」を記入する。MA>Priceの条件を見つけるまでサイクルを実行し、この場所を見つけるとすぐに - サイクルを中断します。

そして、その配列の中からピーク値を探します。

おっしゃるとおりで、私も同じように書きましたが、コードでどのように実装するか、せめてこのコード例を示してください :


ループを開始し、MA<Priceの条件が見つかるまで検索を行う。

それが見つかるとすぐに、配列に 価格を記入します。

Документация по MQL5: Операции с массивами / ArrayFill
Документация по MQL5: Операции с массивами / ArrayFill
  • www.mql5.com
При вызове функции ArrayFill() всегда подразумевается обычное направление индексации – слева направо, то есть изменение порядка доступа к элементам массива с помощью функции ArraySetAsSeries() не принимается во внимание. Многомерный массив при обработке функцией ArrayFill() представляется одномерным, например...
 
GlaVredFX:

そのとおりで、そのように書いたのですが、どのようにコードで実装するのか、少なくともこのコード例を示してもらえますか?


を実行し、MA<Priceという条件が見つかるまで検索を行う。

この条件が満たされると同時に、配列に 価格が格納されます。

私は今コードを書くことができません、多分誰かが書いてくれるでしょう、それは簡単です

 

これは必要なものです。どなたかこのコードについて助けていただけませんか。

int start()                           

  {

  int    i;

  double No_1;

  double No_2;

  double k=iClose(NULL,0,i);
  double h=iHigh(NULL,0,i);

  if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

  for (i=0; i< Bars; i++) {

  //---- Код поиска номер крайнего бара где  iHigh>ma

  //---- Если нашли то возвращаем номер бара No_1

            

          }

そして、iLow>ma となる次の値を求め、バー番号 No_2 を返す。
検索を中止し、iHighest 関数を使って これらのバーの間の頂点を見つけます
int val_index=iHighest(NULL,0,MODE_HIGH,No_2,No_1);

 
GlaVredFX:

if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

これはMQL5のコードではありません。

 
Vladimir Karputov:

これはMQL5のコードではありません。

これはレイアウトであり、4と5の違いはない

:)