بریک آؤٹ بینڈ فکسڈ سٹاپ نقصان کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-03 14:31:21
ٹیگز:

img

جائزہ

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

حکمت عملی کا اصول

حکمت عملی چار اہم حصوں پر مشتمل ہے: پوزیشن مینجمنٹ، بریک آؤٹ بینڈ کی نشاندہی، سٹاپ نقصان کی ترتیب اور پوزیشن سائزنگ.

سب سے پہلے ، حکمت عملی چیک کرتی ہے کہ آیا کوئی کھلی پوزیشن ہے۔ اگر ایسا ہے تو ، کوئی نیا اشارہ پیدا نہیں ہوگا۔

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

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

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

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

فوائد

یہ بریک آؤٹ بینڈ فکسڈ سٹاپ نقصان کی حکمت عملی مندرجہ ذیل فوائد ہیں:

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

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

  3. سادہ اور موثر بریکآؤٹ کی نشاندہی۔ بینڈ کے ساتھ بریکآؤٹ کی نشاندہی کرنا آسان اور براہ راست ہے ، اور اس سے رجحان کی سمت کو مؤثر طریقے سے نشاندہی کی جاسکتی ہے۔ ایک ہی قیمت کی سطح کے بریکآؤٹ کے مقابلے میں ، یہ بریکآؤٹ بینڈ کی نشاندہی رجحان سے دور مزید غلط اشاروں سے بچ سکتی ہے۔

  4. ٹریلنگ اسٹاپ نقصان سے منافع میں اضافہ ہوتا ہے۔ ٹریلنگ اسٹاپ نقصان کے لئے حقیقی وقت میں اسٹاپ نقصان کو ایڈجسٹ کرنے کی حکمت عملی کی صلاحیت زیادہ منافع میں مقفل کرنے میں مدد کرتی ہے۔

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

  6. صاف کوڈ کی ساخت۔ کوڈ کی ساخت واضح اور ماڈیولر ہے ، جس سے سمجھنے اور بہتر بنانے میں آسانی ہوتی ہے۔

خطرات

فوائد کے باوجود، اس حکمت عملی کے لئے کچھ خطرات نوٹ کرنے کے لئے ہیں:

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

  2. فکسڈ اسٹاپ نقصان بہت مکینیکل ہوسکتا ہے۔ مارکیٹ کی قیمتیں اکثر فرق ہوتی ہیں۔ فکسڈ اسٹاپ نقصان قوانین پر بہت زیادہ انحصار کرسکتا ہے اور ایڈجسٹمنٹ میں لچک کی کمی کا شکار ہوتا ہے۔

  3. تجارت کی تعدد پر کوئی حد نہیں۔ حکمت عملی تجارت کی تعدد کو محدود نہیں کرتی ہے اور بہت کثرت سے تجارت کرسکتی ہے۔ تعدد کو محدود کرنے کے لئے دوسرے قواعد کی ضرورت ہے۔

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

  5. بریک آؤٹ کی سمت غلط سگنل دے سکتی ہے۔ قیمتوں میں اتار چڑھاؤ یا پل بیک کے دوران غلط بریک آؤٹ سگنل ہوسکتے ہیں۔ حکمت عملی کو بہتر بنانے کے لئے مزید شرائط کی ضرورت ہے۔

  6. کوئی منافع لینے کا طریقہ کار نہیں۔ اس حکمت عملی میں فی الحال منافع میں فعال طور پر مقفل کرنے کی کوئی منافع لینے کی صلاحیت نہیں ہے۔ اس سے غیر اطمینان بخش منافع پیدا ہوسکتا ہے۔

