ドンチャン波チャネル取引戦略


作成日: 2023-11-08 12:31:56 最終変更日: 2023-11-08 12:31:56
コピー: 0 クリック数: 693
1
フォロー
1617
フォロワー

ドンチャン波チャネル取引戦略

概要

唐波動チャネル取引戦略は,特定の周期内の最高価格と最低価格のチャネルを計算して,現在の価格傾向を判断し,突破チャネルと組み合わせてロングとショート取引を行う.この戦略は,高い波動性の株式と仮想通貨取引に適用されます.

戦略原則

この戦略は,last (history) 周期内の最高価格pcmaxと最低価格pcminを計算して通路を構築する.通路の上線と下線の計算方法は次のとおりである.

軌道上yh = pcmax - (pcmax - pcmin) * (100 - percentDev)/100

下線yl = pcmin + (pcmax - pcmin) * percentDev/100

デブ・ムーアは13%も賛成している.

価格が上線を突破すると,ロングシグナルが生成され,価格が下線を突破すると,ショートシグナルが生成されます.

特定の取引信号の生成の判断方法は以下の通りです.

  1. boundup = high > yh 突破したかどうかを判断する

  2. bounddn = low < yl 軌道下破りを判断する

  3. upsign = sma(bounddn, 2) == 1bounddnの均線から判断して継続的に下線突破

  4. dnsign = sma(boundup, 2) == 1boundupの均線によって判断して継続的に上線突破

  5. exitup = dnsign 上線突破で平仓信号が生じる

  6. exitdn = upsign 下線を突破して平仓信号を生成

  7. if upsign 下軌を突破して多信号を生成する

  8. if dnsign 突破上線で空白信号が生成

この戦略は,不要な夜間ポジションを避けるために,取引開始時刻を設定します.

戦略的優位性

  1. 唐通路でトレンドを判断し,よりよい反測結果が得られる

  2. オーバーとオフのシグナルを設定し,両方向に取引できます.

  3. 平均線フィルターで判断し,誤った取引を避ける

  4. ストップ・ロスを設定し,リスクをコントロールできます.

  5. 取引開始・終了時間を設定して,夜間ポジションのリスクを避ける

戦略リスク

  1. 唐通路は,パラメータhistoryとpercentDevに敏感であり,異なる品種に対応するためにパラメータを最適化する必要があります.

  2. 震災の際に誤った信号が出る可能性

  3. 注文管理の要素を考慮しない場合,実盤で利益に影響を及ぼす可能性があります.

  4. ポジション管理の要素を考慮しないことにより,ポジションの過剰なリスクがある可能性があります.

  5. 資金管理の要素を考慮せずに,取引資金の合理的な配置が必要である

戦略最適化の方向性

  1. パーセンテージの最適化 (historyとpercentDev) を行い,異なる品種に適している.

  2. フィルターを追加して,震動時の誤信号を回避する

  3. ポジション管理モジュールに追加し,単一のポジションの占有率を制御します.

  4. 資金管理モジュールに追加し,総ポジション占有率を制限する

  5. 注文管理機能を追加し,注文方法を最適化

要約する

唐波動チャネル取引戦略は,チャネルを突破してトレンドと取引シグナルを判断し,反測効果が優れているが,双方向取引能力がある.しかし,この戦略にはいくつかのリスクがあり,パラメータ,フィルター,ポジション管理,資金管理,注文管理などの側面を最適化して,現場で安定した利益を得る必要がある.全体的に,この戦略は,より伝統的なトレンドフォロー戦略であり,最適化改進を経て,信頼できる量化取引戦略になることができる.

ストラテジーソースコード
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////
//  Copyright by AlexInc v1.0 02/07/2018  @aav_1980
// PriceChannel strategy
// If you find this script helpful, you can also help me by sending donation to 
// BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS
// LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM
////////////////////////////////////////////////////////////
//@version=3
strategy("AlexInc PriceChannel Str", overlay=false)
history = input(20)
percentDev = input(13)
capital = input(100)

needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usestoploss = input(true, defval = true, title = "Stop Loss")
stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator")


fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

bodymin = min( open, close)
bodymax = max(open, close)

pcmax = highest(bodymax, history)
pcmin = lowest(bodymin, history)

yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin
yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin

plot(pcmax)
plot(pcmin)
plot(yh)
plot(yl)

//1
bounddn = low < yl ? 1 : 0
boundup = high > yh ? 1 : 0
upsign = sma(bounddn, 2) == 1
dnsign = sma(boundup, 2) == 1
//2
//upsign = crossover(bodymin, yl)
//dnsign = crossunder(bodymax , yh)


exitup = dnsign
exitdn = upsign

lot = strategy.equity / close * capital / 100


xATR = atr(history)
nLoss = usestoploss ? stoplossmult * xATR : na

stop_level_long = 0.0
stop_level_long := nz(stop_level_long[1])

stop_level_short = 0.0
stop_level_short := nz(stop_level_short[1])

pos = strategy.position_size
if pos >0 and pos[1] <= 0 //crossover(pos, 0.5)
    stop_level_long = strategy.position_avg_price - nLoss
if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5)
    stop_level_short = strategy.position_avg_price + nLoss
if pos == 0    
    stop_level_long = bodymin - nLoss
    stop_level_short = bodymax + nLoss

//plot(bodymax + nLoss, color=red)
//plot(bodymin - nLoss, color=red)
plot(stop_level_long, color=red)
plot(stop_level_short, color=red)

if upsign
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dnsign
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

if true
    strategy.close_all()


//if strategy.position_size != 0
//    strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long)
//    strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)