Init()およびDeInit()実行シーケンス - ページ 22 1...1516171819202122232425262728 新しいコメント Dmitry Fedoseev 2017.04.14 23:47 #211 fxsaber: 問題の解決方法つまり、全ての問題は、どのインディケータにも同じ行を2つ追加することです。図書館コード もっとシンプルで、もっとクリアで、もっと鮮やかなものはないのだろうか。また、チャート上に異なるパラメータを持つ2つのインジケータがある場合に備えて、インジケータの各インスタンスにグローバル変数名が 必要です)。 fxsaber 2017.04.15 00:21 #212 Dmitry Fedoseev: もっとシンプルに、わかりやすく、明白にできないものか。いいえ。また、チャート上に異なるパラメータを持つ2つのインジケータがある場合、各インスタンスは独自のグローバル変数名を 必要とします)。なぜなら、1つのチャートに異なるパラメータを持つ2つのインジケータのインスタンスがあると、このブランチで求められている使い方と矛盾してしまうからです。したがって、2番目のインスタンスを起動しても、1番目のインスタンスがアンロードされるまで、単純に動作しないのです。 Dmitry Fedoseev 2017.04.15 00:26 #213 fxsaber:まさかね。...#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 string gvName; double Label1Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(){ gvName=MQLInfoString(MQL_PROGRAM_NAME); if(GlobalVariableCheck(gvName)){ EventSetMillisecondTimer(1); } else{ GlobalVariableSet(gvName,1); NewInit(); } return(INIT_SUCCEEDED); } void NewInit(){ // все что было в ините должно быть здесь SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); } void OnDeinit(const int r){ GlobalVariableDel(gvName); } void OnTimer(){ if(!GlobalVariableCheck(gvName)){ EventKillTimer(); GlobalVariableSet(gvName,1); NewInit(); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { for(int i=rates_total-10;i<rates_total;i++)Label1Buffer[i]=close[i]; return(rates_total); } //+------------------------------------------------------------------+ そうなんですか? fxsaber 2017.04.15 00:33 #214 Dmitry Fedoseev: そうなんですか?いいえ、もちろんそんなことはありません。Handle-chartは必ずグローバル変数 名で記述しなければならない。そして、私の解決策は、たった2行の追加で実現します。ややシンプルになりましたね。#include <Init_Sync.mqh> // Делает синхронизированными Init/Deinit индикаторов #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 double Label1Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(){ SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); return(INIT_SUCCEEDED); } void OnTimer(){ CHECK_INIT_SYNC; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { for(int i=rates_total-10;i<rates_total;i++)Label1Buffer[i]=close[i]; return(rates_total); } //+------------------------------------------------------------------+ Dmitry Fedoseev 2017.04.15 00:40 #215 fxsaber:いいえ、もちろんそんなことはありません。Handle-chartは必ずグローバル変数 名で記述しなければならない。そして、私の解決策は、たった2行の追加で実現します。これはやや単純な話です。 そして、ロジック(アルゴリズム)そのものは同じなのですか? Dmitry Fedoseev 2017.04.15 00:42 #216 fxsaber:....そして、私の解決策は、たった2行の追加で実現します。これはやや単純な話です。また、SetIndexBufferのような関数を 標準のinitではなく、ディレイで呼び出す ことは、気にならないのでしょうか?本当に大丈夫なんですか? fxsaber 2017.04.15 00:43 #217 Dmitry Fedoseev: ロジック(アルゴリズム)は同じなのでしょうか? はい。 fxsaber 2017.04.15 00:46 #218 Dmitry Fedoseev: 私が何本、あなたが何本持っているか数えてみてください...。2つの行が追加され、どこにとんでもない無意味なものがあるのか - 2行。数えていないのか......多いな。この議論は、どのような指標でも、ちょうど2つ追加すれば十分です。 Dmitry Fedoseev 2017.04.15 00:48 #219 fxsaber:数えていないのか......多いな。ちょうど2つ加えることで、どの指標もこの議論の切望される性質を持つようになります。 これが10問目です。好みの問題ですね。しかし、それでも私のコードは5倍小さく、読みやすくなっています :/。もっと面白いのは、これだ。 SetIndexBuffer関数を 標準のiniteではなく、delayで呼び出すと混乱しないか?本当にこれでいいのでしょうか? fxsaber 2017.04.15 00:53 #220 Dmitry Fedoseev: SetIndexBuffer関数の 呼び出しは、標準のinitではなく、ディレイで行っているのでしょうか?本当にこれでいいのでしょうか?もちろん です。OnCalculateを呼び出すと問題が発生すると思われるが、これは簡単なライブラリ編集で解決する。月曜日には明らかにすることができるだろう。原則的には1行で十分な場合もあります。 1...1516171819202122232425262728 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
問題の解決方法
つまり、全ての問題は、どのインディケータにも同じ行を2つ追加することです。
図書館コード
もっとシンプルで、もっとクリアで、もっと鮮やかなものはないのだろうか。
また、チャート上に異なるパラメータを持つ2つのインジケータがある場合に備えて、インジケータの各インスタンスにグローバル変数名が 必要です)。
もっとシンプルに、わかりやすく、明白にできないものか。
いいえ。
また、チャート上に異なるパラメータを持つ2つのインジケータがある場合、各インスタンスは独自のグローバル変数名を 必要とします)。
なぜなら、1つのチャートに異なるパラメータを持つ2つのインジケータのインスタンスがあると、このブランチで求められている使い方と矛盾してしまうからです。
したがって、2番目のインスタンスを起動しても、1番目のインスタンスがアンロードされるまで、単純に動作しないのです。
まさかね。
...
そうなんですか?
そうなんですか?
いいえ、もちろんそんなことはありません。Handle-chartは必ずグローバル変数 名で記述しなければならない。
そして、私の解決策は、たった2行の追加で実現します。ややシンプルになりましたね。
いいえ、もちろんそんなことはありません。Handle-chartは必ずグローバル変数 名で記述しなければならない。
そして、私の解決策は、たった2行の追加で実現します。これはやや単純な話です。
そして、ロジック(アルゴリズム)そのものは同じなのですか?
....
そして、私の解決策は、たった2行の追加で実現します。これはやや単純な話です。
また、SetIndexBufferのような関数を 標準のinitではなく、ディレイで呼び出す ことは、気にならないのでしょうか?本当に大丈夫なんですか?
ロジック(アルゴリズム)は同じなのでしょうか?
私が何本、あなたが何本持っているか数えてみてください...。2つの行が追加され、どこにとんでもない無意味なものがあるのか - 2行。
数えていないのか......多いな。
この議論は、どのような指標でも、ちょうど2つ追加すれば十分です。
数えていないのか......多いな。
ちょうど2つ加えることで、どの指標もこの議論の切望される性質を持つようになります。
これが10問目です。好みの問題ですね。しかし、それでも私のコードは5倍小さく、読みやすくなっています :/。
もっと面白いのは、これだ。
SetIndexBuffer関数を 標準のiniteではなく、delayで呼び出すと混乱しないか?本当にこれでいいのでしょうか?
SetIndexBuffer関数の 呼び出しは、標準のinitではなく、ディレイで行っているのでしょうか?本当にこれでいいのでしょうか?
もちろん です。OnCalculateを呼び出すと問題が発生すると思われるが、これは簡単なライブラリ編集で解決する。月曜日には明らかにすることができるだろう。
原則的には1行で十分な場合もあります。