ان خطرات سے نمٹنے کے لئے ، حکمت عملی کو بہتر بنانے کے کچھ طریقے شامل ہیں:

  1. سگنل کی کوالٹی کو فلٹر کرنے کے لئے اشارے شامل کرنا، جیسے MACD، KD وغیرہ.

  2. معیار کا اندازہ کرنے کے لئے توڑ طاقت کے اشارے شامل کرنا۔ مثال کے طور پر ، حجم میں تبدیلیوں کے ذریعہ طاقت کا فیصلہ کرنا۔

  3. کھلی تجارت کی تعدد کی حدود شامل کرنا، مثال کے طور پر ایک تجارت فی دن.

  4. مقررہ سٹاپ نقصان کی منطق کو بہتر بنانا، مثال کے طور پر ایک حد سے زیادہ فیصد پر مبنی سٹاپ نقصان.

  5. دوسرے فلٹرز کا اضافہ، جیسے اتار چڑھاؤ، سٹاپ نقصان کو بڑھانا وغیرہ

  6. منافع لینے کی حکمت عملیوں کو شامل کرنا، مثال کے طور پر مزاحمت کے قریب منافع حاصل کرنا۔

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

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

  1. متعدد تکنیکی اشارے کا استعمال کرتے ہوئے سگنل کے معیار کو بہتر بنانے کے لئے فلٹرز شامل کرنا اور رجحان کی کیفیت کا اندازہ لگانا۔ توڑنے کی طاقت کا بھی اندازہ لگانا۔

  2. زیادہ لچک کے ل stop اسٹاپ نقصان کو بہتر بنانا۔ ایک خاص ریٹریکشن کے بعد فیصد پر مبنی ٹریلنگ اسٹاپ میں تبدیل ہوسکتا ہے۔ اتار چڑھاؤ کی بنیاد پر متحرک طور پر بھی بہتر بنا سکتا ہے۔

  3. وقت کی مدت یا تعدد پر فلٹرز کا اضافہ کرکے زیادہ سے زیادہ تجارت سے بچنے کے لئے تجارت کی تعدد کو کنٹرول کرنا۔

  4. ٹرینڈ انڈیکیٹرز کو شامل کرنا تاکہ ٹائمنگ کو بہتر بنایا جاسکے، مثلاً ٹرینڈ کی تصدیق کا انتظار کرنا۔

  5. منافع حاصل کرنے کی حکمت عملیوں کو بہتر بنانا تاکہ منافع کا ہدف ، منافع کی روک تھام ، اتار چڑھاؤ کی روک تھام وغیرہ کے ذریعے منافع میں اضافہ کیا جاسکے۔

  6. بیک ٹسٹ کی بنیاد پر رسک پیرامیٹرز کو بہتر بنانا، جیسے فکسڈ اسٹاپ کی رقم، بریک آؤٹ کی مدت وغیرہ۔

  7. سگنل، فلٹر، رسک، منافع کے ماڈیولز کو مزید الگ کرکے بہتر توسیع کے لیے کوڈ کو ری فیکٹر کرنا۔

  8. ثالثی کے مواقع کے ل more زیادہ مصنوعات کی جانچ کرنا۔ مختلف مصنوعات کے مجموعوں میں فائدہ کا اندازہ کریں۔

ان اصلاحاتی جہتوں کے ذریعے ، بریک آؤٹ اسٹاپ نقصان کی حکمت عملی زیادہ مضبوط اور منافع بخش ہوسکتی ہے۔ یہ مزید حکمت عملی کے مجموعوں میں توسیع کی بنیاد بھی رکھتا ہے۔

نتیجہ

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


