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

Chiến lược chéo MA

Tác giả:ChaoZhang, Ngày: 2024-06-03 11:25:43
Tags:SMAMA

img

Tổng quan

Bài viết này giới thiệu một chiến lược giao dịch định lượng dựa trên nguyên tắc chéo trung bình động. Chiến lược xác định hướng dài / ngắn bằng cách so sánh giá với trung bình động, và đặt mức lợi nhuận và dừng lỗ để kiểm soát rủi ro. Mã chiến lược được viết bằng Pine Script và tích hợp với API nền tảng giao dịch Dhan, cho phép giao dịch tự động các tín hiệu chiến lược.

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

Cốt lõi của chiến lược này là đường trung bình động. Nó tính toán đường trung bình động đơn giản của giá đóng trong một khoảng thời gian nhất định như cơ sở để đánh giá xu hướng. Khi giá vượt trên đường trung bình động, nó tạo ra tín hiệu dài, và khi vượt dưới, nó tạo ra tín hiệu ngắn. Chức năng exrem được sử dụng để lọc các tín hiệu trùng lặp liên tục và cải thiện chất lượng tín hiệu. Chiến lược đặt mức lợi nhuận và dừng lỗ tương ứng dựa trên hướng vị trí hiện tại và mối quan hệ giữa giá và đường trung bình động, kiểm soát rủi ro và lợi nhuận của mỗi giao dịch.

Ưu điểm chiến lược

Moving average crossover là một phương pháp theo dõi xu hướng đơn giản và dễ sử dụng có thể nắm bắt hiệu quả các xu hướng thị trường trung hạn đến dài hạn. Với các thiết lập tham số hợp lý, chiến lược có thể đạt được lợi nhuận ổn định trong các thị trường xu hướng. Việc thiết lập lấy lợi nhuận và dừng lỗ giúp kiểm soát rút tiền và cải thiện tỷ lệ rủi ro-lợi nhuận. Logic mã chiến lược rõ ràng, sử dụng mô-đun hóa chức năng, có khả năng đọc và mở rộng mạnh mẽ. Ngoài ra, chiến lược tích hợp API nền tảng Dhan để nhận ra việc thực thi lệnh tự động, cải thiện hiệu quả thực thi.

Rủi ro chiến lược

Đường trung bình động vốn là các chỉ số chậm trễ. Trong các thời điểm chuyển đổi của thị trường, các tín hiệu có thể bị trì hoãn, dẫn đến cơ hội giao dịch tối ưu bị bỏ hoặc tín hiệu sai. Cài đặt tham số không chính xác sẽ ảnh hưởng đến hiệu suất chiến lược và cần được tối ưu hóa theo các đặc điểm và khung thời gian thị trường khác nhau.

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

  1. Nhiều trung bình động của các khung thời gian khác nhau có thể được kết hợp để cải thiện độ tin cậy tín hiệu, chẳng hạn như chéo trung bình động gấp đôi hoặc gấp ba lần.
  2. Việc thiết lập lợi nhuận và dừng lỗ có thể được tối ưu hóa hơn nữa, chẳng hạn như điều chỉnh năng động dựa trên các chỉ số biến động như ATR hoặc áp dụng các chiến lược dừng lại.
  3. Có thể thêm các điều kiện lọc, chẳng hạn như đột phá giá của các mức hỗ trợ / kháng cự quan trọng, thay đổi khối lượng giao dịch, v.v., để cải thiện chất lượng tín hiệu.
  4. Trong ứng dụng thực tế, cần phải tiến hành kiểm tra và xác nhận đúng về chiến lược và quản lý các quỹ để kiểm soát rủi ro thương mại duy nhất và sử dụng tổng thể.

Tóm lại

Chiến lược chuyển động trung bình là một chiến lược giao dịch định lượng đơn giản và thực tế có thể kiếm lợi nhuận trong các thị trường xu hướng thông qua theo dõi xu hướng và kiểm soát dừng lỗ. Tuy nhiên, chính chiến lược có một số hạn chế nhất định và cần được tối ưu hóa và cải thiện theo đặc điểm thị trường và sở thích rủi ro. Trong ứng dụng thực tế, cũng cần phải chú ý đến việc thực hiện kỷ luật nghiêm ngặt và kiểm soát rủi ro đúng cách.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © syam-mohan-vs @ T7 - wwww.t7wealth.com www.t7trade.com
//This is an educational code done to describe the fundemantals of pine scritpting language and integration with Indian discount broker Dhan. This strategy is not tested or recommended for live trading. 

//@version=5
strategy("Pine & Dhan - Moving Average Crossover Strategy", overlay=true)

//Remove excess signals
exrem(condition1, condition2) =>
    temp = false
    temp := na(temp[1]) ? false : not temp[1] and condition1 ? true : temp[1] and condition2 ? false : temp[1]
    ta.change(temp) == true ? true : false

// Define MA period
ma_period = input(20, title = "MA Length")

// Define target and stop loss levels
target_percentage = input.float(title="Target Profit (%)", defval=2.0)
stop_loss_percentage = input.float(title="Stop Loss (%)", defval=1.0)

// Calculate the MA
ma = ta.sma(close, ma_period)

// Entry conditions
long_entry = close >= ma
short_entry = close < ma

// Calculate target and stop loss prices
target_price = long_entry ? strategy.position_avg_price + (close * (target_percentage / 100)) : strategy.position_avg_price - (close * (target_percentage / 100)) 
stop_loss_price = short_entry ? strategy.position_avg_price + (close * (stop_loss_percentage/ 100)) : strategy.position_avg_price - (close * (stop_loss_percentage / 100)) 

long_entry := exrem(long_entry,short_entry)
short_entry := exrem(short_entry,long_entry)

// Plot the MA
plot(ma, color=color.blue, linewidth=2, title="MA")

// Plot the entry and exit signals
plotshape(long_entry, style=shape.arrowup, color=color.green, size=size.small,location = location.belowbar)
plotshape(short_entry, style=shape.arrowdown, color=color.red, size=size.small,location = location.abovebar)

//Find absolute value of positon size to exit position properly
size = math.abs(strategy.position_size)

//Replace these four JSON strings with those generated from user Dhan account
long_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"I","sort_order":"1","price":"0"}]}'
long_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'

// Submit orders based on signals
if(strategy.position_size == 0)
    if long_entry 
        strategy.order("Long", strategy.long,alert_message=long_msg)          

    if short_entry
        strategy.order("Short", strategy.short,alert_message=short_msg)        
    
if(strategy.position_size > 0)
    
    if(short_entry)
        strategy.order("Short", strategy.short, qty = size, alert_message=short_msg)     
    else
        strategy.exit("Long Exit", from_entry="Long", qty = size, stop=stop_loss_price, limit= target_price, alert_message=long_exit_msg)

if(strategy.position_size < 0)
    
    if(long_entry)
        strategy.order("Long", strategy.long, qty = size, alert_message=long_msg)    
    else           
        strategy.exit("Short Exit", from_entry="Short", qty = size, stop=stop_loss_price, limit= target_price, alert_message=short_exit_msg) 



Có liên quan

Thêm nữa