ডাবল ইনসাইড বার এবং ট্রেন্ড কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০১-৩০ ১৫ঃ১১ঃ৪৮
ট্যাগঃ

img

ডাবল ইনসাইড বার এবং ট্রেন্ড কৌশল

সারসংক্ষেপ

ডাবল ইনসাইড বার এবং ট্রেন্ড কৌশল একটি পরিমাণগত ট্রেডিং কৌশল যা প্রবণতা নির্ধারণের জন্য চলমান গড়ের সাথে মিলিত ডাবল ইনসাইড বার প্যাটার্নগুলি ব্যবহার করে। এটি ডাবল ইনসাইড বারগুলির সাথে উচ্চ সম্ভাব্যতার ট্রেডিং সংকেত সরবরাহ করে এবং চলমান গড় রেখার দ্বারা বিচার করা প্রবণতা অনুসারে দীর্ঘ বা সংক্ষিপ্ত যায়।

কৌশলগত যুক্তি

  1. প্রবণতা মূল্যায়নের জন্য হিউল মুভিং এভারেজ (এইচএমএ) ব্যবহার করুন।
  2. যখন একটি ডাবল ইনসাইড বার প্যাটার্ন ঘটে, তখন এটি একটি উচ্চ সম্ভাব্যতা ট্রেডিং সংকেত হিসাবে বিবেচিত হয়। একটি ইনসাইড বার এমন একটি প্যাটার্ন যেখানে শেষ বারের উচ্চ এবং নিম্ন পূর্ববর্তী বার দ্বারা আচ্ছাদিত হয়।
  3. যদি বন্ধের মূল্য MA এর উপরে থাকে এবং একটি উত্থানশীল অভ্যন্তরীণ বার গঠন করে, তাহলে অভ্যন্তরীণ বারের উচ্চতার আশেপাশে একটি ক্রয় স্টপ অর্ডার স্থাপন করুন। যদি বন্ধের দাম MA এর নীচে থাকে এবং অভ্যন্তরীণ বারের অভ্যন্তরীণ bearish গঠন করে, তাহলে অভ্যন্তরীণ বারের নিম্নের আশেপাশে একটি বিক্রয় স্টপ অর্ডার স্থাপন করুন।
  4. একবার স্টপ অর্ডারটি ট্রিগার হয়ে গেলে, স্টপ লস সেট করুন এবং পূর্বনির্ধারিত স্টপ লস শতাংশ এবং লাভের অনুপাতের ভিত্তিতে লাভ নিন।

সুবিধা বিশ্লেষণ

  1. অভ্যন্তরীণ বারগুলি উচ্চ সম্ভাব্যতা বিপরীত সংকেত সরবরাহ করে। ডাবল অভ্যন্তরীণ বারগুলির ঘটনাটি স্বল্পমেয়াদী মূল্য বিপরীতের ইঙ্গিত দিতে পারে।
  2. মূল প্রবণতা দিক অনুসরণ করার জন্য চলমান গড়ের সাথে এটি ব্যবহার করা হয়, এটি লাভের সম্ভাবনা উন্নত করে।
  3. ট্রেন্ডের অগ্রগতি পয়েন্টের আশেপাশে স্টপ অর্ডার ব্যবহার করে ভাল প্রবেশের সুযোগ রয়েছে।

ঝুঁকি বিশ্লেষণ

  1. ব্যাপ্তি বাজারে, বারের ভিতর থেকে ট্রেডিং সিগন্যালগুলি প্রায়শই ক্ষতির দিকে পরিচালিত করতে পারে।
  2. প্রবণতা সূচক হিসাবে চলমান গড়টিও মিথ্যা সংকেত দিতে পারে, যার ফলে বিরোধী প্রবণতা ট্রেডিং থেকে ক্ষতি হতে পারে।
  3. যদি স্টপ লস খুব সংকীর্ণভাবে সেট করা হয়, তবে এটি ছোট মূল্য স্লিপ দ্বারা সক্রিয় হতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

  1. প্রবণতা মূল্যায়ন সূচক হিসাবে চলমান গড়ের বিভিন্ন পরামিতি পরীক্ষা করুন।
  2. একটি স্পষ্ট প্রবণতা ছাড়া অন্ধ ট্রেডিং এড়ানো, বাজারের পরিসীমা ফিল্টার করার জন্য অন্যান্য সূচক একত্রিত করুন।
  3. বিগ ডেটা বিশ্লেষণের মাধ্যমে আরও অনুকূল প্যারামিটার সমন্বয় অর্জন করুন, যেমন চলমান গড় সময়কাল, স্টপ লস মাল্টিপ্লাইয়ার, লাভের অনুপাত ইত্যাদি।
  4. ট্রেডিং সেশন এবং পণ্যগুলিতে ফিল্টার যুক্ত করুন যাতে বিভিন্ন সময়সীমা এবং পণ্য বৈশিষ্ট্যগুলির সাথে খাপ খাইয়ে নেওয়া যায়।

সংক্ষিপ্তসার

ডাবল ইনসাইড বার এবং ট্রেন্ড কৌশলটি ডাবল ইনসাইড বার থেকে উচ্চ সম্ভাব্যতার ট্রেডিং সংকেতগুলি ব্যবহার করে, যা দীর্ঘ বা সংক্ষিপ্ত হওয়ার জন্য প্রধান প্রবণতার দিক নির্ধারণ করতে চলমান গড় দ্বারা সহায়তা করে, এটি একটি অপেক্ষাকৃত স্থিতিশীল ব্রেকআউট কৌশল করে তোলে। প্যারামিটার অপ্টিমাইজেশান এবং লজিক অপ্টিমাইজেশনের মাধ্যমে, এই কৌশলটির অভিযোজনযোগ্যতা এবং লাভজনকতা উন্নত করা যেতে পারে।


/*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")


আরো