Chiến lược giao dịch theo xu hướng định lượng dựa trên nhiều khung thời gian


Ngày tạo: 2023-12-01 13:50:02 sửa đổi lần cuối: 2023-12-01 13:50:02
sao chép: 0 Số nhấp chuột: 767
1
tập trung vào
1619
Người theo dõi

Chiến lược giao dịch theo xu hướng định lượng dựa trên nhiều khung thời gian

Tổng quan

Chiến lược này thực hiện việc theo dõi giao dịch bằng cách kết hợp các chỉ số định lượng trong các khung thời gian khác nhau để xác định các dải giá của Bitcoin. Chiến lược sử dụng khung thời gian 5 phút, giữ lợi nhuận trong dải thời gian dài.

Nguyên tắc chiến lược

  1. Chỉ số RSI được tính dựa trên khung thời gian mặt trời, sử dụng khối lượng giao dịch để tính toán trọng lượng, lọc phá vỡ giả.
  2. Xử lý trơn tru EMA với chỉ số RSI đường mặt trời để xây dựng chỉ số băng tần định lượng.
  3. 5 khung thời gian phút sử dụng chỉ số hồi quy tuyến tính và chỉ số HMA để xây dựng tín hiệu giao dịch.
  4. Chiến lược này kết hợp giữa các khung thời gian khác nhau bằng cách tính toán các chỉ số và tín hiệu giao dịch của các dải tần số, để xác định các dải tần số dài trong giá.

Phân tích lợi thế

  1. Sử dụng chỉ số RSI có trọng lượng giao dịch, có thể xác định hiệu quả các đoạn sóng thực và lọc các đột phá giả.
  2. Chỉ số HMA nhạy cảm hơn với sự thay đổi giá và có thể nắm bắt được sự chuyển đổi.
  3. Kết hợp nhiều khung thời gian, nhận dạng các đoạn sóng dài và trung chính xác hơn.
  4. Các giao dịch được thực hiện trong khung thời gian 5 phút, với tần suất giao dịch cao hơn.
  5. Chiến lược theo dõi dải sóng, không cần chọn chính xác, giữ lâu hơn.

Phân tích rủi ro

  1. Chỉ số định lượng có thể phát ra tín hiệu sai, nên kết hợp với phân tích cơ bản.
  2. Dòng sóng có thể đảo ngược giữa, nên thiết lập cơ chế thoát lỗ.
  3. Các tín hiệu giao dịch bị trì hoãn, có thể bỏ lỡ điểm vào tốt nhất.
  4. Lưu ý rằng các khoản lợi nhuận cần phải được nắm giữ trong một thời gian dài và phải chịu một số áp lực tài chính.

Hướng tối ưu hóa

  1. Kiểm tra hiệu quả của chỉ số RSI với các tham số khác nhau.
  2. Cố gắng giới thiệu các chỉ số hỗ trợ khác.
  3. Tối ưu hóa tham số chiều dài của chỉ số HMA.
  4. Thêm chiến lược dừng lỗ và dừng lại.
  5. Điều chỉnh chu kỳ nắm giữ giao dịch băng tần.

Tóm tắt

Chiến lược này thực hiện việc nắm bắt hiệu quả các xu hướng đường dài của Bitcoin thông qua kết hợp nhiều khung thời gian và theo dõi dải sóng. So với giao dịch ngắn, giao dịch đường dài trung bình có ít lùi và có nhiều cơ hội lợi nhuận hơn. Tiếp theo, bằng cách điều chỉnh tham số và thêm chiến lược quản lý rủi ro, có thể tăng thêm lợi nhuận và sự ổn định của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='Pyramiding BTC 5 min', overlay=true, pyramiding=5, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.075)
//the pyramide based on this script  https://www.tradingview.com/script/7NNJ0sXB-Pyramiding-Entries-On-Early-Trends-by-Coinrule/
//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
//
//Backtest dates
fromMonth = input(defval=1, title="From Month")
fromDay = input(defval=10, title="From Day")
fromYear = input(defval=2020, title="From Year")
thruMonth = input(defval=1, title="Thru Month")
thruDay = input(defval=1, title="Thru Day")
thruYear = input(defval=2112, title="Thru Year")

showDate = input(defval=true, title="Show Date Range")

start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false


leng=1
p1=close[1]

len55 = 10
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
HTF = input("1D", type=input.resolution)
ti = change( time(HTF) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
len100 = 10
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange

//

tf10 = input("1", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(50, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)


filter=input(true)

buy=crossover(linear_reg, b)

longsignal = (v1 > v2 or filter == false ) and buy and window()

//set take profit

ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick

//set take profit

LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick


//Order Placing

strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)

strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)

strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)

strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)

strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)





if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)