2022年4月24日日曜日

HST ヒストリカルデータの変換 hst(MT4)⇒ hst(MT5) 作ってみよう構想の巻

PANDAの作者、仮称P氏と食事・情報交換にいきました。

話題はMT5の最適化

MT4と比べて早いよね的な話ですが、スプレッドが壁です。

MT4の最適化、バックテストはスプレッドを試験前に指定します。
MT5は過去データーにスプレッドが入っているため変更ができません。

MT5は通貨ペアを作成し希望のスプレッドのデーターをインストールする必要があります。

流れはこうなります。

  • MT4のHSTをDL
  • MT4へインストール
  • MT4からCSVでDL
  • エクセルでスプレッドを追記
  • MT5へインストール

なれれば大したことはないのですが、21世紀に人が手でする作業ではありません。

DL後に変換するプログラムがあれば3工程になります。

  • MT4のHSTをDL
  • 変換
  • MT5へインストール
※DLしZIP解凍も自動化できますが、ヒストリカルデータにも著作権がありますのでやめておきます。

プログラムの流れは以下になります。
  1. 画面の作成
    • 画面
    • スプレッド入力
    • 開始ボタン
  2. HSTをドロップされたら受け取る
    • 拡張子がHSTでない時はエラー出力
  3. TickVol作成(volumeのコピー)
  4. Spreadの入力(1で入力された値)
  5. CSVの作成

つづく




2022年4月20日水曜日

過剰最適化発見ツール バクフィックス

 バグに関する情報をいただきました。

「こつめ」さん情報をありがとうございます!

取引履歴にmodifyがあると正しく動きませんでした。m(_ _)m


OverFittingCHK5 (ver4)を作成しましたのでこちらをご利用ください。

OverFittingCHK5 

修正点

①modifyがあっても正しく計算できるように修正

②取引数が少ないデーターにアラートを出力

偶数日、奇数日、偶数月、奇数月の取引がない場合エラーが出ます。

③バックテストデータ以外をコピーしていたときにアラートを出力




①②③ともにエラーが出ていました。エラーが出ても何もわからないので、困惑されたと思います。①は修正、②③はアラートがでてわかりやすくなったと思います。


小噺(いいわけ?)
①MT4のバックテストデータのエントリーとクローズを比較して成績を出しています。
  • 一対一の場合 エントリーした取引の番号が1の場合、クローズ取引の番号も1で出力されます。
  • 分割クローズした場合 エントリーしたのが取引番号1の場合、一部クローズした時に全ロットが取引番号1でクローズし、残りを取引番号2でエントリーしたように出力します。
  • modifyが入った場合 エントリーしたのが取引番号1の場合、モディファイも取引番号1で出力されクローズ取引の番号も1で出力されます。3つになったのでエラーが出ました。完全な私のミスです。
②modifyデバッグ用に短い取引EAを作りました。
エントリー、モディファイ、クローズを1回して終わります。
偶数日の取引がなくエラーが出ました。
対象の取引数がないときにはエラーが出ることに気が付きました。修正も考えたのですが、そもそも取引数の少ないバックテストを分析する理由がないと思い。アラートを出力するようにしました。

③バックテストデーター以外をコピーしていた時
エラーが出ていましたが、ローンチを急いでいて忘れていました。(←完全な言い訳)

ブログでアップデートをしていくとどれが最新かわからなくなるのでDL用ページをそのうち作ろうと思います。



ファイル名は~CHK5ですがバージョンは4です。
CHKは1から数え始め バージョンは0から数えてしまいました。
こちらもそのうち修正します。






2022年4月18日月曜日

過剰最適化発見ツール Over Fitting CHK

Pythonで過剰最適化発見ツールを作成
無料公開します。

BETA版の位置づけです。
バグなどありましたら教えてください。


使い方

①MT4で気になるEAのバックテストをする

②「結果」タブへ移動し右クリック

「全てコピー(y)」










③OverFittingCHK.exeを起動

数秒から1、2分かかります。
開発環境i5-9400F 2.9GHz RAM16.0GB win11Pro
2005-2022.4 3600取引で10秒程度です。

※必ずコピーしてから起動してください


全取引、偶数日だけ、奇数日だけ、偶数月、奇数月だけの成績を出力します。

損益が一つでもマイナスになるようなEA、
また最大DDが極端になる場合(特にナンピン系)は使用を検討しましょう

OFC(OverFittingChecker)ver3DownLoad 古いバージョンですmodifyでエラーが出ます


著作権など
無料で配布していますが、著作権は放棄していません。
再配布、DL直リンクはご遠慮ください。


バックテストは好成績なのに運用すると大きなDD が出る。

この原因は過剰最適化です。その原因の一つは試験取引数の少なさです。

例えばこういったケースです。10年で1,000取引するEA DDは50,000 これにフィルターを付けると取引数は10減少して990 DDは30,000になりました。

