#property copyright "googolyenfx" #property link "http://googolyenfx.blog18.fc2.com/" string gs_user__76 = "User "; string gs_84 = "ADQ System "; extern string UserName = "User "; extern string Email = "ADQ System "; extern string com1 = "--- VQ ---"; extern int VQ.Length = 4; extern int VQ.Method = 3; extern int VQ.Smoothing = 7; extern int VQ.Filter = 6; extern bool VQ.Steady = FALSE; extern bool VQ.Crash = FALSE; extern string com2 = "--- ADX ---"; extern int ADX.Period = 14; extern string com3 = "--- Degree Threshold ---"; extern int VQ.DTPoint = 10; extern double ADX.DT = 1.0; extern string com4 = "--- Money Management ---"; extern int TrailingStopPoint = 150; extern int StopPoint = 150; extern bool IsSteadyProfitStop = FALSE; extern int ProfitPoint = 75; extern bool IsMoment = TRUE; extern string com5 = "--- Money Management ---"; extern double Lots = 0.1; extern bool MoneyManagement = FALSE; extern double MaximumRisk = 0.02; extern double DecreaseFactor = 3.0; extern int Slippage = 0; extern bool KeepUp = FALSE; int gi_244 = 0; int g_magic_248; bool gi_252 = FALSE; bool IsForcedClose() { return (FALSE); } int GetSignal(int ai_0) { double ld_20; double ld_28; double l_iadx_36; double l_iadx_44; double l_iadx_4 = iADX(Symbol(), Period(), ADX.Period, PRICE_CLOSE, MODE_MAIN, ai_0); double l_iadx_12 = iADX(Symbol(), Period(), ADX.Period, PRICE_CLOSE, MODE_MAIN, ai_0 + 1); if (ADX.DT <= l_iadx_4 - l_iadx_12) { ld_20 = GetVQ(0, ai_0); ld_28 = GetVQ(0, ai_0 + 1); if (VQ.DTPoint * Point <= MathAbs(ld_20 - ld_28)) { l_iadx_36 = iADX(Symbol(), Period(), ADX.Period, PRICE_CLOSE, MODE_PLUSDI, ai_0); l_iadx_44 = iADX(Symbol(), Period(), ADX.Period, PRICE_CLOSE, MODE_MINUSDI, ai_0); if (ld_28 < ld_20 && l_iadx_44 < l_iadx_36) return (0); if (ld_20 < ld_28 && l_iadx_36 < l_iadx_44) return (1); } } return (-10); } double GetVQ(int ai_0, int ai_4) { return (iCustom(Symbol(), Period(), "VQ", VQ.Crash, 0, VQ.Length, VQ.Method, VQ.Smoothing, VQ.Filter, 1, VQ.Steady, 1, 0, 0, 0, 65280, 255, 200, ai_0, ai_4)); } int init() { if (isEnableUser()) gi_252 = TRUE; else { Comment("アカウントが無効です.(ADQOrder_ver2)"); return (0); } g_magic_248 = GetUniqueMagic(710); return (0); } int deinit() { if (gi_252 != TRUE) Comment(""); return (0); } int start() { bool li_0; double ld_12; double ld_20; if (iTime(Symbol(), Period(), 0) < D'01.09.2006 04:30' || gi_252 != TRUE) return (0); if (IsNewCandle()) { } if (IsForcedClose()) OrdsClose(g_magic_248); int li_4 = -10; bool li_8 = TRUE; if (CntOrd(g_magic_248) == 0) { if (IsMoment) li_0 = FALSE; else { li_0 = TRUE; li_8 = FALSE; } li_4 = GetSignal(li_0); if (li_4 == 0 && IsNewCandle() || li_8) { if (IsSteadyProfitStop) { ld_12 = Ask + ProfitPoint * Point; ld_20 = Ask - StopPoint * Point; } else { ld_12 = 0; ld_20 = Ask - StopPoint * Point; } OrdSend(Symbol(), 0, _LotsOptimized(), Ask, 0, ld_20, ld_12, "BUY", g_magic_248, 0, Blue); } if (li_4 == 1 && IsNewCandle() || li_8) { if (IsSteadyProfitStop) { ld_12 = Bid - ProfitPoint * Point; ld_20 = Bid + StopPoint * Point; } else { ld_12 = 0; ld_20 = Bid + StopPoint * Point; } OrdSend(Symbol(), 1, _LotsOptimized(), Bid, 0, ld_20, ld_12, "SELL", g_magic_248, 0, Red); } } if (CntOrd(g_magic_248) != 0 && !IsSteadyProfitStop) TrailingStop(g_magic_248, TrailingStopPoint, KeepUp); gi_244 = Time[0]; return (0); } bool IsNewCandle(int ai_0 = 0) { if (Time[ai_0] != gi_244) return (TRUE); return (FALSE); } double _LotsOptimized() { double l_lots_0 = Lots; int l_hist_total_8 = OrdersHistoryTotal(); int l_count_12 = 0; if (DecreaseFactor > 0.0 && MoneyManagement) { l_lots_0 = NormalizeDouble(ConvertUSDFreeMargin() * MaximumRisk / 1000.0, GetMinLotDigits()); for (int l_pos_16 = l_hist_total_8 - 1; l_pos_16 >= 0; l_pos_16--) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_HISTORY) == FALSE) { Print("Error in history!"); break; } if (OrderSymbol() != Symbol() || OrderType() > OP_SELL || OrderMagicNumber() != g_magic_248) continue; if (OrderProfit() > 0.0) break; if (OrderProfit() < 0.0) l_count_12++; } if (l_count_12 > 1) l_lots_0 = NormalizeDouble(l_lots_0 - l_lots_0 * l_count_12 / DecreaseFactor, GetMinLotDigits()); } l_lots_0 = MathMax(l_lots_0, MarketInfo(Symbol(), MODE_MINLOT)); l_lots_0 = MathMin(l_lots_0, MarketInfo(Symbol(), MODE_MAXLOT)); return (l_lots_0); } double ConvertUSDFreeMargin() { int li_32; string l_symbol_60; double l_free_magrin_76; string ls_0 = ""; string ls_8 = ""; string ls_16 = Symbol(); int l_str_len_24 = StringLen(ls_16); if (l_str_len_24 != 6) { for (int li_28 = 0; li_28 < l_str_len_24; li_28++) { li_32 = StringGetChar(ls_16, li_28); if (li_32 >= 'A' && li_32 <= 'Z') break; ls_0 = StringSubstr(ls_16, 0, li_28 + 1); } for (li_28 = l_str_len_24 - 1; li_28 >= 0; li_28--) { li_32 = StringGetChar(ls_16, li_28); if (li_32 >= 'A' && li_32 <= 'Z') break; ls_8 = StringSubstr(ls_16, li_28, l_str_len_24 - li_28); } } double l_free_magrin_36 = AccountFreeMargin(); string ls_44 = AccountCurrency(); string ls_52 = "USD"; double ld_68 = 1.0; string ls_84 = StringSubstr(ls_16, StringLen(ls_0), 3); if (ls_44 == ls_52) l_free_magrin_76 = l_free_magrin_36; else { l_symbol_60 = ls_0 + ls_52 + ls_44 + ls_8; ld_68 = iClose(l_symbol_60, 0, 0); if (ld_68 <= 0.0) { l_symbol_60 = ls_0 + ls_44 + ls_52 + ls_8; ld_68 = iClose(l_symbol_60, 0, 0); if (ld_68 <= 0.0) { l_symbol_60 = ls_84 + ls_44; ld_68 = iClose(l_symbol_60, 0, 0); } else ld_68 = 1 / ld_68; } if (ld_68 != 0.0) l_free_magrin_76 = NormalizeDouble(l_free_magrin_36 / ld_68, 4); else l_free_magrin_76 = 0.0; } return (l_free_magrin_76); } int GetMinLotDigits() { string l_dbl2str_0 = DoubleToStr(MarketInfo(Symbol(), MODE_MINLOT), 8); int li_8 = StringFind(l_dbl2str_0, "."); if (li_8 == -1) return (-1); int li_12 = StringLen(l_dbl2str_0) - li_8; int li_16 = li_8; for (int l_count_20 = 0; li_16 < li_12; l_count_20++) { if (StringGetChar(l_dbl2str_0, li_16) == '1') break; li_16++; } return (l_count_20); } int _write(string as_unused_0) { return (0); } int Write(string as_0) { _write(as_0); return (0); } int CntOrd(int a_magic_0, int a_cmd_4 = -1) { int l_count_8 = 0; for (int l_pos_12 = 0; l_pos_12 < OrdersTotal(); l_pos_12++) { if (!(OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES))) break; if (OrderSymbol() == Symbol() && OrderMagicNumber() == a_magic_0) if (OrderType() == a_cmd_4 || a_cmd_4 == -1) l_count_8++; } return (l_count_8); } int OrdSend(string a_symbol_0, int ai_8, double a_lots_12, double ad_unused_20, int a_slippage_28, double ad_32, double ad_40, string a_comment_48 = "", int a_magic_56 = 0, int a_datetime_60 = 0, color a_color_64 = -1) { int l_ticket_68; int l_ticket_72; int li_unused_76 = MarketInfo(a_symbol_0, MODE_STOPLEVEL); int l_count_80 = 0; double ld_unused_84 = 0; switch (ai_8) { case 0: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_80 < 5) { RefreshRates(); l_ticket_68 = OrderSend(a_symbol_0, OP_BUY, a_lots_12, Ask, a_slippage_28, NormalizeDouble(ad_32, Digits), NormalizeDouble(ad_40, Digits), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 <= 0) { Write("Error Occured : " + DoubleToStr(GetLastError(), 0)); Write(Symbol() + " Buy @ " + Ask + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_80++; } else { l_count_80 = 5; Write("Order opened : " + Symbol() + " Buy @ " + Ask + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000); } } l_ticket_72 = l_ticket_68; break; case 1: if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_80 < 5) { RefreshRates(); l_ticket_68 = OrderSend(a_symbol_0, OP_SELL, a_lots_12, Bid, a_slippage_28, NormalizeDouble(ad_32, Digits), NormalizeDouble(ad_40, Digits), a_comment_48, a_magic_56, a_datetime_60, a_color_64); if (l_ticket_68 <= 0) { Write("Error Occured : " + DoubleToStr(GetLastError(), 0)); Write(Symbol() + " Sell @ " + Bid + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); l_count_80++; } else { l_count_80 = 5; Write("Order opened : " + Symbol() + " Sell @ " + Bid + " SL @ " + ad_32 + " TP @" + ad_40 + " ticket =" + l_ticket_68); } Sleep(1000); } } l_ticket_72 = l_ticket_68; break; default: Write("No valid type of order found"); l_ticket_72 = -1; } return (l_ticket_72); } int OrdClose(int a_ticket_0, double a_lots_4, double ad_12, int a_slippage_20, color a_color_24 = -1) { int l_ord_close_28; int l_count_36 = 0; double ld_unused_40 = 0; if (!IsTradeContextBusy() && IsTradeAllowed()) { while (l_count_36 < 5) { RefreshRates(); l_ord_close_28 = OrderClose(a_ticket_0, a_lots_4, NormalizeDouble(ad_12, Digits), a_slippage_20, a_color_24); if (l_ord_close_28 == 0) { Write("Error Occured : " + DoubleToStr(GetLastError(), 0)); Write(Symbol() + " Close @ " + ad_12 + " ticket =" + a_ticket_0); l_count_36++; } else { l_count_36 = 5; Write("Order closed : " + Symbol() + " Close @ " + ad_12 + " ticket =" + a_ticket_0); } Sleep(1000); } } int l_ord_close_32 = l_ord_close_28; return (l_ord_close_32); } void OrdsClose(int a_magic_0) { for (int l_pos_4 = 0; l_pos_4 < OrdersTotal(); l_pos_4++) { if (OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES) == FALSE) break; if (OrderMagicNumber() != a_magic_0 || OrderSymbol() != Symbol()) continue; if (OrderType() == OP_BUY) OrdClose(OrderTicket(), OrderLots(), Bid, 0, Fuchsia); else if (OrderType() == OP_SELL) OrdClose(OrderTicket(), OrderLots(), Ask, 0, Fuchsia); } } int OrdModify(int a_ticket_0, double ad_4, double ad_12, double ad_20, int a_datetime_28, color a_color_32 = -1) { int li_52; double ld_unused_36 = 0; bool l_bool_44 = FALSE; if (!IsTradeContextBusy() && IsTradeAllowed()) { while (li_52 < 5) { RefreshRates(); l_bool_44 = OrderModify(a_ticket_0, NormalizeDouble(ad_4, Digits), NormalizeDouble(ad_12, Digits), NormalizeDouble(ad_20, Digits), a_datetime_28, a_color_32); if (l_bool_44 == FALSE) { Write("Error Occured : " + DoubleToStr(GetLastError(), 0)); Write(Symbol() + " Modify @ " + ad_4 + " SL @ " + ad_12 + " TP @" + ad_20 + " ticket =" + a_ticket_0); li_52++; } else { li_52 = 5; Write("Order modified : " + Symbol() + " Modify @ " + ad_4 + " SL @ " + ad_12 + " TP @" + ad_20 + " ticket =" + a_ticket_0); } Sleep(1000); } } int l_bool_48 = l_bool_44; return (l_bool_48); } void TrailingStop(int a_magic_0, int ai_4, bool ai_8 = FALSE) { bool li_12; for (int l_pos_16 = 0; l_pos_16 < OrdersTotal(); l_pos_16++) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == a_magic_0) { if (ai_8 == TRUE) li_12 = TRUE; else { if (OrderType() == OP_SELL) li_12 = OrderOpenPrice() - Ask > ai_4 * Point; else if (OrderType() == OP_BUY) li_12 = Bid - OrderOpenPrice() > ai_4 * Point; } if (OrderType() == OP_SELL && li_12 && OrderStopLoss() > Ask + ai_4 * Point || OrderStopLoss() == 0.0) OrdModify(OrderTicket(), OrderOpenPrice(), Ask + ai_4 * Point, 0, 0, Blue); if (OrderType() == OP_BUY && li_12 && OrderStopLoss() < Bid - ai_4 * Point) OrdModify(OrderTicket(), OrderOpenPrice(), Bid - ai_4 * Point, 0, 0, Blue); } } } } int GetUniqueMagic(int ai_0, string as_4 = "", int a_timeframe_12 = 0, int ai_16 = 9) { string l_str_concat_20 = ""; if (as_4 == "") as_4 = Symbol(); if (a_timeframe_12 == 0) a_timeframe_12 = Period(); int li_28 = 0; int l_str_len_32 = StringLen(as_4); for (int li_36 = 0; li_36 < l_str_len_32; li_36++) li_28 += StringGetChar(as_4, li_36); int li_unused_40 = 0; switch (a_timeframe_12) { case PERIOD_M1: li_unused_40 = 1; break; case PERIOD_M5: li_unused_40 = 2; break; case PERIOD_M15: li_unused_40 = 3; break; case PERIOD_M30: li_unused_40 = 4; break; case PERIOD_H1: li_unused_40 = 5; break; case PERIOD_H4: li_unused_40 = 6; break; case PERIOD_D1: li_unused_40 = 7; break; case PERIOD_W1: li_unused_40 = 8; break; case PERIOD_MN1: li_unused_40 = 9; break; default: li_unused_40 = 0; } l_str_concat_20 = StringConcatenate(DoubleToStr(ai_0, 0), DoubleToStr(li_28, 0), DoubleToStr(a_timeframe_12, 0)); if (ai_16 < StringLen(l_str_concat_20)) l_str_concat_20 = StringSubstr(l_str_concat_20, StringLen(l_str_concat_20) - ai_16, ai_16); return (StrToInteger(l_str_concat_20)); } bool isEnableUser() { if (gs_user__76 == UserName && gs_84 == Email) return (TRUE); return (FALSE); }