ドンチャンチャネルブレイクアウト戦略


作成日: 2023-09-14 14:44:44 最終変更日: 2023-09-14 14:44:44
コピー: 0 クリック数: 766
1
フォロー
1617
フォロワー

戦略原則

唐通道突破策略は,唐通道に基づくトレンド追跡策略である.この策略は,多頭と空頭のエントリーポイントとストップロスを決定するために,異なる周期の最高価格と最低価格を使用する.

策略の入場ルールは,価格が指定周期 (例えば20日) の最高値を破るときに多めにすること.価格が指定周期 (例えば10日) の最低値を破るときに空っぽにすること.

EXIT規則は:多頭位は中軌道または下軌道で止まる;空頭位は中軌道または上軌道で止まる.中軌道とは,指定された周期 (例えば10日) の最高価格と最低価格の平均値である.

取引品種がBTCUSDTであると仮定すると,パラメータは次のように設定されます.

  • 複数入院周期:20日
  • 多頭脳停止周期: 10日
  • 中央線路に障害があるか:はい
  • 空頭入学周期:10日
  • 空頭停止周期:20日
  • 中央線路に障害があるか:はい

スタートと終了のルールは次のとおりです.

  • 価格が20日間の最高値を超えると,そのポイントで多額の入場
  • 複数ポジションのストップポイントは,10日間の最高値と最低値の真ん中です.
  • 価格が10日間の最低値を下回ったとき,そのポイントで空白ポジションに入ります.
  • 空のストップポイントは20日間の最高値と最低値の真ん中です.

入札と止損周期のパラメータを動的に調整することで,異なる市場サイクルで最適化することができ,トレンドの状況でより良い利益を得ることができます.

戦略的優位性

  • 突破を活用してトレンドの方向を判断し,強みを捉えることができます.
  • ストップ・ロストは現在の価格に近いので,リスクをコントロールできます.
  • パラメータの調整は柔軟で,異なるサイクルに最適化できます

戦略リスク

  • 突破取引は簡単に騙されやすいので,突破の有効性を慎重に判断する必要があります.
  • ストップポイントは価格に近いため,変動の際にはストップポイントが大きい
  • パラメータを正しく設定しないことにより,出場頻度が高くなり,時間内に止まらない可能性があります.

要約する

唐通路突破策は,突破によってトレンドの方向を判断し,止損点は通路の中間点または上下軌道に設定され,リスクを効果的に制御できます.最適化パラメータの設定により,戦略のトレンドの状況における捕獲率を向上させることができます.しかし,突破の有効性の判断に注意し,過剰に取引を避けるために慎重に使用してください.総合的に,この戦略は,中線長さのトレンドの状況を追跡するのに適していますが,振動の状況では使用してはいけません.

ストラテジーソースコード
/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Donchian Channel Strategy", overlay=true, default_qty_type= strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 20, commission_type=strategy.commission.percent, commission_value=0.036)

//Long optopns
buyPeriodEnter = input(10, "Channel Period for Long enter position")
buyPeriodExit = input(10, "Channel Period for Long exit position")
isMiddleBuy = input(true, "Is exit on Base Line? If 'no' - exit on bottom line")
takeProfitBuy = input(2.5, "Take Profit (%) for Long position")
isBuy = input(true, "Allow Long?")

//Short Options
sellPeriodEnter = input(20, "Channel Period for Short enter position")
sellPeriodExit = input(20, "Channel Period for Short exit position")
isMiddleSell = input(true, "Is exit on Base Line? If 'no' - exit on upper line")
takeProfitSell = input(2.5, "Take Profit (%) for Short position")
isSell = input(true, "Allow Short?")

// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)

//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)

timeRange = time > startTest and time < endTest ? true : false

// Long&Short Levels
BuyEnter = highest(buyPeriodEnter)
BuyExit = isMiddleBuy ? ((highest(buyPeriodExit) + lowest(buyPeriodExit)) / 2): lowest(buyPeriodExit)

SellEnter = lowest(sellPeriodEnter)
SellExit = isMiddleSell ? ((highest(sellPeriodExit) + lowest(sellPeriodExit)) / 2): highest(sellPeriodExit)

// Plot Data
plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter")
plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50)
plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter")
plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50)

// Calc Take Profits
TakeProfitBuy = 0.0
TakeProfitSell = 0.0
if strategy.position_size > 0
    TakeProfitBuy := strategy.position_avg_price*(1 + takeProfitBuy/100)
    
if strategy.position_size < 0
    TakeProfitSell := strategy.position_avg_price*(1 - takeProfitSell/100)

// Long Position    
if isBuy and timeRange
    strategy.entry("Long", strategy.long, stop = BuyEnter, when = strategy.position_size == 0) 
    
strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TakeProfitBuy, when = strategy.position_size > 0)

// Short Position
if isSell and timeRange
    strategy.entry("Short", strategy.short, stop = SellEnter, when = strategy.position_size == 0) 
    
strategy.exit("Short Exit", "Short", stop=SellExit, limit = TakeProfitSell, when = strategy.position_size < 0)

// Close & Cancel when over End of the Test
if time > endTest
    strategy.close_all()
    strategy.cancel_all()