気づいたら GitHub のリポジトリが 90件を超えていた。Public / Private 合わせてかなりの数になっていたので、この機会に自分で整理してみた。全部紹介するのは大変なので、今回は 金融系・便利ツール系・新言語への取り組み の3カテゴリに絞ってピックアップする。プライベートリポジトリについては概要のみ。
トレードの自動化・システム化に一番力を入れてきたカテゴリ。MetaTrader 5(MT5/Exness)を主戦場に、研究から自動売買まで幅広く取り組んでいる。
| リポジトリ | 公開 | 言語 | 概要 |
|---|---|---|---|
| mt5-ai-trade | 🔒 Private | Python | 5分足裁量のシステム化・マーケットメーカー解析研究 |
| mt5-ai-trade2 | 🔒 Private | Python / PySide6 | ↑の作り直し。ヘキサゴナル設計・自動売買・バックテスト完備 |
| mql5-ai-generator | 🔒 Private | Python | 自然言語からMQL5 EA(Expert Advisor)を自動生成 |
MetaTrader 5 のデモ口座を題材に、5分足の裁量トレードをシステム化した研究・ツール群。「人間が"読み"、機械が"規律"を強制する」という二層構造の思想のもとで設計している。
特徴的なのはマーケットメーカー(MM)の挙動検出への取り組みだ。MMは「整然とした値動き(均一tickの一直線)=機械の足跡」を測ることで検出できるという仮説のもと、MM機械度スコア(mm_detect.py) を実装した。また、ストップ狩りの6σスパイクは強制清算であり情報でないため戻るという仮説に基づく σフェード戦略(sigma_fade.py) のバックテストも実装し、JPYクロスでPF≈1.1〜1.3を確認している。
複数の手法検証(OOS分割・PF・最大DD・連敗ガード付き)を徹底的に実施しており、定量評価の厚みが特徴。
上記の反省を活かし、「疎結合・最小読解・テスト容易」を最優先にヘキサゴナル(ポート&アダプタ)アーキテクチャで設計し直したデスクトップアプリ。
src/
core/ … UI/ブローカー非依存の中核(domain / ports / services / indicators)
adapters/ … mock / fixture(実データ再生) / mt5(実MT5接続)の3種
composition/… 接続の配線(唯一 core+adapters を束ねる層)
ui/ … PySide6 デスクトップUI
user_scripts/ … 置くだけで反映される自作インジケータ/シグナル
pytest で 322件のテストが全通過しており、MT5端末なしで決定的なテストが走る。バックテスト(net/勝率/PF/最大DD)、自動売買(ライブEA)、ユーザースクリプトのホットリロードまで実装済みで、フェーズ4まで完了している。
「RSIが30以下で買い、70以上で売り。ロット0.5、利確150pips」のように日本語で書くだけで、MetaTrader 5 で動くコンパイル可能な MQL5 コードを自動生成するシステム。
初期版(Level1)では変数名の競合によるコンパイルエラーという問題があったが、Level2 では指標ごとに固有の変数名を割り当てる設計で問題を完全解決。RSI・移動平均・MACD・ADX・ボリンジャーバンド等、最大13指標の同時使用に対応している。Jinja2 テンプレートエンジンで柔軟にコードを生成し、0.5秒未満で出力できる。
普段の開発で「あったら便利」を形にしてきたツール群。
| リポジトリ | 公開 | 言語 | 概要 |
|---|---|---|---|
| pdf-doctor | 🌐 Public | Python | 日本語PDF抽出診断ツール(CID問題・縦書き・DynaFont対応) |
| pre-commit-env-checker | 🌐 Public | Go | .envの機密情報をコミット前にブロックするpre-commitフック |
| sleep_autobat | 🌐 Public | Go | Windowsスリープ前に指定プロセスを自動終了させるモニター |
| claude-bridge | 🌐 Public | TypeScript | Claude Desktop ⇔ Claude Code CLI 間の接続プロキシ |
| broadlistening | 🌐 Public | Python | 意見クラスタリング・可視化基盤(LFM2.5 + Qdrant + Forgejo) |
| allow_access_files | 🔒 Private | Shell / PS | Windsurfのリポジトリ作成時のMCP設定ファイル自動編集ツール |
日本語PDFのテキスト抽出でよく問題になる CID問題・縦書き・DynaFont独自マッピング に対応した診断ツール。PDFから文字が化ける・抽出できないといった問題の原因を特定しやすくする。PyMuPDFベースで実装。
.env ファイルに定義された機密情報がステージングされたファイルに含まれていないかチェックする Go 製の pre-commit フック。意図しない API キーやパスワードの漏洩を防ぐ。Apache-2.0 ライセンスで公開。
Windowsがスリープに入る前に、指定したプロセスを自動終了させる監視ツール(Go製)。スリープ時に落としておきたいデーモンやサーバーがある場合に便利。
Docker Compose で構築する意見クラスタリング・可視化基盤。LFM2.5(言語モデル)+ Qdrant(ベクターDB)+ Forgejo(Gitホスティング)を組み合わせた構成。
「既存のツールが対応していない言語を、自分で対応させる」という挑戦が多いカテゴリ。
| リポジトリ | 公開 | 言語 | 概要 |
|---|---|---|---|
| serena(フォーク) | 🌐 Public | Python | serenaにMQL5 Language Server(LSP)サポートを独自追加 |
| tree-sitter-mql5(フォーク) | 🌐 Public | Rust | MQL5のtree-sitterパーサー(Node.jsバインディングをRust化) |
| mql5(フォーク) | 🌐 Public | MQL5 | clangd用MQL5ヘッダアダプター(LSP設定のベース) |
| jhipster-view-blueprint | 🌐 Public | JavaScript | JHipsterにDBビュー対応を追加するブループリント |
| mybatis-generator-jdl-plugin | 🌐 Public | Java | DBスキーマ→JHipster JDLファイル変換プラグイン |
| jhipster-mcp-blueprint | 🌐 Public | - | JHipsterにMCPアプリ生成対応を追加するブループリント |
serena は LSP(Language Server Protocol)を使ってコードの意味解析ができるコーディングエージェント基盤で、Claude Code との相性が良い。しかし MQL5 には対応していなかった。
そこで serena をフォークし、MQL5 の Language Server サポートを独自実装として追加した。
実装の仕組みはシンプルで、clangd(C++の強力な言語サーバー)をバックエンドとして流用し、MQL5ヘッダを自動セットアップするアダプター(MQL5Serverクラス)をかぶせる構成にした。
class MQL5Server(ClangdLanguageServer):
def _setup_mql5_environment(self, ...):
# MQL5ヘッダを自動クローンして compile_flags.txt を生成
# → clangdがMQL5を"C++"として正しく解析できるようになる
これにより、serena(&Claude Code)から MQL5 ファイル(.mq5 / .mqh)の定義ジャンプ・参照検索・診断(エラー検出)が使えるようになった。
この実装は、自分が管理する3つのリポジトリが連携して動く構成になっている。
khayashi4337/serena … LSP統合本体(MQL5Serverクラスを追加)
khayashi4337/mql5 … clangd用のMQL5ヘッダ群(serenaが自動クローン)
khayashi4337/tree-sitter-mql5 … MQL5の構文パーサー(シンタックスハイライト等に活用)
オリジナルの tree-sitter-mql5 は C++ 製の Node.js バインディング(nan / node-gyp)を使っていたが、Node.js v20 以降では V8 API の破壊的変更によりビルドに失敗する問題があった。これを napi-rs(Rust製のNode.jsバインディングフレームワーク) を使った実装に全面移行することで解決した。Copyright にも自分の名前を追記している。
改めて整理してみると、自分のリポジトリはざっくり以下の方向性に分類できる。
全体のコントリビューション数は直近1年で 1,820件。Python・TypeScript・Java・Rust・Goあたりが主力で、用途に応じて使い分けている。
今後も気になったものはどんどんリポジトリとして残していきたい。