MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1738 1...173117321733173417351736173717381739174017411742174317441745...1953 新しいコメント Ivan Butko 2021.11.10 11:05 #17371 Nikolay Ivanov #:あなたのコードは-1でなく0を表示します。もしかしたら、-1が他の場所に印刷されているかもしれません。最も可能性が高いのは、コード全体がプリンターの中にあることですが...。 例が間違っています。すみません、コード自体が大きいのです。 でも、Konstantinの解決策で問題は解決しました!確かに、i--とゼロチェックを入れ替えたところ、ロジックが正常に動作し、-1の代わりに0または1が出力されるようになりました。(0または-1より前で、後者は即座にエラーとなる)。 Konstantin Nikitin 2021.11.10 11:06 #17372 Nikolay Ivanov #:あなたのコードは-1でなく0を表示します。1が他の場所に印刷されている可能性があります。最も可能性が高いのは、コード全体がプリンターに...問題を解決しようとする前に、その問題を特定する必要がある...。そこにあることを確認し、場所を特定してから解く...。 ペンと紙を用意してください。そして、ループのカウントの仕方を書いてください。このコードでは void OnStart() { int i=10; for (i; i>0; i--) { i--; if (i==0) break; } Print(i); } 点検 if (i==0) break; は、このコードでは決して動作しません。を初期設定しない限り int i=11; は奇数値である。もし偶数なら、このコードは int i=10; for (i; i>0; i--) { i--; if (i==0) break; } まで if (i==0) break; は奇数値で来ます。 Ivan Butko 2021.11.10 11:06 #17373 Nikolay Ivanov #:問題を解決しようとする前に、その問題を特定する必要がある...。あることを確認して、ローカライズして、解決する...。 なるほど、そういうことだったんですね。 Nikolay Ivanov 2021.11.10 11:10 #17374 Konstantin Nikitin #:ペンと紙を用意してください。そして、その周期がどのようにカウントされるかを書き込む。このコードでは なぜ、印刷=-1という条件なのに、実際には(確認したところ)0と印刷される、つまり、例題が間違っていると、紙とペンを持っていくのでしょう?そして、不正解の例に対して正しい答えを出すことは不可能です...。 Konstantin Nikitin 2021.11.10 11:14 #17375 Nikolay Ivanov #:なぜ、印刷=-1という条件なのに紙とペンを取るのかというと、実際には(確認したところ)0と印刷されるので、例が正しくないのです。そして、不正解の例に対して正しい答えを出すことは不可能です...。 この行からゼロが出力される for (i; i>0; i--) であり、チェックとブレークの 出力からではありません。 一般的には、次のように書くのが正しいでしょう。 for (i; i>= 0; i--) 配列はゼロインデックスで始まるので Nikolay Ivanov 2021.11.10 11:19 #17376 Konstantin Nikitin #:この行からゼロが出力されるブレイクチェックと 終了からではなく この行から、指定されたコードに対して0が出力される... Print(i); 問題は、なぜbreakが機能しないかではなく、なぜプリンターが-1を印刷したのか...それだけです。 そして、i startが偶数か奇数かは関係なく、決して-1は印刷されない...ということです。 Ivan Butko 2021.11.10 15:34 #17377 長時間のティックやローソク足の計算方法を教えてください。(例えば1年)。 Close[]を試してみましたが、インデックスが5000以上出てきません。 Alexey Viktorov 2021.11.10 16:16 #17378 Ivan Butko #: 長い期間のティックやローソクを 計算する方法を教えてください。(例えば1年)。 Close[]も試しましたが、インデックスが5000以上出ません。 ダニやロウソクでこれだけ変わるんだから、怖いといえば怖い...。 Ivan Butko 2021.11.10 17:29 #17379 Alexey Viktorov #:ダニとロウソクの違いがありすぎて怖いくらい...。 例えばEAで、任意の期間を指定すると、テスターではティック単位で行ったり、M1バーで行ったり、みんなそれを考慮します。 しかし、リアルタイムで長い履歴に行き、そこからデータを取るEAを取る場合、どう整理したらいいのか分かりません。ターミナルでは5000本以上のロウソクは出ません。 UPD これを使ってみます。コードはネットにあります。 MqlRates rates[]; int copied=CopyRates(NULL,0,0,100,rates); if(copied<=0) Print("Ошибка копирования ценовых данных ",GetLastError()); else Print("Скопировано ",ArraySize(rates)," баров"); UPD 不思議ですね。突然、動くようになった。100万本目もチェック。何もせず、ドキュメントを読んだり、お茶を飲んだりしていた。今、もう一度実行したら、うまくいきました。 というわけで、追加コード(上記)のチェックも不要でした。 MT4は何かと気難しいですね。あるいは、forex chifにそのような機能があるのかもしれません。ブローカーのものでなく、標準のものを置く必要がありますね。 Artyom Trishkin 2021.11.11 00:06 #17380 Ivan Butko #:例えば、Expert Advisorの場合、任意の期間を指定すれば、ティック単位でもM1バー単位でもテスターを通過し、誰もがそれを考慮します。 しかし、リアルタイムモードで長い履歴に行き、そこからデータを取得するExpert Advisorを取る場合、それをどう整理すればいいのかが分かりません。ターミナルでは5000本以上のロウソクは出ません。UPD これを使ってみます。コードはネットにあります。 MqlRates rates[]; int copied=CopyRates(NULL,0,0,100,rates); if(copied<=0) Print("Ошибка копирования ценовых данных ",GetLastError()); else Print("Скопировано ",ArraySize(rates)," баров"); UPD 不思議ですね。突然、動くようになった。100万本目もチェック。何もせず、ドキュメントを読んだり、お茶を飲んだりしていた。今、もう一度実行したら、うまくいきました。 というわけで、追加コード(上記)のチェックも不要でした。 MT4は何かと気難しいですね。あるいは、forex chifにそのような機能があるのかもしれません。証券会社のものではなく、標準のものを置かないといけないですね。 CopyRates()の最初の呼び出しは、過去のデータのポンピングを開始しています(1週間も実行しなければ、また同じことが起こります、まあ、1週間でなくても、ある程度の時間はかかりますが)。 サーバーにあるデータ量を確認し、利用可能な量をExpert Advisorと比較すればいいのです。必要量より少ない場合 - 次のティックまでEAを残す。次のティックで、もう一度確認する。何度試みても必要な量の履歴が取得できない場合、このエラーは必要なものとして処理されます。 1...173117321733173417351736173717381739174017411742174317441745...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
あなたのコードは-1でなく0を表示します。
もしかしたら、-1が他の場所に印刷されているかもしれません。最も可能性が高いのは、コード全体がプリンターの中にあることですが...。
例が間違っています。すみません、コード自体が大きいのです。
でも、Konstantinの解決策で問題は解決しました!確かに、i--とゼロチェックを入れ替えたところ、ロジックが正常に動作し、-1の代わりに0または1が出力されるようになりました。(0または-1より前で、後者は即座にエラーとなる)。
あなたのコードは-1でなく0を表示します。
1が他の場所に印刷されている可能性があります。最も可能性が高いのは、コード全体がプリンターに...
問題を解決しようとする前に、その問題を特定する必要がある...。そこにあることを確認し、場所を特定してから解く...。
ペンと紙を用意してください。そして、ループのカウントの仕方を書いてください。このコードでは
点検
は、このコードでは決して動作しません。を初期設定しない限り
は奇数値である。もし偶数なら、このコードは
まで
は奇数値で来ます。
問題を解決しようとする前に、その問題を特定する必要がある...。あることを確認して、ローカライズして、解決する...。
なるほど、そういうことだったんですね。
ペンと紙を用意してください。そして、その周期がどのようにカウントされるかを書き込む。このコードでは
なぜ、印刷=-1という条件なのに、実際には(確認したところ)0と印刷される、つまり、例題が間違っていると、紙とペンを持っていくのでしょう?そして、不正解の例に対して正しい答えを出すことは不可能です...。
なぜ、印刷=-1という条件なのに紙とペンを取るのかというと、実際には(確認したところ)0と印刷されるので、例が正しくないのです。そして、不正解の例に対して正しい答えを出すことは不可能です...。
この行からゼロが出力される
であり、チェックとブレークの 出力からではありません。
一般的には、次のように書くのが正しいでしょう。
配列はゼロインデックスで始まるので
この行からゼロが出力される
ブレイクチェックと 終了からではなく
この行から、指定されたコードに対して0が出力される...
Print(i);
問題は、なぜbreakが機能しないかではなく、なぜプリンターが-1を印刷したのか...それだけです。 そして、i startが偶数か奇数かは関係なく、決して-1は印刷されない...ということです。
Close[]を試してみましたが、インデックスが5000以上出てきません。
長い期間のティックやローソクを 計算する方法を教えてください。(例えば1年)。 Close[]も試しましたが、インデックスが5000以上出ません。
ダニやロウソクでこれだけ変わるんだから、怖いといえば怖い...。
ダニとロウソクの違いがありすぎて怖いくらい...。
例えばEAで、任意の期間を指定すると、テスターではティック単位で行ったり、M1バーで行ったり、みんなそれを考慮します。
しかし、リアルタイムで長い履歴に行き、そこからデータを取るEAを取る場合、どう整理したらいいのか分かりません。ターミナルでは5000本以上のロウソクは出ません。
UPD
これを使ってみます。コードはネットにあります。
MqlRates rates[];
int copied=CopyRates(NULL,0,0,100,rates);
if(copied<=0)
Print("Ошибка копирования ценовых данных ",GetLastError());
else Print("Скопировано ",ArraySize(rates)," баров");
UPD
不思議ですね。突然、動くようになった。100万本目もチェック。何もせず、ドキュメントを読んだり、お茶を飲んだりしていた。今、もう一度実行したら、うまくいきました。
というわけで、追加コード(上記)のチェックも不要でした。
MT4は何かと気難しいですね。あるいは、forex chifにそのような機能があるのかもしれません。ブローカーのものでなく、標準のものを置く必要がありますね。
例えば、Expert Advisorの場合、任意の期間を指定すれば、ティック単位でもM1バー単位でもテスターを通過し、誰もがそれを考慮します。
しかし、リアルタイムモードで長い履歴に行き、そこからデータを取得するExpert Advisorを取る場合、それをどう整理すればいいのかが分かりません。ターミナルでは5000本以上のロウソクは出ません。
UPD
これを使ってみます。コードはネットにあります。
MqlRates rates[];
int copied=CopyRates(NULL,0,0,100,rates);
if(copied<=0)
Print("Ошибка копирования ценовых данных ",GetLastError());
else Print("Скопировано ",ArraySize(rates)," баров");
UPD
不思議ですね。突然、動くようになった。100万本目もチェック。何もせず、ドキュメントを読んだり、お茶を飲んだりしていた。今、もう一度実行したら、うまくいきました。
というわけで、追加コード(上記)のチェックも不要でした。
MT4は何かと気難しいですね。あるいは、forex chifにそのような機能があるのかもしれません。証券会社のものではなく、標準のものを置かないといけないですね。
CopyRates()の最初の呼び出しは、過去のデータのポンピングを開始しています(1週間も実行しなければ、また同じことが起こります、まあ、1週間でなくても、ある程度の時間はかかりますが)。
サーバーにあるデータ量を確認し、利用可能な量をExpert Advisorと比較すればいいのです。必要量より少ない場合 - 次のティックまでEAを残す。次のティックで、もう一度確認する。何度試みても必要な量の履歴が取得できない場合、このエラーは必要なものとして処理されます。