Jawatan Popular

Pilihan Editor - 2020

MQL4: Kami menulis satu penasihat sekaligus untuk MT4 dan MT5

Salam, kawan-kawan!

Ramai di antara kamu mungkin sudah menghadapi kesulitan ini lebih dari sekali: mereka menulis seorang penasihat dalam mql4, dan kemudian saya mahu mencuba bermain dengan MetaTrader 5. Menulis semula semua kod sekali lagi adalah tugas yang agak teliti dan panjang, dan anda juga perlu terlebih dahulu menangani kerja yang sedia ada . Menulis dua Penasihat Pakar yang berbeza secara berasingan untuk MT4 dan untuk MT5 juga memakan masa. Kami akan menyelesaikan masalah ini hari ini dalam tutorial video baru.

Jadi apa yang perlu dilakukan? Jawapannya mudah - tulis satu penasihat untuk dua terminal sekaligus. Lagipun, untuk sebahagian besar, bahasa mql4 dan mql5 tidak banyak berbeza, banyak kaedah dan struktur asas skrip dalam bahasa-bahasa ini adalah serupa. Sekiranya mungkin untuk menulis kod biasa dalam satu skrip, dan bahagian yang berbeza hanya dapat ditulis semula dalam kedua bahasa dan memaksa pengompil untuk memilih kod-kod yang diperlukan, ia akan menjimatkan banyak masa dan saraf.

Mujurlah, MetaEditor menyokong arahan pemprosesan bersyarat praprocessor. Dan hari ini kita akan melihat bagaimana ini dilakukan dengan menggunakan contoh yang sangat mudah.

#ifdef identifier // Kod di sini dikompilkan jika pengecam telah ditentukan untuk preprocessor dalam perintah #define. #endif

Dalam kod untuk MT5, kami akan menggantikan pembolehubah daripada MQL4 menggunakan arahan #define:

#ifdef __MQL5__ #define OrdersTotal PositionsTotal #endif

Di tajuk penasihat kami menempatkan pemboleh ubah input:

input int Stop = 300; input int Ambil = 400; int input Slip = 100; input int MN = 123; input double LT = 0.1;

Kini anda boleh menulis kaedah untuk membeli dan menjual:

bool Buy (double price, double sl, double tp) {#ifdef __MQL4__ int ticket = OrderSend (Symbol (), 0, LT, price, Slip, sl, tp, "", MN); jika (tiket <0) {PrintFormat ("Ralat OrderSend% d", GetLastError ()); } #endif #ifdef __MQL5__ // --- perisytiharan dan permulaan permintaan dan hasil permintaan MqlTradeRequest = {0}; Hasil MqlTradeResult = {0}; // --- parameter permintaan request.action = TRADE_ACTION_DEAL; // jenis permintaan operasi perdagangan.symbol = Simbol (); / // character request.volume = LT; // volume request.type = 0; // order type request.price = price; / / harga untuk permintaan permintaan.sl = sl; // harga StopLoss request.tp = tp; / harga permintaan TakeProfit.deviation = Slip; // penyimpangan yang dibenarkan dari permintaan harga.magic = MN; / // Pesanan MagicNumber // --- menghantar permintaan jika (! PesananSend (permintaan, hasil)) {// jika permintaan tidak dapat dihantar, mencetak kod ralat PrintFormat ("Ralat Pesanan Pesanan% d", GetLastError ()); } // --- maklumat mengenai operasi PrintFormat ("retcode =% u deal =% I64u order =% I64u", result.retcode, result.deal, result.order); #endif // --- return (false); }

Kaedah penjualan adalah serupa dengan kaedah beli (). Kami tidak akan terutamanya memikirkan strategi dalam contoh ini, kami akan menerima syarat untuk membuka secara rawak dan meletakkan kod ini dalam OnTick ():

int oper = (int) (GetTickCount ()% 2); / / baki pembahagian oleh dua adalah sama ada 0 atau 1 jika (oper == 0) {double price = Ask; double SL = NormalizeDouble (Bid - Stop * _Point, _Digits); double TP = NormalizeDouble (Bid + Take * _Point, _Digits); Beli (Ask, SL, TP); } jika (oper == 1) {double price = Bid; double SL = NormalizeDouble (Ask + Stop * _Point, _Digits); double TP = NormalizeDouble (Ask - Take * _Point, _Digits); Menjual (Tanya, SL, TP); }

Kesimpulannya

Itu sahaja. Sekarang anda boleh menyusun kod di MetaEditor 4 dan di terminal MetaTrader 4 ia akan berfungsi. Anda boleh mengkompilasi Penasihat Pakar dalam MetaEditor 5 dan ia akan berfungsi secara normal dalam terminal MetaTrader 5. Selain itu, untuk menukar terminal anda tidak perlu menulis semula satu baris kod - semuanya akan disusun dan berfungsi dengan baik.

Tonton video itu: Building your own trading bot using MetaTrader 4 and MQL4 (April 2020).

Tinggalkan Komen Anda