Chiến lược lưới DCA đảo ngược hai đáy trung bình đảo ngược

Tác giả:ChaoZhang, Ngày: 2024-02-20 11:09:33
Tags:

img

Tổng quan

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

Chiến lược logic

Chiến lược đầu tiên kiểm tra xem có hai giá đóng liên tiếp bằng đáy trên biểu đồ nến hay không, được gọi là double bottom. Nếu phát hiện đáy kép, nó xem xét 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ới hạn xung quanh giá đáy. Giá của các lệnh này sẽ được tính dựa trên ATR và biến động, tạo thành một vùng lưới. Điều này đạt được hiệu ứng DCA và cho phép các nhà giao dịch dần dần xây dựng các vị trí ở mức giá khác nhau sau khi đảo ngược.

Cụ thể, chỉ số ATR trên 14 ngọn nến gần đây được lấy đầu tiên thông qua ta.atr. Sau đó biến động giá trên 5 ngọn nến gần đây được tính toán. Chúng là các thông số chính được sử dụng để xác định vùng lưới. Các lưới chứa 4 mức giá - giá dưới + biến động, giá dưới + 0,75 * biến động, v.v. Một khi điều kiện đáy kép được kích hoạt, 4 lệnh giới hạn có kích thước bằng nhau sẽ được đặt theo công thức này. Các lệnh chưa hoàn thành sẽ bị hủy sau một số ngọn nến.

Ngoài ra, chiến lược cũng thiết lập giá dừng lỗ và giá lấy lợi nhuận. Giá dừng lỗ được thiết lập ở mức giá thấp nhất của đáy kép trừ một kích thước tick, trong khi giá lấy lợi nhuận được thiết lập ở mức giá đầu vào cộng với 5 lần ATR. Hai giá này sẽ được cập nhật trong thời gian thực khi kích thước vị trí lớn hơn 0.

Điểm mạnh

Những lợi thế chính của chiến lược này là:

  1. Sử dụng đáy kép để xác định đảo ngược cải thiện độ chính xác và tránh vỡ sai.
  2. Mạng lưới DCA cho phép các nhà giao dịch dần dần xây dựng các vị trí ở mức giá khác nhau, giảm cơ sở chi phí.
  3. Các tham số ATR và biến động động động điều chỉnh lưới và phạm vi lợi nhuận dựa trên những thay đổi trên thị trường.
  4. Lợi nhuận dừng tự động có hiệu quả kiểm soát theo số tiền lỗ giao dịch.

Phân tích rủi ro

Rủi ro lớn:

  1. Giá có thể phá vỡ hỗ trợ mà không đảo ngược, kích hoạt dừng lỗ và lỗ.
  2. Cài đặt lưới DCA không chính xác có thể dẫn đến tốc độ lấp thấp.
  3. Thường mang lợi nhuận với whipsaws trong thị trường biến động.

Các lĩnh vực cải thiện

Một số lĩnh vực có thể cải thiện:

  1. Thêm phán đoán xu hướng, chỉ giao dịch đảo ngược theo xu hướng chính để tránh thua lỗ.
  2. Xem xét kích thước lớn hơn cho mục đầu tiên và kích thước nhỏ hơn cho các mục lưới để 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 các tham số tối ưu hoặc thiết kế logic điều chỉnh động.
  4. Tích hợp máy học trong nền tảng tiên tiến để đạt được tối ưu hóa tham số tự động.

Tóm lại

Chiến lược lưới điện DCA đảo ngược chiều đáy kép củng cố mô hình giá, kỹ thuật chỉ số và giao dịch lưới. Nó có thời gian chính xác, cơ sở chi phí có thể kiểm soát được và bảo vệ giảm.


/*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)



Thêm nữa