ڈبل اندر بار & رجحان کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-30 15:11:48
ٹیگز:

img

ڈبل اندر بار & رجحان کی حکمت عملی

جائزہ

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

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

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

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

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

خطرے کا تجزیہ

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

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

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

خلاصہ

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-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/
// © Kaspricci

//@version=5
strategy(
     title = "Double Inside Bar & Trend Strategy - Kaspricci", 
     shorttitle = "Double Inside Bar & Trend", 
     overlay=true, 
     initial_capital = 100000, 
     currency = currency.USD, 
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100, 
     calc_on_every_tick = true, 
     close_entries_rule = "ANY")

// ================================================ Entry Inputs ======================================================================
headlineEntry   = "Entry Seettings"

maSource        = input.source(defval = close,             group = headlineEntry, title = "MA Source")
maType          = input.string(defval = "HMA",             group = headlineEntry, title = "MA Type", options = ["EMA", "HMA", "SMA", "SWMA", "VWMA", "WMA"])
maLength        = input.int(   defval = 45,    minval = 1, group = headlineEntry, title = "HMA Length")

float ma = switch maType 
    "EMA"  => ta.ema(maSource,  maLength)
    "HMA"  => ta.hma(maSource,  maLength)
    "SMA"  => ta.sma(maSource,  maLength)
    "SWMA" => ta.swma(maSource)
    "VWMA" => ta.vwma(maSource, maLength)
    "WMA"  => ta.wma(maSource,  maLength)

plot(ma, "Trend MA", color.purple)

// ================================================ Trade Inputs ======================================================================
headlineTrade   = "Trade Seettings"

stopLossType    = input.string(defval = "ATR",                         group = headlineTrade,                 title = "Stop Loss Type",            options = ["ATR", "FIX"])
atrLength       = input.int(   defval = 50,   minval = 1,              group = headlineTrade, inline = "ATR", title = "   ATR: Length                 ")
atrFactor       = input.float( defval =  2.5, minval = 0, step = 0.05, group = headlineTrade, inline = "ATR", title = "Factor       ",             tooltip = "multiplier for ATR value")
takeProfitRatio = input.float( defval =  2.0, minval = 0, step = 0.05, group = headlineTrade,                 title = "            TP Ration",     tooltip = "Multiplier for Take Profit calculation")
fixStopLoss     = input.float( defval = 10.0, minval = 0, step = 0.5,  group = headlineTrade, inline = "FIX", title = "   FIX: Stop Loss             ") * 10 // need this in ticks
fixTakeProfit   = input.float( defval = 20.0, minval = 0, step = 0.5,  group = headlineTrade, inline = "FIX", title = "Take Profit",               tooltip = "in pips") * 10 // need this in ticks
useRiskMagmt    = input.bool(  defval = true,                          group = headlineTrade, inline = "RM",  title = "")
riskPercent     = input.float( defval = 1.0,  minval = 0., step = 0.5, group = headlineTrade, inline = "RM",  title = "Risk in %                ", tooltip = "This will overwrite quantity from startegy settings and calculate the trade size based on stop loss and risk percent") / 100

// ================================================ Filter Inputs =====================================================================
headlineFilter  = "Filter Setings"

// date filter
filterDates     = input.bool(defval = false,                                 group = headlineFilter, title = "Filter trades by dates")
startDateTime   = input(defval = timestamp("2022-01-01T00:00:00+0000"), group = headlineFilter, title = "       Start Date & Time")
endDateTime     = input(defval = timestamp("2099-12-31T23:59:00+0000"), group = headlineFilter, title = "       End Date & Time  ")

dateFilter      = not filterDates or (time >= startDateTime and time <= endDateTime)

// session filter
filterSession   = input.bool(title = "Filter trades by session", defval = false, group = headlineFilter)
session         = input(title = "       Session", defval = "0045-2245", group = headlineFilter)

sessionFilter   = not filterSession or time(timeframe.period, session, timezone = "CET")

// ================================================ Trade Entries and Exits =====================================================================

// calculate stop loss
stopLoss        = switch stopLossType
    "ATR" => nz(math.round(ta.atr(atrLength) * atrFactor / syminfo.mintick, 0), 0)
    "FIX" => fixStopLoss

// calculate take profit
takeProfit      = switch stopLossType
    "ATR" => math.round(stopLoss * takeProfitRatio, 0)
    "FIX" => fixTakeProfit


doubleInsideBar = high[2] > high[1] and high[2] > high[0] and low[2] < low[1] and low[2] < low[0]

// highlight mother candel and inside bar candles
bgcolor(doubleInsideBar ? color.rgb(33, 149, 243, 80) : na)
bgcolor(doubleInsideBar ? color.rgb(33, 149, 243, 80) : na, offset = -1)
bgcolor(doubleInsideBar ? color.rgb(33, 149, 243, 80) : na, offset = -2)

var float buyStopPrice  = na
var float sellStopPrice = na

if (strategy.opentrades == 0 and doubleInsideBar and barstate.isconfirmed)
    buyStopPrice  := high[0] // high of recent candle (second inside bar)
    sellStopPrice := low[0] // low of recent candle (second inside bar)

    tradeID = str.tostring(strategy.closedtrades + strategy.opentrades + 1)

    quantity = useRiskMagmt ? math.round(strategy.equity * riskPercent / stopLoss, 2) / syminfo.mintick : na

    commentTemplate = "{0} QTY: {1,number,#.##} SL: {2} TP: {3}"

    if (close > ma)
        longComment = str.format(commentTemplate, tradeID + "L", quantity, stopLoss / 10, takeProfit / 10)
        strategy.entry(tradeID + "L", strategy.long, qty = quantity, stop = buyStopPrice, comment = longComment)
        strategy.exit(tradeID + "SL", tradeID + "L", profit = takeProfit, loss = stopLoss, comment_loss = "SL", comment_profit = "TP")

    if (close < ma)
        shortComment = str.format(commentTemplate, tradeID + "S", quantity, stopLoss / 10, takeProfit / 10)
        strategy.entry(tradeID + "S", strategy.short, qty = quantity, stop = sellStopPrice, comment = shortComment)
        strategy.exit(tradeID + "SL", tradeID + "S", profit = takeProfit, loss = stopLoss, comment_loss = "SL", comment_profit = "TP")

// as soon as the first pending order has been entered the remaing pending order shall be cancelled 
if strategy.opentrades > 0
    currentTradeID = str.tostring(strategy.closedtrades + strategy.opentrades)
    strategy.cancel(currentTradeID + "S")
    strategy.cancel(currentTradeID + "L")


مزید