Init()およびDeInit()実行シーケンス - ページ 23 1...16171819202122232425262728 新しいコメント fxsaber 2017.04.15 01:45 #221 fxsaber:原理的には一行で済むのですが。1行にした。 Alexey Viktorov 2017.04.15 06:43 #222 Nikolai Semko: どこが曖昧なんだ?この原始的な例を試してみてください。TFを交換すると "らしさ "がわかる。この例では、OnInitで現在時刻と 価格の座標を持つオブジェクトを生成しています。OnCalculateでは、このオブジェクトは価格と一緒に移動します。OnDeinitでは単純に(論理的に)削除される。TFを切り替えると、オブジェクトが現れたり消えたりすることが判明しました。 なぜ、このようなことが起こるのでしょうか。 なぜなら、古いTFのOnDeinitが、新しいTFのOnInitで既に作成されたものを削除して しまうことが あるからです。バグではありません!この例を作ったプログラマは、このブランチを読まずにどう考えるべきでしょうか?カレッジという原始的な例を使う意味はあるのでしょうか?代わりにVERY CORPORATIONのコード例を使ってください。//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property indicator_chart_window #property indicator_plots 0 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { datetime t = TimeCurrent(); double pr = SymbolInfoDouble(Symbol(),SYMBOL_BID); if(ObjectFind(0, "InitDeinit") < 0) // ПРОВЕРКА СУЩЕСТВОВАНИЯ ОБЪЕКТА ПЕРЕД ЕГО СОЗДАНИЕМ ОБЯЗАТЕЛЬНА!!! { ObjectCreate(0,"InitDeinit",OBJ_ARROW_THUMB_UP,0,t,pr); Print(__FUNCTION__, " создан InitDeinit"); } ObjectSetInteger(0,"InitDeinit",OBJPROP_WIDTH,50); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(UninitializeReason() != REASON_CHARTCHANGE) // ПРОВЕРКА ПРИЧИНЫ ДЕИНИЦИАЛИЗАЦИИ РЕШАЕТ ТВОЮ ПРОБЛЕМУ НА РАЗ... { ObjectDelete(0,"InitDeinit"); ChartRedraw(0); // ЭТО НУЖНО ТОЛЬКО НА ВЫХОДНЫЕ. В РАБОЧИЕ ДНИ НЕ БУДЕТ ЛИШНИМ, НО С ПРИХОДОМ НОВОГО ТИКА ОБЪЕКТ БУДЕТ НЕДОСТУПЕН. Print(__FUNCTION__, " InitDeinit удалён"); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // размер массива price[] const int prev_calculated, // обработано баров на предыдущем вызове const int begin, // откуда начинаются значимые данные const double& price[]) // массив для расчета { datetime t = TimeCurrent(); double pr = SymbolInfoDouble(Symbol(),SYMBOL_BID); ObjectMove(0,"InitDeinit",0,t,pr); return(rates_total); } //+------------------------------------------------------------------+ ファイル: Init-Deinit.mq5 5 kb fxsaber 2017.04.15 06:53 #223 Alexey Viktorov:事実上正しいコードの例を使った方がいい。同じです。オブジェクトは、無関係なインジケータ・コピーの Deinit を介して削除することができます。また、実物のOnInitはこのイベントの前に実行される。しかし、古いコピーのOnDeinitから新しいコピーのOnInitまで、あらゆる情報の転送を 表示する方がずっと良いのです。実は、ここがポイントなんです。 Alexey Viktorov 2017.04.15 07:02 #224 fxsaber: これも同じです。オブジェクトは、無関係なインジケータ・コピーの Deinit を介して削除することができます。また、実物のOnInitはこのイベントの前に実行される。if(UninitializeReason() != REASON_CHARTCHANGE) { // Если причина деинициализации смена периода графика сюда не попадаем и объекты не удаляются. }コンピュータの電源プラグを抜いた場合を除き、それ以外の場合はオブジェクトが削除されます。 Alexey Viktorov 2017.04.15 07:03 #225 fxsaber:しかし、古いコピーのOnDeinitから新しいコピーのOnInitに情報を渡す ことを表示する方がずっと良い。実はここがポイントなんです。 ずいぶん前に気づいたのですが、シンプルな解決策はあなたの得意とするところではありませんね。:-))) fxsaber 2017.04.15 07:11 #226 Alexey Viktorov:コンピュータの電源プラグを抜いた場合を除き、それ以外の場合はオブジェクトが削除されます。 プライベートディスカッションの問題に対する解決策を示したことになります。一般的なものは次のように定式化される。fxsaber古いコピーのOnDeinitから新しいコピーのOnInitへ、あらゆる 情報を確実に渡します。その結果、OnDeinit/OnInitの明確な実行シーケンスが必要になります。今まで必要なかったのですが、ソリューションアイデアを 問題なく導入することができました。 Alexey Viktorov 2017.04.15 07:26 #227 fxsaber: プライベートディスカッションの問題解決策を示したわけですね。一般的なものは、次のように定式化される。その結果、OnDeinit/OnInitの明確な実行シーケンスが必要になります。私はこれを必要としませんでしたが、問題なくソリューションアイデアを 実行しました。まあ、反対はしていないんですけどね。でも、左手の小指で右耳を掻くのは、私には無理です。代わりに"それ"を書くために、このような単純なテスト...何と呼べばいいのかもわからない。マゾヒズムには存在する権利があるのだから、素人向けにして おけよ。プログラミングに対するプロ意識には敬意を表しますが。 fxsaber 2017.04.15 07:37 #228 Alexey Viktorov:そんな単純なチェックではなく、「それ」と書いて・・・。 つまり、このスレッドで議論されている問題のポイントがずれているわけです。 Alexey Viktorov 2017.04.15 07:47 #229 fxsaber: つまり、このスレッドで議論されている問題の本質を理解していなかったということですね。わかりますが、問題の議論を自分の能力(小手先ではなく)に転嫁してしまっています。そして結局のところ、私の回答はコルトのコードの具体例に対するものであり、あなたの能力に対するものではなく、On_InitとOn_Deinitの実行順序の規制を伴うデータ転送の例です。対話を続ける目的は何でしょうか。左手小指で右耳を掻くのが気持ちいい、とでも言いたいのでしょうか。それとも別の目的? fxsaber 2017.04.15 07:50 #230 Alexey Viktorov:それとも別のターゲットなのでしょうか? やり直した例は、議論していた問題と完全に一致するものではありませんでした。UninitializeReasonによる 解決策を持たない別の例を示すことができます。 1...16171819202122232425262728 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
原理的には一行で済むのですが。
どこが曖昧なんだ?
この原始的な例を試してみてください。TFを交換すると "らしさ "がわかる。
この例では、OnInitで現在時刻と 価格の座標を持つオブジェクトを生成しています。OnCalculateでは、このオブジェクトは価格と一緒に移動します。
OnDeinitでは単純に(論理的に)削除される。
TFを切り替えると、オブジェクトが現れたり消えたりすることが判明しました。
なぜ、このようなことが起こるのでしょうか。
なぜなら、古いTFのOnDeinitが、新しいTFのOnInitで既に作成されたものを削除して しまうことが あるからです。バグではありません!この例を作ったプログラマは、このブランチを読まずにどう考えるべきでしょうか?
カレッジという原始的な例を使う意味はあるのでしょうか?
代わりにVERY CORPORATIONのコード例を使ってください。
事実上正しいコードの例を使った方がいい。
同じです。オブジェクトは、無関係なインジケータ・コピーの Deinit を介して削除することができます。また、実物のOnInitはこのイベントの前に実行される。
しかし、古いコピーのOnDeinitから新しいコピーのOnInitまで、あらゆる情報の転送を 表示する方がずっと良いのです。実は、ここがポイントなんです。
これも同じです。オブジェクトは、無関係なインジケータ・コピーの Deinit を介して削除することができます。また、実物のOnInitはこのイベントの前に実行される。
コンピュータの電源プラグを抜いた場合を除き、それ以外の場合はオブジェクトが削除されます。
しかし、古いコピーのOnDeinitから新しいコピーのOnInitに情報を渡す ことを表示する方がずっと良い。実はここがポイントなんです。
コンピュータの電源プラグを抜いた場合を除き、それ以外の場合はオブジェクトが削除されます。
古いコピーのOnDeinitから新しいコピーのOnInitへ、あらゆる 情報を確実に渡します。
その結果、OnDeinit/OnInitの明確な実行シーケンスが必要になります。今まで必要なかったのですが、ソリューションアイデアを 問題なく導入することができました。
プライベートディスカッションの問題解決策を示したわけですね。一般的なものは、次のように定式化される。
その結果、OnDeinit/OnInitの明確な実行シーケンスが必要になります。私はこれを必要としませんでしたが、問題なくソリューションアイデアを 実行しました。
まあ、反対はしていないんですけどね。でも、左手の小指で右耳を掻くのは、私には無理です。代わりに"それ"を書くために、このような単純なテスト...何と呼べばいいのかもわからない。マゾヒズムには存在する権利があるのだから、素人向けにして おけよ。プログラミングに対するプロ意識には敬意を表しますが。
そんな単純なチェックではなく、「それ」と書いて・・・。
つまり、このスレッドで議論されている問題の本質を理解していなかったということですね。
わかりますが、問題の議論を自分の能力(小手先ではなく)に転嫁してしまっています。
そして結局のところ、私の回答はコルトのコードの具体例に対するものであり、あなたの能力に対するものではなく、On_InitとOn_Deinitの実行順序の規制を伴うデータ転送の例です。
対話を続ける目的は何でしょうか。左手小指で右耳を掻くのが気持ちいい、とでも言いたいのでしょうか。それとも別の目的?
それとも別のターゲットなのでしょうか?