Rabu, 23 Februari 2011

Algoritma Waiting

Pak Ary,

Trims banyak untuk penjelasannya bagaimana Pak Ary melakukan uji coba broker. Saya malah baru mengerti tentang program CopyToolPro tersebut.

Semoga ada pembaca lainnya yang bisa menanggapi broker FX Clearing terutama yang sudah berpengalaman dengannya.

Saya juga malahan baru tahu kalo Marketiva ternyata kurang meyakinkan. Memang dari awal saya gak terlalu menyukai broker ini lantaran karena Trading Platform berbasis pada Web. Oleh sebab itu, saya hanya berfokus pada Trading Platform MetaTrader 4 saja.

Di kesempatan ini saya membutuhkan bantuan Pak Ary seputar masalah EA. Saya harap Pak Ary tidak keberatan dengan permohonan ini. Maaf jika tiba-tiba topiknya menjauh dari apa yang sedang dibahas dalam blog Pak Ary. Saya ingin bertanya sebuah prosedur algoritma pada programming. Yang ingin saya tanyakan adalah mengenai code untuk menentukan suatu operasi tertentu. Kebetulan saya sudah menemukan strategi yang lumayan baik untuk membaca sebuah trend. :)

Dalam sebuah kasus, sebuah order tereksekusi saat semua persyaratan tercapai. Asumsikan sebuah order tereksekusi pada Candlestick T, kemudian kira-kira setelah beberapa Candlestick, order ditutup tepat pada Candlestick T+5. Namun, Candlestick T+5 tersebut masih berjalan dan saya tidak ingin ada order sampai Candlestick baru muncul atau baru akan ada order pada saat Candlestick T+6 atau bahkan Candlestick T>6. Hal ini saya lakukan untuk menghindari nilai indikator yang 'sloping' atau repainting.

Bagaimana penulisan algoritma yang tepat untuk menunggu order hingga Bar selanjutnya, Pak Ary? Selama ini jika menggunakan logika:

int Last_Bar = 0;

if (Last_Bar == Bars)

{

return(0);
Last_Bar = Bars;

}

maka cara tersebut menghasilkan sebuah konsekuensi.. dan yang saya pusingkan adalah penempatan algoritma tersebut. Konsekuensinya adalah jika saya tempatkan diawal program sebelum open order, maka akan ada keterlambatan saat seharusnya sudah open (karena harus menunggu bar selanjutnya).

Sementara jika saya letakkan setelah algoritma order close, tidak ada pengaruh apapun. Tentunya saya berharap code diatas tersebut salah besar. Yang saya butuhkan hanyalah menunggu satu atau beberapa bar sebelum akhirnya muncul order baru kembali untuk menghindari repainting indicator.

Mohon bantuannya, Pak Ary. Terima kasih untuk perhatiannya.

Regards,
Aras

Mau ralat istilah Sloping yang saya gunakan sebelumnya, ternyata tidak ada sangkut pautnya dengan Repainting sebab Sloping berarti kemiringan. Mungkin istilah yang tepat lainnya untuk indikator yang repainting adalah Teeter.. istilah yang saya buat sendiri untuk menggambarkan indikator berupa garis yang berubah-ubah naik turun pada running or current candlestick seperti jungkat-jungkit.

Demikian, harap maklum. Trims..



Pak Aras,

Perlu diketahui bahwa saya bukanlah programmer professional dikarenakan sama sekali tidak memiliki latar belakang pendidikan formal sebagai programmer. Saya hanyalah belajar otodidak MQL language dari internet dan sama halnya dengan Pak Aras, saya pun masih seringkali pusing sendiri dengan kode-kode MQL :) Mohon maaf apabila saya tidak begitu ahli dalam pemprograman.

Oleh karenanya blog ini hanyalah membahas perihal trading dan bukan pemprograman. Disamping dikarenakan keterbatasan saya yang bukan ahli pemprograman, juga menurut pemahaman saya, sangat lebih penting melakukan trading dengan baik daripada memprogram.

Melakukan trading dengan baik adalah solusi dari semua permasalahan. Kalau dapat melakukan trading dengan baik dan tidak memiliki kemampuan memprogram, maka trading dapat dilakukan secara manual. Akan tetapi apabila memiliki kemampuan untuk memprogram, maka robot atau EA yang baik dapat dibuat kemudian berdasarkan strategi trading tersebut.

Bayangkan apabila melakukan yang sebaliknya, mampu memprogram dengan baik tetapi tidak dapat melakukan trading dengan baik. Tentunya sesempurna apapun robot yang dibuat, tetap saja hasilnya akan tidak baik karena jantung utama robot tersebut adalah strategi trading yang baik.

Akan tetapi, saya akan berusaha menjawab pertanyaan diatas. Untuk menentukan bar atau candlestick yang baru terbentuk dapat digunakan fungsi berikut:

bool NewBar()
{
static datetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
}
else
{
return(false);
}
}

Agar order hanya dieksekusi pada bar atau candlestick yang terbentuk selanjutnya maka fungsi pengecekan yang tertulis diatas dipanggil terlebih dahulu dari dalam badan program, seperti contoh di bawah ini:

int start()
{
.......
if (NewBar() == true)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
}
.......
}

Dengan cara demikian maka order hanya dieksekusi apabila telah terbentuk bar atau candlestick baru.

Pemprograman pada dasarnya hanyalah sekedar logika dan sangat subyektif karena tergantung pada logic masing-masing.

Silahkan mengikuti cara diatas atau dapat juga Pak Aras mengubahnya dan kemudian mengembangkan cara sendiri yang lebih baik. Prinsip dasar pemprograman adalah gunakan cara apa saja sesuai selera dan logic masing-masing asalkan tujuan akhir dapat tercapai. Akan tetapi usahakan memprogram seefisien mungkin agar robot tidak memerlukan memory besar sehingga eksekusi order transaksi dapat terjadi dengan cepat.

Mohon maaf apabila untuk selanjutnya saya tidak lagi menanggapi pertanyaan perihal pemprograman.

Mohon maklum dikarenakan saya bukanlah programmer professional, sehingga daripada nantinya salah dalam menjawab tentunya akan jauh lebih baik bila bertanya ke forum-forum programmer MQL yang banyak bertebaran di internet dimana pada forum tersebut sangat banyak programmer yang jauh lebih ahli dibanding saya.

Tidak ada komentar:

Poskan Komentar