Chiến lược này là một chiến lược giao dịch tổng hợp dành cho Bitcoin và các đồng tiền mã hóa khác trong chu kỳ 15 phút. Nó tích hợp nhiều chỉ số để tạo ra tín hiệu mua và bán, bao gồm moving average ba chiều, độ dao động trung bình thực tế và biểu đồ lằn ranh cân bằng, cùng với các cơ chế quản lý rủi ro như dừng lỗ.
Chiến lược này sử dụng nhiều chỉ số sau:
Triple Index Moving Average ((TEMA): Sử dụng 3 TEMA với độ dài và nguồn khác nhau, được tính dựa trên giá cao, giá thấp và giá đóng cửa.
Độ dao động thực tế trung bình ((ATR): Sử dụng ATR tùy chỉnh của EMA để tính toán tỷ lệ dao động của thị trường.
Chỉ số siêu xu hướng: Xác định hướng xu hướng dựa trên ATR và nhân.
Trung bình di chuyển đơn giản ((SMA): SMA được tính toán bằng giá trị mịn cho TEMA ngắn hạn.
Giá đóng cửa đường cân bằng: được sử dụng để xác nhận xu hướng bổ sung.
Một tín hiệu mua được tạo ra khi TEMA ngắn hạn cao hơn hai TEMA dài hạn, chỉ số siêu xu hướng là bullish, TEMA ngắn hạn cao hơn SMA của nó và giá đóng cửa đường cân bằng cao hơn ngày trước.
Một tín hiệu bán ra được tạo ra khi TEMA ngắn hạn thấp hơn hai TEMA dài hạn, chỉ số vượt quá xu hướng giảm, TEMA ngắn hạn thấp hơn SMA của nó và giá đóng cửa đường cân bằng thấp hơn một ngày trước.
Stop Loss được thiết lập tương ứng với 1% và 3% giá nhập cảnh.
Kết hợp nhiều chỉ số yếu tố như xu hướng, dao động, hình dạng, có thể cải thiện độ chính xác phán đoán và tránh các tín hiệu sai.
Cài đặt dừng lỗ hợp lý có thể khóa lợi nhuận và có thể hạn chế hiệu quả tổn thất đơn lẻ.
Các tham số chỉ số có thể được điều chỉnh linh hoạt để thích ứng với sự thay đổi của thị trường, tìm kiếm sự kết hợp tốt nhất.
Thêm một yếu tố phí, có thể làm cho kết quả phản hồi gần hơn với hiệu suất giao dịch thực tế.
Việc kết hợp quá nhiều chỉ số cũng có thể gây ra sai lầm, cần đánh giá kỹ lưỡng hiệu quả của chỉ số.
Các hoạt động 15 phút có nguy cơ bị ảnh hưởng bởi các sự kiện bất ngờ cao hơn so với chu kỳ dài, có nguy cơ xảy ra sự cố ngẫu nhiên cao hơn.
Chiến lược này vẫn cần được chứng minh trong một chu kỳ dài hơn và trên nhiều thị trường để đảm bảo tính ổn định.
Giao diện đa chỉ số mang đến một số lượng lớn các tham số, tối ưu hóa tất cả các tham số cần một thời gian dài.
Kiểm tra lại hiệu quả thực tế của các chỉ số, tránh sử dụng các chỉ số dư thừa.
Kết quả tối ưu hóa tham số thử nghiệm ở nhiều thị trường hơn để đảm bảo tính ổn định và đáng tin cậy.
Kiểm soát rủi ro hơn nữa bằng cách di chuyển lỗ hổng, treo lỗ hổng.
Ví dụ như chi phí điểm trượt giúp đánh giá trở lại thực tế hơn.
Chiến lược này tích hợp nhiều chỉ số và cơ chế kiểm soát rủi ro, được thiết kế cho giao dịch Bitcoin 15 phút. Vẫn còn rất nhiều không gian để tối ưu hóa, cần đánh giá hiệu quả của chỉ số, kiểm tra ổn định thị trường rộng rãi, và thêm các yếu tố cân nhắc thực tế để tìm ra sự kết hợp tham số tối ưu nhất trong chiến lược đa yếu tố. Nếu được tối ưu hóa và xác minh liên tục, chiến lược này có thể trở thành một công cụ hiệu quả cho giao dịch tần số cao của tiền điện tử.
/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-09 00:00:00
period: 10m
basePeriod: 1m
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/
// © deperp
//@version=5
strategy('3kilos', shorttitle='3kilos BTC 15m', overlay=true, initial_capital=100000, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)
short = input.int(50, minval=1)
srcShort = input(high, title='TEMA short')
long = input.int(100, minval=1)
srcLong = input(low, title='TEMA long 2')
long2 = input.int(350, minval=1)
srcLong2 = input(close, title='TEMA long 3')
atrLength = input.int(550, title='ATR Length', minval=1)
mult = input.float(3, title="Multiplier", minval=0.5, step=1)
smaPeriod = input.int(100, title="SMA Period", minval=1)
takeProfitPercent = input.float(1, title="Take Profit (%)", minval=0.1) / 100
stopLossPercent = input.float(3, title="Stop Loss (%)", minval=0.1) / 100
tema(src, length) =>
ema1 = ta.ema(src, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
3 * (ema1 - ema2) + ema3
tema1 = tema(srcShort, short)
plot(tema1, color=color.new(color.red, 0), linewidth=2)
tema2 = tema(srcLong, long)
plot(tema2, color=color.new(color.blue, 0), linewidth=2)
tema3 = tema(srcLong2, long2)
plot(tema3, color=color.new(color.green, 0), linewidth=2)
// Custom ATR calculation with EMA smoothing
atr_ema(src, length) =>
trueRange = math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1]))
emaTrueRange = ta.ema(trueRange, length)
emaTrueRange
// Calculate ATR with EMA smoothing
atr = atr_ema(close, atrLength)
// Calculate Supertrend
var float up = na
var float dn = na
var bool uptrend = na
up := na(up[1]) ? hl2 - (mult * atr) : uptrend[1] ? math.max(hl2 - (mult * atr), up[1]) : hl2 - (mult * atr)
dn := na(dn[1]) ? hl2 + (mult * atr) : uptrend[1] ? hl2 + (mult * atr) : math.min(hl2 + (mult * atr), dn[1])
uptrend := na(uptrend[1]) ? true : close[1] > dn[1] ? true : close[1] < up[1] ? false : uptrend[1]
// Calculate SMA
sma = ta.sma(tema1, smaPeriod)
// Heikin-Ashi Close
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)
// Trend determination using Heikin-Ashi Close
longC = tema1 > tema2 and tema1 > tema3 and uptrend and tema1 > sma and haClose > haClose[1]
shortC = tema1 < tema2 and tema1 < tema3 and not uptrend and tema1 < sma and haClose < haClose[1]
alertlong = longC and not longC[1]
alertshort = shortC and not shortC[1]
useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2023"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
inTradeWindow = true
stopLossLevelLong = close - atr * mult
stopLossLevelShort = close + atr * mult
longTakeProfitLevel = close * (1 + takeProfitPercent)
longStopLossLevel = close * (1 - stopLossPercent)
shortTakeProfitLevel = close * (1 - takeProfitPercent)
shortStopLossLevel = close * (1 + stopLossPercent)
if inTradeWindow and longC
strategy.entry('Long', strategy.long, comment='Long')
strategy.exit("TP Long", "Long", limit=longTakeProfitLevel, stop=longStopLossLevel, comment="TP/SL Long")
if inTradeWindow and shortC
strategy.entry('Short', strategy.short, comment='Short')
strategy.exit("TP Short", "Short", limit=shortTakeProfitLevel, stop=shortStopLossLevel, comment="TP/SL Short")
// Alerts
alertcondition(longC, title='Long', message=' Buy Signal ')
alertcondition(shortC, title='Short', message=' Sell Signal ')