وسائل لوڈ ہو رہے ہیں... لوڈنگ...

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

مصنف:چاؤ ژانگ، تاریخ: 2023-12-13 15:28:50
ٹیگز:

img

جائزہ

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

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

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

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

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

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

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

اس کے علاوہ، حکمت عملی میں رجحان کی تبدیلیوں سے بچنے کے لئے ای ایم اے رجحان انڈیکس پر غور کیا جاتا ہے.

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

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

خطرے کا تجزیہ

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

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

اصلاح کی سمت

  1. مثالی مجموعوں کا پتہ لگانے کے لئے بولنگر بینڈ ان پٹ پیرامیٹرز کو بہتر بنائیں؛
  2. سٹاپ نقصان کے مختلف اضافے کے پیرامیٹرز کا جائزہ لیں تاکہ اسٹاپ کے چلنے کے امکانات کو کم کیا جاسکے۔
  3. زیادہ سے زیادہ ممکنہ فوائد کو پکڑنے کے لئے منافع کے ضارب اقدار کو ٹیسٹ کرنے کے لئے.

نتیجہ

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


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-06 22:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This close code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © AugustoErni

//@version=5
strategy('Bollinger Bands Modified (Stormer)', overlay=true)

bbL                   = input.int(20, title='BB Length/Comprimento da Banda de Bollinger', minval=1, step=1, tooltip='Calculate the length of bollinger bands./Calcula o comprimento das bandas de bollinger.')
mult                  = input.float(0.38, title='BB Standard Deviation/Desvio Padrão da Banda de Bollinger', minval=0.01, step=0.01, tooltip='Calculate the standard deviation of bollinger bands./Calcula o desvio padrão das bandas de bollinger.')
emaL                  = input.int(80, title='EMA Length/Comprimento da Média Móvel Exponencial', minval=1, step=1, tooltip='Calculate the length of EMA./Calcula o comprimento da EMA.')
highestHighL          = input.int(7, title='Highest High Length/Comprimento da Alta Maior', minval=1, step=1, tooltip='Fetches the highest high candle from length input. Use to set stop loss for short position./Obtém a vela de maior alta com base na medida fornecida. Usa para definir o stop loss para uma posição curta.')
lowestLowL            = input.int(7, title='Lowest Low Length/Comprimento da Baixa Menor', minval=1, step=1, tooltip='Fetches the lowest low candle from length input. Use to set stop loss for long position./Obter a vela de menor baixa com base na medida fornecida. Usa para definir o stop loss para uma posição longa.')
targetFactor          = input.float(1.6, title='Target Take Profit/Objetivo de Lucro Alvo', minval=0.1, step=0.1, tooltip='Calculate the take profit factor when entry position./Calcula o fator do alvo lucro ao entrar na posição.')
emaTrend              = input.bool(true, title='Check Trend EMA/Verificar Tendência da Média Móvel Exponencial', tooltip='Use EMA as trend verify for opening position./Usa a EMA como verificação de tendência para abrir posição.')
crossoverCheck        = input.bool(false, title='Add Another Crossover Check/Adicionar Mais uma Verificação de Cruzamento Superior', tooltip='This option is to add one more veryfication attempt to check if price is crossover upper bollinger band./Esta opção é para adicionar uma verificação adicional para avaliar se o preço cruza a banda superior da banda de bollinger.')
crossunderCheck       = input.bool(false, title='Add Another Crossunder Check/Adicionar Mais uma Verificação de Cruzamento Inferior', tooltip='This option is to add one more veryfication attempt to check if price is crossunder lower bollinger band./Esta opção é para adicionar uma verificação adicional para avaliar se o preço cruza a banda inferior da banda de bollinger.')
insideBarPatternCheck = input.bool(true, title='Show Inside Bar Pattern/Mostrar Padrão de Inside Bar', tooltip='This option is to show possible inside bar pattern./Esta opção é para mostrar um possível padrão de inside bar.')

[middle, upper, lower] = ta.bb(close, bbL, mult)
ema                    = ta.ema(close, emaL)
highestHigh            = ta.highest(high, highestHighL)
lowestLow              = ta.lowest(low, lowestLowL)
isCrossover            = ta.crossover(close, upper) ? 1 : 0
isCrossunder           = ta.crossunder(close, lower) ? 1 : 0

isPrevBarHighGreaterCurBarHigh = high[1] > high ? 1 : 0
isPrevBarLowLesserCurBarLow    = low[1] < low ? 1 : 0
isInsideBar                    = isPrevBarHighGreaterCurBarHigh and isPrevBarLowLesserCurBarLow ? 1 : 0

isBarLong  = ((close - open) > 0) ? 1 : 0
isBarShort = ((close - open) < 0) ? 1 : 0

isLongCross  = crossoverCheck ? ((isBarLong and not isBarShort) and (open < upper and close > upper)) ? 1 : 0 : isCrossover ? 1 : 0
isShortCross = crossunderCheck ? ((isBarShort and not isBarLong) and (close < lower and open > lower)) ? 1 : 0 : isCrossunder ? 1 : 0

isCandleAboveEma = close > ema ? 1 : 0
isCandleBelowEma = close < ema ? 1 : 0

