Последовательная стратегия смены курса

Автор:Чао Чжан, Дата: 2023-10-08 13:56:39
Тэги:

Обзор

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

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

Основная логика этой стратегии включает в себя:

  1. Проверьте, не превышает ли высота тела свечи минимальный порог, чтобы отфильтровать незначительные бычьи/медвежие движения.

  2. Определите, есть ли у двух предыдущих свечников одинаковый цвет, что может указывать на потенциальное краткосрочное изменение.

  3. Если текущая свеча имеет другой цвет, чем предыдущие две, генерируется торговый сигнал. т.е. длинный ход после двух быстрых свечей и одного бычьего, короткий ход после двух бычьих свечей и одного бычьего.

  4. После вступления в сделку, перекрестки линии RVI и линии сигнала используются для определения позиций выхода.

  5. Подводя итог, эта стратегия сочетает в себе модели свечей и индикатор RVI для создания краткосрочной системы реверсии среднего значения, фиксирующей прибыльные реверсии от ненормального краткосрочного поведения цен.

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

К основным преимуществам этой стратегии относятся:

  1. Последовательные свечи одного цвета часто указывают на аномалии, готовые к перелому.

  2. Индикатор RVI помогает определить обратный ход, дополняя шаблоны свечей для более стабильных сигналов.

  3. Относительно высокая частота торговли для краткосрочной торговли.

  4. Контролируемые риски, связанные с фиксированным размером сделки и сдерживанием потерь/прибыли.

  5. Простая и понятная логика, которую легко понять и реализовать для торговли в режиме реального времени.

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

Некоторые риски:

  1. Краткосрочные реверсии не гарантируются во время сильных тенденций, когда сигналы могут не работать.

  2. В особых рыночных условиях RVI может генерировать неправильные сигналы.

  3. Недостаточная установка стоп-лосса может привести к большим потерям.

  4. Оптимизировать до требуемого процента свечей одного цвета в течение N периодов.

  5. Фиксированный размер сделки не может контролировать общие риски позиции.

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

Некоторые способы дальнейшей оптимизации стратегии:

  1. Оптимизируйте логику последовательных свечей с использованием статистики, а не фиксированных периодов.

  2. Оптимизируйте параметры RVI, чтобы найти лучшие комбинации.

  3. Добавить остановку потерь на основе волатильности рынка.

  4. Добавьте размеры позиций, основанные на использовании учетной записи.

  5. Добавьте больше фильтров, таких как каналы, тенденции для улучшения стабильности системы.

  6. Настройка параметров для различных продуктов.

  7. Машинное обучение на исторических данных для динамической оптимизации параметров.

Резюме

В общем, это типичная краткосрочная стратегия реверсии среднего значения, основанная на моделях свечей и RVI. Она имеет преимущества, но также и риски. Дальнейшая оптимизация параметров и надежности может улучшить ее стабильность и прибыльность. Однако ни одна стратегия не исключает потерь полностью. Трейдеры должны оставаться дисциплинированными в управлении рисками.


/*backtest
start: 2022-10-07 00:00:00
end: 2023-10-07 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//This is part of a series of strategies developed automatically by a online software. I cannot share the site url, which is not related to me in any way, because it is against the TV reules.
//
//This strategy was optimized for GBPUSD, timeframe 1D, fixed lots 0.1, initial balance 1000€
//LOGIC:
//- LONG ENTRY when previous candle is bear
//- LONG EXIT: RVI > signal line
//- SHORT ENTRY when previous candle is bull
//- SHORT EXIT: RVI <  signal line
//
//NOTE: I considered the open of actual candle instead of close otherwise there will be a back shift of 1 candle in pine script
//
//Take profit = no
//Stop loss = no

// strategy("Expert studio strategy 1 - GBPUSD", overlay=false, precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)

//INPUTS
src = input(close, "source")
min_body_height = input(42, "Minimum body height", type=input.float)
//bars_back=input(2, "Consecutive bars of same color")
rvi_period = input(55, "RVI period")

//CALCULATIONS_____________________________
//candle color
body_height = abs(open - close) / syminfo.mintick
body_color = open > close ? color.red : color.green

//da migliorare for i=0 to bars_back-1

//RVI -------- thanks to hecate
p = rvi_period

CO = close - open
HL = high - low

value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6

num = sum(value1, p)
denom = sum(value2, p)

RVI = denom != 0 ? num / denom : 0

RVIsig = (RVI + 2 * RVI[1] + 2 * RVI[2] + RVI[3]) / 6

plot(RVI, color=color.green, style=plot.style_line, linewidth=1)
plot(RVIsig, color=color.red, style=plot.style_line, linewidth=1)

//----------------------------------

longCondition = body_height[1] >= min_body_height and body_color[1] == color.red and 
   body_height[0] >= min_body_height and body_color[0] == color.red and 
   RVIsig > RVI
exitLong = RVI > RVIsig

shortCondition = body_height[1] >= min_body_height and body_color[1] == color.green and 
   body_height[0] >= min_body_height and body_color[0] == color.green and 
   RVIsig < RVI
exitShort = RVI < RVIsig

if longCondition and strategy.opentrades == 0
    strategy.entry("Long", strategy.long)

strategy.close("Long", when=exitLong)

if shortCondition and strategy.opentrades == 0
    strategy.entry("Short", strategy.short)

strategy.close("Short", when=exitShort)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(10, "Backtest Start Month")
testStartDay = input(7, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()





Больше