この戦略は,上昇/下落の影の長さの比率を計算して現在のトレンド方向を判断し,ATR指標でトレンドを識別する.ブレイクポイントで逆ポジションを開き,ストップロスを設定し,短期的なトレンドを把握するために利益を取ります.
この戦略は,主に上昇傾向/下落傾向の影比を計算することによって現在の傾向を判断する.長期上昇傾向は上昇傾向を示し,長期下落傾向は下落傾向を示します.
具体的な論理は
上記は基本的な取引論理で,トレンド検出で逆転ブレイクポイントを特定し,ストップ・ロスト/テイク・プロフィットで利益を最適化します.
リスクは合理的なストップ・ロスト,パラメータ最適化,そしてタイミングでポジション終了によって管理できます.
戦略は以下の方法で最適化できます.
多面的なテストと最適化により 戦略のパフォーマンスは最大化できます
概して,この戦略は,トレンド識別とリスク管理を通じて短期的な価格変動から利益を得ます.最適化されると,量子取引のための強力な短期的なブレイクアウト戦略になり得ます.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h 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/ // © ondrej17 //@version=4 strategy("longWickstrategy", overlay=true ) // Inputs st_yr_inp = input(defval=2020, title='Backtest Start Year') st_mn_inp = input(defval=01, title='Backtest Start Month') st_dy_inp = input(defval=01, title='Backtest Start Day') en_yr_inp = input(defval=2025, title='Backtest End Year') en_mn_inp = input(defval=01, title='Backtest End Month') en_dy_inp = input(defval=01, title='Backtest End Day') sltp_inp = input(defval=0.8, title='N - % offset for N*SL and (2N)*TP')/100 // Dates start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00) end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00) canTrade = time >= start and time <= end // Indicators Setup // Strategy Calcuations lowerWick = (open > close) ? close-low : open - low upperWick = (open > close) ? high-open : high-close wickLength = max(lowerWick,upperWick) candleLength = high-low wickToCandleRatio = wickLength / candleLength entryFilterCandleLength = candleLength > 0.75*atr(48) // Entries and Exits longCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick > upperWick and canTrade and strategy.position_size == 0 shortCondition = entryFilterCandleLength and wickToCandleRatio > 0.5 and lowerWick < upperWick and canTrade and strategy.position_size == 0 strategy.entry("pendingLong", strategy.long, limit=low+wickLength/2, when = longCondition) strategy.entry("pendingShort", strategy.short, limit=high-wickLength/2, when = shortCondition) longStop = strategy.position_size > 0 ? strategy.position_avg_price*(1-sltp_inp) : na longTP = strategy.position_size > 0 ? strategy.position_avg_price*(1+2*sltp_inp) : na shortStop = strategy.position_size < 0 ? strategy.position_avg_price*(1+sltp_inp) : na shortTP = strategy.position_size < 0 ? strategy.position_avg_price*(1-2*sltp_inp) : na strategy.exit("longSLTP","pendingLong", stop=longStop, limit = longTP) strategy.exit("shortSLTP","pendingShort", stop=shortStop, limit = shortTP) plot(longStop, color=color.red, style=plot.style_linebr, linewidth=2) plot(shortStop, color=color.red, style=plot.style_linebr, linewidth=2) plot(longTP, color=color.green, style=plot.style_linebr, linewidth=2) plot(shortTP, color=color.green, style=plot.style_linebr, linewidth=2) plotLongCondition = longCondition ? high+abs(open-close) : na plot(plotLongCondition, style=plot.style_circles, linewidth=4, color=color.green) plotShortCondition = shortCondition ? high+abs(open-close) : na plot(plotShortCondition, style=plot.style_circles, linewidth=4, color=color.red)