Chiến lược này sử dụng sự chéo chéo của trung bình chuyển động theo cấp số nhân 20 ngày và 55 ngày (EMA) để tạo ra tín hiệu giao dịch. Một tín hiệu mua được kích hoạt khi EMA ngắn hạn vượt qua EMA dài hạn, và một tín hiệu bán được kích hoạt khi điều ngược lại xảy ra. Chiến lược cũng giới thiệu giao dịch đòn bẩy, làm tăng cả lợi nhuận tiềm năng và rủi ro. Ngoài ra, chiến lược bao gồm một hạn chế có điều kiện chỉ cho phép nhập vào vị trí khi giá chạm vào EMA ngắn hạn sau khi chéo chéo, để giảm rủi ro tín hiệu sai. Cuối cùng, người dùng có tùy chọn sử dụng trung bình chuyển động đơn giản (SMA) thay vì EMA.
Chiến lược này kết hợp chuyển động trung bình chéo và giao dịch đòn bẩy để nắm bắt xu hướng thị trường trong khi khuếch đại lợi nhuận. Tuy nhiên, đòn bẩy cũng mang lại rủi ro cao và cần được sử dụng cẩn thận. Ngoài ra, có không gian tối ưu hóa trong chiến lược này, có thể đạt được bằng cách giới thiệu nhiều chỉ số hơn, điều chỉnh các tham số năng động, vv. Nhìn chung, chiến lược này phù hợp với các nhà giao dịch theo đuổi lợi nhuận cao và có thể chịu rủi ro cao.
/*backtest start: 2024-03-01 00:00:00 end: 2024-03-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover Strategy with Leverage, Conditional Entry, and MA Option", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Inputs for backtesting period startDate = input(defval=timestamp("2023-01-01"), title="Start Date") endDate = input(defval=timestamp("2024-04-028"), title="End Date") // Input for leverage multiplier leverage = input.float(3.0, title="Leverage Multiplier", minval=1.0, maxval=10.0, step=0.1) // Input for choosing between EMA and MA useEMA = input.bool(true, title="Use EMA (true) or MA (false)?") // Input source and lengths for MAs src = close ema1_length = input.int(20, title='EMA/MA-1 Length') ema2_length = input.int(55, title='EMA/MA-2 Length') // Calculate the MAs based on user selection pema1 = useEMA ? ta.ema(src, ema1_length) : ta.sma(src, ema1_length) pema2 = useEMA ? ta.ema(src, ema2_length) : ta.sma(src, ema2_length) // Tracking the crossover condition for strategy entry crossedAbove = ta.crossover(pema1, pema2) // Define a variable to track if a valid entry condition has been met var bool readyToEnter = false // Check for MA crossover and update readyToEnter if (crossedAbove) readyToEnter := true // Entry condition: Enter when price touches MA-1 after the crossover // and (low <= pema1 and high >= pema1) entryCondition = readyToEnter // Reset readyToEnter after entry if (entryCondition) readyToEnter := false // Exit condition: Price crosses under MA-1 exitCondition = ta.crossunder(pema1, pema2) // Check if the current bar's time is within the specified period inBacktestPeriod = true // Execute trade logic only within the specified date range and apply leverage to position sizing if (inBacktestPeriod) if (entryCondition) strategy.entry("Long", strategy.long, qty=strategy.equity * leverage / close) if (exitCondition) strategy.close("Long") // Plotting the MAs for visual reference ema1_color = pema1 > pema2 ? color.red : color.green ema2_color = pema1 > pema2 ? color.red : color.green plot(pema1, color=ema1_color, style=plot.style_line, linewidth=1, title='EMA/MA-1') plot(pema2, color=ema2_color, style=plot.style_line, linewidth=1, title='EMA/MA-2')