Chiến lược đẩy lùi động lực

Tác giả:ChaoZhang, Ngày: 2023-12-12 16:34:52
Tags:

img

Tổng quan

Chiến lược Pullback Động lực xác định các chỉ số RSI cực đoan như là tín hiệu động lực cho một chiến lược dài / ngắn. Không giống như hầu hết các chiến lược RSI, nó tìm cách mua hoặc bán pullback đầu tiên theo hướng đọc RSI cực đoan.

Nó đi dài / ngắn trên pullback đầu tiên đến EMA 5 giai đoạn (tối thấp) / EMA 5 giai đoạn (cao) và thoát ra ở mức cao / thấp 12 thanh lăn lăn. Tính năng cao / thấp lăn lăn có nghĩa là mục tiêu lợi nhuận sẽ bắt đầu giảm với mỗi thanh mới nếu giá đi vào hợp nhất kéo dài. Các giao dịch tốt nhất có xu hướng hoạt động trong vòng 2-6 thanh.

Giá dừng lỗ được đề xuất là X ATR (có thể điều chỉnh các đầu vào) từ giá nhập cảnh.

Chiến lược khá mạnh mẽ trên các khung thời gian và thị trường với tỷ lệ thắng 60% -70% và các giao dịch thắng lớn hơn.

Chiến lược logic

  1. Tính toán chỉ số RSI 6 giai đoạn và xác định các giá trị trên 90 (đã mua quá mức) và dưới 10 (đã bán quá mức).

  2. Khi chỉ số RSI bị mua quá mức, hãy mua dài trên một pullback đến EMA 5 giai đoạn (mức thấp) trong vòng 6 thanh.

  3. Khi chỉ số RSI được bán quá mức, hãy bán ngắn trên pullback đến EMA 5 giai đoạn (cao) trong vòng 6 thanh.

  4. Chiến lược thoát là một lợi nhuận chuyển động, với mục tiêu ban đầu là mức cao nhất / thấp nhất trong 12 thanh cuối cùng, cập nhật trên mỗi thanh mới cho một bước thoát lăn.

  5. Giá dừng lỗ là X ATR từ giá nhập cảnh (có thể tùy chỉnh).

Phân tích lợi thế

Chiến lược kết hợp các điểm cực của chỉ số RSI với các tín hiệu động lực và các mục rút lui để nắm bắt các điểm đảo ngược tiềm năng trong xu hướng, với tỷ lệ thắng cao.

Cơ chế chuyển đổi lợi nhuận khóa trong lợi nhuận một phần theo hành động giá thực tế, giảm rút tiền.

Việc dừng ATR giúp kiểm soát hiệu quả lỗ giao dịch đơn.

Độ bền tốt để áp dụng trên các thị trường và các bộ tham số khác nhau để dễ dàng tái tạo giao dịch thực tế.

Phân tích rủi ro

Một stop loss quá rộng nếu ATR multiplier được đặt quá cao, làm tăng lỗ cho mỗi giao dịch.

Việc chuyển cơ chế lấy lợi nhuận có thể làm giảm lợi nhuận nếu sự củng cố kéo dài xảy ra.

Các giao dịch bị thiếu nếu pullback kéo dài vượt quá 6 thanh.

Khả năng trượt hoặc phá vỡ sai nếu các sự kiện tin tức lớn xảy ra.

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

Thử nghiệm rút ngắn số thanh nhập từ 6 đến 4 để cải thiện tỷ lệ nhập.

Kiểm tra tăng nhân ATR để mất kiểm soát thêm cho mỗi giao dịch.

Bao gồm các chỉ số khối lượng để tránh tổn thất do chênh lệch trong hợp nhất.

Nhập trong thời gian nghỉ ngơi 60 phút ở giữa để lọc tiếng ồn.

Kết luận

Chiến lược Pullback Momentum là một cách tiếp cận đảo ngược trung bình ngắn hạn rất thực tế, kết hợp các yếu tố xu hướng, đảo ngược và quản lý rủi ro để giao dịch thực tế dễ dàng trong khi vẫn mang tiềm năng tạo ra alpha.


/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 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/
// © Marcns_

