FX自動売買EAを実装してみよう5(移動平均)
概要
この記事では,FX自動売買初心者向けに実装の解説します。
EAの実装をしたことない方から基本を振り返りたい方へ向けた記事となります。
※FXでの取引は自己責任となります。ご了承ください。
FX自動売買の振り返り
FX自動売買の始め方について数本の記事で解説をしてきました。
FX自動売買EAの始め方(初心者用) - Sasahiko’s diary
最低限のコード実装について(FX自動売買EAを実装してみよう2(最短コード実装) - Sasahiko’s diary)の解説やバックテストの見方について解説をしました。
今回の記事では移動平均を使ったEAの実装をします!
最低限コードの振り返り
#property copyright "Copyright 2021, Sasahiko 2021.07.21"
#define MAGIC_NUMBER 0001
double lots = 0.1;int Ticket = 0;
void OnTick(){if(Hour()%2==0 && OrdersTotal()==0){
Ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,MAGIC_NUMBER);}
if(Hour()%2==1 && OrdersTotal()==1){int _ = OrderClose(Ticket,lots,Bid,20);}}
注文条件:偶数時&保持ポジション0
決済条件:奇数時&保持ポジション1
今回実装したいコード
注文条件:現在価格が移動平均とクロス&保持ポジション0
決済条件:注文時と逆クロス&保持ポジション1
実装!
変数定義:double ma;
ティックごとに移動平均の更新:ma=iMA(NULL,0,12,6,MODE_SMA,PRICE_CLOSE,0);
注文条件:Open[1]<ma && ma<Close[1] && OrdersTotal()==0→Ask
決済条件:Close[1]<ma && ma<Open[1] && OrdersTotal()==1
逆の条件でBidの注文を行います。実装した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を改善することで利益を上げられるよう,次回記事で解説をします!
以上,移動平均利用EAの実装でした!!
お疲れ様でした!
まとめ
今回は移動平均の実装を解説しました!
次回は移動平均EAの改善について解説します!
twitter : 笹彦 fx自動売買EA開発者 (@trader_brothers) | Twitter
Instagram : https://www.instagram.com/fxtrader_sasahiko/
FX自動売買EAを実装してみよう4(バックテストの条件と結果の見方)
概要
この記事では,FX自動売買初心者向けに実装の解説します。
EAの実装をしたことない方から基本を振り返りたい方へ向けた記事となります。
※FXでの取引は自己責任となります。ご了承ください。
FX自動売買の振り返り
FX自動売買の始め方について数本の記事で解説をしてきました。
FX自動売買EAの始め方(初心者用) - Sasahiko’s diary
前回記事では,最低限のコード実装について(FX自動売買EAを実装してみよう2(最短コード実装) - Sasahiko’s diary)の解説も行いました。最低限のコード実装の後にはバックテストの実行方法を解説しました。(FX自動売買EAを実装してみよう3(バックテストの実行) - Sasahiko’s diary)今回は実装したEAのバックテストの見方を解説します。
バックテストを始める前に!
バックテストを実行する前に実行条件をチェックしましょう。
1.実行ファイル:自分がテストしたいEA(今回は「最低限コード」で作成したEA)
2.通貨ペア:EAで想定している通貨ペア(今回はゴールド)
3.モデル:全ティックorコントロールポイントor始値のみ(今回はコントロールポイント)
4.期間:使用時間足(今回は15分足)
5.スプレッド:想定しているスプレッド(今回は40)
注意すべきポイント
本気でEAのスペックを見たいときには全ティックを使用する。全ティック以外は目安になるが,実際の取引成績とは程遠いものを出す可能性があります。
また,スプレッドも通貨ペアの平均スプレッドを入力する必要があります。
エキスパート設定
初期証拠金や通貨を設定します。通貨はJPY(日本円)にすることが多いのかなと思います。
バックテスト実行結果の見方
バックテストが完了すると上記のようなレポートが出力されます。
見るべき主なポイントは純益と最大ドローダウンです。
純益:文字通り儲かったお金
→見ない人はいないと思いますが,初期証拠金に対してどのくらいの純益が出たのかチェックする必要があるでしょう。
(今回でいうと-30%ほどです。)
最大ドローダウン:資産の最大下落率
→どのくらいリスクで取引をしていたかを確認できます。
最大ドローダウンは小さいほうが良い指標です。
(今回でいうと32.78%です。かなり小さい。)
以上,バックテストの実行条件と結果の確認でした!!
お疲れ様でした!
まとめ
今回はバックテストの実行条件と結果の見方を解説しました!
次回はもう少し実装を解説します!
twitter : 笹彦 fx自動売買EA開発者 (@trader_brothers) | Twitter
Instagram : https://www.instagram.com/fxtrader_sasahiko/
FX自動売買EAを実装してみよう3(バックテストの実行)
概要
この記事では,FX自動売買初心者向けに実装の解説します。
EAの実装をしたことない方から基本を振り返りたい方へ向けた記事となります。
※FXでの取引は自己責任となります。ご了承ください。
FX自動売買の振り返り
FX自動売買の始め方について数本の記事で解説をしてきました。
FX自動売買EAの始め方(初心者用) - Sasahiko’s diary
前回の解説記事(FX自動売買EAを実装してみよう1 - Sasahiko’s diary)では,XM Tradingをインストールするときに入手できるサンプルコードの解説をしました。
また,最低限のコード実装について(FX自動売買EAを実装してみよう2(最短コード実装) - Sasahiko’s diary)の解説も行いました。
今回は実装したEAのバックテストを行います。
早速バックテストを実行しましょう!
1.XM Tradingを開き,データフォルダを開きます。
2.MACD Sample.mq4をコピペし,名前を「sample1.mq4」とかに変えましょう。
3.とりあえず中身を全削除します!
4.以下のコードをコピペし,「コンパイル」をクリック
(解説記事はこちら:FX自動売買EAを実装してみよう2(最短コード実装) - Sasahiko’s diary)
コード
#property copyright "Copyright 2021, Sasahiko 2021.07.21"
#define MAGIC_NUMBER 0001
double lots = 0.1;
int Ticket = 0;
void OnTick(){
if(Hour()%2==0 && OrdersTotal()==0){
Ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,MAGIC_NUMBER);
}
if(Hour()%2==1 && OrdersTotal()==1){
int _ = OrderClose(Ticket,lots,Bid,20);
}
}
5.XM Tradingに戻ってコンパイルしたファイルを確認します。
その後,「テスター」のファイル指定部分にドラッグアンドドロップします。
最後に右下の「スタート」をクリックしてバックテストを実行します!
6.結果の確認①
テスターの最下部にある「結果」をクリックします。
売買履歴を確認します。解説記事にあるよう,奇数時で買い注文,偶数時で決済をしていることがわかります。
7.結果の確認②
テスターの最下部にある「グラフ」をクリックします。
売買により資産がどのように変動したかを見ることができます。
8.結果の確認③
テスターの最下部にある「レポート」をクリックします。
取引結果がまとめてあります。
以上,バックテストの実行と結果の確認でした!!
お疲れ様でした!
まとめ
今回はバックテストの実行方法を解説しました!
意外と簡単に実行できるものなのです!
次回はバックテスト結果の見方を解説します!
twitter : 笹彦 fx自動売買EA開発者 (@trader_brothers) | Twitter
Instagram : https://www.instagram.com/fxtrader_sasahiko/
FX自動売買EAを実装してみよう2(最短コード実装)
概要
この記事では,FX自動売買初心者向けに実装の解説します。
EAの実装をしたことない方から基本を振り返りたい方へ向けた記事となります。
※FXでの取引は自己責任となります。ご了承ください。
FX自動売買の振り返り
FX自動売買の始め方について数本の記事で解説をしてきました。
FX自動売買EAの始め方(初心者用) - Sasahiko’s diary
前回の解説記事(FX自動売買EAを実装してみよう1 - Sasahiko’s diary)では,XM Tradingをインストールするときに入手できるサンプルコードの解説をしました。
あの解説がスラスラ理解できた方はバリバリ実装していきましょう!
しかし多くの方が意味不明だったはずなので,今回は最低限のコードで実装を行います。
最低限のコードで自動売買を体験してみましょう!
まずはコードをご覧ください!
#property copyright "Copyright 2021, Sasahiko 2021.07.21"
#define MAGIC_NUMBER 0001
double lots = 0.1;int Ticket = 0;
void OnTick(){if(Hour()%2==0 && OrdersTotal()==0){
Ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,MAGIC_NUMBER);}
if(Hour()%2==1 && OrdersTotal()==1){int _ = OrderClose(Ticket,lots,Bid,20);}}
以上です!たった6行で実装が完了してしまうのですね!
(1行目はコードの著作権表示のため,実質5行ですね!)
では,ここから1行ずつ解説していきます!
①#property copyright "Copyright 2021, Sasahiko 2021.07.21"
著作権の表示です。なくても動きますがコピペで動かすときには一応こちらも消さないでください!
②#define MAGIC_NUMBER 0001
自動売買をするときにはアルゴリズムごとのIDを振る場合が多いです。そのIDをmagic number と呼びます。複数のアルゴを独立に動かす際にはmagic number が必須なのです。
③double lots = 0.1;int Ticket = 0;
取引ロットを指定しています。また,「Ticket=0」では,取引番号の初期定義です。
④void OnTick(){if(Hour()%2==0 && OrdersTotal()==0){
「OnTick()」では現在の取引価格が変動するたびに実行される関数です。「Hour()」と「OrdersTotal()」ではそれぞれ現在時刻(時)と現在のポジション数を取得しています。つまり,ここでは偶数時でポジションを持っていない場合には{}の中身を読み込みます。
⑤Ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,MAGIC_NUMBER);}
「 OrderSend()」で注文を送信します。()の中身では(現在チャート,買い注文,取引ロット,成り行き注文,スリッページ,ストップロス,リミット価格,コメント,マジックナンバー)を指定しています。
⑥if(Hour()%2==1 && OrdersTotal()==1){int _ = OrderClose(Ticket,lots,Bid,20);}}
奇数時で保持ポジションが1なら決済をしなさいというコードです。「OrderClose」で決済注文を送信します。
つまり,このコードは奇数時に買って,偶数時に売るEAということです。
(1時に買い,2時に決済,3時に買い,4時に決済)
もちろん大負けします。速攻で資金がゼロになりますが,プログラミングはもっとも単純なひな形から少しずつ複雑さを加えるのが良いと思います。
さぁ,皆様もここからEA作成を始めていきましょう!!
まとめ
自動売買EAを動かすだけならたったの5~6行で十分なのです!
簡単なものから少しずつ工夫を加えていきましょう!
次回はバックテストの動かし方を解説します!
twitter : 笹彦 fx自動売買EA開発者 (@trader_brothers) | Twitter
Instagram : https://www.instagram.com/fxtrader_sasahiko/
FX自動売買EAを実装してみよう1(サンプルコード解説)
概要
この記事では,FX自動売買初心者向けに実装の解説します。
EAの実装をしたことない方から基本を振り返りたい方へ向けた記事となります。
※FXでの取引は自己責任となります。ご了承ください。
FX自動売買の振り返り
FX自動売買の始め方について数本の記事で解説をしてきました。
FX自動売買EAの始め方(初心者用) - Sasahiko’s diary
今回からは自動売買EAを自分で実装したい方へ向けた解説記事を出していきます。
(XM Trading, MT4での実装となります。口座開設はこちらからFX自動売買EAの始め方(初心者用) - Sasahiko’s diary)
MT4で自動売買の実装をしたいんだけど…?
まずはMT4というものを理解しましょう。
MT4とはFX自動売買を目的とした開発ツールであり,FX独自の関数(インジケータや注文など)が簡単に実装できます。
MT4はMQL4という言語で記述します。MQL4とはC言語に類似した言語であり,C言語の開発経験者であれば簡単に実装できます。
実際のコードを見てみましょう!
XM TradingのMT4をインストールした場合,Moving_Average.mq4とMACD_Sample.mq4の二つがもとからダウンロードされています。この記事では,Moving_Average.mq4を見ていきます。
まずは定数や変数の定義です。こちらの形式はC言語っぽいですよね。
MAGIC NUMBERとは取引アルゴの番号です。他のアルゴや裁量トレードと組み合わせる際には,ここの番号を変えることでごちゃごちゃにならずに済みます。
(magic numberがあることでアルゴ1のみ決済とかが簡単にできます。)
以下の部分では,保有中のポジションをカウントしています。
特定のマジックナンバーに該当するポジションをaskとbidに分けてカウントしています。
こちらでは過去のデータからロット数の最適化をしています。
対象取引で損失をカウントしていき,連敗していたらロット数を下げるような計算をしています。
現在価格がMAを跨いだら取引開始というのを実装しています。
sell condition:open価格がMAよりも小さく,close価格がMAよりも大きいときbidで注文をする。askはその逆です。
こちらでは決済条件を設定しています。
ポジションを保有しているときのみ計算をします。
注文時と逆のクロスがあった場合には決済という設定になっています。
自作関数のCalicurate_current_orderで保有ポジションをカウントし,保持していないっ場合にはCheck_for_open関数を読み込み,保持している場合にはCheck_for_closeを読み込む形です。
以上が移動平均のサンプルコードです。今回の解説ではわかったような,わからなかったようなという感じかと思います。実装を進めていくことで理解を深めていきましょう!
まとめ
自動売買EAはMT4で実装することが多いため,その解説をしました。
mql4という言語により実装し,上記のようなコードになります。
次回からは少しずつ実装をしていきましょう!
twitter : 笹彦 fx自動売買EA開発者 (@trader_brothers) | Twitter
Instagram : https://www.instagram.com/fxtrader_sasahiko/
AIのウソ・ホント
概要
この記事では,AIのウソ・ホントをざっくりと解説します。
機械学習をよく知らないという方へ向けた記事となります。
※本記事では,機械学習技術を総称して「AI」と呼びます。こちらは一般名称として機械学習よりも認知度が高いためです。ご了承ください。
機械学習の振り返り
これまでいくつかの記事でAIを解説をしました。
AIとは一体何か,どのように使うのか,仕事で使えと言われたらどうするのか。
是非,以下の記事もご覧ください。
AI?ディープラーニング?機械学習?について解説してみる - Sasahiko’s diary
機械学習やAIの活用方法 - Sasahiko’s diary
ここからはよく聞かれるAIのウソ・ホントにお答えしていきます。
AIは万能なの?
このブログで5回以上言及していますが,万能ではありません。
ディープラーニングは確かにすごいですが,現在の技術では未知のデータには基本的に対応できません。
AIが差別するってホント?
大変残念ですが,現在の技術では,AIが差別的な出力をする可能性があります。
2015年にgoogleの開発したシステムが黒人の方を「ゴリラ」を判定して大炎上しました。これは,肌の色が黒い方を差別した出力といわれてしまえば否定できません。「人間は見た目や思想,国籍などにより差別を受けるべきではない」と誰しもが知っていますし,決して起こしてはいけない問題をしたと言わざるを得ません。
しかし,現代のAIは学習したパターンから推測するだけの機械です。画像認識でいうと画像のRGBしか情報がない中で,しかもいろいろな生物をフラットに学習したものです。(人間は人間と触れ合う機会が多く,人間についてかなり偏った学習をしていると言えます。)
大多数に合わせて,余裕があれば少数も学習していくとこが多いのが現代AIです。差別のないAIが開発されることを祈るばかりです…
ロボットが東大に合格できるの?
2021年現在では,まだできていないと思います。ただ,数年のうちに合格できると思います。「文字を読み取り,認識し,大量の学習データの中からその答えになりそうなものを出力,文字を書きだす。」というそれぞれの技術は日進月歩で進化しています。「暗記は機械がやるから,考える力が大切」といわれる時代はもう終わりそうですね。
AIに仕事が奪われるんですか?
これはホントです。かなり多くの仕事がなくなると考えられています。単純作業などの仕事はかなり減り,電話応対や事務などの仕事は減ってきています。「頭を使わない仕事がなくなる」と言われてきましたが,「頭を使う仕事」も普通になくなります。
しかし,産業革命,情報革命のときもそうですが,消える仕事以上に新しい仕事が増えるので問題ないと思います。
AIが人を超える日が来るの?
何を達成したら人を超えることになるのかによるので,わからないです。
例えば,正確&素早く計算をする能力でスパコンに勝てる人って現代で存在するのでしょうか?
ただ,AIがAIを開発し始めると,その能力は爆発的に上がるはずなので,いわゆるスペック的には勝てなくなると思います。(というか,既に人間が勝っている部分のほうが少ないと思います。)
いつかAIが暴走して人間が支配されてしまうの?
ここまでの質問と異なり,これは正直わかりません。
ただ,開発する側のリテラシーが担保されている間は問題がないと思います。
(全部AIに判断させて,制御させ,誰も責任を取らないという状況になれば,わかりません。)
まとめ
AIのウソ・ホントについて答えてきました。
私の回答があっているかは不明ですが,楽しんでいただけていたら幸いです。
次はもっと現実的な,ディープラーニングについて触れたいと思います。
twitter : 笹彦 fx自動売買EA開発者 (@trader_brothers) | Twitter
Instagram : https://www.instagram.com/fxtrader_sasahiko/
「AIを使え」と仕事で言われたときに読む記事!
概要
この記事では,「AIを使え」と仕事で言われたときの対処法をざっくりと解説します。
機械学習をよく知らないという方へ向けた記事となります。
※本記事では,機械学習技術を総称して「AI」と呼びます。こちらは一般名称として機械学習よりも認知度が高いためです。ご了承ください。
機械学習の振り返り
機械学習についてはこちらの記事(AI?ディープラーニング?機械学習?について解説してみる - Sasahiko’s diary)ですごくザックリ解説しています。
その他にもAIについて解説した記事がいくつかあるので,ぜひご覧ください。
AIは万能なの?
「AIは全く万能ではない」と声を大にして言いたいです。
確かにディープラーニングは人類の大きなブレイクスルーであり,技術力は飛躍的に向上しました。しかし,何事も向き不向きであり,決して万能ではありません。
(実は,万能なAIが存在しないと証明されています。ノーフリーランチ定理で検索を。)
パソコンが苦手で,あまり知ろうともしないおじさんが「AIで何かできない?」と言い出すケースが多いそうです。「AIってよくわからないけどすごい」「ビジネスの宣伝で使いやすい」など,この注文にはいろいろな意図があるのでしょうが無理です。
この仕事を請け負った場合のオチは見えています。「それってAIじゃなくてもできるのでは?」か「結局,何が原因で改善したかわからないね」か「AIってその程度なんだ」です。
「AIで何かできない?」の困るポイント
ビジネスを行う上で,考えるべきポイントは以下の3点です。
1.明確な目標設定
2.手段としてのAIの適性
3.データとAI
上記があいまいのままプロジェクトが進んでいくと,ほぼ確実に詰んでいきます。
では,詳細を解説しましょう。
1.明確な目標設定
こちらが絶対的に重要で,ここがあいまいのまま進むとろくなことがありません。
「現状の課題」を明確にし,「達成すべき目標」を明確にします。
この段階で定量的にしておかないと,結果が出た後にごねられることになります。
「例えば,自社商品のマーケティングにおいて,従来の方法では顧客認知率15%の商品をAI推薦システムにより同期間同予算で25%まで改善しよう。」
上記の例は適当ですが,実際にはより定量的に明確にしていく必要があります。
2.手段としてのAIの適性
AIは万能ではなく,従来のような計算(アルゴリズムと呼ぶ)のほうが良いケースがかなりあります。というより,パターンがわかっているものに関してはアルゴリズムのほうが高精度になります。
こちらは,専門的な知見を持っていないと検討不可能だと思います。
AIを使うかどうか,使う場合にはどれを採用するのかというのは,どれほどまでAIを深く理解しているかが直結します。
3.データとAI
上記まででAIを使うことが決まった場合に直面する問題はこちらです。
AIを使うかの検討段階で確実に問題になりますが,AIを利用するのに十分な「データ」が使える形で保管されている必要があります。
SNSマーケティングならクリック率が必要かもしれませんし,サイトの滞在時間が必要かもしれません。こちらは,目標や利用するAIによって大きく異なりますし,データサイエンティストの腕の見せ所です。
しかし,データが必要と思っても湧いて出てくることはありません。必要なデータがないなら,現状でできるものに妥協するか,データを収集するかしかありません。
ここで最も困るパターンですが,たまに「データが必要」と理解しているおじさんが注文してくる時があります。「自社にはデータがたくさんあるから,それを有効活用したい」と。ただ,データ活用から逆算していないデータの集まりは基本的にごみの集まりです。塵も積もれば山となるので,ゴミの山があるだけです。ゴミ山から稀に宝石が出てくる場合がありますが,割とまれなケースなので,データ収集の第回からデータサイエンティストに任せることがおすすめです。
基本的に無茶ぶりはデータサイエンティストへ受け流しましょう。
中途半端なデータ解析経験からの安請負は自分の首を絞めます。
まとめ
「AIを使って何かできない?」と上司から言われた時の対処法をまとめました。
基本的には断るか,データサイエンティスト系の企業へ依頼するのが良いと思います。
自分で調べて,やっていこう!は基本的に無理です。
twitter : 笹彦 fx自動売買EA開発者 (@trader_brothers) | Twitter
Instagram : https://www.instagram.com/fxtrader_sasahiko/