//+------------------------------------------------------------------+ //| TEST.mq4 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property strict // 列挙型宣言 enum ENUM_ONOFF{ off = 0, //OFF on = 1 //ON }; enum ENUM_PERIOD{ Period_M1 = 1, //1分足 Period_M5 = 5, //5分足 Period_M15 = 15, //15分足 Period_M30 = 30, //30分足 Period_H1 = 60, //1時間足 Period_H4 = 240, //4時間足 Period_D1 = 1440, //日足 Period_W1 = 10080, //週足 Period_MN1 = 43200, //月足 }; input int Slippage = 3; //Slippage_Point input int MaxSpreadPips = 5; //Spread_Pips double xspread; input int MagicNumber = 12345; input double Lots = 0.1; input int TakeProfit_pips = 350; input int StopLoss_pips = 150; input int Rikaku_pips = 300; input int Songiri_pips = 150; extern ENUM_PERIOD EA_PERIOD = Period_M30; //トレイリングストップのパラメータ input int TrailingStopStartPips = 20; input int TrailingStopPips = 160; //指値切り下げのパラメータ input int ReLimitActionPips = 1000; input int ReLimitPips = 1000; int xBars=0, xxBars=0; //最大ポジション数を、下記で入力指定して下さい。 int maxposition = 1; //ローソク足始値のみに稼働させる場合は、trueにして下さい。 bool CandleStartStarting = true; //エントリールールの各変数を下記に貼りつけます。 input double Open_Kairi_percent = 0.1; // ローソク足の大きさパーセント //エントリーフィルターの各変数を下記に貼りつけます。 input int F_BB_Period_L = 20; // ボリンジャーバンドの計算期間 input double F_BB_Hensa_L = 2.0; // ボリンジャーバンドの偏差 input int F_BB_Period_S = 28; // ボリンジャーバンドの計算期間 input double F_BB_Hensa_S = 2.2; // ボリンジャーバンドの偏差 input ENUM_PERIOD F_PERIOD = Period_H1; input int F_MA_period_L = 275; // 移動平均線の計算期間 input int F_MA_period_S = 300; // 移動平均線の計算期間 //決済ルールの各変数を下記に貼りつけます。 input int K_BB_Period_L = 26; // ボリンジャーバンドの計算期間 input double K_BB_Hensa_L = 2.2; // ボリンジャーバンドの偏差 input int K_BB_Period_S = 40; // ボリンジャーバンドの計算期間 input double K_BB_Hensa_S = 1.5; // ボリンジャーバンドの偏差 input int K_BB_Period_2_L = 14; // ボリンジャーバンドの計算期間 input double K_BB_Hensa_2_L = 3; // ボリンジャーバンドの偏差 input int K_BB_Period_2_S = 21; // ボリンジャーバンドの計算期間 input double K_BB_Hensa_2_S = 4.4; // ボリンジャーバンドの偏差 input int CCI_period_L = 6; // CCIの計算期間 input int CCI_Line_L = 160; // エントリーの基準となるライン input int CCI_period_S = 21; // CCIの計算期間 input int CCI_Line_S = 175; // エントリーの基準となるライン input int MA_Cross_period1_L = 40; // 短期移動平均線 input int MA_Cross_period2_L = 130; // 長期移動平均線 input int MA_Cross_period1_S = 35; // 短期移動平均線 input int MA_Cross_period2_S = 80; // 長期移動平均線 input ENUM_PERIOD K_PERIOD = Period_M15; input double K_Open_Kairi_percent = 0.45; // ローソク足の大きさパーセント //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { int i; int ticket; int CountBuy = 0,CountSell = 0; double profit; bool res; double xpoint = Point; // 小数点以下の桁数に応じてPipsの値を調整する if (Digits() == 3 || Digits() == 5) { xpoint = xpoint * 10; } //ローソク足始値のみ稼働(選択式)の場合、ココカラ if(Bars != xBars || CandleStartStarting == false) { xBars = Bars; //-------- ポジションのクローズ -------- // 所有しているポジションをクローズする for(i=OrdersTotal()-1; i>=0; i--) { //オーダー選択(エラーを生じた場合、ループから抜け出す) if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false) { Print("OrderSelect returned the error of ", GetLastError() ); break; } //オーダー確認(通貨ペアが一致しない場合は、for文の先頭に戻る) if (OrderSymbol() != Symbol()) continue; //マジックナンバー確認(マジックナンバーが一致しない場合は、for文の先頭に戻る) if (OrderMagicNumber() != MagicNumber) continue; if (OrderType() == OP_BUY) { profit = Bid - OrderOpenPrice(); // 買いポジションだった場合の、含み損益を計算する // オーダーを成り行き決済する if (profit >= Rikaku_pips * xpoint || profit <= -Songiri_pips * xpoint || Exit2() == 2) { res = OrderClose(OrderTicket(), OrderLots(), Bid, NULL, Green); } } if (OrderType() == OP_SELL) { profit = OrderOpenPrice() - Ask; // 売りポジションだった場合の、含み損益を計算する // オーダーを成り行き決済する if (profit >= Rikaku_pips * xpoint || profit <= -Songiri_pips * xpoint || Exit1() == 1) { res = OrderClose(OrderTicket(), OrderLots(), Ask, NULL, Green); } } } //-------- ポジションのクローズ(ココマデ) -------- //-------- ポジションのトレーリング -------- // 所有しているポジションのSL, TPをトレールする for(i=OrdersTotal()-1; i>=0; i--) { //オーダー選択(エラーを生じた場合、ループから抜け出す) if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false) { Print("OrderSelect returned the error of ", GetLastError() ); break; } //オーダー確認(通貨ペアが一致しない場合は、for文の先頭に戻る) if (OrderSymbol() != Symbol()) continue; //マジックナンバー確認(マジックナンバーが一致しない場合は、for文の先頭に戻る) if (OrderMagicNumber() != MagicNumber) continue; if (OrderType() == OP_BUY) { profit = Bid - OrderOpenPrice(); // 買いポジションだった場合の、含み損益を計算する // TrailingStopを確認する if (profit >= TrailingStopStartPips * xpoint && OrderStopLoss() < NormalizeDouble(Bid - TrailingStopPips * xpoint, Digits())) { res = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStopPips * xpoint, Digits()), OrderTakeProfit(), 0, Green); } // 指値の置きなおしを確認する else if (Bid <= NormalizeDouble(OrderOpenPrice() - ReLimitActionPips * xpoint, Digits()) && OrderTakeProfit() != NormalizeDouble(OrderOpenPrice() + ReLimitPips * xpoint, Digits())) { res = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() + ReLimitPips * xpoint, 0, Green); } } if (OrderType() == OP_SELL) { profit = OrderOpenPrice() - Ask; // 売りポジションだった場合の、含み損益を計算する // TrailingStopを確認する if (profit >= TrailingStopStartPips * xpoint && OrderStopLoss() > NormalizeDouble(Ask + TrailingStopPips * xpoint, Digits())) { res = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStopPips * xpoint, Digits()), OrderTakeProfit(), 0, Green); } // 指値の置きなおしを確認する else if (Ask >= NormalizeDouble(OrderOpenPrice() + ReLimitActionPips * xpoint, Digits()) && OrderTakeProfit() != NormalizeDouble(OrderOpenPrice() - ReLimitPips * xpoint, Digits())) { res = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() - ReLimitPips * xpoint, 0, Green); } } } //-------- ポジションのトレーリング(ココマデ) -------- //-------- 新規ポジションのエントリー -------- // ポジションの数をカウントする for(i=OrdersTotal()-1; i>=0; i--) { //オーダー選択(エラーを生じた場合、ループから抜け出す) if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false) { Print("OrderSelect returned the error of ", GetLastError() ); break; } //オーダー確認(通貨ペアが一致しない場合は、for文の先頭に戻る) if (OrderSymbol() != Symbol()) continue; //マジックナンバー確認(マジックナンバーが一致しない場合は、for文の先頭に戻る) if (OrderMagicNumber() != MagicNumber) continue; if (OrderType() == OP_BUY) { CountBuy = CountBuy + 1; } if (OrderType() == OP_SELL) { CountSell = CountSell + 1; } } //スプレッド確認 xspread = (Ask - Bid) / xpoint; // エントリー条件を確認し、成立していればエントリーを行う if (Entry() == 1 && CountBuy < maxposition && xxBars != Bars && xspread <= MaxSpreadPips) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "G_LS_EURUSD", MagicNumber, 0, Blue); // エントリーに成功していれば、TP, SLをセットする if (ticket != -1) { // チケットを使ってオーダーを選択(エラーを生じた場合、何もしない) if( OrderSelect( ticket, SELECT_BY_TICKET ) == true ) { res = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - StopLoss_pips * xpoint, OrderOpenPrice() + TakeProfit_pips * xpoint, 0, MediumSeaGreen); } } xxBars = Bars; } else if (Entry() == 2 && CountSell < maxposition && xxBars != Bars && xspread <= MaxSpreadPips) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "G_LS_EURUSD", MagicNumber, 0, Red); // エントリーに成功していれば、TP, SLをセットする if (ticket != -1) { // チケットを使ってオーダーを選択(エラーを生じた場合、何もしない) if( OrderSelect( ticket, SELECT_BY_TICKET ) == true ) { res = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + StopLoss_pips * xpoint, OrderOpenPrice() - TakeProfit_pips * xpoint, 0, MediumSeaGreen); } } xxBars = Bars; } //-------- 新規ポジションのエントリー(ココマデ) -------- } // ローソク足始値のみ稼働(選択式)の範囲は、ココマデ //-------- ポジションのTP, SLのセット -------- // ポジションにTP, SLをセットする for(i=OrdersTotal()-1; i>=0; i--) { //オーダー選択(エラーを生じた場合、ループから抜け出す) if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false) { Print("OrderSelect returned the error of ", GetLastError() ); break; } //オーダー確認(通貨ペアが一致しない場合は、for文の先頭に戻る) if (OrderSymbol() != Symbol()) continue; //マジックナンバー確認(マジックナンバーが一致しない場合は、for文の先頭に戻る) if (OrderMagicNumber() != MagicNumber) continue; // 買いポジションの場合 if (OrderType() == OP_BUY) { profit = Bid - OrderOpenPrice(); // 買いポジションだった場合の、含み損益を計算する // TP, SLがどちらも設定されていなければ、TP, SLを設定する if (OrderStopLoss() == 0 && OrderTakeProfit() == 0) { res = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - StopLoss_pips * xpoint, OrderOpenPrice() + TakeProfit_pips * xpoint, 0, MediumSeaGreen); } } // 売りポジションの場合 if (OrderType() == OP_SELL) { profit = OrderOpenPrice() - Ask; // 売りポジションだった場合の、含み損益を計算する // TP, SLがどちらも設定されていなければ、TP, SLを設定する if (OrderStopLoss() == 0 && OrderTakeProfit() == 0) { res = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + StopLoss_pips * xpoint, OrderOpenPrice() - TakeProfit_pips * xpoint, 0, MediumSeaGreen); } } } //-------- ポジションのTP, SLのセット(ココマデ) -------- } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エントリー総括 | //+------------------------------------------------------------------+ int Entry() { if (Entry_Rule1() == 1 && (Entry_Filter1(F_BB_Period_L,F_BB_Hensa_L) == 1 || Entry_Filter1(F_BB_Period_L,F_BB_Hensa_L) == 3) && (Entry_Filter2(F_MA_period_L) == 1 || Entry_Filter2(F_MA_period_L) == 3) && (Entry_Filter3() == 1 || Entry_Filter3() == 3) && (Entry_Filter4() == 1 || Entry_Filter4() == 3) && (Entry_Filter5() == 1 || Entry_Filter5() == 3) ) { return(1); } else if (Entry_Rule1() == 2 && (Entry_Filter1(F_BB_Period_S,F_BB_Hensa_S) == 2 || Entry_Filter1(F_BB_Period_S,F_BB_Hensa_S) == 3) && (Entry_Filter2(F_MA_period_S) == 2 || Entry_Filter2(F_MA_period_S) == 3) && (Entry_Filter3() == 2 || Entry_Filter3() == 3) && (Entry_Filter4() == 2 || Entry_Filter4() == 3) && (Entry_Filter5() == 2 || Entry_Filter5() == 3) ) { return(2); } else { return(0); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 売りポジションの決済総括 | //+------------------------------------------------------------------+ int Exit1() { if (Exit_Rule1(K_BB_Period_S,K_BB_Hensa_S) == 3 && Exit_Rule2(K_BB_Period_2_S,K_BB_Hensa_2_S) == 3 && Exit_Rule3(CCI_period_S,CCI_Line_S) == 3 && Exit_Rule4(MA_Cross_period1_S,MA_Cross_period2_S) == 3 && Exit_Rule5() == 3) { return(0); } else if (Exit_Rule1(K_BB_Period_S,K_BB_Hensa_S) == 1) { return(1); } else if( Exit_Rule2(K_BB_Period_2_S,K_BB_Hensa_2_S) == 1) { return(1); } else if (Exit_Rule3(CCI_period_S,CCI_Line_S) == 1) { return(1); } else if( Exit_Rule4(MA_Cross_period1_S,MA_Cross_period2_S) == 1) { return(1); } else if (Exit_Rule5() == 1) { return(1); } else { return(0); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 買いポジションの決済総括 | //+------------------------------------------------------------------+ int Exit2() { if (Exit_Rule1(K_BB_Period_L,K_BB_Hensa_L) == 3 && Exit_Rule2(K_BB_Period_2_L,K_BB_Hensa_2_L) == 3 && Exit_Rule3(CCI_period_L,CCI_Line_L) == 3 && Exit_Rule4(MA_Cross_period1_L,MA_Cross_period2_L) == 3 && Exit_Rule5() == 3) { return(0); } else if (Exit_Rule1(K_BB_Period_L,K_BB_Hensa_L) == 2) { return(2); } else if (Exit_Rule2(K_BB_Period_2_L,K_BB_Hensa_2_L) == 2) { return(2); } else if (Exit_Rule3(CCI_period_L,CCI_Line_L) == 2) { return(2); } else if (Exit_Rule4(MA_Cross_period1_L,MA_Cross_period2_L) == 2) { return(2); } else if (Exit_Rule5() == 2) { return(2); } else { return(0); } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エントリールール1 | //+------------------------------------------------------------------+ int Entry_Rule1() { //エントリールール1を差し替える時は、下記を差し替えて下さい。 //ローソク足が陽線で買い if (iClose(NULL,EA_PERIOD,1) > iOpen(NULL,EA_PERIOD,1) &&(iClose(NULL,EA_PERIOD,1) - iOpen(NULL,EA_PERIOD,1))> iClose(NULL,EA_PERIOD,1) * Open_Kairi_percent / 100.0) { return(1); } // 買い //ローソク足が陰線で売り else if (iClose(NULL,EA_PERIOD,1) < iOpen(NULL,EA_PERIOD,1) && (iOpen(NULL,EA_PERIOD,1) - iClose(NULL,EA_PERIOD,1))> iClose(NULL,EA_PERIOD,1) * Open_Kairi_percent / 100.0) { return(2); } // 売り else { return(0); } //エントリールール1を差し替える時は、ココマデを差し替えて下さい。 } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エントリーフィルター1 | //+------------------------------------------------------------------+ int Entry_Filter1(int F_BB_Period,double F_BB_Hensa) { //エントリーフィルター1を差し替える時は、下記を差し替えて下さい。 // ローソク足の始値が、ボリンジャーバンドより外側にある時のみ、エントリーすることが可能 double UpperBB1 = iBands(NULL,EA_PERIOD, F_BB_Period, F_BB_Hensa, 0, PRICE_CLOSE, MODE_UPPER, 1); double LowerBB1 = iBands(NULL,EA_PERIOD, F_BB_Period, F_BB_Hensa, 0, PRICE_CLOSE, MODE_LOWER, 1); // ローソク足の始値が、ボリンジャーバンドより外側にある時のみ、エントリーすることが可能 if(iOpen(NULL,EA_PERIOD,1) < LowerBB1) { return(1); } // 買い else if(iOpen(NULL,EA_PERIOD,1) > UpperBB1) { return(2); } // 売り else { return(0); } //エントリーフィルター1を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エントリーフィルター2 | //+------------------------------------------------------------------+ int Entry_Filter2(int F_MA_period) { //エントリーフィルター2を差し替える時は、下記を差し替えて下さい。 //ローソク足が、移動平均線より上にいる間は「売り」、下にいる間は「買い」 double MA1 = iMA(NULL,F_PERIOD, F_MA_period, 0, MODE_SMA, PRICE_CLOSE, 1); // ローソク足が、移動平均線より上にいる間は「売り」 if (MA1 < iClose(NULL,F_PERIOD,1)) { return(2); } // 買い //ローソク足が、移動平均線より下にいる間は「買い」 else if (MA1 > iClose(NULL,F_PERIOD,1)) { return(1); } // 売り else { return(0); } //エントリーフィルター2を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エントリーフィルター3 | //+------------------------------------------------------------------+ int Entry_Filter3() { //エントリーフィルター3を差し替える時は、下記を差し替えて下さい。 //エントリーフィルター3を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エントリーフィルター4 | //+------------------------------------------------------------------+ int Entry_Filter4() { //エントリーフィルター4を差し替える時は、下記を差し替えて下さい。 //エントリーフィルター4を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| エントリーフィルター5 | //+------------------------------------------------------------------+ int Entry_Filter5() { //エントリーフィルター5を差し替える時は、下記を差し替えて下さい。 //エントリーフィルター5を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 決済ルール1 | //+------------------------------------------------------------------+ int Exit_Rule1(int K_BB_Period,double K_BB_Hensa) { // 決済ルール1を差し替える時は、下記を差し替えて下さい。 //ローソク足が、下側のボリンジャーバンドを下抜いたら「買い」、上側のボリンジャーバンドを上抜いたら「売り」 double UpperBB1 = iBands(NULL,EA_PERIOD, K_BB_Period, K_BB_Hensa, 0, PRICE_CLOSE, MODE_UPPER, 1); double LowerBB1 = iBands(NULL,EA_PERIOD, K_BB_Period, K_BB_Hensa, 0, PRICE_CLOSE, MODE_LOWER, 1); double UpperBB2 = iBands(NULL,EA_PERIOD, K_BB_Period, K_BB_Hensa, 0, PRICE_CLOSE, MODE_UPPER, 2); double LowerBB2 = iBands(NULL,EA_PERIOD ,K_BB_Period, K_BB_Hensa, 0, PRICE_CLOSE, MODE_LOWER, 2); //ローソク足が、下側のボリンジャーバンドを下抜いたら「買い」 if (iClose(NULL,EA_PERIOD,1) < LowerBB1 && iClose(NULL,EA_PERIOD,2) > LowerBB2) { return(1); } // 買い //ローソク足が、上側のボリンジャーバンドを上抜いたら「売り」 else if (iClose(NULL,EA_PERIOD,1) > UpperBB1 && iClose(NULL,EA_PERIOD,2) < UpperBB2) { return(2); } // 売り else { return(0); } // 決済ルール1を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 決済ルール2 | //+------------------------------------------------------------------+ int Exit_Rule2(int K_BB_Period_2,double K_BB_Hensa_2) { // 決済ルール2を差し替える時は、下記を差し替えて下さい。 //ローソク足が、下側のボリンジャーバンドを下抜いたら「売り」、上側のボリンジャーバンドを上抜いたら「買い」 double UpperBB1 = iBands(NULL,EA_PERIOD, K_BB_Period_2, K_BB_Hensa_2, 0, PRICE_CLOSE, MODE_UPPER, 1); double LowerBB1 = iBands(NULL,EA_PERIOD, K_BB_Period_2, K_BB_Hensa_2, 0, PRICE_CLOSE, MODE_LOWER, 1); double UpperBB2 = iBands(NULL,EA_PERIOD, K_BB_Period_2, K_BB_Hensa_2, 0, PRICE_CLOSE, MODE_UPPER, 2); double LowerBB2 = iBands(NULL,EA_PERIOD ,K_BB_Period_2, K_BB_Hensa_2, 0, PRICE_CLOSE, MODE_LOWER, 2); //ローソク足が、下側のボリンジャーバンドを下抜いたら「売り」 if (iClose(NULL,EA_PERIOD,1) < LowerBB1 && iClose(NULL,EA_PERIOD,2) > LowerBB2) { return(2); } // 買い //ローソク足が、上側のボリンジャーバンドを上抜いたら「買い」 else if (iClose(NULL,EA_PERIOD,1) > UpperBB1 && iClose(NULL,EA_PERIOD,2) < UpperBB2) { return(1); } // 売り else { return(0); } // 決済ルール2を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 決済ルール3 | //+------------------------------------------------------------------+ int Exit_Rule3(int CCI_period,int CCI_Line) { // 決済ルール3を差し替える時は、下記を差し替えて下さい。 // CCIが-100(パラメータで変更可)以下になったら買い/100以上になったら売り double CCI0 = iCCI(NULL,EA_PERIOD, CCI_period, PRICE_CLOSE, 1); double CCI1 = iCCI(NULL,EA_PERIOD, CCI_period, PRICE_CLOSE, 2); // CCIが-100(パラメータで変更可)以下になったら買い if (CCI0 <= -CCI_Line && CCI1 > -CCI_Line) { return(1); } // 買い // CCIが100(パラメータで変更可)以上になったら売り else if (CCI0 >= CCI_Line && CCI1 < CCI_Line) { return(2); } // 売り else { return(0); } // 決済ルール3を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 決済ルール4 | //+------------------------------------------------------------------+ int Exit_Rule4(int MA_Cross_period1,int MA_Cross_period2) { // 決済ルール4を差し替える時は、下記を差し替えて下さい。 // 移動平均線のゴールデンクロスとデッドクロス double MA11 = iMA(NULL,PERIOD_H1, MA_Cross_period1, 0, MODE_SMA, PRICE_CLOSE, 2); double MA10 = iMA(NULL,PERIOD_H1, MA_Cross_period1, 0, MODE_SMA, PRICE_CLOSE, 1); double MA21 = iMA(NULL,PERIOD_H1, MA_Cross_period2, 0, MODE_SMA, PRICE_CLOSE, 2); double MA20 = iMA(NULL,PERIOD_H1, MA_Cross_period2, 0, MODE_SMA, PRICE_CLOSE, 1); // 短期移動平均線が長期移動平均線を上抜け(ゴールデンクロス)で「買い」 if (MA11 < MA21 && MA10 >= MA20) { return(1); } // 買い // 短期移動平均線が長期移動平均線を下抜け(デッドクロス)で「売り」 else if(MA11 > MA21 && MA10 <= MA20) { return(2); } // 売り else { return(0); } // 決済ルール4を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 決済ルール5 | //+------------------------------------------------------------------+ int Exit_Rule5() { // 決済ルール5を差し替える時は、下記を差し替えて下さい。 //ローソク足が陽線で買い if (iClose(NULL,K_PERIOD,1) > iOpen(NULL,K_PERIOD,1) &&(iClose(NULL,K_PERIOD,1) - iOpen(NULL,K_PERIOD,1))> iClose(NULL,K_PERIOD,1) * K_Open_Kairi_percent / 100.0) { return(1); } // 買い //ローソク足が陰線で売り else if (iClose(NULL,K_PERIOD,1) < iOpen(NULL,K_PERIOD,1) && (iOpen(NULL,K_PERIOD,1) - iClose(NULL,K_PERIOD,1))> iClose(NULL,K_PERIOD,1) * K_Open_Kairi_percent / 100.0) { return(2); } // 売り else { return(0); } // 決済ルール5を差し替える時は、ココマデを差し替えて下さい。 return(3); } //+------------------------------------------------------------------+