mql5言語の特徴、微妙なニュアンスとテクニック - ページ 61 1...545556575859606162636465666768...247 新しいコメント fxsaber 2017.11.24 07:57 #601 ウラジスラフ・アンドルシェンコこのたび、履歴に1000件以上の案件が含まれており、履歴の利益を計算するために履歴処理機能などを呼び出すと 問題が発生しました。+ チャート上の情報が遅くなり始め、端末がハングアップする。すなわち、見積もりには遅れが生じる。コードがなければ推測するしかない。 Artyom Trishkin 2017.11.26 20:30 #602 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム mql5の特性、ヒントとコツ アレクセイ・ナヴォイコフ さん 2017.07.21 17:04 MQLに多重継承がないのは残念です。しかし、テンプレートやマクロなど、ありとあらゆる方法で動作させることができるのですが、それを避けるにはどうしたらよいのでしょうか?)以下は、私が作ったものです。すべてのソースクラスは、親クラスを定義するテンプレートとして宣言する必要が あります。class CBase { }; // базовый класс // Макросы, задающие список наследования: #define INHERIT1(T) T<CBase> #define INHERIT2(T1, T2) T2<INHERIT1(T1)> #define INHERIT3(T1, T2, T3) T3<INHERIT2(T1,T2)> #define INHERIT4(T1, T2, T3, T4) T4<INHERIT3(T1,T2,T3)> // Различные пользовательские классы: template<typename TParent> class A : public TParent { public: void a() { Print("A"); } }; template<typename TParent> class B : public TParent { public: void b() { Print("B"); } }; template<typename TParent> class C : public TParent { public: void c() { Print("C"); } }; class X : public INHERIT3(A, B, C) { }; // Объявляем класс, наследуемый от A, B, C template<typename T> void SomeFunc(B<T>& obj) { obj.b(); } // Проверочная функция, принимающая класс B void OnInit() { X x; x.a(); x.b(); x.c(); SomeFunc(x); }もちろん、クラスは同時継承(真の多重継承)ではなく、順次(設定した順序で)継承されるという事実があるため、微妙な部分もある。特に、過負荷が発生したときの優先順位が違ってきます。また、同じテンプレートクラスが何度も継承の連鎖に参加すると、互いに何の関係もない全く別のクラスになってしまいます。だから、ここで気をつけなければならないことがある。しかし、インターフェースは何の問題もなく、制限なく継承することができます。しかし、テンプレートのような形で宣言しない場合はどうでしょうか。例えば、自給自足のライブラリーは2つ用意されています。class CLib1 : public CClass1 { };および class CLib2 : public CClass2 { };プログラムクラスでそのような継承を行うようにする必要があります。CLib1--> CLib2 --> CProgram で、両方のライブラリが利用できるようにする。また、CLib1のライブラリはCLib2で利用できるようになります。両ライブラリのコードは一切変更できません。可能なのでしょうか?多重継承の場合、おそらく次のようになります。 class CProgram : public CLib1,CLib2 { }; Koldun Zloy 2017.11.27 15:24 #603 アルチョム・トリシキンテンプレート宣言がない場合はどうでしょうか?例えば、自給自足のライブラリーは2つ用意されています。class CLib1 : public CClass1 { };および class CLib2 : public CClass2 { };このような継承をプログラムクラスで行う必要があります。CLib1--> CLib2 --> CProgram で、両方のライブラリが利用できるようにする。また、CLib1のライブラリはCLib2で利用できるようになります。両ライブラリのコードは一切変更できません。これは可能なのでしょうか?多重継承の場合、おそらく次のようになります。 class CProgram : public CLib1,CLib2 { };そうすれば、何も失われることはないでしょう。class CProgram { CLib1 lib1; CLib2 lib2; }; Artyom Trishkin 2017.11.27 15:48 #604 コルドゥン・ズロイ そうすることで損をすることはないのです。 はい、そうです。ただ、不要なモノは避けたかったんです。 fxsaber 2017.11.29 11:41 #605 非同期コピー関数(CopyRates、CopyTicksなど)からデータを取得するには、おそらくEventChartCustomを 使用するのが最適です。特に指標に関連する。 fxsaber 2017.11.30 08:07 #606 OnDeinit (EA, not indicator) のAccountInfoString(ACCOUNT_SERVER) は、新しい取引サーバーを返します。 fxsaber 2017.11.30 08:48 #607 メモアクション/プログラムの種類TFまたはシンボルの変更アカウント変更インジケーターOnDeinitとOnInitを実行すると、グローバルクラスのオブジェクトが変更されます(フルリセット)。prev_calculatedがリセットされる以外は何も起こりません。電子ブックOnDeinitとOnInitを実行しても、グローバルクラスのオブジェクトは 変更されません。OnDeinitとOnInitを実行すると、グローバルクラスのオブジェクトが変更されます(フルリロード)。 fxsaber 2017.12.04 08:35 #608 ファイル圧縮と汎用実行時間測定 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム ストラテジーテスターへの不満、MQL開発者への不満。 fxsaber さん 2017.12.04 09:11 #define BENCH(A) \ { \ const ulong StartTime = GetMicrosecondCount(); \ A; \ Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \ } void OnStart() { uchar Data[]; uchar Key[1]; uchar Result[]; FileLoad("thousands_rubies_galaxy.bmp", Data); BENCH(Print(CryptEncode(CRYPT_ARCH_ZIP, Data, Key, Result))) ArrayFree(Data); FileLoad("space_wind.wav", Data); BENCH(Print(CryptEncode(CRYPT_ARCH_ZIP, Data, Key, Result))) }結果826534 Time[Print(CryptEncode(CRYPT_ARCH_ZIP,Data,Key,Result))] = 53334 306648 Time[Print(CryptEncode(CRYPT_ARCH_ZIP,Data,Key,Result))] = 29029 fxsaber 2017.12.05 07:30 #609 価格チャート上に他のシンボルの価格チャートをオーバーレイする指標の全クラスがあります。これらは同じように、インジケーターバッファを通して 行われます。しかし、MT5には素晴らしいOBJ_CHARTがあり、このタスクをより美しく、インジケーターバッファなしで実現することができます。例えば、任意のインジケーターを置いて、それが他のシンボルでどう見えるかをすぐに確認することができます。スレーブ方式 - 複数のチャートをメインチャートの背景として表示します。 Vasiliy Pushkaryov 2017.12.05 07:49 #610 fxsaber例えば、任意のインジケータをキャストして、それが別のシンボルでどのように見えるかをすぐに確認することができます。スレーブ方式 - 複数のチャートをメインチャートの背景として表示します。 このようなイメージの写真はないのでしょうか?まだOBJ_CHARTを使って いないので、よくわからないのですが 1...545556575859606162636465666768...247 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
このたび、履歴に1000件以上の案件が含まれており、履歴の利益を計算するために履歴処理機能などを呼び出すと 問題が発生しました。+ チャート上の情報が遅くなり始め、端末がハングアップする。すなわち、見積もりには遅れが生じる。
コードがなければ推測するしかない。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5の特性、ヒントとコツ
アレクセイ・ナヴォイコフ さん 2017.07.21 17:04
MQLに多重継承がないのは残念です。しかし、テンプレートやマクロなど、ありとあらゆる方法で動作させることができるのですが、それを避けるにはどうしたらよいのでしょうか?)
以下は、私が作ったものです。すべてのソースクラスは、親クラスを定義するテンプレートとして宣言する必要が あります。
もちろん、クラスは同時継承(真の多重継承)ではなく、順次(設定した順序で)継承されるという事実があるため、微妙な部分もある。特に、過負荷が発生したときの優先順位が違ってきます。また、同じテンプレートクラスが何度も継承の連鎖に参加すると、互いに何の関係もない全く別のクラスになってしまいます。だから、ここで気をつけなければならないことがある。しかし、インターフェースは何の問題もなく、制限なく継承することができます。
しかし、テンプレートのような形で宣言しない場合はどうでしょうか。
例えば、自給自足のライブラリーは2つ用意されています。
class CLib1 : public CClass1 { };および
class CLib2 : public CClass2 { };
プログラムクラスでそのような継承を行うようにする必要があります。
CLib1--> CLib2 --> CProgram で、両方のライブラリが利用できるようにする。また、CLib1のライブラリはCLib2で利用できるようになります。
両ライブラリのコードは一切変更できません。
可能なのでしょうか?
多重継承の場合、おそらく次のようになります。
class CProgram : public CLib1,CLib2 { };
テンプレート宣言がない場合はどうでしょうか?
例えば、自給自足のライブラリーは2つ用意されています。
class CLib1 : public CClass1 { };および
class CLib2 : public CClass2 { };
このような継承をプログラムクラスで行う必要があります。
CLib1--> CLib2 --> CProgram で、両方のライブラリが利用できるようにする。また、CLib1のライブラリはCLib2で利用できるようになります。
両ライブラリのコードは一切変更できません。
これは可能なのでしょうか?
多重継承の場合、おそらく次のようになります。
class CProgram : public CLib1,CLib2 { };
そうすれば、何も失われることはないでしょう。
class CProgram { CLib1 lib1; CLib2 lib2; };
そうすることで損をすることはないのです。
非同期コピー関数(CopyRates、CopyTicksなど)からデータを取得するには、おそらくEventChartCustomを 使用するのが最適です。
特に指標に関連する。
OnDeinit (EA, not indicator) のAccountInfoString(ACCOUNT_SERVER) は、新しい取引サーバーを返します。
メモ
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
ストラテジーテスターへの不満、MQL開発者への不満。
fxsaber さん 2017.12.04 09:11
結果
価格チャート上に他のシンボルの価格チャートをオーバーレイする指標の全クラスがあります。これらは同じように、インジケーターバッファを通して 行われます。
しかし、MT5には素晴らしいOBJ_CHARTがあり、このタスクをより美しく、インジケーターバッファなしで実現することができます。
例えば、任意のインジケーターを置いて、それが他のシンボルでどう見えるかをすぐに確認することができます。
スレーブ方式 - 複数のチャートをメインチャートの背景として表示します。
例えば、任意のインジケータをキャストして、それが別のシンボルでどのように見えるかをすぐに確認することができます。
スレーブ方式 - 複数のチャートをメインチャートの背景として表示します。