
Chiến lược nhận diện xu hướng MyQuant là một chiến lược được sử dụng cho giao dịch Bitcoin hàng ngày. Chiến lược này nhận diện xu hướng thị trường bằng cách tính toán đường trung bình di chuyển của giá và hàm số đầu tiên và thứ hai của nó, và dựa trên đó đưa ra quyết định mua và bán.
Chiến lược này đầu tiên tính toán đường trung bình di chuyển thích ứng của giá ((ALMA) và các dẫn đầu và dẫn thứ nhất của nó. Các dẫn đầu phản ánh tốc độ thay đổi giá, dẫn thứ hai phản ánh đường cong giá. Theo giá trị của các dẫn đầu đầu tiên và thứ hai, hiện tại đang ở trong xu hướng tăng, xu hướng giảm hoặc thời kỳ dao động.
Cụ thể, chiến lược tính toán các chỉ số sau:
Khi điều kiện mua được đáp ứng, số lượng mua được tính dựa trên tín hiệu CAUSED.Accumulation/Distribution Bands và Caused Exposure Top and Bottom Finder. Khi điều kiện bán được đáp ứng, bán toàn bộ vị trí.
Chiến lược này kết hợp xu hướng và đánh giá chỉ số, có thể xác định hiệu quả các điểm biến động của xu hướng thị trường. Sử dụng dẫn đầu và dẫn thứ hai của giá để đánh giá xu hướng, tránh bị ảnh hưởng bởi biến động giá, làm cho tín hiệu rõ ràng hơn.
Chiến lược này rất nhạy cảm với lựa chọn khoảng thời gian giao dịch và điều chỉnh tham số. Nếu chọn khoảng thời gian không đúng, không bao gồm các điểm biến giá quan trọng, chiến lược sẽ không hiệu quả. Nếu thiết lập tham số chỉ số không đúng, tín hiệu mua bán sẽ bị ảnh hưởng bởi tiếng ồn nhiều hơn, ảnh hưởng đến lợi nhuận chiến lược. Ngoài ra, điều kiện dừng lỗ của chiến lược cũng sẽ ảnh hưởng đến lợi nhuận cuối cùng.
Chiến lược này có thể được tối ưu hóa thêm bằng cách:
Chiến lược nhận diện xu hướng MyQuant có hiệu quả trong việc nhận diện xu hướng thị trường của Bitcoin và đưa ra quyết định mua và bán phù hợp bằng cách tính toán các chỉ số thứ nhất và thứ hai của giá. Chiến lược này kết hợp các chỉ số khác nhau để phán đoán và tránh các tín hiệu bị nhiễu bởi tiếng ồn quá mức.
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 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/
// © spacekadet17
//
//@version=5
strategy(title="Trend Identifier Strategy", shorttitle="Trend Identifier Strategy", format=format.price, precision=4, overlay = false, initial_capital = 1000, pyramiding = 10, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.03)
//start-end time
startyear = input.int(2020,"start year")
startmonth = input.int(1,"start month")
startday = input.int(1,"start day")
endyear = input.int(2025,"end year")
endmonth = input.int(1,"end month")
endday = input.int(1,"end day")
timeEnd = time <= timestamp(syminfo.timezone,endyear,endmonth,endday,0,0)
timeStart = time >= timestamp(syminfo.timezone,startyear,startmonth,startday,0,0)
choosetime = input(false,"Choose Time Interval")
condTime = (choosetime ? (timeStart and timeEnd) : true)
// time frame?
tfc = 1
if timeframe.isdaily
tfc := 24
// indicators: price normalized alma, and its 1st and 2nd derivatives
ema = ta.alma(close,140,1.1,6)
dema = (ema-ema[1])/ema
stodema = ta.ema(ta.ema(ta.stoch(dema,dema,dema,100),3),3)
d2ema = ta.ema(dema-dema[1],5)
stod2ema = ta.ema(ta.ema(ta.stoch(d2ema,d2ema,d2ema,100),3),3)
ind = (close-ta.ema(close,120*24/tfc))/close
heat = ta.ema(ta.stoch(ind,ind,ind,120*24/tfc),3)
index = ta.ema(heat,7*24/tfc)
//plot graph
green = color.rgb(20,255,100)
yellow = color.yellow
red = color.red
blue = color.rgb(20,120,255)
tcolor = (dema>0) and (d2ema>0)? green : (dema>0) and (d2ema<0) ? yellow : (dema < 0) and (d2ema<0) ? red : (dema < 0) and (d2ema>0) ? blue : color.black
demaema = ta.ema(dema,21)
plot(demaema, color = tcolor)
//strategy buy-sell conditions
cond1a = strategy.position_size <= 0
cond1b = strategy.position_size > 0
if (condTime and cond1a and ( ( ((tcolor[1] == red and demaema<0.02) or (tcolor[1] == blue and demaema < 0.02) or (tcolor[1] == yellow and demaema>-0.02) ) and tcolor == green) or (tcolor[1] == red and tcolor == blue and demaema < -0.01) ) and index<85 and ind<0.4)
strategy.entry("buy",strategy.long, (strategy.equity-strategy.position_size*close)/1/close)
if (condTime and cond1b and ( (((tcolor[1] == yellow and demaema > -0.02) or (tcolor[1] == blue and demaema < 0.02) or (tcolor[1] == green and demaema < 0.02)) and tcolor == red) or (tcolor[1] == green and tcolor == yellow and demaema > 0.015) ) and index>15 and ind>-0.1)
strategy.order("sell",strategy.short, strategy.position_size)