二重ドライバーの定量化逆転追跡戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-18 10:03:14
タグ:

img

概要

この2つのドライバーによる量子化逆転追跡戦略は,単純な移動平均指標とランダム指標を組み合わせて,短期間で効率的で安定した取引戦略を実現し,市場の急速な逆転を把握し,欠けている信号による機会コストを削減します.

戦略原則

戦略は2つの部分から構成される. 123の逆転パターン部分と適応型移動平均部分. 123の逆転パターンの部分は,前2日の取引日の間の閉値関係を計算することによって,逆転機会があるかどうかを判断する. 前日の閉値が前2日の価格よりも低く,現在の取引日の閉値が前日よりも高く,ゆっくりとしたランダムラインが50未満である場合,購入信号が生成される. 前日の閉値が前2日の価格よりも高く,現在の取引日の閉値が前日よりも低く,急速なラインが50以上である場合,セール信号が生成される. これは短期的な逆転機会を捕捉することができる. もう1つの部分は,動向平均信号である. 市場が不活性であるときに迅速に反応し,動向シグナルがゆっくりと反応し,トレンドとシグナルが一致するときに騒音とシグナルが作動し,主要なトレンドとシグナルが閉じると,それらは両方とも順応的に反応する.

戦略 の 利点

双ドライバー量子化逆転追跡戦略の最大の利点は,逆転パターンとトレンドフィルタリングを組み合わせて,ショック市場に閉じ込められることを避けながら急速な逆転を捕捉できるということです. 収入の主要な源は2つあります. 第一に,123パターンの識別は,多くの安定した戦略ができない価格が急速に方向を逆転したときの機会を迅速に追跡することができます. 第二に,適応性移動平均の適用は,取引方向が主なトレンドと一致することを確保し,ノイズを効果的にフィルタリングし,不必要な損失を削減します.

戦略 の リスク

この戦略の主なリスクは,不適切なパラメータ設定が過剰な取引頻度や信号識別能力不足につながる可能性があることである.123パターンのパラメータが過度に敏感である場合,不安定な市場条件で頻繁な取引につながり,より多くの閉店損失を引き起こす可能性がある.適応型移動平均パラメータがあまりにもゆっくりと設定されている場合,逆転の機会が逃れることがあります.また,トレンドする市場で新しい高値を追いかけて低値を売ることも,より大きな資本変動につながります.

戦略の最適化

戦略は,いくつかの方法で最適化することができる.第一に,誤った信号を生むのに敏感すぎることなく,明確な逆転を特定するために123パターンのパラメータを調整する.第二に,安定性と感度との間の最適なバランスを見つけるために適応性移動平均パラメータを最適化する.第三に,単一の損失を制御するためにストップ損失戦略を導入することができます.第四に,市場感情指標を組み合わせて意思決定品質を向上させることができます.

概要

双駆動量子化逆転追跡戦略は,逆転取引とトレンドフィルタリングの2つの不可欠な部分を成功裏に統合し,組み合わせた利点は著しい.パラメータ設定を継続的に最適化し,ストップ損失とリスク制御メカニズムを改善することによって,この戦略は,利益を得やすく,制御可能なリスクを持つ効率的な定量的な取引戦略になる可能性があります.


/*backtest
start: 2024-01-18 00:00:00
end: 2024-02-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 08/12/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// Everyone wants a short-term, fast trading trend that works without large
// losses. That combination does not exist. But it is possible to have fast
// trading trends in which one must get in or out of the market quickly, but
// these have the distinct disadvantage of being whipsawed by market noise
// when the market is volatile in a sideways trending market. During these
// periods, the trader is jumping in and out of positions with no profit-making
// trend in sight. In an attempt to overcome the problem of noise and still be
// able to get closer to the actual change of the trend, Kaufman developed an
// indicator that adapts to market movement. This indicator, an adaptive moving
// average (AMA), moves very slowly when markets are moving sideways but moves
// swiftly when the markets also move swiftly, change directions or break out of
// a trading range.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

KAMA(Length) =>
    pos = 0.0
    nAMA = 0.0
    xPrice = close
    xvnoise = abs(xPrice - xPrice[1])
    nfastend = 0.666
    nslowend = 0.0645
    reverse = input(false, title="Trade reverse")
    nsignal = abs(xPrice - xPrice[Length])
    nnoise = sum(xvnoise, Length)
    nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
    nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
    nAMA := nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1]))
    pos := iff(close[1] > nAMA, 1,
    	     iff(close[1] < nAMA, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Kaufman Moving Average Adaptive", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthKAMA = input(21, minval=2)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKAMA = KAMA(LengthKAMA)
pos = iff(posReversal123 == 1 and posKAMA == 1 , 1,
	   iff(posReversal123 == -1 and posKAMA == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

もっと