Chiến lược lưới DCA đảo ngược đường trung bình động đáy kép


Ngày tạo: 2024-02-20 11:09:33 sửa đổi lần cuối: 2024-02-20 11:09:33
sao chép: 3 Số nhấp chuột: 839
1
tập trung vào
1617
Người theo dõi

Chiến lược lưới DCA đảo ngược đường trung bình động đáy kép

Tổng quan

Chiến lược lưới DCA đường trung bình đảo ngược hai bên dưới được sử dụng chủ yếu để thực hiện sự đảo ngược giá đường trung bình và chiến lược DCA để thực hiện việc xây dựng lưới dần dần. Nó đánh giá cơ hội đảo ngược dựa trên hình thức đảo ngược hai bên dưới. Một khi kích hoạt hình thức đảo ngược, sử dụng nhiều đơn đặt hàng với giá khác nhau, kết hợp với DCA để xây dựng vị trí lưới dần dần.

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

Chiến lược này đầu tiên đánh giá xem liệu K-line có xuất hiện hai đáy cùng giá đóng cửa liên tiếp hay không, điều này được gọi là đáy đáy đôi. Nếu phát hiện được đáy đôi, nó cho rằng có thể có cơ hội đảo ngược giá. Tại thời điểm này, chiến lược sẽ đặt nhiều lệnh giá giới hạn gần đáy, giá của các lệnh sẽ được tính theo ATR và tỷ lệ biến động, tạo thành một khu vực lưới. Điều này thực hiện hiệu quả của DCA, cho phép các nhà giao dịch đặt hàng dần dần tại các điểm giá khác nhau.

Cụ thể, ta.atr đầu tiên tính toán chỉ số ATR cho 14 đường K gần nhất, sau đó kết hợp với 5 đường K gần nhất tính toán tỷ lệ biến động giá, đây là tham số chính được sử dụng để xác định dải lưới. Dải lưới được chia thành 4 điểm giá, tương ứng là giá đáy + tỷ lệ biến động, giá đáy + 0,75 lần biến động, v.v. Khi điều kiện đáy kép được kích hoạt, theo công thức tính toán này, đặt 4 lệnh giới hạn giá tương ứng với giá, mỗi lệnh có số lượng bằng nhau.

Ngoài ra, chiến lược cũng đặt mức dừng lỗ và mức dừng. Giá dừng là giá thấp nhất của đáy kép - mức nhảy tối thiểu, giá dừng là giá nhập cảnh + chỉ số ATR gấp 5 lần.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng hai đáy để xác định thời điểm đảo ngược, bạn có thể tránh được đột phá giả hiệu quả.
  2. DCA Grid được thiết kế để cho phép các nhà giao dịch xây dựng vị trí theo từng mức giá khác nhau, giảm chi phí vị trí.
  3. ATR và các tham số tỷ lệ dao động có thể động điều chỉnh lưới và ngăn chặn không gian để thích ứng với sự thay đổi của thị trường.
  4. Hệ thống tự động ngăn chặn thiệt hại có thể kiểm soát hiệu quả thiệt hại đơn lẻ.

Phân tích rủi ro

Những rủi ro chính là:

  1. Giá có thể không đảo ngược và giảm xuống mức hỗ trợ hai đáy. Tại thời điểm này, lệnh dừng sẽ được kích hoạt và gây ra tổn thất.
  2. DCA Grid được thiết lập không đúng, hầu hết các ủy thác không thể giao dịch. Các tham số khác nhau có thể được thử nghiệm để đảm bảo tỷ lệ giao dịch.
  3. Các lệnh dừng có thể được kích hoạt thường xuyên khi thị trường biến động mạnh. Bạn có thể cân nhắc mở rộng số lần dừng một cách thích hợp.

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

Chiến lược này cũng có thể được tối ưu hóa theo các hướng sau:

  1. Tăng khả năng đánh giá xu hướng, chỉ xem nhiều xu hướng và thực hiện các hoạt động đảo ngược để tránh bỏ lỡ xu hướng lớn.
  2. Cân nhắc tăng vị trí đơn đầu tiên, sau đó giảm vị trí lưới dần dần, tối ưu hóa hiệu quả sử dụng vốn.
  3. Kiểm tra các kết hợp tham số khác nhau để tìm ra tham số tốt nhất. Bạn cũng có thể thiết kế tham số động, điều chỉnh theo thời gian thực của thị trường.
  4. Có thể tích hợp học máy trong nền tảng cao cấp, để tối ưu hóa các tham số tự động.

