Chiến lược định lượng dài hạn dựa trên sự đảo ngược của dải biến động


Ngày tạo: 2023-09-15 11:34:45 sửa đổi lần cuối: 2023-09-15 11:34:45
sao chép: 1 Số nhấp chuột: 691
1
tập trung vào
1617
Người theo dõi

Trong bài viết này, chúng tôi sẽ giới thiệu một chiến lược sử dụng nhận dạng băng giá để đảo ngược giao dịch định lượng đường dài. Chiến lược này thực hiện mua hàng bằng cách xác định giá phá vỡ băng giá để thực hiện hoạt động theo dõi tiến độ.

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

Các bước tính toán chính của chiến lược là:

  1. Tính trung bình di chuyển của đường ray trung tâm, đường ray trên và đường ray dưới;

  2. Một tín hiệu mua được tạo ra khi giá từ dưới lên phá vỡ đường mòn xuống;

  3. Các nhà đầu tư sẽ sử dụng các công cụ này để tạo ra các tín hiệu bán hàng khi giá vượt quá đường mòn.

  4. Có thể chọn dừng khi bán tín hiệu hoặc thoát ra khỏi đường ray.

  5. Stop Loss được thiết lập là Stop Loss% cố định.

Bằng cách này, nó có thể mua khi giá đang ở giai đoạn giảm và sau đó thoát ra bằng cách dừng hoặc dừng lỗ, để thực hiện hoạt động đảo ngược.

2 - Lợi thế chiến lược

Lợi thế lớn nhất của chiến lược này là sử dụng các dải sóng để xác định điểm đảo ngược, một phương pháp phân tích kỹ thuật đã được phát triển hơn.

Một lợi thế khác là thiết lập một cơ chế dừng lỗ để kiểm soát rủi ro của một giao dịch.

Cuối cùng, việc xây dựng kho hàng loạt cũng giúp tạo ra lợi nhuận trong giai đoạn sau khi đảo ngược.

Ba, rủi ro tiềm ẩn

Tuy nhiên, chiến lược này cũng có một số vấn đề tiềm ẩn:

Đầu tiên, tính toán đường trung bình di động bị chậm trễ và có thể bỏ lỡ thời điểm mua tốt nhất.

Thứ hai, thiết lập điểm dừng và điểm dừng cần được kiểm tra cẩn thận và tối ưu hóa.

Cuối cùng, các nhà đầu tư phải chịu một số áp lực rút lui.

Bốn nội dung, tóm tắt

Bài viết này mô tả chi tiết một chiến lược giao dịch định lượng đường dài sử dụng sự đảo ngược của dải dao động. Nó có thể xác định hiệu quả các cơ hội đảo ngược giá, thực hiện các vị trí dài. Nhưng cũng cần kiểm soát các vấn đề như trễ đường trung bình di chuyển và tối ưu hóa điểm dừng lỗ.

