Следуйте стратегии Медведя

Автор:Чао Чжан, Дата: 2024-02-26 14:12:09
Тэги:

img

Обзор

Стратегия Follow The Bear (FTB) - это стратегия торговли на рынке Форекс, предназначенная для захвата повторяющейся модели в ценовом движении EUR/USD на европейском рынке. Стратегия направлена на то, чтобы воспользоваться преимуществами застрявших в ловушке евро быков, которые вынуждены разворачивать свои длинные позиции по мере того, как цена начинает ретросировать. В частности, она следит за стрельбой звезды или отклонением свечей на 1-часовом графике EUR/USD. После обнаружения и подтверждения с помощью дополнительных фильтров, таких как перекупленный RSI, она будет агрессивно входить в короткие позиции с плотной остановкой выше отклонения свечи и целевой прибылью, основанной на разумном соотношении риск/вознаграждение.

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

Основная предпосылка стратегии FTB основана на предположении, что быки евро и алгоритмы, подталкивающие цену EUR/USD вверх, окажутся в ловушке, когда восходящий тренд остановится или изменится вскоре после открытия европейского/лондонского рынка.

Стратегия направлена на то, чтобы извлечь выгоду из этой медвежьей теории, наблюдая за обратными моделями свечей в течение европейского часового пояса (например, 2am-7am). Критерием для обратной свечи является то, что закрытие должно быть ниже открытого и в пределах нижних 50% диапазона свечи (ближе к низкому, чем открыто).

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

  1. РСИ выше уровня перекупленности 70
  2. Предыдущая свеча закрыта
  3. Нынешняя свеча сделала новый недавний максимум

После прохождения всех фильтров, стратегия входит в короткие позиции на закрытии свечи с стоп-лосом, размещенным чуть выше максимума, и целевой прибылью, рассчитанной на основе соотношения риск/вознаграждение 1:1 (конфигурируемый).

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

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

В качестве простой краткосрочной стратегии реверсии среднего показателя подход FTB имеет несколько ключевых достоинств:

  1. Захватывает образец поведения с хорошей скоростью выигрыша
  2. Легкая для понимания и оптимизации логика
  3. Избегает дневного шума, торгуя ночью.
  4. Правило управления рисками
  5. Бесперебойное подключение к автоматической торговле

В целом, как стратегия ночного скальпинга с низкой частотой, стабильность и надежность FTB довольно привлекательны.

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

Хотя стратегия имеет свои преимущества, как и любая торговая система, существуют риски, включая:

  1. Более широкие спреды и разрывы за ночь
  2. Простота может привести к чрезмерной оптимизации
  3. Недостаточная точность моделей на некоторых рынках
  4. Ограниченная жизнеспособность исторических данных
  5. Ограничения обратных испытаний

Некоторые способы устранения рисков:

  1. Настройка буфера остановочных потерь
  2. Добавить фильтры и объединить стратегии
  3. Оптимизация устойчивости в рыночных условиях
  4. Использовать более длительный период обратного тестирования
  5. Обширные форвардные тесты перед торговлей в реальном времени

Пути оптимизации

Учитывая основной характер стратегии и связанные с ней риски, некоторые области, которые следует рассмотреть для улучшения:

  1. Многочасовые рамки подтверждение сигналов на 5 или 15 м для надежности
  2. Машинное обучение модель поезда для экранирования сигналов
  3. Динамические остановки регулировать остановки на основе волатильности
  4. Сглаживание риска оптимизировать размер позиций для более устойчивого роста

Заключение

Стратегия Follow the Bear обеспечивает простой подход к краткосрочной продаже, используя ретрексейнги, подпитываемые пойманными быками евро.


