賢明な定量的な底辺逆転取引戦略

作者: リン・ハーンチャオチャン, 日時: 2023-12-08 10:45:49
タグ:

img

概要

この戦略は,仮想通貨向けに設計されたスマートな定量的な底辺逆転取引戦略である.マルチタイムフレーム技術と適応性RSI指標を使用して,市場の潜在的な短期底辺を特定し,過剰な収益を達成するために底辺に近い逆転に入ります.

戦略原則

まず,この戦略は,適応性RSI指標を計算するために価格と取引量の変化を採用し,短期間の市場底辺を判断する.その後,マルチタイムフレーム技術と組み合わせて,より大きなタイムフレームで底辺信号を確認する.適応性RSI線が0レベルを超えると購入信号が生成される.

具体的には,適応性RSI指標は以下の通り計算される.まず各キャンドルスティックの価格の変化を計算し,その後そのキャンドルスティックの取引量を計算する.そのキャンドルスティックの定量的なモメンタムを得るために2つを掛けます.定量化されたモメンタムにRSI計算を適用し,最終的な適応性RSI指標を得るためにN期間の平均を取ります.この指標は市場の底部を明確に識別することができます.

さらに,この戦略は,より高いタイムフレームのシグナルを判断するためのマルチタイムフレーム技術を組み込み,短期間の市場騒音による干渉を回避する.より高いタイムフレームの移動平均が底から回転すると,この戦略の購入タイミングとみなされます.

利点分析

この戦略の最大の利点は,適応性RSI指標を使用して短期市場底部を正確に特定することで,底部逆転取引のための効果的なシグナルを提供します. さらに,マルチタイムフレーム技術の組み込みは,短期ノイズからの干渉を回避することによって信号品質を改善します.

従来のRSI指標と比較して,適応型RSI指標は計算に定量的な勢いを導入し,急速に変化する暗号通貨市場に対してより敏感になり,したがって底辺を早期により正確に特定することができ,底辺逆転取引の先端となる.

この戦略は,トレンドフォローとリバーストレードの両方の利点を組み合わせている.不確実な市場条件では,リバーストレードから利益を得ることができる.明確な牛市では,トレンドもフォローできる.

リスク分析

この戦略の主なリスクは,底部識別の精度は100%保証できないことにある.短期的には市場で大きな不合理な変動が起こり得る.底部がさらに下へと広がれば,大きなストップ損失リスクに直面する.

また,異なるタイムフレーム間で差異が発生することがあります.より高いタイムフレームからの信号が遅れている場合,取引損失につながる可能性があります.

この戦略は,リスクを制御するために,比較的保守的なストップ・ロスのメカニズムを採用し,利益をバッチで取り,徐々にリターンを最適化します.また,適応性RSIのパラメータは,底部判断の精度を最適化するために調整することができます.

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

この戦略は,次の側面で最適化できます.

  1. 適応性RSIのパラメータを最適化し,市場の底盤判断の精度を向上させる.異なる期間のパラメータをテストすることができます.

  2. 誤った信号を避けるために,音量指標などと組み合わせるなどの他の確認指標を追加します.

  3. ストップ・ロスのメカニズムを最適化して,より広いストップ・ロスの範囲を可能にし,同時に良いリスク・リターン比を確保し,より多くのトレンド利益を得ることができる.

  4. タイムフレーム選択を最適化して,より大きなスケールで信号の信頼性を確保します.毎日,毎週,さらにはより長いタイムフレームをテストできます.

  5. この戦略を異なる仮想通貨製品でテストし,最も優れたものを選択します

概要

このスマートな定量的な底辺逆転取引戦略は,適応性RSI指標とマルチタイムフレーム技術を使用して潜在的な短期底辺を特定する.その逆転性質は,不確実な市場状況下で過度の利益を実現し,同時に明確なトレンドを追跡することができます.継続的な最適化により,この戦略はより信頼性の高い取引信号を生成し,長期的な安定した利益を達成する可能性があります.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-07 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © theCrypster 2020

//@version=4
strategy(title = "Low Scanner strategy crypto", overlay = false, pyramiding=1,initial_capital = 1000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.075)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
leng=1
p1=close[1]
min=input(10)
len55 = timeframe.isintraday and timeframe.multiplier >= 1 ? 
   min / timeframe.multiplier * 7 : 
   timeframe.isintraday and timeframe.multiplier < 60 ? 
   60 / timeframe.multiplier * 24 * 7 : 7
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
tf3 = input("60", type=input.resolution)
ti = change( time(tf3) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
min1 =input(1)
len100 = timeframe.isintraday and timeframe.multiplier >= 1 ? 
   min1 / timeframe.multiplier * 7 : 
   timeframe.isintraday and timeframe.multiplier < 60 ? 
   60 / timeframe.multiplier * 24 * 7 : 7
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange
plot(zx,color=col,linewidth=1)
//

tf10 = input("60", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(24, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)


a = security(syminfo.tickerid, tf10, hma(close, length))
b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)


//plot(linear_reg, color=color.blue, title="LR", linewidth=3)

buy=crossover(linear_reg, b) 
sell=crossunder(linear_reg, b) 
//
l = crossover(zx,0) or buy
        
if l 
    strategy.entry("buy", strategy.long)

per(pcnt) =>
    strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
stoploss=input(title=" stop loss", defval=10, minval=0.01)
los = per(stoploss)
q1=input(title=" qty_percent1", defval=25, minval=1)
q2=input(title=" qty_percent2", defval=25, minval=1)
q3=input(title=" qty_percent3", defval=25, minval=1)
tp1=input(title=" Take profit1", defval=1, minval=0.01)
tp2=input(title=" Take profit2", defval=2, minval=0.01)
tp3=input(title=" Take profit3", defval=3, minval=0.01)
tp4=input(title=" Take profit4", defval=5, minval=0.01)
strategy.exit("x1", qty_percent = q1, profit = per(tp1), loss = los)
strategy.exit("x2", qty_percent = q2, profit = per(tp2), loss = los)
strategy.exit("x3", qty_percent = q3, profit = per(tp3), loss = los)
strategy.exit("x4", profit = per(tp4), loss = los)


もっと