
Chiến lược EintSimple Pullback là một chiến lược quay trở lại dựa trên sự giao nhau của hai đường trung bình di chuyển. Chiến lược này sử dụng hai đường trung bình di chuyển dài và ngắn, tạo ra tín hiệu mua khi đường trung bình di chuyển ngắn phá vỡ đường trung bình di chuyển dài từ bên dưới.
Btc thể hiện tín hiệu thoát ra nếu giá giảm xuống trung bình di chuyển ngắn hạn một lần nữa sau khi vào. Ngoài ra, chiến lược này cũng thiết lập lỗ hổng thoát ra nếu đạt tỷ lệ lỗ hổng được thiết lập từ điểm rút lui cao nhất.
Chiến lược này chủ yếu dựa trên giao dịch vàng chéo của hai trung bình di chuyển để đánh giá thời gian nhập cảnh. Cụ thể, bạn phải đồng thời đáp ứng các điều kiện sau đây để mở thêm vị trí:
Sau khi đáp ứng các điều kiện trên, chiến lược này sẽ được thực hiện đầy đủ.
Tín hiệu thoát được đánh giá dựa trên hai điều kiện, một là giá lại giảm xuống trung bình di chuyển ngắn hạn, và điều khác là tỷ lệ phần trăm dừng lỗ được thiết lập từ điểm rút lui cao nhất. Các điều kiện thoát cụ thể như sau:
Chiến lược này sẽ loại bỏ tất cả các đơn đặt hàng khi đáp ứng bất kỳ điều kiện thoát nào.
Sử dụng phương tiện di chuyển kép chéo và kết hợp với phán đoán giá đóng cửa thực tế, có thể lọc hiệu quả các phá vỡ giả.
Sử dụng sự quay trở lại, bạn có thể vào sau khi giá cổ phiếu hình thành một đường cong ngắn.
Có cài đặt dừng lỗ, cho phép hạn chế rút tối đa.
Chiến lược giao dịch chéo hai đường trung bình di chuyển có thể tạo ra nhiều tín hiệu giao dịch và có thể theo đuổi các đợt tăng và giảm.
Cài đặt tham số trung bình di chuyển không đúng có thể khiến đường cong quá mịn hoặc quá nhạy cảm.
Cài đặt Stop Loss quá thoải mái sẽ làm cho tổn thất tăng lên.
Kiểm tra các cụm tham số trung bình di chuyển ngắn hạn và dài khác nhau để tìm tham số tối ưu.
Thử nghiệm so sánh hiệu quả của việc sử dụng giá đóng cửa và giá điển hình để đánh giá sự giao chéo của đường trung bình di chuyển.
Thử thêm các bộ lọc như khối lượng giao dịch hoặc chỉ số biến động.
Đánh giá lại và tối ưu hóa độ dừng để tìm thiết lập tốt nhất.
Chiến lược EintSimple Pullback là một chiến lược điều chỉnh trung bình di chuyển đôi đơn giản và thực tế. Nó sử dụng hiệu quả chức năng chỉ thị của trung bình di chuyển, đồng thời kết hợp với phán đoán giá đóng cửa thực tế để lọc các tín hiệu giả. Mặc dù chiến lược dễ gây ra vấn đề giao dịch thường xuyên và theo đuổi đà giảm, nhưng có thể được cải thiện hơn nữa bằng cách tối ưu hóa tham số và thêm bộ lọc.
/*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)