Динамическая стратегия среднего показателя позиций RSI

Автор:Чао Чжан, Дата: 2024-02-06 09:44:05
Тэги:

img

Обзор

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

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

  1. Использовать индикатор RSI для определения условий перепроданности на рынке, при этом период RSI устанавливается на 14 и порог перепроданности на 30.
  2. Начать первую длинную позицию с 5% собственного капитала счета, когда RSI < 30.
  3. Если цена снижается на 0,5% от первоначальной входной цены, увеличить размер позиции вдвое до среднего снижения.
  4. Принимать прибыль на 0,5% каждый раз.
  5. Повторите цикл.

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

  • Определить условия перепродажи рынка с помощью RSI для хороших точек входа.
  • Мартингейл средний показатель позиции снижает среднюю цену входа.
  • Небольшая прибыль позволяет добиваться постоянной прибыли.
  • Подходит для спотовой торговли монетами с высокой рыночной капитализацией с контролируемым риском.

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

  • Продолжительный спад рынка может привести к большим потерям.
  • Нет стоп-лосса означает неограниченный минус.
  • Слишком много средних потерь увеличивает потери.
  • Все еще имеет неотъемлемые риски в долгосрочном направлении.

Руководство по оптимизации

  1. Включить стоп-лосс для ограничения максимальной потери.
  2. Оптимизируйте параметры RSI, чтобы найти лучшие сигналы перекупа/перепродажи.
  3. Установите разумный диапазон получения прибыли на основе специфической волатильности монеты.
  4. Определить средний темп, основанный на общем объеме активов или правилах размещения позиций.

Резюме

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


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Stavolt

//@version=5
strategy("RSI Martingale Strategy", overlay=true, default_qty_type=strategy.cash, currency=currency.USD)

// Inputs
rsiLength = input(14, title="RSI Length")
oversoldThreshold = input(30, title="Oversold Threshold") // Keeping RSI threshold
profitTargetPercent = input(0.5, title="Profit Target (%)") / 100
initialInvestmentPercent = input(5, title="Initial Investment % of Equity")

// Calculating RSI
rsiValue = ta.rsi(close, rsiLength)

// State variables for tracking the initial entry
var float initialEntryPrice = na
var int multiplier = 1

// Entry condition based on RSI
if (rsiValue < oversoldThreshold and na(initialEntryPrice))
    initialEntryPrice := close
    strategy.entry("Initial Buy", strategy.long, qty=(strategy.equity * initialInvestmentPercent / 100) / close)
    multiplier := 1

// Adjusting for errors and simplifying the Martingale logic
// Note: This section simplifies the aggressive position size adjustments without loops
if (not na(initialEntryPrice))
    if (close < initialEntryPrice * 0.995) // 0.5% drop from initial entry
        strategy.entry("Martingale Buy 1", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 2)
        multiplier := 2 // Adjusting multiplier for the next potential entry

    if (close < initialEntryPrice * 0.990) // Further drop
        strategy.entry("Martingale Buy 2", strategy.long, qty=((strategy.equity * initialInvestmentPercent / 100) / close) * 4)
        multiplier := 4

    // Additional conditional entries could follow the same pattern

// Checking for profit target to close positions
if (strategy.position_size > 0 and (close - strategy.position_avg_price) / strategy.position_avg_price >= profitTargetPercent)
    strategy.close_all(comment="Take Profit")
    initialEntryPrice := na // Reset for next cycle


Больше