Chiến lược giao cắt đường trung bình động ALMA


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

Tổng quan

Chiến lược này sử dụng hai trung bình di chuyển Arnaud Legoux ((ALMA) để đánh giá tín hiệu giao dịch. ALMA là một cải tiến so với trung bình di chuyển truyền thống, có thể làm giảm độ trễ và làm phẳng đường cong. Chiến lược tạo ra tín hiệu mua bằng cách đi qua ALMA chậm trên ALMA nhanh, ALMA chậm dưới ALMA nhanh tạo ra tín hiệu bán, đồng thời kết hợp bộ lọc giao dịch, tạo ra tín hiệu chéo ổn định hơn.

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

Các chỉ số cốt lõi và các quy tắc giao dịch của chiến lược này là:

  1. ALMA nhanh: Thời gian ngắn hơn để bắt được đột phá.

  2. ALMA chậm: số lượng dài hơn, được sử dụng để đánh giá xu hướng lớn

  3. Bộ lọc giao dịch: có hiệu lực khi sử dụng trung bình ngắn hạn trên trung bình dài hạn.

  4. Tạo nhiều tín hiệu: ALMA nhanh trên ALMA chậm và lọc lượng giao dịch có hiệu quả.

  5. Tín hiệu Pinto: ALMA nhanh đi qua ALMA chậm.

  6. Tín hiệu không khí: ALMA nhanh đi qua ALMA chậm và lọc lượng giao dịch có hiệu quả.

  7. Tín hiệu không gian phẳng: ALMA nhanh trên ALMA chậm.

Chiến lược này đơn giản và trực quan, đồng thời kết hợp nhiều chỉ số kỹ thuật như đánh giá xu hướng, bắt đứt phá và xác minh khối lượng giao dịch, tạo thành một hệ thống giao dịch tương đối ổn định. Sự kết hợp của đường trung bình nhanh và chậm có thể đánh giá hiệu quả hướng xu hướng; Việc sử dụng thuật toán ALMA làm giảm tác động của sự trì trệ đối với giao dịch; Việc thêm khối lượng giao dịch đã tránh được nhiều đột phá giả không chắc chắn.

Phân tích lợi thế

Chiến lược này có những ưu điểm chính so với chiến lược giao chéo trung bình truyền thống:

  1. Thuật toán ALMA giúp giảm độ trễ và cải thiện chất lượng tín hiệu.

  2. Bộ lọc số lượng giao hàng có thể tránh thiệt hại do phá vỡ giả.

  3. Đường trung bình nhanh chóng hợp tác để đánh giá xu hướng lớn, tránh giao dịch ngược.

  4. Các quy tắc đơn giản, trực quan, dễ hiểu và dễ thực hiện.

  5. Các tham số đường trung bình có thể được điều chỉnh linh hoạt, áp dụng cho các thị trường khác nhau.

  6. Thiết lập quản lý tài chính hợp lý, có thể kiểm soát tổn thất đơn lẻ.

  7. Có thể cải thiện hiệu quả chiến lược hơn nữa bằng cách tối ưu hóa các tham số đường trung bình.

  8. Nhìn chung, chiến lược này cải thiện tính ổn định và chất lượng tín hiệu so với chiến lược giao dịch truyền thống.

Phân tích rủi ro

Mặc dù chiến lược này có nhiều ưu điểm, nhưng các rủi ro sau đây cần lưu ý:

  1. Chiến lược đường trung bình vốn dễ bị biến động khi thị trường bị chấn động, dẫn đến nhiều lần thua lỗ.

  2. Cài đặt tham số của thuật toán ALMA ảnh hưởng đến hiệu quả của chiến lược.

  3. Hiệu ứng tăng cường khối lượng giao dịch có thể gây hiểu nhầm về tín hiệu giao dịch.

  4. Có một số sự chậm trễ, không thể hoàn toàn tránh được thiệt hại.

  5. Có nguy cơ tối ưu hóa Parametrics quá phù hợp.

  6. Các tín hiệu sẽ bị mất hiệu lực trong trường hợp số lượng giao hàng không bình thường.

  7. Các thuật toán như học máy có thể có kết quả tốt hơn.

  8. Cần chú ý đến tỷ lệ thu hồi thu nhập để tránh đường cong quá nhọn.

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

Với các yếu tố rủi ro trên, chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa tham số đường trung bình ALMA, tăng độ nhạy phản ứng.

  2. Hãy thử các phương pháp khác nhau để tính toán số lượng giao dịch.

  3. Tiến hành chiến lược dừng lỗ và kiểm soát chặt chẽ tổn thất đơn lẻ.

  4. Kết hợp với các chỉ số khác để tạo ra hệ thống tín hiệu giao dịch toàn diện.

  5. Thêm mô-đun học máy để điều chỉnh tín hiệu thông minh hơn.

  6. Các nhà nghiên cứu cho biết, trong một số trường hợp, có thể là do các tác nhân khác gây ra.

  7. Tối ưu hóa chiến lược quản lý vốn, điều chỉnh vị trí theo thị trường khác nhau.

  8. Nghiên cứu chiến lược sức khỏe, ngăn ngừa quá phù hợp.

Tóm tắt

Nhìn chung, chiến lược này đã cải thiện chất lượng và ổn định tín hiệu thông qua thuật toán ALMA và xác minh khối lượng giao dịch so với các chiến lược giao dịch ngang hàng truyền thống. Tuy nhiên, tối ưu hóa chiến lược giao dịch là một quá trình liên tục, vẫn cần chú ý đến rủi ro, tăng cường chiến lược từ nhiều chiều để có thể thích ứng với môi trường thị trường phức tạp hơn.

Mã nguồn chiến lược
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 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/
// © Sarahann999
// Calculations for TP/SL based off: https://kodify.net/tradingview/orders/percentage-profit/
//@version=5
strategy("ALMA Cross", overlay=true)

//User Inputs
src= (close)
long_entry = input(true, title='Long Entry')
short_entry = input(true, title='Short Entry')

//Fast Settings
ALMA1 = input(100, "ALMA Lenghth 1", group= "ALMA Fast Length Settings")
alma_offset = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma1 = ta.alma(src, ALMA1, alma_offset, alma_sigma)

//Slow Settings
ALMA2 = input(120, "ALMA Length 2", group = "ALMA Slow Length Settings")
alma_offset2 = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma2 = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma2 = ta.alma(src, ALMA2, alma_offset2, alma_sigma2)

//Volume
var cumVol = 0.
cumVol += nz(volume)
if barstate.islast and cumVol == 0
    runtime.error("No volume is provided by the data vendor.")
shortlen = input.int(5, minval=1, title = "Short Length", group= "Volume Settings")
longlen = input.int(10, minval=1, title = "Long Length")
short = ta.ema(volume, shortlen)
long = ta.ema(volume, longlen)
osc = 100 * (short - long) / long

//Define Cross Conditions
buy = ta.crossover(Alma1, Alma2)
sell = ta.crossunder(Alma1, Alma2)

//Calculate Take Profit Percentage
longProfitPerc = input.float(title="Long Take Profit", group='Take Profit Percentage',
     minval=0.0, step=0.1, defval=2) / 100
shortProfitPerc = input.float(title="Short Take Profit",
     minval=0.0, step=0.1, defval=2) / 100
     
// Figure out take profit price 1
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Make inputs that set the stop %  1
longStopPerc = input.float(title="Long Stop Loss", group='Stop Percentage',
     minval=0.0, step=0.1, defval=2.5) / 100
shortStopPerc = input.float(title="Short Stop Loss",
     minval=0.0, step=0.1, defval=2.5) / 100

// Figure Out Stop Price
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortStopPerc)

//Define Conditions
buySignal = buy and osc > 0
     and strategy.position_size == 0

//sellSignal 
sellSignal = sell and osc > 0
     and strategy.position_size == 0

// Submit entry orders
if buySignal and long_entry
    strategy.entry(id="Long", direction=strategy.long, alert_message="Enter Long")
    alert(message="BUY Trade Entry Alert", freq=alert.freq_once_per_bar)
    
if sellSignal and short_entry
    strategy.entry(id="Short", direction=strategy.short, alert_message="Enter Short")
    alert(message="SELL Trade Entry Alert", freq=alert.freq_once_per_bar)
    
// Submit exit orders based on take profit price
if (strategy.position_size > 0)
    strategy.exit(id="Long TP/SL", limit=longExitPrice, stop=longStopPrice, alert_message="Long Exit 1 at {{close}}")
if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", limit=shortExitPrice, stop=shortStopPrice, alert_message="Short Exit 1 at {{close}}")

//Draw
plot(Alma1,"Alma Fast", color=color.purple, style=plot.style_circles)
plot(Alma2,"Alma Slow", color=#acb5c2, style=plot.style_circles)