この戦略は,主に,EMA指標で現在のトレンド方向を判断しながら,過剰購入/過剰販売領域のストック指標のクロスをエントリー信号として利用する.EMAによって決定された上昇傾向では,長くなり,減少傾向では短くなります.これは典型的なトレンドフォロー戦略です.
戦略は主に3つの部分で構成されています.
EMAはトレンド方向を決定する
1つの高速EMAと1つの遅いEMAを使用すると,高速EMAが遅いEMAよりも高くなったとき,それは上昇傾向として決定されます.高速EMAが遅いEMAよりも低くなったとき,それは下降傾向として決定されます.
取引信号を生成するストック
ストック指標は%Kと%Dの線で構成される. %Kがオーバーバイトエリアで%Dを超えると,購入信号を生成する. %Kがオーバーバイトエリアで%Dを下回ると,売却信号を生成する.この戦略は,オーバーバイト/オーバーバイトゾーンで発生するときにのみストッククロスオーバー信号を取ります.
リスク管理メカニズム
ストップ・ロストとテイク・プロフィートのレベルも設定する.ロングポジションを保持する際に,価格がストップ・ロストレベルを突破した場合,取引から退場する.価格がテイク・プロフィートのレベルを突破した場合,利益のためにポジションを閉じます.同じ論理はショートポジションに適用されます.
一般的に,これは典型的な定量的な取引戦略であり,トレンド方向と取引シグナルを決定するために指標の組み合わせを使用し,取引リスクを減らすための厳格なリスク管理規則を補完します.
この戦略の主な利点は以下の通りです.
主要な傾向とマイナーな傾向を特定するために EMA を使用することで,横向市場に閉じ込められることはありません.
ストック指標の強みは,過剰購入/過剰販売レベルを正確に反映する能力にあります.これをクロスオーバー信号と組み合わせると,過剰購入/過剰販売ゾーン取引が可能になります.
戦略は,可能な長期・短期シナリオを明確に明示し,信号をさらにフィルタリングし,複雑な市場で盲目的にポジションを開くのを避ける.
厳格なリスクマネジメントは 個々の取引の損失を制御し,最大引き上げを制限し,利益のある取引を行う余地を与えます
この戦略にはいくつかのリスクもあります:
EMAやストックなどの指標は 遅滞性があるため この戦略は 市場の逆転を 間に合うように捉えることが難しいのです
単に指標に頼ると バイアスが容易になり 市場が実際に提供する取引機会を逃してしまうのです
リスクマネジメントメカニズム自体も,早期のストップ・ロストと得益を設定することで,利益の可能性を制限することができます.
パラメータ選択にはリスクがあります.最適なパラメータを見つけるには,広範なバックテストと最適化が必要です.
戦略は以下の側面で最適化できます.
WMA,Hull MAなどなど,トレンド決定のためのEMAの異なるタイプを試し,結果を比較します.
他の指標を組み合わせて取引シグナルを生成します.例えば,MACD,KDJを組み合わせて多指標システムを構築します.
ストップ・ロスの設定を最適化し,市場変動により良く適応するため,ストップ・ロスの設定を拡大し,利益の設定を厳しくすることができます.
最適な組み合わせを見つけるため,異なる製品と時間枠の性能差をテストします.
戦略をより知的なものにするために 傾向や信号判断を助ける機械学習モデルを導入することを検討します
結論として,この戦略は,傾向決定,取引信号,およびリスク管理を考慮して,比較的成熟したトレンドフォローシステムを形成するために一般的に使用される指標を組み合わせます.さらなる最適化により,この戦略はより良いライブ取引結果を達成できると信じています.同時に,我々は単一の戦略の限界も認識し,長期的な安定した利益を追求するために市場の複雑さを学び続けなければなりません.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //by Wugamlo //Strategy combining Stochastic Crosses in the Overbought/Oversold Area with a trend determined by two EMAs //Default setup seems to work best on 4HR timeframe for BTC strategy(title = "Strategy Stoch/EMA Cross", shorttitle = "Strategy Stoch/EMA Cross", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD, commission_value=0.01,commission_type=strategy.commission.percent, initial_capital=1000) // === GENERAL INPUTS === SectionInd = input(defval = true ,title = "════════════ INDICATORS ════════════") maFastLength = input(defval = 55, title = "Fast MA Period", minval = 1) maSlowLength = input(defval = 89, title = "Slow MA Period", minval = 1) StochLength = input(defval = 14, title = "Stochastic Length", minval=1) smoothK = input(defval = 6, title = "%K Smooth", minval=1) smoothD = input(defval = 3, title = "%D Smooth", minval=1) overbought = 80 oversold = 20 HighlightOBOS = input(defval = true, title = "Highlight Stoch Cross?") HighlightTrend = input(defval = true, title = "Highlight Trend?") //DATE AND TIME SectionFrom = input(defval = true ,title = "═══════════════ FROM ═══════════════") fromDay = input(defval = 01, title = "From day", minval=1) fromMonth = input(defval = 1, title = "From month", minval=1) fromYear = input(defval = 2019, title = "From year", minval=2014) SectionTo = input(defval = true, title = "════════════════ TO ════════════════") toDay = input(defval = 31, title = "To day", minval=1) toMonth = input(defval = 12, title = "To month", minval=1) toYear = input(defval = 2020, title = "To year", minval=2014) // === STRATEGY RELATED INPUTS === SectionStra = input(defval = true ,title = "═════════════ STRATEGY ═════════════") // Include Shorts or only trade Long Positions? includeShorts = input(defval = true, title = "Include Short Positions?") // Risk Management inputs useTakeProfit = input(defval = true, title = "User Take Profit?") inpTakeProfit = input(defval = 8, title = "Take Profit (%)", minval = 0) useStopLoss = input(defval = false, title = "User Stop Loss?") inpStopLoss = input(defval = 2, title = "Stop Loss (%)", minval = 0) StopLossPerc = inpStopLoss * 0.01 TakeProfitPerc = inpTakeProfit * 0.01 // === EMA SERIES SETUP === maFast = ema(close, maFastLength) maSlow = ema(close, maSlowLength) diff = maFast - maSlow // === STOCHASTIC SETUP === k = sma(stoch(close, high, low, StochLength), smoothK) d = sma(k, smoothD) // Stochastic Long/Short Entry determination stochLong = crossover(k,d) and (k < oversold) stochShort = crossunder(k,d) and (k > overbought) // Stochastic Long/Short Exit determination stochLongEx = crossover (k, overbought) stochShortEx = crossunder(k, oversold) // === PLOTTING EMAs === fast = plot(maFast, title = "Fast MA", color = yellow, linewidth = 1, style = line, transp = 10) slow = plot(maSlow, title = "Slow MA", color = white, linewidth = 1, style = line, transp = 10) // === Vertical Coloring for Crosses in Overbought/Oversold zone and for MA Trend Zones === b_color = stochLong ? green : stochShort ? red : na bgcolor(HighlightOBOS ? b_color : na, title="Overbought / Oversold", transp=65) //Highlight the Overbought/Oversold Stoch Crossings t_color = diff>=0 ? green : diff<0 ? red : na bgcolor(HighlightTrend ? t_color : na, title="Trend up / Trend down", transp=75) //Highlight the EMA Trend // === STRATEGY LOGIC === // Time Restriction timeInRange = true // === STRATEGY - LONG POSITION EXECUTION === if stochLong and (diff >=0) and timeInRange //Open Long when Stoch crossing in Oversold area and EMATrend is up strategy.entry(id = "Long", long = true) if stochLong and (diff <0) and timeInRange //Close Long when another Long Stoch cross signal is given after Trend has changed to down (avoid fake signals) strategy.close(id = "Long") if stochLongEx and timeInRange //Close Long when Stoch is getting Overbought strategy.close(id = "Long") // === STRATEGY - SHORT POSITION EXECUTION === if stochShort and (diff <0) and timeInRange and includeShorts //Open Short when Stoch crossing in Overbought area and EMA Trend is down strategy.entry(id = "Short", long = false) if stochShort and (diff >=0) and timeInRange //Close Short when another Short Stoch cross signal is given after Trend has changed to up (avoid fake signals) strategy.close(id = "Short") if stochShortEx and timeInRange //Close Short when Stoch is getting Oversold strategy.close(id = "Short") // === STRATEGY RISK MANAGEMENT EXECUTION === //Stop Loss if useStopLoss //Exit when Stop Loss is hit strategy.exit("Exit Long SL", from_entry = "Long", loss = close * StopLossPerc / syminfo.mintick ) strategy.exit("Exit Short SL", from_entry = "Short", loss = close * StopLossPerc / syminfo.mintick ) //Take Profit if useTakeProfit //Exit when Take Profit Limit is hit strategy.exit("Exit Long TP", from_entry = "Long", profit = close * TakeProfitPerc / syminfo.mintick) strategy.exit("Exit Short TP", from_entry = "Short", profit = close * TakeProfitPerc / syminfo.mintick)