MA MACD BB Multi-Indicator Trading Strategy Backtesting Tool là một nền tảng phát triển và kiểm tra lại chiến lược giao dịch định lượng mạnh mẽ. Công cụ hỗ trợ ba chỉ số kỹ thuật thường được sử dụng: Moving Average (MA), Moving Average Convergence Divergence (MACD), và Bollinger Bands (BB). Người dùng có thể linh hoạt chọn một trong số đó làm chỉ số tín hiệu giao dịch chính. Đồng thời, công cụ cũng hỗ trợ cả giao dịch dài và ngắn. Người dùng có thể linh hoạt chọn mua dài hoặc ngắn theo xu hướng thị trường. Về quản lý rủi ro, công cụ cho phép người dùng linh hoạt đặt tỷ lệ vốn của mỗi giao dịch để kiểm soát tốt hơn. Ngoài ra, công cụ cũng cung cấp các chức năng phân tích chỉ số rủi ro chi tiết và tạo tín hiệu để giúp người dùng nắm bắt tốt hơn các cơ hội giao dịch.
Nguyên tắc cốt lõi của chiến lược này là sử dụng ba chỉ số kỹ thuật chung (MA, MACD và BB) để xác định xu hướng thị trường và tín hiệu giao dịch.
Trong giao dịch thực tế, chiến lược tự động tính toán kích thước vị trí của mỗi giao dịch dựa trên hướng giao dịch (dài hoặc ngắn) và cài đặt quản lý vốn được chọn của người dùng, và sau đó thực hiện các hoạt động mở và đóng tương ứng theo tín hiệu.
Để giảm rủi ro trên, người dùng nên thiết lập các tham số chiến lược hợp lý, đánh giá và điều chỉnh các chiến lược thường xuyên và theo dõi chặt chẽ xu hướng thị trường, can thiệp theo cách thủ công khi cần thiết.
Các hướng tối ưu hóa trên chủ yếu tập trung vào việc cải thiện khả năng thích nghi, độ bền, lợi nhuận và kiểm soát rủi ro của chiến lược bằng cách giới thiệu các phương pháp tiên tiến và linh hoạt hơn để liên tục cải thiện và hoàn thiện hiệu suất của chiến lược.
MA MACD BB Multi-Indicator Trading Strategy Backtesting Tool là một công cụ giao dịch định lượng giàu tính năng, linh hoạt và thực tế. Nó nắm bắt các tín hiệu giao dịch thông qua ba chỉ số kỹ thuật phổ biến, đồng thời hỗ trợ cả giao dịch dài và ngắn và quản lý rủi ro linh hoạt, thích nghi với các thị trường và phong cách giao dịch khác nhau. Người dùng có thể sử dụng công cụ này để kiểm tra lại và tối ưu hóa dữ liệu lịch sử, và cũng có thể áp dụng nó cho giao dịch trực tiếp. Mặc dù bất kỳ chiến lược nào cũng phải đối mặt với rủi ro thị trường và rủi ro mô hình, thông qua cài đặt tham số hợp lý, kiểm soát rủi ro nghiêm ngặt và tối ưu hóa và cải tiến liên tục, chiến lược này dự kiến sẽ trở thành một trợ lý mạnh mẽ cho các nhà giao dịch định lượng, tạo ra lợi nhuận ổn định dài hạn cho họ.
/*backtest start: 2023-05-28 00:00:00 end: 2024-06-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Future_Billi0naire_ //@version=5 strategy("MA MACD BB Backtester", overlay=true) //@variable Input for Strategy which_ta = input.string("MA", title="Select Indicator", options=["MACD", "BB", "MA"]) which_camp = input.string("Long", title="Select Long / Short", options=["Short", "Long"]) //@variable Input parameters for Risk Management positionSize = input.float(100.0, title="Each position's capital allocation %", minval=0.0, maxval = 100.0) / 100 //@variable Input parameters for MACD fast_length = input.int(12, title="MACD Fast Length") slow_length = input.int(26, title="MACD Slow Length") signal_smoothing = input.int(9, title="MACD Signal Smoothing") macd_source = input.source(close, title="MACD Source") //@variable Input parameters for Moving Average ma_length = input.int(50, title="Moving Average Length") //@variable Input parameters for Bollinger Bands bb_length = input.int(20, title="Bollinger Bands Length") bb_mult = input.float(2.0, title="Bollinger Bands Multiplier") // Choosing the Strategy int x = na if which_ta == "MA" x := 1 else if which_ta == "MACD" x := 2 else if which_ta == "BB" x := 3 // Calculate MACD and Signal line [macdLine, signalLine, _] = ta.macd(macd_source, fast_length, slow_length, signal_smoothing) // Calculate Moving Average ma = ta.sma(close, ma_length) // Calculate Bollinger Bands basis = ta.sma(close, bb_length) dev = bb_mult * ta.stdev(close, bb_length) upper = basis + dev lower = basis - dev // Plotting MACD and Signal lines plot(x == 2 ? macdLine : na, color=color.blue, title="MACD Line") plot(x == 2 ? signalLine : na, color=color.red, title="Signal Line") // Plotting histogram histogram = macdLine - signalLine plot(x == 2 ? histogram : na, color=color.gray, style=plot.style_histogram, title="MACD Histogram") // Plotting Moving Average plot(x == 1 ? ma : na, color=color.orange, title="Moving Average") // Plotting Bollinger Bands plot(x == 3 ? upper : na, color=color.green, title="Upper Bollinger Band") plot(x == 3 ? lower : na, color=color.red, title="Lower Bollinger Band") plot(x == 3 ? basis : na, color=color.blue, title="Basis Bollinger Band") // Generate buy signals buySignalMACD = ta.crossover(macdLine, signalLine) buySignalMA = ta.crossover(close, ma) buySignalBB = close < lower sellSignalBBExit = close > basis // Generate sell signals sellSignalMACD = ta.crossunder(macdLine, signalLine) sellSignalMA = ta.crossunder(close, ma) sellSignalBB = close > upper buySignalBBExit = close < basis // Plot buy signals on the chart plotshape(series=buySignalMACD and x == 2 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMACD : na, title="Buy Signal MACD", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MACD") plotshape(series=buySignalMA and x == 1 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalMA : na, title="Buy Signal MA", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY MA") plotshape(series=buySignalBB and x == 3 and which_camp=="Long" and strategy.opentrades == 0 ? buySignalBB : na, title="Buy Signal BB", location=location.belowbar, color=color.lime, style=shape.labelup, text="BUY BB") // Plot sell signals on the chart plotshape(series=sellSignalMACD and x == 2 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMACD : na, title="Sell Signal MACD", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MACD") plotshape(series=sellSignalMA and x == 1 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalMA : na, title="Sell Signal MA", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL MA") plotshape(series=sellSignalBB and x == 3 and which_camp=="Short" and strategy.opentrades == 0 ? sellSignalBB : na, title="Sell Signal BB", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL BB") // Calculate stop loss and take profit levels accountSize = strategy.equity positionSizeAmount = accountSize * positionSize // Calculate order size based on stop loss amount orderSize = math.floor(positionSizeAmount / close) // Enter long positions based on buy signals if strategy.opentrades == 0 if (buySignalMACD) and x == 2 and which_camp == "Long" strategy.entry("Buy MACD", strategy.long, qty=orderSize) if (buySignalMA) and x == 1 and which_camp == "Long" strategy.entry("Buy MA", strategy.long, qty=orderSize) if (buySignalBB) and x == 3 and which_camp == "Long" strategy.entry("Buy BB", strategy.long, qty=orderSize) // Enter short positions based on sell signals if strategy.opentrades == 0 if (sellSignalMACD) and x == 2 and which_camp == "Short" strategy.entry("Sell MACD", strategy.short, qty=orderSize) if (sellSignalMA) and x == 1 and which_camp == "Short" strategy.entry("Sell MA", strategy.short, qty=orderSize) if (sellSignalBB) and x == 3 and which_camp == "Short" strategy.entry("Sell BB", strategy.short, qty=orderSize) // Close positions based on exit signals if (sellSignalMACD) and which_camp == "Long" strategy.close("Buy MACD") if (sellSignalMA) and which_camp == "Long" strategy.close("Buy MA") if (sellSignalBBExit) and which_camp == "Long" strategy.close("Buy BB") if (buySignalMACD) and which_camp == "Short" strategy.close("Sell MACD") if (buySignalMA) and which_camp == "Short" strategy.close("Sell MA") if (buySignalBBExit) and which_camp == "Short" strategy.close("Sell BB")