Tài nguyên đang được tải lên... tải...

Chiến lược giao thoa TSI

Tác giả:ChaoZhang, Ngày: 2024-06-07 16:36:24
Tags:TSIEMAATRTEMA

img

Tổng quan

Chiến lược này sử dụng chỉ số TSI làm tín hiệu giao dịch chính. Khi chỉ số TSI vượt qua đường tín hiệu của nó và chỉ số TSI dưới giới hạn dưới hoặc trên giới hạn trên, chiến lược sẽ tạo ra một tín hiệu vị trí mở. Đồng thời, chiến lược cũng sử dụng các chỉ số như EMA và ATR để tối ưu hóa hiệu suất chiến lược. Chiến lược chỉ chạy trong các phiên giao dịch cụ thể và thiết lập tần suất giao dịch tối thiểu để kiểm soát quá mức giao dịch.

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

  1. Tính toán giá trị chỉ số TSI và giá trị đường tín hiệu.
  2. Xác định xem thời gian hiện tại có nằm trong phạm vi giao dịch được phép hay không, và thanh hiện tại ít nhất là số thanh tối thiểu được chỉ định từ giao dịch cuối cùng.
  3. Nếu chỉ báo TSI vượt qua trên đường tín hiệu từ dưới và đường tín hiệu nằm dưới giới hạn dưới được chỉ định, một tín hiệu dài sẽ được tạo ra.
  4. Nếu chỉ báo TSI vượt qua dưới đường tín hiệu từ trên và đường tín hiệu nằm trên giới hạn trên được chỉ định, một tín hiệu ngắn sẽ được tạo ra.
  5. Nếu hiện đang giữ một vị trí dài, một khi chỉ báo TSI vượt qua dưới đường tín hiệu từ trên, đóng tất cả các vị trí dài.
  6. Nếu hiện đang giữ một vị trí ngắn, một khi chỉ báo TSI vượt qua trên đường tín hiệu từ dưới, đóng tất cả các vị trí ngắn.

Phân tích lợi thế

  1. Logic chiến lược là rõ ràng, sử dụng dấu chéo của chỉ số TSI là điều kiện duy nhất để mở và đóng các vị trí, đơn giản và dễ hiểu.
  2. Bằng cách hạn chế phiên giao dịch và tần suất giao dịch, rủi ro giao dịch quá mức được kiểm soát hiệu quả.
  3. Dừng lỗ kịp thời và dừng lợi nhuận, một khi tín hiệu ngược lại xuất hiện, đóng quyết định vị trí, kiểm soát rủi ro của một giao dịch duy nhất.
  4. Nhiều chỉ số được sử dụng để hỗ trợ đánh giá, chẳng hạn như EMA, ATR, v.v., tăng cường độ vững chắc của chiến lược.

Phân tích rủi ro

  1. Chiến lược khá nhạy cảm với việc lựa chọn các thông số chỉ số TSI, và các thông số khác nhau sẽ mang lại sự khác biệt về hiệu suất lớn, cần phải được lựa chọn cẩn thận.
  2. Các điều kiện mở và đóng tương đối đơn giản, thiếu phán đoán xu hướng và hạn chế biến động, và có thể dẫn đến tổn thất trong các thị trường dao động.
  3. Thiếu quản lý vị trí và quản lý quỹ, rất khó kiểm soát việc rút vốn, một khi mất liên tục sẽ dẫn đến việc rút vốn lớn.
  4. Chỉ làm đảo ngược ngắn dài, không theo dõi xu hướng, sẽ bỏ lỡ nhiều cơ hội xu hướng.

Hướng tối ưu hóa

  1. Tối ưu hóa các tham số của chỉ số TSI để tìm ra một sự kết hợp các tham số mạnh mẽ hơn.
  2. Thêm các chỉ số đánh giá xu hướng, chẳng hạn như MA hoặc MACD, để chọn hướng xu hướng khi mở một vị trí để cải thiện tỷ lệ thành công.
  3. Thêm các chỉ số biến động, chẳng hạn như ATR, để giảm số lượng giao dịch trong môi trường thị trường biến động cao.
  4. Đưa ra một mô hình quản lý vị trí để điều chỉnh động kích thước vị trí của mỗi giao dịch dựa trên hiệu suất thị trường gần đây và giá trị tài khoản ròng.
  5. Logic theo dõi xu hướng có thể được thêm vào để tiếp tục giữ vị trí trong thị trường xu hướng để cải thiện khả năng của chiến lược để nắm bắt các xu hướng lớn.

