Эта стратегия основана на идее, что уровни стоп-лосса и прибыли часто размещаются на круглых числах или ключевых уровнях цен, которые действуют как поддержка и сопротивление.
Основными правилами этой стратегии являются:
Когда цена закрытия превышает ключевой уровень цены, и не достигла этого уровня за последние 10 бар, делайте длинный выбор.
Используйте стоп-стоп с шагом в 20 пунктов, чтобы следить за движением после того, как цена пройдет через ключевой уровень.
Сигналы продажи противоположные - когда закрытие ниже ключевого уровня и не коснулось его за последние 10 бар, перейдите на короткий.
Ключевые уровни определяются как:
Стратегия основана на психологии того, что круглые числа и ключевые уровни часто являются полем битвы для быков и медведей, и, таким образом, обеспечивают эффективные торговые сигналы.
Преимущества этой стратегии:
Риски, которые следует учитывать:
Возможные решения:
Стратегия может быть улучшена путем:
Добавление дополнительных условий для подтверждения важности ключевых уровней и предотвращения подделок.
Оптимизация параметров, таких как диапазон ключевого уровня и период просмотра на основе характеристик прибора.
Улучшение механизма остановки задержки, например, использование динамического вместо фиксированного точного пути.
Включение машинного обучения для оценки силы ключевых уровней с использованием исторических данных.
Расширение на многочасовую систему с более высокой тенденцией 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)