হল ইন্ডিকেটর এবং স্টোকাস্টিক ইন্ডিকেটরের সম্মিলিত ট্রেডিং কৌশল


সৃষ্টির তারিখ: 2023-10-18 12:40:23 অবশেষে সংশোধন করুন: 2023-10-18 12:40:23
অনুলিপি: 1 ক্লিকের সংখ্যা: 1028
1
ফোকাস
1617
অনুসারী

হল ইন্ডিকেটর এবং স্টোকাস্টিক ইন্ডিকেটরের সম্মিলিত ট্রেডিং কৌশল

ওভারভিউ

এই কৌশলটি হলের সূচক ব্যবহার করে প্রবণতার দিক নির্ধারণ করে এবং তারপর এলোমেলো সূচকগুলির সাথে মিলিত হয়। হলের মধ্যম ট্র্যাকটি যখন ট্র্যাকের নিচে দিয়ে যায় তখন এটি প্রবেশ করে এবং যখন এটি প্রবেশ করে তখন এটি প্রবেশ করে। একই সময়ে, যখন এলোমেলো সূচক কে লাইনটি সুপার-বয় অঞ্চলের নীচে থেকে ডি লাইনটি অতিক্রম করে তখন এটি বেশি করে এবং যখন এটি সুপার-বিক্রয় অঞ্চল থেকে অতিক্রম করে তখন এটি খালি করে।

কৌশল নীতি

এই ট্রেডিং কৌশলটি মূলত বাজার প্রবণতার দিকনির্দেশের জন্য হল সূচক ব্যবহার করে, তারপর র্যান্ডম সূচক ব্যবহার করে নির্দিষ্ট প্রবেশের জন্য।

প্রথমত, কৌশলটি হলের সূচকের গণনা পদ্ধতি সংজ্ঞায়িত করে, যার মধ্যে রয়েছে মধ্যম, উপরের এবং নীচের ট্র্যাকের গণনা সূত্র। মধ্যম ট্র্যাকটি একটি ওজনের চলমান গড় WMA ব্যবহার করে গণনা করা হয়, উপরের এবং নীচের ট্র্যাকটি যথাক্রমে মধ্যম ট্র্যাকের বিচ্যুতি।

তারপরে, মধ্যম ট্র্যাক এবং উপরের এবং নীচের ট্র্যাকের সম্পর্কের উপর ভিত্তি করে প্রবণতার দিকটি বিচার করুন। যখন মধ্যম ট্র্যাকটি ট্র্যাকের নীচে চলে যায়, তখন এটি একটি শক্তিশালী ক্রেতাদের প্রতিনিধিত্ব করে, যা একটি মুদ্রাস্ফীতির প্রবণতা; যখন মধ্যম ট্র্যাকটি ট্র্যাকের নীচে চলে যায়, তখন এটি একটি শক্তিশালী বিক্রেতার প্রতিনিধিত্ব করে, যা একটি মুদ্রাস্ফীতির প্রবণতা।

এছাড়া, কৌশলটিতে এলোমেলো সূচকগুলির জন্য গণনা পদ্ধতি সংজ্ঞায়িত করা হয়েছে, যার মধ্যে রয়েছে K এবং D মানগুলির জন্য গণনা সূত্র। K মানটি RSI এর SMA মসৃণকরণ এবং D মানটি আবার K মানের SMA মসৃণকরণ।

ট্রেন্ডের দিক নির্ণয় করার পর, যদি উর্ধমুখী হয়, তাহলে যখন এলোমেলো সূচকের K লাইনটি ওভারসোল এলাকার নিচে থেকে D লাইনটি অতিক্রম করে তখন বেশি করে; যদি উর্ধমুখী হয়, তাহলে যখন K লাইনটি ওভারসোল এলাকার উপরে থেকে D লাইনটি অতিক্রম করে তখন খালি করে।

এইভাবে, হল সূচকের প্রবণতা বিচার এবং এলোমেলো সূচকের ওভার-বিক্রয় ওভার-বিক্রয় বিচার একত্রিত করে, তুলনামূলকভাবে স্থিতিশীল এবং সঠিক প্রবেশ করা যেতে পারে।

সামর্থ্য বিশ্লেষণ

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

