
Chiến lược theo dõi thị trường gấu là một chiến lược giao dịch ngoại hối được thiết kế để nắm bắt mô hình hành vi điển hình của EUR / USD khi thị trường châu Âu mở cửa. Chiến lược này sử dụng các đặc điểm của đồng euro bị mắc kẹt trong thị trường châu Âu, do đó bị buộc phải phá vỡ, để thiết lập vị trí làm trắng. Cụ thể, chiến lược này sẽ xem xét các tín hiệu lọc chỉ số như RSI sau khi phát hiện đường K 1 giờ của EUR / USD có hình dạng quay lưng quay lưng (ngôi sao hoặc con thỏ bắn), và một khi xác nhận được điều kiện, nó sẽ làm trắng một cách dứt khoát, đặt vị trí dừng lỗ ở trên điểm cao của quay lưng, và mục tiêu lợi nhuận được thiết lập dựa trên tỷ lệ lợi nhuận rủi ro chấp nhận được.
Logic giao dịch cốt lõi của việc theo dõi chiến lược thị trường gấu dựa trên giả định sau: Trong thời gian mở cửa thị trường châu Âu / Luân Đôn, các nhà giao dịch và thuật toán làm nhiều đồng euro sẽ đẩy giá EUR / USD lên. Nhưng nếu sau đó giá không thể tiếp tục tăng hoặc có dấu hiệu giảm, những người làm nhiều sẽ bị mắc kẹt.
Chiến lược này chính là sử dụng lý thuyết thị trường gấu này để nắm bắt sự sụt giảm ngắn hạn. Cụ thể, nó sẽ tìm kiếm tín hiệu nén hình dạng đảo ngược trên đường K 1 giờ trong múi giờ châu Âu (ví dụ: 2am-7am).
Để xác minh thêm tín hiệu, chiến lược này sẽ kiểm tra các điều kiện lọc sau:
Sau khi đáp ứng tất cả các điều kiện lọc, chiến lược sẽ làm trống khi quay vòng và đóng cửa, đặt lệnh dừng trên điểm cao nhất và định vị lợi nhuận mục tiêu dựa trên tỷ lệ lợi nhuận rủi ro chấp nhận được (tỷ lệ lợi nhuận rủi ro mặc định là 1 x 1).
Cần lưu ý rằng chiến lược này chỉ hoạt động trong múi giờ châu Âu, và nếu giá rời khỏi múi giờ châu Âu, nó sẽ đặt lại trạng thái và chờ thời gian giao dịch múi giờ tiếp theo.
Đây là một chiến lược ngắn hạn đơn giản nhưng thực tế. Những lợi thế chính là:
Nhìn chung, theo dõi thị trường gấu là một chiến lược short-line arbitrage ban đêm, một lựa chọn tốt cho cả tính ổn định và tính thực tế của nó.
Mặc dù chiến lược này có một số ưu điểm, nhưng giao dịch bất kỳ sản phẩm tài chính nào cũng có rủi ro, bao gồm các rủi ro chính như:
Các biện pháp để đối phó với những rủi ro trên là:
Với sự đơn giản của chiến lược này và những rủi ro tiềm ẩn, đây là những hướng tối ưu hóa có thể được xem xét trong tương lai:
Chiến lược theo dõi thị trường gấu là một chiến lược giảm giá ngắn hạn đơn giản, có thể kiểm soát rủi ro giao dịch. Nó đạt được lợi nhuận ổn định bằng cách nắm bắt các điều chỉnh ngắn hạn do hiện tượng mạo hiểm đa đầu của đồng euro. Chiến lược này dễ hiểu và tối ưu hóa, là lựa chọn lý tưởng cho giao dịch mạo hiểm ban đêm. Tất nhiên, giao dịch bất kỳ sản phẩm tài chính nào cũng có rủi ro, cần điều chỉnh tham số và tối ưu hóa thích hợp để thích ứng với môi trường thị trường thay đổi.
/*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)