Chiến lược xu hướng thấp-cao

Tác giả:ChaoZhang, Ngày: 2023-11-23 11:03:18
Tags:

img

Tổng quan

Chiến lược này được thiết kế dựa trên nguyên tắc thị trường mua thấp và bán cao. Nó theo dõi giá cao nhất và thấp nhất trong một khoảng thời gian nhất định, thiết lập một vị trí dài khi giá phá vỡ mức giá thấp nhất và đóng vị trí khi giá giảm xuống dưới mức giá cao nhất hoặc điều kiện lấy lợi nhuận được đáp ứng. Đồng thời, chiến lược này thêm một bộ lọc xu hướng tùy chọn chỉ cho phép mua khi giá đang trong xu hướng tăng.

Chiến lược logic

Tính toán giá cao nhất và thấp nhất

  • Giá thấp nhất (những tiêu chí thấp nhất): Gọi hàm ta.lowest để tính giá thấp nhất trong khoảng thời gian xem lại được thiết lập bởi người dùng (bên mặc định là 20 thanh) và vẽ đường giá thấp nhất.

  • Giá cao nhất (những tiêu chí cao nhất): Gọi hàm ta.highest để tính giá cao nhất trong khoảng thời gian xem lại được thiết lập bởi người dùng (bên mặc định là 10 thanh) và vẽ đường giá cao nhất.

Tín hiệu nhập cảnh

Khi giá hiện tại phá vỡ đường giá thấp nhất, tín hiệu mua được kích hoạt để thiết lập một vị trí mua.

Tín hiệu ra

Hai phương thức thoát được cung cấp cho tùy chọn:

  1. Lợi nhuận cố định: Đóng vị trí để kiếm lợi nhuận khi giá đạt mức lợi nhuận được đặt trước (ví dụ 8% trên giá nhập cảnh).

  2. Phân loại giá cao nhất: Đóng vị trí để cắt giảm lỗ khi giá giảm xuống dưới đường giá cao nhất, đánh giá một sự đảo ngược xu hướng.

Bộ lọc xu hướng

Thêm một đường EMA để xác định hướng xu hướng. Chỉ cho phép mua khi giá trên đường EMA (một xu hướng tăng). Bộ lọc này có thể được bật hoặc tắt.

Phân tích lợi thế

  • Nhận chiến lược cổ điển của mua thấp và bán cao, phù hợp với các nguyên tắc cơ bản của thị trường.

  • Thêm phán đoán xu hướng để tránh mở thường xuyên trong thời gian biến động giá.

  • Cung cấp hai lựa chọn thoát để theo đuổi lợi nhuận cao hoặc giảm lỗ.

  • Các tham số có thể tùy chỉnh thích nghi với nhiều môi trường thị trường hơn.

  • Không gian rất lớn để tối ưu hóa chiến lược thông qua điều chỉnh tham số, thiết kế bộ lọc vv

Phân tích rủi ro

  • Mức lợi nhuận cố định không được điều chỉnh dựa trên sự chuyển động thực tế của thị trường, dẫn đến lợi nhuận sớm hoặc mục tiêu lợi nhuận không đủ.

  • Bán ở mức giá cao nhất có thể tạo ra tổn thất lớn, không thể kiểm soát hiệu quả tổn thất.

  • Phân tích xu hướng của EMA chỉ nhìn lại một khoảng thời gian nhất định, có thể tụt lại phía sau sự thay đổi xu hướng thực tế.

  • Kết quả thử nghiệm không thể đại diện cho tương lai.

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

  • Thêm các phương pháp lấy lợi nhuận như dừng lại, thoát một phần v.v. để điều chỉnh năng động mức lợi nhuận.

  • Tối ưu hóa các tín hiệu thoát, ví dụ như lối ra một phần, thêm các chỉ số khác.

  • Cải thiện đánh giá xu hướng bằng cách kết hợp nhiều chỉ số hoặc học máy hơn.

  • Tối ưu hóa các tham số bằng cách kiểm tra hậu quả rộng rãi hơn để tìm ra các tập hợp tối ưu.

  • Thêm các phương pháp dừng lỗ để kiểm soát lỗ tốt hơn.

Tóm lại

Chiến lược này thường áp dụng nguyên tắc bán cao thấp cổ điển và có thể hoạt động tốt trong một số điều kiện nhất định. Nhưng vẫn còn chỗ để cải thiện thông qua điều chỉnh tham số, tối ưu hóa thoát, cơ chế dừng lỗ vv. Bài viết này cung cấp một phân tích chuyên sâu về logic, ưu, nhược điểm và hướng tối ưu hóa của chiến lược, nhằm chia sẻ ý tưởng chiến lược cũng như nhắc nhở các nhà đầu tư về rủi ro và giao dịch thận trọng với các chiến lược định lượng.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-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/
// @version=5
// Author = TradeAutomation


strategy(title="Low-High-Trend Strategy", shorttitle="Low-High-Trend Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_order, commission_value=1, slippage=3, initial_capital = 25000, margin_long=50, margin_short=50, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Backtest Date Range Inputs // 
StartTime = input(defval=timestamp('01 Jan 2000 05:00 +0000'), title='Start Time')
EndTime = input(defval=timestamp('01 Jan 2099 00:00 +0000'), title='End Time')
InDateRange = true

// Strategy Calculations //
lowcriteria = ta.lowest(close, input(20, "Lowest Price Lookback", tooltip="The strategy will BUY when the price crosses over the lowest it has been in the last X amount of bars"))[1]
highcriteria = ta.highest(close, input(10, "Highest Price Lookback", tooltip="If Take-Profit is not checked, the strategy will SELL when the price crosses under the highest it has been in the last X amount of bars"))[1]
plot(highcriteria, color=color.green)
plot(lowcriteria, color=color.red)

// Take Profit //
TakeProfitInput = input(true, "Sell with Take-Profit % intead of highest price cross?")
TakeProfit = ta.crossover(close,strategy.position_avg_price*(1+(.01*input.float(8, title="Take Profit %", step=.25))))

// Operational Functions //
TrendFilterInput = input(true, "Only buy when price is above EMA trend?")
ema = ta.ema(close, input(200, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)

// Entry & Exit Functions//
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria) and TrendisLong)
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria))
if (InDateRange and TakeProfitInput==true)
    strategy.close("Long", when = TakeProfit)
if (InDateRange and TakeProfitInput==false)
    strategy.close("Long", when = ta.crossunder(close, highcriteria))
if (not InDateRange)
    strategy.close_all()
    

Thêm nữa