ロジック内容
短期と長期のどちらの移動平均線が上になっているか判断するオリジナル関数になります( ・Д・)
買い方向に対する確認(Position=1)に長期>短期になっている場合に買い手仕舞いシグナル=1。
売り方向に対する確認(Position=-1)に長期<短期になっている場合に売り手仕舞いシグナル=-1。
それぞれのポジション時の条件に合致しない場合=0。
オリジナル関数
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//移動平均線クロスクローズ int MACrossClose(int Position){ int close=0; double MAS1=iMA(_Symbol,0,Period1,0,Method1,Price1,1); double MAL1=iMA(_Symbol,0,Period2,0,Method2,Price2,1); if(Position==1){ if(MAL1>MAS1)close=1; }else if(Position==-1){ if(MAL1<MAS1)close=-1; } return(close); } |
では解説して行きますね~( ・Д・)
必要なパラメーター設定
このオリジナル関数を使用する為に必要なパラメーターになります。
(MT4導入時のプロパティウインドウから変更出来る内容です)
1 2 3 4 5 6 7 8 |
input string MA1=""; //移動平均線(短期) input int Period1=20; //期間 input ENUM_MA_METHOD Method1=MODE_SMA; //方法 input ENUM_APPLIED_PRICE Price1=PRICE_CLOSE; //価格 input string MA2=""; //移動平均線(長期) input int Period2=50; //期間 input ENUM_MA_METHOD Method2=MODE_SMA; //方法 input ENUM_APPLIED_PRICE Price2=PRICE_CLOSE; //価格 |
オリジナル関数の説明
まずint型で任意の関数名(型 引数)で枠{ }を作成します。
1 2 3 4 5 |
int MACrossClose(int Position){ //関数の内容 } |
戻り値用の変数として、close変数を宣言して0を代入してリセットします。
1 |
int close=0; |
移動平均線の価格を入れる変数をdouble型でMAS1とMAL1で宣言します。
その変数の中に移動平均線を求めるiMA関数で計算された値を代入するようになります。
1 2 |
double MAS1=iMA(_Symbol,0,Period1,0,Method1,Price1,1); double MAL1=iMA(_Symbol,0,Period2,0,Method2,Price2,1); |
どちらが上か下かを見るだけですので短期、長期の現在ローソク足の1本前を確認します。
次に買いと売りの方向対する条件をif~else if文で作成します。
1 2 3 4 5 6 7 8 9 10 |
if(Position==1){ //買い方向に対する確認 //条件式と処理内容 }else //もしくは if(Position==-1){ //売り方向に対する確認 //条件式と処理内容 } |
それぞれの中に条件式と処理内容を記述します。
買い方向に対する確認は、if文で長期>短期の場合、close変数に1を代入します。
1 |
if(MAL1>MAS1)close=1; |
売り方向に対する確認は、if文で長期<短期の場合、close変数に-1を代入します。
1 |
if(MAL1<MAS1)close=-1; |
組み合わせるとこの様になります。
1 2 3 4 5 6 |
if(Position==1){ if(MAL1>MAS1)close=1; }else if(Position==-1){ if(MAL1<MAS1)close=-1; } |
この関数の戻り値としてclose変数の値を戻します。
1 |
return(close); |
この戻り値の値を利用して、手仕舞い指示を出すかの判断に使います。
以上となります( ・Д・)
コメント