Chiến lược này sử dụng các nguyên tắc giao dịch vàng và giao dịch chết của các đường trung bình di chuyển đơn giản để thực hiện các vị trí dài và ngắn của cổ phiếu. Khi đường nhanh vượt qua đường chậm từ phía dưới, hãy làm nhiều hơn; Khi đường nhanh giảm xuống từ phía trên, hãy làm giảm.
Chiến lược này đầu tiên xác định thời gian bắt đầu và kết thúc của phép đo, sau đó đặt các tham số tính toán cho hai đường trung bình, bao gồm loại đường trung bình và độ dài chu kỳ.
Sử dụng hàm getMAType () để tính giá trị của hai trung bình. Trong đó fastMA là trung bình ngắn hạn và slowMA là trung bình dài hạn.
Chiến lược của chúng tôi là:
Một số trường hợp, một số tín hiệu long được phát ra khi một số tín hiệu được đặt trên một MA nhanh.
Khi FastMA đi qua SlowMA, nó sẽ phát ra tín hiệu short.
Cuối cùng, trong thời gian đánh giá lại, chiến lược đầu tư dài sẽ được áp dụng khi có tín hiệu nhiều; chiến lược đầu tư trống sẽ được áp dụng khi có tín hiệu ngắn.
Đối với các rủi ro, có thể tối ưu hóa hơn nữa bằng cách:
Thêm bộ lọc các chỉ số kỹ thuật khác để xác định xu hướng.
Thêm chiến lược dừng lỗ, kiểm soát tổn thất đơn lẻ.
Tiếp theo, các nhà đầu tư sẽ đưa ra các chỉ số về năng lượng và các chỉ số khác để tránh đánh giá thâm hụt thị trường.
Thiết lập cơ chế tối ưu hóa tham số để tự động tìm kiếm các tham số tốt nhất.
Chiến lược này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:
Thêm các chiến lược dừng lỗ, chẳng hạn như thiết lập điểm dừng cố định hoặc theo dõi dừng lỗ, kiểm soát tổn thất.
Tăng các chiến lược quản lý vị trí, chẳng hạn như vị trí cố định, vị trí động, kiểm soát rủi ro giao dịch.
Thêm bộ lọc, kết hợp với các chỉ số kỹ thuật khác để xác định xu hướng và tăng tỷ lệ thắng.
Thiết lập tham số tối ưu hóa, tìm tham số tối ưu bằng các phương pháp như tìm kiếm lưới, hồi quy tuyến tính.
Mở rộng nhiều chiến lược giao dịch ngoại hối, như phá vị trí, đảo ngược, xây dựng kho hàng loạt, và các chiến lược giao dịch phong phú.
Tăng năng lượng để tránh bị ảnh hưởng bởi động đất.
Tăng cường các loại giao dịch, mở rộng đến các loại khác nhau như cổ phiếu, chỉ số tương lai, ngoại hối, tiền kỹ thuật số.
Chiến lược này dựa trên nguyên tắc chéo của đường trung bình di chuyển để thực hiện lựa chọn vị trí dài và ngắn của cổ phiếu. Ý tưởng chiến lược đơn giản, rõ ràng, sử dụng rộng rãi, thích ứng mạnh mẽ, có giá trị thực tế nhất định. Nhưng chiến lược này cũng có một số điểm yếu, không có khả năng lọc hiệu quả xung đột. Trong tương lai, có thể tối ưu hóa từ việc cải thiện dừng lỗ, tối ưu hóa tham số, thêm bộ lọc, v.v., làm cho chiến lược có lợi thế hơn.
/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)
/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)
source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)
///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) =>
res = sma(close, 1)
if maType == "ema"
res := ema(sourceType, maLen)
if maType == "sma"
res := sma(sourceType, maLen)
if maType == "swma"
res := swma(sourceType)
if maType == "wma"
res := wma(sourceType, maLen)
res
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)
long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)
/////////////// Plotting ///////////////
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("Long", strategy.long, when=long)
strategy.entry("Short", strategy.short, when=short)