Chiến lược ZVWAP dựa trên khoảng cách Z từ VWAP

Tác giả:ChaoZhang, Ngày: 2023-11-10 12:02:19
Tags:

img

Tổng quan

Chiến lược này dựa trên khoảng cách Z từ chỉ số VWAP của LazyBear. Nó sử dụng khoảng cách Z giữa giá và VWAP để xác định các điều kiện mua quá nhiều và bán quá nhiều, cũng như các bước vào và ra. Chiến lược này kết hợp các đường EMA và Z-distance vượt qua mức 0 để lọc ra một số tiếng ồn.

Chiến lược logic

  1. Tính toán giá trị VWAP
  2. Tính toán khoảng cách Z giữa giá và VWAP
  3. Đặt đường mua quá mức (2.5) và đường bán quá mức (-0.5)
  4. Đi dài khi EMA nhanh > EMA chậm, Z-distance < đường bán quá mức và Z-distance vượt trên 0
  5. Khóa vị trí khi Z-distance > đường mua quá mức
  6. Tích hợp logic dừng lỗ

Chức năng chính:

  • calc_zvwap: Tính toán khoảng cách Z giữa giá và VWAP
  • Giá trị VWAP: vwap ((hlc3)
  • EMA nhanh: ema ((close,fastEma)
  • EMA chậm: ema ((close, slowEma)

Phân tích lợi thế

  1. Khoảng cách Z hiển thị trực quan mức mua quá mức / bán quá mức
  2. EMA lọc ra các sự đột phá giả
  3. Cho phép xây dựng kim tự tháp để tận dụng xu hướng
  4. Có logic dừng lỗ để kiểm soát rủi ro

Phân tích rủi ro

  1. Cần phải đảm bảo các thông số như đường, thời gian EMA được thiết lập đúng
  2. Chỉ số khoảng cách Z chậm, có thể bỏ lỡ các điểm chuyển đổi quan trọng
  3. Đánh kim tự tháp có thể làm tăng tổn thất nếu xu hướng đảo ngược
  4. Stop loss cần được thiết lập hợp lý

Giải pháp:

  1. Tối ưu hóa các thông số thông qua backtesting
  2. Thêm các chỉ số khác vào các tín hiệu lọc
  3. Thiết lập điều kiện thích hợp để xây dựng kim tự tháp
  4. Sử dụng stop loss động

Hướng dẫn tối ưu hóa

  1. Tối ưu hóa thời gian EMA
  2. Kiểm tra các tiêu chí mua quá mức/bán quá mức khác nhau
  3. Thêm các chỉ số khác để lọc tiếng ồn
  4. Kiểm tra các kỹ thuật dừng lỗ khác nhau
  5. Tối ưu hóa logic nhập cảnh, kim tự tháp và dừng lỗ

Tóm lại

Chiến lược này sử dụng khoảng cách Z để xác định mối quan hệ giá-VWAP và thêm EMA vào các tín hiệu lọc, nhằm mục đích nắm bắt các cơ hội xu hướng. Nó cho phép kim tự tháp để theo dõi xu hướng và có mức dừng lỗ để kiểm soát rủi ro. Tối ưu hóa và thêm các chỉ số khác có thể cải thiện độ bền. Tuy nhiên, vấn đề chậm trễ của khoảng cách Z nên được xem xét trong quá trình tối ưu hóa. Nhìn chung, đây là một chiến lược theo xu hướng với logic đơn giản, rõ ràng. Khi tối ưu hóa đầy đủ, nó có thể là một công cụ hiệu quả để giao dịch xu hướng.


/*backtest
start: 2022-11-03 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
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/
// © mohanee

//@version=4
//This is based on Z distance from VWAP by Lazybear
strategy(title="ZVWAP[LB] strategy", overlay=false,pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)
length=input(13,"length")

calc_zvwap(pds, source1) =>
	mean = sum(volume*source1,pds)/sum(volume,pds)
	vwapsd = sqrt(sma(pow(source1-mean, 2), pds) )
	(close-mean)/vwapsd


upperTop=2.5  //input(2.5)
upperBottom=2.0  //input(2.0)
lowerTop=-0.5  //input(-0.5)
lowerBottom=-2.0 //input(-2.0)

buyLine=input(-0.5, title="OverSold Line",minval=-2, maxval=3)
sellLine=input(2.0, title="OverBought Line",minval=-2, maxval=3)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)

stopLoss =input(5, title="Stop Loss",minval=1) 

hline(0, title="Middle Line", linestyle=hline.style_dotted, color=color.green)

ul1=plot(upperTop, "OB High")
ul2=plot(upperBottom, "OB Low")
fill(ul1,ul2, color=color.red)
ll1=plot(lowerTop, "OS High")
ll2=plot(lowerBottom, "OS Low")
fill(ll1,ll2, color=color.green)
zvwapVal=calc_zvwap(length,close)
plot(zvwapVal,title="ZVWAP",color=color.purple, linewidth=2)


longEmaVal=ema(close,slowEma)
shortEmaVal=ema(close,fastEma)  

vwapVal=vwap(hlc3)


zvwapDipped=false

for i = 1 to 10
    zvwapDipped := zvwapDipped or zvwapVal[i]<=buyLine

longCondition=  shortEmaVal > longEmaVal  and zvwapDipped and  crossover(zvwapVal,0)

barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ZVWAPLE", long=true,  when= longCondition  and strategy.position_size<1) 


//Add
strategy.entry(id="ZVWAPLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(zvwapVal,0)) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ZVWAPLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss

strategy.close(id="ZVWAPLE",comment="TPExitAll",    qty=strategy.position_size ,   when= crossunder(zvwapVal,sellLine))   //close all      zvwapVal>sellLine

Thêm nữa