フィッシャー・ユリーク 追跡停止戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-02 14:57:33
タグ:

img

概要

フィッシャー・ユリーク・トレーリングストップ戦略は,フィッシャー・ユリーク指標とトレーリングストップメカニズムを統合した定量的な取引戦略である.フィッシャー・ユリーク指標を使用して,収益をロックするためにトレーリングストップを設定し,利益を保護しながら利益を最大化するために購入・売却信号を生成する.

戦略の論理

  1. バックテスト/ライブ取引時間枠を定義する入力日付範囲
  2. フィッシャー・ユリーク指標の入力パラメータ,デフォルトは2期
  3. インプット・プロフィート・テイキング・ストップ・ロスト比率,不履行で5%の利益と2%の損失
  4. フィッシャー・ユリーク指標の主要線と信号線を計算する
  5. メインラインが信号ラインの上を横切ると購入信号を生成します.
  6. トレーリングストップを設定し,入場後価格が2%下がるとロングポジションを終了します.
  7. 価格が5%以上上がると利益を得る

利点分析

  1. フィッシャー・ユリーク指標は, 傾向を簡単に識別し,正確な購入信号
  2. トレイリングストップはほとんどの利益でロックされ,上限を超えたストップは避ける.
  3. 調整可能なパラメータは,異なる市場環境に適しています.
  4. シンプルで分かりやすい実施

リスク分析

  1. 不適切なパラメータ調整は,過剰に攻撃的な取引を引き起こす可能性があります,慎重にテストする必要があります
  2. ストップ損失が大きすぎると,予想を超える損失が発生する可能性があります.
  3. 利益 を 過剰 に 緊密に 取る こと は,利益 を 短く し,利益 を 制限 する こと に なり ます
  4. 異なる製品に対して適切なパラメータが決定されるべきである.

ストップ/利益比,テストパラメータ,シグナルフィルター,ポジションサイズの規則の調整によってリスクに対処できます.

増進 の 機会

  1. 戦略への影響のためにフィッシャー・ユリックパラメータを最適化
  2. シグナル品質を改善するためにMACD,KDのようなシグナルフィルターを追加
  3. ボリンジャー・バンドからのブレイクなどエントリー条件を追加
  4. 取引リスクごとに制御するポジションサイズ化規則を組み込む
  5. トレイリングストップ方法,例えばスムーズ化,チェンデリア出口を向上させる

結論

フィッシャー・ユリーク・トレーリング・ストップ戦略は,トレンド識別とリスク管理を組み合わせます.パラメータ調節,指標組み合わせ,ストップ損失の強化により,受け入れられるリスクの許容範囲内で良い利益を得るためのほとんどの楽器に適合できます.


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Fisher_Yurik Strategy with Trailing Stop", shorttitle="FY Strategy", overlay=true)

// Date Ranges 
from_month = input(defval = 1, title = "From Month")
from_day   = input(defval = 1, title = "From Day")
from_year  = input(defval = 2021, title = "From Year")
to_month   = input(defval = 1, title = "To Month")
to_day     = input(defval = 1, title = "To Day")
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = true
period = input(2, title='Period')
cost = input.float(1.05, title='profit level ', step=0.01)
dusus = input.float(1.02, title='after the signal', step=0.01)

var float Value = na
var float Fish = na
var float ExtBuffer1 = na
var float ExtBuffer2 = na

price = (high + low) / 2
MaxH = ta.highest(high, period)
MinL = ta.lowest(low, period)

Value := 0.33 * 2 * ((price - MinL) / (MaxH - MinL) - 0.5) + 0.67 * nz(Value[1])
Value := math.max(math.min(Value, 0.999), -0.999)
Fish := 0.5 * math.log((1 + Value) / (1 - Value)) + 0.5 * nz(Fish[1])

up = Fish >= 0

ExtBuffer1 := up ? Fish : na
ExtBuffer2 := up ? na : Fish

var float entryPrice = na
var float stopPrice = na
 
if (ExtBuffer1 > ExtBuffer1[1])
    entryPrice := close*dusus
    stopPrice := close * cost 
 
if (ExtBuffer2 < ExtBuffer2[1])
    entryPrice := close
    stopPrice := close * cost

// Sadece seçilen test döneminde işlem yapma koşulu eklenmiştir
strategy.entry("Buy", strategy.long, when=ExtBuffer1 > ExtBuffer1[1] and window)
strategy.exit("Take Profit/Trailing Stop", from_entry="Buy", when=(close >= entryPrice * cost) or (close < stopPrice), trail_offset=0.08, trail_price=entryPrice * cost)


もっと