#property copyright "Seichi Oda" #property link "http://dreamgatefx.com/top/" #include extern int MagicNumber = 20091030; extern double Lots = 0.1; extern double Leverage = 0.0; extern int SlipPage = 5; extern int StopLoss = 110; extern int TakeProfit = 10; int gi_unused_108 = 10; int gi_unused_112 = 40; int gi_unused_116 = 12; int gi_unused_120 = 26; int gi_unused_124 = 9; int g_period_128 = 7; int gi_132 = 2; int gi_136 = 11; int gi_140 = 13; int gi_144 = 13; int gi_148 = 11; int gi_152 = 23; int gi_156 = 2; int gi_160 = 4; extern bool SoundFlag = FALSE; extern bool MailFlag = FALSE; double g_minlot_172; double g_maxlot_180; double g_lotsize_188; double g_leverage_196; int init() { HideTestIndicators(TRUE); g_minlot_172 = MarketInfo(Symbol(), MODE_MINLOT); g_maxlot_180 = MarketInfo(Symbol(), MODE_MAXLOT); g_lotsize_188 = MarketInfo(Symbol(), MODE_LOTSIZE); g_leverage_196 = AccountLeverage(); return (0); } int start() { int l_cmd_20; double l_price_24; int l_slippage_32; double l_price_36; double l_price_44; string l_comment_52; color l_color_60; string ls_64; string ls_72; int li_80; int l_ticket_0 = 0; int li_4 = 0; int li_unused_8 = 0; int l_ticket_12 = 0; int l_error_16 = 0; if (TimeHour(TimeCurrent()) == gi_152 && TimeMinute(TimeCurrent()) == 0) li_80 = 0; if (SettingCheck() == 0) return (0); for (int l_pos_84 = 0; l_pos_84 < OrdersTotal(); l_pos_84++) { if (OrderSelect(l_pos_84, SELECT_BY_POS, MODE_TRADES) == TRUE) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) if (OrderType() == OP_BUY || OrderType() == OP_SELL) l_ticket_0 = OrderTicket(); } } if (l_ticket_0 != 0) { OrderSelect(l_ticket_0, SELECT_BY_TICKET); li_4 = OrderCheck(); if (OrderType() == OP_BUY && li_4 == -1 || li_4 == -2) { if (SoundFlag == TRUE) PlaySound("alert.wav"); if (li_4 == -1) Print("買い決済"); if (li_4 == -1) li_80 = -1; else if (li_4 == -2) Print("買い決済"); RefreshRates(); OrderClose(l_ticket_0, OrderLots(), NormalizeDouble(Bid, Digits), SlipPage, Green); Sleep(3000); l_ticket_0 = 0; l_error_16 = GetLastError(); if (l_error_16 > 0/* NO_ERROR */) { ToError(l_error_16); return (0); } ls_64 = "【DGFX】買い決済メール"; ls_72 = NormalizeDouble(Bid, Digits) + "で買い決済"; if (MailFlag == TRUE) SendMail(ls_64, ls_72); } else { if (OrderType() == OP_SELL && li_4 == 1 || li_4 == 2) { if (SoundFlag == TRUE) PlaySound("alert.wav"); if (li_4 == 1) Print("売り決済"); if (li_4 == 1) li_80 = 1; else if (li_4 == 2) Print("売り決済"); RefreshRates(); OrderClose(l_ticket_0, OrderLots(), NormalizeDouble(Ask, Digits), SlipPage, Green); Sleep(3000); l_ticket_0 = 0; l_error_16 = GetLastError(); if (l_error_16 > 0/* NO_ERROR */) { ToError(l_error_16); return (0); } ls_64 = "【DGFX】売り決済メール"; ls_72 = NormalizeDouble(Ask, Digits) + "で売り決済"; if (MailFlag == TRUE) SendMail(ls_64, ls_72); } } if (DayOfWeek() == 5 && Hour() >= 22 && l_ticket_0 != 0) { if (OrderType() == OP_BUY) { if (SoundFlag == TRUE) PlaySound("alert.wav"); Print("時間切れ買い決済"); RefreshRates(); OrderClose(l_ticket_0, OrderLots(), NormalizeDouble(Bid, Digits), SlipPage, Green); Sleep(3000); l_ticket_0 = 0; l_error_16 = GetLastError(); if (l_error_16 > 0/* NO_ERROR */) { ToError(l_error_16); return (0); } ls_64 = "【DGFX】時間切れ買い決済メール"; ls_72 = NormalizeDouble(Bid, Digits) + "で時間切れ買い決済"; if (MailFlag == TRUE) SendMail(ls_64, ls_72); } else { if (OrderType() == OP_SELL) { if (SoundFlag == TRUE) PlaySound("alert.wav"); Print("時間切れ売り決済"); RefreshRates(); OrderClose(l_ticket_0, OrderLots(), NormalizeDouble(Ask, Digits), SlipPage, Green); Sleep(3000); l_ticket_0 = 0; l_error_16 = GetLastError(); if (l_error_16 > 0/* NO_ERROR */) { ToError(l_error_16); return (0); } ls_64 = "【DGFX】時間切れ売り決済メール"; ls_72 = NormalizeDouble(Ask, Digits) + "で時間切れ売り決済"; if (MailFlag == TRUE) SendMail(ls_64, ls_72); } } } } if (l_ticket_0 == 0 && li_80 == 0) { li_4 = OrderCheck(); if (li_4 == 1) { Print("新規買い"); RefreshRates(); l_cmd_20 = 0; l_price_24 = NormalizeDouble(Ask, Digits); l_slippage_32 = SlipPage; if (StopLoss > 0) l_price_36 = NormalizeDouble(Ask - StopLoss * Point, Digits); else l_price_36 = 0; if (TakeProfit > 0) l_price_44 = NormalizeDouble(Ask + TakeProfit * Point, Digits); else l_price_44 = 0; l_comment_52 = "BUY"; l_color_60 = Blue; ls_64 = "【DGFX】新規買いメール"; ls_72 = NormalizeDouble(Ask, Digits) + "で新規買い"; } else { if (li_4 == -1) { Print("新規売り"); RefreshRates(); l_cmd_20 = 1; l_price_24 = NormalizeDouble(Bid, Digits); l_slippage_32 = SlipPage; if (StopLoss > 0) l_price_36 = NormalizeDouble(Bid + StopLoss * Point, Digits); else l_price_36 = 0; if (TakeProfit > 0) l_price_44 = NormalizeDouble(Bid - TakeProfit * Point, Digits); else l_price_44 = 0; l_comment_52 = "SELL"; l_color_60 = Red; ls_64 = "【DGFX】新規売りメール"; ls_72 = NormalizeDouble(Bid, Digits) + "で新規売り"; } } if (li_4 == 1 || li_4 == -1) { if (SoundFlag == TRUE) PlaySound("alert.wav"); l_ticket_12 = OrderSend(Symbol(), l_cmd_20, Lots(), l_price_24, l_slippage_32, l_price_36, l_price_44, l_comment_52, MagicNumber, 0, l_color_60); Sleep(3000); l_error_16 = GetLastError(); if (l_error_16 > 0/* NO_ERROR */) { ToError(l_error_16); return (0); } if (MailFlag == TRUE) SendMail(ls_64, ls_72); } } return (0); } int OrderCheck() { int li_0 = MA3Check(); int li_4 = MACDCheck(); int li_8 = BandsCheck(); int li_12 = BandsCheck2(); if (DayOfWeek() == 5 && Hour() >= 23) return (0); if (li_0 + li_4 + li_8 == 1) return (1); if (li_0 + li_4 + li_8 == -1) return (-1); if (li_0 + li_4 + li_12 == 1) return (2); if (li_0 + li_4 + li_12 == -1) return (-2); return (0); } double Lots() { double ld_ret_0 = 0.0; double ld_unused_8 = 0.0; double ld_unused_16 = 0.0; if (Leverage > 0.0) ld_ret_0 = NormalizeDouble(AccountFreeMargin() * Leverage / g_lotsize_188, 2); else ld_ret_0 = NormalizeDouble(Lots, 2); if (ld_ret_0 < g_minlot_172) ld_ret_0 = g_minlot_172; if (ld_ret_0 > g_maxlot_180) ld_ret_0 = g_maxlot_180; return (ld_ret_0); } int MACDCheck() { return (0); } int MA3Check() { return (0); } int BandsCheck() { double l_ibands_0 = iBands(NULL, PERIOD_M15, g_period_128, gi_132, 0, PRICE_CLOSE, MODE_LOWER, 1); double l_ibands_8 = iBands(NULL, PERIOD_M15, g_period_128, gi_132, 0, PRICE_CLOSE, MODE_UPPER, 1); if (TimeHour(TimeCurrent()) >= gi_152 || TimeHour(TimeCurrent()) <= gi_156 && Bid < l_ibands_0 && l_ibands_8 - l_ibands_0 >= gi_136 * Point) return (1); if (TimeHour(TimeCurrent()) >= gi_152 || TimeHour(TimeCurrent()) <= gi_156 && Bid > l_ibands_8 && l_ibands_8 - l_ibands_0 >= gi_140 * Point) return (-1); return (0); } int BandsCheck2() { double l_ibands_0 = iBands(NULL, PERIOD_M15, g_period_128, gi_132, 0, PRICE_CLOSE, MODE_LOWER, 1); double l_ibands_8 = iBands(NULL, PERIOD_M15, g_period_128, gi_132, 0, PRICE_CLOSE, MODE_UPPER, 1); if (TimeHour(TimeCurrent()) == gi_160 && Bid > l_ibands_8 && l_ibands_8 - l_ibands_0 >= gi_144 * Point) return (1); if (TimeHour(TimeCurrent()) == gi_160 && Bid < l_ibands_0 && l_ibands_8 - l_ibands_0 >= gi_148 * Point) return (-1); return (0); } void ToError(int ai_0) { Alert("エラーが発生しました。詳細はExpetsを参照下さい"); Print("error(", ai_0, "): ", ErrorDescription(ai_0)); Comment("error(", ai_0, "): ", ErrorDescription(ai_0)); } int SettingCheck() { if (IsTradeAllowed() == FALSE) { MessageBox("トレードを許可して下さい"); return (0); } if (AccountCompany() != "FXDirectDealer") { MessageBox("FXブローカーはFXDDのみです"); Print("FXブローカーはFXDDのみです"); return (0); } if (Bars <= 100) { MessageBox("チャートの表\示数が少ないです"); Print("チャートの表\示数が少ないです"); return (0); } if (AccountBalance() == 0.0) { MessageBox("口座の残高がありません"); Print("口座の残高がありません"); return (0); } if (Leverage > g_leverage_196) { MessageBox("レバレッジは", g_leverage_196, "倍以下にして下さい"); Print("レバレッジは", g_leverage_196, "倍以下にして下さい"); return (0); } return (1); } int deinit() { return (0); }