Chiến lược theo xu hướng hiện tại


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

Tổng quan

Chiến lược PresentTrend là một chiến lược theo dõi xu hướng tùy chỉnh độc đáo. Chiến lược này kết hợp các xu hướng thị trường ngắn hạn và dài hạn, làm cho nó phù hợp với các điều kiện thị trường khác nhau.

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

Chiến lược này bao gồm hai phần:

  1. Chỉ số RSI hoặc MFI tùy chỉnh: Chỉ số này được tính toán dựa trên giá trị RSI hoặc MFI PresentTrend và tạo ra tín hiệu mua và bán dựa trên giá trị này, cho thấy sự đảo ngược xu hướng tiềm ẩn.

  2. Chỉ số ATR: Đây là một chỉ số theo xu hướng phổ biến, sử dụng phạm vi biến động thực trung bình (ATR).

Khi hai tín hiệu mua và bán của cả hai chiến lược được kích hoạt cùng một lúc, chiến lược sẽ mở vị trí mua hoặc bán. Điều này có thể đảm bảo giao dịch chỉ xảy ra khi xu hướng ngắn hạn và dài hạn phù hợp, do đó tăng độ tin cậy của chiến lược.

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

  • Kết hợp các xu hướng ngắn hạn và dài hạn, áp dụng cho các điều kiện thị trường khác nhau
  • Sử dụng chỉ số tùy chỉnh và ATR để tăng độ tin cậy tín hiệu
  • Có thể chọn giao dịch chỉ nhiều, chỉ lỗ hoặc hai chiều, thích nghi với phong cách giao dịch khác nhau
  • Các tham số mặc định được tối ưu hóa để cân bằng độ nhạy và độ ổn định
  • Các tham số có thể được điều chỉnh theo sở thích cá nhân, chiến lược tối ưu hóa

Rủi ro chiến lược và giải pháp

  • Tất cả các xu hướng theo chiến lược có nguy cơ bị lợi nhuận
  • Giao dịch hai chiều đa không gian có thể làm tăng số lần giao dịch và phí xử lý
  • Thiết lập tham số không đúng có thể tạo ra quá nhiều tín hiệu sai
  • Có thể rút ngắn thời gian nắm giữ giao dịch một cách thích hợp, giảm rủi ro rủi ro
  • Có thể chọn chỉ giao dịch cổ phiếu hoặc giao dịch trái phiếu để giảm số lần giao dịch
  • Các tham số nên được thử nghiệm đầy đủ và điều chỉnh thích hợp để đảm bảo rằng tham số hợp lý

Hướng tối ưu hóa chiến lược

  • Tăng cơ chế ngăn chặn tổn thất, kiểm soát tốt hơn tổn thất đơn lẻ
  • Kết hợp các chỉ số khác để lọc tín hiệu, giảm giao dịch sai
  • Kiểm tra các tham số khác nhau của chu kỳ giữ vị trí để tìm tham số tối ưu
  • Cố gắng tự động tối ưu hóa các tham số dựa trên học máy
  • Sử dụng nhiều nguồn dữ liệu hơn, chẳng hạn như thông tin lưu lượng đơn hàng
  • Tối ưu hóa mã chiến lược, cải thiện hiệu quả thực thi

Tóm tắt

Chiến lược PresentTrend là một chiến lược theo dõi xu hướng rất hiệu quả. Nó kết hợp cả các chỉ số xu hướng ngắn hạn và dài hạn để tăng độ tin cậy của tín hiệu trong khi vẫn giữ được sự nhạy cảm. Bằng cách điều chỉnh hướng, tham số và thêm logic bổ sung, chiến lược có thể thích ứng với các môi trường thị trường khác nhau và nhu cầu của thương nhân.

Mã nguồn chiến lược
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
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/
// © PresentTrading

//@version=5

// Define the strategy settings
strategy('PresentTrend - Strategy [presentTrading]' , overlay=true, precision=3, default_qty_type=strategy.cash, 
 commission_value= 0.1, commission_type=strategy.commission.percent, slippage= 1, 
  currency=currency.USD, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital= 10000)

// Define the input parameters
priceSource  = input.source(title='Source', defval=hlc3, group='PresentTrend') // The price source to use
lengthParam  = input.int(title='Length', defval=14, group='PresentTrend') // The length of the moving average
multiplier = input.float(title='Multiplier', defval=1.618, step=0.1, group='PresentTrend') // The multiplier for the ATR
indicatorChoice  = input.bool(title='Whether to use RSI or MFI', defval=false, group='PresentTrend') // Whether to use RSI or MFI

// Add a parameter for choosing Long or Short
tradeDirection = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"])

// Calculate the ATR and the upT and downT values
ATR = ta.sma(ta.tr, lengthParam)
upperThreshold = low - ATR * multiplier 
lowerThreshold  = high + ATR * multiplier 

// Initialize the PresentTrend indicator
PresentTrend = 0.0

// Calculate the PresentTrend indicator
PresentTrend := (indicatorChoice ? ta.rsi(priceSource, lengthParam) >= 50 : ta.mfi(hlc3, lengthParam) >= 50) ? upperThreshold < nz(PresentTrend[1]) ? nz(PresentTrend[1]) : upperThreshold : lowerThreshold > nz(PresentTrend[1]) ? nz(PresentTrend[1]) : lowerThreshold

// Calculate the buy and sell signals
longSignal  = ta.crossover(PresentTrend, PresentTrend[2])
shortSignal  = ta.crossunder(PresentTrend, PresentTrend[2])

// Calculate the number of bars since the last buy and sell signals
barsSinceBuy = ta.barssince(longSignal)
barsSinceSell = ta.barssince(shortSignal)
previousBuy = ta.barssince(longSignal[1])
previousSell = ta.barssince(shortSignal[1])

// Initialize the direction variable
trendDirection = 0

// Calculate the direction of the trend
trendDirection := longSignal and previousBuy > barsSinceSell ? 1 : shortSignal and previousSell > barsSinceBuy ? -1 : trendDirection[1]

// Check the trade direction parameter before entering a trade
if (trendDirection == 1 and (tradeDirection == "Long" or tradeDirection == "Both"))
    strategy.entry("Buy", strategy.long) 
if (trendDirection == -1 and (tradeDirection == "Short" or tradeDirection == "Both"))
    strategy.entry("Sell", strategy.short) 

// Add a stop mechanism when the tradeDirection is one-sided
if (tradeDirection == "Long" and trendDirection == -1)
    strategy.close("Buy")
if (tradeDirection == "Short" and trendDirection == 1)
    strategy.close("Sell")

// Visualization
plot(PresentTrend, color=color.blue, title="PresentTrend")
plotshape(series=longSignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=shortSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")