বিশেষ করে, নিম্নলিখিত সুবিধাগুলি রয়েছেঃ

  1. হোল সূচকগুলি বাজারের প্রবণতার দিকনির্দেশনা কার্যকরভাবে নির্ধারণ করতে পারে এবং বৃহত্তর স্তরের অবস্থান নির্ধারণ করতে পারে;

  2. এলোমেলো সূচকগুলি অতিরিক্ত ক্রয় ও বিক্রয়ের জন্য ব্যবহার করা হয়, যা ক্রয় ও বিক্রয়ের শক্তির পরিবর্তনকে বোঝায় এবং বাজারে প্রবেশের জন্য একটি ভাল সময় নির্ধারণ করে।

  3. এই দুইটি সংকেত একসাথে ব্যবহার করা হলে, একে অপরকে যাচাই করতে এবং মিথ্যা সংকেত হ্রাস করতে তাদের নিজস্ব সুবিধাগুলি ব্যবহার করা যেতে পারে।

  4. প্যারামিটার সামঞ্জস্যের মাধ্যমে, বিভিন্ন জাত এবং সময়কালের সাথে নমনীয়ভাবে মানিয়ে নিতে পারে, প্রযোজ্যতা শক্তিশালী;

  5. ট্রেডিং চ্যানেল তৈরির জন্য মধ্যম ট্র্যাকের বিচ্যুতি ব্যবহার করা হয়, যেখানে সম্ভাব্য সমর্থন এবং প্রতিরোধের চিহ্নিত করা যায়।

  6. STOP LOSS, EXIT ON TARGETS percent used to scale positions বড় পরিমাণে অর্ডারের নিয়ন্ত্রণ

  7. Use of hull data Dictionary gives multiple asset class flexibility

  8. নির্বাচিত অপ্টিমাইজেশান দিকনির্দেশনা কৌশল স্থিতিশীলতা এবং আয় বৃদ্ধি করতে পারে

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

এই কৌশলটির কিছু ঝুঁকি রয়েছে যা সম্পর্কে সতর্ক হওয়া দরকার, প্রধানতঃ

  1. হোল সূচকটি পিছিয়ে আছে এবং প্রবণতা পাল্টাতে পারে, যার ফলে অপ্রয়োজনীয় ক্ষতি হতে পারে।

  2. এলোমেলো সূচক প্যারামিটার সেটিং ভুল হতে পারে অতিরিক্ত সংকেত উত্পন্ন, যথাযথভাবে K লাইন এবং D লাইন ক্রস সংকেত নির্বাচন করা উচিত।

  3. হল সূচকটি র্যান্ডম সূচকের সাথে ব্যবহার করা হয়, যদি প্যারামিটারগুলি ভুলভাবে মিলিত হয় তবে একটি ভুল সংকেত দেখা দিতে পারে।

  4. ট্রেডিং সিগন্যালের গুণমানের উপর প্রভাব ফেলতে পারে বড় এবং ছোট ট্র্যাকের প্রস্থ, যার জন্য সর্বোত্তম প্যারামিটার খুঁজে বের করার জন্য সতর্কতার সাথে পরীক্ষা করা প্রয়োজন।

  5. সাম্প্রতিক পরিস্থিতির জন্য, মধ্য ও দীর্ঘ রেখার সূচকগুলি খারাপ হতে পারে।

  6. Data mismatches between hull and stoch causing false signals

  7. Sharp trend changes not caught by hull can cause losses

  8. Testing on more timeframes/symbols needed to verify robustness

এই ঝুঁকির জন্য, নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ

  1. প্রবণতা পরিবর্তনের জন্য সংবেদনশীলতা বাড়ানোর জন্য হল সূচকের দৈর্ঘ্য যথাযথভাবে সংক্ষিপ্ত করা হয়েছে।

  2. এলোমেলো সূচকগুলির প্যারামিটারগুলি অপ্টিমাইজ করুন, মিথ্যা সংকেত হ্রাস করুন।

  3. সর্বোত্তম চ্যানেল প্রস্থের জন্য আপ-ডাউন ট্র্যাক প্যারামিটারগুলি সামঞ্জস্য করুন।

  4. অন্যান্য সূচক যাচাইকরণ সংকেত যোগ করুন, যেমন MACD ইত্যাদি।

  5. ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লস কৌশল যুক্ত করুন।

অপ্টিমাইজেশান দিক

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকেও উন্নত করা যেতে পারেঃ

  1. কৌশল স্থিতিশীলতা যাচাই করার জন্য আরও বেশি প্রজাতি এবং আরও বেশি সময়কালের প্যারামিটার পরীক্ষা করুন।

  2. ঝুঁকি নিয়ন্ত্রণের জন্য ক্ষতির ব্যবস্থা বাড়ানো। যেমন, ট্র্যাকিং ক্ষতি, চলমান ক্ষতি ইত্যাদি।

  3. এন্ট্রি শর্ত লজিক অনুকূলিতকরণ, কঠোরতর ফিল্টারিং শর্ত সেট করা, মিথ্যা সংকেত হ্রাস করা।

  4. এই গবেষণায় দেখা যাচ্ছে যে, কিভাবে হল নির্দেশক চ্যানেলের সাহায্যে সমর্থন ও প্রতিরোধের অবস্থানকে আরও ভালভাবে নির্ণয় করা যায়।

  5. অন্য সূচকগুলোতে ভেরিফিকেশন সিগন্যাল যোগ করা যায় কিনা তা খোঁজা হচ্ছে।

  6. প্যারামিটার অপ্টিমাইজেশান: যেমন হল সূচক দৈর্ঘ্য, এলোমেলো সূচক K, D মসৃণতা প্যারামিটার ইত্যাদি অপ্টিমাইজেশন।

  7. পজিশন ম্যানেজমেন্ট ফাংশন যুক্ত করা হয়েছে। পজিশন আকার পরিবর্তন করা হয়েছে, যেমন প্রত্যাহারের সংখ্যা, ধারাবাহিক বিজয় ইত্যাদি।

  8. স্টপ লস, স্টপ স্টপ নিয়ম যোগ করা হয়েছে।

  9. Optimize hull length parameter for better trend sensitivity

  10. Add additional filters or confirming indicators to improve signal quality

  11. Explore using hull bands to identify dynamic support/resistance levels

  12. Parameter optimization for stoch RSI lengths, overbought/oversold levels

  13. Introduce better position sizing and risk management rules

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-10-16 00:00:00
end: 2023-10-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
//Converted to Strategy by DashTrader
strategy("Hull Suite + Stoch RSI Strategy v1.1", overlay=true, pyramiding=1, initial_capital=100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.023)
strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

