
Chiến lược này dựa trên nguyên tắc vàng của moving average để giao dịch. Chiến lược sử dụng hai đường trung bình di chuyển, tạo ra tín hiệu mua khi đường trung bình di chuyển ngắn hạn phá vỡ đường trung bình di chuyển dài hạn từ phía dưới.
Chiến lược này sử dụng các chu kỳ trung bình di chuyển ngắn hạn, chu kỳ trung bình di chuyển dài hạn, chu kỳ trung bình di chuyển thoát và cách tính toán các trung bình di chuyển tùy chỉnh của người dùng.
Một tín hiệu mua được tạo ra khi đường trung bình di chuyển ngắn hạn vượt qua đường trung bình di chuyển dài hạn từ phía dưới. Điều này cho thấy xu hướng ngắn hạn được chuyển thành xu hướng tăng và có thể mua.
Một tín hiệu bán ra được tạo ra khi giá đóng cửa giảm xuống và thoát khỏi đường trung bình di chuyển. Điều này cho thấy xu hướng đảo ngược và bạn nên thoát khỏi vị trí.
Vì vậy, tín hiệu giao dịch của chiến lược này bắt nguồn từ sự giao thoa giữa đường trung bình di chuyển ngắn hạn và đường trung bình di chuyển dài hạn và mối quan hệ giữa giá đóng cửa và đường trung bình di chuyển thoát ra.
Chiến lược này có những ưu điểm sau:
Nó đơn giản, dễ hiểu và dễ thực hiện.
Các tham số có thể tùy chỉnh để phù hợp với các tình huống thị trường khác nhau.
Sử dụng bộ lọc tiếng ồn trung bình di chuyển để nắm bắt các xu hướng chính.
Các chỉ số kỹ thuật như xu hướng, hỗ trợ và kháng cự có thể được tối ưu hóa hơn nữa.
Tỷ lệ lợi nhuận có thể kiểm soát được, có cơ chế dừng lỗ.
Chiến lược này cũng có những rủi ro sau:
Trong một thị trường có xu hướng không mạnh, các tín hiệu sai sẽ dễ bị tạo ra.
Thiết lập tham số không đúng có thể làm mất xu hướng hoặc tạo ra quá nhiều giao dịch không hiệu lực.
Cài đặt vị trí dừng lỗ không hợp lý có thể làm tăng thiệt hại.
Thâm nhập thất bại có thể gây thiệt hại.
Cần điều chỉnh các tham số để thích ứng với sự thay đổi của thị trường.
Các giải pháp đối phó với rủi ro bao gồm: thiết lập tham số tối ưu hóa, kết hợp với các tín hiệu lọc các chỉ số khác, điều chỉnh vị trí dừng lỗ, xác định xu hướng và tham gia sau đó.
Chiến lược này có thể được tối ưu hóa bằng cách:
Phát triển cơ chế đánh giá xu hướng, xác định xu hướng và tạo tín hiệu giao dịch.
Các tín hiệu lọc được kết hợp với số lượng giao dịch hoặc chỉ số biến động.
Động thái tối ưu hóa các tham số chu kỳ trung bình di chuyển.
Tối ưu hóa cơ chế dừng lỗ, thực hiện dừng lỗ di động.
Kết hợp với hỗ trợ và kháng cự và các chỉ số khác để xác nhận thêm tín hiệu giao dịch.
Điều chỉnh tham số theo các giống và chu kỳ khác nhau.
Chiến lược giao dịch chiến dưới trung bình di chuyển này nói chung là một chiến lược theo dõi xu hướng đơn giản và thực tiễn. Nó có thể điều chỉnh các tham số theo tình hình thị trường và nắm bắt hướng xu hướng chính trong tình trạng xu hướng.
/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 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/
// © TwoChiefs
//@version=4
strategy("John EMA Crossover Strategy", overlay=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
////////////////////////////////////////////////////////////////////////////////
//CREATE USER-INPUT VARIABLES
periodShort = input(13, minval=1, title="Enter Period for Short Moving Average")
smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
periodLong = input(48, minval=1, title="Enter Period for Long Moving Average")
smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average")
smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])
src1 = close
pivot = (high + low + close) / 3
//MA CALCULATION FUNCTION
ma(smoothing, src, length) =>
if smoothing == "RMA"
rma(src, length)
else
if smoothing == "SMA"
sma(src, length)
else
if smoothing == "EMA"
ema(src, length)
else
if smoothing == "WMA"
wma(src, length)
else
if smoothing == "VWMA"
vwma(src, length)
else
if smoothing == "SMMA"
na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length
else
if smoothing == "HullMA"
wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
//ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE
shortMA=ma(smoothingShort, pivot, periodShort)
longMA=ma(smoothingLong, pivot, periodLong)
exitMA=ma(smoothingExit, pivot, periodExit)
//PLOT THOSE VARIABLES
plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average")
plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average")
plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average")
//BUY STRATEGY
buy = crossover(shortMA,longMA) ? true : na
exit = crossunder(close,exitMA) ? true : na
strategy.entry("long",true,when=buy and time_cond)
strategy.close("long",when=exit and time_cond)
if (not time_cond)
strategy.close_all()