• カテゴリー別アーカイブ システムトレーディング
  • MQL4/MQL5共通EAライブラリを使って月毎の損益を算出する

    MT5のストラテジーテスターでは、月毎の損益がグラフで表示されて便利なのですが、その損益のデータそのものをEAのプログラム中で参照することができません。

    ところでMT5では、OnTester()という関数を定義しておくと、バックテスト終了時にその関数を実行してバックテストの各種データを取得したり、適当に計算させたりした結果を「OnTester結果」として表示してくれます。(最適化の評価基準として使う場合、MT4でも利用できます。)

    これを使って月毎の損益を算出できないか、というのが今回の記事の目的です。

    そのために作ったわけではないのですが、拙作のMQL4/MQL5共通EAライブラリに次のような関数があります。

    //過去の総損益(金額)の取得
    double MyOrderTotalProfit(datetime from_date, datetime to_date, int pos_id=0)
    from_dateからto_dateまでの期間で、ポジション番号pos_idの取引の総損益を取得します。

    これを使うと、割と簡単に月毎の損益が算出できたのでご紹介します。

    まず、以下のように、共通EAライブラリを使った、とあるEAがあるとします。

    これに以下のコードを追加します。

    追加したコードを簡単に説明します。

    まず、OnInit()でEA開始時刻をStartTimeに取得しておきます。

    MonthlyProfit()関数では、EA開始時から何番目の月かを入力して、その月の損益を出力します。ここでは、最後に前述のMyOrderTotalProfit()を使うために、損益を求める期間をfrom_dateとto_dateに求めます。年と月を求めるためにちょっとした計算式がありますが、要はその月の1日から次の月の1日までを期間として設定しています。

    あとは、OnTester()関数中に月毎の損益を保存する配列profit[]を用意して、iを0から月数分変えて配列に代入します。profit[]をPrintさせているのは確認のためです。ここでは、profit[]を合計したものをreturnで返していますが、お好みに合わせて加工して使ってください。

    なおEAでは、テスト期間が終わったときのオープンポジションは強制決済されますが、上記のコードを使った月毎の損益には反映されません。合計した損益がEAの出力する総損益と異なることがあるので、注意してください。

    (追記)上のコード、そのままMT4でも動きます。バックテストのレポートにはOnTesterの結果は表示されませんが、OnTester()でPrintさせた月毎損益は操作履歴に表示されます。



  • MT5のテクニカル指標関数をPythonで書いたよ

    皆さん、こんにちは。

    Pythonでシストレの続きを色々と考えていたのですが、あんまり簡単に書けなかったので、テクニカル指標のレパートリーを増やしてました。

    テクニカル指標は、計算がシンプルなものが多いので、Pythonプログラミングのいい練習材料になります。とりあえず、MT5に組み込まれているテクニカル指標関数の一部をPythonで書いてみたので、以下のサイトに置いておきます。

    https://github.com/toyolab/MT5IndicatorsPy

    テクニカル指標は解釈が色々あるので、MetaQuotesのサイトにあるテクニカル指標の説明では正確な計算ができないものも多かったです。詳しいことはMT5にインストールされているインジケータのサンプルプログラムを参考にしました。なので、関数の仕様もMT5に似たようなものにしました。

    ただし、アルゴリズムのまま実装しただけので、エラー処理など行っていません。ご参考まで。



  • Pythonでシストレのバックテスト

    Pythonでテクニカル指標が作れたので、こんどはシストレやってみました。

    と言っても、自動売買はできないので、バックテストまでですが。

    売買システムも、もっとも基本的な移動平均の交差システムです。完成したバーを使ってシグナルを出すものなので、4本値のヒストリカルデータだけでバックテストしてみました。

    詳しくは以下のリンクをご覧ください。

    Pythonでシストレのバックテスト by Jupyter notebook



  • Pythonでテクニカル指標を作成する

    Pythonプログラミングの記事、次はテクニカル指標にしようと思い取りかかったところ、思いのほか簡単にできてしまいました。

    といっても、移動平均、モメンタム、ボリンジャーバンド、MACD、RSI、HLバンド、ストキャスティックスと、簡単に書けるものばかりです。

    手前みそですが、それぞれのアルゴリズムは拙著の「FXメタトレーダー入門」を参考にしました。しかし、何十行もかかるMQL4のコードが、Pythonでは数行で書けてしまうことは驚きです。

    詳しくは以下のリンクをご覧ください。

    Pythonでテクニカル指標を作成する by Jupyter notebook



  • Pythonで読み込んだFXデータをチャートとして表示させる

    Pythonプログラミングの記事、もう1回続けます。

    前回の記事でタイムフレームを色々と変えることができたので、テクニカル分析とか売買シミュレーションはできそうな感じです。

    あとは、データをチャートで確認できた方がいいので、そのあたりのプログラムをみていきます。

    結論としては、折れ線チャートは簡単だけど、ローソク足チャートはちょっと面倒ということでした。

    詳しくは以下のリンクをご覧ください。

    Pythonで読み込んだFXデータをチャートとして表示させる by Jupyter notebook