複数の時間枠戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-19 11:13:22
タグ:

img

概要

この戦略は,複数のタイムフレームの指標の合意を利用してトレンドを追跡する. 日々の,10日,15日,30日タイムフレームが同時に上昇または下落信号を与えるとき,ダイナミックストップ損失で,長または短に行く.

戦略の論理

この戦略は,毎日,10日,15日,30日という4つのタイムフレームを使用してトレンド方向を判断する. 閉値が4つのタイムフレーム全体で開値よりも高くなった場合,上昇信号を示します. 閉値が4つのタイムフレーム全体で開値よりも低くなった場合,下落信号を示します.

信号が上昇すると,それは長い.信号が下落すると,それは短い. 入った後,KCチャネルは動的ストップ損失に使用されます.

具体的には,戦略は,トレンド方向を決定するために,異なる時間枠における開盤価格と閉盤価格を比較する.閉盤価格が開盤価格より高くなった場合,時間枠は上昇傾向とみなされ,緑色にグラフ化される.閉盤価格が開盤価格より低い場合,時間枠は下落傾向とみなされ,赤色にグラフ化される.

4つのタイムフレームがすべて上昇シグナルに同意すると,戦略はロングポジションを開く. 4つのタイムフレームがすべて下落シグナルに同意すると,戦略はショートポジションを開く.ストップ・ロスを打つときまたはトレンドが逆転するときに終了する.

利点

  1. 複数のタイムフレームを使用してトレンドを確認することで 誤ったブレイクを効果的にフィルタリングし トレンドの方向性を決定できます

  2. ダイナミックストップ・ロスは 資本保護を最大化します

  3. 厳格な参入基準は,不必要な取引とコストを削減します.

  4. 複数のタイムフレームを組み合わせることで 利益のスピードと安定がバランスされます

リスク

  1. 入学基準が厳しくなり 機会が不足するかもしれません

  2. 誤ったストップ損失設定は,攻撃的すぎたり保守的すぎたりします.

  3. 不適切な時間枠の選択は,長期または短期間の傾向と一致しない可能性があります.

  4. 事件の突然の逆転は,ストップ・ロスを引き起こすことができません.

強化 分野

  1. 時間枠の選択を最適化して 利益のスピードと安定性をバランスさせる

  2. ストップ損失レベルを最適化するために異なるパラメータ設定をテストします.

  3. 逆転点を判断するのに役立つ機械学習アルゴリズムを追加します

  4. 急激な逆転による損失を避けるために重要な出来事を監視する.

概要

この戦略は,複数の時間枠の判断を統合し,厳格なエントリー基準とダイナミックなストップを使用して,安定したリターンを目指しています.機会を逃すリスクと不適切なリスク管理があります.次のステップは,より高い安定性のためにパラメータを最適化し続けることです.


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

//@version=2
strategy("[RichG] Easy MTF Strategy v1.1", overlay=false)

TF_1_time = input("D", "Timeframe 1")
TF_2_time = input("10D", "Timeframe 2")
TF_3_time = input("15D", "Timeframe 3")
TF_4_time = input("30D", "Timeframe 4")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
lengthBB=input(20, title="BB Length")
transaction_size = input(1, "Contract/Share Amount")

src = close, len = 20


out = sma(src, len)
width = 5
upcolor = green
downcolor = red
neutralcolor = blue
linestyle = line


kc() =>
    ma = sma(close, lengthKC)
    range = tr
    rangema = sma(range, lengthKC)
    upperKC = ma + rangema * multKC
    lowerKC = ma - rangema * multKC
    [lowerKC, upperKC] 

 
bb() =>
    source = close 
    basis = sma(source, lengthBB)
    dev = multKC * stdev(source, lengthBB)
    upperBB = basis + dev
    lowerBB = basis - dev
    [upperBB, lowerBB]

TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false
TF_1_color = TF_1 ? upcolor:downcolor

TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false
TF_2_color = TF_2 ? upcolor:downcolor

TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false
TF_3_color = TF_3 ? upcolor:downcolor


TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false
TF_4_color = TF_4 ? upcolor:downcolor

TF_global = TF_1 and TF_2 and TF_3 and TF_4 
TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false
TF_global_color = TF_global ? green : TF_global_bear ? red : white
TF_trigger_width = TF_global ? 6 : width

plot(1, style=linestyle, linewidth=width, color=TF_1_color)
plot(5, style=linestyle, linewidth=width, color=TF_2_color)
plot(10, style=linestyle, linewidth=width, color=TF_3_color)
plot(15, style=linestyle, linewidth=width, color=TF_4_color)
plot(25, style=linestyle, linewidth=4, color=TF_global_color)    

exitCondition_Long = TF_global_bear 
exitCondition_Short = TF_global

longCondition = TF_global
if (longCondition)
    strategy.entry("MTF_Long", strategy.long, qty=transaction_size)

shortCondition = TF_global_bear
if (shortCondition)
    strategy.entry("MTF_Short", strategy.short, qty=transaction_size)

[kc_lower,kc_upper] = kc()

strategy.close("MTF_Long", when=close < kc_upper)
strategy.close("MTF_Short", when=close > kc_lower)


もっと