Anda di halaman 1dari 25

Buat Robot Perdagangan

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. 

Menggunakan robot perdagangan algoritma Expert Advisor di Meta Trader yang


ditulis dalam bahasa MQL4 adalah salah satu cara untuk mengakses pasar melalui
kode, sehingga menghilangkan emosi dari gambar dan bekerja hanya dengan angka
dan logika program Anda. 

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. 

Strategi perdagangan bebas-tangan ini bukanlah yang saya promosikan — juga bukan


yang pernah saya gunakan dan ternyata menguntungkan sama sekali. Memantau robot
aktif dan perdagangan saat ini, dalam hubungannya dengan mengawasi kalender dan
acara ekonomi, sangat berbeda dari membiarkannya lepas dan berharap yang
terbaik. Kemenangannya mungkin epik, tetapi kekalahan tanpa pengawasan jauh lebih
besar.

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.

Cara Menulis Robot


Ada banyak bahasa yang cocok untuk menulis robot perdagangan algoritme dari awal,
tetapi komplikasi yang akan Anda hadapi sebenarnya dengan API untuk akses pasar
langsung yang akan disediakan oleh pialang saham Anda — begitulah cara Anda
mengaktifkan diri Anda sendiri menempatkan pesanan perdagangan di pasar
keuangan. 

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). 

Selain itu, kami memeriksa dengan atau   || bersyarat untuk IsTradeAllowed () . Ini


adalah fungsi pemeriksaan untuk memeriksa bahwa konteks perdagangan saat ini
tidak sibuk.

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.

Saya sarankan Anda melihat-lihat Referensi MQL4  setiap kali Anda punya waktu


untuk lebih percaya diri dalam menggunakan MQL4 untuk lebih memenuhi
kebutuhan Anda.

Mengedit Kode MQL4 di MetaEditor


Saya merekomendasikan penggunaan MetaEditor IDE bawaan yang disertakan
dengan platform perdagangan MT4. Untuk masuk ke editor, cukup klik kanan pada
expert advisor yang ada di panel navigator sebelah kiri dan pilih modifikasi dari
menu.
MetaEditor MT4 kemudian akan terbuka, dan Anda akan dapat membuat file baru. Ini
menawarkan penyorotan sintaks pengguna dan keluaran debugging. 
Penting: Anda harus mengkompilasi berkas mq4 Anda menjadi penasihat ahli ex4
menggunakan MetaEditor jika Anda mengedit di editor eksternal. Jadi membiasakan
diri dengan MetaEditor adalah suatu keharusan.

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.

Dasar untuk Masuk


Saat kita memplot dua SMA dengan periode yang berbeda — satu dari 40 periode dan
satu dari 100 periode — kita kemudian dapat melihat bagaimana keduanya saling
silang dan membuat dasar untuk masuk. Seperti yang kami sebutkan sebelumnya, saat
SMA berada di bawah harga (kurang dari harga penutupan), kami menganggapnya
sebagai dasar untuk dukungan , dan saat SMA berada di atas harga (lebih besar dari
harga penutupan), kami menganggap ini sebagai garis perlawanan . 
Jadi, dalam kode, kita melakukan hal berikut terlebih dahulu untuk membuat metode
untuk memeriksa masukan silang untuk kemudian menentukan dasar kita untuk
masuk:
01
02
03 //+------------------------------------------------------------------+
04 //| Check for cross over of inputs                                      |
//+------------------------------------------------------------------+
05 int CheckForCross(double input1, double input2)
06 {
07   static int previous_direction = 0;
08   static int current_dirction = 0;
09  
  // Up Direction = 1
10   if(input1 > input2){
11     current_direction = 1;
12   }
13  
14   // Down Direction = 2
15   if(input1 < input2){
    current_direction = 2;
16   }
17  
18   // Detect a direction change
19   if(current_direction != previous_direction){
20     previous_direction = current_dirction;
    return (previous_direction);
21
  } else {
22     return (0);
23   }
24 }
25
26
Sekarang kita dapat menghitung SMA kita menggunakan  metode indikator teknis
iMA yang disediakan oleh MQL4 dan menjalankannya
melalui CheckForCross fungsi kita untuk melihat apakah ada persilangan seperti ini:
1 shortSma = iMA(NULL, 0, PeriodOne, 0, MODE_SMMA, PRICE_CLOSE, 0);
2 longSma = iMA(NULL, 0, PeriodTwo, 0, MODE_SMMA, PRICE_CLOSE, 0);
3  
4 // Check if there has been a cross on this tick from the two SMAs
int isCrossed = CheckForCross(shortSma, longSma);
5
Di sini kita menggunakan  MODE_SMMA untuk kembali kita S moothed M oving A verage
dari  iMA  metode indikator teknis untuk metode smoothing kami dipilih. 
Jika Anda ingin menggunakan metode smoothing lain, ada beberapa pilihan seperti
Simple, Exponential, dan Linear-weighted.

