
Chiến lược này dựa trên chỉ số Wall Street Capture Glow, so sánh xu hướng giảm giá của thị trường tiền điện tử chuẩn, để thực hiện chiến lược giao dịch tự động để thực hiện các hoạt động giảm giá đối với đồng tiền điện tử mục tiêu. Chiến lược có thể theo các tham số chỉ số mức độ hỗ trợ của các đồng tiền điện tử khác nhau để thực hiện giao dịch theo dõi trên nhiều loại tiền điện tử.
Tính toán đường trung bình của Wall Street Rat Trap Glow Indicator của đồng tiền mã hóa chuẩn, đặt chiều dài đường trung bình là 200 chu kỳ.
Xác định tình trạng giảm giá của đường trung bình: khi đường trung bình tăng, chiến lược thực hiện hoạt động lạc quan; khi đường trung bình giảm, chiến lược thực hiện hoạt động giảm giá.
Chiến lược để tự động mở và đóng các vị trí dựa trên tình trạng tăng và giảm của đường trung bình và tình trạng vị trí hiện tại:
Khi đường trung bình tăng cao và không có vị trí hiện tại, giá thị trường chiến lược tự động mở thêm vị trí;
Khi đường trung bình giảm và không có vị trí hiện tại, giá thị trường chiến lược tự động mở lỗ;
Giá thị trường chiến lược sẽ tự động bình thường hóa cho lệnh nhiều khi lợi nhuận của nhiều lệnh đạt tỷ lệ dừng đặt;
Giá thị trường chiến lược sẽ tự động thanh toán cho lệnh CFD khi lợi nhuận của vị trí bán khấu đạt tỷ lệ dừng đặt;
Giá thị trường chiến lược sẽ tự động bình thường hóa khi lỗ hổng giao dịch đạt tỷ lệ dừng đặt;
Giá thị trường chiến lược sẽ tự động thanh toán cho lệnh giảm giá khi lỗ lỗ của vị trí giảm giá đạt tỷ lệ dừng đặt.
Chiến lược cập nhật giá dừng lỗ theo thời gian thực theo sự thay đổi của thị trường tiền điện tử chuẩn
Chiến lược có khả năng thích ứng mạnh mẽ, có thể đặt các tham số khác nhau cho các loại tiền điện tử khác nhau, cho phép theo dõi giao dịch trên nhiều loại tiền điện tử.
Sử dụng chỉ số Wall Street Catch the Rat Gloss để đánh giá xu hướng thị trường, có thể tránh giao dịch sai do tiếng ồn. Chỉ số này có độ trễ đối với đột phá lên và xuống đường ray, có thể làm giảm thiệt hại do đột phá giả.
Chiến lược này bao gồm một cơ chế dừng lỗ, có thể nắm bắt xu hướng để theo đuổi giảm giá và kiểm soát tổn thất đơn lẻ.
Chiến lược giao dịch hoàn toàn tự động, không cần sự can thiệp của con người, hoạt động 24 giờ.
Có khả năng giá của một số đồng tiền điện tử có thể không tương thích với đồng tiền điện tử chuẩn, dẫn đến nguy cơ chiến lược không thể giao dịch bình thường. Có thể tối ưu hóa để tính toán hệ số liên quan bằng cách sử dụng nhiều đồng tiền điện tử chuẩn, chọn đồng tiền điện tử chuẩn có liên quan nhất.
Có nguy cơ dừng lỗ bị phá vỡ do biến động bất thường của thị trường. Bạn có thể điều chỉnh tỷ lệ dừng lỗ thích hợp hoặc tham gia theo dõi dừng lỗ.
Có nguy cơ thiết lập tỷ lệ dừng quá nhỏ dẫn đến việc không thể nắm bắt được lợi nhuận xu hướng đủ. Có thể thêm theo dõi xu hướng hoặc dừng động.
Có nguy cơ phá vỡ giả tạo dẫn đến lỗ hổng bằng phẳng. Các tham số chỉ số, thiết lập nhận dạng hoặc cơ chế nhập lại có thể được điều chỉnh thích hợp.
Sử dụng phân tích liên quan để chọn nhiều đồng tiền mã hóa chuẩn, kết hợp các chỉ số tính toán, giảm rủi ro của một đồng tiền chuẩn duy nhất.
Thêm cơ chế theo dõi xu hướng, điều chỉnh dừng lỗ theo biến động của tỷ lệ dao động.
Tăng mức lỗ hổng để ngăn chặn lỗ hổng cực đoan.
Tăng cơ chế tái nhập học, tránh bỏ lỡ các hoạt động tiếp theo sau khi dừng lỗ.
Tối ưu hóa các tham số chỉ số, thiết lập nhận dạng, cải thiện hiệu quả chỉ số.
Tăng khả năng thích ứng chiến lược cho các tham số tối ưu hóa riêng biệt cho các loại tiền điện tử khác nhau.
Tối ưu hóa quản lý vị trí, điều chỉnh vị trí theo quy mô tài chính.
Chiến lược tổng thể là một chiến lược theo dõi xu hướng điển hình. Ý tưởng cốt lõi là đánh giá xu hướng của đồng tiền mã hóa chuẩn dựa trên chỉ số vòng xoáy Wall Street để xác định hướng giao dịch của đồng tiền mã hóa mục tiêu. Chiến lược có một số ưu điểm, nhưng cũng có một số rủi ro cần lưu ý.
/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
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/
// © levieux
//@version=5
strategy(title='Correlation Strategy', shorttitle='Correlation Strategy', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
supportLength = input.int(200, minval=1, title='Support Length')
supportSymbol = input('BTC_USDT:swap', title='Correlated Symbol')
supportSource = input(hlc3, title='Price Source')
takeprofitLong = input.float(0.2, 'Take Profit Long', step=0.01)
takeprofitShort = input.float(0.15, 'Take Profit Short', step=0.01)
stoplossLong = input.float(0.1, 'Stop Loss Long', step=0.01)
stoplossShort = input.float(0.04, 'Stop Loss Short', step=0.01)
start = input(defval = timestamp("01 Jan 2016 00:00 +0000"), title = "Start Time")
end = input(defval = timestamp("31 Dec 2050 23:59 +0000"), title = "End Time")
supportTicker = request.security(supportSymbol, timeframe.period, supportSource, lookahead=barmerge.lookahead_off) //input(close, title="Source")
supportLine = ta.wma(supportTicker, supportLength)
window() => true
if not window()
strategy.cancel_all()
supportLongPrice = close
supportShortPrice = close
if strategy.position_size > 0
supportLongPrice := supportLongPrice[1]
if strategy.position_size < 0
supportShortPrice := supportShortPrice[1]
longCondition = ta.rising(supportLine, 5) and window() and strategy.position_size <= 0
shortCondition = ta.falling(supportLine, 5) and window() and window() and strategy.position_size > 0
takeprofitLongCondition = takeprofitLong > 0 and window() and strategy.position_size > 0 and supportTicker > supportLongPrice * (1 + takeprofitLong)
stoplossLongCondition = stoplossLong > 0 and window() and strategy.position_size > 0 and supportTicker < supportLongPrice * (1 - stoplossLong)
takeprofitShortCondition = takeprofitShort > 0 and window() and strategy.position_size < 0 and supportTicker > supportShortPrice * (1 + takeprofitShort)
stoplossShortCondition = stoplossShort > 0 and window() and strategy.position_size < 0 and supportTicker < supportShortPrice * (1 - stoplossShort)
if longCondition
strategy.entry('Long', strategy.long)
supportLongPrice := supportTicker
if shortCondition
strategy.entry('Short', strategy.short)
supportShortPrice := supportTicker
if takeprofitLongCondition
strategy.close('Long')
if stoplossLongCondition
strategy.close('Long')
if takeprofitShortCondition
strategy.close('Short')
if stoplossShortCondition
strategy.close('Short')
///////////////////
// MONTHLY TABLE //
new_month = month(time) != month(time[1])
new_year = year(time) != year(time[1])
eq = strategy.equity
bar_pnl = eq / eq[1] - 1
bar_bh = (close-close[1])/close[1]
cur_month_pnl = 0.0
cur_year_pnl = 0.0
cur_month_bh = 0.0
cur_year_bh = 0.0
// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 :
(1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
cur_month_bh := new_month ? 0.0 :
(1 + cur_month_bh[1]) * (1 + bar_bh) - 1
// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 :
(1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
cur_year_bh := new_year ? 0.0 :
(1 + cur_year_bh[1]) * (1 + bar_bh) - 1
// Arrays to store Yearly and Monthly P&Ls
var month_pnl = array.new_float(0)
var month_time = array.new_int(0)
var month_bh = array.new_float(0)
var year_pnl = array.new_float(0)
var year_time = array.new_int(0)
var year_bh = array.new_float(0)
end_time = false
end_time:= time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory
if (not na(cur_month_pnl[1]) and (new_month or end_time))
if (end_time[1])
array.pop(month_pnl)
array.pop(month_time)
array.push(month_pnl , cur_month_pnl[1])
array.push(month_time, time[1])
array.push(month_bh , cur_month_bh[1])
if (not na(cur_year_pnl[1]) and (new_year or end_time))
if (end_time[1])
array.pop(year_pnl)
array.pop(year_time)
array.push(year_pnl , cur_year_pnl[1])
array.push(year_time, time[1])
array.push(year_bh , cur_year_bh[1])
// Monthly P&L Table
var monthly_table = table(na)
getCellColor(pnl, bh) =>
if pnl > 0
if bh < 0 or pnl > 2 * bh
color.new(color.green, transp = 20)
else if pnl > bh
color.new(color.green, transp = 50)
else
color.new(color.green, transp = 80)
else
if bh > 0 or pnl < 2 * bh
color.new(color.red, transp = 20)
else if pnl < bh
color.new(color.red, transp = 50)
else
color.new(color.red, transp = 80)
if end_time
monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
table.cell(monthly_table, 0, 0, "", bgcolor = #cccccc)
table.cell(monthly_table, 1, 0, "Jan", bgcolor = #cccccc)
table.cell(monthly_table, 2, 0, "Feb", bgcolor = #cccccc)
table.cell(monthly_table, 3, 0, "Mar", bgcolor = #cccccc)
table.cell(monthly_table, 4, 0, "Apr", bgcolor = #cccccc)
table.cell(monthly_table, 5, 0, "May", bgcolor = #cccccc)
table.cell(monthly_table, 6, 0, "Jun", bgcolor = #cccccc)
table.cell(monthly_table, 7, 0, "Jul", bgcolor = #cccccc)
table.cell(monthly_table, 8, 0, "Aug", bgcolor = #cccccc)
table.cell(monthly_table, 9, 0, "Sep", bgcolor = #cccccc)
table.cell(monthly_table, 10, 0, "Oct", bgcolor = #cccccc)
table.cell(monthly_table, 11, 0, "Nov", bgcolor = #cccccc)
table.cell(monthly_table, 12, 0, "Dec", bgcolor = #cccccc)
table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
for yi = 0 to array.size(year_pnl) - 1
table.cell(monthly_table, 0, yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
y_color = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi))
table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100)) + " (" + str.tostring(math.round(array.get(year_bh, yi) * 100)) + ")", bgcolor = y_color)
for mi = 0 to array.size(month_time) - 1
m_row = year(array.get(month_time, mi)) - year(array.get(year_time, 0)) + 1
m_col = month(array.get(month_time, mi))
m_color = getCellColor(array.get(month_pnl, mi), array.get(month_bh, mi))
table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100)) + " (" + str.tostring(math.round(array.get(month_bh, mi) * 100)) +")", bgcolor = m_color)