Tài nguyên đang được tải lên... tải...

Chiến lược FX dựa trên sóng fractal và SMMA

Tác giả:ChaoZhang, Ngày: 2023-11-13 16:39:41
Tags:

img

Tổng quan

Chiến lược này kết hợp lý thuyết sóng fractal và SMMA để xác định các cơ hội xu hướng, và sử dụng stop loss và trailing stop thích hợp để kiểm soát rủi ro để tối đa hóa lợi nhuận.

Chiến lược logic

  • Sử dụng SMMA để tính giá trung bình và lọc tiếng ồn thị trường cho hướng xu hướng
  • Xác định các điểm đảo ngược xu hướng bằng cách sử dụng giá cao nhất / thấp nhất trong một số giai đoạn nhất định như sóng fractal
  • Đi ngắn khi sóng giá phá vỡ trên SMMA, đi dài khi phá vỡ dưới
  • Đặt dừng lỗ và dừng kéo theo dựa trên ATR để kiểm soát rủi ro
  • Chỉ giao dịch trong các phiên cụ thể, tránh biến động cuối tuần và trong ngày

Phân tích lợi thế

  • Lý thuyết sóng fractal xác định chính xác các điểm đảo ngược xu hướng, kết hợp với SMMA cho hướng xu hướng
  • Dừng lỗ và ATR trailing stop có hiệu quả hạn chế lỗ cho mỗi giao dịch
  • Chỉ giao dịch trong các phiên thanh khoản tránh trượt quá mức và biến động
  • Theo dõi SAR parabolic nghiêm ngặt để thoát ra khi tín hiệu đảo ngược tối đa hóa lợi nhuận

Phân tích rủi ro

  • Sóng fractal không chính xác có thể gây ra whipsaws trong các giai đoạn không có xu hướng
  • SMMA lag có thể bỏ lỡ các điểm đảo ngược xu hướng lý tưởng
  • Stop Loss quá chặt chẽ có thể được dừng ra dễ dàng, quá lỏng lẻo có thể gây ra tổn thất lớn hơn
  • Lợi nhuận cố định không thể điều chỉnh cho các điều kiện thị trường khác nhau

Giải pháp:

  • Tối ưu hóa các tham số cho thời gian fractal và SMMA
  • Thêm Stochastics để xác nhận tín hiệu đảo ngược
  • Tối ưu hóa năng động dừng lỗ, mục tiêu lợi nhuận

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

  • Tối ưu hóa thời gian fractal và tham số SMMA
  • Thêm chỉ số Stochastics để lọc các đột phá sai
  • Thử nghiệm với lệnh dừng lỗ và lấy lợi nhuận năng động
  • Mở rộng stop loss để tránh bị dừng
  • Tối ưu hóa các tham số cho các sản phẩm và phiên giao dịch khác nhau

Tóm lại

Chiến lược này tích hợp lý thuyết sóng fractal và SMMA để xác định các điểm xu hướng và đảo ngược giao dịch, với việc dừng lỗ và lợi nhuận thích hợp. Nó có thể được cải thiện thêm bằng cách tối ưu hóa các thông số và thêm các chỉ số xác nhận cho sự ổn định và lợi nhuận cao hơn.


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

//@version=4
strategy("FX Strategy Based on Fractals and SMMA", overlay=true)

// パラメータ
SMMAPeriod1 = input(30, title="SMMA Period")
StopLoss1 = input(7, title="Stop Loss %")
TrailingStopCoef1 = input(2.7, title="Trailing Stop Coefficient")
fractalPeriod = input(5, title="Fractal Period")

// SMMAの計算関数
smma(src, length) =>
    var float smma = na
    if na(smma[1])
        smma := sma(src, length)
    else
        smma := (smma[1] * (length - 1) + src) / length
    smma

// フラクタルの近似
highFractal = high[2] > high[1] and high[2] > high[3] and high[2] > high[4] and high[2] > high
lowFractal = low[2] < low[1] and low[2] < low[3] and low[2] < low[4] and low[2] < low

// エントリー条件
longEntrySignal = lowFractal and close[1] < smma(close, SMMAPeriod1)
shortEntrySignal = highFractal and close[1] > smma(close, SMMAPeriod1)

// エントリー実行
if (longEntrySignal)
    strategy.entry("Long", strategy.long)

if (shortEntrySignal)
    strategy.entry("Short", strategy.short)

// トレーリングストップの計算
atrValue = atr(10)
longStopPrice = close - atrValue * TrailingStopCoef1
shortStopPrice = close + atrValue * TrailingStopCoef1

// トレーリングストップの設定
strategy.exit("Exit Long", "Long", stop=longStopPrice)
strategy.exit("Exit Short", "Short", stop=shortStopPrice)

// バックテスト期間の設定(MetaTraderのバックテストと同じ期間)
startYear = 2007
startMonth = 05
startDay = 01
endYear = 2022
endMonth = 04
endDay = 01

startDate = timestamp(startYear, startMonth, startDay, 00, 00)
endDate = timestamp(endYear, endMonth, endDay, 23, 59)

// バックテスト期間内でのみトレードを実行
if (time >= startDate and time <= endDate)
    if (longEntrySignal)
        strategy.entry("Long", strategy.long)
    if (shortEntrySignal)
        strategy.entry("Short", strategy.short)


Thêm nữa