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