
Chiến lược giao dịch xu hướng quay trở lại theo tỷ lệ vàng bằng cách sử dụng chỉ số kênh và đường trung bình di chuyển để xác định hướng xu hướng mạnh hơn, sau khi giá có một tỷ lệ điều chỉnh lại, bạn có thể mở vị trí theo hướng xu hướng. Chiến lược này phù hợp với thị trường có đặc điểm xu hướng mạnh và có thể hoạt động tốt hơn trong tình huống xu hướng.
Các chỉ số cốt lõi của chiến lược bao gồm các chỉ số kênh, đường trung bình di chuyển và đường kích hoạt quay trở lại.
Khi giá chạm đáy của kênh, chiến lược sẽ ghi lại điểm thấp nhất là điểm tham chiếu và đặt dấu hiệu cho phép thực hiện lệnh giảm giá. Khi giá tăng, một khi mức tăng lên đạt tỷ lệ điều chỉnh, sẽ mở một vị trí trống gần điểm phục hồi.
Ngược lại, khi giá chạm đến đỉnh của kênh, chiến lược sẽ ghi lại điểm cao nhất làm điểm tham chiếu và thiết lập cho phép thực hiện nhiều dấu hiệu. Khi giá giảm, nếu mức giảm đạt yêu cầu tỷ lệ điều chỉnh, hãy mở nhiều vị trí gần điểm đó.
Do đó, logic giao dịch của chiến lược này là theo dõi kênh giá và chọn điểm thích hợp để can thiệp vào xu hướng hiện tại khi có tín hiệu đảo ngược. Đây là một cách thức phổ biến của chiến lược giao dịch điều chỉnh xu hướng.
Chiến lược này có một số ưu điểm:
Cụ thể, vì chiến lược chủ yếu mở vị trí tại điểm đảo ngược xu hướng, nên nó có hiệu quả tốt hơn trong thị trường có biến động giá lớn và xu hướng rõ ràng. Ngoài ra, điều chỉnh tham số tỷ lệ điều chỉnh có thể kiểm soát mức độ quyết liệt của chiến lược theo dõi xu hướng. Cuối cùng, bằng cách dừng lỗ, bạn có thể kiểm soát tốt tổn thất đơn lẻ.
Chiến lược này cũng có những rủi ro chính như:
Cụ thể, nếu các loại giao dịch sử dụng chiến lược có xu hướng yếu và biến động ít hơn, hiệu quả có thể bị chiết khấu. Ngoài ra, việc thiết lập tỷ lệ điều chỉnh quá lớn hoặc quá nhỏ sẽ ảnh hưởng đến hiệu suất của chiến lược. Cuối cùng, vì chiến lược có thể có khoảng thời gian giữ vị trí dài, cũng cần chú ý đến việc kiểm soát rủi ro qua đêm.
Để tránh những rủi ro trên, bạn có thể xem xét tối ưu hóa các khía cạnh sau:
Chiến lược giao dịch xu hướng quay trở về giá trị trung bình bằng cách phân chia vàng dựa trên các chỉ số đơn giản để xác định xu hướng giá và tín hiệu điều chỉnh lại, mở xu hướng theo dõi vị trí trong tình hình mạnh mẽ, thuộc hệ thống xu hướng điển hình hơn. Chiến lược này có nhiều khả năng tối ưu hóa thông số, có thể thích ứng với nhiều môi trường thị trường hơn bằng cách tối ưu hóa, và kiểm soát rủi ro cũng hợp lý hơn. Do đó, nó là một ý tưởng chiến lược tối ưu hóa đáng để thử nghiệm và cải tiến thực tế.
/*backtest
start: 2022-11-30 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//
// A port of the TradeStation EasyLanguage code for a mean-revision strategy described at
// http://traders.com/Documentation/FEEDbk_docs/2017/01/TradersTips.html
//
// "In “Mean-Reversion Swing Trading,” which appeared in the December 2016 issue of STOCKS & COMMODITIES, author Ken Calhoun
// describes a trading methodology where the trader attempts to enter an existing trend after there has been a pullback.
// He suggests looking for 50% pullbacks in strong trends and waiting for price to move back in the direction of the trend
// before entering the trade."
//
// See Also:
// - 9 Mistakes Quants Make that Cause Backtests to Lie (https://blog.quantopian.com/9-mistakes-quants-make-that-cause-backtests-to-lie-by-tucker-balch-ph-d/)
// - When Backtests Meet Reality (http://financial-hacker.com/Backtest.pdf)
// - Why MT4 backtesting does not work (http://www.stevehopwoodforex.com/phpBB3/viewtopic.php?f=28&t=4020)
//
//
// -----------------------------------------------------------------------------
// Copyright 2018 sherwind
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// The GNU General Public License can be found here
// <http://www.gnu.org/licenses/>.
//
// -----------------------------------------------------------------------------
//
strategy("Mean-Reversion Swing Trading Strategy v1", shorttitle="MRST Strategy v1", overlay=true)
channel_len = input(defval=20, title="Channel Period", minval=1)
pullback_pct = input(defval=0.5, title="Percent Pull Back Trigger", minval=0.01, maxval=1, step=0.01)
trend_filter_len = input(defval=50, title="Trend MA Period", minval=1)
upper_band = highest(high, channel_len)
lower_band = lowest(low, channel_len)
trend = sma(close, trend_filter_len)
low_ref = 0.0
low_ref := nz(low_ref[1])
high_ref = 0.0
high_ref := nz(high_ref[1])
long_ok = false
long_ok := nz(long_ok[1])
short_ok = false
short_ok := nz(short_ok[1])
long_ok2 = false
long_ok2 := nz(long_ok2[1])
if (low == lower_band)
low_ref := low
long_ok := false
short_ok := true
long_ok2 := false
if (high == upper_band)
high_ref := high
long_ok := true
short_ok := false
long_ok2 := true
// Pull Back Level
trigger = long_ok2 ? high_ref - pullback_pct * (high_ref - low_ref) : low_ref + pullback_pct * (high_ref - low_ref)
plot(upper_band, title="Upper Band", color=long_ok2?green:red)
plot(lower_band, title="Lower Band", color=long_ok2?green:red)
plot(trigger, title="Trigger", color=purple)
plot(trend, title="Trend", color=orange)
enter_long = long_ok[1] and long_ok and crossover(close, trigger) and close > trend and strategy.position_size <= 0
enter_short = short_ok[1] and short_ok and crossunder(close, trigger) and close < trend and strategy.position_size >= 0
if (enter_long)
long_ok := false
strategy.entry("pullback-long", strategy.long, stop=close, comment="pullback-long")
else
strategy.cancel("pullback-long")
if (enter_short)
short_ok := false
strategy.entry("pullback-short", strategy.short, stop=close, comment="pullback-short")
else
strategy.cancel("pullback-short")
strategy.exit("exit-long", "pullback-long", limit=upper_band, stop=lower_band)
strategy.exit("exit-short", "pullback-short", limit=lower_band, stop=upper_band)