FX自動売買EAを実装してみよう6(移動平均ver2)
概要
この記事では,FX自動売買初心者向けに実装の解説します。
EAの実装をしたことない方から基本を振り返りたい方へ向けた記事となります。
※FXでの取引は自己責任となります。ご了承ください。
FX自動売買の振り返り
FX自動売買の始め方について数本の記事で解説をしてきました。
FX自動売買EAの始め方(初心者用) - Sasahiko’s diary
前回の記事では移動平均を使ったEAの実装をしました!
ただ,EAを現在価格のクロスのみで判断していたため,かなり負けていましたね!
今回の記事ではもう少しEAを改善していきたいと思います!
前回コードの振り返り
#property copyright "Copyright 2021, Sasahiko 2021.07.21"
#define MAGIC_NUMBER 0001
double lots = 0.1;
int Ticket = 0, flag=0, _;
double ma;
void OnTick(){
ma=iMA(NULL,0,12,6,MODE_SMA,PRICE_CLOSE,0);
if(Open[1]<ma && ma<Close[1] && OrdersTotal()==0){
Ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,MAGIC_NUMBER);
flag = 1;}
if(Close[1]<ma && ma<Open[1] && OrdersTotal()==0){
Ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,0,0,0,NULL,MAGIC_NUMBER);
flag = -1;}
if(Close[1]<ma && ma<Open[1] && flag == 1){
_ = OrderClose(Ticket,lots,Bid,20);}
if(Open[1]<ma && ma<Close[1] && flag == -1){
_ = OrderClose(Ticket,lots,Ask,20);}}
買いのときはflag=1, 売りのときはflag=-1として決済判断に使用しています。
移動平均の使い方
移動平均を用いたEAを作成する際には以下の二種類の利用方法が主だと思います。
1.複数の移動平均線の関係性を利用する
2.移動平均線同士またはロウソクと移動平均のクロスを利用する
クロスを利用するケースが多いと思いますが,今回は1番のほうを実装していきます。
今回のポイント
1.3本の移動平均を利用(5時間,15時間,50時間)
ma1=iMA(NULL,PERIOD_H1,5 ,1,MODE_SMA,PRICE_CLOSE,0);
ma2=iMA(NULL,PERIOD_H1,15,1,MODE_SMA,PRICE_CLOSE,0);
ma3=iMA(NULL,PERIOD_H1,50,1,MODE_SMA,PRICE_CLOSE,0);
2.上記3本が順番に並んだ時に注文
if(ma3<ma2 && ma2<ma1){買い注文}
if(ma1<ma2 && ma2<ma3){売り注文}
3.順番が崩れたら決済
今回は決済用の関数を作成しました。
void Close_all(){
for(int i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,0) == True){
_ = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20);}}
今回実装したコード
#property copyright "Copyright 2021, Sasahiko 2021.07.21"
#define MAGIC_NUMBER 0001
double lots = 0.1;
int Ticket = 0, bf, sf, flag=0, _;
double ma1,ma2,ma3;
void OnTick(){
ma1=iMA(NULL,PERIOD_H1,5 ,1,MODE_SMA,PRICE_CLOSE,0);
ma2=iMA(NULL,PERIOD_H1,15,1,MODE_SMA,PRICE_CLOSE,0);
ma3=iMA(NULL,PERIOD_H1,50,1,MODE_SMA,PRICE_CLOSE,0);
if(ma3<ma2 && ma2<ma1){bf=1;}else {bf=0;}
if(ma1<ma2 && ma2<ma3){sf=1;}else {sf=0;}
if(bf==1 && OrdersTotal()==0){Ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,MAGIC_NUMBER);flag = 1;}
if(sf==1 && OrdersTotal()==0){Ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,0,0,0,NULL,MAGIC_NUMBER);flag = -1;}
if*1Close_all();}
void Close_all(){for(int i=OrdersTotal()-1;i>=0;i--){if(OrderSelect(i,0) == True){_ = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),20);}}}
バックテスト結果
ちなみにバックテスト時にはビジュアルモードにチェックをすると取引の動きが見やすいです。遅くなるのでEAの利益よりも実装を確認するときに使います。
前回記事よりは良くなりましたね!!
以上,移動平均利用EAの実装でした!!
お疲れ様でした!
まとめ
今回は移動平均EAを改善しました!
次回も何か実装しようと思います!
twitter : 笹彦 fx自動売買EA開発者 (@trader_brothers) | Twitter
Instagram : https://www.instagram.com/fxtrader_sasahiko/
YouTube : 笹彦(FX Trader Sasahiko) - YouTube
tiktok : https://www.tiktok.com/@fx_eatradersasahiko
*1:bf==0 && flag == 1)||(sf==0 && flag == -1