intCopyBuffer(
int indicator_handle, // handle индикатораint buffer_num, // номер буфера индикатораdatetime start_time, // с какой датыdatetime stop_time, // по какую датуdouble buffer[] // массив, куда будут скопированы данные
);
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
При вызове функции ArrayFill() всегда подразумевается обычное направление индексации – слева направо, то есть изменение порядка доступа к элементам массива с помощью функции ArraySetAsSeries() не принимается во внимание. Многомерный массив при обработке функцией ArrayFill() представляется одномерным, например...
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);
価格がMAを上方にクロスするポイントを見つける。これが検索範囲の開始点となる。
価格がMAを下方に横切った点を見つける。これが停止範囲となる。
この範囲でのみiHighest()を取る。
また、MA点の探索をどのように実装すれば、2つの極点のみを探索し、無限大にならないか。 私も理解していますが、もし難しくなければどのようにコードで実装すればよいのでしょうか。
一つの方法は、グローバルEAプログラムレベルで変数を作成し(EAヘッダーで変数を宣言)、この変数に最後の交差が行われたバーの開始時刻を書き込むことです。これにより、CopyBufferの 第3の呼び出し形式を利用することができるようになります。
必要な時間間隔の開始日と終了日の基準
ここでstart_timeは変数からの時間だけで、stop_timeはサーバーの最後の既知の引用の時間である。
また、MAの点の探索をどのように実装すれば、外側の2点のみを探索し、無限大まで探索することができるのか。 言葉では私も理解していますが、もし難しくなければ、どのようにコードで実装すればいいのでしょうか。
MAから離れる動きを見つけるまでループする必要があるのです。
この黄色の四角で囲った部分は、2つ目の価格-MA交差点に到達する前にループを中断することになります。最大値は、最初の右クロスオーバーで見つかります
追伸:ハイライトした2つの部分の違いは何でしょうか?
追伸:ハイライトした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を探します。
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の条件を見つけるまでサイクルを実行し、この場所を見つけるとすぐに - サイクルを中断します。
そして、その配列の中で、私たちはピーク価格を探しているのです
画像に従うと、ループを実行し、条件MA<Valueが見つかるまで検索するはずです。
これが見つかったら、配列に「高値」を記入する。MA>Priceの条件を見つけるまでサイクルを実行し、この場所を見つけるとすぐに - サイクルを中断します。
そして、その配列の中からピーク値を探します。
おっしゃるとおりで、私も同じように書きましたが、コードでどのように実装するか、せめてこのコード例を示してください :
ループを開始し、MA<Priceの条件が見つかるまで検索を行う。
それが見つかるとすぐに、配列に 価格を記入します。
そのとおりで、そのように書いたのですが、どのようにコードで実装するのか、少なくともこのコード例を示してもらえますか?
を実行し、MA<Priceという条件が見つかるまで検索を行う。
この条件が満たされると同時に、配列に 価格が格納されます。
私は今コードを書くことができません、多分誰かが書いてくれるでしょう、それは簡単です
これは必要なものです。どなたかこのコードについて助けていただけませんか。
そして、iLow>ma となる次の値を求め、バー番号 No_2 を返す。
検索を中止し、iHighest 関数を使って これらのバーの間の頂点を見つけます
int val_index=iHighest(NULL,0,MODE_HIGH,No_2,No_1);
これはMQL5のコードではありません。
これはMQL5のコードではありません。
これはレイアウトであり、4と5の違いはない
:)