/*backtest
start: 2024-02-18 00:00:00
end: 2024-02-25 00:00:00
period: 3h
basePeriod: 15m
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/
// © ZenAndTheArtOfTrading / PineScriptMastery
// FTB Strategy (PineConnector Version)
// Last Updated: 21st July, 2021
// @version=4
strategy("[2021] FTB Strategy", shorttitle="FTB", overlay=true)

// Risk Settings
var g_risk      = "Risk Settings"
pips            = input(title="Stop Pips", type=input.float, defval=2.0, group=g_risk, tooltip="How many pips above high to put stop loss")
rr              = input(title="Risk:Reward", type=input.float, defval=1.0, group=g_risk, tooltip="This determines the risk:reward profile of the setup")
// Filters
var g_filter    = "Filter Settings"
timezone        = input(title="Timezone", type=input.session, defval="0200-0700", group=g_filter, tooltip="Which timezone to search for FTB signals in")
days            = input(title="Days To Trade", defval="13457", group=g_filter, tooltip="Which days to trade this strategy on (Monday & Friday disabled by default)")
useRsiFilter    = input(title="RSI OB/OS?", type=input.bool, defval=true, group=g_filter, tooltip="If true then the RSI must be considered overbought before a signal is valid")
useCloseFilter  = input(title="Previous Bar Must Be Bullish?", type=input.bool, defval=false, group=g_filter, tooltip="If true then the previous bar must have closed bullish")
useHighFilter   = input(title="High Filter", type=input.bool, defval=false, group=g_filter, tooltip="If true then the signal bar must be the highest bar over X bars")
highLookback    = input(title="High Lookback", type=input.integer, defval=10, group=g_filter, tooltip="This is for setting the High Filter lookback distance")
fib             = input(title="Candle Close %", defval=0.5, group=g_filter, tooltip="For identifying shooting star candles (0.5 = must close <= 50% mark of candle size)")
rsiLen          = input(title="RSI Length", type=input.integer, defval=3, group=g_filter, tooltip="RSI length")
rsiOB           = input(title="RSI OB", type=input.float, defval=70.0, group=g_filter, tooltip="RSI overbought threshold")
// PineConnector Settings
var g_pc        = "PineConnector Settings"
pc_id           = input(title="License ID", defval="YOUR_ID", type=input.string, group=g_pc, tooltip="This is your PineConnector license ID")
pc_risk         = input(title="Risk Per Trade", defval=1, step=0.5, type=input.float, group=g_pc, tooltip="This is how much to risk per trade (% of balance or lots)")
pc_prefix       = input(title="MetaTrader Prefix", defval="", type=input.string, group=g_pc, tooltip="This is your broker's MetaTrader symbol prefix")
pc_suffix       = input(title="MetaTrader Suffix", defval="", type=input.string, group=g_pc, tooltip="This is your broker's MetaTrader symbol suffix")
pc_spread       = input(title="Spread", defval=0.5, type=input.float, group=g_pc, tooltip="Enter your average spread for this pair (used for offsetting limit order)")
pc_limit        = input(title="Use Limit Order?", defval=true, type=input.bool, group=g_pc, tooltip="If true a limit order will be used, if false a market order will be used")

// Generate PineConnector alert string
var symbol = pc_prefix + syminfo.ticker + pc_suffix
var limit = pc_limit ? "limit" : ""
pc_entry_alert(direction, sl, tp) =>
    price = pc_limit ? "price=" + tostring(pc_spread) + "," : ""
    pc_id + "," + direction + limit + "," + symbol + "," + price + "sl=" + tostring(sl) + ",tp=" + tostring(tp) + ",risk=" + tostring(pc_risk)

// Get RSI filter
rsiValue = rsi(close, rsiLen)
rsiFilter = not useRsiFilter or rsiValue >= rsiOB

// Check high & close filter
highFilter = not useHighFilter or high == highest(high, highLookback)
closeFilter = not useCloseFilter or close[1] > open[1]

// InSession() determines if a price bar falls inside the specified session
inSession(sess) => na(time(timeframe.period, sess + ":" + days)) == false

// Calculate 50% mark of candle size
bearFib = (high - low) * fib + low

// Check filters
filters = inSession(timezone) and closeFilter and high > high[1] and rsiFilter and highFilter and open != close

// Detect valid shooting star pinbar pattern
var takenTradeAlready = false
star = true

// Calculate stops & targets
shortStopPrice = high + (syminfo.mintick * pips * 10)
shortStopDistance = shortStopPrice - close
shortTargetPrice = close - (shortStopDistance * rr)

// Save stops & targets for the current trade
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0

// If we detect a valid shooting star, save our stops & targets, enter short and generate alert
if star and barstate.isconfirmed
    tradeStopPrice := shortStopPrice
    tradeTargetPrice := shortTargetPrice
    takenTradeAlready := true
    alertString = pc_entry_alert("sell", tradeStopPrice, tradeTargetPrice)
    alert(alertString, alert.freq_once_per_bar_close)
    strategy.entry(id="Short", long=strategy.short, when=strategy.position_size == 0, comment=alertString)

// If we have exited the FTB session then reset our takenTradeAlready flag for the next session
if not inSession(timezone) and inSession(timezone)[1]
    takenTradeAlready := false
    
// If price has exceeded target then cancel limit order if it's still active
if pc_limit and low <= tradeTargetPrice and strategy.position_size == 0
    alert(pc_id + ",cancelshort," + symbol)
    tradeTargetPrice := na

// Draw stops & targets
plot(star ? tradeStopPrice : na, color=color.red, style=plot.style_linebr, title="SL")
plot(star ? shortTargetPrice : na, color=color.green, style=plot.style_linebr, title="TP")
// Draw short signals
plotshape(star ? 1 : na, style=shape.triangledown, color=color.red)
// Change background color to highlight detection zone
bgcolor(color=inSession(timezone) ? color.new(color.red,80) : na, title="Session")

// Exit trade whenever our stop or target is hit
strategy.exit(id="Short Exit", from_entry="Short", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size != 0)

Больше