フィッシャー変換指標に基づくバックテスト戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-25 14:22:36
タグ:

img

概要

この戦略はフィッシャー変換指標に基づくバックテスト戦略である.フィッシャー変換公式は価格の極端とターニングポイントを特定するために価格データを正規分布に変換することができる.この戦略はフィッシャー変換指標を組み合わせて価格動向を決定し,自動取引を達成する.

戦略原則

  1. HL2指標を計算する
  2. 最新の長度期間のHL2の最大xMaxHと最小xMinLを計算する
  3. フィッシャーの変換指標を計算する:
    • nValue1は前期の0.33× (標準化HL2) +0.67×nValue1である
    • nValue2 は,nValue1 を -0.99 から 0.99 までの範囲で制限する.
    • nFish は nValue2 の対数変換です
  4. 位置方向を決定するためにnFishが正または負かどうかを決定
  5. ポジションシグナル possig,逆取引が設定されている場合,反対のポジションを取る
  6. 入力シグナル:possig=1 長い,possig=-1 短い

利点分析

  1. フィッシャー変換指標は,価格の極端とターニングポイントを特定し,トレンドを正確に決定することができます
  2. 逆取引は,異なる市場環境に適応するように設定できます.
  3. 手動による判断なしに自動化された取引は,取引コストを削減します

リスク分析

  1. フィッシャー変換指標は遅延があり,短期的な価格変動を見逃す可能性があります.
  2. 変動傾向におけるストップロスのリスクが高い
  3. 不適切なリバース・トレード設定は,システム的な誤ったトレードにつながる可能性があります.
  4. クロスサイクル検証がない場合,誤った陽性リスクがある

リスク対策

  1. 遅延を短縮するために適切なパラメータを調整
  2. 単一の取引損失を制御するためにストップ損失範囲を拡大する
  3. 傾向,価格レベル,サイクルなどについて複数の検証メカニズムを増やす

戦略の最適化方向

  1. 主要な傾向が一貫していることを保証するために傾向指標を組み合わせる
  2. 価格逆転判断の正確性を向上させるため,周期指標を増やす
  3. 誤った陽性反応を避けるため,複数時間枠の検証
  4. ストップ損失範囲を動的に調整する
  5. パラメータを最適化して,勝利率と利益因子を最大化します.

上記の最適化は,戦略の勝利率をさらに向上させ,利益を固定し,リスクを制御し,より安定的かつ効率的な取引結果を得ることができます.

概要


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 22/12/2016
// 	Market prices do not have a Gaussian probability density function
// 	as many traders think. Their probability curve is not bell-shaped.
// 	But trader can create a nearly Gaussian PDF for prices by normalizing
// 	them or creating a normalized indicator such as the relative strength
// 	index and applying the Fisher transform. Such a transformed output 
// 	creates the peak swings as relatively rare events.
// 	Fisher transform formula is: y = 0.5 * ln ((1+x)/(1-x))
// 	The sharp turning points of these peak swings clearly and unambiguously
// 	identify price reversals in a timely manner. 
//
//  For signal used zero. 
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Fisher Transform Indicator by Ehlers Backtest", shorttitle="Fisher Transform Indicator by Ehlers")
Length = input(10, minval=1)
reverse = input(false, title="Trade reverse")
hline(1, color=white)
xHL2 = hl2
xMaxH = highest(xHL2, Length)
xMinL = lowest(xHL2,Length)
nValue1 = 0.33 * 2 * ((xHL2 - xMinL) / (xMaxH - xMinL) - 0.5) + 0.67 * nz(nValue1[1])
nValue2 =   iff(nValue1 > .99,  .999,
	         iff(nValue1 < -.99, -.999, nValue1))
nFish = 0.5 * log((1 + nValue2) / (1 - nValue2)) + 0.5 * nz(nFish[1])
pos = iff(nFish > 0, 1,
	   iff(nFish < 0, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
// barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nFish, color=green, title="Fisher")
plot(nz(nFish[1]), color=red, title="Trigger")

もっと