MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 737 1...730731732733734735736737738739740741742743744...1953 新しいコメント novichok2018 2019.01.16 16:12 #7361 Alexey Viktorov: NewsArr配列の 2次元目の次元 数は?残念ながら、理解できない。2次元とは? ああ、なるほど、NewsArrは0,1,2,3の値をとりますね。これか? 文字列 NewsArr[4][1000] とする必要があります。 Alexey Viktorov 2019.01.16 16:51 #7362 novichok2018:残念ながら、理解できない。2次元とは? ああ、なるほど、NewsArrは0,1,2,3の値をとりますね。これか? 文字列 NewsArr[4][1000] とする必要があります。一次元と 二次元。 でも、それはたぶん間違った答えなんです。 novichok2018 2019.01.16 17:01 #7363 Alexey Viktorov:1次元と 2次元。 でも、何か答えが間違っているのでは?2次元の次元はどこを見ればいいのでしょうか? それとも、1次元目が4で2次元目が1000なのでしょうか? Alexey Viktorov 2019.01.16 17:10 #7364 novichok2018:そして、2次元の次元はどこを見ればいいのでしょうか? それとも、1次元目が4で、2次元目が1000なのでしょうか?しかし、この投稿は何かが狂っています。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム MQL4に関する初心者の質問、アルゴリズムやコードに関するヘルプやディスカッションを行います。 novichok2018, 2019.01.16 15:52 誰も答えていないので、おそらく愚かな質問だと思いますが、コンパイル後にEAが停止したり再開したりすることに、他にどのように対処すればよいのでしょうか? プラットフォームでは、「配列が範囲外です(284,17)」というメッセージが表示されます。 行284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);位置17はNomNewsで角括弧を開き、0によってグローバルに開始さ れます。0を1に変えても無駄だった。if(NomNews==300)break; 300を360000に変更 しましたが、効果はありませんでした。 コンパイルしてみると、数分間は正常に動作する。そして、どうすればいいのか?2次元目の値数が1000のときと if(NomNews==300)break; 2次元目で配列オーバーランはありえない。 Ilya Prozumentov 2019.01.16 17:31 #7365 psyman:アンカーポイントを設けず、縦の動きだけにして、横は画面の幅に一度だけ設定しました。向こうから数えてくる分には問題ないのですが、同じ動作でも機能によって違うというのは意外です。 また、もう一つの質問ですが、Bidをラベルテキストとして出力したい場合、OnChartEventとOnCalculateの どちらの関数を使えば最適なのでしょうか?OBJ_LABELは、アンカー ポイントを設定していなくても、デフォルトでは左上隅に設定されています。BidはOnCalculateで変更されるので、そこでラベルのテキストを変更することができます。 novichok2018 2019.01.16 19:08 #7366 Alexey Viktorov:はい、でもこのメッセージは何かおかしいです。 2次元目の値数が1000のときと 2次元目に範囲外の配列が存在することはありえない。 いいえ、混乱はしていないようです。以下はコピーしたメッセージです: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).上記284行目を示しました。 Artyom Trishkin 2019.01.16 19:15 #7367 novichok2018:いいえ、私は何も間違っていないと思います。以下はコピーしたメッセージです: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).上記284行目を示しました。ポジション17は、NomNewsで角括弧を開き、0から グローバルに開始されます。 つまり、2次元目に0次元配列のセルサイズがあると......。 novichok2018 2019.01.16 19:33 #7368 Artyom Trishkin: つまり、2次元目のアレイのセルサイズは0です...。ここがNomNewsの 場所です。 datetime TimeNewsFunck(int nomf){文字列 s=NewsArr[0][nomf];string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4)) のようになります。return((datetime)(StringToTime(time) + GMTplus*3600))}void UpdateNews(){文字列 TEXT=ReadCBOE()。int sh = StringFind(TEXT, "pageStartAt>")+12;int sh2= StringFind(TEXT,"</tbody>");TEXT=StringSubstr(TEXT,sh,sh2-sh)です。sh=0とする。while(!IsStopped()){sh = StringFind(TEXT, "event_timestamp",sh)+17;sh2= StringFind(TEXT, "onclick",sh)-2;if(sh<17 || sh2<0)break。NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);sh = StringFind(TEXT,flagCur,sh)+10;sh2= sh+3。if(sh<10 || sh2<3)break。NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)continue;sh = StringFind(TEXT, "title",sh)+7;sh2= StringFind(TEXT, "Volatility",sh)-1;if(sh<7 || sh2<0)break。NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);if(StringFind(NewsArr[2][NomNews], "High")>=0 && !HighNews)続行。if(StringFind(NewsArr[2][NomNews], "Moderate")>=0 && !MidleNews)続行。if(StringFind(NewsArr[2][NomNews], "Low")>=0 && !LowNews)continue;sh=StringFind(TEXT, "left event",sh)+12;int sh1=StringFind(TEXT, "Speaks",sh);sh2=StringFind(TEXT,"<",sh)。if(sh<12 || sh2<0)break。if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);NomNews++。if(NomNews==300)break;}} 0~300 までの値。グローバルに設定する4? Any questions from newcomers Windows 7でニュースインジケーターが機能しないのはなぜですか? Why is the news novichok2018 2019.01.16 19:56 #7369 novichok2018: 0~300 までの値。グローバルで4に設定したほうがいいのでしょうか?12分になってもメッセージが出ます。 Ilya Prozumentov 2019.01.16 20:24 #7370 novichok2018:動作開始12分でまだメッセージが出ます。このことからわかるのは、NomNewsはすでに999より大きい状態でWhileループに入るということです。それなら、なぜそうなるのかを調べて、この変数をどこかでリセットする必要があります。 これを確認するには、ループの最初に書きます。 if(NomNews > 999) { Print(NomNews); break; } 1...730731732733734735736737738739740741742743744...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
NewsArr配列の 2次元目の次元 数は?
残念ながら、理解できない。2次元とは?
ああ、なるほど、NewsArrは0,1,2,3の値をとりますね。これか?
文字列 NewsArr[4][1000] とする必要があります。
残念ながら、理解できない。2次元とは?
ああ、なるほど、NewsArrは0,1,2,3の値をとりますね。これか?
文字列 NewsArr[4][1000] とする必要があります。
一次元と 二次元。
でも、それはたぶん間違った答えなんです。1次元と 2次元。
でも、何か答えが間違っているのでは?2次元の次元はどこを見ればいいのでしょうか?
それとも、1次元目が4で2次元目が1000なのでしょうか?そして、2次元の次元はどこを見ればいいのでしょうか?
それとも、1次元目が4で、2次元目が1000なのでしょうか?しかし、この投稿は何かが狂っています。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MQL4に関する初心者の質問、アルゴリズムやコードに関するヘルプやディスカッションを行います。
novichok2018, 2019.01.16 15:52
誰も答えていないので、おそらく愚かな質問だと思いますが、コンパイル後にEAが停止したり再開したりすることに、他にどのように対処すればよいのでしょうか?
プラットフォームでは、「配列が範囲外です(284,17)」というメッセージが表示されます。
行284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);位置17はNomNewsで角括弧を開き、0によってグローバルに開始さ れます。
0を1に変えても無駄だった。
if(NomNews==300)break; 300を360000に変更 しましたが、効果はありませんでした。
コンパイルしてみると、数分間は正常に動作する。そして、どうすればいいのか?
2次元目の値数が1000のときと
2次元目で配列オーバーランはありえない。アンカーポイントを設けず、縦の動きだけにして、横は画面の幅に一度だけ設定しました。向こうから数えてくる分には問題ないのですが、同じ動作でも機能によって違うというのは意外です。
また、もう一つの質問ですが、Bidをラベルテキストとして出力したい場合、OnChartEventとOnCalculateの どちらの関数を使えば最適なのでしょうか?
OBJ_LABELは、アンカー ポイントを設定していなくても、デフォルトでは左上隅に設定されています。BidはOnCalculateで変更されるので、そこでラベルのテキストを変更することができます。
はい、でもこのメッセージは何かおかしいです。
2次元目の値数が1000のときと
2次元目に範囲外の配列が存在することはありえない。いいえ、混乱はしていないようです。以下はコピーしたメッセージです: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
いいえ、私は何も間違っていないと思います。以下はコピーしたメッセージです: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
ポジション17は、NomNewsで角括弧を開き、0から グローバルに開始されます。
つまり、2次元目に0次元配列のセルサイズがあると......。
つまり、2次元目のアレイのセルサイズは0です...。
ここがNomNewsの 場所です。
datetime TimeNewsFunck(int nomf)
{
文字列 s=NewsArr[0][nomf];
string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4)) のようになります。
return((datetime)(StringToTime(time) + GMTplus*3600))
}
void UpdateNews()
{
文字列 TEXT=ReadCBOE()。
int sh = StringFind(TEXT, "pageStartAt>")+12;
int sh2= StringFind(TEXT,"</tbody>");
TEXT=StringSubstr(TEXT,sh,sh2-sh)です。
sh=0とする。
while(!IsStopped())
{
sh = StringFind(TEXT, "event_timestamp",sh)+17;
sh2= StringFind(TEXT, "onclick",sh)-2;
if(sh<17 || sh2<0)break。
NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
sh = StringFind(TEXT,flagCur,sh)+10;
sh2= sh+3。
if(sh<10 || sh2<3)break。
NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)continue;
sh = StringFind(TEXT, "title",sh)+7;
sh2= StringFind(TEXT, "Volatility",sh)-1;
if(sh<7 || sh2<0)break。
NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(StringFind(NewsArr[2][NomNews], "High")>=0 && !HighNews)続行。
if(StringFind(NewsArr[2][NomNews], "Moderate")>=0 && !MidleNews)続行。
if(StringFind(NewsArr[2][NomNews], "Low")>=0 && !LowNews)continue;
sh=StringFind(TEXT, "left event",sh)+12;
int sh1=StringFind(TEXT, "Speaks",sh);
sh2=StringFind(TEXT,"<",sh)。
if(sh<12 || sh2<0)break。
if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);
NomNews++。
if(NomNews==300)break;
}
}
0~300 までの値。グローバルに設定する4?
0~300 までの値。グローバルで4に設定したほうがいいのでしょうか?
12分になってもメッセージが出ます。
動作開始12分でまだメッセージが出ます。
このことからわかるのは、NomNewsはすでに999より大きい状態でWhileループに入るということです。それなら、なぜそうなるのかを調べて、この変数をどこかでリセットする必要があります。
これを確認するには、ループの最初に書きます。