ডুয়াল ইএমএ ক্রসওভার কৌশল একটি পরিমাণগত ট্রেডিং কৌশল যা বিভিন্ন সময়ের সাথে দুটি ইএমএ লাইনের ক্রসওভারের উপর ভিত্তি করে অবস্থানগুলি খুলতে এবং বন্ধ করে। এই কৌশলটি সহজ, কার্যকর, সহজেই বোঝা যায় এবং সাধারণত পরিমাণগত ট্রেডিংয়ে ব্যবহৃত হয়।
কৌশলটি দুটি ইএমএ লাইন ব্যবহার করে, একটি হ'ল দ্রুত লাইন হিসাবে 25 পিরিয়ডের ইএমএ লাইন এবং অন্যটি হ'ল ধীর লাইন হিসাবে 50 পিরিয়ডের ইএমএ লাইন। যখন দ্রুত লাইনটি ধীর লাইনের উপরে অতিক্রম করে, তখন দীর্ঘ যান। যখন দ্রুত লাইনটি ধীর লাইনের নীচে অতিক্রম করে, তখন সংক্ষিপ্ত যান।
লং যাওয়ার পর, এন্ট্রি প্রাইসের 2% এ লাভ নিন এবং স্টপ লস এন্ট্রি প্রাইসের 2% এ সেট করুন। যখন দাম লাভ নিন বা স্টপ লস পৌঁছায়, পজিশনটি বন্ধ করুন। শর্ট যাওয়া একই।
এই কৌশলটির মূলটি হ'ল বাজারের প্রবণতা এবং বিপরীতমুখীতা বিচার করতে ইএমএ দ্রুত এবং ধীর রেখাগুলির ক্রসওভার ব্যবহার করা। যখন দ্রুত রেখাটি উপরে অতিক্রম করে, এটি একটি ষাঁড়ের বাজার হিসাবে বিচার করা হয় এবং দীর্ঘ যায়। যখন দ্রুত রেখাটি নীচে অতিক্রম করে, এটি একটি ভালুকের বাজার হিসাবে বিচার করা হয় এবং শর্ট যায়। লাভ এবং স্টপ লস লাভ এবং নিয়ন্ত্রণ ঝুঁকিতে লক করার জন্য সেট করা হয়।
ডুয়াল ইএমএ ক্রসওভার স্ট্র্যাটেজি নিম্নলিখিত সুবিধাগুলি রয়েছেঃ
সাধারণভাবে, এই কৌশলটি বাজারে স্পষ্টভাবে বিচার করে, ইএমএর সুবিধাগুলি ব্যবহার করে এবং ঝুঁকি নিয়ন্ত্রণের সাথে মাঝারি ও স্বল্পমেয়াদী ভাল রিটার্ন অর্জন করে।
ডুয়াল ইএমএ ক্রসওভারের কৌশলটিতে কিছু ঝুঁকি রয়েছেঃ
এই ঝুঁকিগুলি নিম্নলিখিত উপায়ে অপ্টিমাইজ করা এবং সমাধান করা যেতে পারেঃ
এই কৌশলটির মূল অপ্টিমাইজেশান দিকগুলির মধ্যে রয়েছেঃ
এই অপ্টিমাইজেশানগুলি কৌশলটিকে সহজ এবং পরিষ্কার রেখে রিটার্ন এবং জয়ের হারগুলি উন্নত করতে পারে।
সংক্ষেপে, ডুয়াল ইএমএ ক্রসওভার কৌশল একটি খুব ব্যবহারিক পরিমাণগত ট্রেডিং কৌশল। এটি বোঝা এবং বাস্তবায়ন করা সহজ, এবং কার্যকরভাবে বাজারের প্রবণতা ক্যাপচার করে। একই সময়ে, এটির অপ্টিমাইজেশনের জন্য জায়গা রয়েছে। প্যারামিটার টিউনিং এবং সংমিশ্রণের মাধ্যমে রিটার্নের হারের আরও উন্নতি অর্জন করা যেতে পারে। এই কৌশলটির সরলতা এবং সরলতা বিনিয়োগকারীদের জন্য শিখতে এবং প্রয়োগ করার মতো।
/*backtest start: 2024-01-22 00:00:00 end: 2024-02-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // SEMA-X(SEMA CROSS) [AB] : Simple EMA cross strategy Alert & Backtest // 1. 2 EMA cross // 2. Next candle entry // 3. TP & SL //@version=5 strategy("SEMA-X", "SEMA-X", overlay=false, margin_long=1, initial_capital=1000000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, slippage=3) //****************************************************************************// // Input //****************************************************************************// // EMA length emaLen25 = input.int(25, "Short", minval=1, confirm=true, group="[EMA]----------", inline="1") emaLen50 = input.int(50, "Long", minval=1, confirm=true, group="[EMA]----------", inline="1") // TP & SL isLong = input.bool(true, "Long - ", confirm=true, group="[TP & SL(%)]----------", inline="1") tpLong = input.float(2, "TP", minval=0, confirm=true, group="[TP & SL(%)]----------", inline="1")*0.01 slLong = input.float(2, "SL", minval=0, confirm=true, group="[TP & SL(%)]----------", inline="1")*0.01 isShort = input.bool(false, "Short - ", confirm=true, group="[TP & SL(%)]----------", inline="2") tpShort = input.float(2, "TP", minval=0, confirm=true, group="[TP & SL(%)]----------", inline="2")*0.01 slShort = input.float(2, "SL", minval=0, confirm=true, group="[TP & SL(%)]----------", inline="2")*0.01 // Backtest period sTime = input(timestamp("0001-01-01"), "Start", group="[Backtest]----------") eTime = input(timestamp("9999-01-01"), "End", group="[Backtest]----------") inDateRange = true periodBg = input.bool(false, "Backtest BGcolor", confirm=true, group="[Backtest]----------", inline="1") bgLong = input.bool(false, "Position BGcolor", confirm=true, group="[Backtest]----------", inline="1") periodBgColor = periodBg and inDateRange ? color.new(color.green, 95) : na bgcolor(periodBgColor, title="Backtest BGcolor") bgColorLong = bgLong and strategy.position_size>0 ? color.new(color.green, 95) : na bgcolor(bgColorLong, title="Position BGcolor") // IRISBOT exchange = input.string("binance", "Exchange", confirm=true, group="[IRISBOT]----------", inline="2", options=["binance", "bybit", "upbit"]) account = input.string("account1", "Account", confirm=true, group="[IRISBOT]----------", inline="2") symbol = input.string("BTC/USDT", "Symbol", confirm=true, group="[IRISBOT]----------", inline="3") strategy = input.string("sema-x", "Strategy", confirm=true, group="[IRISBOT]----------", inline="3") token = input.string("token", "Token", confirm=true, group="[IRISBOT]----------", inline="4") stRatio = input.float(100.0, "Ratio(%)", confirm=true, group="[IRISBOT]----------", inline="5", tooltip="하나의 거래소에서 이 전략을 몇 % 비중으로 투자할 것인가?") * 0.01 leverage = input.float(1, "Leverage", confirm=true, group="[IRISBOT]----------", inline="5") isPlotMsg = input.bool(false, "View alert msg", confirm=true, group="[IRISBOT]----------", inline="6") //****************************************************************************// // Process //****************************************************************************// ema25=ta.ema(close, emaLen25) ema50=ta.ema(close, emaLen50) // Entry condition longCondition = isLong and ta.crossover(ema25, ema50) shortCondition = isShort and ta.crossunder(ema25, ema50) // Entry price var price=0.0 var pricePlot=0.0 if (longCondition or shortCondition) and strategy.position_size == 0 price:=close pricePlot:=price if (strategy.position_size==0) pricePlot:=na // Amount amount = str.tostring(stRatio*100) // IRISBOT alert msg (for auto trading, you can change this for autoview, tvextbot, thanksbot, etc webhookbot) msgLong = '{"exchange":"'+exchange+'","account":"'+account+'","strategy":"'+strategy+'","symbol":"'+symbol+'","type":"market","side":"buy","amount":"'+amount+'%","leverage":"'+str.tostring(leverage)+'","token":"'+token+'"}' msgShort = '{"exchange":"'+exchange+'","account":"'+account+'","strategy":"'+strategy+'","symbol":"'+symbol+'","type":"market","side":"sell","amount":"'+amount+'%","leverage":"'+str.tostring(leverage)+'","token":"'+token+'"}' msgExit = '{"exchange":"'+exchange+'","account":"'+account+'","strategy":"'+strategy+'","symbol":"'+symbol+'","type":"market","side":"close","token":"'+token+'"}' // Entry signal if inDateRange strategy.entry("L", strategy.long, when=longCondition, comment="L", alert_message=msgLong) strategy.entry("S", strategy.short, when=shortCondition, comment="S", alert_message=msgShort) strategy.exit("XL", "L", profit=price*tpLong/syminfo.mintick, loss=price*slLong/syminfo.mintick, comment="X", alert_message=msgExit) strategy.exit("XS", "S", profit=price*tpShort/syminfo.mintick, loss=price*slShort/syminfo.mintick, comment="X", alert_message=msgExit) //****************************************************************************// // Plot //****************************************************************************// // Alert msg plot var msgTable = table.new(position = position.bottom_right, columns = 2, rows = 3, bgcolor = color.new(color.blue, 80), border_width = 1) if isPlotMsg if isLong table.cell(msgTable, 0, 0, "Long", text_halign = text.align_left) table.cell(msgTable, 1, 0, msgLong, text_halign = text.align_left) if isShort table.cell(msgTable, 0, 1, "Short", text_halign = text.align_left, bgcolor=color.new(color.red, 80)) table.cell(msgTable, 1, 1, msgShort, text_halign = text.align_left, bgcolor=color.new(color.red, 80)) if isLong or isShort table.cell(msgTable, 0, 2, "Exit", text_halign = text.align_left, bgcolor=color.new(color.purple, 80)) table.cell(msgTable, 1, 2, msgExit, text_halign = text.align_left, bgcolor=color.new(color.purple, 80)) // EMA e0=plot(ema25, "Short", color.green) e1=plot(ema50, "Long", color.red) fill(e0, e1, ema25>ema50 ? color.new(color.green, 50) : color.new(color.red, 50), "EMA BG") // TP & SL p0=plot(pricePlot, "Entry", color.black, style=plot.style_linebr) p1=plot(pricePlot*(strategy.position_size>0 ? 1+tpLong : 1-tpShort), "TP", color.new(color.green, 50), style=plot.style_linebr) p2=plot(pricePlot*(strategy.position_size>0 ? 1-slLong : 1+slShort), "SL", color.new(color.red, 50), style=plot.style_linebr) fill(p0, p1, color.new(color.green, 80), "TP BG") fill(p0, p2, color.new(color.red, 80), "SL BG")