Chiến lược giao dịch bóng sẽ xác định đường K với bóng dưới hoặc trên dài để xác định cơ hội đảo ngược thị trường tiềm năng.
Logic cốt lõi của chiến lược giao dịch bóng là xác định bóng dài trên và dưới trong các đường K. Chiến lược tính toán kích thước của cơ thể đường K.corpo
và bóng tối.pinnaL
vàpinnaS
Khi kích thước của bóng lớn hơn kích thước cơ thể bằng một số nhân nhất định, nó xem xét có thể có cơ hội đảo ngược.
corpo
, đó là giá trị tuyệt đối của sự khác biệt giữa giá mở và giá đóng.pinnaL
, đó là giá trị tuyệt đối của sự khác biệt giữa giá cao nhất và giá đóng cửa.pinnaS
, đó là giá trị tuyệt đối của sự khác biệt giữa giá thấp nhất và giá đóng cửa.pinnaL > (corpo*size)
, nơisize
là một tham số có thể điều chỉnh.pinnaS > (corpo*size)
.Ngoài ra, chiến lược cũng kiểm tra xem phạm vi đường Kdim
lớn hơn giá trị tối thiểumin
để lọc ra các đường K tầm thường với phạm vi không đáng kể.
Chiến lược giao dịch bóng là một chiến lược giao dịch ngắn hạn đơn giản và thực tế. Nó tạo ra các tín hiệu giao dịch sử dụng nguyên tắc tổng quát của sự đảo ngược bóng. Logic chiến lược đơn giản và dễ thực hiện, và có thể được điều chỉnh và tối ưu hóa theo sự khác biệt của sản phẩm. Đồng thời, giao dịch bóng cũng mang lại một số rủi ro nhất định. Nó cần được kết hợp với xu hướng và các yếu tố khác để lọc để giảm các giao dịch sai. Khi được sử dụng đúng cách, giao dịch bóng có thể trở thành một thành phần hiệu quả trong một hệ thống giao dịch lượng.
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-11 23:59:59 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Shadow Trading", overlay=true) size = input(1,type=float) pinnaL = abs(high - close) pinnaS = abs(low-close) scarto = input(title="Tail Tollerance", type=float, defval=0.0018) corpo = abs(close - open) dim = abs(high-low) min = input(0.001) shortE = (open + dim) longE = (open - dim) barcolor(dim > min and (close > open) and (pinnaL > (corpo*size)) and (open-low<scarto) ? navy : na) longcond = (dim > min) and (close > open) and (pinnaL > (corpo*size)) and (open-low<scarto) minimo=low+scarto massimo=high+scarto barcolor( dim > min and(close < open) and (pinnaS > (corpo*size)) and (high-open<scarto) ? orange: na) shortcond = (dim > min) and(close < open) and (pinnaS > (corpo*size)) and (high-open<scarto) //plot(shortE) //plot(longE) //plot(open) ss= shortcond ? close : na ll=longcond ? close : na offset= input(0.00000) DayClose = 2 closup = barssince(change(strategy.opentrades)>0) >= DayClose longCondition = (close > open) and (pinnaL > (corpo*size)) and (open-low<scarto) crossFlag = longcond ? 1 : 0 monthBegin = input(1,maxval = 12) yearBegin = input(2013, maxval= 2015, minval=2000) if(month(time)>monthBegin and year(time) >yearBegin) if (longcond) strategy.entry("short", strategy.short, stop = low - offset) //strategy.close("short", when = closup) shortCondition = (close < open) and (pinnaS > (corpo*size)) and (high-open<scarto) if(month(time)>monthBegin and year(time) >yearBegin) if (shortcond) strategy.entry("long", strategy.long, stop = high + offset) //strategy.close("long", when = closup) Target = input(20) Stop = input(70) //- 2 Trailing = input(0) CQ = 100 TPP = (Target > 0) ? Target*10: na SLP = (Stop > 0) ? Stop*10 : na TSP = (Trailing > 0) ? Trailing : na strategy.exit("Close Long", "long", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP) strategy.exit("Close Short", "short", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP)