Up versus Down Close Candles Strategy với EMA filter và Session Timeframes

Tác giả:ChaoZhang, Ngày: 2023-12-27 14:38:28
Tags:

img

1. Tổng quan về chiến lược

Chiến lược này được gọi là Up versus Down Close Candles Strategy with EMA filter and Session Timeframes. Nó đếm số lượng nến đóng gần và đóng gần trong một khoảng thời gian xem lại nhất định để xác định tâm lý thị trường, kết hợp với bộ lọc EMA và giao dịch trong các phiên cụ thể, để xác định tín hiệu dài và ngắn.

2. Chiến lược logic

EMA chỉ số được sử dụng như một bộ lọc, chỉ xem xét dài khi giá > EMA, và ngắn khi giá < EMA. Nó cũng đặt session1 và session2 là các phiên giao dịch.

Logic chi tiết:

Tín hiệu dài được kích hoạt khi: inSession là true (trong các phiên giao dịch) và upCloseCount > downCloseCount (nhiều hơn các nến gần) và close > ema (giá đóng cao hơn EMA) và currentSignal không phải là long (không có vị trí hiện có).

Tín hiệu ngắn sẽ được kích hoạt khi: inSession là true và downCloseCount > upCloseCount (nhiều hơn xuống) và close < ema (giá đóng thấp hơn EMA) và currentSignal không phải là short (không có vị trí hiện có).

3. Phân tích lợi thế

  1. Nhận được tâm lý thị trường và xu hướng bằng cách so sánh lịch sử đóng/tắt nến
  2. Sử dụng bộ lọc EMA để tránh giao dịch trên các thị trường khác nhau
  3. Tránh tiếng ồn trong giờ giao dịch không chính bằng cách thiết lập các phiên
  4. Cân bằng giữa việc theo xu hướng và tần suất giao dịch

4. Phân tích rủi ro

  1. Có thể bị đánh lừa trong thị trường bên cạnh
  2. Các thông số EMA không chính xác có thể gây ra bộ lọc không hiệu quả
  3. Các cơ hội bị bỏ lỡ nếu phiên được thiết lập không phù hợp
  4. Không thể bắt được khoảng trống do sự kiện

Giải pháp:

  1. Tối ưu hóa tham số EMA
  2. Tối ưu hóa các phiên giao dịch
  3. Thêm stop loss dựa trên ATR
  4. Xác định các sự kiện, tránh các khoảng trống

5. Các hướng tối ưu hóa

  1. Tối ưu hóa các phiên giao dịch
  2. Tối ưu hóa các thông số EMA
  3. Thêm lỗ dừng dựa trên ATR
  4. Xác định các sự kiện, tránh các khoảng trống
  5. Kết hợp với các chỉ số khác để lọc tốt hơn
  6. Kiểm tra và điều chỉnh trên các sản phẩm

6. Tóm lại

Chiến lược này xác định các tín hiệu xu hướng bằng cách so sánh các nến gần và gần và sử dụng bộ lọc EMA, trong các phiên giao dịch đã đặt trước. Nó có một số hiệu ứng theo xu hướng nhưng cũng có rủi ro của các tín hiệu sai. Cải thiện bằng cách tối ưu hóa các thông số, thêm stop loss, nâng cao bộ lọc vv. Đánh giá kỹ lưỡng trong backtest.


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Up vs Down Close Candles Strategy with EMA and Session Time Frames", shorttitle="UvD Strat EMA Session", overlay=true)

// User input to define the lookback period, EMA period, and session strings for time frames
int lookback = input(20, title="Lookback Period")
int emaPeriod = input(50, title="EMA Period")
string session1 = input("0900-1200", title="Time Frame 1 Session")
string session2 = input("1300-1600", title="Time Frame 2 Session")

// Calculate the EMA
float ema = ta.ema(close, emaPeriod)

// State variable to track the current signal
var string currentSignal = na

// Counting up-close and down-close candles within the lookback period
int upCloseCount = 0
int downCloseCount = 0

if barstate.isnew
    upCloseCount := 0
    downCloseCount := 0
    for i = 0 to lookback - 1
        if close[i] > close[i + 1]
            upCloseCount += 1
        else if close[i] < close[i + 1]
            downCloseCount += 1

// Define the long (buy) and short (sell) conditions with EMA filter and session time frame
bool inSession = time(timeframe.period, session1) or time(timeframe.period, session2)
bool longCondition = inSession and upCloseCount > downCloseCount and close > ema and currentSignal != "long"
bool shortCondition = inSession and downCloseCount > upCloseCount and close < ema and currentSignal != "short"

// Enter or exit the market based on conditions
if longCondition
    currentSignal := "long"
    strategy.entry("Buy", strategy.long)

if shortCondition
    currentSignal := "short"
    strategy.entry("Sell", strategy.short)

// Exit logic for long and short positions
if currentSignal == "long" and strategy.position_size <= 0
    strategy.close("Sell")

if currentSignal == "short" and strategy.position_size >= 0
    strategy.close("Buy")

plot(ema, color=color.blue, title="EMA")


Thêm nữa