ডুয়াল ইএমএ ক্রসওভার কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০২-২২ ১৬ঃ১৮ঃ৩৯
ট্যাগঃ

img

সারসংক্ষেপ

ডুয়াল ইএমএ ক্রসওভার কৌশল একটি পরিমাণগত ট্রেডিং কৌশল যা বিভিন্ন সময়ের সাথে দুটি ইএমএ লাইনের ক্রসওভারের উপর ভিত্তি করে অবস্থানগুলি খুলতে এবং বন্ধ করে। এই কৌশলটি সহজ, কার্যকর, সহজেই বোঝা যায় এবং সাধারণত পরিমাণগত ট্রেডিংয়ে ব্যবহৃত হয়।

কৌশলগত যুক্তি

কৌশলটি দুটি ইএমএ লাইন ব্যবহার করে, একটি হ'ল দ্রুত লাইন হিসাবে 25 পিরিয়ডের ইএমএ লাইন এবং অন্যটি হ'ল ধীর লাইন হিসাবে 50 পিরিয়ডের ইএমএ লাইন। যখন দ্রুত লাইনটি ধীর লাইনের উপরে অতিক্রম করে, তখন দীর্ঘ যান। যখন দ্রুত লাইনটি ধীর লাইনের নীচে অতিক্রম করে, তখন সংক্ষিপ্ত যান।

লং যাওয়ার পর, এন্ট্রি প্রাইসের 2% এ লাভ নিন এবং স্টপ লস এন্ট্রি প্রাইসের 2% এ সেট করুন। যখন দাম লাভ নিন বা স্টপ লস পৌঁছায়, পজিশনটি বন্ধ করুন। শর্ট যাওয়া একই।

এই কৌশলটির মূলটি হ'ল বাজারের প্রবণতা এবং বিপরীতমুখীতা বিচার করতে ইএমএ দ্রুত এবং ধীর রেখাগুলির ক্রসওভার ব্যবহার করা। যখন দ্রুত রেখাটি উপরে অতিক্রম করে, এটি একটি ষাঁড়ের বাজার হিসাবে বিচার করা হয় এবং দীর্ঘ যায়। যখন দ্রুত রেখাটি নীচে অতিক্রম করে, এটি একটি ভালুকের বাজার হিসাবে বিচার করা হয় এবং শর্ট যায়। লাভ এবং স্টপ লস লাভ এবং নিয়ন্ত্রণ ঝুঁকিতে লক করার জন্য সেট করা হয়।

সুবিধা বিশ্লেষণ

ডুয়াল ইএমএ ক্রসওভার স্ট্র্যাটেজি নিম্নলিখিত সুবিধাগুলি রয়েছেঃ

  1. ধারণাটি স্পষ্ট এবং যুক্তিটি সহজ, বোঝা এবং বাস্তবায়ন করা সহজ।
  2. দ্রুত এবং ধীর রেখা একসাথে কাজ করে মাঝারি এবং স্বল্পমেয়াদী প্রবণতা ধরা।
  3. এটি সময়মত প্রবণতা অনুসরণ করতে পারে এবং বাজারের বাঁক পয়েন্টগুলিকে কাজে লাগাতে পারে।
  4. যুক্তিসঙ্গত লাভ এবং স্টপ লস সেটিং দিয়ে ঝুঁকি নিয়ন্ত্রণ করা হয়।

সাধারণভাবে, এই কৌশলটি বাজারে স্পষ্টভাবে বিচার করে, ইএমএর সুবিধাগুলি ব্যবহার করে এবং ঝুঁকি নিয়ন্ত্রণের সাথে মাঝারি ও স্বল্পমেয়াদী ভাল রিটার্ন অর্জন করে।

ঝুঁকি বিশ্লেষণ

ডুয়াল ইএমএ ক্রসওভারের কৌশলটিতে কিছু ঝুঁকি রয়েছেঃ

  1. বিপুল বাজারের ওঠানামা হলে, ইএমএ ক্রসওভার সংকেতগুলি ভুল হতে পারে, ভুল মূল্যায়নের সম্ভাবনা রয়েছে।
  2. অযৌক্তিক লাভ এবং স্টপ লস পয়েন্টগুলি বড় পদক্ষেপগুলি মিস করতে পারে বা বৃহত্তর ক্ষতি গ্রহণ করতে পারে।
  3. ট্রেডিং ফি এবং স্লিপজের প্রভাবও উপেক্ষা করা যাবে না।

এই ঝুঁকিগুলি নিম্নলিখিত উপায়ে অপ্টিমাইজ করা এবং সমাধান করা যেতে পারেঃ

  1. বাজারকে মূল্যায়ন করার জন্য অন্যান্য সূচককে একত্রিত করুন এবং EMA ক্রসওভার সংকেতগুলি ভুলভাবে মূল্যায়ন করা এড়ান।
  2. রিটার্ন এবং ঝুঁকির মধ্যে ভারসাম্য বজায় রাখার জন্য লাভ এবং স্টপ লস পয়েন্টগুলি পরীক্ষা করুন এবং অনুকূল করুন।
  3. কম ফি সহ ট্রেডিং প্ল্যাটফর্ম বেছে নিন এবং যথাযথভাবে পজিশনের আকার বাড়ান।

অপ্টিমাইজেশান নির্দেশাবলী

এই কৌশলটির মূল অপ্টিমাইজেশান দিকগুলির মধ্যে রয়েছেঃ

  1. সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে পেতে EMA সময়ের পরামিতিগুলি অপ্টিমাইজ করুন।
  2. একটি ট্রেডিং সংমিশ্রণ গঠনের জন্য এবং সঠিকতা উন্নত করার জন্য বিচার করার জন্য অন্যান্য সূচক বৃদ্ধি করুন।
  3. গতিশীলভাবে লাভ এবং স্টপ লস পয়েন্টগুলি সামঞ্জস্য করুন। উদাহরণস্বরূপ, যখন ক্ষতি একটি নির্দিষ্ট স্তরে পৌঁছে যায়, তখন স্টপ লস পয়েন্টটি প্রসারিত করুন এবং যখন লাভ একটি নির্দিষ্ট স্তরে পৌঁছে যায়, তখন লাভের পয়েন্টটি সরান।
  4. দিকনির্দেশমূলক ট্রেডিংয়ের জন্য ষাঁড় বা ভালুকের বাজারকে আলাদা করুন।

এই অপ্টিমাইজেশানগুলি কৌশলটিকে সহজ এবং পরিষ্কার রেখে রিটার্ন এবং জয়ের হারগুলি উন্নত করতে পারে।

সংক্ষিপ্তসার

সংক্ষেপে, ডুয়াল ইএমএ ক্রসওভার কৌশল একটি খুব ব্যবহারিক পরিমাণগত ট্রেডিং কৌশল। এটি বোঝা এবং বাস্তবায়ন করা সহজ, এবং কার্যকরভাবে বাজারের প্রবণতা ক্যাপচার করে। একই সময়ে, এটির অপ্টিমাইজেশনের জন্য জায়গা রয়েছে। প্যারামিটার টিউনিং এবং সংমিশ্রণের মাধ্যমে রিটার্নের হারের আরও উন্নতি অর্জন করা যেতে পারে। এই কৌশলটির সরলতা এবং সরলতা বিনিয়োগকারীদের জন্য শিখতে এবং প্রয়োগ করার মতো।


/*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")

আরো