/*backtest
start: 2023-10-26 00:00:00
end: 2023-10-28 03:00:00
period: 10m
basePeriod: 1m
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/
//@version=4
//@author=Takazudo

strategy("Fixed price SL",
  overlay=true,
  default_qty_type=strategy.fixed,
  initial_capital=0,
  currency=currency.USD)

var COLOR_TRANSPARENT = color.new(#000000, 100)
var COLOR_ENTRY_BAND = color.new(#43A6F5, 30)

//============================================================================
// config
//============================================================================

// Money management
_g1 = 'Money management'
var config_riskPrice = input(100, minval=1, title="Risk price for each entry", group=_g1)
var config_depositCurrency = input(title="Deposit currency", type=input.string, defval="USD", options=["USD"], group=_g1)

// Entry strategy
_g2 = 'Entry strategy'
var config_entryBandBars = input(defval = 100, title = "Entry band bar count",  minval=1, group=_g2)

// Backtesting range
_g3 = 'Backtesting range'
fromYear  = input(defval = 2018, title = "From Year",  minval = 1970, group=_g3)
fromMonth = input(defval = 1,    title = "From Month", minval = 1, maxval = 12, group=_g3)
fromDay   = input(defval = 1,    title = "From Day",   minval = 1, maxval = 31, group=_g3)
toYear  = input(defval = 2020, title = "To Year",  minval = 1970, group=_g3)
toMonth = input(defval = 12,    title = "To Month", minval = 1, maxval = 12, group=_g3)
toDay   = input(defval = 31,    title = "To Day",   minval = 1, maxval = 31, group=_g3)

//============================================================================
// exchange caliculations
//============================================================================

// mico pip size caliculation
// ex1: AUDCAD -> 0.0001
// ex2: USDJPY -> 0.01
f_calcMicroPipSize() =>
    _base = syminfo.basecurrency
    _quote = syminfo.currency
    _result = 0.0001
    if _quote == 'JPY'
        _result := _result * 100
    if _base == 'BTC'
        _result := _result * 100
    _result

// convert price to pips
f_convertPriceToPips(_price) =>
    _microPipSize = f_calcMicroPipSize()
    _price / _microPipSize

// caliculate exchange rate between deposit and quote currency
f_calcDepositExchangeSymbolId() =>
    _result = ''
    _deposit = config_depositCurrency
    _quote = syminfo.currency
    if (_deposit == 'USD') and (_quote == 'USD')
        _result := na
    if (_deposit == 'USD') and (_quote == 'AUD')
        _result := 'OANDA:AUDUSD'
    if (_deposit == 'EUR') and (_quote == 'USD')
        _result := 'OANDA:EURUSD'
    if (_deposit == 'USD') and (_quote == 'GBP')
        _result := 'OANDA:GBPUSD'
    if (_deposit == 'USD') and (_quote == 'NZD')
        _result := 'OANDA:NZDUSD'
    if (_deposit == 'USD') and (_quote == 'CAD')
        _result := 'OANDA:USDCAD'
    if (_deposit == 'USD') and (_quote == 'CHF')
        _result := 'OANDA:USDCHF'
    if (_deposit == 'USD') and (_quote == 'JPY')
        _result := 'OANDA:USDJPY'
    _result

// Let's say we need CAD to USD exchange
// However there's only "OANDA:USDCAD" symbol.
// Then we need to invert the exhchange rate.
// this function tells us whether we should invert the rate or not
f_calcShouldInvert() =>
    _result = false
    _deposit = config_depositCurrency
    _quote = syminfo.currency
    if (_deposit == 'USD') and (_quote == 'CAD')
        _result := true
    if (_deposit == 'USD') and (_quote == 'CHF')
        _result := true
    if (_deposit == 'USD') and (_quote == 'JPY')
        _result := true
    _result

// caliculate how much quantity should I buy or sell
f_calcQuantitiesForEntry(_depositExchangeRate, _slPips) =>
    _microPipSize = f_calcMicroPipSize()
    _priceForEachPipAsDeposit = _microPipSize * _depositExchangeRate
    _losePriceOnSl = _priceForEachPipAsDeposit * _slPips
    floor(config_riskPrice / _losePriceOnSl)

//============================================================================
// Quantity caliculation
//============================================================================

depositExchangeSymbolId = f_calcDepositExchangeSymbolId()

// caliculate deposit exchange rate
rate = security(depositExchangeSymbolId, timeframe.period, hl2)
shouldInvert = f_calcShouldInvert()
depositExchangeRate = if config_depositCurrency == syminfo.currency
    // if USDUSD, no exchange of course
    1
else
    // else, USDCAD to CADUSD invert if we need
    shouldInvert ? (1 / rate) : rate

//============================================================================
// Range Edge caliculation
//============================================================================

f_calcEntryBand_high() =>
    _highest = max(open[3], close[3])
    for i = 4 to (config_entryBandBars - 1)
        _highest := max(_highest, open[i], close[i])
    _highest

f_calcEntryBand_low() =>
    _lowest = min(open[3], close[3])
    for i = 4 to (config_entryBandBars - 1)
        _lowest := min(_lowest, open[i], close[i])
    _lowest

entryBand_high = f_calcEntryBand_high()
entryBand_low = f_calcEntryBand_low()
entryBand_height = entryBand_high - entryBand_low

plot(entryBand_high, color=COLOR_ENTRY_BAND, linewidth=1)
plot(entryBand_low, color=COLOR_ENTRY_BAND, linewidth=1)

rangeBreakDetected_long = entryBand_high < close
rangeBreakDetected_short = entryBand_low > close

shouldMakeEntryLong = (strategy.position_size == 0) and rangeBreakDetected_long
shouldMakeEntryShort = (strategy.position_size == 0) and rangeBreakDetected_short

//============================================================================
// SL & Quantity
//============================================================================

var sl_long = hl2
var sl_short = hl2

entryQty = 0
slPips = 0.0

// just show info bubble
f_showEntryInfo(_isLong) =>
    _str =
      'SL pips: ' + tostring(slPips) + '\n' +
      'Qty: ' + tostring(entryQty)
    _bandHeight = entryBand_high - entryBand_low
    _y = _isLong ? (entryBand_low + _bandHeight * 1/4) : (entryBand_high - _bandHeight * 1/4)
    _style = _isLong ? label.style_label_up : label.style_label_down
    label.new(bar_index, _y, _str, size=size.large, style=_style)

if shouldMakeEntryLong
    sl_long := (entryBand_high + entryBand_low) / 2
    slPips := f_convertPriceToPips(close - sl_long)
    entryQty := f_calcQuantitiesForEntry(depositExchangeRate, slPips)
if shouldMakeEntryShort
    sl_short := (entryBand_high + entryBand_low) / 2
    slPips := f_convertPriceToPips(sl_short - close)
    entryQty := f_calcQuantitiesForEntry(depositExchangeRate, slPips)

// trailing SL
if strategy.position_size > 0
    sl_long := max(sl_long, entryBand_low)
if strategy.position_size < 0
    sl_short := min(sl_short, entryBand_high)

//============================================================================
// backtest duration
//============================================================================

// Calculate start/end date and time condition
startDate  = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear,   toMonth,   toDay,   00, 00)

//============================================================================
// make entries
//============================================================================

if (true)
    if shouldMakeEntryLong
        strategy.entry(id="Long", long=true, stop=close, qty=entryQty)
        f_showEntryInfo(true)
    if shouldMakeEntryShort
        strategy.entry(id="Short", long=false, stop=close, qty=entryQty)
        f_showEntryInfo(false)

strategy.exit('Long-SL/TP', 'Long', stop=sl_long)
strategy.exit('Short-SL/TP', 'Short', stop=sl_short)

//============================================================================
// plot misc
//============================================================================

sl = strategy.position_size > 0 ? sl_long :
  strategy.position_size < 0 ? sl_short : na

plot(sl, color=color.red, style=plot.style_cross, linewidth=2, title="SL")

value_bgcolor = rangeBreakDetected_long ? color.green :
  rangeBreakDetected_short ? color.red : COLOR_TRANSPARENT

bgcolor(value_bgcolor, transp=95)


مزید