Demo Indikator Pseudo dengan Perhitungan Multi-Threaded Asynchronous untuk MetaTrader 5

Mike 2020.01.17 05:13 12 0 0
Lampiran

Indikator ini adalah indikator pseudo tanpa buffer. Tujuan utamanya adalah untuk menunjukkan teknik perhitungan multi-threaded. Indikator ini dapat mengeluarkan perintah untuk perhitungan yang memakan waktu, yang dilakukan dalam thread terpisah, dibuat untuk objek grafik dengan System Trading yang berfungsi. Kelas-kelas yang disediakan dalam file header yang disertakan - MultiThreadedObjectWorker.mqh - akan secara otomatis membuat objek grafik dan menerapkan template dengan System Trading yang ditentukan pada setiap objek. Setelah perhitungan selesai, objek tersebut secara otomatis dihapus dari grafik.

Contoh ini ditujukan untuk pengguna yang memiliki latar belakang pemrograman.

Ide ini berasal dari artikel tentang Permintaan Web Asynchronous Multi-Threaded. Silakan temukan semua rincian teknis tentang bagaimana pesan (peristiwa) dikirim dan bagaimana sumber daya digunakan untuk mengirim data antara grafik dalam artikel tersebut.

Indikator ini memanfaatkan implementasi teknik yang lebih "kompak" dibandingkan dengan artikel tersebut dengan menggunakan objek grafik alih-alih jendela grafik yang lengkap. Anda dapat menemukan rincian lebih lanjut di forum.

Pastikan System Trading - MultiThreadedObjectWorker - sudah dikompilasi sebelum Anda mengompilasi dan menjalankan indikator itu sendiri - MultiThreadedIndicator.

Parameter Input

  • sinput int _Cores = 1; - jumlah thread yang akan digunakan (jangan gunakan lebih dari inti fisik yang tersedia)
  • sinput int _Tasks = 1; - jumlah pseudo-tugas yang akan dieksekusi secara paralel (gunakan angka lebih besar dari jumlah inti untuk melihat performa paralel)
  • input string MultiThreadedScriptPath = "Experts\MultiThreadedObjectWorker.ex5"; - harus menunjukkan jalur pathname dari System Trading yang berfungsi

Setiap pseudo-tugas menghitung sejumlah fungsi sqrt (hanya untuk tujuan demo). Ini dapat diubah dalam proyek MQL Anda menjadi algoritma lain yang memakan waktu.

Untuk memulai perhitungan paralel setelah indikator terpasang pada grafik, silakan klik grafiknya. Semua fase penting dari proses (baik dalam program MQL5 klien maupun pekerja) dicatat.

Program MQL klien yang mengeluarkan permintaan perhitungan paralel tidak hanya bisa berupa indikator tetapi juga System Trading. Skrip dan layanan tidak didukung oleh platform.

Dengan menggunakan file header MultiThreadedObjectWorker.mqh, Anda harus mengimplementasikan marshaling data sendiri antara klien MQL5 dan System Trading yang berfungsi.

Berikut adalah 2 contoh log:

Eksekusi 4 tugas pada 2 inti (2 thread paralel)

Eksekusi 4 tugas pada 2 inti (2 thread paralel)

Ketika menjalankan 4 tugas pada 2 inti, terdapat 2 thread paralel, yang memberikan eksekusi dua kali lebih cepat dibandingkan dengan 1 inti (bandingkan 3354ms di atas dan 6240ms di bawah).

Eksekusi 4 tugas pada 1 inti (single thread - program MQL standar)

Eksekusi 4 tugas pada 1 inti (single thread - program MQL standar)

Lebih banyak inti - lebih cepat.

Daftar
Komentar 0