//@version=5
strategy("M0PB", commission_value = 0.0004, slippage = 1, initial_capital=30000)
// commision is equal to approx $3.8 per round trip which is accurate for ES1! futures and slippage per trade is conservatively 1 tick in and 1 tick out. 

// *momentum pull back* //

// long / short strategy that identifies extreme readings on the rsi as a *momentum signal*
//Strategy buys/ sells a pullback to the 5ema(low)/ 5ema(high) and exits at rolling 12 bar high/ low. The rolling high/ low feature means that 
//if price enters into a pronlonged consolidation the profit target will begin to reduce with each new bar. The best trades tend to work within 2-6 bars
// hard stop is X atr's from postion average price. This can be adjusted in user inputs.
// built for use on 5 min & 1min intervals on: FX, Indexes, Crypto
// there is a lot of slack left in entries and exits but the overall strategy is fairly robust across timeframes and markets and has between 60%-70% winrate with larger winners.
// signals that occur from economic news volatility are best avoided.  


// define rsi
r = ta.rsi(close,6) 

// find rsi > 90
b = 0.0

if r >= 90
    b := 1.0
else
    na

// find rsi < 10
s = 0.0

if r <= 10
    s := -1.0
else
    na

// plot rsi extreme as painted background color
bgcolor(b ? color.rgb(255, 82, 82, 49): na)
bgcolor(s? color.rgb(76, 175, 79, 51): na)



// exponential moving averages for entries. note that source is high and low (normally close is def input) this creates entry bands
//entry short price using high as a source ta.ema(high,5)
es = ta.ema(high,5)

//entry long price using low as a source ta.ema(low,5)
el = ta.ema(low,5)


// long pullback entry trigger: last period above ema and current low below target ema entry 
let = 0.0

if low[1] > el[1] and low <= el
    let := 1.0
else
    na
//short entry trigger ""
set = 0.0

if high[1] < es[1] and high >= es
    set := -1.0
else
    na

// create signal "trade_l" if RSI > 90 and price pulls back to 5ema(low) within 6 bars
trade_l = 0.0

if ta.barssince(b == 1.0) < 6 and let == 1.0
    trade_l := 1.0
else
    na

plot(trade_l, "l_entry", color.green)

//create short signal "trade_s" if rsi < 10 and prices pullback to 5em(high) wihthin 6 bars
trade_s = 0.0

if ta.barssince(s == -1.0) < 6 and set == -1.0
    trade_s := -1.0
else
    na

plot(trade_s, "s_entry", color.purple)

// define price at time of trade_l signal and input value into trade_p to use for stop parems later
trade_p = strategy.position_avg_price

//indentify previous 12 bar high as part of long exit strat
// this creates a rolling 12 bar high target... a quick move back up will exit at previous swing high but if a consolidation occurs system will exit on a new 12 bar high which may be below prev local high
ph = ta.highest(12)

// inverse of above for short exit strat - previous lowest low of 12 bars as exit (rolling)
pl = ta.lowest(12)


// 1.5 atr stop below entry price (trade_p defined earlier) as part of exit strat
atr_inp = input.float(2.75, "atr stop", minval = 0.1, maxval = 6.0)

atr = ta.atr(10)

stop_l = trade_p - (atr* atr_inp)
stop_s = trade_p + (atr* atr_inp)

//strat entry long

strategy.entry("EL", strategy.long, 2, when = trade_l == 1.0)

//strat entry short

strategy.entry("ES", strategy.short, 2, when = trade_s == -1.0)   
    
//strat long exit

if strategy.position_size == 2
    strategy.exit(id = "ph", from_entry = "EL", qty = 2, limit = ph)
    if strategy.position_size == 2
        strategy.close_all(when = low[1] > stop_l[1] and low <= stop_l)

// strat short exit

if strategy.position_size == -2
    strategy.exit(id = "pl", from_entry = "ES", qty = 2, limit =pl)
    if strategy.position_size == -2
        strategy.close_all(when = high[1] < stop_s[1] and high >= stop_s)




// code below to trail remaining 50% of position //

 //if strategy.position_size == 1 
        //strategy.exit(id ="trail", from_entry = "EL", qty = 1, stop = el)
        


Thêm nữa