Chiến lược giao dịch giữa thời gian đảo ngược theo mùa

Tác giả:ChaoZhang, Ngày: 2024-01-25 14:07:35
Tags:

img

Tổng quan

Chiến lược này là một chiến lược giao dịch đảo ngược dựa trên tác động theo mùa. Nó thiết lập các vị trí trong những tháng vào cụ thể và đóng các vị trí trong những tháng ra để nắm bắt sự đảo ngược giá do tác động theo mùa.

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

Ví dụ, nếu tháng 10 được chọn là tháng nhập và tháng 1 được chọn là tháng ra, các vị trí mới sẽ được thiết lập mỗi tháng 10 theo hướng dài hoặc ngắn nếu không có vị trí hiện có. Và các vị trí hiện có sẽ được đóng mỗi tháng 1.

Cần lưu ý rằng chiến lược mặc định để rủi ro 25% của tài khoản trên mỗi giao dịch và tính phí 0.5% hoa hồng cho mỗi giao dịch.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là lợi nhuận từ sự đảo ngược thị trường do ảnh hưởng theo mùa. Nhiều thị trường hàng hóa và tài chính có biến động giá theo mùa đáng kể. Nếu lựa chọn thời gian vào và ra thích hợp, các cơ hội đảo ngược do ảnh hưởng theo mùa có thể được nắm bắt hiệu quả.

Phân tích rủi ro

Mặc dù chiến lược này có hiệu quả, nhưng vẫn có một số rủi ro. Thứ nhất, việc chọn thời gian vào và ra không phù hợp có thể không nắm bắt được sự đảo ngược giá, dẫn đến tổn thất. Thứ hai, những thay đổi trong điều kiện thị trường cũng có thể dẫn đến hiệu ứng theo mùa yếu hơn. Cuối cùng, logic dừng lỗ mặc định là yếu và không thể kiểm soát hiệu quả các lỗ giao dịch duy nhất.

Hướng dẫn tối ưu hóa

Có nhiều cơ hội để tối ưu hóa chiến lược này. Thứ nhất, logic stop loss có thể được giới thiệu để thiết lập phạm vi stop loss hợp lý. Thứ hai, có thể thử nghiệm nhiều sự kết hợp khác nhau của bước vào và bước ra để tìm các thông số tối ưu. Ngoài ra, có thể xem xét nhiều yếu tố hơn để đánh giá điều kiện thị trường và tránh giao dịch trong môi trường không thuận lợi. Cuối cùng, giới thiệu thuật toán cân bằng theo hàm số để điều chỉnh kích thước vị trí, tăng kích thước vị trí khi kiếm lợi nhuận và giảm kích thước vị trí khi thua lỗ.

Thông qua các tối ưu hóa trên, sự ổn định của chiến lược có thể được cải thiện hơn nữa và khả năng theo dõi của chiến lược có thể được tăng cường.

Tóm lại

Nhìn chung, chiến lược giao dịch giữa thời gian đảo ngược theo mùa này rất thực tế. Bằng cách chọn các tháng vào và ra thích hợp, nó có hiệu quả nắm bắt sự đảo ngược giá do ảnh hưởng theo mùa để kiếm lợi nhuận. Đồng thời, chiến lược này cũng rất đơn giản và dễ hiểu và thực hiện, phù hợp với người mới bắt đầu giao dịch định lượng. Tất nhiên, các nhà giao dịch cũng cần nhận thức được những rủi ro thị trường nhất định và liên tục tối ưu hóa các chiến lược theo cách có mục tiêu để thích nghi với những thay đổi trong điều kiện thị trường.


/*backtest
start: 2023-01-24 00:00:00
end: 2024-01-24 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/
// © EmpiricalFX

//@version=4
strategy("Seasonality Benchmark ","Season",overlay=false,default_qty_type=strategy.percent_of_equity,
     default_qty_value=25,initial_capital=100000,currency="USD",
     commission_type=strategy.commission.percent,commission_value=0.5)
input_entry_direction = input("Long","Position Type",options=["Long","Short"])
input_entry_month = input("Oct","Entry Month",options=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"])
input_exit_month = input("Jan","Entry Month",options=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"])

//Convert three character month string to integer
month_str_to_int(m)=>
    ret = m == "Jan" ? 1 :
          m == "Feb" ? 2 :
          m == "Mar" ? 3 :
          m == "Apr" ? 4 :
          m == "May" ? 5 :
          m == "Jun" ? 6 :
          m == "Jul" ? 7 :
          m == "Aug" ? 8 :
          m == "Sep" ? 9 :
          m == "Oct" ? 10 :
          m == "Nov" ? 11 :
          m == "Dec" ? 12 : -1
          
is_long = input_entry_direction == "Long" ? true : false
entry = month_str_to_int(input_entry_month)
exit = month_str_to_int(input_exit_month)
var balance = strategy.equity

//Entering a position is conditional on:
    //1. No currently active trades
    //2. Input entry month matches current month
if(strategy.opentrades == 0 and entry == month)
    strategy.entry("Swing",is_long)

//Exiting a position is conditional on:
    //1. Must have open trade
    //2. Input exit month matches current month
if(strategy.opentrades > 0 and exit == month)
    strategy.close("Swing")
    
//Update the balance every time a trade is exited
if(change(strategy.closedtrades)>0)
    balance := strategy.equity
    
plot(strategy.equity,"Equity",color.orange)
plot(balance,"Balance",color.red)

    

Thêm nữa