Эта стратегия использует индикатор RSI для измерения импульса цен и определяет сроки входа, рассчитывая стандартное отклонение изменений в RSI. Она входит в длинную позицию, когда импульс RSI превышает порог стандартного отклонения и меньше, чем предыдущий импульс, умноженный на фактор истощения, и входит в короткую позицию при противоположных условиях. Стратегия использует лимитные ордера для выхода, контролируя риск путем установления целевой прибыли и стоп-лосс. Стратегия выполняется на каждом ценовом тике, чтобы захватить все потенциальные движения цен.
Эта стратегия использует импульс RSI и пороги стандартного отклонения для выполнения реверсионной торговли в среде с высокой частотой. Внедряя фактор истощения и выход ограничительного ордера, стратегия способна захватить торговые возможности, вызванные движением цен, контролируя риск. Тем не менее, стратегия все еще нуждается в дальнейшей оптимизации в фактическом применении, например, внедрение большего количества индикаторов, оптимизация настроек параметров, внедрение управления позициями и фильтрации трендов и т. д., чтобы улучшить стабильность и рентабельность стратегии.
/*backtest start: 2024-03-01 00:00:00 end: 2024-03-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MCOTs Intuition Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1, initial_capital=50000, calc_on_every_tick=true) // Input for RSI period rsiPeriod = input(14, title="RSI Period") // Input for standard deviation multiplier stdDevMultiplier = input(1.0, title="Standard Deviation Multiplier") // Input for exhaustion detection exhaustionMultiplier = input(1.5, title="Exhaustion Multiplier") // Input for profit target and stop loss in ticks profitTargetTicks = input(8, title="Profit Target (ticks)") stopLossTicks = input(32, title="Stop Loss (ticks)") // Calculate RSI rsiValue = ta.rsi(close, rsiPeriod) // Calculate standard deviation of RSI changes rsiStdDev = ta.stdev(ta.change(rsiValue), rsiPeriod) // Calculate momentum momentum = ta.change(rsiValue) // Conditions for entering a long position longCondition = momentum > rsiStdDev * stdDevMultiplier and momentum < momentum[1] * exhaustionMultiplier if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Take Profit Long", "Long", limit=close + profitTargetTicks * syminfo.mintick) strategy.exit("Stop Loss Long", "Long", stop=close - stopLossTicks * syminfo.mintick) // Conditions for entering a short position shortCondition = momentum < -rsiStdDev * stdDevMultiplier and momentum > momentum[1] * exhaustionMultiplier if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Take Profit Short", "Short", limit=close - profitTargetTicks * syminfo.mintick) strategy.exit("Stop Loss Short", "Short", stop=close + stopLossTicks * syminfo.mintick) // Plotting RSI value for reference plot(rsiValue, title="RSI", color=color.blue)