دوہری حرکت پذیر اوسط کراس اوور حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-16 17:50:52
ٹیگز:

img

جائزہ

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

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

یہ حکمت عملی 9، 21 اور 50 مدت کے ایکسپونینشل موونگ اوسط (ای ایم اے) پر مبنی ہے۔ 9 مدت ای ایم اے مختصر مدت کے رجحان کی نمائندگی کرتا ہے، 21 مدت ای ایم اے درمیانی مدت کے رجحان کی نمائندگی کرتا ہے، اور 50 مدت ای ایم اے طویل مدتی رجحان کی نمائندگی کرتا ہے.

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

لانگ / شارٹ انٹری ، لیو منافع اور اسٹاپ نقصان کے لئے منطق تشکیل دی گئی ہے۔ انٹری کی شرط ایم اے کا کراس اوور ہے۔ لانگ لیو منافع انٹری قیمت ہے * (1 + ان پٹ لیو منافع تناسب) ، شارٹ لیو منافع انٹری قیمت ہے * (1 - ان پٹ لیو منافع تناسب) ۔ لانگ اسٹاپ نقصان انٹری قیمت ہے * (1 - ان پٹ اسٹاپ نقصان تناسب) ، شارٹ اسٹاپ نقصان انٹری قیمت ہے * (1 + ان پٹ اسٹاپ نقصان تناسب) ۔

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

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

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

  • رجحان کی سمت کا تعین کرنے کے لئے دوہری ایم اے کراسورس کا استعمال کرتے ہوئے، منطق سادہ اور سمجھنے میں آسان ہے.

  • مختلف ادوار کے EMAs کو اپنانے سے قلیل مدتی اور طویل مدتی رجحانات کا اندازہ لگایا جاسکتا ہے۔

  • منافع اور سٹاپ نقصان منطق منافع میں تالے اور کنٹرول خطرے.

  • فلٹرز کچھ غلط اشاروں سے کچھ حد تک بچنے میں مدد کرتے ہیں۔

  • پیرامیٹرز کو آزادانہ طور پر تشکیل دیا جاسکتا ہے ، مختلف مارکیٹ کے ماحول کے لئے ادوار کو بہتر بنایا جاسکتا ہے۔

خطرے کا تجزیہ

  • ایک واحد عنصر کی حکمت عملی کے طور پر ، تجارتی سگنل کافی مستحکم نہیں ہوسکتے ہیں۔ قیمتوں میں استحکام کے دوران وِپساؤس ہوسکتے ہیں۔

  • جب کراس اوور ہوتا ہے تو ، قیمت پہلے ہی بڑھتی / کم ہوتی ہے ، جس میں اعلی خریدنے اور کم فروخت کرنے کا خطرہ ہوتا ہے۔

  • تجارتی اخراجات پر غور نہیں کیا جاتا، اصل منافع کم ہو سکتا ہے.

  • کوئی سٹاپ نقصان کی جگہ، انتہائی مارکیٹ کے حالات میں لامحدود نقصان کا خطرہ.

حل:

  1. زیادہ مستحکم سگنل کے لئے ایم اے کے ادوار کو بہتر بنائیں.

  2. سگنل فلٹر کرنے کے لئے دیگر اشارے شامل کریں.

  3. لاگت کے اثرات کو کم کرنے کے لئے تجارت کا سائز بڑھانا۔

  4. زیادہ سے زیادہ نقصان کو محدود کرنے کے لئے مناسب سٹاپ نقصان مقرر کریں.

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

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

  1. بہترین مجموعے تلاش کرنے کے لئے ایم اے ادوار کو بہتر بنائیں، یا متحرک طور پر بہترین ادوار کو منتخب کرنے کے لئے انکولی اصلاح کا استعمال کریں.

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

  3. حجم کا تجزیہ شامل کریں۔ اگر ایم اے کراس اوور پر حجم ناکافی ہے تو سگنل نہ لیں.

  4. کراس اوور ہونے سے پہلے قیمتوں میں اتار چڑھاؤ کی جانچ پڑتال کریں۔ رینجنگ مارکیٹ میں کراس اوور غلط سگنل ہوسکتا ہے۔

  5. متحرک سٹاپ نقصان کے طریقہ کار کی تعمیر کریں جیسے ٹریلنگ سٹاپ نقصان، چنڈلیئر باہر نکلیں وغیرہ، سٹاپ نقصان کی دوری کو کم کرنے کے لئے لیکن اسے مؤثر رکھیں.

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

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

