یہ حکمت عملی کھلی اور اعلی قیمتوں کے مابین کراس اوور کی بنیاد پر تجارتی سگنل تیار کرتی ہے۔ جب کھلی قیمت اعلی قیمت سے تجاوز کرتی ہے تو یہ طویل ہوجاتی ہے اور جب کھلی قیمت اعلی قیمت سے تجاوز کرتی ہے تو مختصر ہوجاتی ہے۔ قیمت کے اعداد و شمار کو ہموار کرنے اور شور مچانے والی تجارت کو کم کرنے کے لئے حرکت پذیر اوسط استعمال کیے جاسکتے ہیں۔ حرکت پذیر اوسط کی مختلف اقسام اور پیرامیٹرز تشکیل پذیر ہیں۔ منافع میں مقفل ہونے کے لئے ٹریلنگ اسٹاپ نقصان کو بھی فعال کیا جاسکتا ہے۔
اس بات کا تعین کریں کہ آیا ان پٹ پیرامیٹر useRes کی بنیاد پر متبادل ریزولوشن کا استعمال کرنا ہے۔ اگر فعال ہے تو ، ریزولوشن کو stratRes کے ساتھ ترتیب دیں۔
ان پٹ پیرامیٹر کی بنیاد پر چلتی اوسط (useMA) استعمال کرنے کا فیصلہ کریں۔ اگر فعال ہے تو ، baseType کے ساتھ MA کی قسم منتخب کریں اور baseLen کے ساتھ مدت کی لمبائی مقرر کریں۔
کھلی قیمت (کھولی) اور بند قیمت (بند) سیریز کے اعداد و شمار حاصل کریں. اگر useMA فعال ہے تو ترتیب شدہ پیرامیٹرز کے ساتھ منتخب کردہ MA کا اطلاق کریں.
موجودہ اوپن قیمت ایکس کا موازنہ اوپن سیریز اوپن سیریز کے ساتھ کریں۔ اگر ایکس اوپن سیریز سے بڑا ہے تو ، ٹرینڈ اسٹیٹ کو لمبا ، دوسری صورت میں مختصر کریں۔
جب کھلی قیمت کھلی ایم اے سیریز سے اوپر ہوتی ہے تو لانگ سگنل لانگ سیونڈ بنائیں۔ جب کھلی قیمت کھلی ایم اے سیریز سے نیچے ہوتی ہے تو مختصر سگنل شارٹ سیونڈ بنائیں۔
لمبی اور مختصر سگنلز کی بنیاد پر لمبی یا مختصر پوزیشنیں درج کریں۔ اگر ٹریلنگ اسٹاپ نقصان فعال ہے تو اسٹاپ نقصان کے مقامات مقرر کریں اور آفسیٹ کریں۔
دو مختلف قیمتوں کی سیریز کا استعمال کرتا ہے، کھلی اور اعلی، واحد سیریز کی حدود سے بچنے کے.
ایم اے کی تکنیکیں قلیل مدتی شور کو فلٹر کرتی ہیں اور بڑے رجحان پر توجہ مرکوز کرتی ہیں۔
زیادہ سے زیادہ اثر کے لئے ایم اے کی اقسام اور پیرامیٹرز کی لچکدار ترتیب۔
اختیاری ٹریلنگ سٹاپ نقصان خطرہ کو کنٹرول کرنے اور منافع میں مقفل کرنے کے لئے.
مختلف مصنوعات اور مارکیٹ کے ماحول کے لئے پیرامیٹرز کو ایڈجسٹ کرنے کے لئے اعلی اصلاح کی جگہ.
سگنل کا واحد ذریعہ کم سگنل اور ممکنہ طور پر چھوٹی تجارت کا باعث بنتا ہے۔
ایم اے تاخیر کے نتیجے میں قلیل مدتی مواقع ضائع ہوسکتے ہیں۔
غلط سٹاپ نقصان کی ترتیب سے قبل از وقت باہر نکلنے یا اضافی نقصان ہوسکتا ہے.
ناقص پیرامیٹر ٹوننگ لائیو کارکردگی کو متاثر کرنے والے زیادہ سے زیادہ خیالی تجارت کا سبب بن سکتی ہے.
پیرامیٹر کی اصلاح مختلف مصنوعات اور ماحول کے لئے چیلنج ہے.
سگنل کے ذرائع کو افزودہ کرنے کے لئے مزید اشارے یا ML ماڈل شامل کریں۔ ایم اے کی اقسام اور پیرامیٹرز کو ٹھیک کریں۔ زیادہ منافع حاصل کرنے کے لئے کچھ بفر کے ساتھ احتیاط سے اسٹاپ نقصان مرتب کریں۔ مکمل طور پر بیک ٹیسٹ اور پیرامیٹرز کو بہتر بنائیں۔
سگنل کے ذرائع کو بڑھانے کے لئے اضافی اشارے جیسے بولنگر بینڈ، KD وغیرہ شامل کریں.
سگنل کی پیداوار کے لئے مشین لرننگ ماڈلز کا اطلاق کریں.
بہترین ترتیبات تلاش کرنے کے لئے ایم اے پیرامیٹرز کو بہتر بنائیں.
خطرہ اور منافع کے قبضے کے درمیان سٹاپ نقصان کی سطح کو متوازن کریں.
خود کار طریقے سے بہترین ترتیبات تلاش کرنے کے لئے پیرامیٹر کی اصلاح کے طریقوں کو شامل کریں.
مختلف مصنوعات کے لئے خصوصی پیرامیٹر ٹیمپلیٹس تیار کریں.
تیز رفتار حکمت عملی تکرار کے لئے مقداری بیک ٹسٹنگ فریم ورک بنائیں.
یہ حکمت عملی کھلی اونچی کراس اوورز پر مبنی سگنل تیار کرتی ہے اور شور کو فلٹر کرنے کے لئے ایم اے کا استعمال کرتی ہے۔ یہ ترتیب دینے والے پیرامیٹرز کے ذریعہ لچک فراہم کرتی ہے۔ اس حکمت عملی کے فوائد ہیں لیکن اس کے ساتھ ساتھ کچھ مسائل جیسے کم سگنل اور تاخیر بھی ہیں۔ مزید اشارے ، مشین لرننگ ماڈل وغیرہ کے ذریعے مزید بہتری لائی جاسکتی ہے۔ مختلف مصنوعات اور مارکیٹ کے ماحول میں بہترین کارکردگی کے ل extensive وسیع پیمانے پر پیرامیٹر ٹیوننگ اور اصلاح کی ضرورت ہے۔
/*backtest start: 2022-10-17 00:00:00 end: 2023-10-17 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //strategy(title = "Open Close Cross Strategy", shorttitle = "OCC Strategy", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10) // Revision: 1 // Author: @JayRogers // // Description: // - Strategy based around Open-Close Crossovers. // Setup: // - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing // tends to yield the best results, regardless of which MA option you may choose (if any) // - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of // green and red. // - Option to either use basic open and close series data, or pick your poison with a wide array of MA types. // - Optional trailing stop for damage mitigation if desired (can be toggled on/off) // - Positions get taken automagically following a crossover - which is why it's better to set the resolution // of the script greater than that of your chart, so that the trades get taken sooner rather than later. // - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine // will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you // can handle. // === INPUTS === useRes = input(defval = true, title = "Use Alternate Resolution? ( recommended )") stratRes = input(defval = "120", title = "Set Resolution ( should not be lower than chart )") useMA = input(defval = true, title = "Use MA? ( otherwise use simple Open/Close data )") basisType = input(defval = "DEMA", title = "MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )") basisLen = input(defval = 14, title = "MA Period", minval = 1) offsetSigma = input(defval = 6, title = "Offset for LSMA / Sigma for ALMA", minval = 0) offsetALMA = input(defval = 0.85, title = "Offset for ALMA", minval = 0, step = 0.01) useStop = input(defval = true, title = "Use Trailing Stop?") slPoints = input(defval = 200, title = "Stop Loss Trail Points", minval = 1) slOffset = input(defval = 400, title = "Stop Loss Trail Offset", minval = 1) // === /INPUTS === // === BASE FUNCTIONS === // Returns MA input selection variant, default to SMA if blank or typo. variant(type, src, len, offSig, offALMA) => v1 = sma(src, len) // Simple v2 = ema(src, len) // Exponential v3 = 2 * v2 - ema(v2, len) // Double Exponential v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len) // Triple Exponential v5 = wma(src, len) // Weighted v6 = vwma(src, len) // Volume Weighted v7 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len // Smoothed v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) // Hull v9 = linreg(src, len, offSig) // Least Squares v10 = alma(src, len, offALMA, offSig) // Arnaud Legoux type=="EMA"?v2 : type=="DEMA"?v3 : type=="TEMA"?v4 : type=="WMA"?v5 : type=="VWMA"?v6 : type=="SMMA"?v7 : type=="HullMA"?v8 : type=="LSMA"?v9 : type=="ALMA"?v10 : v1 // security wrapper for repeat calls reso(exp, use, res) => use ? request.security(syminfo.tickerid, res, exp) : exp // === /BASE FUNCTIONS === // === SERIES SETUP === // open/close //closeSeries = useMA ? reso(variant(basisType, close, basisLen, offsetSigma, offsetALMA), useRes, stratRes) : reso(close, useRes, stratRes) openSeries = useMA ? reso(variant(basisType, open, basisLen, offsetSigma, offsetALMA), useRes, stratRes) : reso(open, useRes, stratRes) x = openSeries[1] trendState = x > openSeries ? true : x < openSeries ? false : trendState[1] // === /SERIES === // === PLOTTING === barcolor(color = x > openSeries ? #006600 : #990000, title = "Bar Colours") // channel outline closePlot = plot(x, title = "Close Line", color = #009900, linewidth = 2, style = line, transp = 90) openPlot = plot(openSeries, title = "Open Line", color = #CC0000, linewidth = 2, style = line, transp = 90) // channel fill closePlotU = plot(trendState ? x : na, transp = 100, editable = false) openPlotU = plot(trendState ? openSeries : na, transp = 100, editable = false) closePlotD = plot(trendState ? na : x, transp = 100, editable = false) openPlotD = plot(trendState ? na : openSeries, transp = 100, editable = false) fill(openPlotU, closePlotU, title = "Up Trend Fill", color = #009900, transp = 40) fill(openPlotD, closePlotD, title = "Down Trend Fill", color = #CC0000, transp = 40) // === /PLOTTING === // === STRATEGY === // conditions longCond = crossover(openSeries, x) shortCond = crossunder(openSeries, x) // entries and base exit strategy.entry("long", true, when = longCond) strategy.entry("short", false, when = shortCond) // if we're using the trailing stop //if (useStop) // strategy.exit("XL", from_entry = "long", trail_points = slPoints, trail_offset = slOffset) // strategy.exit("XS", from_entry = "short", trail_points = slPoints, trail_offset = slOffset) // not sure needed, but just incase.. //strategy.exit("XL", from_entry = "long", when = shortCond) //strategy.exit("XS", from_entry = "short", when = longCond) // === /STRATEGY ===