
高斯波予測策略は高斯波に基づいた量的な取引策策である.高斯波の平滑性を利用し,価格序列を何度も波動させ,平滑した後の価格序列を複数生成する.そして,これらの価格序列の多項式マッチングを組み合わせて,将来の価格の予測を実現する.予測の結果に応じて,長ポジションまたは短ポジションを行うことを推奨する.
この策の核心は高氏波算法である.高氏フィルターは,高氏関数を重みとして使用する線形平滑フィルターである.この策では,パラメータpをフィルターウィンドウのサイズに設定し,それから,三角関数を使ってフィルター係数alphaを計算する.各価格列ret[i]は,原価序列をi回高斯波の後にした結果を表す.
策略は再帰的思考を用いる。まずは,alphaと原始価格の序列 price を用いて,最初の波ret を計算する。それから,ret に基づいて2番目の波を行って,ret 2 を得する。このように何度も繰り返す。最後に,複数の価格の序列を組み合わせて,将来の価格ret 4 を予測する曲線を整える。予測価格が現在の実際の価格より高い場合は,より多く行う;現在の価格より低い場合は,空にする。
このように,複数の波を介して,より平らな傾向と適合を導き出せます.同時に,多項式適合を組み合わせて,短期間の価格動向の予測を実現します.
この戦略の利点は以下の通りです.
高音波の平滑価格を使用する。高周波ノイズを効果的にフィルターし,戦略をより安定させる。
繰り返し複数のフィルターを行うことで,価格の傾向をよく把握し,予測の効果が向上する.
多項式マッチング予測価格.短期的な価格動きをモデル化して取引信号を生成する.
現在の価格と予測価格を組み合わせて判断する.取引信号は,トレンド予測と直接結合し,取引機会を逃さないようにする.
シンプルで理解しやすく,最適化できる. 高周波戦略の基礎モジュールとして,他の分析指標を拡張できる.
この戦略には以下のリスクもあります.
高スキーフィルターは突然の価格変動を平滑化し,短期間の取引機会を逃す可能性があります.
多項式適合には過適合のリスクがある.価格変化パターンが突発すると,予測効果が低下する.
フィルムウィンドウのサイズと合致する多項式階数は精密に設定する必要があります.不適切な場合は失敗する可能性があります.
取引信号として開盤価格のみに依存する.内盤で取引を行うことはできません.
この戦略は以下の点で最適化できます.
モデルトレーニングとスライドウィンドウ再トレーニングのメカニズムを追加. 戦略パラメータを動的に調整して,過適合のリスクを軽減する.
より多くの価格指標と特性を組み合わせて. 戦略のインプットが豊富で,予測がより安定しています.
損失防止メカニズムの増強. 極端な状況から重大な損失を防ぐために,最大損失の割合を設定する.
ポジション管理の最適化.予測の正確性と波動率に応じてポジションの動的調整.
主流の機械学習モデルに基づく予測を試みる.LSTMなどの深層学習モデル.戦略予測能力をさらに向上させる.
この戦略は,高周波数量化策略として,高波と多項式マッピングを用いて価格予測を行うものである.この策略には一定の優位性があるが,改善の余地もある.より多くの特性を組み合わせ,動的調節,止損機構などのモジュールを導入することで,戦略の効果を最適化することができる.この戦略は,高周波数策略の基礎を築き,さらなる研究に値する.
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Gaussbot v1.0", overlay=true)
p = input(20, minval=1, title="Length")
price = input(open, title="Source")
pi=3.1415926535
w=2*pi/p
beta = (1 - cos(w))/(pow(1.414,2.0/3) - 1)
alfa = -beta + sqrt(beta*beta + 2*beta)
ret= pow(alfa,4)*price+4*(1-alfa)*nz(ret[1])-6*pow(1-alfa,2)*nz(ret[2])+4*pow(1-alfa,3)*nz(ret[3])-pow(1-alfa,4)*nz(ret[4])
ret2 = pow(alfa,4)*ret+4*(1-alfa)*nz(ret2[1])-6*pow(1-alfa,2)*nz(ret2[2])+4*pow(1-alfa,3)*nz(ret2[3])-pow(1-alfa,4)*nz(ret2[4])
ret3 = pow(alfa,4)*ret2+4*(1-alfa)*nz(ret3[1])-6*pow(1-alfa,2)*nz(ret3[2])+4*pow(1-alfa,3)*nz(ret3[3])-pow(1-alfa,4)*nz(ret3[4])
ret4 = 3*ret-3*ret2+ret3
diff2 = nz(ret[1]) - nz(ret[2]) - (nz(ret[2]) - nz(ret[3]) )
diff22 = nz(ret2[1]) - nz(ret2[2]) - (nz(ret2[2]) - nz(ret2[3]) )
diff23 = nz(ret3[1]) - nz(ret3[2]) - (nz(ret3[2]) - nz(ret3[3]) )
diff24 = nz(ret4[1]) - nz(ret4[2]) - (nz(ret4[2]) - nz(ret4[3]) )
longCondition = price[0] - ret4[1] > 0
shortCondition = price[0] - ret4[1] < 0
if(longCondition and shortCondition)
longCondition = longCondition[1]
shortCondition = shortCondition[1]
if(longCondition==false and shortCondition==false)
longCondition = longCondition[1]
shortCondition = shortCondition[1]
if (longCondition==true and shortCondition == false)
strategy.entry("Gaussbot Long", strategy.long )
if (longCondition==false and shortCondition == true)
strategy.entry("Gaussbot Short", strategy.short)