Chiến lược này được chuyển thể từ chiến lược giao dịch tương lai dầu thô miễn phí của Kevin Davey. Nó sử dụng chỉ số ADX để xác định xu hướng trên thị trường dầu thô và, kết hợp với nguyên tắc phá vỡ giá, thực hiện một chiến lược giao dịch tự động đơn giản và thực tế cho dầu thô.
Chiến lược chủ yếu dựa trên chỉ số ADX để xác định xu hướng, và tạo ra các tín hiệu giao dịch dựa trên sự đột phá giá theo chu kỳ cố định trong điều kiện xu hướng.
Tổng thể, đây là một chiến lược giao dịch dầu thô rất thực tế. Nó sử dụng chỉ số ADX để xác định xu hướng rất hợp lý. Nguyên tắc đột phá giá đơn giản và hiệu quả với kết quả kiểm tra hậu quả tốt. Đồng thời, là chiến lược miễn phí công khai của Kevin Davey, nó có độ tin cậy rất mạnh trong chiến đấu thực tế. Mặc dù vẫn còn chỗ để cải thiện chiến lược, nhưng nó là một lựa chọn rất phù hợp cho người mới bắt đầu và các nhà giao dịch vốn nhỏ để bắt đầu và thực hành.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // Strategy idea coded from EasyLanguage to Pinescript //@version=5 strategy("Kevin Davey Crude free crude oil strategy", shorttitle="CO Fut", format=format.price, precision=2, overlay = true, calc_on_every_tick = true) adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") dirmov(len) => up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / truerange) minus = fixnan(100 * ta.rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) plot(sig, color=color.red, title="ADX") buy = sig > 10 and (close - close[65]) > 0 and (close - close[65])[1] < 0 sell = sig > 10 and (close - close[65]) < 0 and (close - close[65])[1] > 0 plotshape(buy, style = shape.arrowup, location = location.belowbar,size = size.huge) plotshape(sell, style = shape.arrowdown, location = location.abovebar,size = size.huge) if buy strategy.entry("long", strategy.long) if sell strategy.entry("short", strategy.short) if strategy.position_size != 0 strategy.exit("long", profit = 450, loss = 300) strategy.exit("short", profit = 450, loss = 300) // GetTickValue() returns the currency value of the instrument's // smallest possible price movement. GetTickValue() => syminfo.mintick * syminfo.pointvalue // On the last historical bar, make a label to display the // instrument's tick value if barstate.islastconfirmedhistory label.new(x=bar_index + 1, y=close, style=label.style_label_left, color=color.black, textcolor=color.white, size=size.large, text=syminfo.ticker + " has a tick value of:\n" + syminfo.currency + " " + str.tostring(GetTickValue()))