В процессе загрузки ресурсов... загрузка...

FX-стратегия на основе фрактальных волн и SMMA

Автор:Чао Чжан, Дата: 2023-11-13 16:39:41
Тэги:

img

Обзор

Эта стратегия сочетает в себе теорию фрактальной волны и SMMA для выявления трендовых возможностей и использует правильную стоп-лосс и следовую стоп-стоп для контроля рисков для максимизации прибыли.

Логика стратегии

  • Использование SMMA для расчета средней цены и фильтрации рыночного шума для определения направления тренда
  • Определить точки переворота тренда с использованием наивысшей/низшей цены в течение определенных периодов в виде фрактальных волн
  • Пройти короткий, когда волна цен превышает SMMA, пройти длинный, когда превышает SMMA
  • Установка остановки потери и остановки задержки на основе ATR для контроля рисков
  • Торговать только в пределах определенных сессий, избегая колебаний в выходные и внутридневные

Анализ преимуществ

  • Теория фрактальных волн точно определяет точки переворота тренда, в сочетании с SMMA для направления тренда
  • Стоп-лосс и ATR-последняя остановка эффективно ограничивают потери на одну сделку
  • Только торговля в течение ликвидных сессий позволяет избежать чрезмерного скольжения и волатильности
  • Следуя параболическому SAR строго выйти на обратный сигнал максимизирует прибыль

Анализ рисков

  • Неточная фрактальная волна может привести к ударам в периоды, не связанные с трендом
  • SMMA-задержка может пропустить идеальные точки переворота тренда
  • Стоп-потеря слишком тесно может быть легко остановлена, слишком свободно может повлечь за собой большие потери
  • Фиксированная прибыль не может адаптироваться к различным рыночным условиям

Решения:

  • Оптимизировать параметры для фрактального периода и SMMA
  • Добавление стохастики для подтверждения сигналов обмена
  • Динамическая оптимизация стоп-лосса, целевой прибыли

Руководство по оптимизации

  • Оптимизация фрактального периода и параметров SMMA
  • Добавить индикатор Stochastics для фильтрации ложных прорывов
  • Эксперимент с динамическим стоп-лосом и получением прибыли
  • Расширить стоп-лосс, чтобы избежать остановки
  • Оптимизация параметров для различных продуктов и торговых сессий

Резюме

Эта стратегия объединяет теорию фрактальных волн и SMMA для выявления точек тренда и перелома в торговле, с надлежащей остановкой потерь и получением прибыли.


/*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)


Больше