チャートに設定されたインジケーターバッファの読み取り - ページ 2 12345678910 新しいコメント Alexey Viktorov 2016.03.11 16:46 #11 Yuriy Asaulenko: 不思議ですね。ヘルプのどこかに、インジケータがすでに動作している場合、コピーは作成されないと書いてあったのですが。私には理解できない。何か勘違いしていたようです。この仮説を検証するために、OnCalculate()とOnTimer()の2つのバッファを持つインジケータを作成し、スクリプト、Expert Advisor...を作成しました。OnCalculate()でバッファに入れた値をiCustom()で表示し、OnTimer()で空の値を演繹するようにしました。同時に、スクリプトやEAを配置したチャートにインジケータが表示されます。結論:iCustom()でインジケータを呼び出した場合、インジケータ内でOnTimer()イベントが実行されない。ドキュメントに書かれているのは、このためかもしれません関数 OnTimer() は、イベントが発生したときに呼び出されます。タイマーは、エキスパートアドバイザーとインジケータ用のシステムタイマーによってのみ生成さ れます。 しかも、指標には一切触れていない。どうやらmqlには、文書化されていない便利な機能や、文書化されていない複雑な機能があるようです...。 События клиентского терминала - Программы MQL4 - Справочник MQL4 docs.mql4.com События клиентского терминала - Программы MQL4 - Справочник MQL4 削除済み 2016.03.11 16:47 #12 comp:チャート上にインジケータが配置されます。Timer、ChartEvent、Calculateイベントによって 再描画されます。CTRL+Dで見ることができるそのインジケーターバッファ(INDICATOR_DATA)の現在値を読み取るスクリプトが必要です。MT4で可能でしょうか? 読み書きが可能で、DLLは不要です。 Alexey Viktorov 2016.03.11 16:49 #13 pako: 読み書き可能でDLLは不要 さて、その例はどこにあるのでしょうか? 削除済み 2016.03.11 18:45 #14 Alexey Viktorov: さて、お手本はどこにあるのでしょうか? インジケーターはどこですか? Dmitry Fedoseev 2016.03.11 20:01 #15 comp:残念ながら、この場合 はどうにもならない。 なぜ助からないのか? 削除済み 2016.03.11 20:35 #16 pako: インジケーターはどこですか?ドミトリー・フェドセーエフ なぜ、役に立たないのか?件名#property strict #property indicator_separate_window #property indicator_buffers 1 #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #define PAUSE 100 input double EMA = 0.1; // Коэффициент экспоненциального сглаживания input int Amount = 100; // Сколько раз применить до "сброса" double Buffer[]; int OnCalculate( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[] ) { return(rates_total); } void OnInit( void ) { SetIndexBuffer(0, Buffer); EventSetMillisecondTimer(PAUSE); return; } void OnDeinit( const int reason ) { EventKillTimer(); return; } void SetBuffer( const bool Random ) { const int Size = ArraySize(Buffer); if (Random) { MathSrand((int)TimeLocal()); for (int i = 0; i < Size; i++) Buffer[i] = MathRand(); } else for (int i = 1; i < Size; i++) Buffer[i] += (Buffer[i - 1] - Buffer[i]) * EMA; return; } void OnTimer( void ) { static int Count = 0; SetBuffer(Count % Amount == 0); ChartRedraw(); Count++; return; } Alexey Volchanskiy 2016.03.11 21:47 #17 Yuriy Asaulenko: 不思議ですね。ヘルプのどこかに、インジケータがすでに動作している場合、コピーは作成されないと書いてあったのですが。何か見落としているのかもしれません。最近、あるインジケータを投稿したのですが、それは単にテキスト文字列を 表示するだけです。また、iCustomを通して呼び出すと、チャート上のインジケータのラインとiCustomが干渉してしまい、プログラム的に1つだけ出力する必要がありました。多分、コードのコピーはメモリに作成されないが、再計算はそのパラメータで行われるhttps://www.mql5.com/ru/code/14737/83151#!tab=code Dmitry Fedoseev 2016.03.11 22:06 #18 comp:件名 それがどうした? Алексей Тарабанов 2016.03.11 23:30 #19 Alexey Volchanskiy:最近、あるインジケータを投稿したのですが、それは単にテキスト文字列を 表示するだけです。また、iCustomを通して呼び出すと、チャート上のインジケータのラインとiCustomが干渉してしまい、プログラム的に1つだけ出力する必要がありました。おそらく、コードのコピーはメモリに作成されませんが、再計算はそのパラメータで行われますCopyhttps://www.mql5.com/ru/code/14737/83151#!tab=code ダイナミックロードであるため、コードのコピーは作成できない。 Alexey Volchanskiy 2016.03.12 08:34 #20 Алексей Тарабанов: コードコピーは、ダイナミックロードなので、作らないわけにはいきません。口先だけの主張、それともMQ開発者?:))とはいえ、プログラムコードが1つのインスタンスにあり、クライアント用にデータインスタンスが作られるDLLになぞらえて、私自身はそう考えています。要するに、チャートにインデックスがある場合、iCustomはそこからではなく、別途作成したインスタンスからデータを取得するというのが現実的なところです。 12345678910 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
不思議ですね。ヘルプのどこかに、インジケータがすでに動作している場合、コピーは作成されないと書いてあったのですが。私には理解できない。
何か勘違いしていたようです。この仮説を検証するために、OnCalculate()とOnTimer()の2つのバッファを持つインジケータを作成し、スクリプト、Expert Advisor...を作成しました。OnCalculate()でバッファに入れた値をiCustom()で表示し、OnTimer()で空の値を演繹するようにしました。同時に、スクリプトやEAを配置したチャートにインジケータが表示されます。
結論:iCustom()でインジケータを呼び出した場合、インジケータ内でOnTimer()イベントが実行されない。
ドキュメントに書かれているのは、このためかもしれません
関数 OnTimer() は、イベントが発生したときに呼び出されます。タイマーは、エキスパートアドバイザーとインジケータ用のシステムタイマーによってのみ生成さ れます。
しかも、指標には一切触れていない。
どうやらmqlには、文書化されていない便利な機能や、文書化されていない複雑な機能があるようです...。
チャート上にインジケータが配置されます。Timer、ChartEvent、Calculateイベントによって 再描画されます。
CTRL+Dで見ることができるそのインジケーターバッファ(INDICATOR_DATA)の現在値を読み取るスクリプトが必要です。MT4で可能でしょうか?
読み書き可能でDLLは不要
さて、お手本はどこにあるのでしょうか?
残念ながら、この場合
はどうにもならない。
インジケーターはどこですか?
なぜ、役に立たないのか?
件名
不思議ですね。ヘルプのどこかに、インジケータがすでに動作している場合、コピーは作成されないと書いてあったのですが。何か見落としているのかもしれません。
最近、あるインジケータを投稿したのですが、それは単にテキスト文字列を 表示するだけです。また、iCustomを通して呼び出すと、チャート上のインジケータのラインとiCustomが干渉してしまい、プログラム的に1つだけ出力する必要がありました。
多分、コードのコピーはメモリに作成されないが、再計算はそのパラメータで行われる
https://www.mql5.com/ru/code/14737/83151#!tab=code
件名
最近、あるインジケータを投稿したのですが、それは単にテキスト文字列を 表示するだけです。また、iCustomを通して呼び出すと、チャート上のインジケータのラインとiCustomが干渉してしまい、プログラム的に1つだけ出力する必要がありました。
おそらく、コードのコピーはメモリに作成されませんが、再計算はそのパラメータで行われますCopy
https://www.mql5.com/ru/code/14737/83151#!tab=code
コードコピーは、ダイナミックロードなので、作らないわけにはいきません。
口先だけの主張、それともMQ開発者?:))
とはいえ、プログラムコードが1つのインスタンスにあり、クライアント用にデータインスタンスが作られるDLLになぞらえて、私自身はそう考えています。
要するに、チャートにインデックスがある場合、iCustomはそこからではなく、別途作成したインスタンスからデータを取得するというのが現実的なところです。