ای ایم اے کی اوسط ریورس ٹریڈنگ کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-10-26 15:33:50
ٹیگز:

img

جائزہ

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

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

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

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

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

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

  3. فرق کی حد کی بنیاد پر کھلی پوزیشنیں۔ ڈیفالٹ لانگ انٹری 9 فیصد اور شارٹ انٹری 9 فیصد ہے۔

  4. سپورٹ سیڑھی داخلہ۔ سیڑھیوں کی تعداد اور فی سیڑھی فیصد قدم ترتیب دیا جا سکتا ہے.

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

  6. فرق کی حد کی بنیاد پر پوزیشن بند کریں۔ طویل اور مختصر دونوں کے لئے ڈیفالٹ باہر نکلنا 1٪ ہے۔

  7. جب قیمت EMA پر واپس آجائے تو خالی احکامات منسوخ کریں۔

  8. ترتیب دینے کے قابل سٹاپ نقصان فی صد.

  9. بیک ٹسٹنگ اور لائیو ٹریڈنگ کی حمایت کریں۔

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

اس حکمت عملی کے فوائد:

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

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

  3. سیڑھی کا داخلہ بتدریج پوزیشن کی تعمیر کی اجازت دیتا ہے اور لاگت کو کم کرتا ہے۔

  4. ٹریلنگ سٹاپ منافع میں تالے لگاتا ہے اور خطرے کا انتظام کرتا ہے۔

  5. EMA پیرامیٹرز یا داخلہ/باہر نکلنے کی حد کو ایڈجسٹ کرکے انتہائی بہتر بنایا جا سکتا ہے۔

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

  7. مشاہدے اور تجزیہ کے لئے بدیہی چارٹنگ.

خطرے کا تجزیہ

اس حکمت عملی کے خطرات:

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

  2. ای ایم اے کی ناکامی کا خطرہ۔ قیمت طویل عرصے تک ای ایم اے سے انحراف کرسکتی ہے۔

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

  4. اعلی تجارتی تعدد اعلی کمیشن کی لاگت کا باعث بنتا ہے.

  5. طویل عرصے تک نظرثانی کی ضرورت ہوتی ہے۔ اچانک واقعات کے لئے زیادہ حساس.

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

  1. اصلاح اور کثیر مارکیٹ کی توثیق کے ذریعے مضبوط پیرامیٹرز کا انتخاب۔

  2. معقول EMA مدت، نہ تو بہت مختصر اور نہ ہی بہت طویل.

  3. زیادہ وسیع سٹاپ نقصان بفر کو روکنے کے لئے روکنے سے روکنے کے لئے.

  4. تجارتی تعدد کو کم کرنے کے لئے کم جارحانہ اندراج کے قوانین۔

  5. واقعات کو اپنانے کے لئے حجم، بولنگر بینڈ، RSI جیسے اضافی اشارے شامل کریں.

اصلاح کی ہدایات

اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:

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

  2. اعلی امکان رجحان ٹریڈنگ کے لئے دوہری EMA شامل کریں.

  3. سٹاپ نقصان کو ایڈجسٹ سٹاپ کے ساتھ بڑھانا، خطرہ کو مزید محدود کرنے کے لئے Chandelier Exits.

  4. بہتر پیرامیٹر سیٹ تلاش کرنے کے لئے آٹو پیرامیٹر کی اصلاح شامل کریں.

  5. EMA انحراف کے امکان کے لئے مشین سیکھنے کو شامل کریں.

  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)



مزید