Chiến lược này là một hệ thống giao dịch tự động dựa trên chỉ số dòng tiền (MFI), chủ yếu được thiết kế để nắm bắt các cơ hội đảo ngược tiềm năng bằng cách xác định hành vi tài sản trong các khu vực quá bán. Cơ chế cốt lõi tạo ra tín hiệu mua khi chỉ số MFI phục hồi từ khu vực quá bán (thất định dưới 20), sử dụng các lệnh giới hạn, dừng lỗ và cơ chế lấy lợi nhuận để quản lý rủi ro và lợi nhuận giao dịch.
Chiến lược hoạt động dựa trên các bước chính sau:
Đây là một chiến lược giao dịch tự động được thiết kế tốt, rõ ràng về mặt logic. Thông qua việc sử dụng linh hoạt chỉ số MFI, kết hợp với các cơ chế quản lý đơn đặt hàng toàn diện, nó có hiệu quả nắm bắt sự phục hồi của thị trường sau các điều kiện bán quá mức. Khả năng cấu hình cao của chiến lược tạo điều kiện tối ưu hóa cho các môi trường thị trường khác nhau. Mặc dù có một số rủi ro nhất định, chúng có thể được giải quyết thông qua các hướng tối ưu hóa được đề xuất để tăng cường sự ổn định và lợi nhuận của chiến lược.
/*backtest start: 2024-11-04 00:00:00 end: 2024-12-04 00:00:00 period: 3h basePeriod: 3h 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/ // © traderhub //@version=5 strategy("MFI Strategy with Oversold Zone Exit and Averaging", overlay=true) // Strategy parameters mfiPeriod = input.int(title="MFI Period", defval=14) // Period for calculating MFI mfiOS = input.float(title="MFI Oversold Level", defval=20.0) // Oversold level for MFI longEntryPercentage = input.float(title="Long Entry Percentage (%)", minval=0.0, step=0.1, defval=0.1) // Percentage for the buy limit order stopLossPercentage = input.float(title="Stop Loss Percentage (%)", minval=0.0, step=0.1, defval=1.0) // Percentage for the stop-loss exitGainPercentage = input.float(title="Exit Gain Percentage (%)", minval=0.0, step=0.1, defval=1.0) // Percentage gain for the take-profit cancelAfterBars = input.int(title="Cancel Order After # Bars", minval=1, defval=5) // Cancel order after a certain number of bars // Calculate MFI mfi = ta.mfi(close, mfiPeriod) // MFI with specified period // Variables for tracking state var bool inOversoldZone = false // Flag for being in the oversold zone var float longEntryPrice = na // Price for long entry var int barsSinceEntryOrder = na // Counter for bars after placing an order // Define being in the oversold zone if (mfi < mfiOS) inOversoldZone := true // Entered oversold zone // Condition for exiting the oversold zone and placing a limit order if (inOversoldZone and mfi > mfiOS) inOversoldZone := false // Leaving the oversold zone longEntryPrice := close * (1 - longEntryPercentage / 100) // Calculate limit price for entry strategy.entry("Long Entry", strategy.long, limit=longEntryPrice) // Place a limit order barsSinceEntryOrder := 0 // Reset counter for bars after placing the order // Increase the bar counter if the order has not yet been filled if (not na(barsSinceEntryOrder)) barsSinceEntryOrder += 1 // Cancel order if it hasn’t been filled within the specified number of bars if (not na(barsSinceEntryOrder) and barsSinceEntryOrder >= cancelAfterBars and strategy.position_size == 0) strategy.cancel("Long Entry") barsSinceEntryOrder := na // Reset bar counter // Set stop-loss and take-profit for filled positions if (strategy.position_size > 0) stopLossPrice = longEntryPrice * (1 - stopLossPercentage / 100) // Calculate stop-loss level takeProfitPrice = longEntryPrice * (1 + exitGainPercentage / 100) // Calculate take-profit level strategy.exit("Exit Long", from_entry="Long Entry", limit=takeProfitPrice, stop=stopLossPrice) // Visualize oversold and overbought zones bgcolor(mfi < mfiOS ? color.new(color.green, 90) : na) // Background in oversold zone plot(mfi, title="MFI", color=color.blue) // MFI plot hline(mfiOS, "Oversold Level", color=color.red) // Oversold level line