Chiến lược này tạo ra các tín hiệu giao dịch dựa trên sự chéo chéo giữa các đường trung bình di chuyển nhanh và chậm để xác định xu hướng và điểm nhập thị trường. Khi EMA nhanh vượt qua trên EMA chậm, nó được đánh giá là thị trường đang có xu hướng tăng và một tín hiệu mua được tạo ra. Khi EMA nhanh vượt qua dưới EMA chậm, nó được đánh giá là thị trường đang có xu hướng giảm và một tín hiệu bán được tạo ra. Chiến lược cũng thiết lập dừng lỗ và lấy giá lợi nhuận để quản lý rủi ro.
Chiến lược sử dụng sự chéo chéo giữa EMA nhanh (8 ngày) và EMA chậm (21 ngày) để xác định xu hướng thị trường.
Chiến lược kết hợp các chỉ số động lực và phân tích xu hướng để nắm bắt hiệu quả hướng thị trường và các điểm đảo ngược.
Những lợi thế chính của chiến lược này là:
Tóm lại, chiến lược kết hợp các chỉ số xu hướng và động lực. Thông qua điều chỉnh tham số, nó có thể thích nghi với các môi trường thị trường khác nhau và là một chiến lược giao dịch ngắn hạn tương đối linh hoạt.
Ngoài ra còn có một số rủi ro với chiến lược này:
Để giải quyết những rủi ro này, một số tối ưu hóa có thể được thực hiện:
Vẫn còn nhiều chỗ để tối ưu hóa chiến lược này:
Các biện pháp này có thể cải thiện đáng kể sự ổn định, khả năng thích nghi và lợi nhuận của chiến lược.
Tóm lại, đây là một chiến lược giao dịch ngắn hạn điển hình dựa trên xu hướng theo dõi và dấu hiệu động lực vượt qua. Nó kết hợp logic chéo EMA và dừng lỗ / lấy lợi nhuận để nhanh chóng nắm bắt các cơ hội thị trường theo hướng. Có nhiều chỗ để tối ưu hóa bằng cách giới thiệu các chỉ số hỗ trợ khác và các phương pháp điều chỉnh tham số tự động, có thể làm cho hiệu suất chiến lược ổn định hơn và xuất sắc hơn. Nó phù hợp với các nhà đầu tư có một số hiểu biết về thị trường và sẵn sàng giao dịch thường xuyên.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h 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/ // © TradersPostInc //@version=5 strategy('TradersPost Example MOMO Strategy', overlay=true) startTime = input(defval = timestamp('01 Jan 2021 00:00 +0000'), title = 'Start Time', group = 'Date Range') endTime = input(defval = timestamp('31 Dec 2023 23:59 +0000'), title = 'End Time', group = 'Date Range') timeCondition = true timeConditionEnd = timeCondition[1] and not timeCondition fastEmaLength = input.int(defval = 8, title = 'Fast EMA Length') slowEmaLength = input.int(defval = 21, title = 'Slow EMA Length') sides = input.string(defval = 'Both', title = 'Sides', options = ['Long', 'Short', 'Both', 'None']) fastEma = ta.ema(close, fastEmaLength) slowEma = ta.ema(close, slowEmaLength) isUptrend = fastEma >= slowEma isDowntrend = fastEma <= slowEma trendChanging = ta.cross(fastEma, slowEma) ema105 = request.security(syminfo.tickerid, '30', ta.ema(close, 105)[1], barmerge.gaps_off, barmerge.lookahead_on) ema205 = request.security(syminfo.tickerid, '30', ta.ema(close, 20)[1], barmerge.gaps_off, barmerge.lookahead_on) plot(ema105, linewidth=4, color=color.new(color.purple, 0), editable=true) plot(ema205, linewidth=2, color=color.new(color.purple, 0), editable=true) aa = plot(fastEma, linewidth=3, color=color.new(color.green, 0), editable=true) bb = plot(slowEma, linewidth=3, color=color.new(color.red, 0), editable=true) fill(aa, bb, color=isUptrend ? color.green : color.red, transp=90) tradersPostBuy = trendChanging and isUptrend and timeCondition tradersPostSell = trendChanging and isDowntrend and timeCondition pips = syminfo.pointvalue / syminfo.mintick percentOrPipsInput = input.string('Percent', title='Percent or Pips', options=['Percent', 'Pips']) stopLossLongInput = input.float(defval=0, step=0.01, title='Stop Loss Long', minval=0) stopLossShortInput = input.float(defval=0, step=0.01, title='Stop Loss Short', minval=0) takeProfitLongInput = input.float(defval=0, step=0.01, title='Target Profit Long', minval=0) takeProfitShortInput = input.float(defval=0, step=0.01, title='Target Profit Short', minval=0) stopLossPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (stopLossLongInput / 100) * pips stopLossPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (stopLossShortInput / 100) * pips takeProfitPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (takeProfitLongInput / 100) * pips takeProfitPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (takeProfitShortInput / 100) * pips takeProfitALong = takeProfitLongInput > 0 ? takeProfitLongInput : na takeProfitBLong = takeProfitPriceLong > 0 ? takeProfitPriceLong : na takeProfitAShort = takeProfitShortInput > 0 ? takeProfitShortInput : na takeProfitBShort = takeProfitPriceShort > 0 ? takeProfitPriceShort : na stopLossALong = stopLossLongInput > 0 ? stopLossLongInput : na stopLossBLong = stopLossPriceLong > 0 ? stopLossPriceLong : na stopLossAShort = stopLossShortInput > 0 ? stopLossShortInput : na stopLossBShort = stopLossPriceShort > 0 ? stopLossPriceShort : na takeProfitLong = percentOrPipsInput == 'Pips' ? takeProfitALong : takeProfitBLong stopLossLong = percentOrPipsInput == 'Pips' ? stopLossALong : stopLossBLong takeProfitShort = percentOrPipsInput == 'Pips' ? takeProfitAShort : takeProfitBShort stopLossShort = percentOrPipsInput == 'Pips' ? stopLossAShort : stopLossBShort buyAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "buy", "price": ' + str.tostring(close) + '}' sellAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "sell", "price": ' + str.tostring(close) + '}' exitLongAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}' exitShortAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}' if (sides != "None") if tradersPostBuy strategy.entry('Long', strategy.long, when = sides != 'Short', alert_message = buyAlertMessage) strategy.close('Short', when = sides == "Short" and timeCondition, alert_message = exitShortAlertMessage) if tradersPostSell strategy.entry('Short', strategy.short, when = sides != 'Long', alert_message = sellAlertMessage) strategy.close('Long', when = sides == 'Long', alert_message = exitLongAlertMessage) exitAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit"}' strategy.exit('Exit Long', from_entry = "Long", profit = takeProfitLong, loss = stopLossLong, alert_message = exitAlertMessage) strategy.exit('Exit Short', from_entry = "Short", profit = takeProfitShort, loss = stopLossShort, alert_message = exitAlertMessage) strategy.close_all(when = timeConditionEnd)