この戦略は,価格動向を判断するためのPSAR,トレンド強さを判断するためのADX,過買い・過売りゾーンを特定するためのRSI,資金流動を判断するためのCMFを組み合わせて,サイクルを通して日中のトレンドをフォローする定量的な取引戦略を構築する.価格が統合から突破して新しいトレンドを形成するときに新しいトレンド方向性を迅速に特定し,その後もトレンドを追跡し続けることができます.主要なトレンドの利益が捕獲されることを保証しながら,保有リスクを減らすためにフィルタリング条件もプロセス中に設定されています.
この戦略の主な判断基準は次のとおりです.
価格が上昇傾向にあるかどうかを判断するためにPSAR指標を使用します.PSAR
RSIが50の真ん中値以上で 過剰売り場での誤ったブレイクをフィルタリングします
ADX が EMA 線より上にあることを要求し,傾向分析において持続的信号を示します.
CMFが0より大きいことを要求します. 資金の流れが増加すると判断します.
上記の4つの条件がすべて満たされたときに購入信号が生成される.PSARが価格を超え,RSIが50を下回り,ADXがEMAを下回り,CMFが0未満になると販売条件が発生する.
この戦略は,取引規則を設定する際に価格傾向の方向,傾向強度,過買い/過売り状態,資金流を包括的に考慮する.取引信号を生成する際に厳格な論理的規則を設定することによって,偽のブレイクを効果的にフィルタリングし,高い確率の持続的なトレンド方向を捕捉することができます.
この戦略の主な利点は以下の通りである.
複数の指標を組み合わせて取引規則を設定することで,偽のブレイクを効果的に防ぐことができ,信号の質も確保できます.
トレンドの方向性を迅速に特定し追跡することで トレンドの利益の大半を把握できます
プロセスフィルタリング条件を設定することで,リスクを効果的に制御し,追跡効果を保証できます.
トレンド強さを考慮すると,取引範囲の混雑を避けるのに役立ちます.
この戦略の主なリスクは以下のとおりです.
単一の戦略の蓄積は,適切なポジションサイズを要するポートフォリオリスクをもたらす.
追跡中にフィルタリング状態の変化を注意深く監視し,キャンセル時に損失を避ける.
この中期・長期戦略は短期間で変動によって混乱し,ストップ・ロスのリスクを伴う.
対応するリスク管理措置には,ポジションサイズを最適化するルール,リスク警告ラインの設定,停止距離の拡大などが含まれます.
オプティマイゼーション領域には,以下が含まれます.
マシン学習によるパラメータ最適化 現在の主観的な設定を考慮して
リスクに基づいて動的にサイズするポジションサイズアップモジュールを追加します.
ストップメカニズムの強化,例えば遅延ストップ,タイムストップ,ブレイクストップ
この指標を組み合わせた戦略は,新興トレンドを迅速に特定し,追跡し,トレンドやファンドなどの複数の次元に基づいて定量的な取引を検証するのに効果的であることが証明されました. ベースとして,サイクルの間でもインデックスできます. パラメータ調節とモジュール強化により,中期・長期間の安定した戦略にもなり得ます.
/*backtest start: 2023-11-14 00:00:00 end: 2023-12-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("psar+ adx + cmf + rsi Strategy", overlay=true,initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent , commission_value=0.1 ) start = input(1.02) increment = input(1.02) maximum = input(1.2) var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := min(AF + increment, maximum) else if low < EP EP := low AF := min(AF + increment, maximum) if uptrend SAR := min(SAR, low[1]) if bar_index > 1 SAR := min(SAR, low[2]) else SAR := max(SAR, high[1]) if bar_index > 1 SAR := max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) //rsi strat length = input( 50 ) middle_RSI=input(49) price = close vrsi = rsi(price, length) //cmf lengthCMF = input(20, minval=1) ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume mf = sum(ad, lengthCMF) / sum(volume, lengthCMF) //ADX adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) ema_length=input(10) ema_sig= ema(sig,ema_length) long = not uptrend and vrsi > middle_RSI and sig > ema_sig and mf>0 short= uptrend and vrsi < middle_RSI and sig<ema_sig and mf<0 strategy.entry("long",1,when=long) strategy.close('long',when=short)