Стратегия равнолинейного пересечения


Дата создания: 2023-10-10 10:44:25 Последнее изменение: 2023-10-10 10:44:25
Копировать: 0 Количество просмотров: 751
1
Подписаться
1617
Подписчики

Обзор

Стратегия пересечения равномерных линий - это часто используемая торговая стратегия, основанная на движущихся равномерных линиях. Эта стратегия использует пересечение быстро движущихся равномерных линий и медленно движущихся равномерных линий в качестве сигналов покупки и продажи.

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

Центральная логика этой стратегии основана на теории равновесия. Движущаяся равновесия эффективно сглаживает колебания цен и отражает тенденцию цен. Быстрая равновесия более чувствительна к изменениям цен и может улавливать переломные моменты тенденции; медленная равновесия менее чувствительна к изменениям цен и может фильтровать краткосрочные колебания.

В частности, стратегия сначала определяет 50-дневную и 200-дневную среднюю линию. Затем устанавливается многоголовое входное условие для быстрого прохождения медленного среднего уровня над средней линией, и пустое входное условие для быстрого прохождения медленного среднего уровня под средней линией. Чтобы избежать перекрытия торгов, стратегия использует контрольные знаки isEntry и isExit.

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

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

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

  1. Простая в использовании и легко реализуемая. Торговля может осуществляться только с помощью равнолинейного пересечения, что идеально подходит для начинающих, не имеющих опыта торговли.

  2. Контролируемые отступления с определенным механизмом управления рисками. Мобильная средняя линия может эффективно фильтровать краткосрочные колебания цен и избегать арбитража.

  3. Настраиваемые параметры, адаптивность. Пользователь может самостоятельно настроить параметры средней линии и стоп-стоп-стоп стандартов, оптимизировать стратегию.

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

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

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

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

  1. Рыночные внезапности приводят к гигантским событиям, которые невозможно остановить. Быстрая средняя линия чувствительна к изменениям цен и не может эффективно реагировать на внезапные события.

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

  3. Не учитываются затраты на транзакции. Операционные комиссионные и потери скольжения в фактических транзакциях серьезно влияют на прибыль.

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

Решение проблемы:

  1. Можно установить более мягкие стандарты потери, а также добавить дополнительный прорыв.

  2. Можно расширить расстояние между средними линиями, снизить частоту сделок или использовать другие индикаторы для фильтрации сигналов.

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

  4. Следует учитывать изменения рыночной среды, оптимизировать параметры и постепенно снижать соответствие.

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

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

  1. Тестируйте различные комбинации параметров, чтобы найти наиболее оптимальный. Можно тестировать количество дней в средне-медленном темпе, комбинации параметров и т. д.

  2. Фильтрация других индикаторов, чтобы избежать ошибочных сделок в условиях шока. Например, MACD, KD и другие индикаторы.

  3. Оптимизация стратегии стоп-стоп и более эффективное управление рисками, например, отслеживание стоп-стоп, установка стоп-стоп и т. д.

  4. Увеличение размеров позиций, использование леверинга для увеличения, увеличение прибыли.

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

  6. Оценка стабильности параметров в сочетании со статистическими методами снижает риск совпадения данных и повышает стабильность.

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

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

Исходный код стратегии
/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-09 00:00:00
period: 3m
basePeriod: 1m
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/
// © gjfsdrtytru

//@version=4
strategy("Backtest Engine", "Backtest", overlay=true, commission_type=strategy.commission.percent, commission_value=0.07, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD)


// Start code here...
fastMA = sma(close,50)
slowMA = sma(close,200)

plot(fastMA, "Fast MA",  color.blue)
plot(slowMA, "Slow MA",  color.red)

// Long Enrty/Exit
longCondition = crossover(fastMA,slowMA)
closeLong = crossover(slowMA,fastMA)

// Short Enrty/Exit
shortCondition = crossover(slowMA,fastMA)
closeShort = crossover(fastMA,slowMA)


