トレンドするダーバスの箱 定量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月27日 14:45:41
タグ:

img

概要

トレンディング・ダーバス・ボックス戦略は,市場動向を把握するためにダーバス・ボックスチャネルを使用する短期間の取引戦略である.コアメカニズムは,市場の勢いを決定し,取引機会を特定するためにダーバス・ボックス指標に依存する.価格がボックストップを超えると長引く,価格がボックス底を下回ると短引く.さらに,この戦略は安定性を高めるために他の補助指標も利用する.

戦略の論理

  • この戦略ではデフォルトで5バーである Darvas ボックスのサイズを設定するために長さパラメータを使用します.
  • 高値/低値のブレイクに基づいてトレンド方向を決定し,対応するロング/ショートポジションを取ります.
  • 価格がボックスの上位を突破すると,緑色のトップボックス線が描かれます.これは長い信号です.
  • 価格がボックス底を下回ると,赤いボトムボックス線が描かれます.これはショート信号です.
  • 補助指標として移動平均システムを使用します.価格がMAsを超えるとロングで,MAsを下回るとショートします.
  • RVI を使用して,過買い/過売りゾーンを識別します.信号線上の RVI は過買いを示し,下の RVI は過売りを示します.

上記のすべての指標が同意したときにエントリが取られます.ストップロスはダーバスのボックスの反対帯に設定されます.出口はRVI方向性で管理されます.

利点分析

  • ダルバスのボックスチャネルは 市場の動向を効果的に把握し 逃した機会を減らします
  • 箱の突破信号が頻繁に 入り口の頻度はよく
  • 合理的なボックスでは損失を停止し 単一の取引リスクを制御します
  • 補助指示は正確性を向上させる.

リスク分析

  • 取引ごとにリスクが大きい
  • 小規模な引き下げでロングトレードが停止される可能性があります.
  • ボックスの方向性は常に正しくない 潜在的に悪い信号
  • 補助指示器が箱に並ぶために細かな調整が必要です.

リスクを減らすためにストップロスを引き締める.補助パラメータも効率的にシグナルをスクリーンするために最適化する必要があります.

オプティマイゼーションの方向性

  • 最適のサイズを見つけるために箱の長さをテストする.
  • 箱に最適化する補助パラメータを最適化します
  • さらに信号の検証のために他の補助指標,例えばKDJ,MACDを試す.
  • ストップ・ロスのテストと 利益の設定を重ねて 安定性を高めます

結論

概要すると,トレンドダーバスボックス戦略は,短期的なトレンドをターゲットとした積極的な取引戦略である.ダーバスボックスチャネルでトレンド変化を迅速に把握し,補助指標は正確性を向上させるのに役立ちます.リスク/リワウンドプロファイルは,この戦略にとってポジティブであり,採用と継続的な最適化に価値がある.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © xxy_theone
// https://www.youtube.com/watch?v=YYxlnFOX9sQ
// This strategy script has been made to backtest the strategy explained in the video above


//@version=5
strategy(shorttitle = "Darvas Box Test", title="TradeIQ Darvas Box Test", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, currency=currency.USD)

// === INPUT BACKTEST RANGE ===
var GRP1 = "Backtest Range"
fromDate = input(timestamp("7 Mar 2022 00:00 +0000"), "From", group=GRP1)
toDate = input(timestamp("19 Mar 2022 23:59 +0000"), "To", group=GRP1)
window() =>  true


var GRP3 = "Darvas Box"
boxp=input(5, "Box Length", group=GRP3)

LL = ta.lowest(low,boxp)
k1=ta.highest(high,boxp)
k2=ta.highest(high,boxp-1)
k3=ta.highest(high,boxp-2)

NH =  ta.valuewhen(high>k1[1],high,0)
box1 =k3<k2
TopBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, NH, 0)
BottomBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, LL, 0)


plot(TopBox, linewidth=3, color=color.green, title="TBbox") 
plot(BottomBox, linewidth=3, color=color.red, title="BBbox")


var GRP4 = "MavilimW"

fmal=input(3,"First Moving Average length", group=GRP4)
smal=input(5,"Second Moving Average length", group=GRP4)
tmal=fmal+smal
Fmal=smal+tmal
Ftmal=tmal+Fmal
Smal=Fmal+Ftmal

M1= ta.wma(close, fmal)
M2= ta.wma(M1, smal)
M3= ta.wma(M2, tmal)
M4= ta.wma(M3, Fmal)
M5= ta.wma(M4, Ftmal)
MAVW= ta.wma(M5, Smal)
col1= MAVW>MAVW[1]
col3= MAVW<MAVW[1]
colorM = col1 ? color.blue : col3 ? color.red : color.yellow

plot(MAVW, color=colorM, linewidth=2, title="MAVW")


var GRP5 = "Relative Vigor Index"
len = input.int(10, title="Length", minval=1, group=GRP5)
rvi = math.sum(ta.swma(close-open), len)/math.sum(ta.swma(high-low),len)
sig = ta.swma(rvi)
offset = input.int(0, "Offset", minval = -500, maxval = 500, group=GRP5)
//plot(rvi, color=#008000, title="RVGI", offset = offset)
//plot(sig, color=#FF0000, title="Signal", offset = offset)


var longStopSet = false

long = ta.crossover(close,TopBox) and close > MAVW ? true : false
longClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossunder(rvi,sig) ? true : false
strategy.entry("Long Position", strategy.long, when = long and window() and strategy.position_size==0 and strategy.closedtrades<100)
if(longStopSet==false and strategy.position_size > 0)
    strategy.exit("exit", "Long Position", stop=BottomBox)
    longStopSet := true
if(strategy.position_size==0)
    longStopSet := false
strategy.close("Long Position", when = longClose)

var shortStopSet = false

short = ta.crossunder(close,BottomBox) and close < MAVW ? true : false
shortClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossover(rvi,sig) ? true : false
strategy.entry("Short Position", strategy.short, when = short and window() and strategy.position_size==0 and strategy.closedtrades<100)
if(shortStopSet==false and strategy.position_size < 0)
    strategy.exit("exit", "Short Position", stop=TopBox)
    shortStopSet := true
if(strategy.position_size==0)
    shortStopSet := false
strategy.close("Short Position", when = shortClose)


もっと