Стратегия перекрестного использования скользящей средней

Автор:Чао Чжан, Дата: 2024-01-26 16:29:23
Тэги:

img

Обзор

Принцип стратегии

Когда линия быстрого среднего движения проходит через линию медленного среднего движения вверх, считается, что рынок переходит от падения к росту, генерируя сигнал покупки.

Захватив точки перелома ценовых тенденций, эта стратегия может покупать во время улучшения рынка и продавать во время ухудшения рынка, чтобы получать прибыль.

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

Эта стратегия имеет следующие преимущества:

  1. Концепция проста и легко понять и реализовать
  2. Хорошие результаты обратного тестирования, особенно подходящие для рынков с тенденциями
  3. Может включать в себя получение прибыли и стоп-лосс для контроля рисков

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

Эта стратегия также сопряжена со следующими рисками:

  1. Склонность к созданию ложных сигналов и переоценке на рынках с ограниченным диапазоном
  2. Настройка параметров необходима, поскольку различные наборы параметров приводят к различным результатам обратных испытаний

Эти риски могут быть смягчены путем соответствующей оптимизации.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Добавить фильтры, такие как показатели объема и волатильности, чтобы избежать неправильных сделок во время консолидации
  2. Использовать адаптивные скользящие средние для динамических изменений периода для лучшего следования тренду
  3. Оптимизировать скользящие средние периоды для поиска лучших наборов параметров
  4. Учитывать фактические торговые издержки и сдвиг, корректировать получение прибыли и стоп-лосс

Вышеуказанные оптимизации могут значительно улучшить фактическую эффективность стратегии.

Резюме


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-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/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1)
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)
    
if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)

Больше