EMA مطلب ریورژن ٹریڈنگ کی حکمت عملی


تخلیق کی تاریخ: 2023-10-26 15:33:50 آخر میں ترمیم کریں: 2023-10-26 15:33:50
کاپی: 2 کلکس کی تعداد: 1006
1
پر توجہ دیں
1617
پیروکار

EMA مطلب ریورژن ٹریڈنگ کی حکمت عملی

جائزہ

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

حکمت عملی کا اصول

یہ حکمت عملی ای ایم اے کو اوسط اشارے کے طور پر استعمال کرتی ہے اور موجودہ قیمت سے ای ایم اے کے فی صد فرق کا حساب لگاتی ہے۔ جب قیمت ای ایم اے سے کافی دور ہوتی ہے (ڈیفالٹ 9٪) ، تو زیادہ پوزیشن کھولی جاتی ہے۔ جب قیمت ای ایم اے کے قریب ہوتی ہے (ڈیفالٹ 1٪) ، تو اس کی صفائی ہوتی ہے۔ پوزیشن کھولی جانے کے بعد ، یہ منافع کو مقفل کرنے کے لئے آپریٹنگ اسٹاپ نقصان کا استعمال کرتا ہے ، اور منافع میں اضافے کے ساتھ اسٹاپ نقصان کی لائن کو آہستہ آہستہ بڑھاتا ہے۔

