2532 lines
No EOL
168 KiB
MQL4
2532 lines
No EOL
168 KiB
MQL4
//+------------------------------------------------------------------+
|
||
//| MT_Long_USDJPY_M5.mq4 |
|
||
//| Copyright 2016, MetaQuotes Software Corp. |
|
||
//| https://www.mql5.com |
|
||
//+------------------------------------------------------------------+
|
||
//瞬間的なエントリー・決済エラーへの対応
|
||
//チャートが途中で停止する可能性がある個所を修正
|
||
//複利設定・年末年始のトレード制限の追加
|
||
//トレンド判定を追加
|
||
//トレーリングストップのロジック変更
|
||
|
||
#property strict
|
||
|
||
#include <stdlib.mqh>
|
||
|
||
#define MAX_ORDER_REPEAT 10
|
||
|
||
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, //月足
|
||
};
|
||
|
||
enum ENUM_POSITION{
|
||
Max_Position_1 = 1, //最大1ポジション
|
||
Max_Position_2 = 2, //最大2ポジション
|
||
Max_Position_3 = 3, //最大3ポジション
|
||
Max_Position_4 = 4 //最大4ポジション
|
||
};
|
||
|
||
// 列挙型宣言
|
||
enum ENUM_ONOFF{
|
||
off = 0, //OFF
|
||
on = 1 //ON
|
||
};
|
||
|
||
//チャート表示部分
|
||
datetime EarnPipsTime=0;
|
||
int HistoryTotal=0;
|
||
|
||
//始値動作部分
|
||
static datetime time1 = iTime(NULL,PERIOD_M5,0);
|
||
static datetime time2 = iTime(NULL,PERIOD_M15,0);
|
||
static datetime time3 = iTime(NULL,PERIOD_M30,0);
|
||
static datetime time4 = iTime(NULL,PERIOD_H1,0);
|
||
|
||
// 共通部分
|
||
extern string _Common = ""; //▼共通設定
|
||
|
||
extern ENUM_POSITION Max_position = Max_Position_4;
|
||
input int Slippage = 10; //Slippage_Point
|
||
input int MaxSpreadPips = 3; //Spread_Pips
|
||
double xpoint;
|
||
double xspread;
|
||
|
||
input int Yearend = 24; // 12/〇~はエントリーなし
|
||
input int Yearstart = 3; // ~1/〇はエントリーなし
|
||
|
||
extern string _BASIC = ""; //▼複利設定
|
||
extern ENUM_ONOFF FukuriOnOff = off; //┣ 複利ロット設定
|
||
extern double LotsIncreaceAmt = 1000000.0; //┗ ON時ロット増加証拠金単位
|
||
|
||
// グローバル変数
|
||
double MinLot = 0; // 最小ロット数
|
||
double MaxLot = 0; // 最大ロット数
|
||
int LotStepDigit = 0; // ロットステップ小数点桁数
|
||
|
||
//ローソク足始値のみに稼働させる場合は、trueにして下さい。
|
||
bool CandleStartStartingEntry = true;
|
||
bool CandleStartStartingTrailing = true;
|
||
bool CandleStartStartingExit = true;
|
||
|
||
extern string _Logic = ""; //▼各ロジック設定
|
||
|
||
// ロジック1
|
||
input string __Logic1__ = "Logic1 Parameters"; // ロジック1のパラメータ
|
||
input int MagicNumber1 = 24071101;
|
||
input double Lots1 = 0.01;
|
||
int TakeProfit_pips1 = 100;
|
||
int StopLoss_pips1 = 160;
|
||
int Rikaku_pips1 = 30;
|
||
int Songiri_pips1 = 150;
|
||
|
||
//トレイリングストップのパラメータ
|
||
int TrailingStopStartPips1 = 20;
|
||
int TrailingStopPips1 = 30;
|
||
int BarCountSL1 = 16; // 何本前までのローソク足をチェックするか?
|
||
|
||
int xBarsEntry1 = 0, xBarsExit1 = 0, xBarsTrailing1 = 0;
|
||
int xxBars1 = 0;
|
||
|
||
//最大ポジション数を、下記で入力指定して下さい。
|
||
int maxposition1 = 1;
|
||
|
||
//エントリールールの各変数を下記に貼りつけます。
|
||
int RSI_Gyakubari_period = 18; // RSIの計算期間
|
||
int RSI_Gyakubari_Line = 60; // 逆張りエントリーの基準となるライン
|
||
|
||
//エントリーフィルターの各変数を下記に貼りつけます。
|
||
int MA_Break_period = 220; // 移動平均線の計算期間
|
||
int F_BB_Period = 15; // ボリンジャーバンドの計算期間
|
||
double F_BB_Hensa = 2.4; // ボリンジャーバンドの偏差
|
||
int ADX_Period = 65; // ADXの計算期間
|
||
int ADX_Filter_Line = 25; // ADXがこの数値以下の時のみエントリー出来る
|
||
|
||
double Kairi_Judge_percent11 = 2; // 【順張りエントリー可】長期MAに対する乖離〇%以内
|
||
double Kairi_Judge_percent21 = 2; // 【逆張りエントリー可】長期MAに対して乖離〇%以上
|
||
// double Kairi_Judge_percent21 = 10; // 【逆張りエントリー可】長期MAに対して乖離〇%以上
|
||
|
||
//決済ルールの各変数を下記に貼りつけます。
|
||
int K_RSI_Gyakubari_period = 26; // RSIの計算期間
|
||
int K_RSI_Gyakubari_Line = 60; // 逆張りエントリーの基準となるライン
|
||
int BB_Period = 275; // ボリンジャーバンドの計算期間
|
||
double BB_Hensa = 4.2; // ボリンジャーバンドの偏差
|
||
int Envelopes_Period = 60; // エンベロープの計算期間
|
||
double Envelopes_Deviation = 0.1; // エンベロープの幅偏差
|
||
int RSI_Junbari_Filter_period = 35; // RSIの計算期間
|
||
int RSI_Junbari_Filter_Line = 75; // 順張りエントリーの基準となるライン
|
||
|
||
|
||
// ロジック2
|
||
input string __Logic2__ = "Logic2 Parameters"; // ロジック2のパラメータ
|
||
input int MagicNumber2 = 24071102;
|
||
input double Lots2 = 0.01;
|
||
int TakeProfit_pips2 = 400;
|
||
int StopLoss_pips2 = 50;
|
||
int Rikaku_pips2 = 390;
|
||
int Songiri_pips2 = 50;
|
||
|
||
//トレイリングストップのパラメータ
|
||
int TrailingStopStartPips2 = 200;
|
||
int TrailingStopPips2 = 100;
|
||
int BarCountSL2 = 75; // 何本前までのローソク足をチェックするか?
|
||
|
||
int xBarsEntry2 = 0, xBarsExit2 = 0, xBarsTrailing2 = 0;
|
||
int xxBars2 = 0;
|
||
|
||
//最大ポジション数を、下記で入力指定して下さい。
|
||
int maxposition2 = 1;
|
||
|
||
//エントリールールの各変数を下記に貼りつけます。
|
||
int MA_Cross_period1 = 15; // 短期移動平均線
|
||
int MA_Cross_period2 = 100; // 長期移動平均線
|
||
|
||
|
||
|
||
//エントリーフィルターの各変数を下記に貼りつけます。
|
||
int F_BB_Period2 = 45; // ボリンジャーバンドの計算期間
|
||
double F_BB_Hensa2 = 1.9; // ボリンジャーバンドの偏差
|
||
|
||
int RSI_Filter_period = 9; // RSIの計算期間
|
||
int RSI_Filter_Line = 28; // 逆張りエントリーの基準となるライン
|
||
|
||
int F_MA_Cross_period1 = 10; // 短期移動平均線
|
||
int F_MA_Cross_period2 = 30; // 長期移動平均線
|
||
|
||
int ADX_Period2 = 70; // ±DIの計算期間
|
||
int ADX_Filter_Line2 = 25; // ±DIの指定値以上ライン
|
||
|
||
int ATR_Period = 25; // ATRの計算期間
|
||
double ATR_Filter_Line = 1; // ATRがこの数値以下の時のみエントリー出来る
|
||
|
||
double Kairi_Judge_percent12 = 3.2; // 【順張りエントリー可】長期MAに対する乖離〇%以内
|
||
double Kairi_Judge_percent22 = 3; // 【逆張りエントリー可】長期MAに対して乖離〇%以上
|
||
// double Kairi_Judge_percent22 = 10; // 【逆張りエントリー可】長期MAに対して乖離〇%以上
|
||
|
||
|
||
//決済ルールの各変数を下記に貼りつけます。
|
||
int BB_Period2 = 120; // ボリンジャーバンドの計算期間
|
||
double BB_Hensa2 = 2.5; // ボリンジャーバンドの偏差
|
||
|
||
|
||
// ロジック3
|
||
input string __Logic3__ = "Logic3 Parameters"; // ロジック3のパラメータ
|
||
input int MagicNumber3 = 24071103;
|
||
input double Lots3 = 0.01;
|
||
int TakeProfit_pips3 = 220;
|
||
int StopLoss_pips3 = 90;
|
||
int Rikaku_pips3 = 210;
|
||
int Songiri_pips3 = 70;
|
||
|
||
//トレイリングストップのパラメータ
|
||
int TrailingStopStartPips3 = 90;
|
||
int TrailingStopPips3 = 20;
|
||
int BarCountSL3 = 15; // 何本前までのローソク足をチェックするか?
|
||
|
||
int xBarsEntry3 = 0, xBarsExit3 = 0, xBarsTrailing3 = 0;
|
||
int xxBars3 = 0;
|
||
|
||
//最大ポジション数を、下記で入力指定して下さい。
|
||
int maxposition3 = 1;
|
||
|
||
//エントリールールの各変数を下記に貼りつけます。
|
||
int Fast_EMA_period = 14; // 短期EMA期間(MACD)
|
||
int Slow_EMA_period = 22; // 短期EMA期間(MACD)
|
||
int Signal_period = 16; // シグナル期間(MACD)
|
||
|
||
|
||
//エントリーフィルターの各変数を下記に貼りつけます。
|
||
int F_BB_Period3 = 70; // ボリンジャーバンドの計算期間
|
||
double F_BB_Hensa3 = 0.9; // ボリンジャーバンドの偏差
|
||
double F_BB_HabaFilter_percent3 = 1.1; // ボリンジャーバンドの幅%(幅フィルター)
|
||
int CCI_period = 60; // CCIの計算期間
|
||
|
||
double Kairi_Judge_percent13 = 3; // 【順張りエントリー可】長期MAに対する乖離〇%以内
|
||
// double Kairi_Judge_percent23 = 0.8; // 【逆張りエントリー可】長期MAに対して乖離〇%以上
|
||
double Kairi_Judge_percent23 = 1.5; // 【逆張りエントリー可】長期MAに対して乖離〇%以上
|
||
|
||
|
||
//決済ルールの各変数を下記に貼りつけます。
|
||
double SAR_Entry_Step = 0.001; // パラボリックSARのステップ(パラメータ)
|
||
double SAR_Entry_Maximum = 0.2; // パラボリックSARの上限値(パラメータ)
|
||
|
||
// ロジック4
|
||
input string __Logic4__ = "Logic4 Parameters"; // ロジック4のパラメータ
|
||
input int MagicNumber4 = 24071104;
|
||
input double Lots4 = 0.01;
|
||
int TakeProfit_pips4 = 320;
|
||
int StopLoss_pips4 = 120;
|
||
int Rikaku_pips4 = 320;
|
||
int Songiri_pips4 = 60;
|
||
|
||
//トレイリングストップのパラメータ
|
||
int TrailingStopStartPips4 = 100;
|
||
int TrailingStopPips4 = 70;
|
||
int BarCountSL4 = 1000; // 何本前までのローソク足をチェックするか?
|
||
|
||
int xBarsEntry4 = 0, xBarsExit4 = 0, xBarsTrailing4 = 0;
|
||
int xxBars4 = 0;
|
||
|
||
//最大ポジション数を、下記で入力指定して下さい。
|
||
int maxposition4 = 1;
|
||
|
||
//エントリールールの各変数を下記に貼りつけます。
|
||
double SAR_Entry_Step4 = 0.005; // パラボリックSARのステップ(パラメータ)
|
||
double SAR_Entry_Maximum4 = 0.2; // パラボリックSARの上限値(パラメータ)
|
||
|
||
|
||
//エントリーフィルターの各変数を下記に貼りつけます。
|
||
int BB_Period4 = 50; // ボリンジャーバンドの計算期間
|
||
double BB_Hensa4 = 1.0; // ボリンジャーバンドの偏差
|
||
double BB_HabaFilter_percent4 = 1; // ボリンジャーバンドの幅%(幅フィルター)
|
||
|
||
double Kairi_Judge_percent14 = 3.75; // 【順張りエントリー可】長期MAに対する乖離〇%以内
|
||
double Kairi_Judge_percent24 = 2; // 【逆張りエントリー可】長期MAに対して乖離〇%以上
|
||
|
||
//決済ルールの各変数を下記に貼りつけます。
|
||
double K_SAR_Entry_Step4 = 0.005; // パラボリックSARのステップ(パラメータ)
|
||
|
||
int K_BB_Period14 = 24; // ボリンジャーバンドの計算期間
|
||
double K_BB_Hensa14 = 0.8; // ボリンジャーバンドの偏差
|
||
int K_BB_Period24 = 10; // ボリンジャーバンドの計算期間
|
||
double K_BB_Hensa24 = 1.0; // ボリンジャーバンドの偏差
|
||
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| expert initialization function |
|
||
//+------------------------------------------------------------------+
|
||
int OnInit()
|
||
{
|
||
ObjectsDeleteAll(0, "TotalEarnPips");
|
||
label("TotalEarnPips"," Total Profit(Pips) ",0,25,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT);
|
||
ObjectSetInteger(0,"TotalEarnPips", OBJPROP_COLOR, clrWhite);
|
||
|
||
label("TotalEarnPips"+IntegerToString(MagicNumber1),"----",0,40,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT);
|
||
label("TotalEarnPips"+IntegerToString(MagicNumber2),"----",0,55,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT);
|
||
label("TotalEarnPips"+IntegerToString(MagicNumber3),"----",0,70,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT);
|
||
label("TotalEarnPips"+IntegerToString(MagicNumber4),"----",0,85,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT);
|
||
HistoryEarnPips(MagicNumber1);
|
||
HistoryEarnPips(MagicNumber2);
|
||
HistoryEarnPips(MagicNumber3);
|
||
HistoryEarnPips(MagicNumber4);
|
||
SetChart();
|
||
|
||
|
||
// 小数点以下の桁数に応じてPipsの値を調整する
|
||
xpoint = Point();
|
||
if (Digits() == 3 || Digits() == 5)
|
||
{
|
||
xpoint = xpoint * 10;
|
||
}
|
||
|
||
// ロットステップを取得
|
||
double LotStep = MarketInfo(Symbol(),MODE_LOTSTEP);
|
||
if(LotStep == 1) LotStepDigit = 0;
|
||
else if(LotStep == 0.1) LotStepDigit = 1;
|
||
else LotStepDigit = 2;
|
||
|
||
// 口座の最小・最大ロット数を取得
|
||
MinLot = MarketInfo(Symbol(),MODE_MINLOT);
|
||
MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
|
||
|
||
|
||
//使用しているインジケータを非表示にする
|
||
HideTestIndicators(true);
|
||
return(0);
|
||
}
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| Expert tick function |
|
||
//+------------------------------------------------------------------+
|
||
void OnTick()
|
||
{
|
||
// ロジック1
|
||
//バー始値制限処理
|
||
if(iTime(NULL,PERIOD_M5,0) != time1){
|
||
|
||
if (Lots1 > 0 && (Count_Position(MagicNumber2)+Count_Position(MagicNumber3)+Count_Position(MagicNumber4)<= Max_position-1 || Count_Position(MagicNumber1)==1)){
|
||
Logic(MagicNumber1, // マジックナンバー
|
||
1, // ロジック番号
|
||
Songiri_pips1, // 損切りpips
|
||
Rikaku_pips1, // 利確pips
|
||
CandleStartStartingExit, // 決済を始値動作とするか
|
||
xBarsExit1, // 最後に決済を確認した足
|
||
Lots1, // エントリーロット数
|
||
StopLoss_pips1, // 損切りpips(逆指値)
|
||
TakeProfit_pips1, // 利確pips(指値)
|
||
maxposition1, // 最大ポジション数
|
||
CandleStartStartingEntry, // エントリーを始値動作とするか
|
||
xBarsEntry1, // 最後にエントリーを確認した足
|
||
xxBars1, // 最後にエントリーを実施した足
|
||
TrailingStopStartPips1, // トレーリングストップを開始するpips
|
||
TrailingStopPips1, // トレーリングストップの幅(pips)
|
||
BarCountSL1, // 何本前までのローソク足をチェックするか?
|
||
CandleStartStartingTrailing, // トレーリングを始値動作とするか
|
||
xBarsTrailing1 // 最後にトレーリングを確認した足
|
||
);
|
||
}
|
||
//今回のバー形成開始時刻記憶
|
||
time1 = iTime(NULL,PERIOD_M5,0);
|
||
}
|
||
// ロジック2
|
||
//バー始値制限処理
|
||
if(iTime(NULL,PERIOD_M15,0) != time2){
|
||
|
||
if (Lots2 > 0 && (Count_Position(MagicNumber1)+Count_Position(MagicNumber3)+Count_Position(MagicNumber4)<= Max_position-1 || Count_Position(MagicNumber2)==1)){
|
||
Logic(MagicNumber2, // マジックナンバー
|
||
2, // ロジック番号
|
||
Songiri_pips2, // 損切りpips
|
||
Rikaku_pips2, // 利確pips
|
||
CandleStartStartingExit, // 決済を始値動作とするか
|
||
xBarsExit2, // 最後に決済を確認した足
|
||
Lots2, // エントリーロット数
|
||
StopLoss_pips2, // 損切りpips(逆指値)
|
||
TakeProfit_pips2, // 利確pips(指値)
|
||
maxposition2, // 最大ポジション数
|
||
CandleStartStartingEntry, // エントリーを始値動作とするか
|
||
xBarsEntry2, // 最後にエントリーを確認した足
|
||
xxBars2, // 最後にエントリーを実施した足
|
||
TrailingStopStartPips2, // トレーリングストップを開始するpips
|
||
TrailingStopPips2, // トレーリングストップの幅(pips)
|
||
BarCountSL2, // 何本前までのローソク足をチェックするか?
|
||
CandleStartStartingTrailing, // トレーリングを始値動作とするか
|
||
xBarsTrailing2 // 最後にトレーリングを確認した足
|
||
);
|
||
}
|
||
//今回のバー形成開始時刻記憶
|
||
time2 = iTime(NULL,PERIOD_M15,0);
|
||
}
|
||
|
||
|
||
// ロジック3
|
||
//バー始値制限処理
|
||
if(iTime(NULL,PERIOD_M30,0) != time3){
|
||
|
||
if (Lots3 > 0 && (Count_Position(MagicNumber1)+Count_Position(MagicNumber2)+Count_Position(MagicNumber4)<= Max_position-1 || Count_Position(MagicNumber3)==1)){
|
||
Logic(MagicNumber3, // マジックナンバー
|
||
3, // ロジック番号
|
||
Songiri_pips3, // 損切りpips
|
||
Rikaku_pips3, // 利確pips
|
||
CandleStartStartingExit, // 決済を始値動作とするか
|
||
xBarsExit3, // 最後に決済を確認した足
|
||
Lots3, // エントリーロット数
|
||
StopLoss_pips3, // 損切りpips(逆指値)
|
||
TakeProfit_pips3, // 利確pips(指値)
|
||
maxposition3, // 最大ポジション数
|
||
CandleStartStartingEntry, // エントリーを始値動作とするか
|
||
xBarsEntry3, // 最後にエントリーを確認した足
|
||
xxBars3, // 最後にエントリーを実施した足
|
||
TrailingStopStartPips3, // トレーリングストップを開始するpips
|
||
TrailingStopPips3, // トレーリングストップの幅(pips)
|
||
BarCountSL3, // 何本前までのローソク足をチェックするか?
|
||
CandleStartStartingTrailing, // トレーリングを始値動作とするか
|
||
xBarsTrailing3 // 最後にトレーリングを確認した足
|
||
);
|
||
}
|
||
//今回のバー形成開始時刻記憶
|
||
time3 = iTime(NULL,PERIOD_M30,0);
|
||
}
|
||
// ロジック4
|
||
//バー始値制限処理
|
||
if(iTime(NULL,PERIOD_H1,0) != time4){
|
||
|
||
if (Lots4 > 0 && (Count_Position(MagicNumber1)+Count_Position(MagicNumber2)+Count_Position(MagicNumber3)<= Max_position-1 || Count_Position(MagicNumber4)==1)){
|
||
Logic(MagicNumber4, // マジックナンバー
|
||
4, // ロジック番号
|
||
Songiri_pips4, // 損切りpips
|
||
Rikaku_pips4, // 利確pips
|
||
CandleStartStartingExit, // 決済を始値動作とするか
|
||
xBarsExit4, // 最後に決済を確認した足
|
||
Lots4, // エントリーロット数
|
||
StopLoss_pips4, // 損切りpips(逆指値)
|
||
TakeProfit_pips4, // 利確pips(指値)
|
||
maxposition4, // 最大ポジション数
|
||
CandleStartStartingEntry, // エントリーを始値動作とするか
|
||
xBarsEntry4, // 最後にエントリーを確認した足
|
||
xxBars4, // 最後にエントリーを実施した足
|
||
TrailingStopStartPips4, // トレーリングストップを開始するpips
|
||
TrailingStopPips4, // トレーリングストップの幅(pips)
|
||
BarCountSL4, // 何本前までのローソク足をチェックするか?
|
||
CandleStartStartingTrailing, // トレーリングを始値動作とするか
|
||
xBarsTrailing4 // 最後にトレーリングを確認した足
|
||
);
|
||
}
|
||
//今回のバー形成開始時刻記憶
|
||
time4 = iTime(NULL,PERIOD_H1,0);
|
||
}
|
||
|
||
|
||
if(EarnPipsTime != iTime(NULL,PERIOD_M5,0) && Seconds() > 30){
|
||
HistoryEarnPips(MagicNumber1);
|
||
HistoryEarnPips(MagicNumber2);
|
||
HistoryEarnPips(MagicNumber3);
|
||
HistoryEarnPips(MagicNumber4);
|
||
EarnPipsTime = iTime(NULL,PERIOD_M5,0);
|
||
}
|
||
|
||
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| Logic |
|
||
//+------------------------------------------------------------------+
|
||
void Logic(int magic, // マジックナンバー
|
||
int logic, // ロジック番号
|
||
// 決済用パラメータ
|
||
int songiri_pips, // 損切りpips
|
||
int rikaku_pips, // 利確pips
|
||
bool candlestartingexit, // 決済を始値動作とするか
|
||
int& xbarsexit, // 最後に決済を確認した足
|
||
// エントリー用パラメータ
|
||
double lots, // エントリーロット数
|
||
int stoploss_pips, // 損切りpips(逆指値)
|
||
int takeprofit_pips, // 利確pips(指値)
|
||
int maxpos, // 最大ポジション数
|
||
bool candlestartingentry, // エントリーを始値動作とするか
|
||
int& xbarsentry, // 最後にエントリーを確認した足
|
||
int& xxbars, // 最後にエントリーを実施した足
|
||
// トレーリングストップ用パラメータ
|
||
int trailingstopstartpips, // トレーリングストップを開始するpips
|
||
int trailingstoppips, // トレーリングストップの幅(pips)
|
||
int BarCountSL, // 何本前までのローソク足をチェックするか?
|
||
bool candlestartingtrailing, // トレーリングを始値動作とするか
|
||
int& xbarstrailing // 最後にトレーリングを確認した足
|
||
)
|
||
{
|
||
// ポジションをクローズ
|
||
PositionClose(magic,
|
||
logic,
|
||
songiri_pips,
|
||
rikaku_pips,
|
||
candlestartingexit,
|
||
xbarsexit
|
||
);
|
||
|
||
// ポジションのエントリー
|
||
PositionOpen(magic,
|
||
logic,
|
||
lots,
|
||
stoploss_pips,
|
||
takeprofit_pips,
|
||
maxpos,
|
||
candlestartingentry,
|
||
xbarsentry,
|
||
xxbars
|
||
);
|
||
|
||
// トレーリング
|
||
Trailing(magic,
|
||
logic,
|
||
trailingstopstartpips,
|
||
trailingstoppips,
|
||
BarCountSL,
|
||
candlestartingtrailing,
|
||
xbarstrailing
|
||
);
|
||
|
||
// TP, SLの再設定
|
||
SetTPSL(magic,
|
||
stoploss_pips,
|
||
takeprofit_pips
|
||
);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| ポジションのクローズ |
|
||
//+------------------------------------------------------------------+
|
||
void PositionClose(int magic, // マジックナンバー
|
||
int logic, // ロジック番号
|
||
int songiri_pips, // 損切りpips
|
||
int rikaku_pips, // 利確pips
|
||
bool candlestartingexit, // 決済を始値動作とするか
|
||
int& xbarsexit // 最後に決済を確認した足
|
||
)
|
||
{
|
||
int i;
|
||
double profit;
|
||
bool res;
|
||
|
||
// 決済判断のローソク足始値のみ稼働(選択式)
|
||
if(Bars != xbarsexit || candlestartingexit == false)
|
||
{
|
||
xbarsexit = 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() != magic) continue;
|
||
|
||
if (OrderType() == OP_BUY)
|
||
{
|
||
profit = Bid - OrderOpenPrice(); // 買いポジションだった場合の、含み損益を計算する
|
||
|
||
// オーダーを成り行き決済する
|
||
if (profit >= rikaku_pips * xpoint || profit <= -songiri_pips * xpoint || Exit2(logic) == 2)
|
||
{
|
||
res = WrapperOrderClose_L(OrderTicket(),
|
||
OrderLots(),
|
||
Bid,
|
||
Slippage*100,
|
||
Green);
|
||
}
|
||
}
|
||
|
||
if (OrderType() == OP_SELL)
|
||
{
|
||
profit = OrderOpenPrice() - Ask; // 売りポジションだった場合の、含み損益を計算する
|
||
|
||
// オーダーを成り行き決済する
|
||
if (profit >= rikaku_pips * xpoint || profit <= -songiri_pips * xpoint || Exit1(logic) == 1)
|
||
{
|
||
res = WrapperOrderClose_S(OrderTicket(),
|
||
OrderLots(),
|
||
Ask,
|
||
Slippage*100,
|
||
Green);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| ポジションのオープン |
|
||
//+------------------------------------------------------------------+
|
||
void PositionOpen(int magic, // マジックナンバー
|
||
int logic, // ロジック番号
|
||
double lots, // エントリーロット数
|
||
int stoploss_pips, // 損切りpips(逆指値)
|
||
int takeprofit_pips, // 利確pips(指値)
|
||
int maxpos, // 最大ポジション数
|
||
bool candlestartingentry, // エントリーを始値動作とするか
|
||
int& xbarsentry, // 最後にエントリーを確認した足
|
||
int& xxbars // 最後にエントリーを実施した足
|
||
)
|
||
{
|
||
int i;
|
||
int ticket;
|
||
int CountBuy = 0,CountSell = 0;
|
||
bool res;
|
||
|
||
// エントリー判断のローソク足始値のみ稼働(選択式)
|
||
if(Bars != xbarsentry || candlestartingentry == false)
|
||
{
|
||
xbarsentry = 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() != magic) continue;
|
||
|
||
if (OrderType() == OP_BUY)
|
||
{
|
||
CountBuy = CountBuy + 1;
|
||
}
|
||
|
||
if (OrderType() == OP_SELL)
|
||
{
|
||
CountSell = CountSell + 1;
|
||
}
|
||
}
|
||
//スプレッド確認
|
||
xspread = (Ask - Bid) / xpoint;
|
||
|
||
//12/〇~1/〇はエントリーなし
|
||
int NGMonth = Month();
|
||
int NGDay = Day();
|
||
if ((NGMonth == 12 && NGDay >= Yearend ) || (NGMonth == 1 && NGDay <= Yearstart))
|
||
{
|
||
return;
|
||
} // エントリー出来ない
|
||
|
||
// オーダーロット数を算出
|
||
if(FukuriOnOff == on){
|
||
lots = CalcAutoLot(lots);
|
||
}
|
||
|
||
// エントリー条件を確認し、成立していればエントリーを行う
|
||
if (Entry(logic) == 1 && CountBuy < maxpos && xxbars != Bars && xspread <= MaxSpreadPips )
|
||
{
|
||
ticket = WrapperOrderSend_L(Symbol(),
|
||
OP_BUY,
|
||
lots,
|
||
Ask,
|
||
Slippage,
|
||
0,
|
||
0,
|
||
"MT_Long_USDJPY",
|
||
magic,
|
||
0,
|
||
Blue);
|
||
|
||
// エントリーに成功していれば、TP, SLをセットする
|
||
if (ticket != -1)
|
||
{
|
||
// チケットを使ってオーダーを選択(エラーを生じた場合、何もしない)
|
||
if( OrderSelect( ticket, SELECT_BY_TICKET ) == true )
|
||
{
|
||
res = WrapperOrderModify(OrderTicket(),
|
||
OrderOpenPrice(),
|
||
OrderOpenPrice() - stoploss_pips * xpoint,
|
||
OrderOpenPrice() + takeprofit_pips * xpoint,
|
||
0,
|
||
MediumSeaGreen);
|
||
}
|
||
}
|
||
|
||
xxbars = Bars;
|
||
}
|
||
else if (Entry(logic) == 2 && CountSell < maxpos && xxbars != Bars && xspread <= MaxSpreadPips )
|
||
{
|
||
ticket = WrapperOrderSend_S(Symbol(),
|
||
OP_SELL,
|
||
lots,
|
||
Bid,
|
||
Slippage,
|
||
0,
|
||
0,
|
||
"Sell",
|
||
magic,
|
||
0,
|
||
Red);
|
||
|
||
// エントリーに成功していれば、TP, SLをセットする
|
||
if (ticket != -1)
|
||
{
|
||
// チケットを使ってオーダーを選択(エラーを生じた場合、何もしない)
|
||
if( OrderSelect( ticket, SELECT_BY_TICKET ) == true )
|
||
{
|
||
res = WrapperOrderModify(OrderTicket(),
|
||
OrderOpenPrice(),
|
||
OrderOpenPrice() + stoploss_pips * xpoint,
|
||
OrderOpenPrice() - takeprofit_pips * xpoint,
|
||
0,
|
||
MediumSeaGreen);
|
||
}
|
||
}
|
||
|
||
xxbars = Bars;
|
||
}
|
||
}
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| トレーリング |
|
||
//+------------------------------------------------------------------+
|
||
void Trailing(int magic, // マジックナンバー
|
||
int logic, // ロジック番号
|
||
int trailingstopstartpips, // トレーリングストップを開始するpips
|
||
int trailingstoppips, // トレーリングストップの幅(pips)
|
||
int BarCountSL, // 何本前までのローソク足をチェックするか?
|
||
bool candlestartingtrailing, // トレーリングを始値動作とするか
|
||
int& xbarstrailing // 最後にトレーリングを確認した足
|
||
)
|
||
{
|
||
int i;
|
||
double profit;
|
||
bool res;
|
||
|
||
// トレーリングのローソク足始値のみ稼働(選択式)
|
||
if(Bars != xbarstrailing || candlestartingtrailing == false)
|
||
{
|
||
xbarstrailing = 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() != magic) continue;
|
||
|
||
if (OrderType() == OP_BUY)
|
||
{
|
||
profit = Bid - OrderOpenPrice(); // 買いポジションだった場合の含み損益を計算する
|
||
double LowSL = iLow(NULL, 0, (iLowest(NULL, 0, MODE_LOW, BarCountSL, 1)));
|
||
double SL_step = MathMax(LowSL, NormalizeDouble(Bid - trailingstoppips * xpoint, Digits()));
|
||
SL_step = NormalizeDouble(SL_step, Digits());
|
||
|
||
// TrailingStopを確認する
|
||
if (profit >= trailingstopstartpips * xpoint
|
||
&& OrderStopLoss() < SL_step)
|
||
{
|
||
res = WrapperOrderModify(OrderTicket(),
|
||
OrderOpenPrice(),
|
||
SL_step,
|
||
OrderTakeProfit(),
|
||
0,
|
||
Green);
|
||
}
|
||
}
|
||
|
||
if (OrderType() == OP_SELL)
|
||
{
|
||
profit = OrderOpenPrice() - Ask; // 売りポジションだった場合の含み損益を計算する
|
||
double HighSL = iHigh(NULL, 0, (iHighest(NULL, 0, MODE_HIGH, BarCountSL, 1)));
|
||
double SL_step = MathMin(HighSL, NormalizeDouble(Ask + trailingstoppips * xpoint, Digits()));
|
||
SL_step = NormalizeDouble(SL_step, Digits());
|
||
|
||
// TrailingStopを確認する
|
||
if (profit >= trailingstopstartpips * xpoint
|
||
&& OrderStopLoss() > SL_step )
|
||
{
|
||
res = WrapperOrderModify(OrderTicket(),
|
||
OrderOpenPrice(),
|
||
SL_step,
|
||
OrderTakeProfit(),
|
||
0,
|
||
Green);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| TakeProfit, StopLoss |
|
||
//+------------------------------------------------------------------+
|
||
void SetTPSL(int magic, // マジックナンバー
|
||
int stoploss_pips, // 損切りpips(逆指値)
|
||
int takeprofit_pips // 利確pips(指値)
|
||
)
|
||
{
|
||
int i;
|
||
double profit;
|
||
bool res;
|
||
|
||
// ポジションに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() != magic) continue;
|
||
|
||
// 買いポジションの場合
|
||
if (OrderType() == OP_BUY)
|
||
{
|
||
profit = Bid - OrderOpenPrice(); // 買いポジションだった場合の、含み損益を計算する
|
||
|
||
// TP, SLがどちらも設定されていなければ、TP, SLを設定する
|
||
if (OrderStopLoss() == 0 && OrderTakeProfit() == 0)
|
||
{
|
||
res = WrapperOrderModify(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 = WrapperOrderModify(OrderTicket(),
|
||
OrderOpenPrice(),
|
||
OrderOpenPrice() + stoploss_pips * xpoint,
|
||
OrderOpenPrice() - takeprofit_pips * xpoint,
|
||
0,
|
||
MediumSeaGreen);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリー総括 |
|
||
//+------------------------------------------------------------------+
|
||
int Entry(int logic)
|
||
{
|
||
int rule;
|
||
int filter1, filter2, filter3, filter4, filter5, filter6;
|
||
|
||
// ロジック1
|
||
if (logic == 1)
|
||
{
|
||
rule = Entry_Rule1_1();
|
||
filter1 = Entry_Filter1_1();
|
||
filter2 = Entry_Filter1_2();
|
||
filter3 = Entry_Filter1_3();
|
||
filter4 = Entry_Filter1_4();
|
||
filter5 = Entry_Filter1_5();
|
||
filter6 = 3;
|
||
}
|
||
// ロジック2
|
||
else if (logic == 2)
|
||
{
|
||
rule = Entry_Rule2_1();
|
||
filter1 = Entry_Filter2_1();
|
||
filter2 = Entry_Filter2_2();
|
||
filter3 = Entry_Filter2_3();
|
||
filter4 = Entry_Filter2_4();
|
||
filter5 = Entry_Filter2_5();
|
||
filter6 = Entry_Filter2_6();
|
||
}
|
||
// ロジック3
|
||
else if (logic == 3)
|
||
{
|
||
rule = Entry_Rule3_1();
|
||
filter1 = Entry_Filter3_1();
|
||
filter2 = Entry_Filter3_2();
|
||
filter3 = Entry_Filter3_3();
|
||
filter4 = Entry_Filter3_4();
|
||
filter5 = Entry_Filter3_5();
|
||
filter6 = 3;
|
||
}
|
||
// ロジック4
|
||
else if (logic == 4)
|
||
{
|
||
rule = Entry_Rule4_1();
|
||
filter1 = Entry_Filter4_1();
|
||
filter2 = Entry_Filter4_2();
|
||
filter3 = Entry_Filter4_3();
|
||
filter4 = Entry_Filter4_4();
|
||
filter5 = Entry_Filter4_5();
|
||
filter6 = 3;
|
||
}
|
||
// それ以外を指定した場合、ロジック1
|
||
else
|
||
{
|
||
rule = Entry_Rule1_1();
|
||
filter1 = Entry_Filter1_1();
|
||
filter2 = Entry_Filter1_2();
|
||
filter3 = Entry_Filter1_3();
|
||
filter4 = Entry_Filter1_4();
|
||
filter5 = Entry_Filter1_5();
|
||
filter6 = 3;
|
||
}
|
||
|
||
// エントリー判断
|
||
if (rule == 1 && (filter1 == 1 || filter1 == 3)
|
||
&& (filter2 == 1 || filter2 == 3)
|
||
&& (filter3 == 1 || filter3 == 3)
|
||
&& (filter4 == 1 || filter4 == 3)
|
||
&& (filter5 == 1 || filter5 == 3)
|
||
&& (filter6 == 1 || filter6 == 3)
|
||
)
|
||
{
|
||
return(1);
|
||
}
|
||
else if (rule == 2 && (filter1 == 2 || filter1 == 3)
|
||
&& (filter2 == 2 || filter2 == 3)
|
||
&& (filter3 == 2 || filter3 == 3)
|
||
&& (filter4 == 2 || filter4 == 3)
|
||
&& (filter5 == 2 || filter5 == 3)
|
||
&& (filter6 == 2 || filter6 == 3)
|
||
)
|
||
{
|
||
return(2);
|
||
}
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 売りポジションの決済総括 |
|
||
//+------------------------------------------------------------------+
|
||
int Exit1(int logic)
|
||
{
|
||
int rule1, rule2, rule3, rule4, rule5;
|
||
|
||
// ロジック1
|
||
if (logic == 1)
|
||
{
|
||
rule1 = Exit_Rule1_1();
|
||
rule2 = Exit_Rule1_2();
|
||
rule3 = Exit_Rule1_3();
|
||
rule4 = Exit_Rule1_4();
|
||
rule5 = Exit_Rule1_5();
|
||
}
|
||
// ロジック2
|
||
else if (logic == 2)
|
||
{
|
||
rule1 = Exit_Rule2_1();
|
||
rule2 = Exit_Rule2_2();
|
||
rule3 = Exit_Rule2_3();
|
||
rule4 = Exit_Rule2_4();
|
||
rule5 = Exit_Rule2_5();
|
||
}
|
||
// ロジック3
|
||
else if (logic == 3)
|
||
{
|
||
rule1 = Exit_Rule3_1();
|
||
rule2 = Exit_Rule3_2();
|
||
rule3 = Exit_Rule3_3();
|
||
rule4 = Exit_Rule3_4();
|
||
rule5 = Exit_Rule3_5();
|
||
}
|
||
// ロジック4
|
||
else if (logic == 4)
|
||
{
|
||
rule1 = Exit_Rule4_1();
|
||
rule2 = Exit_Rule4_2();
|
||
rule3 = Exit_Rule4_3();
|
||
rule4 = Exit_Rule4_4();
|
||
rule5 = Exit_Rule4_5();
|
||
}
|
||
// それ以外を指定した場合、ロジック1
|
||
else
|
||
{
|
||
rule1 = Exit_Rule1_1();
|
||
rule2 = Exit_Rule1_2();
|
||
rule3 = Exit_Rule1_3();
|
||
rule4 = Exit_Rule1_4();
|
||
rule5 = Exit_Rule1_5();
|
||
}
|
||
|
||
// エントリールールが無い
|
||
if (rule1 == 3 && rule2 == 3 && rule3 == 3 && rule4 == 3 && rule5 == 3)
|
||
{
|
||
return(0);
|
||
}
|
||
// エントリールール成立
|
||
else if (rule1 == 1 || rule2 == 1 || rule3 == 1 || rule4 == 1 || rule5 == 1)
|
||
{
|
||
return(1);
|
||
}
|
||
// エントリールール不成立
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 買いポジションの決済総括 |
|
||
//+------------------------------------------------------------------+
|
||
int Exit2(int logic)
|
||
{
|
||
int rule1, rule2, rule3, rule4, rule5;
|
||
|
||
// ロジック1
|
||
if (logic == 1)
|
||
{
|
||
rule1 = Exit_Rule1_1();
|
||
rule2 = Exit_Rule1_2();
|
||
rule3 = Exit_Rule1_3();
|
||
rule4 = Exit_Rule1_4();
|
||
rule5 = Exit_Rule1_5();
|
||
}
|
||
// ロジック2
|
||
else if (logic == 2)
|
||
{
|
||
rule1 = Exit_Rule2_1();
|
||
rule2 = Exit_Rule2_2();
|
||
rule3 = Exit_Rule2_3();
|
||
rule4 = Exit_Rule2_4();
|
||
rule5 = Exit_Rule2_5();
|
||
}
|
||
// ロジック3
|
||
else if (logic == 3)
|
||
{
|
||
rule1 = Exit_Rule3_1();
|
||
rule2 = Exit_Rule3_2();
|
||
rule3 = Exit_Rule3_3();
|
||
rule4 = Exit_Rule3_4();
|
||
rule5 = Exit_Rule3_5();
|
||
}
|
||
// ロジック4
|
||
else if (logic == 4)
|
||
{
|
||
rule1 = Exit_Rule4_1();
|
||
rule2 = Exit_Rule4_2();
|
||
rule3 = Exit_Rule4_3();
|
||
rule4 = Exit_Rule4_4();
|
||
rule5 = Exit_Rule4_5();
|
||
}
|
||
// それ以外を指定した場合、ロジック1
|
||
else
|
||
{
|
||
rule1 = Exit_Rule1_1();
|
||
rule2 = Exit_Rule1_2();
|
||
rule3 = Exit_Rule1_3();
|
||
rule4 = Exit_Rule1_4();
|
||
rule5 = Exit_Rule1_5();
|
||
}
|
||
|
||
// エントリールールが無い
|
||
if (rule1 == 3 && rule2 == 3 && rule3 == 3 && rule4 == 3 && rule5 == 3)
|
||
{
|
||
return(0);
|
||
}
|
||
// エントリールール成立
|
||
else if (rule1 == 2 || rule2 == 2 || rule3 == 2 || rule4 == 2 || rule5 == 2)
|
||
{
|
||
return(2);
|
||
}
|
||
// エントリールール不成立
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| ロジック1 |
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリールール1 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Rule1_1()
|
||
{
|
||
//エントリールール1を差し替える時は、下記を差し替えて下さい。
|
||
//RSIが指定値以下になったら「買い」、指定値以上になったら「売り」
|
||
double RSI0 = iRSI(NULL,PERIOD_M5, RSI_Gyakubari_period, PRICE_CLOSE, 1);
|
||
double RSI1 = iRSI(NULL,PERIOD_M5, RSI_Gyakubari_period, PRICE_CLOSE, 2);
|
||
|
||
//「RSI_Gyakubari_Entry_Entry_Line=70」の場合、RSIが30以下になったら買い
|
||
if (RSI0 <= 100 - RSI_Gyakubari_Line && RSI1 > 100 - RSI_Gyakubari_Line)
|
||
// if (RSI0 >= 100 - RSI_Gyakubari_Line && RSI1 < 100 - RSI_Gyakubari_Line)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// 「RSI_Gyakubari_Entry_Entry_Line=70」の場合、RSIが70以上になったら売り
|
||
else if (RSI0 >= RSI_Gyakubari_Line && RSI1 < RSI_Gyakubari_Line)
|
||
// else if (RSI0 <= RSI_Gyakubari_Line && RSI1 > RSI_Gyakubari_Line)
|
||
{
|
||
return(0);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
//エントリールール1を差し替える時は、ココマデを差し替えて下さい。
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター1 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter1_1()
|
||
{
|
||
//エントリーフィルター1を差し替える時は、下記を差し替えて下さい。
|
||
//ローソク足が、移動平均線を上抜いたら「買い」、下抜いたら「売り」
|
||
double MA1 = iMA(NULL, PERIOD_M5, MA_Break_period, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
double MA2 = iMA(NULL, PERIOD_M5, MA_Break_period, 0, MODE_SMA, PRICE_CLOSE, 2);
|
||
|
||
// ローソク足が、移動平均線を上抜いたら「買い」
|
||
if (MA1 < iClose(NULL,PERIOD_M5,1))
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// ローソク足が、移動平均線を下抜いたら「売り」
|
||
else if (MA1 > iClose(NULL,PERIOD_M5,1))
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター1を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター2 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter1_2()
|
||
{
|
||
//エントリーフィルター2を差し替える時は、下記を差し替えて下さい。
|
||
//ローソク足の終値が、ボリンジャーバンドより内側にある時のみ、エントリーすることが可能
|
||
double UpperBB1 = iBands(NULL,PERIOD_M5, F_BB_Period, F_BB_Hensa, 0, PRICE_CLOSE, MODE_UPPER, 1);
|
||
double LowerBB1 = iBands(NULL,PERIOD_M5, F_BB_Period, F_BB_Hensa, 0, PRICE_CLOSE, MODE_LOWER, 1);
|
||
|
||
//ローソク足の終値が、ボリンジャーバンドより内側にある時のみ、エントリーすることが可能
|
||
if(iClose(NULL,PERIOD_M5,1) < UpperBB1 && iClose(NULL,PERIOD_M5,1) > LowerBB1)
|
||
{
|
||
return(3);
|
||
} // エントリー出来る(フィルター)
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター2を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター3 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter1_3()
|
||
{
|
||
//エントリーフィルター3を差し替える時は、下記を差し替えて下さい。
|
||
// ADXがこの数値以下の時のみエントリー出来る
|
||
double ADX = iADX(NULL,PERIOD_M5, ADX_Period, PRICE_CLOSE, MODE_MAIN, 1);
|
||
|
||
if (ADX <= ADX_Filter_Line)
|
||
{
|
||
return(3);
|
||
} // エントリー出来る
|
||
else
|
||
{
|
||
return(0);
|
||
} // エントリー出来ない
|
||
//エントリーフィルター3を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター4 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter1_4()
|
||
{
|
||
//エントリーフィルター4を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// アップトレンドで「買い」
|
||
if ((Trend_Judge() >=2 && Kairi_Judge() <= Kairi_Judge_percent11)|| Kairi_Judge() <= -Kairi_Judge_percent21)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// ダウントレンドで「売り」
|
||
else if ((Trend_Judge()<=1 && Trend_Judge()>= -Kairi_Judge_percent11 )|| Trend_Judge()>= Kairi_Judge_percent21)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
//エントリーフィルター4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター5 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter1_5()
|
||
{
|
||
//エントリーフィルター5を差し替える時は、下記を差し替えて下さい。
|
||
|
||
//エントリーフィルター5を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール1 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule1_1()
|
||
{
|
||
// 決済ルール1を差し替える時は、下記を差し替えて下さい。
|
||
//RSIが指定値以下になったら「買い」、指定値以上になったら「売り」
|
||
double RSI0 = iRSI(NULL,PERIOD_M5, K_RSI_Gyakubari_period, PRICE_CLOSE, 1);
|
||
double RSI1 = iRSI(NULL,PERIOD_M5, K_RSI_Gyakubari_period, PRICE_CLOSE, 2);
|
||
|
||
//「RSI_Gyakubari_Entry_Entry_Line=70」の場合、RSIが30以下になったら買い
|
||
if (RSI0 <= 100 - K_RSI_Gyakubari_Line && RSI1 > 100 - K_RSI_Gyakubari_Line)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// 「RSI_Gyakubari_Entry_Entry_Line=70」の場合、RSIが70以上になったら売り
|
||
else if (RSI0 >= K_RSI_Gyakubari_Line && RSI1 < K_RSI_Gyakubari_Line)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
// 決済ルール1を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール2 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule1_2()
|
||
{
|
||
// 決済ルール2を差し替える時は、下記を差し替えて下さい。
|
||
//ローソク足が、下側のボリンジャーバンドを下抜いたら「買い」、上側のボリンジャーバンドを上抜いたら「売り」
|
||
double UpperBB1 = iBands(NULL,PERIOD_M5, BB_Period, BB_Hensa, 0, PRICE_CLOSE, MODE_UPPER, 1);
|
||
double LowerBB1 = iBands(NULL,PERIOD_M5, BB_Period, BB_Hensa, 0, PRICE_CLOSE, MODE_LOWER, 1);
|
||
double UpperBB2 = iBands(NULL,PERIOD_M5, BB_Period, BB_Hensa, 0, PRICE_CLOSE, MODE_UPPER, 2);
|
||
double LowerBB2 = iBands(NULL,PERIOD_M5 ,BB_Period, BB_Hensa, 0, PRICE_CLOSE, MODE_LOWER, 2);
|
||
|
||
//ローソク足が、下側のボリンジャーバンドを下抜いたら「買い」
|
||
if (iClose(NULL,PERIOD_M5,1) < LowerBB1 && iClose(NULL,PERIOD_M5,2) > LowerBB2)
|
||
{
|
||
return(2);
|
||
} // 買い
|
||
//ローソク足が、上側のボリンジャーバンドを上抜いたら「売り」
|
||
else if (iClose(NULL,PERIOD_M5,1) > UpperBB1 && iClose(NULL,PERIOD_M5,2) < UpperBB2)
|
||
{
|
||
return(1);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
// 決済ルール2を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール3 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule1_3()
|
||
{
|
||
// 決済ルール3を差し替える時は、下記を差し替えて下さい。
|
||
//下側エンベロープに終値がタッチで「買い」、上側にタッチで「売り」
|
||
double UpperEnvelopes1 = iEnvelopes(NULL,PERIOD_M5, Envelopes_Period, MODE_SMA, 0, PRICE_CLOSE, Envelopes_Deviation, MODE_UPPER, 1);
|
||
double LowerEnvelopes1 = iEnvelopes(NULL,PERIOD_M5, Envelopes_Period, MODE_SMA, 0, PRICE_CLOSE, Envelopes_Deviation, MODE_LOWER, 1);
|
||
double UpperEnvelopes2 = iEnvelopes(NULL,PERIOD_M5, Envelopes_Period, MODE_SMA, 0, PRICE_CLOSE, Envelopes_Deviation, MODE_UPPER, 2);
|
||
double LowerEnvelopes2 = iEnvelopes(NULL,PERIOD_M5, Envelopes_Period, MODE_SMA, 0, PRICE_CLOSE, Envelopes_Deviation, MODE_LOWER, 2);
|
||
|
||
//下側エンベロープに終値がタッチで「買い」
|
||
// if(iClose(NULL,EA_PERIOD,1) > LowerEnvelopes1 && iClose(NULL,EA_PERIOD,2) < LowerEnvelopes2)
|
||
if(iClose(NULL,PERIOD_M5,1) > LowerEnvelopes1 && iClose(NULL,PERIOD_M5,2) < LowerEnvelopes2)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
//上側エンベロープに終値がタッチで「売り」
|
||
else if(iClose(NULL,PERIOD_M5,1) < UpperEnvelopes1 && iClose(NULL,PERIOD_M5,2) > UpperEnvelopes2)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
// 決済ルール3を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール4 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule1_4()
|
||
{
|
||
// 決済ルール4を差し替える時は、下記を差し替えて下さい。
|
||
// RSIが指定値以上にいる間は「買い」、指定値以下にいる間は「売り」
|
||
double RSI0 = iRSI(NULL, PERIOD_M5, RSI_Junbari_Filter_period, PRICE_CLOSE, 1);
|
||
|
||
// RSIが指定値以上にいる間は「買い」
|
||
if (RSI0 >= RSI_Junbari_Filter_Line)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// RSIが指定値以下にいる間は「売り」
|
||
else if (RSI0 <= 100 - RSI_Junbari_Filter_Line)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
// 決済ルール4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール5 (ロジック1) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule1_5()
|
||
{
|
||
// 決済ルール5を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール5を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
//+------------------------------------------------------------------+
|
||
//| ロジック1 ここまで |
|
||
//+------------------------------------------------------------------+
|
||
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| ロジック2 |
|
||
//+------------------------------------------------------------------+
|
||
//+------------------------------------------------------------------+
|
||
//| エントリールール1 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Rule2_1()
|
||
{
|
||
//エントリールール1を差し替える時は、下記を差し替えて下さい。
|
||
// 移動平均線のゴールデンクロスとデッドクロス
|
||
double MA11 = iMA(NULL,PERIOD_M15, MA_Cross_period1, 0, MODE_SMA, PRICE_CLOSE, 2);
|
||
double MA10 = iMA(NULL,PERIOD_M15, MA_Cross_period1, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
double MA21 = iMA(NULL,PERIOD_M15, MA_Cross_period2, 0, MODE_SMA, PRICE_CLOSE, 2);
|
||
double MA20 = iMA(NULL,PERIOD_M15, MA_Cross_period2, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
|
||
// 短期移動平均線が長期移動平均線を上抜け(ゴールデンクロス)で「買い」
|
||
if (MA11 < MA21 && MA10 >= MA20)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// 短期移動平均線が長期移動平均線を下抜け(デッドクロス)で「売り」
|
||
else if(MA11 > MA21 && MA10 <= MA20)
|
||
{
|
||
return(0);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
//エントリールール1を差し替える時は、ココマデを差し替えて下さい。
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター1 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter2_1()
|
||
{
|
||
//エントリーフィルター1を差し替える時は、下記を差し替えて下さい。
|
||
//ローソク足の終値が、ボリンジャーバンドより内側にある時のみ、エントリーすることが可能
|
||
double UpperBB1 = iBands(NULL,PERIOD_M15, F_BB_Period2, F_BB_Hensa2, 0, PRICE_CLOSE, MODE_UPPER, 1);
|
||
double LowerBB1 = iBands(NULL,PERIOD_M15, F_BB_Period2, F_BB_Hensa2, 0, PRICE_CLOSE, MODE_LOWER, 1);
|
||
|
||
//ローソク足の終値が、ボリンジャーバンドより内側にある時のみ、エントリーすることが可能
|
||
if(iClose(NULL,PERIOD_M15,1) < UpperBB1 && iClose(NULL,PERIOD_M15,1) > LowerBB1)
|
||
{
|
||
return(3);
|
||
} // エントリー出来る(フィルター)
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター1を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター2 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter2_2()
|
||
{
|
||
//エントリーフィルター2を差し替える時は、下記を差し替えて下さい。
|
||
//RSIが指定値以下にいる間は「買い」、指定値以上にいる間は「売り」
|
||
double RSI0 = iRSI(NULL,PERIOD_M15, RSI_Filter_period, PRICE_CLOSE, 1);
|
||
|
||
// RSIが指定値以下にいる間は「買い」
|
||
if (RSI0 <= 100 - RSI_Filter_Line)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// RSIが指定値以上にいる間は「売り」
|
||
else if (RSI0 >= RSI_Filter_Line)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター2を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター3 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter2_3()
|
||
{
|
||
//エントリーフィルター3を差し替える時は、下記を差し替えて下さい。
|
||
//短期移動平均線が長期移動平均線の上にいる間は「買い」、下にいる間は「売り」
|
||
double MA10 = iMA(NULL,PERIOD_M15, F_MA_Cross_period1, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
double MA20 = iMA(NULL,PERIOD_M15, F_MA_Cross_period2, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
|
||
// 短期移動平均線が長期移動平均線の上にいる間は「買い」
|
||
if (MA10 >= MA20)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// 短期移動平均線が長期移動平均線の下にいる間は「売り」
|
||
else if (MA10 <= MA20)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター3を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター4 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter2_4()
|
||
{
|
||
//エントリーフィルター4を差し替える時は、下記を差し替えて下さい。
|
||
// ADXがこの数値以下の時のみエントリー出来る
|
||
double ADX = iADX(NULL,PERIOD_M15, ADX_Period2, PRICE_CLOSE, MODE_MAIN, 1);
|
||
|
||
if (ADX <= ADX_Filter_Line2)
|
||
{
|
||
return(3);
|
||
} // エントリー出来る
|
||
else
|
||
{
|
||
return(0);
|
||
} // エントリー出来ない
|
||
//エントリーフィルター4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター5 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter2_5()
|
||
{
|
||
//エントリーフィルター5を差し替える時は、下記を差し替えて下さい。
|
||
// ATRが指定値以下の時のみエントリー出来る
|
||
double ATR = iATR(NULL,PERIOD_M15, ATR_Period, 1);
|
||
|
||
if (ATR <= ATR_Filter_Line)
|
||
{
|
||
return(3);
|
||
} // エントリー出来る
|
||
else
|
||
{
|
||
return(0);
|
||
} // エントリー出来ない
|
||
//エントリーフィルター5を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター6 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter2_6()
|
||
{
|
||
//エントリーフィルター4を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// アップトレンドで「買い」
|
||
if ((Trend_Judge() >=2 && Kairi_Judge() <= Kairi_Judge_percent12)|| Kairi_Judge() <= -Kairi_Judge_percent22)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// ダウントレンドで「売り」
|
||
else if ((Trend_Judge()<=1 && Trend_Judge()>= -Kairi_Judge_percent12 )|| Trend_Judge()>= Kairi_Judge_percent22)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
//エントリーフィルター4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール1 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule2_1()
|
||
{
|
||
// 決済ルール1を差し替える時は、下記を差し替えて下さい。
|
||
// 移動平均線のゴールデンクロスとデッドクロス
|
||
double MA11 = iMA(NULL,PERIOD_M15, MA_Cross_period1, 0, MODE_SMA, PRICE_CLOSE, 2);
|
||
double MA10 = iMA(NULL,PERIOD_M15, MA_Cross_period1, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
double MA21 = iMA(NULL,PERIOD_M15, MA_Cross_period2, 0, MODE_SMA, PRICE_CLOSE, 2);
|
||
double MA20 = iMA(NULL,PERIOD_M15, 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);
|
||
}
|
||
|
||
// 決済ルール1を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール2 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule2_2()
|
||
{
|
||
// 決済ルール2を差し替える時は、下記を差し替えて下さい。
|
||
//ローソク足が、下側のボリンジャーバンドを下抜いたら「買い」、上側のボリンジャーバンドを上抜いたら「売り」
|
||
double UpperBB1 = iBands(NULL,PERIOD_M15, BB_Period2, BB_Hensa2, 0, PRICE_CLOSE, MODE_UPPER, 1);
|
||
double LowerBB1 = iBands(NULL,PERIOD_M15, BB_Period2, BB_Hensa2, 0, PRICE_CLOSE, MODE_LOWER, 1);
|
||
double UpperBB2 = iBands(NULL,PERIOD_M15, BB_Period2, BB_Hensa2, 0, PRICE_CLOSE, MODE_UPPER, 2);
|
||
double LowerBB2 = iBands(NULL,PERIOD_M15 ,BB_Period2, BB_Hensa2, 0, PRICE_CLOSE, MODE_LOWER, 2);
|
||
|
||
//ローソク足が、下側のボリンジャーバンドを下抜いたら「買い」
|
||
if (iClose(NULL,PERIOD_M15,1) < LowerBB1 && iClose(NULL,PERIOD_M15,2) > LowerBB2)
|
||
{
|
||
return(2);
|
||
} // 買い
|
||
//ローソク足が、上側のボリンジャーバンドを上抜いたら「売り」
|
||
else if (iClose(NULL,PERIOD_M15,1) > UpperBB1 && iClose(NULL,PERIOD_M15,2) < UpperBB2)
|
||
{
|
||
return(1);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
// 決済ルール2を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール3 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule2_3()
|
||
{
|
||
// 決済ルール3を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール3を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール4 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule2_4()
|
||
{
|
||
// 決済ルール4を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール5 (ロジック2) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule2_5()
|
||
{
|
||
// 決済ルール5を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール5を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
//+------------------------------------------------------------------+
|
||
//| ロジック2 ここまで |
|
||
//+------------------------------------------------------------------+
|
||
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| ロジック3 |
|
||
//+------------------------------------------------------------------+
|
||
//+------------------------------------------------------------------+
|
||
//| エントリールール1 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Rule3_1()
|
||
{
|
||
//エントリールール1を差し替える時は、下記を差し替えて下さい。
|
||
// MACD線がシグナル線より下の間は「買い」/上の間は「売り」
|
||
double MACD_MAIN0 = iMACD(NULL,PERIOD_M30, Fast_EMA_period, Slow_EMA_period, Signal_period, PRICE_CLOSE, MODE_MAIN, 1); // 現在のMACD線
|
||
double MACD_SIGN0 = iMACD(NULL,PERIOD_M30, Fast_EMA_period, Slow_EMA_period, Signal_period, PRICE_CLOSE, MODE_SIGNAL, 1); // 現在のシグナル線
|
||
double MACD_SIGN1 = iMACD(NULL,PERIOD_M30, Fast_EMA_period, Slow_EMA_period, Signal_period, PRICE_CLOSE, MODE_SIGNAL, 2); // 過去のシグナル線
|
||
|
||
// MACD線がシグナル線より下の間は「買い」
|
||
if ( 0 < MACD_SIGN0 && 0 > MACD_SIGN1)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// MACD線がシグナル線より上の間は「売り」
|
||
else if (0 > MACD_SIGN0 && 0 < MACD_SIGN1)
|
||
{
|
||
return(0);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
//エントリールール1を差し替える時は、ココマデを差し替えて下さい。
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター1 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter3_1()
|
||
{
|
||
//エントリーフィルター1を差し替える時は、下記を差し替えて下さい。
|
||
//ボリンジャーバンドの幅(上側ボリンジャーバンド―下側ボリンジャーバンドの値)が、指定%以下の時にエントリーすることが可能
|
||
double UpperBB1 = iBands(NULL,PERIOD_M30, F_BB_Period3, F_BB_Hensa3, 0, PRICE_CLOSE, MODE_UPPER, 1);
|
||
double LowerBB1 = iBands(NULL,PERIOD_M30, F_BB_Period3, F_BB_Hensa3, 0, PRICE_CLOSE, MODE_LOWER, 1);
|
||
|
||
//ボリンジャーバンドの幅(上側ボリンジャーバンド―下側ボリンジャーバンドの値)が、指定%以下の時にエントリーすることが可能
|
||
if( (UpperBB1 - LowerBB1) / iClose(NULL,PERIOD_M30,1) * 100.0 <= F_BB_HabaFilter_percent3)
|
||
{
|
||
return(3);
|
||
} // エントリー出来る(フィルター)
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター1を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター2 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter3_2()
|
||
{
|
||
//エントリーフィルター2を差し替える時は、下記を差し替えて下さい。
|
||
// CCIの傾き方向に順張りエントリー
|
||
double CCI0 = iCCI(NULL,PERIOD_M30, CCI_period, PRICE_CLOSE, 1);
|
||
double CCI1 = iCCI(NULL,PERIOD_M30, CCI_period, PRICE_CLOSE, 2);
|
||
|
||
// CCIが上向きで買い
|
||
if (CCI0 > CCI1)
|
||
{
|
||
return(2);
|
||
} // 買い
|
||
// CCIが下向きで売り
|
||
else if (CCI0 < CCI1)
|
||
{
|
||
return(1);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター2を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター3 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter3_3()
|
||
{
|
||
//エントリーフィルター3を差し替える時は、下記を差し替えて下さい。
|
||
// アップトレンドで「買い」
|
||
if ((Trend_Judge() >=2 && Kairi_Judge() <= Kairi_Judge_percent13)|| Kairi_Judge() <= -Kairi_Judge_percent23)
|
||
// if ((Trend_Judge() >=1 && Kairi_Judge() <= Kairi_Judge_percent13)|| Kairi_Judge() <= -Kairi_Judge_percent23)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// ダウントレンドで「売り」
|
||
else if ((Trend_Judge()<=1 && Trend_Judge()>= -Kairi_Judge_percent13 )|| Trend_Judge()>= Kairi_Judge_percent23)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター3を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター4 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter3_4()
|
||
{
|
||
//エントリーフィルター4を差し替える時は、下記を差し替えて下さい。
|
||
|
||
//エントリーフィルター4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター5 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter3_5()
|
||
{
|
||
//エントリーフィルター5を差し替える時は、下記を差し替えて下さい。
|
||
|
||
//エントリーフィルター5を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール1 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule3_1()
|
||
{
|
||
// 決済ルール1を差し替える時は、下記を差し替えて下さい。
|
||
// MACD線がシグナル線より下の間は「買い」/上の間は「売り」
|
||
double MACD_MAIN0 = iMACD(NULL,PERIOD_M30, Fast_EMA_period, Slow_EMA_period, Signal_period, PRICE_CLOSE, MODE_MAIN, 1); // 現在のMACD線
|
||
double MACD_SIGN0 = iMACD(NULL,PERIOD_M30, Fast_EMA_period, Slow_EMA_period, Signal_period, PRICE_CLOSE, MODE_SIGNAL, 1); // 現在のシグナル線
|
||
double MACD_SIGN1 = iMACD(NULL,PERIOD_M30, Fast_EMA_period, Slow_EMA_period, Signal_period, PRICE_CLOSE, MODE_SIGNAL, 2); // 過去のシグナル線
|
||
|
||
// MACD線がシグナル線より下の間は「買い」
|
||
if ( 0 < MACD_SIGN0 && 0 > MACD_SIGN1)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// MACD線がシグナル線より上の間は「売り」
|
||
else if (0 > MACD_SIGN0 && 0 < MACD_SIGN1)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
// 決済ルール1を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール2 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule3_2()
|
||
{
|
||
// 決済ルール2を差し替える時は、下記を差し替えて下さい。
|
||
// パラボリックSARが、ローソク足の下側にきたら(上向きの傾きになったら)「買い」
|
||
// パラボリックSARが、ローソク足の上側にきたら(下向きの傾きになったら)「売り」
|
||
double SAR1 = iSAR(NULL,PERIOD_M30, SAR_Entry_Step, SAR_Entry_Maximum, 1);
|
||
double SAR2 = iSAR(NULL,PERIOD_M30, SAR_Entry_Step, SAR_Entry_Maximum, 2);
|
||
|
||
//パラボリックSARが、ローソク足の下側にきたら(上向きの傾きになったら)「買い」
|
||
if (SAR1 < iClose(NULL,PERIOD_M30,1) && iClose(NULL,PERIOD_M30,2) < SAR2)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// パラボリックSARが、ローソク足の上側にきたら(下向きの傾きになったら)「売り」
|
||
else if (SAR1 > iClose(NULL,PERIOD_M30,1) && iClose(NULL,PERIOD_M30,2) > SAR2)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
// 決済ルール2を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール3 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule3_3()
|
||
{
|
||
// 決済ルール3を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール3を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール4 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule3_4()
|
||
{
|
||
// 決済ルール4を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール5 (ロジック3) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule3_5()
|
||
{
|
||
// 決済ルール5を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール5を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
//+------------------------------------------------------------------+
|
||
//| ロジック3 ここまで |
|
||
//+------------------------------------------------------------------+
|
||
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| ロジック4 |
|
||
//+------------------------------------------------------------------+
|
||
//+------------------------------------------------------------------+
|
||
//| エントリールール1 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Rule4_1()
|
||
{
|
||
//エントリールール1を差し替える時は、下記を差し替えて下さい。
|
||
// パラボリックSARが、ローソク足の下側にきたら(上向きの傾きになったら)「買い」
|
||
// パラボリックSARが、ローソク足の上側にきたら(下向きの傾きになったら)「売り」
|
||
double SAR1 = iSAR(NULL,PERIOD_H1, SAR_Entry_Step4, SAR_Entry_Maximum4, 1);
|
||
double SAR2 = iSAR(NULL,PERIOD_H1, SAR_Entry_Step4, SAR_Entry_Maximum4, 2);
|
||
|
||
//パラボリックSARが、ローソク足の下側にきたら(上向きの傾きになったら)「買い」
|
||
if (SAR1 < iClose(NULL,PERIOD_H1,1) && iClose(NULL,PERIOD_H1,2) < SAR2)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// パラボリックSARが、ローソク足の上側にきたら(下向きの傾きになったら)「売り」
|
||
else if (SAR1 > iClose(NULL,PERIOD_H1,1) && iClose(NULL,PERIOD_H1,2) > SAR2)
|
||
{
|
||
return(0);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
//エントリールール1を差し替える時は、ココマデを差し替えて下さい。
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター1 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter4_1()
|
||
{
|
||
//エントリーフィルター1を差し替える時は、下記を差し替えて下さい。
|
||
// アップトレンドで「買い」
|
||
if ((Trend_Judge() >=2 && Kairi_Judge() <= Kairi_Judge_percent14)|| Kairi_Judge() <= -Kairi_Judge_percent24)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// ダウントレンドで「売り」
|
||
else if ((Trend_Judge()<=1 && Trend_Judge()>= -Kairi_Judge_percent14 )|| Trend_Judge()>= Kairi_Judge_percent24)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター1を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター2 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter4_2()
|
||
{
|
||
//エントリーフィルター2を差し替える時は、下記を差し替えて下さい。
|
||
//ボリンジャーバンドの幅(上側ボリンジャーバンド―下側ボリンジャーバンドの値)が、指定%以下の時にエントリーすることが可能
|
||
double UpperBB1 = iBands(NULL,PERIOD_H1, BB_Period4, BB_Hensa4, 0, PRICE_CLOSE, MODE_UPPER, 1);
|
||
double LowerBB1 = iBands(NULL,PERIOD_H1, BB_Period4, BB_Hensa4, 0, PRICE_CLOSE, MODE_LOWER, 1);
|
||
|
||
//ボリンジャーバンドの幅(上側ボリンジャーバンド―下側ボリンジャーバンドの値)が、指定%以下の時にエントリーすることが可能
|
||
if( (UpperBB1 - LowerBB1) / iClose(NULL,PERIOD_H1,1) * 100.0 <= BB_HabaFilter_percent4)
|
||
{
|
||
return(3);
|
||
} // エントリー出来る(フィルター)
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
//エントリーフィルター2を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター3 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter4_3()
|
||
{
|
||
//エントリーフィルター3を差し替える時は、下記を差し替えて下さい。
|
||
|
||
//エントリーフィルター3を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター4 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter4_4()
|
||
{
|
||
//エントリーフィルター4を差し替える時は、下記を差し替えて下さい。
|
||
|
||
//エントリーフィルター4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| エントリーフィルター5 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Entry_Filter4_5()
|
||
{
|
||
//エントリーフィルター5を差し替える時は、下記を差し替えて下さい。
|
||
|
||
//エントリーフィルター5を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール1 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule4_1()
|
||
{
|
||
// 決済ルール1を差し替える時は、下記を差し替えて下さい。
|
||
// パラボリックSARが、ローソク足の下側にきたら(上向きの傾きになったら)「買い」
|
||
// パラボリックSARが、ローソク足の上側にきたら(下向きの傾きになったら)「売り」
|
||
double SAR1 = iSAR(NULL,PERIOD_H1, K_SAR_Entry_Step4, SAR_Entry_Maximum4, 1);
|
||
double SAR2 = iSAR(NULL,PERIOD_H1, K_SAR_Entry_Step4, SAR_Entry_Maximum4, 2);
|
||
|
||
//パラボリックSARが、ローソク足の下側にきたら(上向きの傾きになったら)「買い」
|
||
if (SAR1 < iClose(NULL,PERIOD_H1,1) && iClose(NULL,PERIOD_H1,2) < SAR2)
|
||
{
|
||
return(1);
|
||
} // 買い
|
||
// パラボリックSARが、ローソク足の上側にきたら(下向きの傾きになったら)「売り」
|
||
else if (SAR1 > iClose(NULL,PERIOD_H1,1) && iClose(NULL,PERIOD_H1,2) > SAR2)
|
||
{
|
||
return(2);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
|
||
// 決済ルール1を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール2 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule4_2()
|
||
{
|
||
// 決済ルール2を差し替える時は、下記を差し替えて下さい。
|
||
//ボリンジャーバンド1の-2σがボリンジャーバンド2の-2σを下抜けで「売り」
|
||
//ボリンジャーバンド1の+2σがボリンジャーバンド2の+2σを上抜けで「買い」
|
||
double UpperBB11 = iBands(NULL,PERIOD_H1, K_BB_Period14, K_BB_Hensa14, 0, PRICE_CLOSE, MODE_UPPER, 1);
|
||
double LowerBB11 = iBands(NULL,PERIOD_H1, K_BB_Period14, K_BB_Hensa14, 0, PRICE_CLOSE, MODE_LOWER, 1);
|
||
double UpperBB12 = iBands(NULL,PERIOD_H1, K_BB_Period14, K_BB_Hensa14, 0, PRICE_CLOSE, MODE_UPPER, 2);
|
||
double LowerBB12 = iBands(NULL,PERIOD_H1 ,K_BB_Period14, K_BB_Hensa14, 0, PRICE_CLOSE, MODE_LOWER, 2);
|
||
double UpperBB21 = iBands(NULL,PERIOD_H1, K_BB_Period24, K_BB_Hensa24, 0, PRICE_CLOSE, MODE_UPPER, 1);
|
||
double LowerBB21 = iBands(NULL,PERIOD_H1, K_BB_Period24, K_BB_Hensa24, 0, PRICE_CLOSE, MODE_LOWER, 1);
|
||
double UpperBB22 = iBands(NULL,PERIOD_H1, K_BB_Period24, K_BB_Hensa24, 0, PRICE_CLOSE, MODE_UPPER, 2);
|
||
double LowerBB22 = iBands(NULL,PERIOD_H1 ,K_BB_Period24, K_BB_Hensa24, 0, PRICE_CLOSE, MODE_LOWER, 2);
|
||
|
||
//ボリンジャーバンド1の+2σがボリンジャーバンド2の+2σを上抜けで「売り」
|
||
if (UpperBB12 < UpperBB22 && UpperBB11 >= UpperBB21)
|
||
{
|
||
return(2);
|
||
} // 買い
|
||
//ボリンジャーバンド1の-2σがボリンジャーバンド2の-2σを下抜けで「買い」
|
||
else if (LowerBB12 < LowerBB22 && LowerBB11 >= LowerBB21)
|
||
{
|
||
return(1);
|
||
} // 売り
|
||
else
|
||
{
|
||
return(0);
|
||
}
|
||
// 決済ルール2を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール3 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule4_3()
|
||
{
|
||
// 決済ルール3を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール3を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール4 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule4_4()
|
||
{
|
||
// 決済ルール4を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール4を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 決済ルール5 (ロジック4) |
|
||
//+------------------------------------------------------------------+
|
||
int Exit_Rule4_5()
|
||
{
|
||
// 決済ルール5を差し替える時は、下記を差し替えて下さい。
|
||
|
||
// 決済ルール5を差し替える時は、ココマデを差し替えて下さい。
|
||
return(3);
|
||
}
|
||
//+------------------------------------------------------------------+
|
||
//+------------------------------------------------------------------+
|
||
//| ロジック4 ここまで |
|
||
//+------------------------------------------------------------------+
|
||
|
||
//Label関数
|
||
void label(string name, string text, int x, int y, int font, int fontsize,ENUM_BASE_CORNER corner,ENUM_ANCHOR_POINT anchor){
|
||
ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
|
||
ObjectSetString(0, name, OBJPROP_TEXT, text);
|
||
ObjectSetInteger(0, name, OBJPROP_COLOR, clrLightGray);
|
||
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
|
||
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
|
||
ObjectSetString(0, name, OBJPROP_FONT, font == 1 ? "Times New Roman" : "MS 明朝");
|
||
ObjectSetInteger(0, name, OBJPROP_FONTSIZE, fontsize );
|
||
ObjectSetInteger(0, name, OBJPROP_CORNER, corner);
|
||
ObjectSetInteger(0, name, OBJPROP_ANCHOR, anchor);
|
||
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x );
|
||
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y );
|
||
ObjectSetInteger(0, name, OBJPROP_STATE, false);
|
||
ObjectSetInteger(0, name, OBJPROP_BACK, false);
|
||
return;
|
||
}
|
||
void HistoryEarnPips(int magicnumber){
|
||
double totalpips1 = 0;
|
||
double totalpips2 = 0;
|
||
bool flag = false;
|
||
int res;
|
||
//ObjectsDeleteAll(0, "EarnPips");
|
||
// datetime MT1=iTime(NULL,PERIOD_MN1,0);
|
||
for(int i = OrdersHistoryTotal() - 1; i >= 0; i--){
|
||
res = OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
|
||
if(res == false)continue;
|
||
//if(OrderCloseTime()< MT1)continue;
|
||
if(OrderSymbol() != Symbol() || OrderType() > 1 || OrderMagicNumber() != magicnumber)continue;
|
||
totalpips1 += EarnPipsLine(OrderTicket(),OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice(),OrderType());
|
||
}
|
||
ObjectSetString(0,"TotalEarnPips"+IntegerToString(magicnumber),OBJPROP_TEXT, IntegerToString(magicnumber)+" : "+DoubleToString(totalpips1, 1));
|
||
ObjectSetInteger(0,"TotalEarnPips"+IntegerToString(magicnumber), OBJPROP_COLOR, clrWhite);
|
||
|
||
for(int i = OrdersTotal() - 1; i >= 0; i--){
|
||
res = OrderSelect(i, SELECT_BY_POS);
|
||
if(res == false)continue;
|
||
if(OrderSymbol() != Symbol() || OrderType() > 1 || OrderMagicNumber() != magicnumber)continue;
|
||
totalpips2 += EarnPipsLine(OrderTicket(),OrderOpenTime(),OrderOpenPrice(),Time[0], OrderType() == 0 ? Bid : Ask,OrderType());
|
||
flag = true;
|
||
}
|
||
if(flag){
|
||
ObjectSetString(0,"TotalEarnPips"+IntegerToString(magicnumber),OBJPROP_TEXT,"Holding position "+IntegerToString(magicnumber)+" : "+DoubleToString(totalpips1, 1));
|
||
ObjectSetInteger(0,"TotalEarnPips"+IntegerToString(magicnumber), OBJPROP_COLOR, clrYellow);
|
||
}
|
||
}
|
||
|
||
double EarnPipsLine(int ticket, datetime opentime, double openprice, datetime closetime, double closeprice, int type){
|
||
double pips = (type == 0 ? closeprice - openprice : openprice - closeprice) / Point() * 0.1 ;
|
||
ObjectDelete("EarnPipsLine" + IntegerToString(ticket));
|
||
ObjectCreate(0,"EarnPipsLine" + IntegerToString(ticket), OBJ_TREND, 0, opentime, openprice, closetime, closeprice);
|
||
ObjectSetInteger(0, "EarnPipsLine" + IntegerToString(ticket), OBJPROP_RAY_RIGHT, false);
|
||
ObjectSetInteger(0, "EarnPipsLine" + IntegerToString(ticket), OBJPROP_COLOR, type == 0 ? clrAqua : clrAqua);
|
||
ObjectSetInteger(0, "EarnPipsLine" + IntegerToString(ticket), OBJPROP_SELECTABLE, false);
|
||
ObjectDelete("EarnPipsText" + IntegerToString(ticket));
|
||
ObjectCreate(0, "EarnPipsText" + IntegerToString(ticket), OBJ_TEXT, 0, (datetime)(((double)closetime - (double)opentime) * 0.8+(double)opentime), (closeprice-openprice) * 0.8+(openprice) );
|
||
ObjectSetInteger(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_COLOR, pips < 0 ? clrYellow : type == 0 ? clrAqua : clrAqua);
|
||
ObjectSetInteger(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_SELECTABLE, false);
|
||
ObjectSetInteger(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_FONTSIZE, 11);
|
||
ObjectSetInteger(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_ANCHOR, ANCHOR_CENTER);
|
||
ObjectSetString(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_TEXT, DoubleToString(pips, 1));
|
||
ObjectSetString(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_FONT, "Arial Black");
|
||
return(pips);
|
||
}
|
||
void SetChart(){
|
||
ChartSetInteger(0, CHART_SHOW_DATE_SCALE, true);
|
||
ChartSetInteger(0, CHART_SHOW_PRICE_SCALE, true);
|
||
ChartSetInteger(0, CHART_FOREGROUND, false);
|
||
ChartSetInteger(0, CHART_SHOW_GRID, false);
|
||
ChartSetInteger(0, CHART_SHOW_ONE_CLICK, false);
|
||
ChartSetInteger(0, CHART_SHOW_OHLC, true);
|
||
ChartSetInteger(0, CHART_COLOR_FOREGROUND, clrLightGray);
|
||
ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrBlack);
|
||
ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, clrBlack);
|
||
ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, clrDarkGray);
|
||
ChartSetInteger(0, CHART_COLOR_CHART_DOWN, clrDimGray);
|
||
ChartSetInteger(0, CHART_COLOR_CHART_UP, clrDimGray);
|
||
ChartSetInteger(0, CHART_COLOR_CHART_LINE, clrDimGray);
|
||
ChartSetInteger(0, CHART_SHIFT, true);
|
||
ChartSetInteger(0, CHART_SCALE, 2);
|
||
ChartSetInteger(0, CHART_MODE, CHART_CANDLES);
|
||
}
|
||
|
||
int Count_Position(int magic){
|
||
int CountBuy = 0;
|
||
int CountSell = 0;
|
||
// ポジションの数をカウントする
|
||
for(int 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() != magic) continue;
|
||
|
||
if (OrderType() == OP_BUY)
|
||
{
|
||
CountBuy = CountBuy + 1;
|
||
}
|
||
|
||
if (OrderType() == OP_SELL)
|
||
{
|
||
CountSell = CountSell + 1;
|
||
}
|
||
}
|
||
return(CountBuy+CountSell);}
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| トレード関数群 |
|
||
//+------------------------------------------------------------------+
|
||
// OrderSendのラッパー関数
|
||
// マーケットの制約に合う形にSL、TPを修正したのち発注し
|
||
// OederSendのエラー時のリトライおよびエラー処理を実施する
|
||
int WrapperOrderSend_L(string symbol, // シンボル
|
||
int cmd, // 注文の種類
|
||
double volume, // ロット
|
||
double price, // 注文価格
|
||
int slippage, // スリッページ
|
||
double stoploss, // StopLoss
|
||
double takeprofit, // TakeProfit
|
||
string comment=NULL, // コメント
|
||
int magic=0, // マジックナンバー
|
||
datetime expiration=0, // 有効期限
|
||
color arrow_color=clrNONE // 矢印のカラー
|
||
)
|
||
{
|
||
int i;
|
||
int err = 0; // エラーNo.
|
||
int res = 0; // OrderSendの戻り値
|
||
|
||
// MAX_ORDER_REPEAT回数だけリトライする
|
||
for ( i=0; i<MAX_ORDER_REPEAT; i++ )
|
||
{
|
||
res = OrderSend(symbol,
|
||
cmd,
|
||
volume,
|
||
Ask,
|
||
slippage,
|
||
NormalizeDouble(stoploss, Digits()),
|
||
NormalizeDouble(takeprofit, Digits()),
|
||
comment,
|
||
magic,
|
||
expiration,
|
||
arrow_color);
|
||
|
||
// オーダー発注に成功した場合、チケットNo.を返し関数を終了する
|
||
if ( res != -1 ) return(res);
|
||
|
||
// オーダー発注に失敗した場合、エラーを表示したのちリトライする
|
||
if ( res == -1 )
|
||
{
|
||
err = GetLastError();
|
||
Print("OrderSend return error: code=",err, ", Error=", ErrorDescription(err));
|
||
// 次のリトライまで500msec待つ
|
||
Sleep(500);
|
||
RefreshRates();
|
||
}
|
||
}
|
||
|
||
return(res);
|
||
}
|
||
|
||
int WrapperOrderSend_S(string symbol, // シンボル
|
||
int cmd, // 注文の種類
|
||
double volume, // ロット
|
||
double price, // 注文価格
|
||
int slippage, // スリッページ
|
||
double stoploss, // StopLoss
|
||
double takeprofit, // TakeProfit
|
||
string comment=NULL, // コメント
|
||
int magic=0, // マジックナンバー
|
||
datetime expiration=0, // 有効期限
|
||
color arrow_color=clrNONE // 矢印のカラー
|
||
)
|
||
{
|
||
int i;
|
||
int err = 0; // エラーNo.
|
||
int res = 0; // OrderSendの戻り値
|
||
|
||
// MAX_ORDER_REPEAT回数だけリトライする
|
||
for ( i=0; i<MAX_ORDER_REPEAT; i++ )
|
||
{
|
||
res = OrderSend(symbol,
|
||
cmd,
|
||
volume,
|
||
Bid,
|
||
slippage,
|
||
NormalizeDouble(stoploss, Digits()),
|
||
NormalizeDouble(takeprofit, Digits()),
|
||
comment,
|
||
magic,
|
||
expiration,
|
||
arrow_color);
|
||
|
||
// オーダー発注に成功した場合、チケットNo.を返し関数を終了する
|
||
if ( res != -1 ) return(res);
|
||
|
||
// オーダー発注に失敗した場合、エラーを表示したのちリトライする
|
||
if ( res == -1 )
|
||
{
|
||
err = GetLastError();
|
||
Print("OrderSend return error: code=",err, ", Error=", ErrorDescription(err));
|
||
// 次のリトライまで500msec待つ
|
||
Sleep(500);
|
||
RefreshRates();
|
||
}
|
||
}
|
||
|
||
return(res);
|
||
}
|
||
// OrderModifyのラッパー関数
|
||
// マーケットの制約に合う形にSL、TPを修正したのち発注し
|
||
// OederModifyのエラー時のリトライおよびエラー処理を実施する
|
||
bool WrapperOrderModify(int ticket, // チケットナンバー
|
||
double price, // 注文価格
|
||
double stoploss, // StopLoss
|
||
double takeprofit, // TakeProfit
|
||
datetime expiration, // 有効期限
|
||
color arrow_color // 矢印のカラー
|
||
)
|
||
{
|
||
int i;
|
||
int err = 0; // エラーNo.
|
||
bool res = false; // OrderModifyの戻り値
|
||
|
||
// MAX_ORDER_REPEAT回数だけリトライする
|
||
for ( i=0; i<MAX_ORDER_REPEAT; i++ )
|
||
{
|
||
res = OrderModify(ticket,
|
||
NormalizeDouble(price, Digits()),
|
||
NormalizeDouble(stoploss, Digits()),
|
||
NormalizeDouble(takeprofit, Digits()),
|
||
expiration,
|
||
arrow_color);
|
||
|
||
// オーダー発注に成功した場合、終了フラグを返す
|
||
if (res) return(res);
|
||
|
||
// オーダー発注に失敗した場合、エラーを表示したのちリトライする
|
||
if ( !res )
|
||
{
|
||
err = GetLastError();
|
||
Print("OrderModify return error: code=",err, ", Error=", ErrorDescription(err));
|
||
// 次のリトライまで500msec待つ
|
||
Sleep(500);
|
||
RefreshRates();
|
||
}
|
||
}
|
||
|
||
return(res);
|
||
}
|
||
|
||
// OrderCloseのラッパー関数
|
||
// マーケットの制約に合う形にSL、TPを修正したのち発注し
|
||
// OederCloseのエラー時のリトライおよびエラー処理を実施する
|
||
bool WrapperOrderClose_L(int ticket, // チケットナンバー
|
||
double lots, // ロットサイズ
|
||
double price, // 注文価格
|
||
int slippage, // スリッページ
|
||
color arrow_color // 矢印のカラー
|
||
)
|
||
{
|
||
int i;
|
||
int err = 0; // エラーNo.
|
||
bool res = false; // OrderCloseの戻り値
|
||
|
||
// MAX_ORDER_REPEAT回数だけリトライする
|
||
for ( i=0; i<MAX_ORDER_REPEAT; i++ )
|
||
{
|
||
res = OrderClose(ticket,
|
||
lots,
|
||
Bid,
|
||
slippage*100,
|
||
arrow_color);
|
||
|
||
// オーダー発注に成功した場合、終了フラグを返す
|
||
if ( res ) return(res);
|
||
|
||
// オーダー発注に失敗した場合、エラーを表示したのちリトライする
|
||
if ( !res )
|
||
{
|
||
err = GetLastError();
|
||
Print("OrderModify return error: code=",err, ", Error=", ErrorDescription(err));
|
||
// 次のリトライまで500msec待つ
|
||
Sleep(500);
|
||
RefreshRates();
|
||
}
|
||
}
|
||
|
||
return(res);
|
||
}
|
||
|
||
bool WrapperOrderClose_S(int ticket, // チケットナンバー
|
||
double lots, // ロットサイズ
|
||
double price, // 注文価格
|
||
int slippage, // スリッページ
|
||
color arrow_color // 矢印のカラー
|
||
)
|
||
{
|
||
int i;
|
||
int err = 0; // エラーNo.
|
||
bool res = false; // OrderCloseの戻り値
|
||
|
||
// MAX_ORDER_REPEAT回数だけリトライする
|
||
for ( i=0; i<MAX_ORDER_REPEAT; i++ )
|
||
{
|
||
res = OrderClose(ticket,
|
||
lots,
|
||
Ask,
|
||
slippage*100,
|
||
arrow_color);
|
||
|
||
// オーダー発注に成功した場合、終了フラグを返す
|
||
if ( res ) return(res);
|
||
|
||
// オーダー発注に失敗した場合、エラーを表示したのちリトライする
|
||
if ( !res )
|
||
{
|
||
err = GetLastError();
|
||
Print("OrderModify return error: code=",err, ", Error=", ErrorDescription(err));
|
||
// 次のリトライまで500msec待つ
|
||
Sleep(500);
|
||
RefreshRates();
|
||
}
|
||
}
|
||
|
||
return(res);
|
||
}
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| ロット数自動計算 |
|
||
//+------------------------------------------------------------------+
|
||
double CalcAutoLot(double LotsIncreaceStep){
|
||
|
||
double AutoLot = 0; // 自動算出ロット数
|
||
double DivideAmt = 0;
|
||
|
||
// 残高とクレジットの合算金額を取得
|
||
double ZCAmount = AccountBalance() + AccountCredit();
|
||
|
||
// ロット数を算出
|
||
if(ZCAmount > 0 && LotsIncreaceAmt > 0){
|
||
AutoLot = RoundDown(ZCAmount/LotsIncreaceAmt,0)*LotsIncreaceStep;
|
||
}else{
|
||
AutoLot = 0;
|
||
}
|
||
|
||
// 算出したロット数の調整
|
||
AutoLot = NormalizeDouble(AutoLot,LotStepDigit);
|
||
if(AutoLot <= MinLot){
|
||
AutoLot = MinLot;
|
||
}else if(AutoLot >= MaxLot){
|
||
AutoLot = MaxLot;
|
||
}
|
||
|
||
return AutoLot;
|
||
}
|
||
|
||
//+------------------------------------------------------------------+
|
||
//| 切り捨てファンクション |
|
||
//+------------------------------------------------------------------+
|
||
double RoundDown(double val,int digit){
|
||
|
||
return ((double)(int)(val * MathPow(10,digit))) / MathPow(10,digit);
|
||
|
||
}
|
||
|
||
|
||
int Trend_Judge()
|
||
{
|
||
double MA_Middle1 = iMA(NULL,PERIOD_H1, 80, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
double MA_Long1 = iMA(NULL,PERIOD_H1,320, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
double MA_Middle2 = iMA(NULL,PERIOD_H1, 80, 0, MODE_SMA, PRICE_CLOSE, 3);
|
||
double MA_Long2 = iMA(NULL,PERIOD_H1,320, 0, MODE_SMA, PRICE_CLOSE, 3);
|
||
int UP_Trend = 0; //アップトレンドを0~3段階評価
|
||
|
||
if (MA_Middle1 > MA_Long1)
|
||
{
|
||
UP_Trend = UP_Trend+1;
|
||
}
|
||
if (MA_Middle1-MA_Middle2 > 0 )
|
||
{
|
||
UP_Trend = UP_Trend+1;
|
||
}
|
||
if (MA_Long1-MA_Long2 > 0)
|
||
{
|
||
UP_Trend = UP_Trend+1;
|
||
}
|
||
return(UP_Trend);
|
||
}
|
||
|
||
double Kairi_Judge()
|
||
{
|
||
// 長期移動平均線に対し短期移動平均線が、指定%以上、上に乖離したら「売り」、下に乖離したら「買い」。
|
||
double MA1 = iMA(NULL,PERIOD_M5, 3, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
double MA2 = iMA(NULL,PERIOD_H1, 320, 0, MODE_SMA, PRICE_CLOSE, 1);
|
||
|
||
double Long_Kairi = (MA1-MA2)/iClose(NULL,PERIOD_M5,1)*100;
|
||
|
||
return(Long_Kairi);
|
||
} |