
Chiến lược giao dịch đảo ngược hai đường trung bình bằng cách tính toán trung bình di chuyển đơn giản của hai chu kỳ khác nhau trong ngắn hạn và dài hạn và tạo ra tín hiệu giao dịch dựa trên mối quan hệ của giá với đường trung bình di chuyển. Khi đi qua đường trung bình dài hạn trên đường trung bình ngắn hạn, hãy làm nhiều hơn; khi đi qua đường trung bình dài hạn dưới đường trung bình ngắn hạn, hãy làm trống. Chiến lược này thuộc về chiến lược theo dõi xu hướng.
Chiến lược này thiết lập một đường trung bình di chuyển đơn giản với hai chiều dài chu kỳ khác nhau bằng cách nhập các tham số, đường chu kỳ ngắn được gọi là đường nhanh và đường chu kỳ dài được gọi là đường chậm. Đường nhanh phản ứng với sự thay đổi giá nhanh hơn, có thể nắm bắt xu hướng ngắn hạn; đường chậm Phản ứng với sự thay đổi giá chậm hơn, có thể lọc ra tiếng ồn thị trường ngắn hạn, nắm bắt xu hướng chính.
Cụ thể, chiến lược tính toán hai đường trung bình thông qua hàm sma () và gán giá trị tính toán cho xSMA () và đường nhanh (2). Chiến lược sử dụng giá gần để tính toán đường trung bình. Khi giá gần vượt qua xSMA, hãy làm nhiều; khi giá gần vượt qua xSMA, hãy làm trống.
Cài đặt điểm dừng lỗ cho mỗi giao dịch và dừng lỗ ngay khi đạt đến điểm dừng lỗ. Đồng thời, chiến lược hiển thị mối quan hệ giữa giá và đường chậm trên đường K thông qua hàm barcolor: khi giao dịch nhiều, đường K màu xanh lá cây; khi giao dịch trống, đường K màu đỏ; khi giao dịch bằng phẳng, đường K màu xanh lam.
Bạn có thể giảm rủi ro bằng cách điều chỉnh tham số đường trung bình, tối ưu hóa chiến lược dừng lỗ, loại bỏ giới hạn thời gian hoặc thiết lập khoảng thời gian giao dịch hợp lý hơn. Bạn cũng có thể xem xét kết hợp các chỉ số khác làm điều kiện lọc để tránh quá nhiều tín hiệu giả.
Chiến lược này dễ thực hiện, có ý tưởng rõ ràng và phù hợp với người mới bắt đầu. Tuy nhiên, nó có thể tạo ra nhiều tín hiệu giả và vấn đề về trễ thời gian. Có thể cải thiện chiến lược bằng cách tối ưu hóa tham số, giới thiệu các chỉ số phụ trợ và các phương pháp khác để làm cho chiến lược ổn định và đáng tin cậy.
/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
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/
// © HPotter
// Simple SMA strategy
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors
//@version=4
timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0
strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
timeframe = input(title="Time Frame", defval="15")
timerange = input(title="Time Range", defval="2300-0800")
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1 and timeinrange(timeframe, timerange))
strategy.entry("Long", strategy.long)
if (possig == -1 and timeinrange(timeframe, timerange))
strategy.entry("Short", strategy.short)
if (timeinrange(timeframe, timerange) == 0)
strategy.close_all()
if (UseTPSL)
strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0 and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)