minisoba blog

プログラミングと株式投資

ALGOSEED開発記録: TA-LIBでテクニカル分析

J-Quants APIを経由して様々な日本株データを取得できるようなり、そのデータを分析するべく、テクニカル分析ライブラリを実装してみました。 …と言っても一から実装するのではなく、この分野ではかなり有名なTA-LIBというC言語で実装されたライブラリを CFFI(the Common Foreign Function Interface)経由でLisp関数として呼び出します(以下実装参考)。

TA-LIBで定義されたEMA(指数平滑移動平均線)をCFFIを通じて外部アクセス関数を定義しLisp上からアクセスする感じです。

(cffi:defcfun ("TA_EMA" %ema) :ta-ret-code
  (start-idx          :int)
  (end-idx            :int)
  (in-real            :pointer)
  (opt-in-time-period :int)
  (out-beg-idx        :pointer)
  (out-nb-element     :pointer)
  (out-real           :pointer))

次に、呼び出し関数を定義してみました(もちろん、%ema関数を直接呼び出すことも可能です)。

(defun ema (series-1 start-idx end-idx &key (time-period 10))
  "Exponential Moving Average (EMA)

The Exponential Moving Average is more responsive moving average compared to the
Simple Moving Average (SMA).  The weights are determined by alpha which is
proportional to it's length.  There are several different methods of calculating
EMA.  One method uses just the standard definition of EMA and another uses the
SMA to generate the initial value for the rest of the calculation.

Returns:
    ema.
"
  (unless (eq (type-of series-1) 'ta-series-1)
    (error 'ta-lib-type-error :error-text "Invalid series type, expect 1 series"))
  (%with-ta-command-1 %ema series-1 start-idx end-idx :in-args `(,time-period)))

今回も、Lispを使ったテクニカル分析の動画をYouTubeにアップしました。前回に比べ、ビデオ編集ソフト(Shotcut)となるものも利用しました。😀 こちらも、機会を見て紹介したいと思います。

↓アップした動画、👍もよろしくお願いします! www.youtube.com

参考: qiita.com www.shotcut.org

Emacsのデフォルトカラーの変更

ハイコントラストのEmacsのテーマをインストールして、色々と検証してみたら、SlyのREPL画面が見づらいかったので変更方法をまとめてみました。

ミニバッファ上に以下のコマンドをタイプするとFaceと設定されている色のリストが表示されます。

M-x list-face-display

今回は、SlyのREPL画面のプロンプトとフォントの色を変更したいので、Slyで検索します。

pale turquoiseに変更して、Apply and Saveをクリック。

SlyのREPL画面のプロンプトとフォントの色が更新されました。

以前に比べ、Emacsのカスタマイズがかなり簡単にできるようになり、elispで書いていた(ほとんど、Googleから検索してコピペ)ときが懐かしい…

ALGOSEED開発記録: はじめました

随分昔からアルゴ取引のフレームワークを開発しては途中でやめるというのを繰り返してきました。 ロゴなんかも作ってみたりして、ゆくゆくはマネタイズ化もしくはオープンソースって考えていたのですが 一通り開発が終えて、必ずつまづくのがGUIとデータです。

やはり、チャートとテーブル表示は金融データ分析においては必須ですし、ハイクオリティなデータも信頼性の高いソフト開発をする上ではとても重要です。

仕事では、一貫してC++で開発してきましたし、パーソナルプロジェクトでもCommon LispC++がベースです。なので、JavaScript やTypeScriptとかWebフロント開発の経験は全く無いのですが、最近Udemyとかでちょっと勉強しようかなぁって思い始めています…

東証発のJ-Quants APIという素晴らしいデータを低価格でサブスクすることができるようになったので、これをベースにまた開発を始めました(汗)…

自戒の意味も込めて、開発日記を始めることにしました。最終的な目標は、どういう形であれ公開したいですね。

J-Quants API凄すぎ!

jpx-jquants.com

10数年前に、アルゴリズムトレーディングをリテールに広めるべく単身起業しましたが、1年後には資金が底を付き廃業の憂き目に合いました。その後、友人とFinTechビジネスを立ち上げるもこちらも3年で断念。4年間の紆余曲折のすえ、結局サラリーマンプログラマに舞い戻り現在に至っております。

アルゴリズムトレーディングなどフロントオフィス系のビジネスを立ち上げる上で一番ネックになるのが高品質なデータの取得です。機関投資家個人投資家に関わらずデータの正確性、整合性なくして金融ソフトの開発はできません。最も一般的なデータソースはブルームバーグやロイターですが、ブルームバーグターミナルを契約するとなると月々1500USドルのコストがかかります。ロイターは少し安いですがそれでも700USドルは掛かると思います。とてもじゃないけど、ファンディングなしのスタートアップ企業が払える金額ではありませんでした。

それから10年以上の月日が経って、最近息子が友達と金融アプリを作るというので色々調べていたらなんと!!!!日本証券取引所(以降、東証)発信のJ-Quants APIとなるものを発見しました。早速、調べて見たらこれは凄い!最近、東証は投資家向けの情報共有、発信にとても熱心です。多分、外国人投資家を意識してのことでしょう… 10年前に比べ随分と変わったなぁって思います。

… という経緯で、今週末はJ-Quants APIで遊んでおりました。

こういったデータ取得関連はPythonを使うのが王道だと思いますが、小生はLispで実装することにしました。Lispって何?1950年代に開発されたプログラミング言語なのでかなりマイナーな言語ですがEmacsとかAutoLispとかそれなりに需要はあるのかなぁ?自分が理想とするアルゴリズムトレーディングシステムを開発をする上で、Lispを選択する理由については機会があれば、後日ブログに上げられたらと思います。この気持ちは10年以上経った今でも変わっていません。

現在(昨日から(笑))J-Quants APIを使ったシステムを構想・開発中です。いつになるかわかりませんが、将来的にはオープンソースで公開したいと考えています。

うーむ、長々と書いてきましたがポイントは何?

J-Quants APIは最高!っていうことで…