記事"手動取引のサポーターを作成する"についてのディスカッション - ページ 6

 
zhixiong Li:
こんにちは、ドミトリー。このトレードパネルはMT4のヒストリーテストモードで使用できますか?ヒストリーのバックテストを行う際、OnChartEvent()関数が 実行されないようですが?これを解決する方法を教えていただけますか?ありがとうございます。
はい、テストモードではMT4とMT5はOnChartEvent関数を実行するイベントを生成しません。しかし、MT4のテストモードでいくつかのpsnelを使用したい場合は、ティックごとにボタンの状態をチェックする関数を作成する必要があります。しかし、この方法はMT5では機能しません。
よろしく、
Dmitriy.
 

こんにちは。あなたの記事で、パネルの "可動性 "がどのように実装されているのか、どのようにマウスでパネルを移動させ、最小化するのか理解できませんでした。説明してください。また、同じことをmql4で実装することが可能かどうか教えてください。

 
Aleksandr Teleguz:

こんにちは。あなたの記事で、パネルの "可動性 "がどのように実装されているのか、どのようにマウスでパネルを移動させ、最小化するのか理解できませんでした。説明してください。また、同じことをmql4で実装することが可能かどうか教えてください。

こんにちは、
私の記事では、パネルを書くときに標準ライブラリを 使いました。あなたが指定した関数は、すでにその中に実装されています。mql4にも同様の機能を持つライブラリがあります。


Dmitry.

 

ドミトリー、こんにちは!MT4でパネルを作っているのですが、あなたの経験を参考にしたのですが、問題があります。MT5では問題ありませんが、MT4では問題があります。多分、あなたはどこを掘るか知っていますか?)

 
Eugeny Kotovschikov:

ドミトリー、こんにちは!MT4でパネルを作っているのですが、あなたの経験を参考にしたのですが、問題があります。MT5では問題ありませんが、MT4では問題があります。多分、あなたはどこを掘るか知っていますか?)



OnDeinitに、チャートからパネルを強制的に削除する関数を書く必要があります。チャートの変更時にMT4がプログラムを終了してOnDeinit関数を呼び出すわけではありません。CAppDialog クラスでの最初の非初期化の 後、非初期化の 理由がプライベート変数m_deinit_reasonに 書き込まれます 。しかし、タイムフレームを変更すると、MT4はメモリからクラスを削除しません。また、その後ペーネルを削除しようとしても、クラスは変数の値を読み込み、変数が空でないため、何もしません。

//+------------------------------------------------------------------+
//| アプリケーション・ダイアログの初期化関数
//+------------------------------------------------------------------+
void CAppDialog::Destroy(const int reason)
  {
//--- もう破壊されたのか?
   if(m_deinit_reason!=WRONG_VALUE)
      return;
//---

しかし、よりシンプルでおそらくより正しい方法は、"*"を使用したクラスへの参照を通してパネルクラスを宣言することです。この変形では、コードを少し変更する必要があります。

CTradePanel *TradePanel;
//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   // 初期クラス CTradePanel
   TradePanel=new CTradePanel();
   if(CheckPointer(TradePanel)==POINTER_INVALID)
      return INIT_FAILED;
   // クリエート・トレード・パネル
   if(!TradePanel.Create(ChartID(),"Trade Panel"))
     {
      return (INIT_FAILED);
     }
   // ラン・トレード・パネル
   TradePanel.Run();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
|エキスパート初期化関数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(CheckPointer(TradePanel)!=POINTER_INVALID)
     {
      TradePanel.Destroy(reason);
      delete TradePanel;
     }
  }

この方法では、非初期化時にトレードパネルクラスを強制的に削除し、再作成します。


Dmitry.

 
Dmitriy Gizlyk:


OnDeinitでチャートからパネルを強制的に削除する関数を書く必要があります。チャートの変更時にMT4がプログラムを終了してOnDeinit関数を呼び出すわけではありません。CAppDialog クラスでの最初の非初期化の 後、非初期化の 理由がプライベート変数m_deinit_reasonに 書き込まれます 。しかし、タイムフレームを変更すると、MT4はメモリからクラスを削除しません。また、その後ペーネルを削除しようとしても、クラスは変数の値を読み込み、変数が空でないため、何もしません。

しかし、よりシンプルでおそらくより正しい方法は、"*"を使用したクラスへの参照を通してパネルクラスを宣言することです。この変形では、コードを少し変更する必要があります。

この方法では、非初期化時にトレードパネルクラスを強制的に削除し、再作成します。


Dmitry.


ドミトリー、ありがとうございます。)

 
Dmitriy Gizlyk:
mt4でヒストリカルデータをテストする際に、手動で注文を出す機能のパネルと同じようなパネルを作成するにはどうすればよいですか?

ヒストリカル・バックテストはボタンでは操作できません。

 
Yupeng Xiao:

ヒストリカル・バックテストはボタンで操作できません。


MT4テスターはイベントを生成しませんが、ボタン自体は動作します。 そのため、MT4テスターでは、各ティックでボタンの状態を確認することができます。

 

こんにちは、ディミトリー

とても素晴らしい仕事ですね。パネルの背景色を変更する方法を教えてください。Defines.mqhファイルのマクロ定義を編集できることは知っていますが、そのファイルを編集せずにできる方法はないでしょうか。

よろしくお願いします。


サビオ

 

非常に良いアイデア!非常に使いやすく、初心者のためのmt5を容易にします。ありがとうございます。