stoch_upper_input = input(88, "Stoch Upper Threshold", type=input.float)
stoch_lower_input = input(5, "Stoch Lower Threshold", type=input.float)
sl = input(0.7, "SL %", type=input.float, step=0.1)
tp = input(2.1, "TP %", type=input.float, step=0.1)
// slowEMA = ema(close, slowEMA_input)

// vwap = vwap(close)
// rsi = rsi(close, rsi_input)


// stoch rsi
smoothK = 3
smoothD = 3
lengthRSI = 14
lengthStoch = 14
rsi1 = rsi(close, 14)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
src = input(close, title="Source")
modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(180, title="Length(180-200 for floating S/R , 55 for swing entry)")
switchColor = input(true, "Color Hull according to trend?")
candleCol = input(false,title="Color candles based on Hull's Trend?")
visualSwitch  = input(true, title="Show as a Band?")
thicknesSwitch = input(1, title="Line Thickness")
transpSwitch = input(40, title="Band Transparency",step=5)

//FUNCTIONS
//HMA
HMA(_src, _length) =>  wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>  ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length)))
//THMA    
THMA(_src, _length) =>  wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length)
    
//SWITCH
Mode(modeSwitch, src, len) =>
      modeSwitch == "Hma"  ? HMA(src, len) :
      modeSwitch == "Ehma" ? EHMA(src, len) : 
      modeSwitch == "Thma" ? THMA(src, len/2) : na
      
//OUT
HULL = Mode(modeSwitch, src, length)
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)

bgcolor(color = k < stoch_lower_input  and crossover(k, d) ? color.green : na)
bgcolor(color = d > stoch_upper_input and crossover(d, k) ? color.red : na)

notInTrade = strategy.position_size == 0

if notInTrade and HULL[0] > HULL[2] and testPeriod() and k < stoch_lower_input and crossover(k, d)
// if HULL[0] > HULL[2] and testPeriod()
    stopLoss = close * (1 - sl / 100) 
    profit25 = close * (1 + (tp / 100) * 0.25)
    profit50 = close * (1 + (tp / 100) * 0.5)
    takeProfit = close * (1 + tp / 100)
    
    
    strategy.entry("long", strategy.long, alert_message="buy")
    strategy.exit("exit long 25%", "long", stop=stopLoss, limit=profit25, qty_percent=25, alert_message="profit_25")
    strategy.exit("exit long 50%", "long", stop=stopLoss, limit=profit50, qty_percent=25, alert_message="profit_50")
    strategy.exit("exit long", "long", stop=stopLoss, limit=takeProfit)
    
    // line.new(bar_index, profit25, bar_index + 4, profit25, color=color.green)
    // line.new(bar_index, profit50, bar_index + 4, profit50, color=color.green)
    // box.new(bar_index, stopLoss, bar_index + 4, close, border_color=color.red, bgcolor=color.new(color.red, 80))
    // box.new(bar_index, close, bar_index + 4, takeProfit, border_color=color.green, bgcolor=color.new(color.green, 80))

    
if notInTrade and HULL[0] < HULL[2] and testPeriod() and d > stoch_upper_input and crossover(d, k)
// if HULL[0] < HULL[2] and testPeriod()
    stopLoss = close * (1 + sl / 100)
    profit25 = close * (1 - (tp / 100) * 0.25)
    profit50 = close * (1 - (tp / 100) * 0.5)
    takeProfit = close * (1 - tp / 100)
    
    

    strategy.entry("short", strategy.short, alert_message="sell")
    strategy.exit("exit short 25%", "short", stop=stopLoss, limit=profit25, qty_percent=25, alert_message="profit_25")
    strategy.exit("exit short 50%", "short", stop=stopLoss, limit=profit50, qty_percent=25, alert_message="profit_50")
    strategy.exit("exit short", "short", stop=stopLoss, limit=takeProfit)
    
    // line.new(bar_index, profit25, bar_index + 4, profit25, color=color.green)
    // line.new(bar_index, profit50, bar_index + 4, profit50, color=color.green)
    // box.new(bar_index, stopLoss, bar_index + 4, close, border_color=color.red, bgcolor=color.new(color.red, 80))
    // box.new(bar_index, close, bar_index + 4, takeProfit, border_color=color.green, bgcolor=color.new(color.green, 80))

// var table winrateDisplay = table.new(position.bottom_right, 1, 1)
// table.cell(winrateDisplay, 0, 0, "Winrate: " + tostring(strategy.wintrades / strategy.closedtrades * 100, '#.##')+" %", text_color=color.white)