isLongCondition  = emaTrend ? isLongCross and isCandleAboveEma ? 1 : 0 : isLongCross
isShortCondition = emaTrend ? isShortCross and isCandleBelowEma ? 1 : 0 : isShortCross

isPositionNone  = strategy.position_size == 0 ? 1 : 0
isPositionLong  = strategy.position_size > 0 ? 1 : 0
isPositionShort = strategy.position_size < 0 ? 1 : 0

var float enterLong     = 0.0
var float stopLossLong  = 0.0
var float targetLong    = 0.0
var float enterShort    = 0.0
var float stopLossShort = 0.0
var float targetShort   = 0.0
var bool isLongEntry    = false
var bool isShortEntry   = false

if (isPositionNone)
    isLongEntry   := false
    isShortEntry  := false
    enterLong     := 0.0
    stopLossLong  := 0.0
    targetLong    := 0.0
    enterShort    := 0.0
    stopLossShort := 0.0
    targetShort   := 0.0
if (isPositionShort or isPositionNone)
    isLongEntry  := false
    enterLong    := 0.0
    stopLossLong := 0.0
    targetLong   := 0.0
if (isPositionLong or isPositionNone)
    isShortEntry  := false
    enterShort    := 0.0
    stopLossShort := 0.0
    targetShort   := 0.0
if (isPositionLong and isLongEntry)
    isLongEntry   := true
    isShortEntry  := false
    enterShort    := 0.0
    stopLossShort := 0.0
    targetShort   := 0.0
if (isPositionShort and isShortEntry)
    isShortEntry := true
    isLongEntry  := false
    enterLong    := 0.0
    stopLossLong := 0.0
    targetLong   := 0.0

if (isLongCondition and not isLongEntry)
    isLongEntry  := true
    enterLong    := close
    stopLossLong := lowestLow
    targetLong   := (enterLong + (math.abs(enterLong - stopLossLong) * targetFactor))
    alertMessage = '{ "side/lado": "buy", "entry/entrada": ' + str.tostring(enterLong) + ', "stop": ' + str.tostring(stopLossLong) + ', "target/alvo": ' + str.tostring(targetLong) + ' }'
    alert(alertMessage)
    strategy.entry('Long', strategy.long)
    strategy.exit('Exit Long', 'Long', stop=stopLossLong, limit=targetLong)

if (isShortCondition and not isShortEntry)
    isShortEntry  := true
    enterShort    := close
    stopLossShort := highestHigh
    targetShort   := (enterShort - (math.abs(enterShort - stopLossShort) * targetFactor))
    alertMessage = '{ "side/lado": "sell", "entry/entrada": ' + str.tostring(enterShort) + ', "stop": ' + str.tostring(stopLossShort) + ', "target/alvo": ' + str.tostring(targetShort) + ' }'
    alert(alertMessage)
    strategy.entry('Short', strategy.short)
    strategy.exit('Exit Short', 'Short', stop=stopLossShort, limit=targetShort)

plot(upper, title='Upper Band', color=color.blue)
plot(middle, title='Middle Band', color=color.gray)
plot(lower, title='Lower Band', color=color.blue)
plot(ema, title='EMA', color=color.white)

barcolor(insideBarPatternCheck and isInsideBar and isBarLong ? color.lime : insideBarPatternCheck and isInsideBar and isBarShort ? color.maroon : na, title='Inside Bar Color in Long Bar Long and in Short Bar Short/Cor do Inside Bar em Barra Longa Longa e em Barra Curta Curta')

tablePosition    = position.bottom_right
tableColumns     = 2
tableRows        = 5
tableFrameWidth  = 1
tableBorderColor = color.gray
tableBorderWidth = 1

tableInfoTrade = table.new(position=tablePosition, columns=tableColumns, rows=tableRows, frame_width=tableFrameWidth, border_color=tableBorderColor, border_width=tableBorderWidth)

table.cell(table_id=tableInfoTrade, column=0, row=0)
table.cell(table_id=tableInfoTrade, column=1, row=0)

table.cell(table_id=tableInfoTrade, column=0, row=1, text='Entry Side/Lado da Entrada', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=0, row=2, text=isLongEntry ? 'LONG' : isShortEntry ? 'SHORT' : 'NONE/NENHUM', text_color=color.yellow)

table.cell(table_id=tableInfoTrade, column=1, row=1, text='Entry Price/Preço da Entrada', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=1, row=2, text=isLongEntry ? str.tostring(enterLong) : isShortEntry ? str.tostring(enterShort) : 'NONE/NENHUM', text_color=color.blue)

table.cell(table_id=tableInfoTrade, column=0, row=3, text='Take Profit Price/Preço Alvo Lucro', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=0, row=4, text=isLongEntry ? str.tostring(targetLong) : isShortEntry ? str.tostring(targetShort) : 'NONE/NENHUM', text_color=color.green)

table.cell(table_id=tableInfoTrade, column=1, row=3, text='Stop Loss Price/Preço Stop Loss', text_color=color.white)
table.cell(table_id=tableInfoTrade, column=1, row=4, text=isLongEntry ? str.tostring(stopLossLong) : isShortEntry ? str.tostring(stopLossShort) : 'NONE/NENHUM', text_color=color.red)

مزید