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 0enumENUM_OBJECT_PROPERTY_INTEGER0 OBJPROP_COLOR 552951 OBJPROP_STYLE 22 OBJPROP_WIDTH 13 OBJPROP_BACK 04 OBJPROP_SELECTED 17 OBJPROP_TYPE 08 OBJPROP_TIME 172673994010 OBJPROP_SELECTABLE 111 OBJPROP_CREATETIME 172684700912 OBJPROP_TIMEFRAMES 2097151200 OBJPROP_LEVELS 0207 OBJPROP_ZORDER 0208 OBJPROP_HIDDEN 01032 OBJPROP_RAY 1enumENUM_OBJECT_PROPERTY_DOUBLE9 OBJPROP_PRICE 1.11449enumENUM_OBJECT_PROPERTY_STRING5 OBJPROP_NAME H1 Garis Menegak 55786 OBJPROP_TEXT 206 OBJPROP_TOOLTIPOBJ_CHANNEL H1 Saluran Seimbang 40885 5 1enumENUM_OBJECT_PROPERTY_INTEGER0 OBJPROP_COLOR 2551 OBJPROP_STYLE 02 OBJPROP_WIDTH 13 OBJPROP_BACK 04 OBJPROP_SELECTED 17 OBJPROP_TYPE 58 OBJPROP_TIME 17267580008 OBJPROP_TIME.1 17267976008 OBJPROP_TIME.2 172675800010 OBJPROP_SELECTABLE 111 OBJPROP_CREATETIME 172684788312 OBJPROP_TIMEFRAMES 2097151200 OBJPROP_LEVELS 0207 OBJPROP_ZORDER 0208 OBJPROP_HIDDEN 01003 OBJPROP_RAY_LEFT 01004 OBJPROP_RAY_RIGHT 01031 OBJPROP_FILL 0enumENUM_OBJECT_PROPERTY_DOUBLE9 OBJPROP_PRICE -28.1138790035587159 OBJPROP_PRICE.1 -21.7081850533807779 OBJPROP_PRICE.2 -48.04270462633452enumENUM_OBJECT_PROPERTY_STRING5 OBJPROP_NAME H1 Saluran Seimbang 408856 OBJPROP_TEXT 206 OBJPROP_TOOLTIP
Dan berikut adalah objek-objek ini yang telah ditampal pada carta:


Komen 0