MetaTraderでのコピー&ペーストの必要性
皆さんは、開いているチャート間でグラフィカルオブジェクトをコピー&ペーストしたいと思ったことはありませんか?実は、MetaTraderにはオブジェクトに対する「コピー&ペースト」機能がないんです。テンプレートを使うことで似たようなことはできますが、それだとインジケーターや設定など、全チャートの状態を保存してしまいます。必要のない情報まで含まれてしまうのが厄介ですよね。
ChartObjectsCopyPasteインディケーターの紹介
そこで私は、このインディケーターChartObjectsCopyPaste.mq5を開発しました!このインディケーターを使えば、選択したオブジェクトをクリップボードにコピーし、他のチャートにペーストできます。簡単です!
基本的な使い方
このインディケーターは、アルゴトレーディングの書籍で公開されたObjectGroupEdit.mq5を基にしています。詳しいクラスについてはリンクをたどってみてください。
インディケーターの設定
このインディケーターはバッファを持たず、少なくとも2つのチャートに取り付ける必要があります。一つはオブジェクトをコピーする元のチャート、もう一つはペースト先のチャートです。実行中のチャートで、インディケーターは既存のグラフィカルオブジェクトを追跡し、どのオブジェクトが選択されているかを記録します。
コピー&ペーストの手順
- Ctrl+Qを押して、選択したオブジェクトをWindowsクリップボードにテキストとしてコピーします。このテキストは任意のテキストエディタで保存・確認できます。
- ペースト先のチャートで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
そして、こちらがチャートにペーストしたオブジェクトです:

コメント 0