Bài viết này giới thiệu một chiến lược giao dịch dựa trên trung bình động động ba giai đoạn của Larry Williams. Chiến lược sử dụng hai trung bình động theo cấp số nhân (EMA) để nắm bắt xu hướng giá và tạo ra tín hiệu giao dịch khi giá đóng của ba cây nến liên tiếp phá vỡ EMA. Các thông số chiến lược có thể điều chỉnh và phù hợp với các thị trường và khung thời gian khác nhau.
Chiến lược giao dịch trung bình động ba giai đoạn của Larry Williams là một chiến lược theo xu hướng dựa trên EMA kép và hướng của nến liên tiếp. Với tối ưu hóa tham số, nó có thể thích nghi với các thị trường khác nhau. Tuy nhiên, chính chiến lược tương đối đơn giản, hoạt động kém trong các thị trường hỗn loạn và thiếu các biện pháp kiểm soát rủi ro, đòi hỏi tối ưu hóa và cải thiện hơn nữa.
/*backtest start: 2023-05-05 00:00:00 end: 2024-05-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Larry Williams 3 Periodos Editável de MarcosJr", overlay=true, process_orders_on_close=true) // Parametrização do período do EMA emaPeriodHighs = input.int(title="Highs Period", defval=3, minval=1, maxval=9999) emaPeriodLows = input.int(title="Lows Period", defval=3, minval=1, maxval=9999) // Parametrização da data de início e fim do período a ser coletado startYear = input.int(title="Start Year", defval=2020) startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12) startDay = input.int(title="Start Day", defval=1, minval=1, maxval=31) endYear = input.int(title="End Year", defval=2020) endMonth = input.int(title="End Month", defval=12, minval=1, maxval=12) endDay = input.int(title="End Day", defval=31, minval=1, maxval=31) // Convertendo data de início e fim para timestamp startDate = timestamp(startYear, startMonth, startDay, 00, 00) endDate = timestamp(endYear, endMonth, endDay, 23, 59) // EMA emaH = ta.ema(high, emaPeriodHighs) emaL = ta.ema(low, emaPeriodLows) // PLOT: // Desenha as linhas EMA no gráfico plot(emaH, color=color.green, linewidth=2) plot(emaL, color=color.red, linewidth=2) // Condições inDateRange = true // Verifica se houve mais de três candles consecutivos do mesmo sentido checkThreeConsecutiveCandles = (close[0] > close[1] and close[1] > close[2] and close[2] > close[3]) or (close[0] < close[1] and close[1] < close[2] and close[2] < close[3]) if(close < emaL and inDateRange and checkThreeConsecutiveCandles and barstate.isconfirmed) strategy.entry("Long", strategy.long, comment="Long", when=strategy.position_size == 0) if(close > emaH and inDateRange and checkThreeConsecutiveCandles and barstate.isconfirmed) strategy.close("Long", comment="Close Long") // Fechar a operação no fechamento do pregão if(strategy.position_size > 0 and na(time_close[0])) strategy.close("Long", comment="Close Long")