Chiến lược giao dịch xu hướng Ruda Momentum

Tác giả:ChaoZhang, Ngày: 2024-04-03 15:16:47
Tags:EMAOBV

img

Tổng quan

Chiến lược giao dịch xu hướng Ruda Momentum là một chiến lược giao dịch định lượng dựa trên các chỉ số động lực và xu hướng. Chiến lược sử dụng các chỉ số như OBV (On Balance Volume), EMA (Exponential Moving Average) và tỷ lệ thân nến để xác định tín hiệu mua và bán. Khi EMA ngắn hạn vượt qua EMA dài hạn, OBV đạt mức cao mới và tỷ lệ thân nến lớn hơn ngưỡng đặt, chiến lược mua ở giá mở cửa ngày hôm sau; khi giá giảm xuống dưới giá dừng lỗ hoặc giá đóng cửa giảm xuống dưới EMA ngắn hạn, chiến lược đóng vị trí.

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

  1. Tính toán hai đường EMA với các thông số 5 cho EMA ngắn hạn và 21 cho EMA dài hạn. Khi EMA ngắn hạn vượt qua EMA dài hạn, xu hướng được coi là tăng và ngược lại.
  2. Tính toán chỉ số OBV. Khi OBV đạt mức cao nhất trong 10 ngày, động lực tăng được coi là mạnh.
  3. Tính toán tỷ lệ thân cây nến. Khi tỷ lệ thân lớn hơn ngưỡng đặt (bên mặc định 50%), xu hướng được coi là đã được thiết lập.
  4. Khi xu hướng tăng, động lực tăng mạnh, và xu hướng được thiết lập, chiến lược mua ở giá mở ngày hôm sau với giá dừng lỗ được đặt ở mức tối thiểu của ngày hiện tại và giá mở trừ 1%.
  5. Khi giá giảm xuống dưới giá dừng lỗ hoặc giá đóng cửa giảm xuống dưới đường EMA ngắn hạn, chiến lược sẽ đóng vị trí.

Phân tích lợi thế

  1. Bằng cách kết hợp các chỉ số xu hướng và động lực, chiến lược có thể nắm bắt các công cụ mạnh mẽ.
  2. Sử dụng giá mở cửa ngày hôm sau để mua và dừng lỗ động có thể tránh một số sự phá vỡ sai.
  3. Các điều kiện dừng lỗ và lấy lợi nhuận rõ ràng và rủi ro có thể kiểm soát được.

Phân tích rủi ro

  1. Các chỉ số xu hướng và động lực có sự chậm trễ, có thể dẫn đến mua ở mức giá cao và dừng lỗ sớm.
  2. Các thông số cố định không có khả năng thích nghi và hiệu suất có thể thay đổi đáng kể trong các điều kiện thị trường khác nhau.
  3. Kiểm tra hậu quả trên thị trường và công cụ duy nhất đòi hỏi phải xác minh thêm tính ổn định và khả năng áp dụng của chiến lược.

Hướng tối ưu hóa

  1. Tối ưu hóa các thông số của các chỉ số xu hướng và động lực để cải thiện độ nhạy và hiệu quả của các chỉ số.
  2. Đưa ra đánh giá trạng thái thị trường và điều chỉnh các tham số theo động theo đặc điểm thị trường hiện tại.
  3. Mở rộng phạm vi backtesting, tăng thử nghiệm trên các thị trường và công cụ khác nhau để cải thiện tính vững chắc của chiến lược.
  4. Xem xét việc đưa ra các mô-đun quản lý vị trí và kiểm soát rủi ro để cải thiện tỷ lệ rủi ro-lợi nhuận.

Tóm lại

Chiến lược giao dịch xu hướng Ruda Momentum là một chiến lược giao dịch định lượng đơn giản và dễ sử dụng nắm bắt các công cụ mạnh mẽ và cơ hội xu hướng bằng cách kết hợp các chỉ số xu hướng và động lực. Tuy nhiên, chiến lược cũng có một số hạn chế nhất định, chẳng hạn như độ trễ của chỉ số và các tham số cố định. Trong tương lai, chiến lược có thể được tối ưu hóa và cải thiện bằng cách tối ưu hóa các tham số chỉ số, giới thiệu các cơ chế thích nghi, mở rộng phạm vi kiểm tra lại và tăng cường quản lý rủi ro để tăng cường độ bền và lợi nhuận của chiến lược.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © lhcbenac

//@version=5
strategy('Ruda_Strategy', overlay=true , initial_capital=5000 , pyramiding = 3, commission_type =  strategy.commission.cash_per_contract , commission_value =  1 )

//
// 
////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                    Otimizações                     //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
//
// 

////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                 Codigo Operacional                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
//
//
// Indica situação de Compra ou Venda

// Condição True or False 
YEAR_BT= input.int(1,title="Nº Anos ", group = "Backtest")

INPUT_ME1 = input.int(5,title="Momentum ", group = "RUDA")
INPUT_ME2 = input.int(21,title="Trend ", group = "RUDA")
INPUT_CORPO = input.int(50,title="CORPO ", group = "RUDA")/100



v_obv = ta.obv
v_med1 = ta.ema(close , INPUT_ME1)
v_med2 = ta.ema(close , INPUT_ME2)
valid_1 = v_med1 > v_med2 
valid_2 = v_obv >= ta.highest(v_obv[1], 10)
valid_3 = math.abs(close - open) / (high-low) > INPUT_CORPO
plot(v_med1)
plot(v_med2)

compra = valid_1 and valid_2 and  strategy.position_size == 0 and valid_3


var float v_minima_ref = na

dataInicio = timestamp(year(timenow) - YEAR_BT, month(timenow), dayofmonth(timenow), 00, 00)

// Variáveis globais
var float preco_entrada = na
var float preco_stop = na

if compra and time >= dataInicio and ta.change(time("D")) != 0 and ta.change(compra)  
    v_minima_ref := low
    preco_entrada := open
    preco_stop := math.min(low, open - 0.01 * open)
    strategy.entry("Compra", strategy.long , stop = preco_stop )
    if (not na(preco_entrada) and not na(preco_stop))
        label.new(x=bar_index, y= low * 0.9, text= "Dia: " + str.tostring(dayofmonth) + "\nPreço de Entrada: " + str.tostring(preco_entrada) + "\nPreço de Stop Loss: " + str.tostring(preco_stop), style=label.style_label_up, color=color.green)

    
    
// Lógica de saída
// Saída no stop loss
if (not na(preco_stop) and low < preco_stop and ta.change(low) < 0)
    strategy.close("Compra", comment="Saída no Stop")

// Saída no lucro
if (close < v_med1 and ta.change(close) < 0)
    strategy.close("Compra", comment="Saída na Media")

venda =( (not na(preco_stop) and low < preco_stop and ta.change(low) < 0) or (close < v_med1 and ta.change(close) < 0) ) and strategy.position_size > 0
codiff = compra ? 1 : venda ? -1 : na 
plotarrow(codiff, colorup=#00c3ff, colordown=#ff0062,title="Compra", maxheight=20, offset=0)






Có liên quan

Thêm nữa