Seperti semua support dan resistance, metodologi perdagangan standar bekerja di


sini:  beli support dan jual resisten ! 

Jadi, untuk algoritme kami, kami akan melakukannya. Ketika ada persilangan di


kedua arah, kami akan menerapkan arah perdagangan yang sesuai dan memasuki
pasar.
01
02 f(isCrossed == 1){
03         ticket = OrderSend(Symbol(),OP_BUY, LotsOptimized(),Ask,3,0,0,"Double SMA
04 Crossover",MAGICNUM,0,Blue);
05         if(ticket > 0){
          if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
06             Print("BUY Order Opened: ", OrderOpenPrice());
07           }
08           else
09             Print("Error Opening BUY Order: ", GetLastError());
10             return(0);
        }
11     if(isCrossed == 2){
12       ticket = OrderSend(Symbol(),OP_SELL, LotsOptimized(),Ask,3,0,0,"Double SMA Cross
13       if(ticket > 0){
14         if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
          Print("SELL Order Opened: ", OrderOpenPrice());
15         }
16         else
17           Print("Error Opening SELL Order: ", GetLastError());
18           return(0);
19       }
    }
20
21
Di sini kami memeriksa kembalinya   CheckForCross fungsi yang kami tentukan
sebelumnya, setelah memuatnya dengan dua SMA kami yang ditentukan
oleh   iMA  indikator teknis.

Kami menggunakan  OrderSend , yang disediakan oleh MQL4, untuk membuka


perdagangan. Sebagai praktik terbaik, hasilnya disimpan dalam  ticket variabel dan
kemudian diperiksa untuk nilai pengembalian positif untuk menangani kesalahan yang
mungkin telah dilaporkan dari sisi broker.
Dasar untuk Keluar
Seperti dasar untuk masuk (kecuali dalam kasus terbalik), ketika SMA
menciptakan salib kematian , kita dapat menggunakan sinyal ini untuk menutup
perdagangan kita, jika ada perdagangan yang terbuka. Logika untuk ini akan ditulis
sebagai berikut:
01
02
03 // Get the current total orders
04   total = OrdersTotal();
05    
// Manage open orders for exit criteria
06   for(cnt = 0; cnt < total; cnt++){
07     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
08     if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()){
09       // Look for long positions
10       if(OrderType()==OP_BUY){
        // Check for Exit criteria on buy - change of direction
11         if(isCrossed == 2){
12           OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // Close the positio
13           return(0);
14         }
      }
15
      else //Look for short positions - inverse of prior conditions
16       {
17         // Check for Exit criteria on sell - change of direction
18         if(isCrossed == 1){
19           OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // Close the positio
          return(0);
20         }
21       }
22     }
23   }
24
25
Di sini kita memasuki satu  for putaran untuk mengulang semua pesanan terbuka,
meskipun saat ini kita hanya akan memperdagangkan satu perdagangan pada satu
waktu — ini memungkinkan kita untuk berkembang di masa depan dan memiliki
beberapa perdagangan terbuka jika kita merasa kita membutuhkannya.

Ini juga membuat penggunaan metode OrderSelect lebih mudah, karena kita dapat


