Panduan Menggunakan ChartObjectsCopyPaste untuk MetaTrader 5

Mike 2024.09.21 02:59 35 0 0
Lampiran

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:

2 objek grafik ditampal pada carta melalui papan klip

Senarai
Komen 0