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


Дата создания: 2023-09-23 15:52:06 Последнее изменение: 2023-09-23 15:52:06
Копировать: 2 Количество просмотров: 646
1
Подписаться
1617
Подписчики

Обзор

Стратегия настраивается на несколько комбинаций быстрого и медленного средних линий, которые делают больше, когда все быстрое пересекают медленную линию; когда по крайней мере один из быстрого пересекает медленную линию. Стратегия использует преимущества нескольких средних линий, чтобы сформировать более сильную систему принятия решений о позиции.

Стратегический принцип

Основные компоненты и правила стратегии:

  1. Множественная группа медленно-быстрых средних линий: использование различных средних показателей, таких как SMA, WMA, VWMA.

  2. Получайте больше сигналов, когда проходите медленную линию на всех скоростных линиях.

  3. Сигнал равновесия: равновесие при прохождении медленной линии под любой быстрой линией.

  4. Стоп-стоп: фиксированная стоп-стоп-стоп в ATR.

  5. Конфигурирование: гибко конфигурируются множественные среднелинейные параметры.

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

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

По сравнению с единой линейной стратегией, эта стратегия имеет следующие преимущества:

  1. Многомерная комбинация позволяет более полно оценить тенденции.

  2. Как избежать недоразумений при голосовании?

  3. Свободное расположение среднелинейных параметров, большое пространство для оптимизации.

  4. Поддержка различных среднелинейных показателей, гибкое использование.

  5. Установка стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп.

  6. Более длительный цикл использования имеет лучший эффект, уменьшая колебание кривой.

  7. Вычисления просты, интуитивно понятны, просты в реализации и эксплуатации.

  8. В целом, стабильность и долговечность лучше, чем в одиночной средней линии.

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

Однако эта стратегия несет в себе определенные риски:

  1. Показатель “посредний” увеличивает сложность стратегии.

  2. Риск переоптимизации параметров.

  3. Средняя линия по своей природе имеет отсталое распознавание изменений тренда.

  4. Не учитывая объемы сделок, возможны сбои.

  5. Установка стоп-лосса является произвольной и может привести к ненужной ликвидации позиций.

  6. Эффективность колеблется в зависимости от изменения рыночной ситуации.

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

  8. Параметры для проверки устойчивости в нескольких разновидностях

Направление оптимизации

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

  1. Среднелинейные параметры для тестирования крепкости у разных сортов.

  2. Увеличение количества сделок или проверка волатильности.

  3. Оптимизация параметров стоп-лосса.

  4. Установите максимальную допустимую отмену.

  5. Создание механизма управления динамическими позициями.

  6. Оценка эффективности внедрения машинного обучения.

  7. Внимание к максимальному выводу и концентрации кривой прибыли.

  8. В этом случае мы будем использовать методы, описанные в статье.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © levieux

//@version=5
strategy(title='Configurable Multi MA Crossover Voting System', shorttitle='Configurable Multi MA Crossover Voting System', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
crossoverConfig= input.string(defval="2x4,3x5,4x6", title="Crossover Config")
source= input.source(high)
maType= input.string("WMA", title="Moving Average Type", options=["WMA","SMA","VWMA"])
atrPeriod= input(14, title="ATR Period")
profitAtr = input(10, title="Profit ATR x")
lossAtr = input(5, title="Loss ATR x")


ma(src,length,type) => 
    float ma = switch type
	    "SMA" => ta.sma(src, length)
	    "WMA" => ta.wma(src, length)
	    "VWMA" => ta.vwma(src, length)

crossoverGroups= str.split(crossoverConfig, ",")
crossoverCount= array.size(crossoverGroups)
crossovers= array.new_string(crossoverCount)
positions= array.new_int(crossoverCount, 0)
longVotes= 0
for i= 0 to crossoverCount-1
    crossover= str.tostring(array.get(crossoverGroups, i))
    crossoverBoundaries= str.split(crossover, "x")
    int fastLength= math.round(str.tonumber(array.get(crossoverBoundaries, 0)))
    int slowLength= math.round(str.tonumber(array.get(crossoverBoundaries, 1)))
    wmaFast= ma(source,fastLength,maType)
    wmaSlow= ma(source,slowLength,maType)
    if wmaFast>wmaSlow
        longVotes:= longVotes + 1
        array.set(positions, i, 1)

longCondition= longVotes==crossoverCount and strategy.position_size==0


//profitTicks = profitAtr*ta.atr(atrPeriod)/syminfo.mintick
//lossTicks = lossAtr*ta.atr(atrPeriod)/syminfo.mintick
profitPrice= close+profitAtr*ta.atr(atrPeriod)
lossPrice= close-lossAtr*ta.atr(atrPeriod)

if strategy.position_size>0
    profitPrice:= profitPrice[1]
    lossPrice:= lossPrice[1]

plot(profitPrice, color=color.green)
plot(lossPrice, color=color.red)

if longCondition and profitPrice>0
    strategy.entry("Long", strategy.long)

if longVotes<crossoverCount and strategy.position_size>0 and (high>profitPrice or low<lossPrice)
    strategy.close("Long")
    
longVotes:= 0