■運用中EA・システム |
無料: CamusinForexRobot → HP掲載結果(FXDD) 無料: CamurideForexRobot → HP掲載結果(FXDD) 無料: 風林火山 → HP掲載結果(FXDD) 無料: FXRaptor → HP掲載結果(4XP) 有料: CrossFireFX (無料版も有り) → HP掲載結果(4XP) 有料: Traders Battle → プロのトレードをコピー |
■おすすめEA・システム |
無料: CamusinForexRobot → HP掲載結果(FXDD) 無料: CamurideForexRobot → HP掲載結果(FXDD) 無料: FXRaptor → HP掲載結果(4XP) 有料: CrossFireFX (無料版も有り) → HP掲載結果(4XP) 有料: Traders Battle → プロのトレードをコピー |
■重要記事 |
こんにちは。 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 は現在のろうそく足から何本前の移動平均値を取得するか指定。
のようです。
■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);
の部分は注文を出すときに使う関数のようです。
後はコンパイルして完成です。
下記はバックテストの結果です。
急に難しい内容になって理解するのが大変でした。
詳しく知りたい方は僕が参考にさせて頂いたサイトにて
確認してみてください。
僕は本とかで調べながら理解していきました^^;
EAを作成するためには乗り越えなければいけない壁ですので、
バシッとEA作成時に使えるように、
きちんと理解して身につけたいと思います。
今後もEA作成のためにがんばっていきたいと思います。
◆ご不明点などお気軽にご相談ください↓◆
■最後までご覧くださり有難う御座います、ついでにワンクリックしてくださると助かります^^ |