FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

時系列データに適した凹包(concave hull)アルゴリズム

時系列データを凹包(concave hull)したがる人なんて、まずいないとは思うけど、チャートパターン等をプログラミングしようと考えてる人には役立つかも・・・。

f:id:fxborg:20171119230238p:plain(USDJPY 4h)

凸包と凹包

凸包にはしっかりとした定理(wiki参照)があるのですが、凹包には「これが正しい凹包」というようなものは無いようです。

凸包を作成するには、点の集合に対して直線を押し当てながら取り囲んでいくのですが、凹包の場合は直線の代わりに棒(線分)や曲線などを押し当てて凹みを作っていきます。

凹包のアルゴリズムとしては「アルファ・シェイプ法」、「スイング・アーム法」、「K近傍法」等があります。ただ、時系列データにそのまま適用できるものはありませんでした。

ちょっと気分転換に凹包してみました。

「K-近傍を用いた凹包の計算」という記事を見つけたので時系列データでもやってみました。

USDJPY4Hを凹包するとこんな感じです。

f:id:fxborg:20171107024333p:plain

これを眺めながらどう料理するかを考えているのですが、高値・安値などの判定には使えそうな感じです。

続きを読む

ソケット経由でMT4からAkumuliにティック送信

前回に引き続きAkumuliを弄っています。今回はMQLからティック情報を送信してみました。休日なのでバックテストを使用した擬似ティックを使用しましたが早送りで実行するので性能テストとしては好都合です。

Akumuliへデータを書き込むには「RESPプロトコル」を使用します。RESPはRedisの通信方式なのですが、ソケット通信さえ出来ればどこからでもデータを送ることが出来ます。

MQLにはソケット通信を行う組込み関数はないのですが「WinSock」を直接呼び出す形式の「socket-library-mt4-mt5.mqh」が見つかりました。こちらはMT5にも対応しているようです。

続きを読む

数値データ専用の時系列データーベース「Akumuli」の導入

最近は時系列DBや分散ストリーム処理エンジンが流行ってるそうです。IoTのセンサー情報の収集や巨大サービスのバックエンドとして成長しているみたいですが、トレーディングシステムとの相性も良さそうです。

とりあえずティックデータの収集に向きそうなものを探してみたのですが、分散マシン向けのDBが多く、今使っているVPS(Digital Ocean)ではちょっと厳しそうでした。

・・・さらにググってみると、こちらの「Awesome Time Series Database」 にある「Akumuri(アキュームリー)」だと1台のマシンでも十分なスループットが出せるとのことです。

続きを読む

SSAの特異値分解をArmadilloで高速化。

前回の「SSA Slope インジケーター」の速度が気になっていたので計測してみたところ、やはり特異値分解がボトルネックになっていました。

現在のプログラムはOpenCV2を使用しているのですが、Eigen3とArmadilloでも試してみました。結果としてはArmadilloに軍配が上がりました。

※とりあえず目の前のプログラムが高速化されればよいので、ライブラリの優劣をつけたり厳密なベンチマークを提示する意図はありません。

続きを読む

SSA Slope インジケーターをアップしました。

SSAで抽出したトレンドの傾斜をヒストグラムで表示してみました。これだとリペイントしないのでEAに導入できそうです。

f:id:fxborg:20171008223151p:plain(USDJPY4H)

  • スロープ期間・・・8バー
  • SSAの設定・・・N(400)、L(120)、ω(0.01)、max ET(32)
続きを読む

SSAトレンド・インジケーターをアップしました。

SSAトレンド・インジケーターをアップしました。SSAのトレンド成分を自動抽出します。詳しくは前回の記事をご覧ください。USDJPY4Hだとこんな感じです。

f:id:fxborg:20170929040642p:plain

  1. 【設定値】
  2. ・N・・・・・時系列データの長さ (1000)
  3. ・L・・・・・キャタピラーのウインドウ長(120)
  4. ・ω0・・・・トレンド成分判定用のしきい値(0.01)
  5. ・max_ET・・成分数の上限(32)

 

続きを読む