// Bot web-link alert - {{strategy.order.comment}}
botLONG = "ENTRY LONG ALERT"
botCLOSELONG = "CLOSE LONG ALERT"
botSHORT = "ENTRY SHORT ALERT"
botCLOSESHORT = "CLOSE SHORT ALERT"

//////////////////////////////////////////////////////////////////
//////////////////////// BACKTEST ENGINE \\\\\\\\\\\\\\\\\\\\\\\\\
/////////////////// [NO USER INPUT REQUIRED] /////////////////////
//////////////////////////////////////////////////////////////////

// Time period
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(5, "Backtest Start Month")
testStartDay = input(11, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

periodLength = input(3650, "Backtest Period (days)", minval=0,tooltip="Days until strategy ends") * 86400000 // convert days into UNIX time
testPeriodStop = testPeriodStart + periodLength

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

// Convert Take profit and Stop loss to percentage
longTP = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
longSL = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortTP = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortSL = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options

// 0% TP/SL = OFF (a value of 0 turns off TP/SL feature)
longProfitPerc = longTP == 0 ? 1000 : longTP
longStopPerc = longSL == 0 ? 1 : longSL
shortProfitPerc = shortTP == 0 ? 1 : shortTP
shortStopPerc = shortSL == 0 ? 1000 : shortSL

// Determine TP/SL price based on percentage given
longProfitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortProfitPrice  = strategy.position_avg_price * (1 - shortProfitPerc)
shortStopPrice  = strategy.position_avg_price * (1 + shortStopPerc)

// Anti-overlap
isEntry_Long = false
isEntry_Long := nz(isEntry_Long[1], false)
isExit_Long = false
isExit_Long := nz(isExit_Long[1], false)
isEntry_Short = false
isEntry_Short := nz(isEntry_Short[1], false)
isExit_Short = false
isExit_Short := nz(isExit_Short[1], false)

entryLong = not isEntry_Long and longCondition
exitLong = not isExit_Long and closeLong
entryShort = not isEntry_Short and  shortCondition
exitShort = not isExit_Short and closeShort

if (entryLong)
    isEntry_Long := true
    isExit_Long := false
if (exitLong)
    isEntry_Long := false
    isExit_Long := true
if (entryShort)
    isEntry_Short := true
    isExit_Short := false
if (exitShort)
    isEntry_Short := false
    isExit_Short := true

// Order Execution
if testPeriod() 
    if entryLong
        strategy.entry(id="Long", long=true, when = entryLong, comment=botLONG) // {{strategy.order.comment}}
    if entryShort
        strategy.entry(id="Short", long=false, when = entryShort, comment=botSHORT) // {{strategy.order.comment}}


// TP/SL Execution
if (strategy.position_size > 0)
    strategy.exit(id="Long SL/TP", from_entry="Long", limit=longProfitPrice, stop=longStopPrice)
    strategy.close(id="Long", when=exitLong, comment=botCLOSELONG) // {{strategy.order.comment}}

if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", from_entry="Short", limit=shortProfitPrice, stop=shortStopPrice)
    strategy.close(id="Short", when=exitShort, comment=botCLOSESHORT) // {{strategy.order.comment}}
    
// Draw Entry, TP and SL Levels for Long Positions
plot(strategy.position_size > 0 ? longTP == 0 ? na : longProfitPrice : na, style=plot.style_linebr, color=color.green, title="Long TP")
plot(strategy.position_size > 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Long Entry")
plot(strategy.position_size > 0 ? longSL == 0 ? na : longStopPrice : na, style=plot.style_linebr, color=color.red, title="Long SL")
// Draw Entry, TP and SL Levels for Short Positions
plot(strategy.position_size < 0 ? shortTP == 0 ? na : shortProfitPrice : na, style=plot.style_linebr, color=color.green, title="Short TP")
plot(strategy.position_size < 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Short Entry")
plot(strategy.position_size < 0 ? shortSL == 0 ? na : shortStopPrice : na, style=plot.style_linebr, color=color.red, title="Short SL")