Mã nguồn chiến lược
/*backtest
start: 2023-09-07 00:00:00
end: 2023-09-12 04:00:00
period: 14m
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/
// © ediks123

//strategy logic  has been borrowed from ceyhun  and tweaked the settings for back testing

//@version=4


//SPY 4 hrs settings 8, 13 , 3.33 , 0.9  on 4 hrs chart
//QQQ above settings is good , but 13, 13 has less number of bars 
//QQQ 4 hrs settings 13, 13 , 3.33 , 0.9  on 4 hrs chart

strategy(title="Volatility Bands Reversal Strategy",  shorttitle="VolatilityBandReversal" , overlay=true, pyramiding=2,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,


av = input(8, title="Band Average")
vp = input(13, title="Volatility Period")
df = input(3.33,title="Deviation Factor",minval=0.1)
lba = input(0.9,title="Lower Band Adjustment",minval=0.1)

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(6,title="Stop Loss",minval=1)

exitOn=input(title="Exit on", defval="touch_upperband", options=["Sell_Signal", "touch_upperband"])



src = hlc3
typical = src >= src[1] ? src - low[1] : src[1] - low
deviation = sum( typical , vp )/ vp * df
devHigh = ema(deviation, av)
devLow = lba * devHigh
medianAvg = ema(src, av)

emaMediaAvg=ema(medianAvg, av)

upperBandVal= emaMediaAvg + devHigh
lowerbandVal= emaMediaAvg - devLow
MidLineVal=sma(medianAvg, av)

UpperBand = plot ( upperBandVal, color=#EE82EE, linewidth=2, title="UpperBand")
LowerBand = plot ( lowerbandVal , color=#EE82EE, linewidth=2, title="LowerBand")
MidLine = plot (MidLineVal, color=color.blue, linewidth=2, title="MidLine")
buyLine = plot ( (lowerbandVal + MidLineVal )/2  , color=color.blue, title="BuyLine")

up=ema(medianAvg, av) + devHigh
down=ema(medianAvg, av) - devLow


ema50=ema(hlc3,50)
plot ( ema50, color=color.orange, linewidth=2, title="ema 50")

//outer deviation

//deviation1 = sum( typical , vp )/ vp * 4
//devHigh1 = ema(deviation, av)
//devLow1 = lba * devHigh
//medianAvg1 = ema(src, av)

//UpperBand1 = plot (emaMediaAvg + devHigh1, color=color.red, linewidth=3, title="UpperBand1")
//LowerBand1 = plot (emaMediaAvg - devLow1, color=color.red, linewidth=3, title="LowerBand1")
//



///Entry Rules
//1)First candle close below the Lower Band of the volatility Band
//2)Second candle close above the lower band
//3)Third Candle closes above previous candle
Buy = close[2] < down[2] and close[1]>down[1] and close>close[1]
//plotshape(Buy,color=color.blue,style=shape.arrowup,location=location.belowbar, text="Buy")
//barcolor(close[2] < down[2] and close[1]>down[1] and close>close[1] ? color.blue :na )
//bgcolor(close[2] < down[2] and close[1]>down[1] and close>close[1] ? color.green :na )

///Exit Rules
//1)One can have a static stops initially followed by an trailing stop based on the risk the people are willing to take
//2)One can exit with human based decisions or predefined target exits. Choice of deciding the stop loss and profit targets are left to the readers.
Sell = close[2] > up[2] and close[1]<up[1] and close<close[1]
//plotshape(Sell,color=color.red,style=shape.arrowup,text="Sell")
barcolor(close[2] > up[2] and close[1]<up[1] and close<close[1] ? color.yellow :na )
bgcolor(close[2] > up[2] and close[1]<up[1] and close<close[1] ? color.red :na )

//Buyer = crossover(close,Buy)
//Seller = crossunder(close,Sell)

//alertcondition(Buyer, title="Buy Signal", message="Buy")
//alertcondition(Seller, title="Sell Signal", message="Sell")


//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1

strategy.entry(id="vbLE", long=true, qty=qty1, when=Buy)

bgcolor(strategy.position_size>=1 ? color.blue : na)
// stop loss exit
stopLossVal = strategy.position_size>=1 ?  strategy.position_avg_price * ( 1 - (stopLoss/100) ) : 0.00
//draw initil stop loss
plot(strategy.position_size>=1 ? stopLossVal : na, color = color.purple , style=plot.style_linebr,  linewidth = 2, title = "stop loss") //, trackprice=true)


strategy.close(id="vbLE", comment="SL exit Loss is  "+tostring(close - strategy.position_avg_price,  "###.##") , when=abs(strategy.position_size)>=1 and close < stopLossVal )   




//close on Sell_Signal
strategy.close(id="vbLE", comment="Profit is : "+tostring(close - strategy.position_avg_price,  "###.##") , when=strategy.position_size>=1 and  exitOn=="Sell_Signal"  and Sell)

//close on touch_upperband
strategy.close(id="vbLE", comment="Profit is : "+tostring(close - strategy.position_avg_price,  "###.##") , when=strategy.position_size>=1 and  exitOn=="touch_upperband"  and (crossover(close, up) or crossover(high, up)))