Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
Algoritma: Dasar-dasar
Penulisan Expert Advisor di
MQL4
oleh Tom Whitbread10 Mar 2017
Kesulitan: Durasi Menengah : Bahasa Panjang :
Bisnis Keuangan
Pasar keuangan dunia menawarkan kepada Anda potensi untung dan rugi yang sangat
besar. Selalu ada potensi untung di pasar karena Anda dapat melakukan perdagangan
di kedua arah. Apakah posisi Anda bullish atau bearish, kemampuan trader untuk
menghasilkan uang selalu ada — seperti kemampuan untuk membuat kerugian.
Terlalu sering, emosi, jebakan pikiran psikologis, dan disiplin mental menghalangi
keuntungan dan merupakan alasan utama 95% (atau lebih ) dari semua pedagang
baru kehilangan semua modal investasi mereka di bulan pertama.
Mengeluarkan emosi dari persamaan adalah salah satu ukuran, tetapi ini tidak berarti
robot tidak bisa kalah. Bahkan, bank investasi besar pun harus menghentikan robot
perdagangan mereka sebelum kerugian menjadi fatal. Pada 2013, Goldman Sachs
mengalami kesalahan serius dalam algoritme perdagangan mereka yang menelan
biaya $ 100 juta.
Anda perlu menyadari, sebelum melanjutkan dengan panduan ini dan bahkan
mempertimbangkan untuk menggunakan uang tunai yang diperoleh dengan susah
payah , bahwa Anda dapat kehilangan semua deposit Anda di akun broker Anda dari
kode Anda (dan mungkin dalam kasus terburuk lebih banyak lagi dengan beberapa
broker jika ada biaya tambahan. menerapkan)
Anda pada akhirnya bertanggung jawab atas perdagangan, bahkan jika kode program
menempatkannya untuk Anda. Meskipun kerugian adalah suatu kemungkinan, Anda
juga dapat menggandakan akun dan membuatnya tumbuh secara eksponensial saat
Anda tidur.
Jika Anda ingin menjalankan sepenuhnya dengan auto-pilot, ini dapat dicapai tanpa
interaksi sama sekali. Anda benar-benar dapat menghasilkan uang secara pasif
sementara Anda melanjutkan kehidupan sehari-hari Anda.
Menginstal MQL4
Silakan unduh MT4 dari situs web mereka dan instal di komputer Anda.
Pengguna Windows
pengguna macOS
Pengguna Linux
Setelah MT4 berjalan, Anda memerlukan akun dengan broker yang mendukung
MT4. Mereka kemudian akan dapat memberi Anda kredensial login MT4 Anda.
Semua broker akan menawarkan akun demo, dan Anda didorong untuk selalu
menggunakan akun demo untuk menulis dan menguji perangkat lunak Anda.
Setelah Anda mengkonfigurasi MT4 di desktop Anda, kami dapat terus membuat
robot perdagangan algoritme Expert Advisor kami sendiri.
Memproses data pasar dapat dilakukan dalam banyak bahasa, dan mungkin lebih
cepat daripada MT4 MQL4 yang dapat menjalankan pengujian ulang (pengujian
kembali adalah cara untuk menguji robot algoritme Anda; lebih lanjut tentang ini
nanti). Untuk alasan kemudahan fungsionalitas dan dukungan umum untuk perangkat
lunak keuangan, saya sangat merekomendasikan menggunakan MQL4 (MetaQuotes
Language 4), bahasa asli MetaTrader 4, untuk menulis robot perdagangan algoritme
Anda.
Iklan
Sintaks MQL4
MQL4 mirip dalam bentuknya dengan PHP, C, C ++ atau VBScript. Di bawah ini
adalah contoh fungsi yang akan dipanggil di setiap tick data pasar:
01 void OnTick()
{
02 if(Bars<100 || IsTradeAllowed()==false)
03 return;
04 if(CalculateCurrentOrders(Symbol())==0){
05 CheckForOpen();
06 } else {
07
CheckForClose();
08 }
09 }
10
Di sini kami memeriksa apakah sudah cukup data pasar yang dimuat Bars <
100 . MQL4 mengatur variabel yang telah ditentukan seperti Bar (yang berisi jumlah
bar yang dimuat ke dalam grafik).
Elemen MQL4 seperti variabel yang telah ditentukan dan fungsi operasi bagan
seperti Symbol () membuat penulisan strategi Anda berjalan lancar, dan bagi saya
itulah mengapa lebih disukai untuk membuat kode algoritma perdagangan robot di
MQL4 daripada bahasa lain.
Algoritma kami
Untuk strategi kami, kami akan mulai menggunakan basis support dan resistance
dari indikator SMA ( S moothed M oving A verage ). SMA dapat
memprediksi sinyal masuk / keluar bullish atau bearish . Rata-rata pergerakan yang
diperhalus membantu kami mengurangi gangguan dari pasar, memberi kami
pandangan yang lebih jelas tentang arah aksi harga.
Baik dalam tren naik atau turun, SMA dapat berperilaku
sebagai support atau resistance , tergantung pada orientasinya. Saat harga naik, SMA
akan berperilaku sebagai dasar support, dan saat harga turun, sebaliknya sebagai
resistance / plafon.
Ini berarti jika Anda memiliki $ 10.000 di akun, kami hanya berdagang dengan
seperlima pada satu waktu ($ 2.000), jadi skrip hanya akan melakukan perdagangan
dengan lot ukuran yang lebih kecil 0,1 atau 0,2, misalnya — berdasarkan yang ini-
perhitungan kelima.
Saat akun tumbuh (atau menyusut!), Eksposur hanya akan ditetapkan pada seperlima
dari ekuitas akun. Ini berarti bahwa eksposur berlebih dari jumlah tetap (misalnya,
memperdagangkan lot tetap tertentu pada akun ukuran apa pun) secara teoritis tidak
dapat terjadi, sehingga risiko panggilan margin dari perdagangan berlebih dihapus
atau sangat berkurang.
Margin call adalah risiko yang sangat nyata jika pasar bergerak melawan Anda secara
drastis sebelum kembali karena lonjakan / fluktuasi sementara Anda tidak ada untuk
menyimpan lebih banyak dana.
Dalam istilah awam, ukuran lot perdagangan akan dihitung secara dinamis oleh skrip
kami untuk memenuhi ukuran ekuitas. Jadi potensi keuntungan yang semakin besar
sangatlah nyata.
Secara pribadi saya selalu menggunakan fitur seperti ini saat menjalankan skrip baru
untuk mengurangi risiko saya, sampai saya benar-benar yakin skrip berfungsi cukup
kuat untuk mendapatkan lebih banyak dana.
Secara terprogram, ini membutuhkan parameter dan sedikit perubahan pada contoh
kode di atas untuk memeriksa variabel itu daripada AccountFreeMargin() nilainya.
Seri
Selain itu, kami akan mencoba untuk melakukan beberapa situasi impas, yang berarti
bahwa jika pasar telah berubah melawan kami untuk menciptakan kerugian secara
substansial dari pembukaan, kami melihat untuk keluar dengan kerugian minimal dan
setidaknya titik impas untuk mempertahankan modal kami.
Ini dapat dicapai dengan memantau kerugian perdagangan kami dan hubungannya
dengan harga terbuka. Jika arah berubah dan perdagangan kita tidak menghasilkan
uang, kita dapat mencoba menutup perdagangan sedekat mungkin dengan harga
masuk:
01 bool BreakEven(int MN){
int Ticket;
02
03
for(int i = OrdersTotal() - 1; i >= 0; i--) {
04 OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
05
06 if(OrderSymbol() == Symbol() && OrderMagicNumber() == MN){
07 Ticket = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderT
08 Green);
09 if(Ticket < 0) Print("Error in Break Even : ", GetLastError());
10 break;
11 }
12 }
13
return(Ticket);
14
}
15
Di atas menggunakan OrderModify untuk mencoba mengatur stop loss ke harga buka
order. Ini adalah metode yang kasar tapi sederhana untuk memastikan bahwa kita
melangkah keluar saat harga kembali ke harga masuk kita. Ini hanya diterapkan ketika
laba yang belum direalisasi saat ini mengalami kerugian.
Catatan: Arah perdagangan harus diperiksa untuk metode ini — apakah itu harus
ditambahkan atau dikurangkan dari harga masuk menurut apakah itu posisi beli atau
jual.
Cara lain untuk memastikan keuntungan kami tidak hilang adalah dengan
menggunakan trailing stop , yang akan dibahas secara rinci di panduan lain.
Seluruh Naskah
Berikut adalah daftar lengkap untuk penasihat ahli kami. Kami memiliki beberapa
parameter yang tersedia untuk kami seperti level take profit, stop loss, dan periode
SMA.
Silakan bermain dengan parameter untuk melihat apa yang bekerja paling baik untuk
situasi perdagangan Anda dan menyempurnakan algoritme Anda.
Ingat: kinerja masa lalu sama sekali tidak menunjukkan masa depan.
001 //+------------------------------------------------------------------+
//| Double Sma.mq4 |
002
//| Copyright 2017, Tom Whitbread. |
003 //| http://www.gript.co.uk |
004 //+------------------------------------------------------------------+
005 #property copyright "2017, Tom Whitbread."
006 #property link "http://www.gript.co.uk"
#property description "Smoothed Moving Average sample expert advisor"
007
008
#define MAGICNUM 20131111
009
010 // Define our Parameters
011 input double Lots = 0.1;
012 input int PeriodOne = 40; // The period for the first SMA
013 input int PeriodTwo = 100; // The period for the second SMA
input int TakeProfit = 40; // The take profit level (0 disable)
014 input int StopLoss = 0; // The default stop loss (0 disable)
015 //+------------------------------------------------------------------+
016 //| expert initialization functions |
017 //+------------------------------------------------------------------+
int init()
018 {
019 return(0);
020 }
021 int deinit()
022 {
return(0);
023 }
024 //+------------------------------------------------------------------+
025 //| Check for cross over of SMA |
026 //+------------------------------------------------------------------+
027 int CheckForCross(double input1, double input2)
{
028 static int previous_direction = 0;
029 static int current_direction = 0;
030
031 // Up Direction = 1
032 if(input1 > input2){
current_direction = 1;
033 }
034
035 // Down Direction = 2
036 if(input1 < input2){
037 current_direction = 2;
038 }
039
// Detect a direction change
040 if(current_direction != previous_direction){
041 previous_direction = current_direction;
return (previous_direction);
042
} else {
043 return (0);
044 }
045 }
046
047 //+------------------------------------------------------------------+
//| Calculate optimal lot size |
048 //+------------------------------------------------------------------+
049 double LotsOptimized()
050 {
051 double lot = Lots;
052 // Calculate Lot size as a fifth of available free equity.
lot = NormalizeDouble((AccountFreeMargin()/5)/1000.0,1);
053 if(lot<0.1) lot=0.1; //Ensure the minimal amount is 0.1 lots
054 return(lot);
055 }
056
057
058 //+------------------------------------------------------------------+
//+ Break Even |
059 //+------------------------------------------------------------------+
060 bool BreakEven(int MN){
061 int Ticket;
062
063 for(int i = OrdersTotal() - 1; i >= 0; i--) {
064 OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
065
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MN){
066 Ticket = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTa
067 if(Ticket < 0) Print("Error in Break Even : ", GetLastError());
068 break;
069 }
070 }
071
return(Ticket);
072 }
073
074 //+------------------------------------------------------------------+
075 //+ Run the algorithm |
076 //+------------------------------------------------------------------+
int start()
077 {
078 int cnt, ticket, total;
079 double shortSma, longSma, ShortSL, ShortTP, LongSL, LongTP;
080
081 // Parameter Sanity checking
082 if(PeriodTwo < PeriodOne){
Print("Please check settings, Period Two is lesser then the first period");
083 return(0);
084 }
085
086 if(Bars < PeriodTwo){
Print("Please check settings, less then the second period bars available for the
087 return(0);
}
088
089
// Calculate the SMAs from the iMA indicator in MODE_SMMA using the close price
090 shortSma = iMA(NULL, 0, PeriodOne, 0, MODE_SMMA, PRICE_CLOSE, 0);
091 longSma = iMA(NULL, 0, PeriodTwo, 0, MODE_SMMA, PRICE_CLOSE, 0);
092
093 // Check if there has been a cross on this tick from the two SMAs
094 int isCrossed = CheckForCross(shortSma, longSma);
095
// Get the current total orders
096 total = OrdersTotal();
097
098 // Calculate Stop Loss and Take profit
099 if(StopLoss > 0){
100 ShortSL = Bid+(StopLoss*Point);
101 LongSL = Ask-(StopLoss*Point);
}
102 if(TakeProfit > 0){
103 ShortTP = Bid-(TakeProfit*Point);
104 LongTP = Ask+(TakeProfit*Point);
105 }
106
// Only open one trade at a time..
107 if(total < 1){
108 // Buy - Long position
109 if(isCrossed == 1){
110 ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(),Ask,5, LongSL, LongTP, "
111 Crossover",MAGICNUM,0,Blue);
if(ticket > 0){
112 if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
113 Print("BUY Order Opened: ", OrderOpenPrice(), " SL:", LongSL, " TP: ", Lo
114 }
115 else
116 Print("Error Opening BUY Order: ", GetLastError());
return(0);
117 }
118 // Sell - Short position
119 if(isCrossed == 2){
120 ticket = OrderSend(Symbol(), OP_SELL, LotsOptimized(),Bid,5, ShortSL, ShortTP,
Crossover",MAGICNUM,0,Red);
121 if(ticket > 0){
122 if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
123 Print("SELL Order Opened: ", OrderOpenPrice(), " SL:", ShortSL, " TP: ", Sh
124 }
125 else
Print("Error Opening SELL Order: ", GetLastError());
126 return(0);
127 }
128 }
129
130 // Manage open orders for exit criteria
for(cnt = 0; cnt < total; cnt++){
131
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
132 if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()){
133 // Look for long positions
if(OrderType() == OP_BUY){
134
// Check for Exit criteria on buy - change of direction
135 if(isCrossed == 2){
136 OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // Close the positi
137 return(0);
138 }
}
139 else //Look for short positions - inverse of prior conditions
140 {
141 // Check for Exit criteria on sell - change of direction
142 if(isCrossed == 1){
143 OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // Close the positi
return(0);
144 }
145 }
146 // If we are in a loss - Try to BreakEven
147 Print("Current Unrealized Profit on Order: ", OrderProfit());
if(OrderProfit() < 0){
148 BreakEven(MAGICNUM);
149 }
150 }
151
152 }
153
154 return(0);
}
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
Mengujinya
Kami dapat menguji data pasar hari, bulan, atau bahkan tahun sebelumnya untuk
instrumen keuangan dengan mudah di lingkungan MT4 (Meta Trader 4). Namun,
pedagang didorong untuk tidak mempercayai pengujian balik saja , tetapi
menggunakannya sebagai panduan untuk mengarahkan strategi perdagangan mereka
dan melihat seberapa efektif sebuah ide.
Pengujian Kembali
Jika Anda menguji strategi pada tahun terakhir kabel (GBP / USD) dan menemukan
rasio keuntungan berada di atas 1 (artinya Anda menghasilkan uang), maka Anda bisa
mendapatkan hal yang baik.
Apakah ini akan bekerja di dunia nyata adalah pertanyaan lainnya utuh, dan mengapa
pengujian maju sama pentingnya, seperti pengujian skor Z . Itu adalah topik yang jauh
lebih canggih untuk machine learning algoritme Anda, yang tidak akan dibahas di
sini, tetapi di panduan lebih lanjut nanti.
Dari sini, Anda dapat memilih algoritme untuk dijalankan di menu dropdown
pertama, jadi pilih nama file Expert advisor yang telah Anda buat di sini. Selanjutnya,
Anda dapat memilih simbol (instrumen keuangan). Saya akan menguji simbol forex
GBPUSD dari pasangan Pound Inggris ke Dolar AS.
Kami juga dapat memilih resolusi periode waktu untuk dijalankan (periode 15 menit,
periode 1 jam, periode 1 hari, dan seterusnya). Saya akan menggunakan pengaturan
30 menit.
Untuk ini, ketika Anda mencari tes nyata sebelum melanjutkan pengujian, disarankan
untuk menjalankan Every Tick . Ini akan memakan waktu lebih lama untuk
diproses! (Anda dapat membiarkannya berjalan di VPN MT4 online atau tentu saja
semalaman di komputer lokal Anda jika Anda mau.)
Mengubah Parameter
Kami menetapkan beberapa parameter ( PeriodOne dan PeriodTwo ) untuk penasihat
ahli kami sehingga periode waktu dari dua Moving Average dapat dimodifikasi.
Ini dapat diakses melalui penguji Strategi dengan mengklik tombol Expert
Properties dan melihat tab input .
Pengujian Maju
Setelah Anda menguji data historis, Anda dapat mulai menguji dengan pasar langsung
seperti yang telah Anda lihat apakah ide Anda berhasil melewati badai dari tes
sebelumnya — dan (mudah-mudahan) telah menemukan kepercayaan pada apa yang
Anda yakini sebagai strategi pemenang !
Di pasar langsung, Anda mungkin menemukan strategi Anda gagal karena elemen
yang tidak Anda perhitungkan dalam tes punggung sebelumnya. Ingat pasar selalu
benar . Kode Anda tidak pernah lebih pintar dari pasar, dan tidak ada yang namanya
beruntung dalam perdagangan.
Tes maju benar-benar adalah tes asam untuk melihat apakah strategi tersebut akan
menguntungkan bagi Anda untuk menaruh uang nyata di atasnya.
Tes maju biasanya paling baik dilakukan pada VPN khusus untuk MT4 EA (Expert
Advisors) yang sering disediakan gratis oleh sebagian besar broker FX. Skrip akan
berjalan 24/5 saat pasar terbuka, dan Anda akan dapat memantau perdagangan secara
langsung dengan masuk ke akun dari terminal karena akan berjalan di perangkat
seluler Anda melalui aplikasi MT4 — atau mesin desktop melalui Perangkat lunak
MT4.
Volatilitas Tinggi
Apa yang bisa menjadi pembunuh nyata bagi skrip kami adalah volatilitas tinggi di
pasar, yang dapat terjadi dari banyak faktor luar.
Misalnya, setiap crash atau flash crash, perang, pemilihan umum, kenaikan suku
bunga, imbal hasil obligasi atau laporan ekonomi yang signifikan seperti CPI, GDP
atau perubahan sistem perpajakan akan menyebabkan perubahan besar di seluruh
ekonomi global dan banyak pasar keuangannya. . Begitu juga, secara tidak langsung,
perdagangan Anda dalam satu pasangan mata uang atau sekuritas dapat dipengaruhi
oleh peristiwa negara lain, yang mungkin tidak Anda antisipasi pada awalnya.
Baru-baru ini, Brexit dan investigasi FBI Hillary Clinton selama menjelang pemilu
AS adalah contoh volatilitas tinggi di pasar bagi siapa pun yang tertarik untuk melihat
lebih dekat.
Mari kita ambil kasus Brexit. Publik Inggris tampaknya percaya pada mayoritas
bahwa pemungutan suara Brexit akan sangat tidak mungkin. Saya tidak begitu optimis
dan menarik semua pound saya, menabung banyak ekuitas saya di Inggris karena nilai
tukar yang anjlok.
Adapun yang lainnya, saya takut mengatakan bahwa mereka tidak seberuntung
itu. Hedging pada pemungutan suara tetap — seperti yang dinyatakan oleh beberapa
penasihat bank besar — tentu saja akan menghasilkan kebalikannya, dan kerugian
sekitar 15% bagi mereka yang terikat pada pound, karena mereka menunggu hingga
pulih.
Situasi seperti ini ideal untuk mematikan robot perdagangan Anda dan hanya
berdagang di luar volatilitas pasar yang tinggi. Pengkodean untuk hasil semacam ini
akan sangat sulit secara otomatis terjadi pada indikator leading atau lagging dan lebih
baik diperdagangkan setelah acara atau secara manual. Peluang untuk sinyal palsu
atau kontradiktif selalu lebih tinggi selama peristiwa besar, dan pendekatan
fundamental manual daripada teknis mungkin lebih menguntungkan.
Tidak ada yang salah dengan menghentikan robot Anda karena Anda mengharapkan
krisis. Ini mungkin menyelamatkan Anda dari kerugian, sementara di sisi lain itu
mungkin membuat Anda kehilangan kemenangan besar. Dalam pengalaman saya,
peluang menang jauh lebih kecil, karena ketidakpastian dan kemungkinan margin call
atau mencapai stop loss Anda sebelum perdagangan dapat berlanjut karena lonjakan
sesaat yang ekstrem.
Kesimpulan
Kami telah meletakkan beberapa dasar penulisan algoritma perdagangan dan
memperkenalkan banyak ide baru. Dari menelusuri kode, saya harap Anda sekarang
dapat melihat cara kerja bagian dalam dari algoritma di MQL4, dan melihat
bagaimana indikator teknis seperti rata-rata bergerak digunakan untuk menghasilkan
sinyal masuk dan keluar.
Dalam hal pengelolaan uang, kami telah membahas kemungkinan untuk memasukkan
kondisi impas dan ukuran lot dinamis untuk menggunakan seperlima dari ekuitas yang
tersedia. Jangan ragu untuk menyesuaikan bagian kode ini sesuai keinginan Anda
untuk mengambil risiko. Kami telah membahas penguji strategi pengujian belakang
MT4 dan membuka pintu untuk potensi pengujian ke depan dan bahkan pengujian
skor-Z di masa depan, yang semuanya penting sebelum ditayangkan.
Dengan lebih banyak penyesuaian dan penelitian, Anda mungkin bisa memiliki
pengalaman yang sangat menguntungkan di pasar suatu hari nanti. Sekarang setelah
Anda memiliki penasihat ahli dasar yang baik sebagai skrip dasar, Anda dapat mulai
menulis strategi Anda sendiri ke dalam bahasa MQL4 — dan menguji apakah strategi
tersebut benar-benar berfungsi sebaik yang Anda rasa seharusnya, atau seperti yang
mungkin dilakukan oleh beberapa buku perdagangan dan mentor. menyinggung!
Ke depannya, Anda pasti ingin menguji algoritme Anda lebih lanjut sebelum
menggunakan uang sungguhan. Setelah Anda merasa cukup yakin bahwa Anda
memiliki skrip yang berkinerja baik, Anda mungkin juga ingin bergabung dengan
komunitas untuk membawa ide-ide Anda lebih jauh dan membantu bertukar pikiran,
atau membongkar algoritme lain untuk melihat cara kerjanya dan bagaimana Anda
dapat memasukkannya ke dalam strategi Anda.
Berbagi penasihat ahli dengan pedagang lain adalah cara yang bagus untuk
berkolaborasi dan melihat bagaimana orang lain menulis algoritme mereka untuk
kebanyakan indikator teknis di luar sana seperti MACD, RSI, CCI, ADX, Bollinger
Bands dan Ichimoku ... daftarnya terus berlanjut dan seterusnya.
Mungkin di masa mendatang, jika Anda cukup percaya diri, Anda mungkin ingin
menjual skrip Anda kepada orang lain, dalam hal ini pasar MT4 atau di situs Anda
sendiri bisa menjadi tempat yang ideal untuk memulai!
Penafian : Artikel ini tidak dimaksudkan sebagai saran investasi atau keuangan —
melainkan dimaksudkan murni sebagai tutorial teknis untuk pembuatan dan
penelitian perangkat lunak. Kode diberikan untuk tujuan pendidikan saja,
sebagaimana adanya, tanpa jaminan atau jaminan.
https://code.tutsplus.com/tutorials/create-a-algorithm-trading-robot-the-basics-of-writing-a-expert-
advisor-in-mql4--cms-27984