EintSimple Pullback戦略は,二重移動平均クロスオーバーに基づいた平均逆転戦略である.まずは長期と短期移動平均線を使用する.短期移動平均線が長期移動平均線を底から突破すると,購入信号が生成される.偽のブレイクをフィルタリングするために,この戦略は,閉じる価格が長期移動平均線よりも高いことを要求する.
市場に入ると,価格が再び短期移動平均線を下回る場合は,出口信号が起動します. さらに,この戦略はストップ損失出口も設定します.最高点からのリトラセイメントが設定されたストップ損失パーセントに達した場合,それはポジションも終了します.
この戦略は,入場タイミングを決定するために主に二重移動平均の黄金十字に頼ります.特に,ロングのポジションを開く前に,以下の条件が同時に満たされなければなりません.
上記の条件を満たした後に この戦略は完全なロングポジションになります
エクシートシグナル判断は2つの条件に基づいています.一つは,価格が再び短期移動平均値を下回るということです.もう一つは,最高点から引き下げが設定されたストップ損失パーセントに達することです.特定のエクシート条件は以下のとおりです:
出口条件のいずれかが満たされると,この戦略はすべてのロングポジションを閉じる.
二重移動平均のクロスオーバーと堅牢な閉じる価格を組み合わせて判断することで,誤ったブレイクを効果的にフィルタリングできます.
価格が短期的な転換点を形成した後,引き下げ入力を採用することができます.
ストップ・ロスの設定で 最大引き上げを制限できます
二重移動平均クロスオーバー戦略は,頻繁に取引信号を生成し,ピークを追いかけて底を打つ可能性があります.
移動平均値のパラメータ設定が正しくない場合,曲線が過度に滑らかまたは過度に敏感になる可能性があります.
ストップ・ロスの設定が過度に緩やかであれば,損失が増加します.
最適なパラメータを見つけるために,長期および短期移動平均の異なる長さの組み合わせをテストします.
移動平均のクロスオーバーを決定するために 接近価格と典型的な価格を使用する効果を比較する.
ボリュームや不安定度指標のようなフィルターを追加してテストします
バックテスト 最適な設定を見つけるためにストップ損失パーセントを最適化します
EintSimple Pullback戦略は,シンプルで実用的な二重移動平均のプルバック戦略である.これは,偽信号をフィルタリングするために堅固な閉値を組み合わせながら,移動平均の方向機能を効果的に利用する.この戦略は,頻繁な取引やピークを追いかけて底を打つ傾向があるが,パラメータ最適化やフィルターを追加することでさらに改善することができる.全体として,これは定量的な取引の初心者が練習し最適化するための素晴らしい戦略である.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ZenAndTheArtOfTrading / www.PineScriptMastery.com // @version=5 strategy("Simple Pullback Strategy", overlay=true, initial_capital=50000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)// 100% of balance invested on each trade // Get user input i_ma1 = input.int(title="MA 1 Length", defval=75, step=1, group="Strategy Parameters", tooltip="Long-term EMA") i_ma2 = input.int(title="MA 2 Length", defval=9, step=1, group="Strategy Parameters", tooltip="Short-term EMA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=true, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Get indicator values ma1 = ta.ema(close, i_ma1) ma2 = ta.ema(close, i_ma2) // Check filter(s) f_dateFilter = true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1) plot(ma1, color=color.blue) plot(ma2, color=color.fuchsia)