Adakah anda pernah merasa perlukan untuk menyalin dan menampal objek grafik antara carta yang dibuka? Saya yakin ramai di antara kita pernah mengalaminya. Malangnya, MetaTrader tidak menyediakan fungsi "Salin & Tampal" untuk objek. Satu-satunya cara untuk mencapai kesan yang lebih kurang sama adalah melalui templat (fail tpl). Tetapi templat menyimpan semua keadaan carta, termasuk indikator, tetapan dan banyak perkara lain yang mungkin tidak relevan untuk proses penggandaan yang diperlukan.
Oleh sebab itu, saya telah membangunkan indikator ChartObjectsCopyPaste.mq5. Ia membolehkan anda menyalin objek yang dipilih ke papan klip, daripada mana anda boleh menampalnya ke carta lain. Tanpa syarat tambahan.
Indikator ini berdasarkan satu lagi indikator yang diterbitkan dalam buku algotrading - ObjectGroupEdit.mq5.
Sila ikuti pautan tersebut untuk mengetahui lebih lanjut mengenai semua kelas yang terlibat (ObjectMonitor, MapArray dan lain-lain) yang berfungsi di belakang tabir.
Indikator ini tidak mempunyai buffer. Ia perlu dipasang pada sekurang-kurangnya 2 carta: carta sumber dari mana anda ingin menyalin objek, dan carta sasaran di mana anda merancang untuk menampalnya.
Semasa berjalan pada carta, indikator ini mengesan objek grafik yang sedia ada dan membuat catatan tentang objek yang dipilih.
Perintah "Salin & Tampal" yang Biasa
Seperti biasa, perintah "Salin & Tampal" berfungsi dalam pasangan:
- Tekan kekunci Ctrl+Q untuk menyalin semua objek yang dipilih ke dalam papan klip Windows sebagai teks (anda boleh menyimpannya dan melihatnya dalam mana-mana penyunting teks, berikut adalah contoh di bawah).
- Di carta sasaran, tekan Ctrl+J untuk menampal semua objek dari papan klip.
Kenapa Ctrl+Q/Ctrl+J? Ini adalah dua kombinasi kekunci yang dipilih secara sukarela dari yang sangat sedikit. Ini kerana MetaTrader menyekat dan tidak meneruskan banyak kekunci pintas kepada program MQL. Khususnya, ini berlaku untuk Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins yang tidak berfungsi dalam konteks ini.
Oleh kerana kod sumber tersedia, anda boleh menukar kekunci pintas kepada kombinasi lain.
Kerana indikator ini menggunakan DLL sistem untuk mengakses papan klip Windows, anda perlu membenarkan import DLL dalam dialog Properties, pada tab Dependencies.
Disebabkan oleh fakta bahawa Codebase tidak membenarkan import DLL, kod yang berkaitan dengan papan klip dibungkus dalam arahan pemproses pra bersyarat #ifdef DLL_LINK, jadi sila nyahkomentari baris
#define DLL_LINK
sebelum kompilasi. Jika tidak, anda akan melihat bagaimana fungsi papan klip akan menunjukkan amaran sebagai respons kepada penekanan kekunci, dan tiada tindakan sebenar akan dilakukan!
Input adalah:
- MakeAllSelectable - bendera untuk menjadikan semua objek boleh dipilih (yang biasanya tidak benar untuk objek yang dibuat secara programatik);
- LogDetails - bendera untuk mengeluarkan semua sifat objek yang dipindahkan ke dalam log;
Indikator ini tidak memeriksa jika objek yang ditampal sepadan dengan carta sasaran yang sebenar, seperti simbol, julat harga, bilangan subtingkap, dsb. - anda perlu melakukannya sendiri.
Berikut adalah contoh teks papan klip dengan 2 objek:
OBJ_VLINE H1 Garis Menegak 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 Garis Menegak 5578 6 OBJPROP_TEXT 206 OBJPROP_TOOLTIP OBJ_CHANNEL H1 Saluran Seimbang 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 Saluran Seimbang 40885 6 OBJPROP_TEXT 206 OBJPROP_TOOLTIP
Dan berikut adalah objek-objek ini yang telah ditampal pada carta:

Komen 0