Стратегия отслеживания круглых номеров

Автор:Чао Чжан, Дата: 21 сентября 2023 года
Тэги:

Обзор

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

Логика стратегии

Основными правилами этой стратегии являются:

  1. Когда цена закрытия превышает ключевой уровень цены, и не достигла этого уровня за последние 10 бар, делайте длинный выбор.

  2. Используйте стоп-стоп с шагом в 20 пунктов, чтобы следить за движением после того, как цена пройдет через ключевой уровень.

  3. Сигналы продажи противоположные - когда закрытие ниже ключевого уровня и не коснулось его за последние 10 бар, перейдите на короткий.

  4. Ключевые уровни определяются как:

    • Преобразовать ценовую категорию в целое число
    • Вычислить остаток от деления на 50 (конфигурируемый)
    • Если остаток > 25, используйте следующее целое число 50 в качестве ключевого уровня
    • В противном случае сохранить уровень ключа неизменным

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

Преимущества

Преимущества этой стратегии:

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

Риски

Риски, которые следует учитывать:

  1. Ключевые уровни могут не всегда действовать как сильная поддержка/сопротивление.
  2. Фиксированный 10-барный обратный просмотр может не подходить для различных приборов.
  3. Расстояние от задней остановки не должно быть слишком широким, иначе он может остановиться преждевременно.

Возможные решения:

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

Возможности для расширения

Стратегия может быть улучшена путем:

  1. Добавление дополнительных условий для подтверждения важности ключевых уровней и предотвращения подделок.

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

  3. Улучшение механизма остановки задержки, например, использование динамического вместо фиксированного точного пути.

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

  5. Расширение на многочасовую систему с более высокой тенденцией TF и более низким отслеживанием TF.

Заключение

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


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//Strategy based on the idea that stop loss and take profit are often placed at full price levels or round numbers, whcih acts as resistance and supports levels
//Buy Rules:
//Actual price (close) is above round number.
//Round number level was not touched in previous ten bars (arbitrary value).
//Place a buy and follow the order with a trail step because price can bounce at round number (support) or can go through it.
//Sell Rules are the same of buy rules but inverted.
//
//Need improvement on conditions' logic and round numbers definitions


strategy("dP magnet", overlay=true, pyramiding=0,default_qty_type=strategy.percent_of_equity,default_qty_value=100,currency=currency.USD)

//Round Levels credit to RKchartest

roundLevel50 = input(500, 'Round Level 1, pips')
//roundLevel100 = input(1000, 'Round Level 2, pips')
deviation = input(1000, 'Max distance, pips', minval=0) 

rDelimeter = 1/syminfo.mintick

intRoundLevel = close[1] * rDelimeter

intRemainder = intRoundLevel % roundLevel50 
toRound = (intRemainder >= roundLevel50/2) ? roundLevel50 : 0
roundLevel = (intRoundLevel - intRemainder + toRound) / rDelimeter
plot(roundLevel, title='Round Level 1', color=black, style=line, transp=0, linewidth=1, trackprice=false)

//intRemainder2 = intRoundLevel % roundLevel100
//toRound2 = (intRemainder2 >= roundLevel100/2) ? roundLevel100 : 0
//roundLevel2 = (intRoundLevel - intRemainder2 + toRound2) / rDelimeter
//plot((abs(roundLevel2 - close) * rDelimeter < deviation) ? roundLevel2 : na, title='Round Level 2', color=black, style=circles, transp=0, linewidth=1, trackprice=true)

// end

//Start of strategy

distToFullNumber=(close-roundLevel) //can be positive or negative number

distPips=input(100,'Distance in pips to full level',minval=10) //user defined: this distance defines when to open an order at market price


TrailS=input(20,'Trail Step points',minval=10) //trail step that follows the order

longCondition = iff(distToFullNumber>0 and abs(distToFullNumber)<=distPips and lowest(low,10)>roundLevel,true,false)

if (longCondition)
    strategy.entry("LongMagnet", strategy.long)
    strategy.exit("ExitMagnet","LongMagnet",trail_points=TrailS)

shortCondition = iff(distToFullNumber<0 and abs(distToFullNumber)<=distPips and highest(high,10)<roundLevel,true,false)

if (shortCondition)
    strategy.entry("ShortMagnet", strategy.short)
    strategy.exit("Exit_Magnet","ShortMagnet",trail_points=TrailS)
    

Больше