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.
Chức năng chính:
Giải pháp:
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