Friday 4 August 2017

Automated trading system matlab


MetaTrader 5 - Sistem Perdagangan Simulink: Panduan untuk Pengembang Penasihat Ahli Pendahuluan Ada beberapa artikel yang menggambarkan kemungkinan besar Matlab. Agar lebih tepat, cara software ini mampu memperluas alat pemrogram, yang ia gunakan untuk mengembangkan Expert Advisor. Pada artikel ini, saya akan mencoba mengilustrasikan karya seperti paket matlab yang hebat seperti Simulink. Saya ingin menawarkan cara alternatif untuk mengembangkan sistem perdagangan otomatis bagi para pedagang. Saya terinspirasi untuk beralih ke jenis metode ini karena kompleksitas masalah yang dihadapi trader - pembuatan, verifikasi, dan pengujian sistem perdagangan otomatis. Saya bukan programmer profesional. Dan dengan demikian, prinsip pergi dari yang sederhana ke kompleks sangat penting bagi saya dalam pengembangan sistem perdagangan otomatis. Apa sebenarnya yang sederhana untuk saya Pertama-tama, inilah visualisasi proses pembuatan sistem dan logika fungsinya. Juga, ini adalah kode tulisan tangan minimal. Harapan ini sepi konsisten dengan kemampuan paket Simulink, produk MATLAB yang terkenal, yang merupakan pemimpin dunia di antara instrumen untuk visualisasi perhitungan matematis. Pada artikel ini, saya akan mencoba membuat dan menguji sistem perdagangan otomatis, berdasarkan paket Matlab, dan kemudian menulis Expert Advisor untuk MetaTrader 5. Selain itu, semua data historis untuk backtesting akan digunakan dari MetaTrader 5. Untuk menghindari Kebingungan terminologis, saya akan memanggil sistem perdagangan, yang berfungsi di Simulinik, dengan kata yang luas MTS, dan yang berfungsi di MQL5, hanya Expert Advisor. 1. Dasar-dasar Simulink dan Stateflow Sebelum kita melanjutkan tindakan spesifik, perlu diperkenalkan beberapa bentuk minimum teoritis. Dengan bantuan paket Simulink, yang merupakan bagian dari MATLAB, pengguna dapat memodelkan, mensimulasikan dan menganalisa sistem dinamis. Selain itu, mungkin untuk mengajukan pertanyaan tentang sifat sistem, untuk mensimulasikannya, dan kemudian mengamati apa yang terjadi. Dengan Simulink, pengguna bisa membangun model dari awal atau memodifikasi model yang sudah ada. Paket ini mendukung pengembangan sistem linier dan nonlinier, yang dibuat berdasarkan perilaku diskrit, kontinu dan hibrida. Properti utama paket disajikan di situs pengembang: Perpustakaan yang luas dan dapat diperluas dari blok yang telah ditentukan Editor grafis interaktif untuk perakitan dan pengelolaan diagram blok intuitif Mampu mengelola desain yang kompleks dengan mengelompokkan model ke dalam hierarki komponen desain Model Explorer untuk menavigasi, membuat, Mengkonfigurasi, dan mencari semua sinyal, parameter, properti, dan kode yang dihasilkan yang terkait dengan model Anda Application programming interfaces (APIs) yang memungkinkan Anda terhubung dengan program simulasi lainnya dan menggabungkan kode tulisan tangan Embedded MATLAB Function blocks untuk membawa algoritma MATLAB ke Simulink dan disematkan Implementasi sistem Modus simulasi (Normal, Accelerator, dan Rapid Accelerator) untuk menjalankan simulasi secara interpretif atau pada kecepatan kode C yang dikompilasi menggunakan pemecah fixed atau variabel-step Graphical debugger dan profiler untuk memeriksa hasil simulasi dan kemudian mendiagnosis kinerja dan perilaku yang tidak diharapkan dalam desain Anda. Akses penuh ke MATLAB untuk menganalisis dan memvisualisasikan hasil, menyesuaikan lingkungan pemodelan, dan menentukan sinyal, parameter, dan data uji Model analisis dan alat diagnostik untuk memastikan konsistensi model dan mengidentifikasi kesalahan pemodelan. Jadi mari kita mulai langsung meninjau kembali lingkungan Simulink. Ini diinisialisasi dari jendela Matlab yang sudah terbuka dengan dua cara berikut: dengan menggunakan perintah Simulink di jendela perintah dengan menggunakan ikon Simulink pada toolbar. Gambar 1. Inisialisasi Simulink Ketika perintah dijalankan, jendela penjelajahan perpustakaan (Simulink Library Browser) muncul. Gambar 2. Library Browser Jendela browser berisi pohon komponen perpustakaan Simulink. Untuk melihat bagian perpustakaan tertentu, Anda cukup memilihnya dengan mouse, setelah itu satu set komponen ikon, bagian aktif perpustakaan, akan muncul di bagian kanan jendela Simulink Library Browser. Ara. 2 menunjukkan bagian utama perpustakaan Simulink. Dengan menggunakan menu browser atau tombol toolbarnya, Anda bisa membuka jendela untuk membuat model baru atau mengunggah yang sudah ada. Saya harus mencatat bahwa semua pekerjaan dengan Simulink terjadi bersamaan dengan sistem MATLAB yang terbuka, di mana kemungkinannya untuk memantau pelaksanaan operasi, selama output mereka disediakan oleh program pemodelan. Gambar 3. Simpulink jendela kosong Pertama-tama, mari kita ganti beberapa parameter model kita. Mari kita buka Simulasi --gt Configuration Parameters. Jendela ini memiliki sejumlah tab dengan banyak parameter. Kami tertarik pada tab Solver default, di mana Anda dapat mengatur parameter pemecah sistem pemodelan Simulink. Pada waktu Simulasi waktu pemodelan ditentukan oleh waktu awal - Waktu mulai (biasanya 0), dan waktu akhir - Waktu berhenti. Untuk tugas kita, mari kita beri waktu mulai nilai 1. Kita akan meninggalkan waktu Stop seperti apa adanya. Dalam pilihan pemecah, saya juga mengubah Type to Fixed-step, pemecahnya sendiri menjadi diskrit, dan langkah (ukuran fixed-step) menjadi 1. Gambar 4. Parameter Konfigurasi Window Lingkungan Simulink berhasil diselesaikan oleh subsistem Stateflow. , Yang merupakan paket pemodelan berbasis event, berdasarkan teori automata negara-terbatas. Hal ini memungkinkan kita untuk mewakili karya sistem, berdasarkan rantai peraturan, yang menentukan kejadian dan tindakan sebagai tanggapan terhadap kejadian ini. Antarmuka pengguna grafis dari paket Stateflow memiliki komponen berikut: Editor Grafis dari SF-chart Stateflow Explorer Stateflow Finder untuk mencari objek yang diperlukan di tabel-SF Sebuah debugger dari SF-models Real Time Workshop, generator kode real-time . Diagram blok yang paling umum digunakan (Bagan), yang terletak di bagian Stateflow. Mari kita periksa. Mari kita memindahkan blok dari perpustakaan dan klik dua kali untuk membuka diagram. Jendela kosong editor SF-chart akan muncul. Ini bisa digunakan untuk membuat SF-chart dan debugging mereka, untuk mendapatkan fungsi yang dibutuhkan. Toolbar terletak tegak di sisi kiri. Ada 9 tombol: Sejarah Negara Junction Default Transition Connective Junction Fungsi Tabel Kebenaran Fungsi MATLAB Function Function Simulink Function Call. Sayangnya, tidak mungkin untuk mempertimbangkan setiap elemen secara rinci dalam konteks artikel ini. Oleh karena itu, saya akan membatasi diri pada penjelasan singkat tentang elemen-elemen tersebut, yang akan kita perlukan untuk model kita. Informasi lebih rinci dapat ditemukan di bagian Bantuan Matlab, atau di situs pengembang. Gambar 5. Pandangan bagan SF dalam editor Objek utama dari grafik SF adalah Negara Bagian. Hal ini disajikan oleh sebuah persegi panjang dengan sudut membulat. Bisa eksklusif atau paralel. Setiap negara bisa menjadi orang tua dan memiliki ahli waris. Negara bagian dapat aktif atau tidak aktif, negara bagian dapat melakukan prosedur tertentu. Transisi diwakili sebagai garis panah melengkung, menghubungkan negara bagian dan objek lainnya. Transisi dapat dilakukan dengan mengklik tombol kiri mouse Anda pada objek sumber dan dengan mengarahkan kursor ke objek target. Transisi mungkin memiliki kondisi sendiri, yang dicatat dalam tanda kurung. Prosedur transisi ditunjukkan dalam tanda kurung, akan dilakukan jika kondisi terpenuhi. Prosedur yang dijalankan saat konfirmasi objek target dilambangkan dengan garis miring. Simpul alternatif (junction junction) memiliki bentuk lingkaran, dan memungkinkan transisi menuju ke jalan yang berbeda, yang masing-masing didefinisikan satu dengan kondisi tertentu. Dalam kasus seperti itu, transisi, yang sesuai dengan kondisi yang ditentukan, dipilih. Fungsi diwakili sebagai flow graph dengan pernyataan bahasa prosedural Stateflow. Aliran grafik mencerminkan struktur logis penggunaan transisi dan simpul alternatif. Event adalah objek penting lain dari Stateflow, termasuk dalam kelompok objek non-grafis. Objek ini bisa memulai prosedur dari SF-chart. Prosedur (action) juga bersifat non-grafis. Ini dapat memanggil fungsi, menetapkan peristiwa tertentu, transisi, dll. Data dalam model SF ditunjukkan oleh nilai numerik. Data tidak direpresentasikan sebagai objek grafis. Mereka dapat diciptakan pada tingkat manapun dari hirarki model dan memiliki sifat. 2. Deskripsi Strategi Perdagangan Sekarang, secara singkat tentang trading. Untuk tujuan pelatihan kami, Expert Advisor akan sangat sederhana, jika tidak dikatakan, primitif. Sistem perdagangan otomatis akan membuka posisi berdasarkan sinyal, pada dasarnya, setelah melewati Eksponensial Movings, dengan periode 21 dan 55 (angka Fibonacci), rata-rata mendekati harga penutupan. Jadi jika EMA 21 melintasi EMA 55 dari bawah, posisi panjang dibuka, jika tidak - yang pendek. Untuk noise filtering, posisi akan dibuka di bar K-th dengan harga bar pembukaan setelah kemunculan salib 2155. Kami akan berdagang di EURUSD H1. Hanya satu posisi yang akan dibuka. Ini akan ditutup hanya setelah mencapai tingkat Take Profit atau Stop Loss. Saya ingin menyebutkan bahwa selama pengembangan sistem perdagangan otomatis dan backtesting sejarah, penyederhanaan tertentu dari keseluruhan gambar perdagangan diakui. Misalnya, sistem tidak akan memeriksa eksekusi sinyal dari broker. Selanjutnya kita akan menambahkan batasan perdagangan ke inti sistem di MQL5. 3. Pemodelan Strategi Perdagangan di Simulink Untuk memulainya, kita perlu mengunggah data harga historis ke lingkungan Matlab. Kami akan melakukannya dengan menggunakan script MetaTrader 5, yang akan menyimpannya (testClose. mq5). Di Matlab, data ini (Open, High, Low, Close, Spread) juga akan dimuat menggunakan m-script sederhana (priceTxt. m). Dengan menggunakan movavg (fungsi Matlab standar), kita akan membuat array dari Exponential Moving Averages: ema21, ema55 movavg (close, 21, 55, e) Serta array auxiliary dari indeks batang: K3 sl0.0065 tp0.0295 Mari kita mulai Proses pemodelan Buat jendela kosong Simulink dan nyalakan mts saat menyimpannya. Semua tindakan berikut telah diduplikasi dalam format video. Jika ada yang tidak cukup jelas, atau bahkan tidak jelas sama sekali, Anda bisa melihat tindakan saya dengan menonton video. Saat menyimpan model, sistem mungkin akan mencetak kesalahan berikut: File C: Simulinkmts. mdl berisi karakter yang tidak sesuai dengan pengkodean karakter saat ini, windows-1251. Untuk menghindari kesalahan ini, lakukan salah satu dari yang berikut: 1) Gunakan fungsi slCharacterEncoding untuk mengubah pengkodean karakter saat ini ke salah satu dari: ShiftJIS, windows-1252, ISO-8859-1. 2) Hapus karakter yang tidak didukung. Karakter pertama yang tidak didukung adalah pada baris 23, byte offset 15. Untuk menghilangkan ini, Anda cukup menutup semua jendela model, dan ubah pengkodeannya dengan menggunakan perintah berikut: bdclose all setparam (0, CharacterEncoding, windows-1252) Mari kita tentukan sumber informasi dari model kita. Peran sumber informasi tersebut adalah data historis dari MetaTrader 5, yang berisi harga pembukaan, maksimum, minimum, dan penutupan. Selain itu, kita akan memperhitungkan Spread, meski baru mengambang relatif baru-baru ini. Akhirnya, kami mencatat waktu pembukaan bar. Untuk keperluan pemodelan, beberapa susunan data awal akan diartikan sebagai sinyal, yaitu sebagai vektor nilai fungsi waktu pada titik diskrit pada waktunya. Mari membuat subsistem FromWorkspace untuk mengambil data dari ruang kerja Matlab. Pilih bagian Ports amp Subsystems di browser perpustakaan Simulink. Seret blok Subsistem ke jendela model Simulink, dengan menggunakan mouse. Ubah nama menjadi FromWorkspace, dengan mengklik Subsistem. Kemudian, login ke dalamnya dengan mengklik dua kali tombol kiri mouse di blok, untuk membuat variabel input dan output, dan konstanta untuk sistem. Untuk membuat sumber sinyal di Library Browser, pilih Signal Processing Blockset, dan sources (Signal Processing Sources). Dengan menggunakan mouse Anda, seret Sinyal dari blok Workspace ke jendela subsistem model FromWorkspace. Karena model akan memiliki 4 sinyal input, kita cukup menduplikat bloknya, dan membuat 3 salinan lagi. Mari kita tentukan dengan tepat variabel mana yang akan diproses oleh blok. Untuk melakukan ini, klik dua kali di blok, dan masukan nama variabel ke dalam properti. Variabel ini adalah: open, ema21, ema55, num. Kami akan memberi nama blok berikut ini: sinyal terbuka, sinyal ema21, sinyal ema55, sinyal num. Sekarang, dari bagian Simulink yang umum digunakan, kita akan menambahkan satu blok untuk membuat saluran (Pembuat Bus). Buka blok dan ubah jumlah input menjadi 4. Sambungkan sinyal terbuka, sinyal ema21, sinyal ema55, blok sinyal num dengan masukan blok Pembuat Bus. Selain itu, kita akan memiliki 5 masukan konstanta lagi. Blok Konstan ditambahkan dari bagian Umumnya blok yang digunakan. Sebagai nilai (Constant value), kita menentukan nama variabel: spread, high, low, tp, sl: spread - ini adalah array dari nilai spread yang tinggi - ini adalah array dari nilai harga maksimum yang rendah - ini adalah sebuah Array nilai harga minimum tp - nilai Take Profit secara absolut sl - nilai Stop Loss secara absolut. Kita akan memanggil blok sebagai berikut: spread array, array tinggi, array rendah, Take Profit, Stop Loss. Pilih blok port output (Out1) pada bagian Simulink Subsistem Port amp dan pindahkan ke jendela subsistem. Buat 5 salinan port output. Yang pertama, terhubung dengan baik dengan blok Pembuat Bus, dan lain-lain - secara bergantian, dengan array tersebar, tinggi, rendah, Take Profit, dan blok Stop Loss. Nah ganti nama port pertama dengan harga, dan yang lainnya - dengan nama variabel output. Untuk membuat sinyal trading, mari kita masukkan blok tambahan (Add) dari bagian Simulink Mathematical Operations. Nah menyebutnya emas diferensial. Di dalam blok kita akan mengubah daftar tanda, c ke -. Dengan menggunakan kombinasi tombol Ctrl K, putar blok dengan searah jarum jam. Sambungkan blok sinyal ema21 ke input, dan sinyal ema55 dengan -. Kemudian masukkan blok Delay, dari bagian Blockset Pengolahan Sinyal, Operasi Sinyal. Nah nama itu K Delay. Di kolom Delay (contoh) blok ini kita masukkan nama variabel K. Hubungkan dengan blok sebelumnya. Blok diferensial emas dan format K Delay di depan (perbedaan tingkat) dari sinyal kontrol untuk perhitungan hanya untuk tahap pemodelan, dimana telah terjadi perubahan. Subsistem, yang akan dibuat dengan baik nanti, akan diaktifkan jika setidaknya satu elemen memiliki perubahan pada level sinyal. Kemudian, dari bagian blok Simulink yang umum digunakan, kita akan menambahkan multiplekser dengan dan (Mux) blok. Demikian pula, putar blok dengan searah jarum jam. Kami akan membagi garis sinyal dari blok penundaan menjadi dua, dan menghubungkannya dengan multiplexes. Dari bagian Stateflow, masukkan blok Chart. Masukkan bagan. Tambahkan 2 event masuk (Buy and Sell), dan 2 acara keluar (OpenBuy dan OpenSell). Nilai pemicu (Trigger) untuk acara Beli, kami akan mengatur ke Falling (aktivasi subsistem oleh front negatif), dan untuk acara Sell, kami akan mengatur ke Rising (aktivasi subsistem oleh front positif). Nilai trigger (Trigger) untuk event OpenBuy dan OpenSell, kita akan mengatur ke posisi Function call (Calling), (aktivasi subsistem akan ditentukan oleh logika kerja dari fungsi S yang diberikan). Buat transisi secara default dengan 3 simpul alternatif. Simpul pertama kita akan terhubung dengan sebuah transisi ke node kedua, menetapkan kondisi dan prosedur yang akan mereka beli, dan untuk yang ketiga, menetapkan prosedur untuk Sell. Hubungkan input grafik dengan multipleks, dan dua output - dengan multipleks lain, yang bisa disalin dari yang pertama. Blok terakhir akan terhubung ke port output, yang akan kita salin dari yang analog, dan menyebutnya BuySell. Dan saya hampir lupa Agar model bisa bekerja dengan baik, kita perlu membuat objek kanal virtual, yang akan berada di ruang kerja Matlab. Untuk melakukannya, kita masuk ke Bus Editor melalui menu Tools. Di editor, pilih item Add Bus. Sebut saja InputBus. Masukkan elemen sesuai dengan nama variabel input: terbuka, ema21, ema55 dan num. Buka Pembuat Bus dan centang kotak di sebelah Tentukan properti melalui objek bus (Setel properti melalui objek bus). Dengan kata lain, kita menghubungkan blok kita dengan objek saluran virtual yang kita buat. Saluran virtual berarti bahwa sinyal digabungkan hanya secara grafis, tanpa mempengaruhi distribusi memori. Simpan perubahan di jendela subsistem. Ini menyimpulkan pekerjaan kami dengan subsistem FromWorkspace. Sekarang tiba saatnya untuk membuat Black Box. Ini akan menjadi blok, berdasarkan sinyal masuk, ia akan memproses informasi dan membuat keputusan trading. Tentu saja, itu perlu diciptakan oleh kita, bukan program komputer. Lagi pula, hanya kita yang bisa memutuskan kondisi, dimana sistemnya harus melakukan perdagangan. Selain itu, blok tersebut harus menampilkan informasi tentang kesepakatan yang telah selesai dalam bentuk sinyal. Blok yang dibutuhkan disebut Chart dan terletak di bagian Stateflow. Kita sudah mengenalnya, bukankah kita menggunakan drag and drop kita memindahkannya ke jendela model kita. Gambar 6. Blok input subsistem dan StateFlow chart Buka grafik dan masukkan data kita ke dalamnya. Pertama-tama, mari kita membuat objek saluran, seperti yang telah kita lakukan di subsistem FromWorkspace. Tapi tidak seperti yang pertama, yang memberi kita sinyal dari ruang kerja, yang satu ini akan mengembalikan hasil yang didapat. Jadi, kita akan memanggil objek OutputBus. Unsur-unsurnya akan menjadi: barOpen, OpenPrice, TakeProfit, StopLoss, ClosePrice, barClose, Comment, PositionDir, posN, AccountBalance. Sekarang kita akan mulai membangun. Pada jendela grafik, kita akan menampilkan transisi default (1). Untuk kondisi dan prosedur yang akan kami tunjukkan: Kondisi ini berarti data akan diproses jika jumlah bar input minimal 56, dan jika bar input akan lebih tinggi dari pada bar penutupan posisi sebelumnya. Kemudian, bilah pembuka (Output. barOpen) diberi nomor bar masuk, dengan variabel indeks i - indeks (mulai dari 0), dan jumlah posisi terbuka meningkat sebesar 1. Transisi ke-2 dieksekusi. Hanya jika posisi terbuka tidak akan menjadi yang pertama. Jika tidak, transisi ketiga dijalankan, yang akan menetapkan variabel saldo akun (Output. AccountBalance) nilai 100000. Transisi ke-4 dijalankan jika grafik diprakarsai oleh acara OpenBuy. Dalam hal demikian, posisi akan mengarahkan ke pembelian (Output. PositionDir 1), harga pembukaan akan sama dengan harga bilah pembuka, dengan memperhitungkan spread (Output. OpenPrice Input. open spread i 1e-5). Nilai dari sinyal output StopLoss dan TakeProfit juga akan ditentukan. Jika terjadi peristiwa OpenSell, maka arus akan mengikuti transisi ke-5 dan mengatur nilainya untuk sinyal output. Transisi ke-6 diwujudkan jika posisinya panjang, jika tidak arusnya mengikuti transisi ke-7. Transisi ke 8 memeriksa apakah harga bar maksimum telah mencapai tingkat Take Profit atau jika harga minimum bar telah mencapai level Stop Loss. Jika tidak, nilai variabel indeks i meningkat satu (transisi ke 9). Transisi ke-10 memverifikasi kondisi yang timbul pada Stop Loss: harga minimum bar telah melewati tingkat Stop Loss. Jika dikonfirmasi, arus akan mengikuti transisi 11-th, dan kemudian ke tanggal 12, di mana nilai-nilai perbedaan harga dari posisi penutupan dan pembukaan, saldo akun saat ini, dan indeks dari penutupan bar didefinisikan. Jika transisi ke-10 tidak dikonfirmasi, maka posisi tersebut akan ditutup di Take Profit (transisi ke-13). Dan kemudian, dari tanggal 14, arus akan mengikuti transisi ke-12. Prosedur dan kondisi transisi untuk posisi pendek adalah sebaliknya. Akhirnya, weve menciptakan variabel baru dalam grafik. Agar mengintegrasikannya secara otomatis ke model kami, kami perlu menjalankan model secara langsung di jendela bagan, dengan mengklik tombol Mulai Simulasi. Ini terlihat mirip dengan tombol Play pada pemutar musik. Pada titik ini, Stateflow Symbol Wizard (objek master SF) akan diluncurkan, dan ini akan menyarankan untuk menyimpan objek yang dibuat. Tekan tombol SelectAll lalu klik tombol Create. Objek telah diciptakan. Mari kita buka Model Browser. Di sebelah kiri, klik pada Chart kita di Model Hierarchy. Mari kita memilah objek berdasarkan tipe data (DataType). Tambahkan lebih banyak data dengan menggunakan perintah menu Add and Data. Nah panggil variabel input pertama. Ubah nilai Scopes to Input, dan Type - to Bus: ltbus object namegt. Dan kemudian masukkan nama, dari saluran yang dibuat sebelumnya, InputBus, langsung ke bidang ini. Dengan demikian variabel Input kita akan memiliki tipe InputBus. Mari kita tetapkan nilai Port ke satu. Selesaikan operasi yang sama dengan variabel Output. Hanya saja harus memiliki Output Scope dan tipe Bus Output. Mari mengubah ruang lingkup untuk variabel tinggi, rendah, sl, tp, dan menyebar ke nilai Input. Masing-masing, kita akan mengatur nomor port dengan urutan sebagai berikut: 3, 4, 6, 5, 2. Juga mari kita ubah lingkup variabel Lots to Constant. Pada tab Value Attributes memungkinkan masukan 1, OpenBuy dan OpenSell events - untuk Input di lapangan Initial (di sebelah kanan). Dalam acara, ubah nilai pemicu untuk panggilan Fungsi). Buat variabel internal len, dengan lingkup Konstan. Pada tab Value Attributes, di kolom Initial value, masukan dengan baik m-function length (close). Dengan demikian akan sama dengan panjang close array, yang terletak di ruang kerja Matlab. Untuk variabel tinggi dan rendah masukan dengan baik nilai len 1 ke dalam bidang Ukuran. Jadi, dalam memori, kita telah memesan ukuran array yang tinggi dan rendah sebagai nilai len 1. Juga, mari kita tentukan untuk variabel K pada tab Value Attributes, di kolom Initial value (di sebelah kanan) variabel aktual Dari K, diambil dari ruang kerja. Sebagai hasilnya, kita memiliki subsistem Chart, dengan 7 port input dan satu port output. Mari kita posisikan blok sedemikian rupa, sehingga masukan event () port berada di bagian bawah. Nah ganti nama posisi penanganan blok. Di bagan itu sendiri, nah juga tampilkan nama bloknya. Gabungkan blok subsistem FromWorkspace dan posisi penanganan melalui port yang sesuai. Dan ganti warna balok. Perlu dicatat, bahwa subsistem penanganan Perempatan hanya akan berfungsi jika dibangunkan oleh acara OpenBuy atau OpenSell yang masuk. Dengan cara ini, kami mengoptimalkan pengoperasian subsistem untuk menghindari perhitungan yang tidak perlu. Gambar 7. Subsistem Pengolahan FromWorkspace dan Position Sekarang kita harus membuat subsistem untuk mencetak hasil pengolahan di ruang kerja Matlab dan menggabungkannya dengan subsistem penanganan Position. Ini akan menjadi tugas yang paling mudah. Mari membuat subsistem ToWorkspace untuk mendapatkan hasilnya ke ruang kerja. Ulangi langkah-langkah yang kami ambil saat membuat subsistem FromWorkspace. Di browser perpustakaan, pilih bagian Simulink Ports amp Subsystems. Dengan menggunakan mouse, seret blok Subsistem ke dalam jendela model Simulink. Ubah nama menjadi ToWorkspace dengan mengklik Subsistem. Gabungkan blok dengan subsistem penanganan posisi. Untuk membuat variabel masuk ke dalamnya dengan mengklik dua kali pada blok dengan tombol kiri mouse, Karena subsistem akan menerima data dari objek OutputBus, yaitu bus nonvirtual, maka kita perlu memilih sinyal dari saluran ini. . Untuk melakukannya, kita memilih Simulink yang biasa digunakan pada bagian blok perpustakaan di Browser, dan menambahkan Bus Selector. Blok akan memiliki 1 input dan 2 sinyal output, sedangkan kita perlu memiliki 10 sinyal tersebut. Mari menghubungkan blok ke port input. Tekan tombol simulasi Mulai (ini adalah tombol Putar kami). Kompilator akan mulai membangun model. Ini tidak akan berhasil dibangun, tapi akan menciptakan sinyal input untuk blok pemilihan bus. Jika kita masuk blok, kita akan melihat sinyal yang dibutuhkan muncul di sisi kiri jendela, yang ditransmisikan melalui OutputBus. Mereka semua perlu dipilih, dengan menggunakan tombol Select, dan memindahkannya ke sisi kanan - Sinyal yang dipilih. Gambar 8. Parameter blok Bus Selector Mari kita simak bagian blok yang umum digunakan pada browser perpustakaan Simulink, dan tambahkan blok multipleks Mux. Ini menunjukkan jumlah masukan, yaitu sama dengan 10. Kemudian masuk ke bagian Sinks pada peramban perpustakaan Simulink, dan pindahkan blok ToWorkspace ke jendela subsistem. Di sana kita akan menunjukkan nama baru dari variabel AccountBalance, dan mengubah format output (Save format) dari Structure to the Array. Kombinasikan blok dengan multipleks. Hapus port output, karena tidak lagi diperlukan. Sesuaikan warna balok. Simpan jendela. Subsistem sudah siap. Sebelum membangun model, kita harus memverifikasi keberadaan variabel di ruang kerja. Variabel berikut harus ada: InputBus, K, OutputBus, close, ema21, ema55, tinggi, rendah, num, terbuka, sl, spread, tp. Mari kita tetapkan nilai Stop Time sebagai parameter untuk menentukan num (end). Arti vektor yang diproses akan memiliki panjang, yang ditetapkan oleh elemen terakhir dari array num. Sebelum memulai membangun sebuah model, kita perlu memilih kompilator, dengan menggunakan perintah berikut: Silakan pilih kompiler Anda untuk membangun file antarmuka eksternal (MEX): Apakah Anda ingin mex untuk menemukan kompiler terinstal yny Pilih kompiler: 1 Lcc-win32 C 2.4 .1 di C: PROGRA 2MATLABR2010asyslcc 2 Microsoft Visual C 2008 SP1 di C: File Program (x86) Microsoft Visual Studio 9.0 0 Tidak seperti yang Anda lihat, saya memilih kompiler Microsoft Visual C 2008 SP1. Mari mulai membangun. Tekan tombol Mulai simulasi. Ada kesalahan: Stateflow Interface Error: Port width mismatch. Penyebaran masukan (139) mengharapkan skalar. Sinyal adalah vektor satu dimensi dengan elemen 59739. Variabel spread seharusnya tidak memiliki tipe ganda, namun mewarisi jenisnya dari sinyal dari Simulink. Di Model Browser, untuk variabel ini, kami menentukan Inherit: Sama seperti Simulink, dan di bidang Ukuran, dan tentukan -1. Simpan perubahannya. Mari menjalankan model lagi. Sekarang kompilator bekerja. Ini akan menunjukkan beberapa peringatan kecil. Dan dalam waktu kurang dari 40 detik, model tersebut akan memproses data hampir 60.000 bar. Perdagangan dilakukan dari tahun 2001, 01.01 00:00 sampai 2010, 08.16 11:00. Jumlah total posisi terbuka adalah 461. Anda dapat mengamati bagaimana model bekerja pada klip berikut. 4. Implementasi Strategi di MQL5 Jadi, sistem perdagangan otomatis kami disusun di Simulink. Sekarang kita perlu mentransfer ide perdagangan ini ke lingkungan MQL5. Kami harus berurusan dengan blok Simulink dan objek, di mana kami mengekspresikan logika Expert Advisor kami. Tugas saat ini adalah mentransfer sistem perdagangan logika ke Expert Advisor MQL5. Namun, perlu dicatat bahwa beberapa blok tidak harus didefinisikan dengan cara tertentu dalam kode MQL5, karena fungsinya dapat disembunyikan. Saya akan mencoba berkomentar dengan jumlah maksimum rincian tentang garis mana yang berkaitan dengan blok mana, dalam kode sebenarnya. Terkadang hubungan ini mungkin tidak langsung. Dan terkadang hal itu bisa mencerminkan koneksi antarmuka blok atau objek. Sebelum memulai bagian ini, izinkan saya menarik perhatian Anda ke artikel Petunjuk Langkah demi Langkah untuk menulis Expert Advisors di MQL5 for Beginners. Artikel ini memberikan deskripsi yang mudah dipahami tentang gagasan utama dan aturan dasar penulisan Expert Advisor di MQL5. Tapi aku tidak akan memikirkan mereka sekarang. Saya akan menggunakan beberapa baris kode MQL5 dari sana. 4.1 FromWorkspace Subsystem Sebagai contoh, kita memiliki blok sinyal terbuka di subsistem FromWorkspace. Di Simulink, diperlukan untuk mendapatkan harga bukaan pada saat backtesting, dan untuk membuka posisi pada harga ini, seandainya sinyal perdagangan diterima. Blok ini jelas tidak ada dalam kode MQL5, karena Expert Advisor meminta informasi harga segera setelah menerima sinyal trading. Di Expert Advisor kita perlu mengolah data, diterima dari moving averages. Oleh karena itu, kita akan membuat untuk mereka array dinamis dan variabel bantu yang sesuai, seperti pegangan. Semua garis lainnya, yang agak mempengaruhi ema21 bergerak dan ema55, dapat dianggap sebagai pelengkap. Take Profit dan Stop Loss didefinisikan sebagai variabel input: Dengan memperhitungkan bahwa ada 5 digit signifikan untuk EURUSD, nilai TakeProfit dan StopLoss perlu diupdate dengan cara berikut: Array spread, high dan low digunakan untuk melayani Nilai, karena mereka bertanggung jawab untuk menyediakan data historis, dalam bentuk matriks data harga yang relevan, untuk mengidentifikasi kondisi perdagangan. Mereka tidak secara eksplisit terwakili dalam kode. Namun, dapat dikatakan bahwa sebaran spread, misalnya, diperlukan untuk membentuk arus harga yang diminta. Dan dua lainnya diperlukan untuk menentukan kondisi penutupan posisi, yang tidak ditentukan dalam kode, karena otomatis dijalankan di MetaTrader 5, setelah mencapai tingkat harga tertentu. Blok sinyal num adalah auxiliary dan tidak ditampilkan dalam kode Expert Advisor. Blok diferensial emas memeriksa kondisi untuk membuka posisi pendek atau panjang dengan menemukan perbedaannya. K Delay menciptakan lag untuk array, yang rata-rata sesuai dengan nilai K. Acara Beli atau Penjualan dibuat, merupakan acara penggolongan untuk subsistem pembuka posisi. Dalam kode tersebut, semuanya dinyatakan sebagai berikut: Subsistem pembuka posisi menciptakan OpenBuy dan OpenSell events itu sendiri, yang diproses di subsistem penanganan Position, dengan menggunakan kondisi dan prosedur. 4.2 Penanganan Posisi Subsistem Subsistem mulai bekerja dengan memproses OpenBuy OpenSell events. Untuk transisi pertama subsistem, salah satu kondisinya adalah hadirnya tidak kurang dari 56 bar, yang ditunjukkan dalam kode melalui pengecekan kondisi tersebut: Kondisi kedua untuk transisi: jumlah bilah pembuka harus Lebih tinggi yaitu closing bar (Input. num Output. barClose), yaitu posisi sudah ditutup. Dalam kode itu ditunjukkan sebagai berikut: Transisi ke-4 bertanggung jawab untuk membuka posisi long. Ini direpresentasikan sebagai berikut: Transisi ke-5 bertanggung jawab untuk membuka posisi pendek. Ini direpresentasikan sebagai berikut: Transisi lain dalam subkategori secara jelas tidak disajikan dalam Expert Advisor, karena prosedur yang sesuai (aktivasi berhenti atau mencapai tingkat Take Profit), dilakukan secara otomatis di MQL5. The ToWorkspace subsystem is not represented in the MQL5 code because its task is to present the output into the Matlab Workspaces. Conclusions Using a simple trading idea as an example, I have created the automated trading system in Simulink, in which I carried out a backtesting on historical data. At first I was bothered by the question: Is there a point in getting involved with all of this fuss when you can quickly implement a trading system through the MQL5 code Of course, you can do it without the visualization of the process of creating the system and the logic of its work. But most often than not, this is only for experienced programmers or simply talented people. When the trading system extends with new conditions and functions, the presence of the block diagram and its work will clearly the traders task. I would also like to mention that I did not try to oppose the Simulink language capabilities against the MQL5 language. I merely illustrated how you can create an automated trading system using a block design. Maybe, in the future, the MQL5 developers will create a visual constructor of strategies, which will facilitate the process of writing Expert Advisors. Automated Trading System Development with MATLAB Stuart Kozola, MathWorks Want to learn how to create an automated trading system that can handle multiple trading accounts, multiple asset classes, and trade across multiple trading venues Simultaneously In this webinar we will present an example workflow for researching, implementing, testing and deploying an automated trading strategy providing maximum flexibility in what and who you trade with. Anda akan belajar bagaimana produk MATLAB dapat digunakan untuk pengumpulan data, analisis data dan visualisasi, pengembangan model dan kalibrasi, backtesting, pengujian berjalan, integrasi dengan sistem yang ada dan akhirnya penerapan untuk perdagangan real-time. Kami melihat masing-masing bagian dalam proses ini dan melihat bagaimana MATLAB menyediakan satu platform tunggal yang memungkinkan solusi efisien dari semua bagian dari masalah ini. Topik khusus meliputi: Opsi pengumpulan data, termasuk data historis, intraday, dan real-time harian Model bangunan dan prototip pada MATLAB Backtesting dan kalibrasi model Berjalan maju pengujian dan validasi model Berinteraksi dengan perpustakaan dan perangkat lunak yang ada untuk eksekusi perdagangan Penerapan aplikasi akhir Di sejumlah lingkungan, termasuk, JAVA, dan Excel Tools untuk perdagangan frekuensi tinggi, termasuk komputasi paralel, GPU, dan pembuatan kode C dari MATLAB Product Focus Pilih Pengembangan Sistem Perdagangan Negara Anda dengan MATLAB Stuart Kozola, MathWorks Ingin belajar bagaimana membuat Sistem perdagangan otomatis yang dapat menangani beberapa akun perdagangan, beberapa kelas aset, dan perdagangan di beberapa tempat perdagangan Serentak Dalam webinar ini, kami akan menyajikan contoh alur kerja untuk meneliti, menerapkan, menguji, dan menerapkan strategi perdagangan otomatis yang memberikan fleksibilitas maksimum dalam hal dan siapa Anda berdagang dengan. Anda akan belajar bagaimana produk MATLAB dapat digunakan untuk pengumpulan data, analisis data dan visualisasi, pengembangan model dan kalibrasi, backtesting, pengujian berjalan, integrasi dengan sistem yang ada dan akhirnya penerapan untuk perdagangan real-time. Kami melihat masing-masing bagian dalam proses ini dan melihat bagaimana MATLAB menyediakan satu platform tunggal yang memungkinkan solusi efisien dari semua bagian dari masalah ini. Topik khusus meliputi: Opsi pengumpulan data, termasuk data historis, intraday, dan real-time harian Model bangunan dan prototip pada MATLAB Backtesting dan kalibrasi model Berjalan maju pengujian dan validasi model Berinteraksi dengan perpustakaan dan perangkat lunak yang ada untuk eksekusi perdagangan Penerapan aplikasi akhir Di sejumlah lingkungan, termasuk JAVA, dan Excel Tools untuk perdagangan frekuensi tinggi, termasuk komputasi paralel, GPU, dan kode C generasi dari MATLAB Product Focus Select Your Country

No comments:

Post a Comment