エラー、バグ、質問 - ページ 2859 1...285228532854285528562857285828592860286128622863286428652866...3185 新しいコメント Igor Makanu 2020.09.27 20:08 #28581 fxsaber:一般的に、実装の可能性についてどのようにお考えですか? 様々な実装が可能です しかし、すべてはEA間のデータ交換の 作業に帰結する 最も簡単な方法は、初期化の許可を確認し、OnTick()で初期化自体を実行することです。そうすれば、チャートを復元してその上でEAを実行することを避けられますし、閉じる前にEAを保存すれば、OnDeinit()で実行 できます。 この動物園を誰が管理するかは重要では ありません - メインEAかサービスか Aleksey Vyazmikin 2020.09.27 21:44 #28582 テスターログで 2020.09.28 00:41:09.491 wrong tester bar time 2020.09.28 00:41:09.491 history error 9 in undefined function どういう意味ですか? Slava 2020.09.28 05:22 #28583 Aleksey Vyazmikin:テスターログでどういう意味ですか? これは、m1 ohlcの次の値を受信したとき(または建値で テストする場合はバーの状態)、時間フィールドに0が含まれていることを意味します。 未定義関数とは、あらかじめ定義された関数(OnTick、OnTimerなど)の外側、つまりテスターのメインループで問題が発生したことを意味します。 Aleksey Vyazmikin 2020.09.28 07:02 #28584 Slava:これは、次のm1 ohlc値(または建値で テストするときのバーの状態)を取得するときに、時間フィールドに0が含まれることを意味します。未定義関数とは、あらかじめ定義された関数(OnTick、OnTimerなど)の外側、つまりテスターのメインループで問題が発生したことを意味します。 一日中、すべてが順調に動いていたのに、それが始まってしまった。ユーザーとして何ができるのか? Aleksey Vyazmikin 2020.09.28 13:31 #28585 Slava:これは、次のm1 ohlc値(または建値で テストするときのバーの状態)を取得するときに、時間フィールドに0が含まれることを意味します。未定義関数とは、あらかじめ定義された関数(OnTick、OnTimerなど)の外側、つまりテスターのメインループで問題が発生したことを意味します。 よくわからないのですが、私のコードに誤りがあるのでしょうか、それともターミナルの誤りなのでしょうか?履歴をすべて消去したが、改善されなかった。 追加されました。 私のコードで関数を見つけ、それを無効にすることでエラーを回避しましたが、別のEAではこの関数は正常に動作しています。どうしてですか?プライベートメッセージで投下することができる このバグ機能を有効にした場合でも、OnTick()は最初のバーで完全に実行され、その後そのエラーは 発生します。 異なる端末で、エラーが確認される。 ティックで実行 - エラーなし... でも、不思議なのはログにあるんです。 2020.09.28 17:22:22.327 2020.09.18 09:45:02 Test_01 ツールで見ると、最初のティックがちょうど10:00で、この時点ではまだ取引セッションが終了していません。これはビジュアルモードで、ティックなしだと最初の印刷が10時位置に来る。 fxsaber 2020.09.28 15:00 #28586 Igor Makanu:一番簡単な方法は、各EAの最初のOnTick()で初期化許可をチェック することです。 これがこの問題の最大の難関です。 Alexey Viktorov 2020.09.28 15:50 #28587 fxsaber: これがこの課題の最大の問題点です。 チャートIDに注意して、年功序列で実行するようにしてください。しかし、これはEAとの相互作用をキャンセルするものではありません。あるいは、起動順にチャートIDを記載したファイル、あるいはSQLiteデータベースを作成する。 最初の初期化時に、リストにChart_ID()がなければ、リストに入力する、みたいなこと。端末 クローズによりクローズされない場合は、リストから削除される。これにより、EA同士の相互作用を設定することが可能になります。 Igor Makanu 2020.09.28 16:50 #28588 fxsaber: これがこの問題の最大の難関です。 をスケッチしてみました。このコードで2つのEAを作成しました。 #define PREFIX_NAME "QWERTY_" enum ENUM_EA_STATE {WORK, READY_TO_INIT, ENABLE_INIT, ERROR_GLOBAL_VARIABLE}; const string this_ea_name = PREFIX_NAME + MQLInfoString(MQL_PROGRAM_NAME); void OnTick() { static ENUM_EA_STATE state = GlobalVariableSet(this_ea_name, ENUM_EA_STATE::READY_TO_INIT) > 0 ? READY_TO_INIT : ERROR_GLOBAL_VARIABLE; Comment(EnumToString(state)); if(state != WORK) { if(state == ERROR_GLOBAL_VARIABLE) return; if(!My_Init(this_ea_name)) return; GlobalVariableSet(this_ea_name, ENUM_EA_STATE::WORK); state = WORK; } Print(this_ea_name, " ", __FUNCTION__); } //+------------------------------------------------------------------+ bool My_Init(const string chek_ea_name) { if(GlobalVariableGet(chek_ea_name) == (ENUM_EA_STATE)ENABLE_INIT) { Print("EA is init"); return(true); } return(false); } //+------------------------------------------------------------------+ と、タイマー(5秒)で動作する1つの制御EA #define PREFIX_NAME "QWERTY_" enum ENUM_EA_STATE {WORK, READY_TO_INIT, ENABLE_INIT, ERROR_GLOBAL_VARIABLE}; //+------------------------------------------------------------------+ int OnInit() { EventSetTimer(5); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { EventKillTimer(); } //+------------------------------------------------------------------+ void OnTimer() { for(int i = GlobalVariablesTotal() - 1; i >= 0; i--) { string curr_gname = GlobalVariableName(i); if(StringFind(curr_gname, PREFIX_NAME) !=-1) { if(GlobalVariableGet(curr_gname) == (ENUM_EA_STATE)READY_TO_INIT) { if(GlobalVariableSet(curr_gname, ENUM_EA_STATE::ENABLE_INIT) > 0) { Print("Enable Init : ", curr_gname, ".....exit"); return; } } } } } //+------------------------------------------------------------------+ 確認したところ、すべてうまくいきました。ただ一つ、グローバル変数にレコードを作成するGlobalVariableSetOnCondition()がうまくいかなかったです。 Andrey Khatimlianskii 2020.09.28 20:13 #28589 fxsaber: これがこの課題の最大の問題点です。 GlobalVariableSetOnConditionだけで 解決します。 GlobalVariableSetOnConditionがtrueを返したときのみ、操作が可能です。 初期化に成功し、リソースを解放した後、main変数を元の状態に戻すと、別のEAが開始されます。 DeInitでは、EAが全くない状態でターミナルに突入しないように、無条件で変数を削除します(前の読み込みが正しく完了しなかった場合)。 fxsaber 2020.09.28 20:40 #28590 Alexey Viktorov: イゴール・マカヌ アンドレイ・ハチムリアンスキー お勧めの商品を教えていただきありがとうございました。GlobalVariableSetOnConditionを見て みます。 1...285228532854285528562857285828592860286128622863286428652866...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
一般的に、実装の可能性についてどのようにお考えですか?
様々な実装が可能です
しかし、すべてはEA間のデータ交換の 作業に帰結する
最も簡単な方法は、初期化の許可を確認し、OnTick()で初期化自体を実行することです。そうすれば、チャートを復元してその上でEAを実行することを避けられますし、閉じる前にEAを保存すれば、OnDeinit()で実行 できます。
この動物園を誰が管理するかは重要では ありません - メインEAかサービスか
テスターログで
どういう意味ですか?
テスターログで
どういう意味ですか?
これは、m1 ohlcの次の値を受信したとき(または建値で テストする場合はバーの状態)、時間フィールドに0が含まれていることを意味します。
未定義関数とは、あらかじめ定義された関数(OnTick、OnTimerなど)の外側、つまりテスターのメインループで問題が発生したことを意味します。
これは、次のm1 ohlc値(または建値で テストするときのバーの状態)を取得するときに、時間フィールドに0が含まれることを意味します。
未定義関数とは、あらかじめ定義された関数(OnTick、OnTimerなど)の外側、つまりテスターのメインループで問題が発生したことを意味します。
一日中、すべてが順調に動いていたのに、それが始まってしまった。ユーザーとして何ができるのか?
これは、次のm1 ohlc値(または建値で テストするときのバーの状態)を取得するときに、時間フィールドに0が含まれることを意味します。
未定義関数とは、あらかじめ定義された関数(OnTick、OnTimerなど)の外側、つまりテスターのメインループで問題が発生したことを意味します。
よくわからないのですが、私のコードに誤りがあるのでしょうか、それともターミナルの誤りなのでしょうか?履歴をすべて消去したが、改善されなかった。
追加されました。
私のコードで関数を見つけ、それを無効にすることでエラーを回避しましたが、別のEAではこの関数は正常に動作しています。どうしてですか?プライベートメッセージで投下することができる
このバグ機能を有効にした場合でも、OnTick()は最初のバーで完全に実行され、その後そのエラーは 発生します。
異なる端末で、エラーが確認される。
ティックで実行 - エラーなし...
でも、不思議なのはログにあるんです。
ツールで見ると、最初のティックがちょうど10:00で、この時点ではまだ取引セッションが終了していません。これはビジュアルモードで、ティックなしだと最初の印刷が10時位置に来る。
一番簡単な方法は、各EAの最初のOnTick()で初期化許可をチェック することです。
これがこの課題の最大の問題点です。
チャートIDに注意して、年功序列で実行するようにしてください。しかし、これはEAとの相互作用をキャンセルするものではありません。あるいは、起動順にチャートIDを記載したファイル、あるいはSQLiteデータベースを作成する。
最初の初期化時に、リストにChart_ID()がなければ、リストに入力する、みたいなこと。端末 クローズによりクローズされない場合は、リストから削除される。これにより、EA同士の相互作用を設定することが可能になります。
これがこの問題の最大の難関です。
をスケッチしてみました。このコードで2つのEAを作成しました。
と、タイマー(5秒)で動作する1つの制御EA
確認したところ、すべてうまくいきました。ただ一つ、グローバル変数にレコードを作成するGlobalVariableSetOnCondition()がうまくいかなかったです。
これがこの課題の最大の問題点です。
GlobalVariableSetOnConditionだけで 解決します。
GlobalVariableSetOnConditionがtrueを返したときのみ、操作が可能です。
初期化に成功し、リソースを解放した後、main変数を元の状態に戻すと、別のEAが開始されます。
DeInitでは、EAが全くない状態でターミナルに突入しないように、無条件で変数を削除します(前の読み込みが正しく完了しなかった場合)。
お勧めの商品を教えていただきありがとうございました。GlobalVariableSetOnConditionを見て みます。