extern double TP = 100.0; extern double SL = 0.0; extern bool AutoLot = TRUE; extern double OneLotMoney = 20000.0; extern double Lots = 1.0; extern double SecureProfit = 5.0; extern int StopADJ = 35; extern int Magic = 777777; extern int MaxSpread = 5; extern int MaxCount = 1; extern bool TimeFilter = FALSE; extern int StartTime = 13; extern int EndTime = 2; extern bool Digit6 = FALSE; extern bool SecondPosition = TRUE; int gi_156 = 0; int gi_160 = 0; bool gi_164 = FALSE; int gi_unused_168 = 14; int gi_unused_172 = 0; int g_count_176 = 0; int gi_180 = 1; double g_ima_184; double g_ima_192; double g_ima_200; double g_ima_208; double g_ima_216; double g_ima_224; double g_ima_232; double g_ima_240; double gd_248; double gd_264; double gd_unused_272; int g_bars_280 = 0; string gs_284 = ""; extern bool Trade = FALSE; int init() { return (0); } int deinit() { return (0); } int start() { if (AccountName() != "Futoshi Takekiyo" && AccountName() != "Takekiyo Futoshi" && AccountName() != "Takekiyo Futoshi (3)") { Comment("Invalid NAME"); return (0); } if (WindowExpertName() != "EAKSP01003") { Comment("Invalid EA"); return (0); } if (!TimeFilter) Trade = TRUE; if (TimeFilter && TimeHour(TimeCurrent()) == StartTime) Trade = TRUE; if (TimeFilter && TimeHour(TimeCurrent()) == EndTime && OpenOrders(Magic) == 0) Trade = FALSE; if (TimeFilter && TimeHour(TimeCurrent()) == EndTime && OpenOrders(Magic) != 0) gi_164 = TRUE; if (!Trade) { Comment("Not Trade Time"); return (0); } if (Digit6) gi_180 = 10; else gi_180 = 1; if (SL > 0.0) SecondPosition = FALSE; int li_0 = MarketInfo(Symbol(), MODE_SPREAD) / gi_180; if (li_0 > MaxSpread && OpenOrders(Magic) == 0) { Comment("SPREAD is too wide!"); return (0); } if (AutoLot) Lots = lotSizeCalc(OneLotMoney); double l_tickvalue_4 = MarketInfo(Symbol(), MODE_TICKVALUE); gd_264 = l_tickvalue_4 * SecureProfit * gi_180 * Lots; gi_156 = 0; g_ima_216 = iMA(NULL, 0, 21, 0, MODE_EMA, PRICE_CLOSE, 1); g_ima_224 = iMA(NULL, 0, 21, 0, MODE_EMA, PRICE_CLOSE, 0); g_ima_232 = iMA(NULL, 0, 21, 0, MODE_EMA, PRICE_HIGH, 1); g_ima_240 = iMA(NULL, 0, 21, 0, MODE_EMA, PRICE_LOW, 0); g_ima_184 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_HIGH, 1); g_ima_192 = iMA(NULL, 0, 50, 0, MODE_EMA, PRICE_LOW, 1); g_ima_200 = iMA(NULL, 0, 100, 0, MODE_EMA, PRICE_HIGH, 1); g_ima_208 = iMA(NULL, 0, 100, 0, MODE_EMA, PRICE_LOW, 1); if (g_ima_192 > g_ima_200 && g_ima_240 >= g_ima_184 + 5 * gi_180 * Point && g_ima_192 >= g_ima_200 + 5 * gi_180 * Point) { gi_156 = 1; gs_284 = "Ready to BUY"; Comment(gs_284 + "\n" + "Lot : " + Lots + "\n" + "Spread : " + li_0 + "\n" + "PipValue : " + l_tickvalue_4); } if (g_ima_208 > g_ima_184 && g_ima_232 <= g_ima_192 - 5 * gi_180 * Point && g_ima_184 <= g_ima_208 - 5 * gi_180 * Point) { gi_156 = 2; gs_284 = "Ready to SELL"; Comment(gs_284 + "\n" + "Lot : " + Lots + "\n" + "Spread : " + li_0 + "\n" + "PipValue : " + l_tickvalue_4); } if (gi_156 == 0) { g_count_176 = 0; gs_284 = "Not Ready"; Comment(gs_284 + "\n" + "Lot : " + Lots + "\n" + "Spread : " + li_0 + "\n" + "PipValue : " + l_tickvalue_4); } if (gi_156 == 1 && iLow(NULL, 0, 1) > g_ima_184 && Bid <= g_ima_184 + 1 * gi_180 * Point && OpenOrders(Magic) == 0 && g_bars_280 != Bars && g_ima_216 > g_ima_208 + 25 * gi_180 * Point && MaxCount > g_count_176) { if (SL == 0.0) gd_248 = g_ima_208 - StopADJ * gi_180 * Point; else gd_248 = Ask - SL * gi_180 * Point; BuyOrder(gd_248, TP * gi_180, Lots, Magic); gi_160 = 1; g_bars_280 = Bars; gd_unused_272 = g_ima_216; g_count_176++; } if (gi_156 == 2 && iHigh(NULL, 0, 1) < g_ima_192 && Bid >= g_ima_192 - 1 * gi_180 * Point && OpenOrders(Magic) == 0 && g_bars_280 != Bars && g_ima_200 > g_ima_216 + 25 * gi_180 * Point && MaxCount > g_count_176) { if (SL == 0.0) gd_248 = g_ima_200 + StopADJ * gi_180 * Point; else gd_248 = Bid + SL * gi_180 * Point; SellOrder(gd_248, TP * gi_180, Lots, Magic); gi_160 = 2; g_bars_280 = Bars; gd_unused_272 = g_ima_216; g_count_176++; } if (OpenOrders(Magic) > 0 && OrderPlus(Magic) >= gd_264) { while (OpenOrders(Magic) > 0) { CloseAll(Magic); if (gi_164) { Trade = FALSE; gi_164 = FALSE; } } } if (OpenOrders(Magic) == 1 && SecondPosition) { if (gi_160 == 1 && Bid <= g_ima_208 + 10 * gi_180 * Point) BuyOrder(gd_248, TP * gi_180, Lots, Magic); if (gi_160 == 2 && Bid >= g_ima_200 - 10 * gi_180 * Point) SellOrder(gd_248, TP * gi_180, Lots, Magic); } if (OpenOrders(Magic) == 0) { gi_160 = 0; if (gi_164) { Trade = FALSE; gi_164 = FALSE; } } return (0); } void BuyOrder(double a_price_0, double a_pips_8, double a_lots_16, int a_magic_24) { for (int l_ticket_28 = FALSE; !l_ticket_28; l_ticket_28 = OrderSend(Symbol(), OP_BUY, a_lots_16, Ask, 3, a_price_0, Ask + a_pips_8 * Point, "EAKSP01 BUY", a_magic_24, 0, Blue)) { } } void SellOrder(double a_price_0, double a_pips_8, double a_lots_16, int a_magic_24) { for (int l_ticket_28 = FALSE; !l_ticket_28; l_ticket_28 = OrderSend(Symbol(), OP_SELL, a_lots_16, Bid, 3, a_price_0, Bid - a_pips_8 * Point, "EAKSP01 SELL", a_magic_24, 0, Red)) { } } void CloseAll(int a_magic_0) { int l_ord_close_4; for (int l_pos_8 = OrdersTotal() - 1; l_pos_8 >= 0; l_pos_8--) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == a_magic_0) { if (OrderType() == OP_BUY) l_ord_close_4 = OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue); if (OrderType() == OP_SELL) l_ord_close_4 = OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red); } } } double OrderPlus(int a_magic_0) { double ld_ret_4 = 0; for (int l_pos_12 = OrdersTotal() - 1; l_pos_12 >= 0; l_pos_12--) { OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == a_magic_0) ld_ret_4 += OrderProfit(); } return (ld_ret_4); } int OpenOrders(int a_magic_0) { int l_count_4 = 0; for (int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) { OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == a_magic_0) l_count_4++; } return (l_count_4); } double lotSizeCalc(double ad_0) { double ld_ret_8 = 0; int li_16 = 0; double l_lotsize_20 = MarketInfo(Symbol(), MODE_LOTSIZE); double l_maxlot_28 = MarketInfo(Symbol(), MODE_MAXLOT); double l_minlot_36 = MarketInfo(Symbol(), MODE_MINLOT); double l_free_magrin_44 = AccountFreeMargin(); double ld_52 = ad_0; string ls_60 = AccountCurrency(); if (ls_60 == "JPY") ld_52 = 100.0 * ad_0; if (l_minlot_36 >= 1.0) li_16 = 0; else { if (l_minlot_36 >= 0.1) li_16 = 1; else if (l_minlot_36 >= 0.01) li_16 = 2; } ld_ret_8 = NormalizeDouble(l_free_magrin_44 / ld_52, li_16); if (ld_ret_8 < l_minlot_36) ld_ret_8 = l_minlot_36; if (ld_ret_8 > l_maxlot_28) ld_ret_8 = l_maxlot_28; return (ld_ret_8); }