یہ حکمت عملی ڈبل ایکسپونینشیل چلتی اوسط (ڈی ای ایم اے) کے کراس اوور پر مبنی ہے جو تجارتی سگنلز کے طور پر ہے اور خودکار اسٹاپ نقصان اور منافع کی ترتیب کے ساتھ رجحان کے بعد نقطہ نظر اپناتا ہے۔ اس حکمت عملی کے فوائد واضح تجارتی سگنل ، لچکدار اسٹاپ نقصان / منافع کی تشکیل اور موثر رسک کنٹرول ہیں۔
تیز رفتار ڈی ای ایم اے لائن (8 دن) ، سست ڈی ای ایم اے لائن (24 دن) اور معاون ڈی ای ایم اے لائن (ترتیب پذیر) کا حساب لگائیں۔
جب تیز رفتار لائن سست لائن سے اوپر سے گزرے اور گولڈ کراس سگنل پیدا ہوا تو ، طویل ہوجائیں۔ جب تیز رفتار لائن سست لائن سے نیچے سے گزرے اور مردہ کراس سگنل پیدا ہوا تو ، مختصر ہوجائیں۔
سگنل فلٹر شامل کریں کہ سگنل صرف اس وقت ٹرگر ہوتے ہیں جب معاون لائن کی موجودہ قیمت پچھلے دن سے زیادہ ہوتی ہے ، غلط بریک آؤٹ سے بچنے کے ل.
سٹاپ نقصان کے طریقہ کار کے بعد رجحان کو اپنائیں جہاں سٹاپ نقصان کی لائن قیمت کی نقل و حرکت کی بنیاد پر ایڈجسٹ کرتی رہتی ہے ، جزوی منافع میں مقفل ہوتی ہے۔
ایک ہی وقت میں مقررہ فیصد سٹاپ نقصان اور زیادہ سے زیادہ نقصان اور منافع فی تجارت کو محدود کرنے کے لئے منافع لے لو.
واضح ٹریڈنگ سگنل، داخلہ اور باہر نکلنے کے وقت کا تعین کرنے کے لئے آسان.
ڈبل DEMA الگورتھم ہموار ہے، overfitting سے بچتا ہے، زیادہ قابل اعتماد سگنل.
معاون لائن فلٹر سگنل کی درستگی کو بہتر بناتا ہے ، غلط سگنل کو کم کرتا ہے۔
جزوی منافع میں سٹاپ نقصان کے بعد رجحان، مؤثر طریقے سے خطرات کو کنٹرول.
فکسڈ فی صد سٹاپ نقصان / منافع حاصل کریں ہر تجارت کے لئے زیادہ سے زیادہ نقصان کی حد، خطرے کی رواداری سے زیادہ سے زیادہ سے بچنے سے بچتا ہے.
مارکیٹ میں اکثر تجارت ہو سکتی ہے، جس سے خطرہ بڑھتا ہے اور نقصانات ہوتے ہیں۔
بہت زیادہ مقررہ سٹاپ نقصان کا فیصد انتہائی قیمت میں اتار چڑھاؤ میں ناپسندیدہ بڑے سٹاپ نقصان کو متحرک کرسکتا ہے۔
ڈی ای ایم اے کراس اوور سگنلز کی تاخیر اور چوٹی پر طویل اندراج تیزی سے چلنے والی مارکیٹ میں نقصان کے خطرات کو بڑھا سکتے ہیں۔
لائیو ٹریڈنگ میں سلائیپج منافع کو متاثر کرتا ہے، پیرامیٹر ٹوننگ کی ضرورت ہوتی ہے.
DEMA پیرامیٹرز مختلف مارکیٹ کے حالات کے لئے بہتر کیا جا سکتا ہے.
براہ راست تجارت میں فکسڈ اسٹاپ نقصان کو بڑھانے پر غور کریں تاکہ سلائپ لاگت کو مدنظر رکھا جاسکے۔
سگنل کی کوالٹی کو بہتر بنانے کے لئے MACD جیسے دیگر اشارے شامل کیے جاسکتے ہیں۔
نفیس ٹیوننگ ٹریکنگ سٹاپ نقصان بڑھانے کے لئے منطق کی قدر.
یہ حکمت عملی ڈی ای ایم اے کی رجحان کا پتہ لگانے کی صلاحیت کا فائدہ اٹھاتی ہے اور اسے رجحان کے بعد رسک کنٹرول کے طریقہ کار کے ساتھ جوڑتی ہے۔ یہ رجحان کی سمت کا تعین کرنے کی حکمت عملی کے نظام میں ایک بہت ہی عام مثال ہے۔ عام طور پر یہ واضح سگنل ، معقول اسٹاپ نقصان / منافع لینے کی تشکیل اور قابل کنٹرول خطرات والی حکمت عملی ہے۔ جب سلائپ لاگت کے لئے بہتر بنایا جاتا ہے اور براہ راست تجارت میں اضافی اشارے کے ساتھ شامل کیا جاتا ہے تو ، یہ اچھی سرمایہ کاری کی واپسی حاصل کرسکتا ہے۔
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 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/ // © zeguela //@version=4 strategy(title="ZEGUELA DEMABOT", commission_value=0.063, commission_type=strategy.commission.percent, initial_capital=100, default_qty_value=90, default_qty_type=strategy.percent_of_equity, overlay=true, process_orders_on_close=true) // Step 1. Script settings // Input options srcData = input(title="Source Data", type=input.source, defval=close) // Length settings len1 = input(title="Length DEMA #1", type=input.integer, defval=8, minval=1) len2 = input(title="Length DEMA #2", type=input.integer, defval=24, minval=0) len3 = input(title="Length DEMA #3", type=input.integer, defval=0, minval=0) // Step 2. Calculate indicator values // Function that calculates the DEMA DEMA(series, length) => if (length > 0) emaValue = ema(series, length) 2 * emaValue - ema(emaValue, length) else na // Calculate the DEMA values demaVal1 = DEMA(srcData, len1) demaVal2 = DEMA(srcData, len2) demaVal3 = DEMA(srcData, len3) // Step 3. Determine indicator signals // See if there's a DEMA crossover demaCrossover = if (len2 > 0) and (len3 > 0) crossover(demaVal1, demaVal2) and (demaVal3 > demaVal3[1]) else if (len2 > 0) and (len3 == 0) crossover(demaVal1, demaVal2) else if (len3 > 0) and (len2 == 0) crossover(demaVal1, demaVal3) else crossover(close, demaVal1) // Check if there's a DEMA crossunder demaCrossunder = if (len2 > 0) and (len3 > 0) crossunder(demaVal1, demaVal2) and (demaVal3 < demaVal3[1]) else if (len2 > 0) and (len3 == 0) crossunder(demaVal1, demaVal2) else if (len3 > 0) and (len2 == 0) crossunder(demaVal1, demaVal3) else crossunder(close, demaVal1) // Step 4. Output indicator data // Plot DEMAs on the chart plot(series=demaVal1, color=color.green, linewidth=2, title="DEMA #1") plot(series=demaVal2, color=color.red, linewidth=2, title="DEMA #2") plot(series=demaVal3, color=color.fuchsia, linewidth=2, title="DEMA #3") //TRAILING STOP CODE a = input(title="Usar Trailing Stop?", type=input.bool, defval=false) stopPerlong = input(9.0, title='Stop Loss Long %', type=input.float, group="Stop Loss & Take Profit Settings") / 100 stopPershort = input(6.0, title='Stop Loss Short %', type=input.float, group="Stop Loss & Take Profit Settings") / 100 take1Perlong = input(25.0, title='Take Profit Long % 1', type=input.float, group="Stop Loss & Take Profit Settings") / 100 take1Pershort = input(6.0, title='Take Profit Short % 1', type=input.float, group="Stop Loss & Take Profit Settings") / 100 // Determine stop loss price longStopPrice = strategy.position_avg_price * (1 - stopPerlong) shortStopPrice = strategy.position_avg_price * (1 + stopPershort) longTake1Price = strategy.position_avg_price * (1 + take1Perlong) shortTake1Price = strategy.position_avg_price * (1 - take1Pershort) // Determine trail stop loss prices longStopPriceTrail = 0.0 longStopPriceTrail := if (strategy.position_size > 0) stopValue = close * (1 - stopPerlong) max(stopValue, longStopPriceTrail[1]) else 0 // Determine trailing short price shortStopPriceTrail = 0.0 shortStopPriceTrail := if (strategy.position_size < 0) stopValue = close * (1 + stopPershort) min(stopValue, shortStopPriceTrail[1]) else 999999 //calcular qual stop usar longStop = a ? longStopPriceTrail : longStopPrice shortStop = a ? shortStopPriceTrail : shortStopPrice //calcula o valor do stop e TP pra lançar no alerta longStopEntrada = close * (1 - stopPerlong) shortStopEntrada = close * (1 + stopPershort) longTPEntrada = close * (1 + take1Perlong) shortTPEntrada = close * (1 - take1Pershort) //armazena o preço de entrada e valor do SL e TP price_entryL = 0.0 price_entryL := na(price_entryL) ? na : price_entryL[1] price_entryS = 0.0 price_entryS := na(price_entryS) ? na : price_entryS[1] stopL = 0.0 stopL := na(stopL) ? na : stopL[1] stopS = 0.0 stopS := na(stopS) ? na : stopS[1] takeL = 0.0 takeL := na(takeL) ? na : takeL[1] takeS = 0.0 takeS := na(takeS) ? na : takeS[1] if (demaCrossover) price_entryL := close stopL := close * (1 - stopPerlong) takeL := close * (1 + take1Perlong) if (demaCrossunder) price_entryS := close stopS := close * (1 + stopPershort) takeS := close * (1 - take1Pershort) resultadoL = ((close - price_entryL)/price_entryL) * 100 resultadoLexit = "(SL = 1% e TP = 0,5%)" resultadoS = ((price_entryS - close)/price_entryS) * 100 resultadoSexit = "(SL = 1% e TP = 0,5)%" // Make input options that configure backtest date range _startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="BackTest Period") _startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="BackTest Period") _startYear = input(title="Start Year", type=input.integer, defval=2018, minval=1800, maxval=2100, group="BackTest Period") _endDate = input(title="End Date", type=input.integer, defval=31, minval=1, maxval=31, group="BackTest Period") _endMonth = input(title="End Month", type=input.integer, defval=12, minval=1, maxval=12, group="BackTest Period") _endYear = input(title="End Year", type=input.integer, defval=2031, minval=1800, maxval=2100, group="BackTest Period") // Look if the close time of the current bar // falls inside the date range _inDateRange = (time >= timestamp(syminfo.timezone, _startYear, _startMonth, _startDate, 0, 0)) and (time < timestamp(syminfo.timezone, _endYear, _endMonth, _endDate, 0, 0)) //Alert configuration _alertMessageOpenLong="OpenLong" _alertMessageCloseLong="CloseLong" _alertmessageExitLong="ExitLong - TP/SL" _alertMessageOpenShort="OpenShort" _alertMessageCloseShort="CloseShort" _alertMessageExitShort="ExitShort - TP/SL" if (_inDateRange) //ENTER SOME SETUP TRADES FOR TSL EXAMPLE if (demaCrossover) strategy.entry("LONG", strategy.long, comment = _alertMessageOpenLong) if (demaCrossunder) strategy.entry("SHORT", strategy.short, comment = _alertMessageOpenShort) //EXIT TRADE @ TSL if strategy.position_size > 0 strategy.exit("TP/SL", "LONG", stop=longStop, limit=longTake1Price, comment=_alertmessageExitLong, alert_message=_alertmessageExitLong) if strategy.position_size < 0 strategy.exit("TP/SL", "SHORT", stop=shortStop, limit=shortTake1Price, comment =_alertMessageExitShort, alert_message=_alertMessageExitShort) //Look & Feel - Plot stop loss and take profit areas p1=plot(strategy.position_avg_price, color=color.blue, style=plot.style_linebr, linewidth=1, title="Preço de entrada") p2=plot(series=strategy.position_size > 0 ? longStop : na, color=color.red, style=plot.style_linebr, linewidth=1, title="Long Stop") p3=plot(series=strategy.position_size > 0 ? longTake1Price : na, color=color.green, style=plot.style_linebr, linewidth=1, title="Long TP") p4=plot(series=strategy.position_size < 0 ? shortStop : na, color=color.red, style=plot.style_linebr, linewidth=1, title="Short Stop") p5=plot(series=strategy.position_size < 0 ? shortTake1Price : na, color=color.green, style=plot.style_linebr, linewidth=1, title="Short TP") fill(p1, p2, color=color.red) fill(p1, p3, color=color.green) fill(p1, p4, color=color.red) fill(p1, p5, color=color.green) // Insert label with value stopLossOnLong = "Stop Loss = " + tostring(longStop) stopLossOnShort = "Stop Loss = " + tostring(shortStop) takeprofitOnLong = "Take Profit = " + tostring(longTake1Price) takeprofitOnShort = "Take Profit = " + tostring(shortTake1Price) precoentrada = "Entrada = " + tostring(strategy.position_avg_price) var label FinalLabelpriceL = na var label FinalLabelpriceS = na var label slFinalLabelL = na var label slFinalLabelS = na var label slFinalLabelTPL = na var label slFinalLabelTPS = na //Draw entry and stop loss lines and labels if strategy.position_size > 0 //write the price above the end of the stoploss line slFinalLabelL := label.new(bar_index, longStop, stopLossOnLong, style=label.style_none, size=size.normal, textcolor=color.red) slFinalLabelTPL := label.new(bar_index, longTake1Price, takeprofitOnLong, style=label.style_none, size=size.normal, textcolor=color.green) FinalLabelpriceL := label.new(bar_index, strategy.position_avg_price, precoentrada, style=label.style_none, size=size.normal, textcolor=color.blue) // Delete previous label when there is a consecutive new high, as there's no line plot in that case. if strategy.position_size > 0[1] label.delete(slFinalLabelL[1]) label.delete(slFinalLabelTPL[1]) label.delete(FinalLabelpriceL[1]) if strategy.position_size < 0 //write the price above the end of the stoploss line slFinalLabelS := label.new(bar_index, shortStop, stopLossOnShort, style=label.style_none, size=size.normal, textcolor=color.red) slFinalLabelTPS := label.new(bar_index, shortTake1Price, takeprofitOnShort, style=label.style_none, size=size.normal, textcolor=color.green) FinalLabelpriceS := label.new(bar_index, strategy.position_avg_price, precoentrada, style=label.style_none, size=size.normal, textcolor=color.blue) // Delete previous label when there is a consecutive new high, as there's no line plot in that case. if strategy.position_size < 0[1] label.delete(slFinalLabelS[1]) label.delete(slFinalLabelTPS[1]) label.delete(FinalLabelpriceS[1]) // Exit open market position when date range ends if (not _inDateRange) strategy.close_all()