Tóm tắt

Chiến lược lưới DCA xoay ngược đường trung bình hai bên dưới sử dụng nhiều phương tiện kỹ thuật như hình dạng giá, chỉ số đường trung bình, giao dịch lưới. Nó có các lợi thế như độ chính xác thời điểm phán quyết, chi phí có thể kiểm soát được, có bảo vệ rút lui.

Mã nguồn chiến lược
/*backtest
start: 2024-02-12 00:00:00
end: 2024-02-19 00:00:00
period: 3m
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/
// © cherepanovvsb

//@version=5
strategy("Reversal (only long)", overlay=true, margin_long=1, margin_short=1,initial_capital=1000,commission_type = strategy.commission.percent,commission_value =0.1,currency='USD', process_orders_on_close=true)
plotshape(low == low[1], style=shape.triangleup, location=location.belowbar, color=color.blue, title="1 Setup")
plotshape(low == low[1] and low[1]==low[2], style=shape.triangleup, location=location.belowbar, color=color.red, title="Triple Setup")

ATRlenght   = input.int(title="ATR length for taking profit", defval=14, group="Strategy Settings")
rewardMultiplier= input.int(title="ATR multiplier", defval=5, group="Strategy Settings")
Volatility_length=input.int(title='Volatility length',defval=5,group="Strategy Settings")
Volatility_multiplier=input.float(title='Volatility multiplier',defval=0.5,step=0.1, group="Strategy Settings")
Candles_to_wait=input.int(title='How many candles to wait after placing orders grid?',defval=4,group="Strategy Settings")

// Get ATR
atr1 = ta.atr(ATRlenght)

//Get volatility values (not ATR) 
float result = 0
for i = 0 to Volatility_length
	result+=high[i]-low[i]
volatility=result*Volatility_multiplier/Volatility_length

//Validate entrance points
validlow =  low [2]== low[1] and not na(atr1) 
validlong = validlow and strategy.position_size == 0  and low[1]<low


// Calculate SL/TP
longStopPrice = low[1]-syminfo.mintick
longStopDistance = close - longStopPrice
longTargetPrice = close + (longStopDistance * rewardMultiplier)
strategy.initial_capital = 50000
//Assign all variables
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0
var point1=0.0
var point2=0.0
var point3=0.0
var point4=0.0
var contracts = int(strategy.initial_capital/close)/4
if validlong 
    tradeStopPrice := longStopPrice
    tradeTargetPrice := longTargetPrice
    point1:=low[1]+volatility
    point2:=low[1]+volatility*0.75
    point3:=low[1]+volatility*0.5
    point4:=low[1]+volatility*0.25

strategy.entry ("Long1", strategy.long,limit=point1,qty=contracts, when=validlong)
strategy.entry ("Long2", strategy.long,limit=point2,qty=contracts, when=validlong)
strategy.entry ("Long3", strategy.long,limit=point3,qty=contracts, when=validlong)
strategy.entry ("Long4", strategy.long,limit=point4,qty=contracts, when=validlong)

stopcondition = ta.barssince(validlong) == Candles_to_wait

strategy.cancel("Long1",when=stopcondition)
strategy.cancel("Long2",when=stopcondition)
strategy.cancel("Long3",when=stopcondition)
strategy.cancel("Long4",when=stopcondition)
    
strategy.exit(id="Long Exit", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size > 0)

plot(strategy.position_size != 0 or validlong ? tradeStopPrice : na, title="Trade Stop Price", color=color.red, style=plot.style_linebr, linewidth=3)
plot(strategy.position_size != 0 or validlong ? tradeTargetPrice : na, title="Trade Target Price", color=color.green, style=plot.style_linebr, linewidth=3)

plot(strategy.position_size != 0? point1 : na, title="Long1", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point2 : na, title="Long2", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point3 : na, title="Long3", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point4 : na, title="Long4", color=color.green, style=plot.style_linebr, transp=0)