Стратегия низкого и высокого тренда

Автор:Чао Чжан, Дата: 2023-11-23 11:03:18
Тэги:

img

Обзор

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

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

Вычисление максимальной и минимальной цены

  • Самая низкая цена (низкие критерии): Вызвать функцию ta.lowest, чтобы вычислить самую низкую цену за период просмотра, установленный пользователем (по умолчанию 20 бар) и проиллюстрировать самую низкую ценовую линию.

  • Самая высокая цена (высокие критерии): Вызвать функцию ta.highest, чтобы рассчитать самую высокую цену за период просмотра, установленный пользователем (по умолчанию 10 бар) и проиллюстрировать самую высокую ценовую линию.

Сигнал входа

Когда текущая цена проходит через самую низкую ценовую линию, запускается сигнал покупки для установления длинной позиции.

Сигнал выхода

Для выбора предусмотрены два способа выхода:

  1. Фиксированная прибыль: закрыть позицию с целью получения прибыли, когда цена достигнет заранее установленного уровня прибыли (например, на 8% выше входной цены).

  2. Распределение наивысшей цены: Закрыть позицию для сокращения потерь, когда цена опускается ниже наивысшей ценовой линии, судя по изменению тренда.

Фильтр трендов

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

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

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

  • Добавьте суждение о тренде, чтобы избежать частых открытий во время колебаний цен.

  • Предоставьте два варианта выхода для получения высокой прибыли или сокращения потерь.

  • Настраиваемые параметры адаптируются к более широкой рыночной среде.

  • Огромное пространство для оптимизации стратегии с помощью настройки параметров, дизайна фильтров и т.д.

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

  • Уровень фиксированной прибыли не корректируется на основе фактических рыночных изменений, что приводит к преждевременному получению прибыли или недостаточной цели прибыли.

  • Продажа по наиболее высокой цене может уже привести к огромным потерям, не способным эффективно контролировать потери.

  • Оценка тенденции EMA отражается только на определенном периоде, возможно, отставая от фактического изменения тенденции.

  • Результаты обратных тестов не представляют будущее.

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

  • Добавьте методы получения прибыли, такие как остановка, частичный выход и т. Д., Чтобы динамически регулировать уровень получения прибыли.

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

  • Улучшить оценку тренда путем включения большего количества индикаторов или машинного обучения.

  • Оптимизируйте параметры с помощью более обширных обратных тестов, чтобы найти оптимальные наборы.

  • Добавьте методы остановки потерь для лучшего контроля потерь.

Резюме

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


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @version=5
// Author = TradeAutomation


strategy(title="Low-High-Trend Strategy", shorttitle="Low-High-Trend Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_order, commission_value=1, slippage=3, initial_capital = 25000, margin_long=50, margin_short=50, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Backtest Date Range Inputs // 
StartTime = input(defval=timestamp('01 Jan 2000 05:00 +0000'), title='Start Time')
EndTime = input(defval=timestamp('01 Jan 2099 00:00 +0000'), title='End Time')
InDateRange = true

// Strategy Calculations //
lowcriteria = ta.lowest(close, input(20, "Lowest Price Lookback", tooltip="The strategy will BUY when the price crosses over the lowest it has been in the last X amount of bars"))[1]
highcriteria = ta.highest(close, input(10, "Highest Price Lookback", tooltip="If Take-Profit is not checked, the strategy will SELL when the price crosses under the highest it has been in the last X amount of bars"))[1]
plot(highcriteria, color=color.green)
plot(lowcriteria, color=color.red)

// Take Profit //
TakeProfitInput = input(true, "Sell with Take-Profit % intead of highest price cross?")
TakeProfit = ta.crossover(close,strategy.position_avg_price*(1+(.01*input.float(8, title="Take Profit %", step=.25))))

// Operational Functions //
TrendFilterInput = input(true, "Only buy when price is above EMA trend?")
ema = ta.ema(close, input(200, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)

// Entry & Exit Functions//
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria) and TrendisLong)
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria))
if (InDateRange and TakeProfitInput==true)
    strategy.close("Long", when = TakeProfit)
if (InDateRange and TakeProfitInput==false)
    strategy.close("Long", when = ta.crossunder(close, highcriteria))
if (not InDateRange)
    strategy.close_all()
    

Больше