
A estratégia de rastreamento de mercado de urso é uma estratégia de negociação de divisas que foi projetada para capturar o padrão de comportamento típico do EUR/USD na abertura do mercado europeu. A estratégia utiliza as características do bloqueio do EUR/USD durante a abertura do mercado europeu, forçando a liquidação.
A lógica de negociação central para acompanhar a estratégia de mercado em baixa baseia-se na seguinte hipótese: os comerciantes e os algoritmos que fazem mais euros durante a abertura de mercado na Europa/Londres impulsionam o preço do EUR/USD. Mas, se os preços não puderem continuar a subir ou se houver sinais de queda, esses operadores ficarão presos. Então, quando os preços começarem a se corrigir, eles serão forçados a liquidar o excesso, aumentando a queda.
A estratégia usa essa teoria do mercado de baixa para capturar a queda de curto prazo. Concretamente, ela procura um sinal de queda de forma invertida na linha K de 1 hora no fuso horário europeu (por exemplo, 2am-7am). O critério de avaliação para um sinal de queda de forma invertida aqui é: o preço de fechamento parcial da unidade de queda é inferior ao preço de abertura e o preço de fechamento não excede 0,5 vezes o intervalo de flutuação de queda geral (ou seja, o preço de fechamento está próximo do ponto mais baixo da queda).
Quando ocorrem tais reversões, os multi-atores correm o risco de serem presos. Para verificar ainda mais os sinais, a estratégia também verifica as seguintes condições de filtragem:
Após satisfazer todas as condições de filtragem, a estratégia fica em branco no encerramento da inversa, com o stop loss acima do ponto mais alto do acúmulo, e o lucro alvo é baseado na taxa de retorno de risco aceitável (a taxa de retorno de risco padrão é de 1 em 1).
Note-se que a estratégia só é ativa no fuso horário europeu e, se o preço sair do fuso horário europeu, será reiniciado para aguardar o próximo horário de negociação.
Esta é uma estratégia simples, mas prática, de curto prazo. As principais vantagens são:
No geral, a estratégia de rastreamento de mercados em baixa como uma estratégia de arbitragem noturna de curta duração é uma boa opção por sua estabilidade e praticidade.
Apesar de ter algumas vantagens, a estratégia envolve riscos para a negociação de qualquer produto financeiro, incluindo:
Para responder a esses riscos, os seguintes pontos são indicados:
Considerando a simplicidade da estratégia e os riscos potenciais, a seguir estão algumas orientações de otimização a serem consideradas no futuro:
A estratégia de acompanhamento de um mercado de ações é uma estratégia de curto prazo de curto prazo simples, com risco de negociação controlado. Ela capta o ajuste de curto prazo causado pelo fenômeno de arbitragem múltipla do euro para obter lucros estáveis. A estratégia é fácil de entender e otimizar e é a opção ideal para negociação de arbitragem noturna.
/*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)