
Chiến lược này sử dụng tín hiệu chéo của đường nhanh và đường chậm của chỉ số MACD, kết hợp với nhiều chỉ số khác để đưa ra phán đoán tổng hợp, nắm bắt tín hiệu đột phá của chỉ số di chuyển trung bình trong giây lát, đưa ra quyết định mua hoặc bán, thuộc chiến lược giao dịch ngắn.
Sử dụng đường nhanh và đường chậm của MACD giao nhau làm tín hiệu giao dịch chính. Bỏ vào khi đường nhanh vượt qua đường chậm và giảm khi đường nhanh vượt qua đường chậm.
Kết hợp với chỉ số RSI để xác định xem có quá mua hay quá bán không. RSI là lạc quan khi thấp hơn đường trung bình và giảm khi cao hơn đường trung bình.
Tính toán giá đóng cửa hiện tại so với đường trung bình SMA trong một khoảng thời gian nhất định, giá đóng cửa được tăng khi giá đóng cửa thấp hơn SMA và giảm khi giá đóng cửa cao hơn SMA.
Tính giá trị cao nhất trong một chu kỳ là 0,5 Fibonacci, là ngưỡng kháng cự của thị trường. Tính giá trị thấp nhất trong một chu kỳ là 0,5 Fibonacci, là ngưỡng hỗ trợ của thị trường.
Đánh giá mua vào khi đáp ứng đường nhanh và giá thấp hơn mức hỗ trợ. Đánh giá mua vào khi đáp ứng đường nhanh và giá cao hơn mức kháng cự.
Sử dụng phương pháp dừng chân di chuyển dần dần. Khi bắt đầu sau khi nhập vào, mức dừng chân được cố định là một tỷ lệ phần trăm của giá mở kho, sau khi thua lỗ đạt đến một tỷ lệ nhất định, nó được thay đổi thành mức dừng chân theo dõi dần dần.
Chiến lược tận dụng tối đa tín hiệu giao dịch MACD, một tín hiệu giao dịch chỉ số kỹ thuật cổ điển và hiệu quả.
Kết hợp nhiều chỉ số như RSI, SMA để xác nhận, có thể lọc các tín hiệu giả và tăng độ tin cậy của tín hiệu.
Tính toán động lực hỗ trợ mức kháng cự, thực hiện giao dịch đột phá, có thể nắm bắt được tình hình lớn hơn.
Sử dụng phương pháp dừng lỗ di chuyển dần dần, bạn có thể khóa phần lớn lợi nhuận và kiểm soát rủi ro.
Chiến lược giao dịch có logic rõ ràng, đơn giản, dễ hiểu và phù hợp cho người mới bắt đầu.
Chỉ số MACD có vấn đề về chậm trễ, có thể sẽ bỏ lỡ điểm mua bán tốt nhất trên thị trường.
Việc đánh giá nhiều chỉ số kết hợp làm tăng sự phức tạp của chiến lược và dễ xảy ra xung đột chỉ số.
Tính năng tính toán hỗ trợ rủi ro của việc phá vỡ nhầm vị trí kháng cự.
Hạn động di động có thể dừng quá sớm trong trường hợp lớn và không thể kiếm được lợi nhuận liên tục.
Các tham số chiến lược cần được kiểm tra và tối ưu hóa nhiều lần, các tham số không phù hợp có thể ảnh hưởng đến hiệu quả của chiến lược.
Có thể thử nghiệm các tổ hợp tham số khác nhau, tối ưu hóa tham số chu kỳ MACD.
Có thể giới thiệu thêm các chỉ số, chẳng hạn như đường Brin, KDJ cho phân tích đa chiều.
Có thể kết hợp nhiều yếu tố khác để đánh giá tính hợp lý của điểm kháng cự hỗ trợ.
Có thể nghiên cứu các cơ chế dừng di chuyển tiên tiến hơn, chẳng hạn như dừng thời gian, dừng rung động.
Có thể thêm mô-đun tối ưu hóa tham số tự động để thực hiện tìm tự động các tham số.
Chiến lược này sử dụng nhiều chỉ số như MACD, RSI, SMA, để nắm bắt tín hiệu đột phá của đường trung bình di chuyển chỉ số trong thời gian ngắn, thuộc chiến lược giao dịch đột phá ngắn điển hình. Các tín hiệu chiến lược tạo ra một số độ trễ, nhưng có thể cải thiện độ chính xác bằng cách tối ưu hóa tham số. Nhìn chung, logic giao dịch của chiến lược này đơn giản và rõ ràng, dễ nắm bắt, hoạt động ổn định, phù hợp cho hầu hết mọi người để học các giá trị và cần được kiểm tra và tối ưu hóa thêm.
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 23:00:00
period: 1m
basePeriod: 1m
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/
// © onurenginogutcu
//@version=4
strategy("R19 STRATEGY", overlay=true, calc_on_every_tick=true , margin_long=100, margin_short=100 , process_orders_on_close=true )
sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT" , group = "SYMBOL")
timeFrame = input(title="Strategy Decision Time Frame", type = input.resolution , defval="60")
adxlen = input(14, title="ADX Smoothing" , group = "ADX")
dilen = input(14, title="ADX DI Length", group = "ADX")
adxemalenght = input(30, title="ADX EMA", group = "ADX")
adxconstant = input(19, title="ADX CONSTANT", group = "ADX")
fibvar = input (title = "Fibo Look Back Canles" , defval = 50 , minval = 0 , group = "FIBO MACD SMA")
smaLookback = input (title = "SMA Look Back Candles" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDFast = input (title = "MACD Fast Lenght" , defval = 15 , minval = 0 , group = "FIBO MACD SMA")
MACDSlow = input (title = "MACD Slow Lenght" , defval = 30 , minval = 0 , group = "FIBO MACD SMA")
MACDSmooth = input (title = "MACD Signal Smoothing" , defval = 9 , minval = 0 , group = "FIBO MACD SMA")
MACDLookback = input (title = "MACD Look Back Candles" , defval = 100 , minval = 0 , group = "FIBO MACD SMA")
trailingStopLong = input (title = "Trailing Long Stop %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01
trailingStopShort = input (title = "Trailing Short Stop %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
LongTrailingProfitStart = input (title = "Long Profit Start %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01
ShortTrailingProfitStart = input (title = "Short Profit Start %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01
lsl = input(title="Max Long Stop Loss (%)",
minval=0.0, step=0.1, defval=3.0, group = "TP & SL") * 0.01
ssl = input(title="Max Short Stop Loss (%)",
minval=0.0, step=0.1, defval=2.5, group = "TP & SL") * 0.01
longtp = input(title="Long Take Profit (%)",
minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
shorttp = input(title="Short Take Profit (%)",
minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01
capperc = input(title="Capital Percentage to Invest (%)",
minval=0.0, maxval=100, step=0.1, defval=95, group = "CAPITAL TO INVEST") * 0.01
symClose = security(sym, timeFrame, close)
symHigh = security(sym, timeFrame, high)
symLow = security(sym, timeFrame, low)
atr = atr (14)
/////////adx code
dirmov(len) =>
up = change(symHigh)
down = -change(symLow)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
emasig = ema (sig , adxemalenght )
////////adx code over
i = ema (symClose , MACDFast) - ema (symClose , MACDSlow)
r = ema (i , MACDSmooth)
sapust = highest (i , MACDLookback) * 0.729
sapalt = lowest (i , MACDLookback) * 0.729
simRSI = rsi (symClose , 50 )
fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
cond1 = 0
cond2 = 0
cond3 = 0
cond4 = 0
longCondition = crossover(i, r) and i < sapalt and sig > adxconstant and symClose < sma (symClose , smaLookback) and simRSI < sma (simRSI , 50) and symClose < fibbottom
shortCondition = crossunder(i, r) and i > sapust and sig > adxconstant and symClose > sma (symClose , smaLookback) and simRSI > sma (simRSI , 50) and symClose > fibtop
//////////////////////probability long/short
if (crossover(i, r) and i < sapalt)
cond1 := 35
else if (crossunder(i, r) and i > sapust)
cond1 := -35
else
cond1 := 0
if (symClose < sma (symClose , smaLookback))
cond2 := 30
else if (symClose > sma (symClose , smaLookback))
cond2 := -30
else
cond2 := 0
if (simRSI < sma (simRSI , 50))
cond3 := 25
else if (simRSI > sma (simRSI , 50))
cond3 := -25
else
cond3 := 0
if (symClose < fibbottom)
cond4 := 10
else if (symClose > fibbottom)
cond4 := -10
else
cond4 := 0
probab = cond1 + cond2 + cond3 + cond4
////////////////////////////////////////////////////////////////
///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES /////
var startTrail = 0
var trailingLongPrice = 0.0
var trailingShortPrice = 0.0
if (longCondition and strategy.position_size == 0)
strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close )
if (shortCondition and strategy.position_size == 0)
strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close )
if (strategy.position_size == 0)
trailingShortPrice := 0.0
trailingLongPrice := 0.0
startTrail := 0
/////////////////////////////////strategy exit
if (strategy.position_size > 0 and close >= strategy.position_avg_price * (1 + LongTrailingProfitStart))
startTrail := 1
if (strategy.position_size < 0 and close <= strategy.position_avg_price * (1 - ShortTrailingProfitStart))
startTrail := -1
trailingLongPrice := if strategy.position_size > 0 and startTrail == 1
stopMeasure = close * (1 - trailingStopLong)
max (stopMeasure , trailingLongPrice [1])
else if strategy.position_size > 0 and startTrail == 0
strategy.position_avg_price * (1 - lsl)
trailingShortPrice := if strategy.position_size < 0 and startTrail == -1
stopMeasure = close * (1 + trailingStopShort)
min (stopMeasure , trailingShortPrice [1])
else if strategy.position_size < 0 and startTrail == 0
strategy.position_avg_price * (1 + ssl)
if (strategy.position_size > 0)
strategy.exit("Exit Long", "Long", stop = trailingLongPrice , limit=strategy.position_avg_price*(1 + longtp))
if (strategy.position_size < 0)
strategy.exit("Exit Short", "Short", stop = trailingShortPrice , limit=strategy.position_avg_price*(1 - shorttp))
////////////////////////vertical colouring signals
bgcolor(color=longCondition ? color.new (color.green , 70) : na)
bgcolor(color=shortCondition ? color.new (color.red , 70) : na)
plot (trailingLongPrice , color = color.green) ///long price trailing stop
plot (trailingShortPrice , color = color.red) /// short price trailing stop
plot (startTrail , color = color.yellow)
plot (probab , color = color.white) ////probability