Эта стратегия сочетает в себе концепцию торговой черепахи с фазовым анализом Нико Баккера, используя три скользящих средних различных циклов для определения направления тренда для следования тренду. Она длинная, когда быстрая скользящая средняя пересекает среднюю скользящую среднюю и все три скользящие средние находятся в одном и том же восходящем или нисходящем тренде; она короткая, когда быстрая скользящая средняя пересекает ниже средней скользящей средней и все три скользящие средние находятся в одном и том же восходящем или нисходящем тренде.
Вычислить три скользящих средних различных циклов: быстрый скользящий средний период составляет 8 дней, средний скользящий средний период составляет 21 день, и медленный скользящий средний период составляет 55 дней.
Определить условия входа: когда быстрая скользящая средняя пересекает среднюю скользящую среднюю, и все три скользящие средние находятся в восходящей тенденции, идти длинным; когда быстрая скользящая средняя пересекает среднюю скользящую среднюю, и все три скользящие средние находятся в нисходящей тенденции, идти коротким.
Определить условия выхода: закрыть позиции, когда быстрая скользящая средняя пересекает среднюю скользящую среднюю в обратном направлении.
Размер позиции: используйте фиксированный размер позиции, каждый раз открывайте один контракт.
Использование трех скользящих средних помогает определить направление тренда и избежать ложных прорывов.
Следующая тенденция для потенциальной прибыли.
Использование скользящих средних приводит к стабильной прибыли и относительно небольшим вычетам.
Контролируемая стратегия стоп-лосса снижает вероятность больших потерь.
Склонны к многочисленным небольшим потерям, снижая эффективность прибыли.
Движущиеся средние отстают и могут пропустить моменты переворота тренда.
Размер фиксированной позиции не может эффективно контролировать риски, может вызвать маржинальный призыв во время значительных колебаний рынка.
Неправильная оптимизация параметров приводит к чрезмерной торговле, увеличению торговых издержек и сдвигу.
Оптимизировать периоды скользящей средней, чтобы они соответствовали характеристикам торгового инструмента.
Используйте ATR для динамической корректировки размеров позиций.
Добавьте стратегию стоп-лосса.
Включить показатели объема торговли для определения надежности тенденций.
Эта стратегия объединяет традиционные технические индикаторы и философию торговли черепахами, используя три скользящих средних для отслеживания тенденций. При надлежащей оптимизации параметров она может достичь хорошей прибыльности. Но она также имеет некоторые риски. Стоп-лосс, размещение позиций и другие меры необходимо использовать для контроля рисков и получения долгосрочной стабильной прибыли от этой количественной торговой стратегии.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JoshuaMcGowan //@version=4 // 1. Define strategy settings strategy(title="Triple Moving Average", overlay=true, pyramiding=0, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=4, slippage=2) fastMALen = input(title="Fast MA Length", type=input.integer, defval=8) medMALen = input(title="Medium MA Length", type=input.integer, defval=21) slowMALen = input(title="Slow MA Length", type=input.integer, defval=55) //endMonth = input(title="End Month Backtest", type=input.integer, defval=11) //endYear = input(title="End Year Backtest", type=input.integer, defval=2019) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2016, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true) riskPerc = input(title="Risk %", type=input.float, defval=0.5, step=0.25) // 2. Calculate strategy values fastMA = sma(close, fastMALen) medMA = sma(close, medMALen) slowMA = sma(close, slowMALen) //Position Sizing riskEquity = (riskPerc / 100) * strategy.equity atrCurrency = (atr(20) * syminfo.pointvalue) posSize = usePosSize ? floor(riskEquity / atrCurrency) : 1 //Backtest Window //tradeWindow = (time <= timestamp(endYear, endMonth, 1, 0, 0)) // 3. Determine long trading conditions enterLong = crossover(fastMA, medMA) and (fastMA > slowMA) and (medMA > slowMA) and window() exitLong = crossunder(fastMA, medMA) // 4. Code short trading conditions enterShort = crossunder(fastMA, medMA) and (fastMA < slowMA) and (medMA < slowMA) and window() exitShort = crossover(fastMA, medMA) // 5. Output strategy data plot(series=fastMA, color=color.green, title="Fast MA") plot(series=medMA, color=color.purple, title="Medium MA") plot(series=slowMA, color=color.red, title="Slow MA", linewidth=2) bgColour = enterLong and (strategy.position_size < 1) ? color.green : enterShort and (strategy.position_size > -1) ? color.red : exitLong and (strategy.position_size > 0) ? color.lime : exitShort and (strategy.position_size < 0) ? color.orange : na bgcolor(color=bgColour, transp=85) // 6. Submit entry orders if (enterLong) strategy.entry(id="EL", long=true, qty=1) if (enterShort) strategy.entry(id="ES", long=false, qty=1) // 7. Submit exit orders strategy.close_all(when=exitLong and (strategy.position_size > 0)) strategy.close_all(when=exitShort and (strategy.position_size < 0)) strategy.close_all(when=not window()) //END