DDは減っていますが、このフィルターが影響を及ぼしたのはわずか10取引です。
こういった影響の少ないフィルターは過剰最適化を招きます。

今回配布のOFCは特定の日にちだけで動かした場合の成績を表示します。

100%過剰最適化を発見できるものではありませんが、これで発見できるものもあります。


アウトオブサンプル試験

アウトオブサンプル試験は例えば偶数日で最適化をし奇数日で確認をします。
今回のOFCは全期間で最適化したものを偶数日、奇数日に分けます。

・アウトオブサンプルのメリット

偶数日で最適化をした場合、奇数日の取引は全く考慮されていないので、奇数日でバックテストをした時に過剰最適化になりにくい

・OFCのメリット

全期間で最適化をするため対象取引数が多い

一長一短ですがアウトオブサンプルする方もしない方もOFCで試験をする勝ちはあると思います。

(おまけ)

アウトオブサンプルをするときには以下のコードを使っています。
今回のOFCと似たような使い方も可能です。


input int MODE=0;
void OnTick(){
   // MODE== 0 is ALL
   if(MODE== 1&&Month()%2==0)return;//奇数月
   if(MODE== 2&&Month()%2!=0)return;//偶数月
   if(MODE== 3&& Year()%2==0)return;//奇数年
   if(MODE== 4&& Year()%2!=0)return;//偶数年
   if(MODE== 5&&DayOfWeek()<=3)return;//月火水
   if(MODE== 6&&DayOfWeek()>=4)return;//木金
   if(MODE== 7&&(Year()+Month())%2==0)return;//年+月奇数
   if(MODE== 8&&(Year()+Month())%2!=0)return;//年+月偶数
   if(MODE== 9&&(Year()+DayOfWeek())%2==0)return;//年+曜日奇数
   if(MODE==10&&(Year()+DayOfWeek())%2!=0)return;//年+曜日偶数
   if(MODE==11&&(Month()+DayOfWeek())%2==0)return;//月+曜日奇数
   if(MODE==12&&(Month()+DayOfWeek())%2!=0)return;//月+曜日偶数

課題

・コピペだけでなく、バックテストファイルでもデータを渡せると便利

・それぞれのチャートが出せると視覚的にわかる

・計算時間の高速化

・複数ポジションの場合 分けた結果が破綻しても終了しない

・偶数奇数日、月 だけでなくいろいろな組み合わせを出力

進めていくとQAのようになるかもしれません。
根気の続く限り進めていきたいと思いますので応援してください!

みんなで儲かりますように!


バージョン

最新バージョンから3つ古くなると動かなくなります。
バージョンアップを即すメッセージが出たときには最新版をDLしてください




セキュリティの警告について(2022.4.19追記)

exeファイルをダウンロードして使用する時に警告が出ることがあります。

 以下WINDOWS11の画面です
11以外の場合画面が少し異なりますが、詳細情報を押し、実行を押すことで使用できます。「実行」が出てこない(「実行しない」だけ表示される)場合はググって調べてみてください。「セキュリティ」、「SmartScreen」、「WindowsによってPCが保護されました」で検索するとすぐに見つかると思います。






バグ情報(2022.4.19追記)
modify が入っているとエラーが出ます。
情報をご提供いただきました「こつめ」さん
ありがとうございます!!
できるだけ早く修正します。



2022年4月4日月曜日

過剰最適化回避

 過剰最適化を避けることはEA開発者にとって非常に重要です。
最適化を繰り返し完成したEAの成績が出ない。
これは誰もが経験をすることだと思います。

大きな原因の一つは取引数が少ないことです
1つのロジックで数百程度の取引数は必要です。

この条件をクリアをしている人が多いと思いますが、
逆に取引を減らすときにもある程度の取引数が必要です。

例えば、フィルターを付けて成績が良くなったとします。
そのフィルターで取引数が20減りました。

しかし20しか減ってないのでしたらこれは再現性の乏しい過剰最適化です。

フィルターを付けるときにも100程度の取引に影響があるものを使いましょう。

しかしどうしても取引数が足りない時があります。
そんな時の最適化方法を紹介します。


2022年4月2日土曜日

QuantX パイソンコード作成の入り口

QuantX 
QuantX (クオンテックス)という日本株シグナル配信ツールがあります。

シグナル配信なので証券会社を選びません。
さらに出資者は松井証券、みんかぶなど大手のため、将来が楽しみです。
パイソンでコードが書けるのが特徴です。


早速チャレンジしてみたところ1行目で大きな壁にぶち当たりました。

import maron

Jupyter labでコードを書くつもりでしたが、maronがどうしても見つかりません。
じつはQuantXのページでコードを作成するため、
maronをinstallする必要などなかったのです

おそらくここで大半の人がつまづくので参考のため記述します。