こんにちは(*・ω・)ノ
またまた時間が経過してしまいましたが、
EA講座の続きでございます。
前回 、アリゾナルールのフェイズ判断をロジック化しましたので、
今回はプログラムに落とし込んでみようと思います。
では、早速続きからどうぞ⇒
まずは前回のまとめ。
--------------------------------------
↑少しずつ講座を続けますので応援お願いしますっ(´∀`)
フェイズ判断をまとめると、以下のようになります
・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆
※62EMAは62、200SMAは200、800SMAは800、フェニックスはFN、ユマはYM、
フラッグスタッフはFS、ロングはL、ショートはSと略します。
FN(S) = 800>200>62
FN(L) = 800<200<62
YM(S) = 800>62>200 かつ 過去20本のロウソク足が800SMAにノータッチ
YM(L) = 800<62<200 かつ 過去20本のロウソク足が800SMAにノータッチ
FS(S) = 62<800<200 かつ 過去10本のロウソク足で800SMAにタッチ
FS(L) = 62>800>200 かつ 過去10本のロウソク足で800SMAにタッチ
FN(S) = 800>200>62
FN(L) = 800<200<62
YM(S) = 800>62>200 かつ 過去20本のロウソク足が800SMAにノータッチ
YM(L) = 800<62<200 かつ 過去20本のロウソク足が800SMAにノータッチ
FS(S) = 62<800<200 かつ 過去10本のロウソク足で800SMAにタッチ
FS(L) = 62>800>200 かつ 過去10本のロウソク足で800SMAにタッチ
・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆
では、実際に私が落とし込んでみたコードを以下に貼りますので、
赤字で記されている説明とともに、読み進めてください
・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆
int start()
{
//移動平均線の値を取得
double SMA800 = iMA(NULL,0,800,8,MODE_SMA,PRICE_CLOSE,0);
double SMA200 = iMA(NULL,0,200,8,MODE_SMA,PRICE_CLOSE,0);
double EMA62 = iMA(NULL,0,62,8,MODE_EMA,PRICE_CLOSE,0);
doubleは、小数4桁を含む数字の値が入るぞと宣言する宣言文です。
doubleの後に続いている言葉に、イコールより右の数字を代入することができます。
iMAは、移動平均線の値を取得する関数です。
一番上の場合は、
「SMA800という箱には、iMAで取得した移動平均線の値が小数点4桁を含んだ形で入るぞ」
という意味になります。
//フェイス判断
//フェニックス
if( SMA800 < SMA200 && SMA200 < EMA62)
{
★フェニックスlong
}
if( SMA800 > SMA200 && SMA200 > EMA62)
{
★フェニックスshort
}
★から後には、注文が入ります。これはまた次回説明しますね。
//ユマ
int YM_hantei;
double heikin_YM,YM_high,YM_low;
intは整数の数字の値が入るぞと宣言する宣言文です。
double、intともに後から使う数字をまとめて宣言しておくことができます。
その場合はカンマでつなげます。
for(int cnt1 = 0; cnt1 < 20 ; cnt1++)
{
heikin_YM = iMA(NULL,0,800,8,MODE_EMA,PRICE_CLOSE,cnt1);
YM_high = iHigh(NULL,0,cnt1);
YM_low = iLow(NULL,0,cnt1);
if ( YM_low < heikin_YM < YM_high )
{
YM_hantei = 0;
break;
}
else
{
YM_hantei = 1;
}
}
forで始まるこの形は、EAを覚えるときにすごく大切な構文です。
for(int cnt1 = 0; cnt1 < 20 ; cnt1++) というのは、
cnt1が0から始まって、cnt1が20を追い越すまで、cnt1を1つずつ足しながら繰り返す。
という意味です。
ここで何をしているかというと、過去20本分の800SMAの値が、過去20本分のバーに
触れているか触れていないかを確認しています。
(cnt1)本前の800SMAの値をheikin_YMに入れる。
同じように(cnt1)本前の高値をYM_highに、
(cnt1)本前の安値をYM_lowに入れて比較します。
比較の結果、触れていなかったら、YM_hanteiに1を代入します。
if( SMA800 < EMA62 && EMA62 < SMA200 && YM_hantei ==1)
{
★ゆまlong
}
if (SMA800 > EMA62 &&EMA62 > SMA200 && YM_hantei ==1)
{
★ゆまshort
}
ユマの形に移動平均線が、並び、かつ(&&)800SMAがバーに触れていなかったら、
ユマの注文を入れます。
//フラッグスタッフ
int FS_hantei;
double heikin_FS,FS_high,FS_low;
for(int cnt2 = 0; cnt2 < 10 ; cnt2++)
{
heikin_FS = iMA(NULL,0,800,8,MODE_EMA,PRICE_CLOSE,cnt2);
FS_high = iHigh(NULL,0,cnt2);
FS_low = iLow(NULL,0,cnt2);
if ( FS_low < heikin_FS < FS_high )
{
FS_hantei = 1;
break;
}
else
{
FS_hantei = 0;
}
}
if( EMA62 > SMA800 && SMA800 > SMA200 && FS_hantei ==1)
{
★ふらっぐすたっふlong
}
if (EMA62 < SMA800 && SMA800 < SMA200 && FS_hantei ==1)
{
★ふらっぐすたっふshort
}
やっていることは、ほとんどユマと一緒です。
フラッグスタッフの形に移動平均線が、並び、かつ(&&)800SMAがバーに
触れていたら、フラッグスタッフの注文を入れます。
return(0);
}
・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆・‥…━━━☆ さて、ここまで書いてみましたが、実際にちゃんと動くかどうかは、
この後で注文を入れるプログラムを書いて動かしてみないと
よくわからないのが実際です(´;ω;`)ウゥゥ
次回、利益確定と損切りロジックを考えるとともに、
注文をプログラムに組み込んでみましょう♪
間違っている場所や、よくわからないところがあったらお気軽に
コメントをくださいねー
--------------------------------------
↑少しずつ講座を続けますので応援お願いしますっ(´∀`)
vsだいぱぱの追い上げを期待しております~♪