MetaTrader 5でのグラフィカルオブジェクトのコピー&ペースト方法

Mike 2024.09.21 02:59 22 0 0
添付ファイル

MetaTraderでのコピー&ペーストの必要性

皆さんは、開いているチャート間でグラフィカルオブジェクトをコピー&ペーストしたいと思ったことはありませんか?実は、MetaTraderにはオブジェクトに対する「コピー&ペースト」機能がないんです。テンプレートを使うことで似たようなことはできますが、それだとインジケーターや設定など、全チャートの状態を保存してしまいます。必要のない情報まで含まれてしまうのが厄介ですよね。

ChartObjectsCopyPasteインディケーターの紹介

そこで私は、このインディケーターChartObjectsCopyPaste.mq5を開発しました!このインディケーターを使えば、選択したオブジェクトをクリップボードにコピーし、他のチャートにペーストできます。簡単です!

基本的な使い方

このインディケーターは、アルゴトレーディングの書籍で公開されたObjectGroupEdit.mq5を基にしています。詳しいクラスについてはリンクをたどってみてください。

インディケーターの設定

このインディケーターはバッファを持たず、少なくとも2つのチャートに取り付ける必要があります。一つはオブジェクトをコピーする元のチャート、もう一つはペースト先のチャートです。実行中のチャートで、インディケーターは既存のグラフィカルオブジェクトを追跡し、どのオブジェクトが選択されているかを記録します。

コピー&ペーストの手順

  1. Ctrl+Qを押して、選択したオブジェクトをWindowsクリップボードにテキストとしてコピーします。このテキストは任意のテキストエディタで保存・確認できます。
  2. ペースト先のチャートでCtrl+Jを押して、クリップボードからオブジェクトをペーストします。

なぜCtrl+QとCtrl+Jなのか?

これらはあまり使われていないキーの組み合わせです。MetaTraderでは多くのホットキーがMQLプログラムに伝播されないため、通常のCtrl+CやCtrl+Vは使えません。

カスタマイズ可能なホットキー

ソースコードが公開されているので、ホットキーを他の組み合わせに変更することもできます。

このインディケーターは、WindowsクリップボードにアクセスするためにシステムDLLを使用していますので、プロパティダイアログの依存関係タブでDLLインポートを許可する必要があります。

CodebaseではDLLインポートが許可されていないため、クリップボード関連のコードは条件付きプリプロセッサディレクティブ#ifdef DLL_LINKでラップされています。コンパイル前に次の行のコメントを外してください:

#define DLL_LINK

さもなければ、ホットキーを押してもクリップボード機能のスタブがアラートを表示するだけで、実際のアクションは行われません!

インディケーターの入力パラメーター

  • MakeAllSelectable - すべてのオブジェクトを選択可能にするフラグ(通常はプログラムで作成されたオブジェクトにはfalse)。
  • LogDetails - 転送されたオブジェクトのすべてのプロパティをログに出力するフラグ。

インディケーターは、ペースト先のチャートのシンボルや価格帯、サブウィンドウの数などをチェックしませんので、そこは自分で確認してくださいね。

クリップボードのテキスト例

以下は、2つのオブジェクトを持つクリップボードテキストの例です:

OBJ_VLINE        H1 Vertical Line 5578    0       0
enum ENUM_OBJECT_PROPERTY_INTEGER
0           OBJPROP_COLOR    55295
1           OBJPROP_STYLE    2
2           OBJPROP_WIDTH    1
3           OBJPROP_BACK     0
4           OBJPROP_SELECTED 1
7           OBJPROP_TYPE     0
8           OBJPROP_TIME     1726739940
10          OBJPROP_SELECTABLE    1
11          OBJPROP_CREATETIME    1726847009
12          OBJPROP_TIMEFRAMES    2097151
200         OBJPROP_LEVELS   0
207         OBJPROP_ZORDER   0
208         OBJPROP_HIDDEN   0
1032        OBJPROP_RAY      1
enum ENUM_OBJECT_PROPERTY_DOUBLE
9           OBJPROP_PRICE    1.11449
enum ENUM_OBJECT_PROPERTY_STRING
5           OBJPROP_NAME     H1 Vertical Line 5578
6           OBJPROP_TEXT     
206         OBJPROP_TOOLTIP  
OBJ_CHANNEL      H1 Equidistant Channel 40885    5       1
enum ENUM_OBJECT_PROPERTY_INTEGER
0           OBJPROP_COLOR    255
1           OBJPROP_STYLE    0
2           OBJPROP_WIDTH    1
3           OBJPROP_BACK     0
4           OBJPROP_SELECTED 1
7           OBJPROP_TYPE     5
8           OBJPROP_TIME     1726758000
8           OBJPROP_TIME.1   1726797600
8           OBJPROP_TIME.2   1726758000
10          OBJPROP_SELECTABLE    1
11          OBJPROP_CREATETIME    1726847883
12          OBJPROP_TIMEFRAMES    2097151
200         OBJPROP_LEVELS   0
207         OBJPROP_ZORDER   0
208         OBJPROP_HIDDEN   0
1003        OBJPROP_RAY_LEFT  0
1004        OBJPROP_RAY_RIGHT 0
1031        OBJPROP_FILL    0
enum ENUM_OBJECT_PROPERTY_DOUBLE
9           OBJPROP_PRICE    -28.113879003558715
9           OBJPROP_PRICE.1 -21.708185053380777
9           OBJPROP_PRICE.2 -48.04270462633452
enum ENUM_OBJECT_PROPERTY_STRING
5           OBJPROP_NAME     H1 Equidistant Channel 40885
6           OBJPROP_TEXT     
206         OBJPROP_TOOLTIP  

そして、こちらがチャートにペーストしたオブジェクトです:

2 graphical objects pasted on chart via clipboard

リスト
コメント 0