EA作成プログラム:移動平均線がゴールデンクロス | FXクスクスのEA作成・EA検証

FXクスクスのEA作成・EA検証

FX自動売買に興味をもち、EA作成を目標にし、
FX・EA情報収集やEA検証しながら、EA作成をしています。
興味を持ったEAは暇があればどんどん検証していきたいと思います。

■運用中EA・システム

無料: CamusinForexRobot      HP掲載結果(FXDD)

無料: CamurideForexRobot    → HP掲載結果(FXDD)

無料: 風林火山           → HP掲載結果(FXDD)

無料: FXRaptor            HP掲載結果(4XP)

有料: CrossFireFX (無料版も有り) HP掲載結果(4XP)

有料: PF9.02FX            EA成績ランキング

有料: PEGASUS            EA成績ランキング  

有料: Traders Battle         プロのトレードをコピー


■おすすめEA・システム

無料: CamusinForexRobot     → HP掲載結果(FXDD)

無料: CamurideForexRobot    → HP掲載結果(FXDD)

無料: FXRaptor            HP掲載結果(4XP)

有料: PF9.02FX            EA成績ランキング  

有料: CrossFireFX (無料版も有り) HP掲載結果(4XP)

有料: Traders Battle         プロのトレードをコピー


■重要記事

  バックテスト    レシオ計算    EA成績ランキング



こんにちは。 FXクスクスです。



今回も下記サイトを参考にプログラムを作成しました。

http://jidoubaibai.com/burogu12.html


今回のプログラム内容は移動平均線がゴールデンクロスした時に買って、

手仕舞いは指値か逆指値で行うというプログラムです。


------------------------------------------------


int init()
{

return(0);
}

int deinit()
{

return(0);
}

int start()
{
//変数の宣言
int cnt, CurrentPosition;
int Ticket;
double kakoa, gennzaia; 
double kakob, gennzaib;

//オーダーチェック(ポジションなどのデータ)
CurrentPosition=-1;
for(cnt=0;cnt < OrdersTotal();cnt++){
OrderSelect(cnt,SELECT_BY_POS);
if(OrderSymbol()==Symbol())CurrentPosition=cnt;
}

//一時間前の21日線
kakoa=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);
//一時間前の90日線
kakob=iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,0);

//現在の21日線
gennzaia=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);
//現在の90日線
gennzaib=iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,0);


//ポジションチェック ポジション無し
if(CurrentPosition == -1)
{
//もし21日線が90日線を下から上にクロスしたら
if(kakoa < kakob && gennzaia >= gennzaib)
{
//買いポジションを取る
Ticket = OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-(200*Point),Ask+(200*Point),"Buy",0,0,Blue);
}
}
return(0);
}


int cnt, CurrentPosition;
int Ticket;
double kakoa, gennzaia; 
double kakob, gennzaib;
の部分は変数を宣言しています。


CurrentPosition=-1;
for(cnt=0;cnt < OrdersTotal();cnt++)

{
OrderSelect(cnt,SELECT_BY_POS);
if(OrderSymbol()==Symbol())CurrentPosition=cnt;

}


CurrentPosition=-1;
としているのはポジションのインデックスが 0 から始まるので、変数をそのまま宣言したときのデフォルトの 0 と同じにならないようにするためみたいです。


for(cnt=0;cnt < OrdersTotal();cnt++)

{
OrderSelect(cnt,SELECT_BY_POS);
if(OrderSymbol()==Symbol())CurrentPosition=cnt;

}

はfor文を使って


意味としては

cnt が 0 のとき、0 よりポジションの合計が多かったら、
持っているポジションのうちインデックス 0 のものを選択して、
もし、その通貨ペアが現在のチャート表示の通貨ペアであるならば、

CurrentPosition に 0 を代入する。そしてcntに+1をする。


みたいです。


kakoa=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

kakob=iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,1);
gennzaia=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

gennzaib=iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,0);


iMA() は移動平均の関数です。

移動平均線の情報を取得します。


意味としては

NULLはチャート上で表示している通貨。

0 はチャート上で表示されているろうそく足の時間枠を使う。

21 は移動平均線を計算するために利用するろうそく足数。

0 は画面にグラフ表示する際のシフト値

MODE_SMA 移動平均値の計算方法で、単純移動平均計算。

PRICE_CLOSE は移動平均値を出す際に利用する価格で、終値。

1 は現在のろうそく足から何本前の移動平均値を取得するか指定。


のようです。




FXクスクスのEA作成

 

if(CurrentPosition == -1)

の部分はif文でポジションを持っているかどうか調べています

このコードを書かないと、売買条件が一致したら

ポジションがどんどん増えて行ってしまうようです。


if(kakoa < kakob && gennzaia >= gennzaib)

の部分は意味としては、

「もし、1時間前の21日移動平均線が一時間前の90日移動平均線の下にあって、

そして現在の21日移動平均線が現在の90日移動平均線の上にあったら処理をする」

みたいです。


Ticket = OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-(200*Point),Ask+(200*Point),"Buy",0,0,Blue);
の部分は注文を出すときに使う関数のようです。



後はコンパイルして完成です。


下記はバックテストの結果です。



FXクスクスのEA作成



FXクスクスのEA作成



急に難しい内容になって理解するのが大変でした。


詳しく知りたい方は僕が参考にさせて頂いたサイトにて


確認してみてください。


僕は本とかで調べながら理解していきました^^;


EAを作成するためには乗り越えなければいけない壁ですので、


バシッとEA作成時に使えるように、


きちんと理解して身につけたいと思います。


今後もEA作成のためにがんばっていきたいと思います。




◆ご不明点などお気軽にご相談ください↓◆


ご連絡はこちらから


■最後までご覧くださり有難う御座います、ついでにワンクリックしてくださると助かります^^

にほんブログ村 為替ブログ FXツール徹底検証へ