PR

【機械学習】チャート形状を高速に圧縮する手法 #MiniRocket

オリジナル関数

機械学習で相場を扱うとき、
必ずぶつかる問題があります。

👉 「時系列データをどう扱うか」

特にローソク足のようなデータは
そのままでは「形状」を扱いにくいです。

そこで登場するのが MiniRocket です。

WAN
WAN

ディープラーニングなら情報を圧縮する必要はないかもしれないけど、決定木の場合は特徴量は最低限に抑えた方がいい場合があるからね!

MiniRocketとは

MiniRocketは、時系列データを
高速かつシンプルに特徴量へ変換する手法です。

従来のようにCNNやLSTMを使わなくても、

  • チャート形状
  • トレンド
  • パターン

を「数値化」できます。


なぜMiniRocketが生まれたのか

従来の問題👇

  • CNN → 精度は高いが学習が重い
  • LSTM → 時系列は扱えるが遅い
  • MQLでは実装が困難

つまり

👉 高性能だけど現場で使えない

という問題がありました。

WAN
WAN

MiniRocketは形状分析の原理を徹底的に簡略した仕組みといえる!


MiniRocketのコンセプト

MiniRocketは非常にシンプルです。

✔ やっていること

  • 1️⃣ カーネルを用意(例:長さ9)
  • 2️⃣ データにスライド適用
  • 3️⃣ 出力の「正の割合」などを計算
  • 4️⃣ これを複数回繰り返す

👉 CNNの「軽量版」として使えます


CNNとの違い

項目CNNMiniRocket
学習必要不要
パラメータ多い固定
実装難易度高い低い
MQL適性低い高い

👉 EAで使うならMiniRocketの方が現実的


どれくらい圧縮できるのか

例えば

  • ローソク足:128本
  • → MiniRocket後:18次元

👉 約1/7に圧縮

次元数は任意で設定可能

  • トレンド情報
  • 形状情報

を維持したまま意味ある数字に変換できるのは興味深いロジックです。


MQL5での簡易MiniRocket実装例

※本家MiniRocketの完全再現ではなく
「考え方ベースの軽量版」です。簡単に関数化が可能で動作も軽いです。

// MiniRocket風の特徴量生成関数
// 入力:価格配列
// 出力:特徴量配列void MiniRocketFeatures(double &price[], double &features[])
{
int kernel_count = 18; // 出力次元数
int kernel_size = 9; // カーネルサイズ
int len = ArraySize(price); ArrayResize(features, kernel_count); for(int k = 0; k < kernel_count; k++)
{
// カーネル生成(ランダム +1 / -1)
double kernel[];
ArrayResize(kernel, kernel_size); for(int i = 0; i < kernel_size; i++)
{
kernel[i] = (MathRand() % 2 == 0) ? 1.0 : -1.0;
} int positive_count = 0;
int total_count = 0; // 畳み込み的な処理
for(int i = 0; i < len - kernel_size; i++)
{
double sum = 0.0; for(int j = 0; j < kernel_size; j++)
{
sum += price[i + j] * kernel[j];
} // 正の割合をカウント
if(sum > 0)
positive_count++; total_count++;
} // 特徴量として割合を保存
if(total_count > 0)
features[k] = (double)positive_count / total_count;
else
features[k] = 0;
}
}

実際に使ってみた結果

当方で確認してみました。

  • チャートデータ(終値128本)
  • MiniRocket変換(18次元)
  • CatBoost学習

👉 残念ながら明確な優位性は確認できませんでした

理由として考えられるのは:

  • 情報圧縮しすぎ
  • Catboostが終値のままで学習が可能
  • 時系列の意味が薄い場面が多い
WAN
WAN

非常にいいアイディアだったんだけど、残念でした💦

日々試行錯誤の繰り返し。

学習したことがすべて成果になるわけではない厳しい世界だね(‘Д’)


それでも知っておく価値はある

重要なのは

👉 「こういう手法がある」と知っていることです

CNNの原理の学習や将来何かに使えるかもしれません。


まとめ

  • MiniRocketは「高速な時系列特徴量抽出」
  • CNNに似た仕組みだが学習不要
  • MQLでも実装可能
  • ただしFXでは優位性は限定的
タイトルとURLをコピーしました