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 đầ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à
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.
Những lợi thế chính của chiến lược này là:
Rủi ro lớn:
Một số lĩnh vực có thể cải thiện:
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)