
この戦略は,移動平均線反転と価格振動指標の2つの指標を統合して,取引シグナルを形成し,周期反転が発生した後に反発したトレンド取引戦略を捉えるようにします.
この戦略は,主に以下の2つの技術指標を用いて取引信号を判断します.
この部分は,過去2日間の収束価格の上昇と低下を計算し,快線K値の大きさと組み合わせることで,反転シグナルが発生したかどうかを判断します. 過去2日間の価格が上昇し続け,快線K値が慢線K値より低ければ買入シグナルが発生します. 過去2日間の価格が低下し続け,快線K値が慢線K値より高ければ売出シグナルが発生します.
Detrend Price Oscillatorは,水平移動平均を描き,価格とその線との関係によって価格周期を識別する.計算周期より長いトレンドをフィルターし,移動平均が隠している短期周期の変動を識別することができる.価格が平均より高いときは買い信号,平均より低い場合は売り信号である.
この戦略は,2つの指標のシグナルを統合し,移動平均線反転シグナルが発生すると,価格脱離指標も確認反転シグナルを与えると,取引指示を生成します. これにより,部分的に無効な反転シグナルをフィルターして,反転後に反発するトレンドの機会を捉えることができます.
この戦略の最大の利点は,二つの指標の優位性を合理的に利用し,互補的な確認を行うことで,無効信号を効果的にフィルターし,信号の信頼性を高めることができるということである.
移動平均線反転指標は,それ自体で誤信号を生じやすく,それだけで判断し,高殺低を追いかけるのが容易である.価格脱離指標を組み合わせるために導入すると,理想的でない振動範囲で反転操作を避けることができます.
価格脱離指標のパラメータ設定は,短期の変動のみを識別することを決定し,移動平均線反転の判断と非常に合致し,合理的な反転タイミングを識別することができます.
この戦略には以下のリスクがあります.
移動平均線反転は,整列振動区間の間に容易に行われる.反転力が不足すれば,再び回調し,止損線に触れて利益を得ることができない.
価格脱離指標のパラメータが大きすぎると中長線周期的な傾向が認識され,小さすぎると誤判のリスクが増加する.異なる品種に対して慎重なテストが必要である.
重大な突発的なニュースイベントの介入は,元のトレンド判断を混乱させ,反転シグナルを無効にします.これは,ニュースイベントの発生時に盲目取引を避けるために,基本的ニュースに注意する必要があります.
この戦略をさらに最適化するには,以下のポイントを参考にしましょう.
モバイルストップまたはタイムストップを合理的に設定し,単発的な損失を制御できます.
取引量の確認を増加させ,例えば平均取引量の突破時にのみ信号を発信することで,量能が不足した無効突破を回避することができる.
市場段階に応じてパラメータを動的に最適化し,トレンドが明らかであるときにパラメータを適切に緩和し,震動時にパラメータを厳しくする.
ランダムフォレストなどの機械学習方法を使用して,パラメータの組み合わせを評価して選択し,動的インテリジェンス最適化を実現する.
この戦略は,2つの指標の優位性をうまく組み合わせ,逆転の時に反発傾向を捉える. 隠蔽,パラメータ最適化などの問題はまだ存在しますが,全体的な考え方は明確で,論理的に合理的で,安定した利益を実現するためにさらなるテストと最適化の価値があります.
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 30/12/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
// The Detrend Price Osc indicator is similar to a moving average,
// in that it filters out trends in prices to more easily identify
// cycles. The indicator is an attempt to define cycles in a trend
// by drawing a moving average as a horizontal straight line and
// placing prices along the line according to their relation to a
// moving average. It provides a means of identifying underlying
// cycles not apparent when the moving average is viewed within a
// price chart. Cycles of a longer duration than the Length (number
// of bars used to calculate the Detrend Price Osc) are effectively
// filtered or removed by the oscillator.
//
// 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
DPO(Length) =>
pos = 0.0
xPrice = close
xsma = sma(xPrice, Length)
nRes = xPrice - xsma
pos := iff(nRes > 0, 1,
iff(nRes < 0, -1, nz(pos[1], 0)))
pos
strategy(title="Combo Backtest 123 Detrended Price Oscillator", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthDPO = input(14, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posDPO = DPO(LengthDPO)
pos = iff(posReversal123 == 1 and posDPO == 1 , 1,
iff(posReversal123 == -1 and posDPO == -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 )