Tóm lại

Chiến lược này dựa trên chỉ số TSI và tạo ra các tín hiệu giao dịch thông qua đường chéo TSI và đường tín hiệu của nó. Đồng thời, nó giới hạn thời gian giao dịch và tần suất để kiểm soát rủi ro. Ưu điểm của chiến lược là logic đơn giản và rõ ràng, và nó ngăn chặn lỗ và lợi nhuận kịp thời. Tuy nhiên, nhược điểm là thiếu phán đoán xu hướng và quản lý vị trí, nhạy cảm với các thông số TSI, và chỉ có thể nắm bắt thị trường đảo ngược xu hướng trong khi thiếu thị trường. Trong tương lai, chiến lược có thể được cải thiện từ các khía cạnh như phán đoán xu hướng và biến động, quản lý vị trí và tối ưu hóa tham số.


/*backtest
start: 2024-05-30 00:00:00
end: 2024-06-06 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © nikgavalas

//@version=5
strategy("TSI Entries", overlay=true, margin_long=100, margin_short=100)

//
// INPUTS
//

// Define the start and end hours for trading
string sessionInput = input("1000-1530", "Session")

// Day of the week.
string daysInput = input.string("23456", tooltip = "1 = Sunday, 7 = Saturday")

// Minimum number of bar's between entries
requiredBarsBetweenEntries = input.int(12, "Required Bars Between Entries")

// Show debug labels
bool showDebugLabels = input.bool(false, "Show Debug Labels")

//
// FUNCTIONS
//

//@function Define the triple exponential moving average function
tema(src, len) => tema = 3 * ta.ema(src, len) - 3 * ta.ema(ta.ema(src, len), len) + ta.ema(ta.ema(ta.ema(src, len), len), len)

//@function Atr with EMA
atr_ema(length) =>
    trueRange = na(high[1])? high-low : math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1]))
    //true range can be also calculated with ta.tr(true)
    ta.ema(trueRange, length)

//@function Check if time is in range
timeinrange() => 
    sessionString = sessionInput + ":" + daysInput
    inSession = not na(time(timeframe.period, sessionString, "America/New_York"))

//@function Displays text passed to `txt` when called.
debugLabel(txt, color, y, style) =>
    if (showDebugLabels) 
        label.new(bar_index, y, text = txt, color = color, style = style, textcolor = color.black, size = size.small)


//
// INDICATOR CODE
//

long = input(title="TSI Long Length", defval=8)
short = input(title="TSI Short Length", defval=8)
signal = input(title="TSI Signal Length", defval=3)
lowerLine = input(title="TSI Lower Line", defval=-50)
upperLine = input(title="TSI Upper Line", defval=50)

price = close
double_smooth(src, long, short) =>
	fist_smooth = ta.ema(src, long)
	ta.ema(fist_smooth, short)

pc = ta.change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short)
tsiValue = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
signalValue = ta.ema(tsiValue, signal)

//
// COMMON VARIABLES
//

var color trendColor = na
var int lastEntryBar = na

bool tradeAllowed = timeinrange() == true and (na(lastEntryBar) or bar_index - lastEntryBar > requiredBarsBetweenEntries)

// 
// CROSSOVER
//

bool crossOver = ta.crossover(tsiValue, signalValue)
bool crossUnder = ta.crossunder(tsiValue,signalValue)

if (tradeAllowed) 
	if (signalValue < lowerLine and crossOver == true)
		strategy.entry("Up", strategy.long)
		lastEntryBar := bar_index

	else if (signalValue > upperLine and crossUnder == true)

		strategy.entry("Down", strategy.short)
		lastEntryBar := bar_index

// 
// EXITS
// 

if (strategy.position_size > 0 and crossUnder == true)
	strategy.close("Up", qty_percent = 100)

else if (strategy.position_size < 0 and crossOver == true)
	strategy.close("Down", qty_percent = 100)


Có liên quan

Thêm nữa