وسائل لوڈ ہو رہے ہیں... لوڈنگ...

دوہری EMA کراس اوور حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-02-22 16:18:39
ٹیگز:

img

جائزہ

ڈبل ای ایم اے کراس اوور حکمت عملی ایک مقداری تجارتی حکمت عملی ہے جو مختلف ادوار کے ساتھ دو ای ایم اے لائنوں کے کراس اوور پر مبنی پوزیشنوں کو کھولتی اور بند کرتی ہے۔ یہ حکمت عملی آسان ، موثر ، سمجھنے میں آسان ہے ، اور عام طور پر مقداری تجارت میں استعمال ہوتی ہے۔

حکمت عملی منطق

اس حکمت عملی میں دو ای ایم اے لائنیں استعمال کی جاتی ہیں ، ایک تیز لائن کے طور پر 25 پیریڈ ای ایم اے لائن ہے ، اور دوسرا سست لائن کے طور پر 50 پیریڈ ای ایم اے لائن ہے۔ جب تیز لائن سست لائن سے اوپر سے گزرتی ہے تو ، طویل ہوجائیں۔ جب تیز لائن سست لائن سے نیچے سے گزرتی ہے تو ، مختصر ہوجائیں۔

طویل عرصے سے جانے کے بعد ، منافع حاصل کرنے کے لئے لاگ ان کی قیمت کے 2٪ اور اسٹاپ نقصان کو لاگ ان کی قیمت کے 2٪ پر مقرر کریں۔ جب قیمت منافع حاصل کرنے یا اسٹاپ نقصان تک پہنچ جاتی ہے تو ، پوزیشن بند کریں۔ مختصر جانا ایک ہی ہے۔

اس حکمت عملی کا بنیادی مقصد مارکیٹ کے رجحانات اور الٹ پلٹ کا فیصلہ کرنے کے لئے ای ایم اے کی تیز اور سست لائنوں کے کراس اوور کا استعمال کرنا ہے۔ جب تیز لائن اوپر سے گزرتی ہے تو ، اسے بیل مارکیٹ کے طور پر سمجھا جاتا ہے اور طویل ہوجاتا ہے۔ جب تیز لائن نیچے سے گزرتی ہے تو ، اسے ریچھ مارکیٹ کے طور پر سمجھا جاتا ہے اور مختصر ہوجاتا ہے۔ منافع حاصل کرنے اور نقصان کو روکنے کے لئے منافع میں مقفل اور خطرات پر قابو پانے کے لئے مقرر کیا جاتا ہے۔

فوائد کا تجزیہ

دوہری ای ایم اے کراس اوور حکمت عملی کے مندرجہ ذیل فوائد ہیں:

  1. خیال واضح ہے اور منطق سادہ ہے، سمجھنے اور لاگو کرنے میں آسان ہے۔
  2. تیز اور سست لائنیں مل کر کام کرتی ہیں تاکہ درمیانی اور قلیل مدتی رجحانات کو پکڑ سکیں۔
  3. یہ بروقت انداز میں رجحان کی پیروی کرسکتا ہے اور مارکیٹ کے موڑ کے مقامات کو پکڑ سکتا ہے۔
  4. خطرہ کنٹرول مناسب منافع لینے اور سٹاپ نقصان کی ترتیبات کے ساتھ جگہ میں ہے.

عام طور پر، یہ حکمت عملی مارکیٹ کو واضح طور پر اندازہ کرتی ہے، خود EMA کے فوائد کا استعمال کرتی ہے، اور خطرات کو کنٹرول کرتے ہوئے درمیانی اور قلیل مدتی واپسی حاصل کرتی ہے.

خطرے کا تجزیہ

ڈبل ای ایم اے کراس اوور حکمت عملی میں بھی کچھ خطرات ہیں:

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

مزید