Эта стратегия использует принципы золотого креста и смертного креста простых скользящих средних для реализации длинных и коротких позиций для акций.
Стратегия сначала определяет временные рамки обратного тестирования, а затем устанавливает параметры расчета для двух скользящих средних, включая тип MA и продолжительность периода.
Функция getMAType() вычисляет значения двух МА. fastMA - кратчайший период МА, а slowMA - более длительный период МА.
Основная логика:
Когда fastMA пересекает slowMA, запускается длинный сигнал.
Когда fastMA переходит ниже slowMA, запускается короткий сигнал.
Наконец, во время обратного тестирования, займите длинную позицию при виде длинного сигнала, и займите короткую позицию при виде короткого сигнала.
Возможные оптимизации в отношении рисков:
Добавить другие технические показатели для определения тенденции.
Добавление стоп-лосса к контрольной сумме по сделке.
Добавьте показатели объема, чтобы избежать рыночных сделок.
Создать механизмы оптимизации параметров для автоматического поиска оптимальных наборов параметров.
Стратегия может быть дополнительно оптимизирована в следующих аспектах:
Добавьте стратегии стоп-лосса, такие как фиксированные точки стоп-лосса или отслеживание стоп-лосса для контроля потерь.
Добавьте стратегии размещения позиций, такие как фиксированное или динамическое размещение позиций для контроля рисков торговли.
Добавьте фильтры, объединив их с другими техническими показателями, чтобы определить тенденции и улучшить показатель победы.
Оптимизируйте параметры такими методами, как поиск сетки и линейная регрессия, чтобы найти оптимальные значения.
Расширяйте стратегии входа, такие как вырыв, масштабирование заказов для обогащения торговых тактик.
Добавьте показатели объема, чтобы избежать рыночных сделок.
Расширить продукцию до фондовых индексов, валюты, криптовалют и т.д.
Эта стратегия реализует длинный / короткий выбор акций на основе принципов перекрестного MA. Идея стратегии проста и ясна, широко используется, очень адаптируется и практически ценна. Но у нее также есть некоторые проблемы с отставанием и фильтрацией.
/*backtest start: 2023-09-10 00:00:00 end: 2023-10-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// MA Params ///////////// source1 = input(title="MA Source 1", defval=close) maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"]) length1 = input(title="MA Length 1", defval=50) source2 = input(title="MA Source 2", defval=close) maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"]) length2 = input(title="MA Length 2", defval=200) ///////////// Get MA Function ///////////// getMAType(maType, sourceType, maLen) => res = sma(close, 1) if maType == "ema" res := ema(sourceType, maLen) if maType == "sma" res := sma(sourceType, maLen) if maType == "swma" res := swma(sourceType) if maType == "wma" res := wma(sourceType, maLen) res ///////////// MA ///////////// fastMA = getMAType(maType1, source1, length1) slowMA = getMAType(maType2, source2, length2) long = crossover(fastMA, slowMA) short = crossunder(fastMA, slowMA) /////////////// Plotting /////////////// checkColor() => fastMA > slowMA colCheck = checkColor() ? color.lime : color.red p1 = plot(fastMA, color = colCheck, linewidth=1) p2 = plot(slowMA, color = colCheck, linewidth=1) fill(p1, p2, color = checkColor() ? color.lime : color.red) bgcolor(long ? color.lime : short ? color.red : na, transp=20) /////////////// Execution /////////////// if testPeriod() strategy.entry("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short)