menggunakan  cnt  variabel dari  for loop kita . 
Setelah berada di dalam iterasi, kita cukup melihat JenisPesanan saat ini (memeriksa
pesanan Beli OP_BUY  atau Jual  OP_SELL   ) dan kemudian menerapkan logika
kondisional dari metode pengembalian kami  CheckForCross .

Menambahkan Manajemen Uang


Saat ini algoritme kami sederhana dengan dasar untuk masuk dan keluar dari
perdagangan, tetapi masih sangat bodoh dalam hal pengelolaan dana. Bagi kami untuk
menjaga risiko di bawah kendali, kami hanya akan menempatkan seperlima dari
ekuitas yang dapat diperdagangkan pada setiap perdagangan, jadi sekarang kami perlu
memasukkannya ke dalam algoritme kami. 
1 lot = NormalizeDouble((AccountFreeMargin()/5)/1000.0,1);
2 if(lot<0.1) lot=0.1;
3 return(lot);

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. 

Kami menggunakan AccountFreeMargin dan NormalizeDouble untuk menghasilkan


ukuran lot ini, dan jika dihitung di bawah ukuran lot minimal 0.1, kami akan
menyetelnya menjadi 0.1.

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. 

Catatan: Fitur yang bagus adalah menyediakan parameter untuk membatasi


kumpulan yang dapat diperdagangkan. Misalnya, jika Anda hanya ingin berdagang
dengan $ 1.000 dari akun Anda, terlepas dari margin yang tersedia, Anda dapat
mengatur perdagangan yang tersedia menjadi hanya $ 1.000 daripada seluruh
ukuran akun Anda. 

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.

Menambahkan Break-Even Margin

Margin untuk impas dapat ditambahkan hanya dengan


menambahkan OrderOpenPricemetode seperti ini:
Ticket = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+10, OrderTakePro
1 Green);
Untuk contoh ini, kami mengizinkan perbedaan 10 poin di entri kami untuk ditutup
melalui batas berhenti.

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 memungkinkan pedagang untuk memeriksa apakah pemikiran


mereka menahan air, bisa dikatakan, sebelum melakukan lebih banyak usaha dan
bergerak maju — menulis lebih banyak algoritme mereka ke dalam kode.

Di mana Menempatkan File Pakar?


Jika Anda telah menggunakan editor teks eksternal untuk menulis penasihat Anda,
Anda perlu memuat penasihat ahli Anda ke dalam platform perdagangan MT4 untuk
mengkompilasinya dan memeriksa kesalahan. Cukup tambahkan file .mq4 ke instalasi
MetaTrader Anda di direktori Expert, mis   /MetaTrader4/MQL4/Experts .
Expert Advisor akan tersedia di dalam perangkat lunak MT4 Anda dari menu
Navigator di sisi kiri di bawah bagian pakar. 

Catatan: Pastikan Anda menguji di akun demo. Akun riil akan berdagang dengan


uang sungguhan, dan meskipun keuntungannya nyata, begitu juga kerugiannya.

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.

Cara Memulai Tes Kembali


Gunakan pintasan Control-R  untuk membuka Penguji Strategi atau pilih
dari menu Tampilan . Panel penguji akan terbuka di bagian bawah jendela Anda.

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.

Terakhir, kami memiliki opsi untuk memodelkan pada Every Tick , Control Points ,


atau Open Prices saja. Saat menulis skrip, Anda dapat memilih Harga Terbuka saja,
karena ini akan dengan cepat menjalankan pengujian Anda — meskipun
hasilnya belum sebanding dengan uang sungguhan!

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 . 

Nilai numerik dapat diberikan untuk setiap parameter di sini — defaultnya


adalah PeriodOne  = 40  dan PeriodTwo = 100 .

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!

Untuk melakukan lebih banyak pengujian, saya sangat menyarankan Anda


mengunduh semua data pasar sebelumnya dan memuatnya ke MT4 agar dapat
melakukan pengujian kembali yang lebih menyeluruh. Untuk informasi lebih lanjut
tentang itu, silakan merujuk ke  panduan ini , dan selamat bertransaksi!

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

Anda mungkin juga menyukai