Chiến lược này tạo ra tín hiệu mua và bán bằng cách chéo giữa đường trung bình di chuyển Jurik (JMA) và chỉ số RSI. Khi JMA vượt qua RSI, hãy làm nhiều và khi JMA vượt qua RSI, hãy làm trống. Chiến lược này cố gắng sử dụng sự kết hợp của hai chỉ số để lọc các tín hiệu giả mạo và giao dịch khi xu hướng rõ ràng hơn.
Chiến lược này được thực hiện bằng cách kết hợp hai chỉ số:
Chỉ số JMA: một loại trung bình di chuyển mịn bằng nhân số canon, có độ trễ thấp hơn và có thể nắm bắt thay đổi giá nhanh hơn.
Chỉ số RSI: chỉ số mạnh yếu phổ biến, phản ánh thị trường mua và bán.
Khi JMA vượt qua RSI, nó cho thấy động lực tăng giá ngắn hạn mạnh hơn xu hướng dài hạn, tạo ra tín hiệu mua; khi JMA vượt qua RSI, nó gợi ý tín hiệu tháo lỗ.
Sau khi tín hiệu chéo được phát ra, giao dịch mở vị trí theo hướng tương ứng. Điều kiện đặt cược bằng phẳng là giá vượt quá tỷ lệ mục tiêu được chỉ định hoặc chỉ số lại chéo ngược.
Các tham số chỉ số JMA có thể điều chỉnh và có thể được tối ưu hóa cho các chu kỳ khác nhau.
Chỉ số RSI có thể lọc các đợt phá vỡ giả.
Sử dụng kết hợp hai chỉ số có thể làm giảm tín hiệu giả.
Một hệ thống dừng lỗ tích hợp có thể hạn chế tổn thất.
Có thể tùy chỉnh tỷ lệ lợi nhuận để đạt được mục tiêu lợi nhuận.
Inating kết hợp hai chỉ số, tần số phát sinh tín hiệu có thể quá thấp. Các tham số có thể được điều chỉnh để làm cho chỉ số nhạy cảm hơn.
Chỉ số JMA cũng có vấn đề về sự chậm trễ, có thể bỏ lỡ điểm chuyển đổi giá. Có thể được tối ưu hóa kết hợp với các chỉ số tiên phong khác.
Cài đặt điểm dừng không đúng có thể bị phá vỡ dẫn đến sự gia tăng lỗ. Cần xác định điểm dừng thích hợp dựa trên thử nghiệm dữ liệu lịch sử.
Chỉ số này có thể tạo ra các tín hiệu giả. Có thể lọc thêm các chỉ số khối lượng giao dịch hoặc biến động.
Thử nghiệm các tham số JMA để tìm ra sự kết hợp tham số tốt nhất.
Thử các thiết lập RSI khác nhau để tối ưu hóa hiệu quả của chỉ số.
Tham gia vào cơ chế dừng lỗ di động, làm cho dừng lỗ thích ứng hơn.
Tối ưu hóa logic quản lý kho mở kho, chẳng hạn như thêm các điều kiện kho và xây dựng kho theo lô.
Nghiên cứu các chỉ số khác như KD, MACD.
Chiến lược này dựa trên JMA và RSI để thực hiện theo dõi xu hướng chéo hai chỉ số, có thể cấu hình dừng để hạn chế rủi ro. Tuy nhiên, vẫn có một xác suất tín hiệu giả nhất định, cần tiếp tục tối ưu hóa tham số chỉ số và điều kiện lọc để giảm giao dịch sai. Chiến lược dừng lỗ cũng cần được kiểm tra tối ưu hóa dựa trên dữ liệu phản hồi. Chiến lược này cung cấp khung cơ bản cho giao dịch chéo hai chỉ số và có một số không gian mở rộng.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Stratégie marche le mieux sur du 2 jours
strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000)
// Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(06, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true
// Strategy Tester End Time
eYear = input(2019, title = "End Year")
eMonth = input(12, title = "End Month", minval = 01, maxval = 12)
eDay = input(01, title = "End Day", minval = 01, maxval = 31)
eHour = input(00, title = "End Hour", minval = 00, maxval = 23)
eMinute = input(00, title = "End Minute", minval = 00, maxval = 59)
endTime = true
// === RSI ===
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, color=color.purple)
band1 = hline(70)
band0 = hline(30)
// === JMA ===
_length = input(7, title="Length")
_phase = input(50, title="Phase")
_power = input(2, title="Power")
highlightMovements = input(true, title="Highlight Movements ?")
// srcJMA = input(rsi, title="Source")
srcJMA = rsi
phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2)
alpha = pow(beta, _power)
jma = 0.0
e0 = 0.0
e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1])
e1 = 0.0
e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1])
e2 = 0.0
e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1])
jma := e2 + nz(jma[1])
// === End of JMA def ===
jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f
plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0)
// === Inputs ===
// risk management
useStop = input(true, title = "Use Initial Stop Loss?")
goLong() => crossover(rsi, jma)
killLong() => crossunder(rsi, jma)
// ======= DEBUGGGGGGGG ============
long_price = 0.0
short_price = 0.0
if(startTime and endTime)
if(goLong())
long_price := close
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong() and close > long_price)
// Shorting if using
goShort() => killLong()
killShort() => goLong()
if(startTime and endTime)
if(goShort())
short_price := close
strategy.entry("Sell", strategy.short, when = goShort() and close < short_price)
strategy.close("Sell", when = killShort())
// =========================
if (useStop)
strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08)
strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)