[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 522

 
MaxZ:

ここで、有名なイドニケーターを紹介します。

こんな写真が撮れるのか!?:))))))



これです。

 
以下、教科書のページhttps://docs.mql4.com/ru/array/ArrayCopy
と書かれています。
ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории (имеется в виду, что последний бар - это текущий бар, бар с индексом [0])

なぜarray2には 直近の10本の バーが含まれるのでしょうか?
Bars*6 - 60は10を返さないから です。理屈はまったく気づかない。
例えば、履歴の中に1000本の バーがあるとします。すると、Bars*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940と なる。最後の10 小節はどこですか?
 
hoz:
以下、教科書のページhttps://docs.mql4.com/ru/array/ArrayCopy
と書かれています。

なぜarray2には 直近の10本の バーが含まれるのでしょうか?
Bars*6 - 60は10を返さないから です。理屈はまったく気づかない。
例えば、履歴の中に1000本の バーがあるとします。すると、Bars*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940と なる。最後の10 小節はどこですか?

またまた驚かせてくれましたねいわゆる最後の10本、0から10本目のバーが価格と接触しているチャート上にあるのです!歴史の中の30本目、5千本目の小節は忘れましょうすでにスルーしているので、テスターだけに必要なのです。そして、ゼロから始まる最新のもの、もちろんこれからの新しいものも必要だ--。;))
 
borilunad:

またまた驚かせてくれましたねいわゆる最後の10本、0から10本目のバーが価格と接触しているチャート上にあるのです!歴史の中の30本目、5千本目の小節は忘れましょうすでにスルーしているので、テスターだけに必要なのです。そして、ゼロから始まる最新のもの、もちろん、これからの新しいものも必要です--。;))

最後の、つまり現在の 価格に近いというのは、もう理解しています。しかし、このBars*6 - 60の コードは私には理解 できません。何が返ってくるのか?論理的にどのように計算するのか理解したい。説明してもらってもいいですか?どなたかには簡単なことなのかもしれませんが、私はプログラマー出身ではないので、この流れを理解するのに苦労しています。チュートリアルを読みながら、出てきた疑問を少しずつ質問しているところです。早く今よりもっと適切な質問ができるようになることを強く望みます。
 
hoz:
以下、教科書のページhttps://docs.mql4.com/ru/array/ArrayCopy
と書かれています。
なぜarray2には 直近の10本の バーが含まれるのでしょうか?
Bars*6 - 60は10を返さないから です。理屈はまったく気づかない。
例えば、履歴の中に1000本の バーがあるとします。すると、Bars*6 - 60 = 1000*6 - 60 = 6000 - 60 = 5940と なる。最後の10 小節はどこですか?
5940 -過去10 バーをコピーする元の配列の初期インデックス (bar - 6 インデックス)。
 

Roll:
5940 -過去10 小節をコピーする初期配列の開始インデックス(barは6インデックス)

専門家の皆様、教科書に間違いがあるのではありませんか?

以下は私の推論です。

コードの冒頭でint ArrayCopyRates 関数が 呼び出され、現在のチャートのバーのデータを RateInfo[][6] 型の2次元配列にコピーし、コピーしたバーの数か、この関数の例に従って失敗した場合は -1 を返します。

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);

ということは,現在の バーはインデックス 0-0 のバーなので,元のコードに戻ると,配列 1 のインデックス 0-0 の要素 (現在のバー) を配列2のインデックスが0- 0の場合、過去10本のバー(最後のバーは現在のバー、インデックス[0]のバー)が得られますが、これはチュートリアルで書いたことに反しています...。ということで、配列1のインデックスBars*6-60,60の要素をインデックス0の配列2にコピーすることで、履歴からバーに関する情報を取得することができます。

 

こんにちは。

カスタムインディケーターを持って います。

EAを書いているのですが、質問があります...自分のインジケータにアクセスする方法を教えてください。具体的には、指定したバー(私の場合は2本目のバー)からデータを取ります。windowsPriceMaxがありますが、私の理解ではサブウィンドウのチャートの最後の値しか表示されず、例えばインジケータに3行ある場合、何を表示するのかがよくわかりません。

 
Tragedy:

こんにちは。

カスタムインディケーターを持っています。

EAを書いているのですが、質問があります...自分のインジケータにアクセスする方法を教えてください。具体的には、指定したバー(私の場合は2本目のバー)からデータを取ります。windowsPriceMaxを頂いたのですが、私が理解する限り、チャートの最後の値しか出力されず、インジケータに3行ある場合、何が出力されるのか理解できません。



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

指定したカスタムインジケーターの 計算をします。カスタムインジケータは、コンパイルされたファイル(拡張子がEX4)で、terminal_directoryのexperts-indicatorsに配置されている必要があります。
パラメータ

symbol - インジケータが計算されるデータのシンボル名です。NULLは現在のシンボルを意味する。
timeframe - 期間。チャート期間のいずれかとすることができる。0は現在のチャートの期間を表します。
name- カスタムインジケータ名。
...- パラメータリスト(必要な場合)。渡されるパラメータは、カスタムインジケータの外部変数(extern)の宣言順と型に対応している必要があります。
mode- 指示線のインデックス.0 から 7 で、SetIndexBuffer 関数のいずれかが使用するインデックスに対応する必要があります。
shift- インジケータ・バッファから受け取った値のインデックス(現在のバーから指定された期間だけ後ろにシフトします)。

 

ありがとうございます。それは助かりました。プリインストールされているiMac*** iStoch***のインジケータだけだと思っていました。

 
Lisi4ka330:

専門家の皆様、教科書に間違いが あるのではありませんか?

以下は私の推論です。

コードの冒頭でint ArrayCopyRates 関数が 呼び出され、現在のチャートのバーのデータを RateInfo[][6] 型の2次元配列にコピーし、コピーしたバーの数か、この関数の例に従って失敗した場合は -1 を返します。

ということは,現在の バーはインデックス 0-0 のバーなので,元のコードに戻ると,配列 1 のインデックス 0-0 の要素 (現在のバー) を配列2のインデックスが0- 0の場合、過去10本のバー(最後のバーは現在のバー、インデックス[0]のバー)が得られますが、これはチュートリアルで書いたことに反しています...。であり、それぞれ配列1のインデックスBars*6-60,60の要素を要素0の開始インデックスで配列2にコピーすることで、履歴から棒グラフの情報を得ることができます。


声高に主張することなく、実際に確認してみましょう。

//+------------------------------------------------------------------+
//|                                                       массив.mq4 |
//|                                                  Copyright 2012, |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012,"
#property link      "https://forum.mql4.com/ru/46980/page525"
#property show_inputs
extern string s=" -----номер бара--------";
extern int a=9;//номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{if(a<10)
{double array1[][6];double array2[10][6];
  ArrayCopyRates(array1);
  ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0]),"  цена открытия - ",array2[a][1]);}return(0);}