どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1134 1...112711281129113011311132113311341135113611371138113911401141...1178 新しいコメント Alexey Viktorov 2017.03.03 05:48 #11331 Alexandr Nevadovschi:プログラマーの皆様、この仕事の初心者を助けてください。EAは、一定時間経過後に順次、買い注文と売り注文を開いています。以前の注文を全て修正したい(具体的には、以前の注文は全て最後の注文のTake Profitで決済すること)。すなわち、最後の買い注文と前の売り注文が同じであれば、前の注文のストップロスは、前の注文のテイクプロフィットレベルに設定されます。もし、前回の買いが買いの場合、そのTakeProfitは前回のTakeProfitのレベルに設定されます。ポイントは、最後の注文のtakeprofitが来たときに、すべての注文を決済することです)。どのように 実装すればいいのかわかりにくいですが、わかりやすく説明できたかと思います。よろしくお願いします。すべての未決済注文を調べて修正することは理解できますが、最後の注文をスキップするにはどうしたらよいのでしょうか?この中で最も重要なことは、「何が起こるべきか」を理解することです。ラストオーダー」とは何ですか?開店時間までがラストですか?それともオープニングの価格帯で?最後の」注文を「BUY」と見なすが、価格がめちゃくちゃになる場合はどうするか?あるいはその逆で、最後の注文はSELLになるけど、価格は北上する?では、どれが最後と考えるべきでしょうか。このことに私たちは気づかなければならないのです。 Nauris Zukas 2017.03.03 10:13 #11332 こんにちは。配列に入る要素の数があらかじめわからない場合、新しい要素が増えるごとに配列が増えるようにするには、どのように宣言 すればよいのでしょうか。 わかりやすくするための例です。double HighA[]; // ??????????????????for(int i=0; i<1000; i++){if(A[i]<B[i]) HighA[i]=A[i];}Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA)); Alexey Viktorov 2017.03.03 11:09 #11333 Nauris Zukas:こんにちは。配列に入る要素の数があらかじめわからない場合、新しい要素が増えるごとに配列が増えるようにするには、どのように宣言 すればよいのでしょうか。 わかりやすくするための例です。double HighA[]; // ??????????????????for(int i=0; i<1000; i++){if(A[i]<B[i]) HighA[i]=A[i];}Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA)); もっとドキュメントを読むべきですね。 ArrayResize - Операции с массивами - Справочник MQL4 docs.mql4.com ArrayResize - Операции с массивами - Справочник MQL4 Nauris Zukas 2017.03.03 11:33 #11334 Alexey Viktorov: もっとドキュメントを読むべきですね。読んで試しましたが、「array out of range」エラーが出ます。例ではこのような感じでした。 double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { countHlines++; ArrayResize(HighA,countHlines); HighA[i]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA)); Alexey Viktorov 2017.03.03 11:54 #11335 Nauris Zukas:読んで試しましたが、「array out of range」エラーが出ます。例ではこのような感じでした。 double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { countHlines++; ArrayResize(HighA,countHlines); HighA[i]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));A[i] < B[i]の条件を満たさない場合,配列サイズは 変更せず,ループカウンタをインクリメントする.そのため、圏外になってしまうのです。この方法で試してみてください。 double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { int size = ArraySize(HighA); ArrayResize(HighA, size+1); HighA[size]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA)); Nauris Zukas 2017.03.03 12:10 #11336 Alexey Viktorov:A[i] < B[i] の条件を満たさない場合,配列のサイズは変更されず,ループカウンタがインクリメントされる.だから圏外なんです。この方法で試してみてください。 double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { int size = ArraySize(HighA); ArrayResize(HighA, size+1); HighA[size]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));ありがとうございました。 これで全て 解決です! Vitaly Muzichenko 2017.03.03 13:16 #11337 Nauris Zukas:読んで試しましたが、「array out of range」エラーが出ます。例ではこのような感じでした。 double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { countHlines++; ArrayResize(HighA,countHlines); HighA[i]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));まあ、その方が早いんだけどね int countHlines=0; double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { countHlines++; ArrayResize(HighA,countHlines); HighA[countHlines-1]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));// Вариант №2 int countHlines=-1; double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { countHlines++; ArrayResize(HighA,countHlines+1); HighA[countHlines]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA)); Nauris Zukas 2017.03.03 13:54 #11338 Vitaly Muzichenko:まあ、そのほうが早く動くでしょう int countHlines=0; double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { countHlines++; ArrayResize(HighA,countHlines); HighA[countHlines-1]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));// Вариант №2 int countHlines=-1; double HighA[]; for(int i=0; i<1000; i++) { if(A[i]<B[i]) { countHlines++; ArrayResize(HighA,countHlines+1); HighA[countHlines]=A[i]; } } Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA)); ありがとうございます!そうなんですね。ArraySizeが あるから速くなるんだろうけど、なんか遅くなる? Alexey Viktorov 2017.03.03 17:54 #11339 Nauris Zukas: ありがとうございます!そうなんですね。ArraySizeがあるから速くなるんだろうけど、なんか遅くなるのか? あまりないですが、わかりやすく、間違えにくいです。 Nauris Zukas 2017.03.04 08:14 #11340 Alexey Viktorov: あまりないですが、わかりやすく、間違えにくいです。 ありがとうございました。 1...112711281129113011311132113311341135113611371138113911401141...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
プログラマーの皆様、この仕事の初心者を助けてください。
EAは、一定時間経過後に順次、買い注文と売り注文を開いています。以前の注文を全て修正したい(具体的には、以前の注文は全て最後の注文のTake Profitで決済すること)。すなわち、最後の買い注文と前の売り注文が同じであれば、前の注文のストップロスは、前の注文のテイクプロフィットレベルに設定されます。
もし、前回の買いが買いの場合、そのTakeProfitは前回のTakeProfitのレベルに設定されます。ポイントは、最後の注文のtakeprofitが来たときに、すべての注文を決済することです)。
どのように 実装すればいいのかわかりにくいですが、わかりやすく説明できたかと思います。よろしくお願いします。
すべての未決済注文を調べて修正することは理解できますが、最後の注文をスキップするにはどうしたらよいのでしょうか?
この中で最も重要なことは、「何が起こるべきか」を理解することです。
ラストオーダー」とは何ですか?開店時間までがラストですか?それともオープニングの価格帯で?
最後の」注文を「BUY」と見なすが、価格がめちゃくちゃになる場合はどうするか?あるいはその逆で、最後の注文はSELLになるけど、価格は北上する?では、どれが最後と考えるべきでしょうか。このことに私たちは気づかなければならないのです。
こんにちは。配列に入る要素の数があらかじめわからない場合、新しい要素が増えるごとに配列が増えるようにするには、どのように宣言 すればよいのでしょうか。
わかりやすくするための例です。
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
こんにちは。配列に入る要素の数があらかじめわからない場合、新しい要素が増えるごとに配列が増えるようにするには、どのように宣言 すればよいのでしょうか。
わかりやすくするための例です。
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
もっとドキュメントを読むべきですね。
読んで試しましたが、「array out of range」エラーが出ます。例ではこのような感じでした。
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
読んで試しましたが、「array out of range」エラーが出ます。例ではこのような感じでした。
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
A[i] < B[i]の条件を満たさない場合,配列サイズは 変更せず,ループカウンタをインクリメントする.そのため、圏外になってしまうのです。
この方法で試してみてください。
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
A[i] < B[i] の条件を満たさない場合,配列のサイズは変更されず,ループカウンタがインクリメントされる.だから圏外なんです。
この方法で試してみてください。
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
読んで試しましたが、「array out of range」エラーが出ます。例ではこのような感じでした。
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
まあ、その方が早いんだけどね
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
まあ、そのほうが早く動くでしょう
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
ありがとうございます!そうなんですね。ArraySizeがあるから速くなるんだろうけど、なんか遅くなるのか?
あまりないですが、わかりやすく、間違えにくいです。