نتیجہ

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


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
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/
// © TradingMentalist

//@version=4
strategy("Initial template",initial_capital=1000, overlay=true, pyramiding=0, commission_type=strategy.commission.percent, commission_value=0.04, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////inputs
//turn on/off longs/shorts / extraneous conditions
longinc=input(true, title="include longs?")
lConSw2=input(true, title="condition two?")
lConSw3=input(true, title="condition three?")
shotinc=input(true, title="include shorts?")
sConSw2=input(true, title="condition two?")
sConSw3=input(true, title="condition three?")

//turn on/off / adjust trade filters (average range/average equity)
sidein2     = input(200, step=10, title='lookback for average range (bars)')
sidein      = input(1, title='filter trades if range is less than (%)')/100
equityIn    = input(40, title='filter trades if equity is below ema()')
sidewayssw  = input(true, title='sideways filter?')
equitysw    = input(true, title='equity filter?')
longtpin    = input(1,step=0.1, title='long TP %')/100
longslin    = input(0.4,step=0.1, title='long SL %')/100
shorttpin   = input(1,step=0.1, title='short TP %')/100
shortslin   = input(0.4,step=0.1, title='short SL %')/100

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////filters
//(leave as is)
side1       = (close[1] + close[sidein2]) / 2
side2       = close[1] - close[sidein2] 
side3       = side2 / side1
notsideways = side3 > sidein
equityMa    = equitysw ? ema(strategy.equity, equityIn) : 0
equityCon   = strategy.equity >= equityMa

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////indicators
ma1 = ema(close, 9)
ma2 = ema(close, 21)
ma3 = ema(close, 50)

plot(ma1, color=color.new(#E8B6B0,50))
plot(ma2, color=color.new(#B0E8BE,50))
plot(ma3, color=color.new(#00EEFF,50))

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////conditions
//adjust conditions
//-------------------------------------------
longCondition1  = crossover(ma2,ma3)
longCondition2  = close[5] > close[10]
longCondition3  = close[1] > close[2]

shortCondition1 = crossover(ma3,ma2)
shortCondition2 = close[5] < close[10]
shortCondition3 = close[1] < close[2]

closelong       = shortCondition1
closeshort      = longCondition1
//-------------------------------------------

//(leave as is)
longCondition1in  = longCondition1
longCondition2in  = lConSw2 ? longCondition2 : true
longCondition3in  = lConSw3 ? longCondition3 : true
shortCondition1in = shortCondition1
shortCondition2in = sConSw2 ? shortCondition2: true
shortCondition3in = sConSw3 ? shortCondition3: true
longConditions    = longCondition1in and longCondition2in and longCondition3in
shortConditions   = shortCondition1in and shortCondition2in and shortCondition3in

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////execution
//(leave as is)
long            = sidewayssw ? notsideways and equityCon and longConditions : equityCon and longConditions
short           = sidewayssw ? notsideways and equityCon and shortConditions : equityCon and shortConditions

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////risk
//(leave as is)
longtplevel     = strategy.position_avg_price * (1 + longtpin)
longsllevel     = strategy.position_avg_price * (1 - longslin)
shorttplevel    = strategy.position_avg_price * (1 - shorttpin)
shortsllevel    = strategy.position_avg_price * (1 + shortslin)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////timeframe
//adjust timeframe
//-------------------------------------------
startyear   = 2000
startmonth  = 1
startday    = 1

stopyear    = 9999
stopmonth   = 12
stopday     = 31
//-------------------------------------------

//(leave as is)
startperiod = timestamp(startyear,startmonth,startday,0,0)
periodstop  = timestamp(stopyear,stopmonth,stopday,0,0)
timeframe()    =>
    time >= startperiod and time <= periodstop ? true : false

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////orders
//comments are empty characters for clear chart
if timeframe()
    if longinc
        if strategy.position_size == 0 or strategy.position_size > 0 
            strategy.entry(id="long", long=true, when=long, comment=" ")
            strategy.exit("stop","long", limit=longtplevel, stop=longsllevel,comment=" ")
            strategy.close(id="long", when=closelong, comment = " ")
    if shotinc
        if strategy.position_size == 0 or strategy.position_size < 0 
            strategy.entry(id="short", long=false, when=short, comment = " ")
            strategy.exit("stop","short", limit=shorttplevel, stop=shortsllevel,comment = " ")
            strategy.close(id="short", when=closeshort, comment = " ")

مزید