#property copyright "Copyright 2009, 凄楽FX" #property link "" extern string PASS = ""; int g_magic_84 = 400002; extern int Slippage = 3; extern double Lots = 0.1; int gi_100 = 27; int gi_104 = 10; int gi_108 = 1; int gi_112 = 3; int gi_116 = 54; int gi_120 = 150; int gi_unused_124 = 0; int gi_128 = 1; int gi_132 = 0; int gi_136 = 0; int gi_140 = 0; int gi_144 = 1; int g_period_148 = 6; int g_period_152 = 22; int g_period_156 = 15; int g_period_160 = 19; int gi_164 = 70; int gi_168 = 22; bool gi_unused_172 = FALSE; extern bool EmailON = TRUE; extern bool InfomationON = TRUE; double g_price_184 = 0.0; double gd_192 = 0.0; double gd_200 = 0.0; int g_ticket_208 = 0; int gi_212 = 50; void ClosePositions() { bool l_ord_close_0 = FALSE; bool l_ord_close_4 = FALSE; double ld_8 = 0; for (int l_pos_16 = 0; l_pos_16 < OrdersTotal(); l_pos_16++) { if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES) == FALSE) break; if (OrderMagicNumber() != g_magic_84 || OrderSymbol() != Symbol()) continue; if (OrderType() == OP_BUY) { while (!l_ord_close_0) { l_ord_close_0 = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, White); ld_8 = Bid - OrderOpenPrice(); if (Point == 0.01) ld_8 = 100.0 * ld_8; if (Point == 0.001) ld_8 = 1000.0 * ld_8; if (Point == 0.0001) ld_8 = 10000.0 * ld_8; if (Point == 0.00001) ld_8 = 100000.0 * ld_8; Sleep(10000); } g_ticket_208 = 0; g_price_184 = 0; gi_212 = 50; if (EmailON) { SendMail("凄楽FX 決済のお知らせ", "買いポジションの決済をしました。\n" + "決済日時:" + TimeToStr(TimeLocal()) + "\n獲得pips数:" + DoubleToStr(ld_8, 0) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\n決済値:" + DoubleToStr(Bid, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); } } if (OrderType() == OP_SELL) { while (!l_ord_close_4) { l_ord_close_4 = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red); ld_8 = OrderOpenPrice() - Ask; if (Point == 0.01) ld_8 = 100.0 * ld_8; if (Point == 0.001) ld_8 = 1000.0 * ld_8; if (Point == 0.0001) ld_8 = 10000.0 * ld_8; if (Point == 0.00001) ld_8 = 100000.0 * ld_8; Sleep(10000); } g_ticket_208 = 0; g_price_184 = 0; gi_212 = 50; if (EmailON) { SendMail("凄楽FX 決済のお知らせ", "売りポジションの決済をしました。\n" + "決済日時:" + TimeToStr(TimeLocal()) + "\n獲得pips数:" + DoubleToStr(ld_8, 0) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\n決済値:" + DoubleToStr(Ask, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); } } } } int start() { double ld_40; int l_count_0 = 0; int l_count_4 = 0; int li_8 = 1; double l_ord_open_price_12 = 0; double l_price_20 = 0; string ls_28 = "jcuxy342cx"; if (ls_28 != PASS) { Comment("パスワードが違います!"); return (0); } Comment(""); if (Digits == 3) li_8 = 10; if (Digits == 5) li_8 = 10; for (int l_pos_36 = 0; l_pos_36 < OrdersTotal(); l_pos_36++) { if (OrderSelect(l_pos_36, SELECT_BY_POS, MODE_TRADES) == FALSE) break; if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_84) { if (OrderStopLoss() && g_ticket_208 == 0 && g_price_184 == 0.0) g_ticket_208 = OrderTicket(); l_ord_open_price_12 = OrderOpenPrice(); if (OrderType() == OP_BUY) { l_count_0++; if (OrderStopLoss() == 0.0) { l_price_20 = OrderOpenPrice() - Point * (gi_120 * li_8); OrderModify(OrderTicket(), OrderOpenPrice(), l_price_20, 0, 0, Yellow); } if (gi_116 > 0) { if (OrderStopLoss() == 0.0 && Bid > OrderOpenPrice() + Point * (gi_116 * li_8)) { l_price_20 = OrderOpenPrice() + Point * (3 * li_8); OrderModify(OrderTicket(), OrderOpenPrice(), l_price_20, 0, 0, Yellow); if (EmailON) { SendMail("凄楽FX トレール注文のお知らせ", "買いポジションのストップロス値を変更しました。\n" + "変更日時:" + TimeToStr(TimeLocal()) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\nストップロス値:" + DoubleToStr(l_price_20, 4) + "\n現在値:" + DoubleToStr(Bid, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); } g_ticket_208 = OrderTicket(); g_price_184 = Bid; } if (Bid > OrderOpenPrice() + Point * (35 * li_8) && Bid - iBands(NULL, 0, 20, 2, 0, PRICE_LOW, MODE_UPPER, 0) > Point * (30 * li_8)) { l_price_20 = Bid - Point * (30 * li_8); if (l_price_20 > OrderStopLoss()) { OrderModify(OrderTicket(), OrderOpenPrice(), l_price_20, 0, 0, Yellow); if (EmailON && g_price_184 + Point * (10 * li_8) < Bid) { SendMail("凄楽FX トレール注文のお知らせ", "買いポジションのストップロス値を変更しました。\n" + "変更日時:" + TimeToStr(TimeLocal()) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\nストップロス値:" + DoubleToStr(l_price_20, 4) + "\n現在値:" + DoubleToStr(Bid, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); g_price_184 = Bid; } g_ticket_208 = OrderTicket(); } } if (Bid > OrderOpenPrice() && Bid - Point * (gi_116 * li_8) > OrderOpenPrice()) { l_price_20 = Bid - Point * (gi_116 * li_8); if (l_price_20 > OrderStopLoss()) { OrderModify(OrderTicket(), OrderOpenPrice(), l_price_20, 0, 0, Yellow); if (EmailON && g_price_184 + Point * (10 * li_8) < Bid) { SendMail("凄楽FX トレール注文のお知らせ", "買いポジションのストップロス値を変更しました。\n" + "変更日時:" + TimeToStr(TimeLocal()) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\nストップロス値:" + DoubleToStr(l_price_20, 4) + "\n現在値:" + DoubleToStr(Bid, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); g_price_184 = Bid; } g_ticket_208 = OrderTicket(); } } } } if (OrderType() == OP_SELL) { l_count_4++; if (OrderStopLoss() == 0.0) { l_price_20 = OrderOpenPrice() + Point * (gi_120 * li_8); OrderModify(OrderTicket(), OrderOpenPrice(), l_price_20, 0, 0, Yellow); } if (gi_116 > 0) { if (Ask < OrderOpenPrice() - Point * (35 * li_8) && iBands(NULL, 0, 20, 2, 0, PRICE_LOW, MODE_LOWER, 0) - Ask > Point * (30 * li_8)) { l_price_20 = Ask + Point * (30 * li_8); if (l_price_20 < OrderStopLoss()) { OrderModify(OrderTicket(), OrderOpenPrice(), l_price_20, 0, 0, Yellow); if (EmailON && g_price_184 - Point * (10 * li_8) > Ask) { SendMail("凄楽FX トレール注文のお知らせ", "売りポジションのストップロス値を変更しました。\n" + "変更日時:" + TimeToStr(TimeLocal()) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\nストップロス値:" + DoubleToStr(l_price_20, 4) + "\n現在値:" + DoubleToStr(Ask, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); g_price_184 = Ask; } g_ticket_208 = OrderTicket(); } } if (Ask < OrderOpenPrice() && Ask + Point * (gi_116 * li_8) < OrderOpenPrice()) { l_price_20 = Ask + Point * (gi_116 * li_8); if (l_price_20 < OrderStopLoss()) { OrderModify(OrderTicket(), OrderOpenPrice(), l_price_20, 0, 0, Yellow); if (EmailON && g_price_184 - 10.0 * Point > Ask) { SendMail("凄楽FX トレール注文のお知らせ", "売りポジションのストップロス値を変更しました。\n" + "変更日時:" + TimeToStr(TimeLocal()) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\nストップロス値:" + DoubleToStr(l_price_20, 4) + "\n現在値:" + DoubleToStr(Ask, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); g_price_184 = Ask; } g_ticket_208 = OrderTicket(); } } } } } } if (OrderSelect(g_ticket_208, SELECT_BY_TICKET, MODE_HISTORY) == TRUE && g_ticket_208 > 0) { ld_40 = 0; if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_84 && OrderClosePrice() == OrderStopLoss()) { if (OrderType() == OP_BUY) { g_ticket_208 = 0; g_price_184 = 0; gi_212 = 50; ld_40 = Bid - OrderOpenPrice(); if (Point == 0.01) ld_40 = 100.0 * ld_40; if (Point == 0.001) ld_40 = 1000.0 * ld_40; if (Point == 0.0001) ld_40 = 10000.0 * ld_40; if (Point == 0.00001) ld_40 = 100000.0 * ld_40; if (EmailON) { SendMail("凄楽FX ストップロス決済のお知らせ", "買いポジションがストップロス決済されました。\n" + "決済日時:" + TimeToStr(TimeLocal()) + "\n獲得pips数:" + DoubleToStr(ld_40, 0) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\n決済値:" + DoubleToStr(Ask, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); } } if (OrderType() == OP_SELL) { g_ticket_208 = 0; g_price_184 = 0; gi_212 = 50; ld_40 = OrderOpenPrice() - Ask; if (Point == 0.01) ld_40 = 100.0 * ld_40; if (Point == 0.001) ld_40 = 1000.0 * ld_40; if (Point == 0.0001) ld_40 = 10000.0 * ld_40; if (Point == 0.00001) ld_40 = 100000.0 * ld_40; if (EmailON) { SendMail("凄楽FX ストップロス決済のお知らせ", "売りポジションがストップロス決済されました。\n" + "決済日時:" + TimeToStr(TimeLocal()) + "\n獲得pips数:" + DoubleToStr(ld_40, 0) + "\nエントリー値:" + DoubleToStr(OrderOpenPrice(), 4) + "\n決済値:" + DoubleToStr(Ask, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0)); } } } } double ld_48 = Close[iHighest(NULL, 0, MODE_CLOSE, gi_104, 2)]; double ld_56 = Close[iLowest(NULL, 0, MODE_CLOSE, gi_104, 2)]; double ld_64 = Close[iHighest(NULL, 0, MODE_CLOSE, gi_100, 2)]; double ld_72 = Close[iLowest(NULL, 0, MODE_CLOSE, gi_100, 2)]; double l_imacd_80 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0); double l_imacd_88 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0); double l_imacd_96 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1); double l_imacd_104 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1); double l_imacd_112 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2); double l_imacd_120 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 2); double l_ima_128 = iMA(NULL, 0, 14, 0, MODE_LWMA, PRICE_CLOSE, 0); double l_ima_136 = iMA(NULL, 0, 14, 0, MODE_LWMA, PRICE_CLOSE, 1); double l_ima_144 = iMA(NULL, 0, 14, 0, MODE_LWMA, PRICE_CLOSE, 2); double l_ima_152 = iMA(NULL, PERIOD_H4, g_period_148, 0, MODE_LWMA, PRICE_CLOSE, 1); double l_ima_160 = iMA(NULL, PERIOD_H4, g_period_152, 0, MODE_LWMA, PRICE_CLOSE, 1); double l_ima_168 = iMA(NULL, PERIOD_H4, g_period_156, 0, MODE_LWMA, PRICE_CLOSE, 1); double l_ibands_176 = iBands(NULL, 0, 20, 2, 0, PRICE_LOW, MODE_UPPER, 0); double l_ibands_184 = iBands(NULL, 0, 20, 2, 0, PRICE_LOW, MODE_LOWER, 0); string ls_192 = ""; string ls_200 = ""; string ls_unused_208 = ""; bool li_216 = FALSE; bool li_220 = FALSE; double ld_224 = 0; int l_ticket_232 = -1; if (l_count_0 > 0) { ld_224 = l_ord_open_price_12 - Bid; if (Digits == 2) ld_224 = 100.0 * ld_224; if (Digits == 3) ld_224 = 1000.0 * ld_224; if (Digits == 4) ld_224 = 10000.0 * ld_224; if (Digits == 5) ld_224 = 100000.0 * ld_224; ls_192 = "【現在の相場状況】\n"; if (l_imacd_80 < l_imacd_88 && l_imacd_96 < l_imacd_104 && l_imacd_112 < l_imacd_120) li_216 = TRUE; if (l_ima_128 < l_ima_136 && l_ima_136 < l_ima_144) li_220 = TRUE; ls_200 = "MACDは下落開始を示唆しているものの、移動平均線はいまだに上昇傾向を保っているため、反転上昇の可能\性があります。"; if (li_216 == TRUE && li_220 == FALSE) ls_200 = "MACDは下落を開始したものの、移動平均線はいまだに上昇傾向を保っています。\n当ロジックでは時間サイクル分析を加味した決済ポイントまで、このまま保有を継続いたします。"; if (li_216 == FALSE && li_220 == TRUE) ls_200 = "MACDは下落開始を示唆し、移動平均線は下落傾向を強めています。\n当ロジックでは時間サイクル分析を加味した決済ポイントまで、このまま保有を継続いたします。"; if (li_216 == TRUE && li_220 == TRUE) ls_200 = "MACD、移動平均線共に完全な下落を示しています。\nただ、当ロジックでは時間サイクル分析を加味した決済ポイントまで、このまま保有を継続いたします。"; if (ld_224 > gi_120 * li_8) ClosePositions(); if (EmailON && InfomationON && l_ord_open_price_12 - Point * gi_212 * li_8 > Bid) { SendMail("凄楽FX 保有ポジションの状況", "現在、保有中ポジションに" + DoubleToStr(ld_224, 0) + "pipsの含み損が発生しています。\n当ロジックでは、時間サイクル分析を加味した決済ポイントまでこのまま保有を継続いたしますが、以下の相場状況を参考にして、リスク回避の観点から、手動で損切り決済を行うことも可能\です。\n\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0) + "\n\n" + ls_192 + ls_200); gi_212 += 30; } } if (l_count_4 > 0) { ld_224 = Ask - l_ord_open_price_12; if (Digits == 2) ld_224 = 100.0 * ld_224; if (Digits == 3) ld_224 = 1000.0 * ld_224; if (Digits == 4) ld_224 = 10000.0 * ld_224; if (Digits == 5) ld_224 = 100000.0 * ld_224; ls_192 = "【現在の相場状況】\n"; if (l_imacd_80 > l_imacd_88 && l_imacd_96 > l_imacd_104 && l_imacd_112 > l_imacd_120) li_216 = TRUE; if (l_ima_128 > l_ima_136 && l_ima_136 > l_ima_144) li_220 = TRUE; ls_200 = "MACDは上昇開始を示唆しているものの、移動平均線はいまだに下落傾向を保っているため、反転下落の可能\性があります。"; if (li_216 == TRUE && li_220 == FALSE) ls_200 = "MACDは上昇を開始したものの、移動平均線はいまだに下落傾向を保っています。\n当ロジックでは時間サイクル分析を加味した決済ポイントまで、このまま保有を継続いたします。"; if (li_216 == FALSE && li_220 == TRUE) ls_200 = "MACDは上昇開始を示唆し、移動平均線は上昇傾向を強めています。\n当ロジックでは時間サイクル分析を加味した決済ポイントまで、このまま保有を継続いたします。"; if (li_216 == TRUE && li_220 == TRUE) ls_200 = "MACD、移動平均線共に完全な上昇を示しています。\nただ、当ロジックでは時間サイクル分析を加味した決済ポイントまで、このまま保有を継続いたします。"; if (ld_224 > gi_120 * li_8) ClosePositions(); if (EmailON && InfomationON && l_ord_open_price_12 + Point * gi_212 * li_8 < Ask) { SendMail("凄楽FX 保有ポジションの状況", "現在、保有中ポジションに" + DoubleToStr(ld_224, 0) + "pipsの含み損が発生しています。\n当ロジックでは、時間サイクル分析を加味した決済ポイントまでこのまま保有を継続いたしますが、以下の相場状況を参考にして、リスク回避の観点から、手動で損切り決済を行うことも可能\です。\n\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n残高:" + DoubleToStr(AccountBalance(), 0) + "\n\n" + ls_192 + ls_200); gi_212 += 30; } } int li_236 = 0; int li_240 = 0; if (Open[1] - Close[2] > Point * (30 * li_8) && gi_128 == 1) li_236 = 1; if (High[1] - Close[1] > Point * (25 * li_8) && gi_132 == 1) li_236 = 2; if (Close[1] - Open[1] > Point * (60 * li_8) && gi_136 == 1) li_236 = 3; if (Bid - l_ibands_176 > Point * (30 * li_8) && gi_140 == 1) li_236 = 4; if (Close[1] - l_ibands_176 > Point * (30 * li_8) && gi_144 == 1) li_236 = 4; if (Close[2] - Open[1] > Point * (30 * li_8) && gi_128 == 1) li_240 = 1; if (Close[1] - Low[1] > Point * (25 * li_8) && gi_132 == 1) li_240 = 2; if (Open[1] - Close[1] > Point * (60 * li_8) && gi_136 == 1) li_240 = 3; if (l_ibands_184 - Ask > Point * (30 * li_8) && gi_140 == 1) li_236 = 4; if (l_ibands_184 - Close[1] > Point * (30 * li_8) && gi_144 == 1) li_236 = 4; if (l_count_0 < 1 && l_count_4 < 1 && l_ima_168 < Close[1] && l_ima_168 < Open[1] && l_ima_152 > l_ima_160 && Close[2] <= ld_48 && Close[1] > ld_48 && iRSI(NULL, 0, g_period_160, PRICE_CLOSE, 0) < gi_164 && Close[1] + Point * (gi_108 * li_8) < Ask && gd_192 != Open[0]) { ClosePositions(); if (gd_200 != Open[0] && li_236 > 0) { gd_200 = Open[0]; if (EmailON && InfomationON) { SendMail("凄楽FX 買いポジション回避のお知らせ", "本来であれば、ここで買いポジションを保有するのですが、直近の値動きを見ると価格が一旦下落する可能\性が高いです。\n当ロジックでは一旦ポジション保有を回避し、様子を見て次の売買チャンスを伺います。\n日時:" + TimeToStr(TimeLocal()) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period()); } } if (li_236 == 0) { l_ticket_232 = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", g_magic_84, 0, Blue); if (l_ticket_232 > 0) { gd_192 = Open[0]; if (EmailON) { SendMail("凄楽FX 買いポジション約定のお知らせ", "買いポジションが約定しました。\n" + "約定日時:" + TimeToStr(TimeLocal()) + "\nエントリー値:" + DoubleToStr(Ask, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n余剰証拠金" + DoubleToStr(AccountFreeMargin(), 0) + "\n残高:" + DoubleToStr(AccountBalance(), 0)); } } return (0); } } if (l_count_0 < 1 && l_count_4 < 1 && l_ima_168 > Close[1] && l_ima_168 > Open[1] && l_ima_152 < l_ima_160 && Close[2] >= ld_56 && Close[1] < ld_56 && iRSI(NULL, 0, g_period_160, PRICE_CLOSE, 0) > gi_168 && Close[1] - Point * (gi_112 * li_8) > Bid && gd_192 != Open[0]) { ClosePositions(); if (gd_200 != Open[0] && li_240 > 0) { gd_200 = Open[0]; if (EmailON && InfomationON) { SendMail("凄楽FX 売りポジション回避のお知らせ", "本来であれば、ここで売りポジションを保有するのですが、直近の値動きを見ると価格が一旦上昇する可能\性が高いです。\n当ロジックでは一旦ポジション保有を回避し、様子を見て次の売買チャンスを伺います。\n日時:" + TimeToStr(TimeLocal()) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period()); } } if (li_240 == 0) { l_ticket_232 = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", g_magic_84, 0, Red); if (l_ticket_232 > 0) { gd_192 = Open[0]; if (EmailON) { SendMail("凄楽FX 売りポジション約定のお知らせ", "売りポジションが約定しました。\n" + "約定日時:" + TimeToStr(TimeLocal()) + "\nエントリー値:" + DoubleToStr(Bid, 4) + "\n通貨ペア:" + Symbol() + "\n時間足:" + Period() + "\n余剰証拠金" + DoubleToStr(AccountFreeMargin(), 0) + "\n残高:" + DoubleToStr(AccountBalance(), 0)); } } return (0); } } if (l_count_0 > 0 && Close[2] >= ld_72 && Close[1] < ld_72) { ClosePositions(); return (0); } if (l_count_4 > 0 && Close[2] <= ld_64 && Close[1] > ld_64) { ClosePositions(); return (0); } return (0); }