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

 
Roll:


偉そうなことは言わずに、試しにやってみましょう。

はい、実際には、インデックスBars*6-60,60の要素が現在のバーであることが実際に判明しています...。では、例の中でどのように説明するのでしょうか。

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);
現在のバーはarray1[0][0]で、配列をコピーした 後はarray1[Bars*6-60,60][0]になります...。ということで、どこかでリナンバリングが行われていることが判明...。もちろん、実際に機能を使ってみれば結果は明らかなのですが...。が、ロジックがめちゃくちゃだと思う)))
 
Lisi4ka330:

はい、実際には、インデックスBars*6-60,60の要素が現在のバーで あることが判明しています...。


これがあなたの結論です。
 
Roll:


偉そうなことは言わずに、試しにやってみましょう。

#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);}

そこで、TimeToStr(array2[a][0])配列の 特定の要素について 説明します。

出力が正しいということ、了解しました。でも、Bars*6-60と何の関係があるのでしょうか?計算時にBarに 代入される値は何ですか?棒グラフの場合、最後の10本の棒グラフはどのように取得するのですか?

お気づきのように、フォーラムでは私だけではなく、多くの人がこのことを理解していませんでした。

全バーに6を掛けて60を引いた数であることが判明した。6はどこから?まったく意味がないんです。

 
hoz:

そこで、TimeToStr(array2[a][0])配列の特定の要素について説明します。

出力は正しい、同感です。でも、Bars*6-60と何の関係があるんだろう...計算時にBarに 代入される値は何ですか?棒グラフの場合、最後の10本の棒グラフはどのように取得するのですか?

お気づきのように、フォーラムでは私だけでなく、多くの方が理解できていないようです。



int Bars -- 現在のチャートに表示されているバーの 数。

 
hoz:

全バーに6を掛けて60を引いた数であることが判明した。6はどこから持ってきたんだろう?まったく意味がないんです。

MQL4 リファレンス - 配列操作 -ArrayCopyRates
 
Roll:



int Bars -- 現在のチャートに表示されているバーの数。


では、最後の10個はどこから来たのでしょうか?

int Bars =10 000;

すると、Bars*6 - 60 = 10 000*6 - 60 = 60 000 - 60 =59 960と なる。

59 960の 値は、Barsの 値よりも大きい。そして、それはすでに配列の外側に あるということです。そして、10は どこにも見当たらない...。

 
hoz:

全バーに6を掛けて60を引いた数であることが判明した。6はどこから持ってきたんだろう?まったく意味がないんです。

混乱を深刻化させないために、前回の返信での間違いを訂正したいと思います。"array1[Bars*6-60,60][0]"という表記は、Bars*6がarray1の要素の総数なので、正しくはないです。各バーには6つのプロパティがあり、仮にバーが30本あるとすると、6を掛けると最初の配列の要素数である180が得られます。2番目の配列には60個の空き「セル」(つまり10×6のプロパティ)しかないので、1番目の配列から60個の要素だけを選んでコピーする必要があります。Bars*6-60,60]という式を使って、合計から60を引く、つまり180 - 60 = 120となり、最初の配列の120の要素が2番目の配列の0要素に、121が最初の配列にコピーされ、以下同じとなります。もう一つの疑問は、最後に形成された小節の情報が、最初の配列の最初ではなく、最後に書かれていることが、どうして分かったのか、ということです.しかし、どうやら答えは関数コードの中にあるようで、これ以上掘り下げても仕方がない......。
 
hoz:


では、最後の10個はどこから来たのでしょうか?

int Bars =10,000

すると、Bars*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = となる。 59 960 -- エラー!!!

59 960の 値は、Barsの 値よりも大きい。そしてこれはすでに、アレイの限界を超えていることを意味します。そして、10は どこにもない。


ビクター、心配するな、きっといける。"経験はつらい失敗の子..."単純なものから複雑なものへ、その逆はない。

「PROGRESS (lat. progressus - movement forward)とは、劣等から優等への移行、完全でないものからより完全なものへの移行によって特徴づけられる発展の方向性のこと。進歩は、システム全体、個々の要素、開発対象物の構造との関係で語られることがある。進歩の概念は、後退の概念の反対である。

REGRESS (ラテン語の regressus - 逆行), 高次から低次への移行を特徴とする発達のタイプ.進歩の反対"

 
Roll:


ビクター、安心してください、あなたは先を行っていますよ。"経験は失敗の産物..."単純なものから複雑なものへ、その逆はない。

"進歩"(ラテン語でprogressus:前進)とは、発展の方向性のことで、低いものから高いものへ、より完全でないものからより完全なものへの移行によって特徴づけられます。進歩とは、システム全体、個々の要素、開発対象物の構造などを指すことがある。進歩の概念は、後退の概念の反対である。

REGRESS (ラテン語の regressus - 逆行), 高次から低次への移行を特徴とする発達のタイプ.進歩の反対"


とか、退行云々というのは、むしろ教師のオタク性なのでは......?
 
Lisi4ka330:
混乱を招かないために、前回の解答での間違いを訂正したいと思います。"array1[Bars*6-60,60][0]"という項目は、Bars*6 は array1 の要素の合計数なので、正しくありません。各バーには6つのプロパティがあり、仮にバーが30本あるとすると、6を掛けると最初の配列の要素数である180が得られます。2番目の配列には60個の空き「セル」(つまり10×6のプロパティ)しかないので、1番目の配列から60個の要素だけを選んでコピーする必要があります。Bars*6-60,60]と表現することで、合計から60を引く、つまり180 - 60 = 120となり、1番目の配列の120要素が2番目の配列の0要素に、121要素が1番目の配列に、といった具合に書き込まれることになります。もう一つの疑問は、最後に形成された小節の情報が、最初の配列の最初ではなく、最後に書かれていることが、どうしてわかったのか、ということです.が、どうやら答えは関数コードにあるようでこれ以上、掘り下げても意味がない。...