この戦略は,最初にウルフ・ジェンセンが彼の本"How I Tripped My Money in the Futures Market"の183ページで提案した逆転戦略と比較相対強度指標を組み合わせ,より強い信号を得ます.この組み合わせ戦略は"逆転と比較相対強度に基づく定量戦略"と呼ばれます.
この戦略の主な考え方は,複数の要因を同時に判断することである.逆転因子と相対強度信号を組み合わせることで,両方が同じ信号を与える場合にのみ購入または販売オーダーを置くため,戦略の安定性を向上させる.
第1部は逆転戦略である. ストラテジーは,閉店価格が過去2日間継続的に上昇し,9日ストコスタスティックスローラインが50を下回るときに長引く. 閉店条件は,閉店価格が過去2日間継続的に低下し,9日ストコスタスティックスローラインが50を超えると長引く.
2つ目の部分は比較相対強度指標である.この指標は,ターゲット株とベンチマーク指数との間のN日間の閉場価格変動率の移動平均を計算し,それを事前に設定された購入ゾーン,販売ゾーン,閉場と比較する.指標が購入ゾーンを超えると長行,販売ゾーンを下回ると短行,長期で指標が閉場ゾーンを下回ると短行,指標が閉場ゾーン上昇すると閉場する.
この組み合わせの戦略は,両者の信号を同時に判断します. 両方が同じ信号 (両方が購入または両方が販売) を与えるときにのみ購入または販売注文をします.
この戦略は,逆転因子と相対強度因子の利点を組み合わせます.逆転戦略は短期的に極端を捉えることができます.相対強度戦略は,より広範な市場の主要な傾向を把握することができます.両方の戦略からの信号は信頼性を向上させ,ノイズによって引き起こされるいくつかの誤った信号をフィルタリングすることができます.
さらに,過剰購入と過剰販売の区間を区別する指標としてのストカスタスティック指標は,逆転点をより良く決定することができる.移動平均値などのトレンド指標と組み合わせることで,より成熟した組み合わせ戦略を形成することができます.
逆転戦略の最大のリスクは,市場の逆転のタイミングを決定することができないことであり,これは市場の逆転後も損失を継続させる可能性があります.この場合,相対強度指標が主要な傾向が変化したかどうかを判断するために作用します.
相対強度戦略のリスクは,誤ったパラメータ設定に起因し,誤った信号が多く発生する可能性があります.この場合,逆転戦略は,不要な取引を減らすためにフィルタリングに役割を果たします.
この戦略は,次の側面で最適化できます.
より良い逆転戦略を見つけるために,より多くの逆転因子をテストします.現在のものは,単純なN日新高低統計戦略を使用します.
相対強度指標のパラメータをテストし最適化して最適なパラメータの組み合わせを見つけます.現在の設定は主観的で最適化されていない可能性が高いからです.
ストップ損失戦略を追加します.現在ストップ損失はありません.合理的なストップ損失を追加することでダウンサイドリスクを制御できます.
対象株に対する相対的な強度を計算し,最適なマッチングインデックスを見つけるために,異なるベンチマークインデックスをテストします.
この戦略は,逆転因子と相対強度因子を組み合わせて取引する.信号品質を改善するために両者の利点を利用し,比較的成熟した組み合わせ戦略である.パラメータ調節,ストップ損失戦略を追加し,さらにより良い結果を達成するために戦略組み合わせ方法を調整することで最適化するにはまだ多くの余地がある.
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 30/10/2019 // 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 // Comparative Relative Strength Strategy for ES // // 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 CRS(a, b, len, BuyBand, SellBand, CloseBand) => pos = 0.0 as = security(a, timeframe.period, close) bs = security(b, timeframe.period, close) nRes = sma(as/bs, len) pos := iff(nRes > BuyBand, 1, iff(nRes < SellBand, -1, iff(pos[1] == 1 and nRes < CloseBand, 0, iff(pos[1] == -1 and nRes > CloseBand, 0, nz(pos[1], 0))))) pos strategy(title="Combo Backtest 123 Reversal & Comparative Relative Strength", shorttitle="Combo", overlay = true) Length = input(14, minval=1) KSmoothing = input(1, minval=1) DLength = input(3, minval=1) Level = input(50, minval=1) //------------------------- a = syminfo.tickerid b = input("BTC_USDT:swap", type=input.symbol) LengthCRS = input(10) BuyBand = input(0.9988, step = 0.0001) SellBand = input(0.9960, step = 0.0001) CloseBand = input(0.9975, step = 0.0001) reverse = input(false, title="Trade reverse") posReversal123 = Reversal123(Length, KSmoothing, DLength, Level) posCRS = CRS(a, b, LengthCRS, BuyBand, SellBand, CloseBand) pos = iff(posReversal123 == 1 and posCRS == 1 , 1, iff(posReversal123 == -1 and posCRS == -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 )