
この戦略は,反転因子と動力因子を組み合わせた多要素の戦略で,市場の反転の機会を掘り出すことを目的としている.戦略は,まず,長期負の反転因子を使用して,整合後下落後の反転の機会を識別し,次に,動力指標を使用して二次フィルタリングを行い,大トレンドの下の反転偽信号をフィルタリングし,短線反転の利回り機会をロックします.
この戦略は2つの部分から構成されています.
この部分は,日内反転の考え方を適用し,前日の閉店価格と前2日の閉店価格の関係を判断し,ゆっくりとしたK線が反転の機会を識別する.具体的論理は:
買取シグナル: 連続して2日間の閉盘価格下落の後,その日の閉盘価格が上昇し,そして9日間のゆっくりとしたK線が50以下である場合,買取シグナルが生じます.
売出シグナル: 2日連続で閉盘価格が上昇した後,その日の閉盘価格が下がり,そして9日速K線が50以上である場合,売出シグナルが発生する.
この部分は,三つのEMAの平滑価格動力の方法を使用して動力の指標を構築する.指標の公式は以下のとおりである.
xPrice1 = close - close[1]
xPrice2 = abs(close - close[1])
xSMA_R = EMA(EMA(EMA(xPrice1,r), s), u)
xSMA_aR = EMA(EMA(EMA(xPrice2, r), s), u)
xTSI = xSMA_R / xSMA_aR * 100
xEMA_TSI = EMA(xTSI, N)
その中で,xSMA_Rは価格動力のEMA平滑値,xSMA_aRは価格変動幅のEMA平滑値,xTSIは両者の比率を構成した動力の指標,xEMA_TSIはxTSIの再びEMA平滑である.この指標は,取引方向としてのxTSIとxEMA_TSIの関係を判断する.
最後に,戦略は2つの部分の信号をAND操作にかけ,その2つの部分因子が同方向に信号を発する時のみ,実際の取引指示を生成する.
この戦略の最大の利点は,偽の信号をフィルターして高品質の取引機会を発見できる多要素設計である.具体的には,以下の3点があります.
123反転因子は,整合後下落後の短期反転点を識別する.
エルグディック動量指標は,大トレンドの方向を効果的に判断し,反転信号が大トレンドで発生することを避け,偽信号をフィルターします.
信号の2部分はAND処理を採用し,信号の質を向上させ,戦略の安定性を強化する.
戦略は多要素設計によってリスク管理されているが,主なリスクは以下の通りである.
逆転シグナルは,振動的なトレンドの中で発生し,利益を得られない可能性があります.
2つの因子の間のパラメータ設定は主観的であり,特定の品種に過度に適合する可能性がある.
逆転後の価格再調節は,損失のリスクを増加させる可能性があります.
これらのリスクは,より多くの品種に対応するためにパラメータを最適化し,逆転後の保有時間を制御し,指標関係の変化をリアルタイムで監視することによって緩和できます.
この戦略は,以下のような点で最適化できます.
2つの要素のパラメータを調整して,よりマッチするデータサンプルを探します.
単一損失をコントロールするストップ・ロース戦略を導入する.
トレンド品種と振動品種に対して異なるパラメータの組み合わせを使用する.
ポイントの重み付けのメカニズムが加えられ,優れたポイントの重み付けが加えられます.
機械学習アルゴリズムを追加し,パラメータの自動最適化と更新を実現する.
この戦略は,反転因子と動量指標を組み合わせて,多因子最適化設計を実現することに成功した.それは,短期的な反転の機会を効果的に識別し,動量指標を信号の二次検証に利用して,戦略の勝利率を向上させることができる.戦略にはまだ一定の改善の余地があるが,その核心思想は,量化戦略の設計に良い参考を提供している.
/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 30/07/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
// r - Length of first EMA smoothing of 1 day momentum 4
// s - Length of second EMA smoothing of 1 day smoothing 8
// u- Length of third EMA smoothing of 1 day momentum 6
// Length of EMA signal line 3
// Source of Ergotic TSI Close
//
// This is one of the techniques described by William Blau in his book "Momentum,
// Direction and Divergence" (1995). If you like to learn more, we advise you to
// read this book. His book focuses on three key aspects of trading: momentum,
// direction and divergence. Blau, who was an electrical engineer before becoming
// a trader, thoroughly examines the relationship between price and momentum in
// step-by-step examples. From this grounding, he then looks at the deficiencies
// in other oscillators and introduces some innovative techniques, including a
// fresh twist on Stochastics. On directional issues, he analyzes the intricacies
// of ADX and offers a unique approach to help define trending and non-trending periods.
//
// 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
ETSI(r,s,u,SmthLen) =>
pos = 0
xPrice = close
xPrice1 = xPrice - xPrice[1]
xPrice2 = abs(xPrice - xPrice[1])
xSMA_R = ema(ema(ema(xPrice1,r), s),u)
xSMA_aR = ema(ema(ema(xPrice2, r), s),u)
Val1 = 100 * xSMA_R
Val2 = xSMA_aR
xTSI = iff (Val2 != 0, Val1 / Val2, 0)
xEMA_TSI = ema(xTSI, SmthLen)
pos:= iff(xTSI > xEMA_TSI, 1,
iff(xTSI < xEMA_TSI, -1, nz(pos[1], 0)))
pos
strategy(title="Combo Backtest 123 Reversal & Ergodic TSI", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
r = input(4, minval=1)
s = input(8, minval=1)
u = input(6, minval=1)
SmthLen = input(3, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posETSI = ETSI(r,s,u,SmthLen)
pos = iff(posReversal123 == 1 and posETSI == 1 , 1,
iff(posReversal123 == -1 and posETSI == -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 )