اس حکمت عملی میں مندرجہ ذیل اجزاء شامل ہیں:

  1. EMA اوسط حساب لگائیں۔ آپ کو ترتیب دینے کی ضرورت ہے: مدت (ڈیفالٹ 200) ، ڈیٹا کا ذریعہ (اختتامی قیمت) ، حساب کتاب (ای ایم اے ، ایس ایم اے ، آر ایم اے ، ڈبلیو ایم اے) ۔

  2. EMA سے موجودہ قیمت کے فی صد فرق کا حساب لگائیں۔ مثبت اور منفی اقدار کے علاج پر توجہ دیں۔

  3. فرق کے تناسب کے مطابق پوزیشن کھولنے زیادہ پوزیشن کھولنے کی حد 9٪ ہے (تخصیص شدہ) ، خالی پوزیشن کھولنے کی حد 9٪ ہے (تخصیص شدہ)

  4. ٹیرف کھولنے کی حمایت کرتا ہے۔ ٹیرف کی سیڑھیوں کی تعداد اور ہر سیڑھی کی ڈگری کو ترتیب دیا جاسکتا ہے۔

  5. پوزیشن کھولنے کے بعد ٹریکنگ سٹاپ شروع ہونے والے نقصان کی حد کو تشکیل دے سکتے ہیں ((ڈیفالٹ منافع 1٪) اور ٹریکنگ کی حد ((ڈیفالٹ 1٪)

  6. فرق کے تناسب کے مطابق فلیٹ پوزیشن 🌸 کثیر پوزیشن فلیٹ پوزیشن کی حد 1٪ ہے ((configurable) ، خالی پوزیشن بھی اسی طرح 🌸

  7. آرڈر منسوخ کرنا۔ جب قیمت دوبارہ ای ایم اے کے قریب آجائے تو آرڈر منسوخ کیا جائے گا۔

  8. کنفیگریٹڈ سٹاپ نقصان فی صد

  9. ریٹرننگ اور ریئل ٹائم ٹرانزیکشن کی حمایت کرتا ہے۔

طاقت کا تجزیہ

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

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

  2. پوزیشن کھولنے ، بند کرنے اور خالی کرنے کے پیرامیٹرز کو مختلف مارکیٹ کے حالات کے مطابق ترتیب دیا جاسکتا ہے۔

  3. اس کے علاوہ، یہ ایک ہی وقت میں کئی بار تعمیر کیا جا سکتا ہے، جس سے ایک ہی وقت میں لاگت کم ہو جاتی ہے.

  4. آپریٹنگ سٹاپ نقصان منافع کو لاک کرنے اور خطرے کا انتظام کرنے کے لئے استعمال کیا جاتا ہے.

  5. زیادہ سے زیادہ اصلاح کی گنجائش ، اوسط لائن پیرامیٹرز کو ایڈجسٹ کرنے یا مختلف حالات کے مطابق پوزیشن کو کھولنے کے ل.

  6. مرکزی دھارے میں شامل پروگرامنگ زبان پائن اسکرپٹ کی حمایت کرتا ہے ، جو براہ راست ٹریڈنگ ویو میں استعمال کیا جاسکتا ہے۔

  7. انٹرویو اور تجزیہ کے لئے آسان گرافکس۔

خطرے کا تجزیہ

اس حکمت عملی میں مندرجہ ذیل خطرات بھی ہیں:

  1. ریٹرننگ ڈیٹا فٹنس کا خطرہ۔ پیرامیٹرز کی اصلاح ممکنہ طور پر ریٹرننگ ڈیٹا کو زیادہ سے زیادہ فٹنس کرسکتی ہے ، اور اس کی اصل کارکردگی پر شک ہے۔

  2. اوسط لائن کی ناکامی کا خطرہ۔ قیمت طویل عرصے تک اوسط لائن سے کافی حد تک دور ہوسکتی ہے ، اور واپس نہیں آسکتی ہے۔

  3. اسٹاپ نقصان کو خطرہ سے دوچار کردیا گیا ہے۔ حالات شدید ہیں ، اور اسٹاپ نقصان کا نقطہ عبور ہوسکتا ہے۔

  4. ٹرانزیکشن کی کثرت اور ٹرانزیکشن فیس کا بوجھ۔

  5. طویل عرصے سے مشاہدے کی ضرورت ہوتی ہے، اور غیر متوقع واقعات بہت زیادہ اثر انداز ہوتے ہیں.

خطرے کا انتظام:

  1. زیادہ سے زیادہ پیرامیٹرز کو ایڈجسٹ کریں ، تاکہ اس بات کو یقینی بنایا جاسکے کہ پیرامیٹرز مستحکم ہوں۔

  2. معقول طور پر تعین کردہ یکساں لکیری دورانیہ ، نہ تو بہت مختصر اور نہ ہی بہت لمبا۔

  3. مناسب طریقے سے اسٹاپ نقصان کی حد کو کم کریں ، تاکہ اس کو روکنے سے بچایا جاسکے۔

  4. مناسب طریقے سے پوزیشن کھولنے کی شرائط میں نرمی اور تجارت کی تعدد کو کم کرنا۔

  5. ہنگامی حالات کے لیے زیادہ سے زیادہ اہداف کے ساتھ زیادہ سے زیادہ لچک پیدا کرنا۔

اصلاح کی سمت

اس حکمت عملی کو بہتر بنانے کے لیے مندرجہ ذیل نکات پر غور کیا جا سکتا ہے۔

  1. فلٹرنگ کی شرائط میں اضافہ کریں ، جیسے ٹریڈنگ حجم ، برن بینڈ ، آر ایس آئی ، وغیرہ ، جعلی سگنل کو کم کریں۔

  2. ڈبل ای ایم اے سسٹم کی طرح مرکب اوسط لائنوں کا اضافہ ، جو تجارت کے امکانات کو بہتر بناتا ہے۔

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

  4. خود کار طریقے سے پیرامیٹرز کو بہتر بنانے کے لئے خود کار طریقے سے بہتر پیرامیٹرز کے مجموعے کو تلاش کرنے کے لئے.

  5. مشین سیکھنے کی پیش گوئی میں اضافہ ، قیمتوں کے اوسط سے دور ہونے کے امکانات کا اندازہ لگانے میں معاون ہے۔

  6. ٹائم فریموں کے مابین تجارت پر غور کریں ، رات کے وقت یا ڈسک سے پہلے کی معلومات کا استعمال کرتے ہوئے پیشگی ترتیب دیں۔

  7. اسٹاک پول کو مربوط کریں ، خود کار طریقے سے اسٹاک کو منتخب کریں اور تجارت کریں ، حکمت عملی کی گنجائش میں اضافہ کریں۔

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
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/
// © jordanfray

//@version=5
strategy(title="EMA Mean Reversion Strategy", overlay=true, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.05, backtest_fill_limits_assumption=2)


// Indenting Classs
indent_1 = " "
indent_2 = "  "
indent_3 = "   "
indent_4 = "    "


// Tooltips
longEntryToolTip = "When the percentage that the price is away from the selected EMA reaches this point, a long postion will open."
shortEntryToolTip = "When the percentage that the price is away from the selected EMA reaches this point, a short postion will open."
closeEntryToolTip = "When the percentage that the price is away from the selected EMA reaches this point, open postion will close."
ladderInToolTip = "Enable this to use the laddering settings below."
cancelEntryToolTip = "When the percentage that the price is away from the selected EMA reaches this point, any unfilled entries will be canceled."

// Group Titles
group_one_title = "EMA Settings"
group_two_title = "Entry Settings"


// Colors
blue = color.new(#00A5FF,0)
lightBlue = color.new(#00A5FF,90)
green = color.new(#2DBD85,0)
gray_80 =  color.new(#7F7F7F,80)
gray_60 =  color.new(#7F7F7F,60)
gray_40 =  color.new(#7F7F7F,40)
white = color.new(#ffffff,0)
red = color.new(#E02A4A,0)
transparent = color.new(#000000,100)


// Strategy Settings
EMAtimeframe = input.timeframe(defval="", title="Timeframe", group=group_one_title)
EMAlength = input.int(defval=200, minval=1, title="Length", group=group_one_title)
EMAtype = input.string(defval="EMA", options = ["EMA", "SMA", "RMA", "WMA"], title="Type", group=group_one_title)
EMAsource = input.source(defval=close, title="Source", group=group_one_title)

openLongEntryAbove = input.float(defval=9, title="Long Position Entry Trigger", tooltip=longEntryToolTip, group=group_two_title)
openEntryEntryAbove = input.float(defval=9, title="Short Position Entry Trigger", tooltip=shortEntryToolTip, group=group_two_title)
closeEntryBelow = input.float(defval=1.0, title="Close Position Trigger", tooltip=closeEntryToolTip, group=group_two_title)
cancelEntryBelow = input.float(defval=4, title="Cancel Unfilled Entries Trigger", tooltip=cancelEntryToolTip, group=group_two_title)

enableLaddering = input.bool(defval=true, title="Ladder Into Positions", tooltip=ladderInToolTip, group=group_two_title)
ladderRungs = input.int(defval=4, minval=2, maxval=4, step=1, title=indent_4+"Ladder Rungs", group=group_two_title)
ladderStep = input.float(defval=.5, title=indent_4+"Ladder Step (%)", step=.1, group=group_two_title)/100
stop_loss_val = input.float(defval=4.0, title="Stop Loss (%)", step=0.1, group=group_two_title)/100
start_trailing_after = input.float(defval=1, title="Start Trailing After (%)", step=0.1, group=group_two_title)/100
trail_behind = input.float(defval=1, title="Trail Behind (%)", step=0.1, group=group_two_title)/100

// Calculate trailing stop values
long_start_trailing_val = strategy.position_avg_price + (strategy.position_avg_price * start_trailing_after)
long_trail_behind_val = close - (strategy.position_avg_price * trail_behind)
long_stop_loss = strategy.position_avg_price * (1.0 - stop_loss_val)
short_start_trailing_val = strategy.position_avg_price - (strategy.position_avg_price * start_trailing_after)
short_trail_behind_val = close + (strategy.position_avg_price * trail_behind)
short_stop_loss = strategy.position_avg_price * (1 + stop_loss_val)


// Calulate EMA
EMA = switch EMAtype
    "EMA" => ta.ema(EMAsource, EMAlength)
    "SMA" => ta.sma(EMAsource, EMAlength)
    "RMA" => ta.rma(EMAsource, EMAlength)
    "WMA" => ta.wma(EMAsource, EMAlength)
    => na
EMA_ = EMAtimeframe == timeframe.period ? EMA : request.security(syminfo.ticker, EMAtimeframe, EMA[1], lookahead = barmerge.lookahead_on)
plot(EMA_, title="EMA", linewidth=2, color=blue, editable=true)

EMA_cloud_upper_band_val = EMA_ + (EMA_ * openLongEntryAbove/100)
EMA_cloud_lower_band_val = EMA_ - (EMA_ * openLongEntryAbove/100)
EMA_cloud_upper_band = plot(EMA_cloud_upper_band_val, title="EMA Cloud Upper Band", color=blue)
EMA_cloud_lower_band = plot(EMA_cloud_lower_band_val, title="EMA Cloud Upper Band", color=blue)
fill(EMA_cloud_upper_band, EMA_cloud_lower_band, editable=false, color=lightBlue)

distance_from_EMA = ((close - EMA_)/close)*100
if distance_from_EMA < 0
    distance_from_EMA := distance_from_EMA * -1

// Calulate Ladder Entries
long_ladder_1_limit_price = close - (close * 1 * ladderStep)
long_ladder_2_limit_price = close - (close * 2 * ladderStep)
long_ladder_3_limit_price = close - (close * 3 * ladderStep)
long_ladder_4_limit_price = close - (close * 4 * ladderStep)

short_ladder_1_limit_price = close + (close * 1 * ladderStep)
short_ladder_2_limit_price = close + (close * 2 * ladderStep)
short_ladder_3_limit_price = close + (close * 3 * ladderStep)
short_ladder_4_limit_price = close + (close * 4 * ladderStep)

var position_qty = strategy.equity/close
if enableLaddering
    position_qty := (strategy.equity/close) / ladderRungs
else
    position_qty := strategy.equity/close
    
plot(position_qty, color=white)
//plot(strategy.equity, color=green)

// Entry Conditions
currently_in_a_postion = strategy.position_size != 0
currently_in_a_long_postion = strategy.position_size > 0
currently_in_a_short_postion = strategy.position_size < 0
average_price = strategy.position_avg_price

bars_since_entry = currently_in_a_postion ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) + 1 : 5
long_run_up = ta.highest(high, bar_index == 0 ? 5000: bars_since_entry)
long_run_up_line = plot(long_run_up, style=plot.style_stepline, editable=false, color=currently_in_a_long_postion ? green : transparent)
start_trailing_long_entry = currently_in_a_long_postion and long_run_up > long_start_trailing_val
long_trailing_stop = start_trailing_long_entry ? long_run_up - (long_run_up * trail_behind) : long_stop_loss
long_trailing_stop_line = plot(long_trailing_stop, style=plot.style_stepline, editable=false, color=currently_in_a_long_postion ? long_trailing_stop > strategy.position_avg_price ? green : red : transparent)

short_run_up = ta.lowest(low, bar_index == 0 ? 5000: bars_since_entry)
short_run_up_line = plot(short_run_up, style=plot.style_stepline, editable=false, color=currently_in_a_short_postion ? green : transparent)
start_trailing_short_entry = currently_in_a_short_postion and short_run_up < short_start_trailing_val
short_trailing_stop = start_trailing_short_entry ? short_run_up + (short_run_up * trail_behind) : short_stop_loss
short_trailing_stop_line = plot(short_trailing_stop, style=plot.style_stepline, editable=false, color=currently_in_a_short_postion ? short_trailing_stop < strategy.position_avg_price ? green : red : transparent)

long_conditions_met = distance_from_EMA > openLongEntryAbove and close < EMA_ and not currently_in_a_postion
short_conditions_met = distance_from_EMA > openEntryEntryAbove and close > EMA_ and not currently_in_a_postion
close_long_entries = distance_from_EMA <= closeEntryBelow or close <= long_trailing_stop
close_short_entries = distance_from_EMA <= closeEntryBelow or close >= short_trailing_stop
cancel_entries = distance_from_EMA <= cancelEntryBelow

plotshape(long_conditions_met ? close : na, style=shape.diamond, title="Long Conditions Met" )
plotshape(short_conditions_met ? close : na, style=shape.diamond, title="Short Conditions Met" )
plot(average_price,style=plot.style_stepline, editable=false, color=currently_in_a_postion ? blue : transparent)

// Long Entry
if enableLaddering
    if ladderRungs == 2
        strategy.entry(id="Long Ladder 1", direction=strategy.long, qty=position_qty, limit=long_ladder_1_limit_price, when=long_conditions_met)
        strategy.entry(id="Long Ladder 2", direction=strategy.long, qty=position_qty, limit=long_ladder_2_limit_price, when=long_conditions_met)
    else if ladderRungs == 3
        strategy.entry(id="Long Ladder 1", direction=strategy.long, qty=position_qty, limit=long_ladder_1_limit_price, when=long_conditions_met)
        strategy.entry(id="Long Ladder 2", direction=strategy.long, qty=position_qty, limit=long_ladder_2_limit_price, when=long_conditions_met)
        strategy.entry(id="Long Ladder 3", direction=strategy.long, qty=position_qty, limit=long_ladder_3_limit_price, when=long_conditions_met)
    else if ladderRungs == 4
        strategy.entry(id="Long Ladder 1", direction=strategy.long, qty=position_qty, limit=long_ladder_1_limit_price, when=long_conditions_met)
        strategy.entry(id="Long Ladder 2", direction=strategy.long, qty=position_qty, limit=long_ladder_2_limit_price, when=long_conditions_met)
        strategy.entry(id="Long Ladder 3", direction=strategy.long, qty=position_qty, limit=long_ladder_3_limit_price, when=long_conditions_met)
        strategy.entry(id="Long Ladder 4", direction=strategy.long, qty=position_qty, limit=long_ladder_4_limit_price, when=long_conditions_met)
    
    strategy.exit(id="Close Long Ladder 1", from_entry="Long Ladder 1", stop=long_trailing_stop, limit=long_trailing_stop, when=close_long_entries)
    strategy.exit(id="Close Long Ladder 2", from_entry="Long Ladder 2", stop=long_trailing_stop, limit=long_trailing_stop, when=close_long_entries)
    strategy.exit(id="Close Long Ladder 3", from_entry="Long Ladder 3", stop=long_trailing_stop, limit=long_trailing_stop, when=close_long_entries)
    strategy.exit(id="Close Long Ladder 4", from_entry="Long Ladder 4", stop=long_trailing_stop, limit=long_trailing_stop, when=close_long_entries)
    
    strategy.cancel(id="Long Ladder 1", when=cancel_entries)
    strategy.cancel(id="Long Ladder 2", when=cancel_entries)
    strategy.cancel(id="Long Ladder 3", when=cancel_entries)
    strategy.cancel(id="Long Ladder 4", when=cancel_entries)
else
    strategy.entry(id="Long", direction=strategy.long, qty=100, when=long_conditions_met)
    strategy.exit(id="Close Long", from_entry="Long", stop=long_stop_loss, limit=EMA_, when=close_long_entries)
    strategy.cancel(id="Long", when=cancel_entries)

// Short Entry
if enableLaddering
    if ladderRungs == 2
        strategy.entry(id="Short Ladder 1", direction=strategy.short, qty=position_qty, limit=short_ladder_1_limit_price, when=short_conditions_met)
        strategy.entry(id="Short Ladder 2", direction=strategy.short, qty=position_qty, limit=short_ladder_2_limit_price, when=short_conditions_met)
    else if ladderRungs == 3
        strategy.entry(id="Short Ladder 1", direction=strategy.short, qty=position_qty, limit=short_ladder_1_limit_price, when=short_conditions_met)
        strategy.entry(id="Short Ladder 2", direction=strategy.short, qty=position_qty, limit=short_ladder_2_limit_price, when=short_conditions_met)
        strategy.entry(id="Short Ladder 3", direction=strategy.short, qty=position_qty, limit=short_ladder_3_limit_price, when=short_conditions_met)
    else if ladderRungs == 4
        strategy.entry(id="Short Ladder 1", direction=strategy.short, qty=position_qty, limit=short_ladder_1_limit_price, when=short_conditions_met)
        strategy.entry(id="Short Ladder 2", direction=strategy.short, qty=position_qty, limit=short_ladder_2_limit_price, when=short_conditions_met)
        strategy.entry(id="Short Ladder 3", direction=strategy.short, qty=position_qty, limit=short_ladder_3_limit_price, when=short_conditions_met)
        strategy.entry(id="Short Ladder 4", direction=strategy.short, qty=position_qty, limit=short_ladder_4_limit_price, when=short_conditions_met)
    
    strategy.exit(id="Close Short Ladder 1", from_entry="Short Ladder 1", stop=short_trailing_stop, limit=EMA_, when=close_short_entries)
    strategy.exit(id="Close Short Ladder 2", from_entry="Short Ladder 2", stop=short_trailing_stop, limit=EMA_, when=close_short_entries)
    strategy.exit(id="Close Short Ladder 3", from_entry="Short Ladder 3", stop=short_trailing_stop, limit=EMA_, when=close_short_entries)
    strategy.exit(id="Close Short Ladder 4", from_entry="Short Ladder 4", stop=short_trailing_stop, limit=EMA_, when=close_short_entries)
    
    strategy.cancel(id="Short Ladder 1", when=cancel_entries)
    strategy.cancel(id="Short Ladder 2", when=cancel_entries)
    strategy.cancel(id="Short Ladder 3", when=cancel_entries)
    strategy.cancel(id="Short Ladder 4", when=cancel_entries)
else
    strategy.entry(id="Short", direction=strategy.short, when=short_conditions_met)
    strategy.exit(id="Close Short", from_entry="Short", limit=EMA_, when=close_short_entries)
    strategy.cancel(id="Short", when=cancel_entries)