
この戦略は,3つの異なる技術指標を組み合わせて,複数のタイムフレームを構成する値策略を構築し,異なるタイムサイクルで価格の動向を捉え,低リスクの超利益を実現します.
この戦略で用いられる3つの技術指標は,ケルターチャネル ((KC),波動率ストップ ((Vstop),およびウィリアム・ミーティング・ミーティング・インディケータ ((WAE) である.ケルターチャネルは,価格がチャネル範囲の外にあるかどうかを判断するために取引信号を発信する.波動率ストップは,ストップポジションを動的に調整して,ストップを保証しながら不必要なストップを減らすために使用される.ウィリアム・インディケーターは,価格が強気方向にあるかどうかを判断するために使用される.具体的には:
価格がセルツチャネル上線より高いときは,看板信号とみなす.価格がセルツチャネル下線より低いときは,看板信号とみなす.
変動率のストップは,価格の変動率と通路の幅に応じてストップポジションを設定します.これは,ストップを保証しながら,過剰に保守的なストップポジションを避けるために,動的に調整することができます.
ウィリアムズ指数は,MACDとブリン帯通路の幅を計算して,価格が強い上昇または下落の傾向にあるかどうかを判断します.
この3つの指標を組み合わせることで,異なる時間周期の信号が相互検証を可能にします.これは誤判の可能性を軽減し,安定した最適化戦略の論理を構築します.
この戦略の最大の利点は,複数の指標の組み合わせによってもたらされる正確な取引信号である. 3つの指標は,異なる時間周期で作用し,相互に検証し,誤判の可能性を効果的に軽減し,信号の正確性を高めることができる. さらに,波動率のストップ損失設定は動的であり,リアルタイム波動に応じてストップ損失位置を調整し,リスクをさらに制御することができる.
単一の指標戦略と比較して,この組み合わせ戦略は,より正確で高効率の取引信号を提供することができます.同時に,三つの指標が相互に協力し,複数の時間枠で取引判断を形成する.この論理的設計は,非常に科学的に合理的で,参考に値します.
この戦略の主なリスクは,パラメータを誤って設定すると過適合が起こりうることにある. 3つの指標には合計8つのパラメータがあり,誤って設定すると戦略に悪影響が及ぶ可能性がある.さらに,指標間の重量関係も合理的に配置する必要がある.そうでなければ,信号は相互を抵消し,無効になる可能性がある.
これらのリスクを軽減するために,パラメータ設定プロセスは,異なる市場環境の適応性を十分に考慮し,反射分析によって最適なパラメータパッケージに調整する必要があります.また,指標間の重関数を適切に調整して,取引信号が効果的に誘発されることを確保する必要があります.連続的な損失が発生した場合,ポジションの規模を減らすことも考慮し,損失を制御する必要があります.
この戦略の最適化スペースは,パラメータ調整と止損策の改善の2つの側面に主に集中する.具体的には以下のいくつかの側面から始めることができる:
より科学的に合理的に指標パラメータを選択し,パラメータの組み合わせを最適化する.利回り最大化,リスク最小化などの目標に従ってアルゴリズムを使用して最適なパラメータを探すことができる.
ストップ・ローズ戦略を改良し,ストップ・ローズを保証する前提で,不要なストップをさらに削減し,勝率を向上させる.例えば,ストップ・信号としてより多くの指標を組み合わせること,またはストップ・ローズ位置の漸進的な回調を設定すること.
指標の重量関係と取引信号の判断論理を最適化し,誤判率を下げる.より多くの価格行動特性を導入し,より安定した信頼できる判断ルールを構築することができる.
機械学習モデルを導入し,パラメータの自動最適化を行うか,深度強化学習プログラムを使用して戦略の評価と改善を行うか.
この戦略は,ケルターチャネル,波動率ストップとウィリアム指標の3つの組み合わせを使用して,時間枠を越えたレバレッジシステムを構築する.複数の指標の組み合わせは,取引信号の正確性を高め,ダイナミックストップはリスクを制御する.しかし,パラメータの設定と最適化に関して改善の余地があります.全体的に,この戦略は科学的であり,さらなる研究と応用に値する.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("QuarryLake", overlay=true) ///Ultilized modified full kelly for this strategy = 36%
///Keltner channel///
nPeriod = input(title="Keltner Period", type=input.integer, defval=200, minval=1)
Mult = input(title="Keltner Mult", type=input.integer, defval=5, minval=1)
xPrice = ema(hlc3, nPeriod)
xMove = ema(high - low, nPeriod)
xMoveMult = xMove * Mult
xUpper = xPrice + xMoveMult
xLower = xPrice - xMoveMult
// plot(xPrice, color=red, title="KSmid")
p1 = plot(xUpper, color=color.white, title="KSup")
p2 = plot(xLower, color=color.white, title="KSdn")
fill(p1, p2, color=close > xUpper ? color.green : close < xLower ? color.red : color.white)
kclongcondition = close > xUpper
kcshortcondition = close < xLower
kccloselongcondition = crossunder(close, xUpper)
kccloseshortcondition = crossover(close, xLower)
///Volatility Stop///
length = input(title="Vstop length", type=input.integer, defval=3, minval=1)
mult1 = 1.5
atr_ = atr(length)
max1 = 0.0
min1 = 0.0
is_uptrend_prev = false
stop = 0.0
vstop_prev = 0.0
vstop1 = 0.0
is_uptrend = false
is_trend_changed = false
max_ = 0.0
min_ = 0.0
vstop = 0.0
max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)
is_uptrend_prev := nz(is_uptrend[1], true)
stop := is_uptrend_prev ? max1 - mult1 * atr_ : min1 + mult1 * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult1 * atr_ : min_ + mult1 * atr_ :
vstop1
plot(vstop, color=is_uptrend ? color.green : color.red, style=plot.style_line, linewidth=1)
vstoplongcondition = close > vstop
vstoplongclosecondition = crossunder(close, vstop)
vstopshortcondition = close < vstop
vstopshortclosecondition = crossover(close, vstop)
///Waddah Attar Explosion///
sensitivity = input(150, title="Sensitivity")
fastLength = input(20, title="FastEMA Length")
slowLength = input(40, title="SlowEMA Length")
channelLength = input(20, title="BB Channel Length")
mult = input(2.0, title="BB Stdev Multiplier")
DEAD_ZONE = nz(rma(tr(true), 100)) * 3.7
calc_macd(source, fastLength, slowLength) =>
fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)
fastMA - slowMA
calc_BBUpper(source, length, mult) =>
basis = sma(source, length)
dev = mult * stdev(source, length)
basis + dev
calc_BBLower(source, length, mult) =>
basis = sma(source, length)
dev = mult * stdev(source, length)
basis - dev
t1 = (calc_macd(close, fastLength, slowLength) -
calc_macd(close[1], fastLength, slowLength)) * sensitivity
t2 = (calc_macd(close[2], fastLength, slowLength) -
calc_macd(close[3], fastLength, slowLength)) * sensitivity
e1 = calc_BBUpper(close, channelLength, mult) -
calc_BBLower(close, channelLength, mult)
trendUp = t1 >= 0 ? t1 : 0
trendDown = t1 < 0 ? -1 * t1 : 0
waelongcondition = trendUp and trendUp > DEAD_ZONE and trendUp > e1
waeshortcondition = trendDown and trendDown > DEAD_ZONE and trendDown > e1
///Long Entry///
longcondition = kclongcondition and vstoplongcondition and waelongcondition
if longcondition
strategy.entry("Long", strategy.long)
///Long exit///
closeconditionlong = kccloselongcondition or vstoplongclosecondition
if closeconditionlong
strategy.close("Long")
///Short Entry///
shortcondition = kcshortcondition and vstopshortcondition and waeshortcondition
if shortcondition
strategy.entry("Short", strategy.short)
///Short exit///
closeconditionshort = kccloseshortcondition or vstopshortclosecondition
if closeconditionshort
strategy.close("Short")
///Free Hong Kong, the revolution of our time///