#property copyright "Copyright © 2009, Bandi" #property link "Bandi Expert Advisor" extern string Robot = "SAR MARTINGALE Expert Advisor"; extern int MaxTrade = 10; extern bool Money_Management = FALSE; extern int Risiko = 1; extern double Lot = 0.1; extern double TakeProfit = 5.0; extern int TargetProfit = 500; extern int PIPS = 5; extern double Scaller = 1.0; extern int StopLoss = 500; extern bool CloseAll = FALSE; extern int slippage = 1; int gi_140; int gi_144; int g_magic_148 = 1325476; int g_magic_152 = 6754321; extern string SAR = "Konfigurasi Setting SAR"; extern double SAR_Step = 0.5; extern double Sar_Max = 0.2; extern int Sar_TimeFrame = 5; extern int Sar_Shift = 0; extern string TimeFilter = "Konfigurasi waktu EA Kerja"; extern int StartHour = 0; extern int EndHour = 24; bool gi_204 = TRUE; bool gi_208 = TRUE; int g_count_212; int g_count_216; int gi_220 = 0; int gi_224 = 0; int gi_unused_228 = 0; int gi_unused_232 = 0; int g_pos_236; int gi_240; double g_ord_open_price_244 = 0.0; double g_ord_open_price_252 = 0.0; double gd_260 = 0.0; double g_lots_268 = 0.0; double gd_276 = 0.0; double g_lots_284 = 0.0; double gd_292; double gd_300; int init() { return (0); } int deinit() { return (0); } int start() { if (g_count_212 < 1 && g_count_216 < 1) gd_292 = AccountEquity(); getOpenOrders(); gi_140 = MaxTrade; gi_144 = MaxTrade; if (TakeProfit < 10.0) gi_240 = 10; else gi_240 = TakeProfit; double l_free_magrin_8 = AccountFreeMargin(); double ld_0 = NormalizeDouble(l_free_magrin_8 * Risiko / 100000.0, 1); if (Money_Management) gd_300 = ld_0; else gd_300 = Lot; double ld_16 = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), 2); double ld_24 = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), 2); double ld_32 = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSIZE), 0); double l_tickvalue_40 = MarketInfo(Symbol(), MODE_TICKVALUE); gd_260 = gd_300; if (gd_260 < ld_16) gd_260 = ld_16; if (gd_260 > ld_24) gd_260 = ld_24; gd_276 = gd_300; if (gd_276 < ld_16) gd_276 = ld_16; if (gd_276 > ld_24) gd_276 = ld_24; g_count_212 = 0; for (g_pos_236 = 0; g_pos_236 < OrdersTotal(); g_pos_236++) { OrderSelect(g_pos_236, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_148) g_count_212++; } g_count_216 = 0; for (g_pos_236 = 0; g_pos_236 < OrdersTotal(); g_pos_236++) { OrderSelect(g_pos_236, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_152) g_count_216++; } if (gi_220 > g_count_212) g_ord_open_price_244 = 0; gi_220 = g_count_212; if (gi_224 > g_count_216) g_ord_open_price_252 = 0; gi_224 = g_count_216; if (g_count_212 >= gi_140) gi_204 = FALSE; else gi_204 = TRUE; if (g_count_216 >= gi_144) gi_208 = FALSE; else gi_208 = TRUE; if (g_ord_open_price_244 == 0.0) { for (g_pos_236 = 0; g_pos_236 < OrdersTotal(); g_pos_236++) { OrderSelect(g_pos_236, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_148) g_ord_open_price_244 = OrderOpenPrice(); } } if (g_ord_open_price_252 == 0.0) { for (g_pos_236 = 0; g_pos_236 < OrdersTotal(); g_pos_236++) { OrderSelect(g_pos_236, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_152) g_ord_open_price_252 = OrderOpenPrice(); } } if (SARbuy() && gi_204 && kadaluarsa() && TimeFilter() && CloseAll == FALSE && StopTargetProfit()) { if (g_count_212 < 1) { g_ord_open_price_244 = 0; g_lots_268 = gd_260; OrderSend(Symbol(), OP_BUY, g_lots_268, Ask, slippage, Ask - StopLoss * Point, Ask + gi_240 * Point, "", g_magic_148, 0, Blue); return (0); } } if (SARSell() && gi_208 && kadaluarsa() && TimeFilter() && CloseAll == FALSE && StopTargetProfit()) { if (g_count_216 < 1) { g_ord_open_price_252 = 0; g_lots_284 = gd_276; OrderSend(Symbol(), OP_SELL, g_lots_284, Bid, slippage, Bid + StopLoss * Point, Bid - gi_240 * Point, "", g_magic_152, 0, Red); return (0); } } if (gi_204 && kadaluarsa() && TimeFilter() && CloseAll == FALSE && StopTargetProfit()) { if (g_ord_open_price_244 - Ask >= PIPS * Point && g_count_212 > 0) { g_ord_open_price_244 = 0; g_lots_268 = gd_260; for (g_pos_236 = 1; g_pos_236 <= g_count_212; g_pos_236++) g_lots_268 = NormalizeDouble(g_lots_268 * Scaller, 2); OrderSend(Symbol(), OP_BUY, g_lots_268, Ask, slippage, Ask - StopLoss * Point, Ask + gi_240 * Point, "", g_magic_148, 0, Blue); return (0); } } if (gi_208 && kadaluarsa() && TimeFilter() && CloseAll == FALSE && StopTargetProfit()) { if (Bid - g_ord_open_price_252 >= PIPS * Point && g_count_216 > 0) { g_ord_open_price_252 = 0; g_lots_284 = gd_276; for (g_pos_236 = 1; g_pos_236 <= g_count_216; g_pos_236++) g_lots_284 = NormalizeDouble(g_lots_284 * Scaller, 2); OrderSend(Symbol(), OP_SELL, g_lots_284, Bid, slippage, Bid + StopLoss * Point, Bid - gi_240 * Point, "", g_magic_152, 0, Red); return (0); } } return (0); } int SARbuy() { if (iSAR(NULL, Sar_TimeFrame, SAR_Step, Sar_Max, Sar_Shift) < Open[Sar_Shift]) return (1); return (0); } int SARSell() { if (iSAR(NULL, Sar_TimeFrame, SAR_Step, Sar_Max, Sar_Shift) > Open[Sar_Shift]) return (1); return (0); } int kadaluarsa() { datetime lt_0 = D'25.06.2009 04:30'; if (TimeCurrent() > lt_0) return (0); return (1); } int TimeFilter() { if (Hour() >= StartHour && Hour() < EndHour) return (1); return (0); } double getPipValue(double ad_0, int ai_8) { double ld_ret_12; RefreshRates(); if (ai_8 == 1) ld_ret_12 = NormalizeDouble(ad_0, Digits) - NormalizeDouble(Ask, Digits); else ld_ret_12 = NormalizeDouble(Bid, Digits) - NormalizeDouble(ad_0, Digits); ld_ret_12 /= Point; return (ld_ret_12); } void getOpenOrders() { double ld_8; int l_ord_total_0 = OrdersTotal(); for (int l_pos_4 = 0; l_pos_4 < l_ord_total_0; l_pos_4++) { OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY || OrderType() == OP_SELL && OrderSymbol() == Symbol()) { ld_8 = getPipValue(OrderOpenPrice(), OrderType()); killTrade(OrderTicket()); if (TakeProfit > 0.0) takeProfit(ld_8, OrderTicket()); } } } void takeProfit(int ai_0, int a_ticket_4) { if (OrderSelect(a_ticket_4, SELECT_BY_TICKET) == TRUE) { if (ai_0 >= TakeProfit) { if (OrderType() == OP_SELL) { OrderClose(a_ticket_4, OrderLots(), Ask, slippage, Red); return; } OrderClose(a_ticket_4, OrderLots(), Bid, slippage, Blue); } } } void killTrade(int a_ticket_0) { if (OrderSelect(a_ticket_0, SELECT_BY_TICKET) == TRUE) { if (!StopTargetProfit() || CloseAll == TRUE) { if (OrderType() == OP_SELL) { OrderClose(a_ticket_0, OrderLots(), Ask, slippage, Red); return; } OrderClose(a_ticket_0, OrderLots(), Bid, slippage, Blue); } } } int StopTargetProfit() { if (AccountEquity() - gd_292 > TargetProfit) { Print("Target Profit Sudah tercapai, Close Semua Order!"); return (0); } return (1); }