KASKUS Show https://s.kaskus.id/e3.1/images/layout/home-logo-n.png 51 244 https://www.kaskus.co.id/thread/000000000000000003311468/share-mau-buat-expert-advisor-atau-indicator-sendiri 05-02-2010 23:27 Halo para kaskuser, Mungkin ada yg pernah nyoba EA (expert advisor) / robot trading milik org lain dan merasa bisa disempurnakan. Atau punya gaya trading sendiri yg ingin diotomatisasi biar meniadakan faktor emosi atau tdk disiplin. Pernah berpikir utk buat EA / robot sendiri? Kalo di platform metatrader ada tombol yg akan menjalankan editor yg bisa meng-compile script yg kita buat jadi ex4 sehingga bisa dijalankan di broker manapun yg memakai platform metatrader. editor dari platform metatrader bernama metaeditor juga dilengkapi online help lengkap agar kita bisa membuat EA yg canggih. Secara berkala gw akan share tips & trick membuat EA, harapan gw agar para kaskuser bisa membuat EA sendiri jadi bebas menerapkan & menyempurnakan teknik trading, juga agar kita bisa belajar bareng2. Kalo ada yg mau nanya atau ikutan sharing, monggo gan tata604 memberi reputasi 2010-02-05T23:27:38+07:00Tampilkan isi Thread 24-03-2010 21:55 thanks gw rapihin sedikit codingnya, utk memperlancar pembuatan EA nggak ada salahnya kalo dibiasakan code-nya "diperindah" sedikit sehingga kita bisa men-track flow EA dgn sekilas pandang. if(OrdersTotal() == 0) { if(signal==1) { ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point,"buy",magic,0,Blue); if(ticket==-1) { Alert("OrderSend error #",GetLastError()); } [COLOR="Red"][B]signal = 0[/B][/COLOR] } } } jadi kl ada signal, selain op, EA mereset signal sehingga tidak op berulang2semoga membantu Kaskus Maniac Posts: 6,066 coba arahkan text cursor-nya ke tengah2 tulisan iStochastic atau iRSI terus tekan F1, voila.. online helpsemoga membantu
25-03-2010 09:47 nyimak dulu gan silahkan gan, ditunggu pertanyaannya 25-03-2010 22:13 Kaskus Addict Posts: 1,736 btw thread untuk buat custom indicator juga ok lho 26-03-2010 16:49 sebetulnya ada 2 yg nyendolin tp yg satunya anonim alias ngga ada namanya, bro or sis whoever you are, thx btw thread untuk buat custom indicator juga ok lho ok gan 01-04-2010 21:24 Pengganti OrderSend yg lebih sehat :)
Gw juga merasa kayak gitu, makanya gw buat fungsi pengganti OrderSend yg menurut gw lebih memudahkan (paling nggak buat gw ) utk membedakan dgn OrderSend bawaan metatrader, fungsi ini gw namakan SR.OrderSend, lengkapnya:int SR.OrderSend(string symbol, int type, double volume, double reqPrice, double stoploss, double takeprofit, string comment="", int magic=0, datetime expires=0, color arrow_color = CLR_NONE) fitur2nya:
misal ingin ambil pending buy di AUDUSD di harga 0.9250, SL=0.9200, TP=0.9300 sebesar 0.1 lot ticket = SR.OrderSend("AUDUSD", OR_TYPE_BUY, 0.1, 0.9250, 0.9200, 0.9250); misal ingin op sell running price di GBPJPY SL=50 pips, TP=75 pips sebesar 1 lot ticket = SR.OrderSend("GBPJPY", OR_TYPE_SELL, 1, -1, 50, 75); sebelum gw kasih codenya, disclaimer dulu ya semua code di bawah ini diberikan "as is", walau sudah di test & gw gunakan di hampir semua EA gw, tidak ada garansi bahwa code ini akan berfungsi di EA agan2 sekalian. gw tidak bertanggung jawab atas kerugian apapun yg terjadi akibat penggunaan code ini. USE IT AT YOUR OWN RISK. nah kl yg mau coba, tinggal copas code berikut, taruh di sebuah file (misal: sr.mqh), save di folder experts\includenanti kl mau digunakan dalam sebuah EA, pasang baris berikut di paling atas#include <sr.mqh> semoga membantu 05-04-2010 00:36 //+------------------------------------------------------------------+ //| Envelopes.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- indicator settings #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_color2 Red //---- indicator parameters extern int MA_Period=14; extern int MA_Shift=0; extern int MA_Method=0; extern int Applied_Price=0; extern double Deviation=0.1; //---- indicator buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; //---- int ExtCountedBars=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { int draw_begin; string short_name; //---- drawing settings SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexShift(0,MA_Shift); SetIndexShift(1,MA_Shift); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); if(MA_Period<2) MA_Period=14; draw_begin=MA_Period-1; //---- indicator short name IndicatorShortName("Env("+MA_Period+")"); SetIndexLabel(0,"Env("+MA_Period+")Upper"); SetIndexLabel(1,"Env("+MA_Period+")Lower"); SetIndexDrawBegin(0,draw_begin); SetIndexDrawBegin(1,draw_begin); //---- indicator buffers mapping SetIndexBuffer(0,ExtMapBuffer1); SetIndexBuffer(1,ExtMapBuffer2); if(Deviation<0.1) Deviation=0.1; if(Deviation>100.0) Deviation=100.0; //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit; if(Bars<=MA_Period) return(0); ExtCountedBars=IndicatorCounted(); //---- check for possible errors if (ExtCountedBars<0) return(-1); //---- last counted bar will be recounted if (ExtCountedBars>0) ExtCountedBars--; limit=Bars-ExtCountedBars; //---- EnvelopesM counted in the buffers for(int i=0; i<limit; i++) { ExtMapBuffer1[i] = (1+Deviation/100)*iMA(NULL,0,MA_Period,0,MA_Method,Applied_Price,i); ExtMapBuffer2[i] = (1-Deviation/100)*iMA(NULL,0,MA_Period,0,MA_Method,Applied_Price,i); } //---- done return(0); } //+------------------------------------------------------------------+ 05-04-2010 16:48 utk help tentang iEnvelopes coba lihat di bagian Trading Indicators utk help PlaySound ada di bagian Common functions File suara berformat WAV yg mau diputar, diletakkan di folder sounds dari instalasi metatrader. semoga membantu 07-04-2010 17:44 MarketInfo(Symbol(), MODE_SPREAD)contoh pemakaian, misal ingin OP buy 0.1 lot dgn target profit 50 pips + spread:int targetProfit = 50 + MarketInfo(Symbol(), MODE_SPREAD); SR.OrderSend(Symbol(), OR_TYPE_BUY, 0.1, -1, 30, targetProfit); semoga membantu 07-04-2010 22:07
12-04-2010 13:28 Kaskus Addict Posts: 2,031 Makasih Suhu... 15-04-2010 22:59
waduh blm pernah pake zigzag bro entar gw coba2 dulu ya 15-04-2010 23:00 EA melakukan action berdasarkan EquityMakasih Suhu... kalo versi gw sih gini ya cocok ngga? #include <stderror.mqh> extern double EquityTreshUpper = 15000; extern double EquityTreshLower = 5000; void init() {} bool runEA = True; void start() { if (runEA) { // * * * * * * * * * * * * * * // main loop EA masuk di sini // * * * * * * * * * * * * * * // terakhir cek kondisi keuangan if (([B][COLOR="Blue"]AccountEquity()[/COLOR][/B] <= EquityTreshLower) || ([B][COLOR="Blue"]AccountEquity()[/COLOR][/B] >= EquityTreshUpper)) { closeAllOrder(); runEA = False; } } } void closeAllOrder() { for(int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY) { while (true) { bool done = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), 5); if (done) { break; } if (GetLastError() == ERR_INVALID_TICKET) { break; } RefreshRates(); // requote } } else if (OrderType() == OP_SELL) { while (true) { done = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), 5); if (done) { break; } if (GetLastError() == ERR_INVALID_TICKET) { break; } RefreshRates(); // requote } } else // pending order { OrderDelete(OrderTicket()); } } } void deinit() {} //+------------------------------------------------------------------+ semoga membantu 16-04-2010 08:55 :maho :maho :maho 23-04-2010 12:26 Aktivis Kaskus Posts: 688 Soalnya gw bukan programmer... mungkin ada syntax yang gw nggak tau, yang seharusnya bisa digunakan untuk mengatasi masalah ini..... izin memantau gan... Aktivis Kaskus Posts: 499 26-04-2010 13:21 Jadi sebelum dia mencapai 10000,... tetap dianggap 5000 ... jadi open lotnya berdasarkan balance 5000... Coba bantu ya gan pake MathFloor bisa: double lots = MathFloor(AccountBalance()/5000)*0.1; gw ngetesnya kaya gini double lots1 = MathFloor(9999/5000)*0.1; // hasil 0.1 double lots2 = MathFloor(10000/5000)*0.1; // hasil 0.2 double lots3 = MathFloor(14999/5000)*0.1; // hasil 0.2 double lots4 = MathFloor(15000/5000)*0.1; // hasil 0.3 Comment("9999=",lots1," 10000=",lots2," 14999=",lots3," 15000=",lots4); MathFloor itu ngambil nilai integer / pembulatan ke bawah.helpnya ada di bagian Math & Trig semoga membantu 26-04-2010 15:42 Kaskus Addict Posts: 2,031 #include <stderror.mqh> extern double EquityTreshUpper = 15000; extern double EquityTreshLower = 5000; void init() {} bool runEA = True; void start() { if (runEA) { // * * * * * * * * * * * * * * // main loop EA masuk di sini // * * * * * * * * * * * * * * // terakhir cek kondisi keuangan if (([B][COLOR="Blue"]AccountEquity()[/COLOR][/B] <= EquityTreshLower) || ([B][COLOR="Blue"]AccountEquity()[/COLOR][/B] >= EquityTreshUpper)) { closeAllOrder(); runEA = False; } } } void closeAllOrder() { for(int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY) { while (true) { bool done = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), 5); if (done) { break; } if (GetLastError() == ERR_INVALID_TICKET) { break; } RefreshRates(); // requote } } else if (OrderType() == OP_SELL) { while (true) { done = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), 5); if (done) { break; } if (GetLastError() == ERR_INVALID_TICKET) { break; } RefreshRates(); // requote } } else // pending order { OrderDelete(OrderTicket()); } } } void deinit() {} //+------------------------------------------------------------------+ semoga membantu bingung mau ditaroh di mana gan... ntar ane PM aja ya EA abal2 ane... ntar ente modifin, gimana? 26-04-2010 16:59 Aktivis Kaskus Posts: 688 pake MathFloor bisa: double lots = MathFloor(AccountBalance()/5000)*0.1; gw ngetesnya kaya gini double lots1 = MathFloor(9999/5000)*0.1; // hasil 0.1 double lots2 = MathFloor(10000/5000)*0.1; // hasil 0.2 double lots3 = MathFloor(14999/5000)*0.1; // hasil 0.2 double lots4 = MathFloor(15000/5000)*0.1; // hasil 0.3 Comment("9999=",lots1," 10000=",lots2," 14999=",lots3," 15000=",lots4); MathFloor itu ngambil nilai integer / pembulatan ke bawah.helpnya ada di bagian Math & Trig semoga membantu Wah... makasih banget gan....... Pelajarannya belom selesai di trid ini kan? O ya... kalo bisa pelajarannya agak lebih detil dengan contoh-contohnya gan.... Soalnya banyak non programmer kayak gw ini yang kepingin banget tau lebih banyak tentang MQL... dan daya tangkapnya gak sehebat para programmer....gw do'a'in sukses forexnya buat orang seperti agan yang suka berbagi ilmu........ |