মাল্টি-ফ্যাক্টর পরিমাণগত ট্রেডিং কৌশলের উপর ভিত্তি করে


সৃষ্টির তারিখ: 2024-01-31 13:55:37 অবশেষে সংশোধন করুন: 2024-01-31 13:55:37
অনুলিপি: 0 ক্লিকের সংখ্যা: 714
1
ফোকাস
1617
অনুসারী

মাল্টি-ফ্যাক্টর পরিমাণগত ট্রেডিং কৌশলের উপর ভিত্তি করে

ওভারভিউ

এই কৌশলটি একটি পরিমাণগত ট্রেডিং কৌশল যা একাধিক প্রযুক্তিগত সূচককে একত্রিত করে। এটি একাধিক সূচক যেমন মুভিং এভারেজ, এমএসিডি, বুলিন ব্যান্ড এবং আরএসআইকে একত্রিত করে, যাতে মাল্টি ফ্যাক্টর মডেল চালিত স্বয়ংক্রিয় ট্রেডিং সম্ভব হয়।

কৌশল নীতি

এই কৌশলটির ট্রেডিং সিগন্যালগুলি নিম্নলিখিত অংশগুলি থেকে আসেঃ

  1. ডাবল মুভিং এভারেজ গোল্ডেন ফর্ক
  2. MACD শূন্য অক্ষের উপরে এবং নীচে বিভাজক গঠন করে
  3. বুলিন ট্র্যাকের উপর থেকে নেমে উল্টো দিকে চলে যায়
  4. আরএসআই বিপরীতমুখী

যখন উপরের একাধিক সূচক একই সাথে ক্রয় বা বিক্রয়ের সংকেত দেয়, তখন কৌশলটি ক্রয় বা বিক্রয়ের জন্য পজিশন খোলার বা পজিশন খালি করার জন্য কাজ করে।

বিশেষ করে, যখন দ্রুত চলমান গড় একটি ধীর চলমান গড় অতিক্রম করে, এবং MACD হিস্টোগ্রাম একটি স্তম্ভের বৃদ্ধি প্রদর্শন করে, আরএসআই একটি oversold এলাকা থেকে একটি রিবাউন্ড উত্থাপন করে, এবং যখন দাম একটি BRI এর নিচের ট্র্যাকের কাছাকাছি আসে, তখন এটি একটি বিপরীত বলে মনে করা হয়, যা একটি ক্রয় সংকেত তৈরি করে।

আর যখন দ্রুত চলমান গড়ের নিচে ধীর চলমান গড়ের মধ্য দিয়ে অতিক্রম করে, MACD হিস্টোগ্রামগুলি কলামের লাইন হ্রাস করে, আরএসআই ওভার-বয় অঞ্চল থেকে নেমে আসে এবং যখন দামগুলি ব্রিন-ব্যান্ডের কাছাকাছি থাকে, তখন মনে করা হয় যে শীর্ষস্থানটি নিকটবর্তী, যার ফলে একটি বিক্রয় সংকেত তৈরি হয়।

এই ধরনের একাধিক সূচক সংমিশ্রণ দ্বারা প্রেরিত সংকেতগুলি কার্যকরভাবে জাল সংকেতগুলি ফিল্টার করতে পারে এবং কৌশলগত স্থায়িত্ব উন্নত করতে পারে।

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

এই কৌশলটির সবচেয়ে বড় সুবিধা হল এটি একটি মাল্টি ফ্যাক্টর মডেল ব্যবহার করে ট্রেড করা, যা সংকেতের নির্ভরযোগ্যতা বৃদ্ধি করে, কৌশলটির স্থায়িত্ব এবং লাভের হার বাড়ায়।

  1. মাল্টি ফ্যাক্টর মডেলগুলি ট্রেডিং সিগন্যালগুলিকে একে অপরের সাথে যাচাই করতে পারে, যা মিথ্যা সংকেতের হস্তক্ষেপকে কার্যকরভাবে হ্রাস করে।

  2. বিভিন্ন শ্রেণীর সূচকগুলো বাজার পরিস্থিতির আরও বিস্তৃত বৈশিষ্ট্যগুলিকে ধারণ করতে পারে এবং আরও সঠিক বিচার করতে পারে।

  3. একাধিক ফ্যাক্টর সমন্বয় একটি একক সূচক বিদ্যমান অস্থিরতা বৈশিষ্ট্য smoothens, আয় আরো স্থিতিশীল গ্যারান্টি।

  4. পোর্টফোলিওর সূচকগুলি এবং প্রতিটি সূচকের ওজনকে নমনীয়ভাবে সামঞ্জস্য করতে পারে, বিভিন্ন বাজারের জন্য ব্যক্তিগতকৃত কৌশল।

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

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

  1. জটিল মাল্টি-ইনডিকেটর সমন্বয়, প্যারামিটার সেট এবং ইনডিকেটর নির্বাচন সঠিক গণনা এবং পরীক্ষার প্রয়োজন, অন্যথায় ব্যর্থতার সংকেত তৈরি করা সহজ।

  2. একক প্রজাতির প্রভাব অস্থির হতে পারে, যার জন্য উপযুক্ত প্রজাতির সমন্বয় নির্বাচন করা প্রয়োজন এবং ক্রস-প্রজাতির বাণিজ্যের জন্য একক প্রজাতির ঝুঁকি বিচ্ছিন্ন করা প্রয়োজন।

  3. পজিশনের আকার এবং স্টপ লস কৌশলকে কঠোরভাবে নিয়ন্ত্রণ করতে হবে যাতে চরম পরিস্থিতিতে ক্ষতির বিস্তার না হয়।

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

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

  1. আরও সূচকগুলির সমন্বয় পরীক্ষা করুন এবং সর্বোত্তম প্যারামিটারগুলি সন্ধান করুন। অন্যান্য সূচকগুলি যেমন পোর্টফোলিওতে আনুষ্ঠানিকতা, লেনদেনের পরিমাণ ইত্যাদি অন্তর্ভুক্ত করুন।

  2. মেশিন লার্নিং পদ্ধতি ব্যবহার করে স্বয়ংক্রিয়ভাবে সর্বোত্তম কৌশল সমন্বয় এবং প্যারামিটার কনফিগারেশন তৈরি করুন।

  3. দীর্ঘ সময়ের জন্য পরীক্ষিত এবং অনুকূলিতকরণ, বিভিন্ন বাজারের পর্যায়ে ওজন সমন্বয় করা।

  4. একক স্টপ লস এবং সামগ্রিক পজিশনের উপর কঠোর নিয়ন্ত্রণের জন্য ঝুঁকি ব্যবস্থাপনা সরঞ্জামগুলির সাথে মিলিত।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Математическая Торговая Система с Ишимоку, TP/SL, ADX, RSI, OBV", shorttitle="МТС Ишимоку TP/SL ADX RSI OBV", overlay=true)

is_short_enable = input(0, title="Короткие сделки")
is_long_enable = input(1, title="Длинные сделки")

// Входные параметры для скользящих средних
fast_length = input(21, title="Быстрый период")
slow_length = input(26, title="Медленный период")

// Входные параметры для Ишимоку
tenkan_length = input(9, title="Тенкан-сен")
kijun_length = input(26, title="Киджун-сен")
senkou_length = input(52, title="Сенкоу-спан B")

// Входные параметры для ADX
adx_length = input(14, title="ADX период")
adx_level = input(30, title="ADX уровень")

// Входные параметры для RSI
rsi_length = input(14, title="RSI период")
rsi_overbought = input(70, title="RSI перекупленность")
rsi_oversold = input(30, title="RSI перепроданность")

// Входные параметры для OBV
obv_length = input(14, title="OBV период")

// Вычисление скользящих средних
fast_ma = ta.sma(close, fast_length)
slow_ma = ta.sma(close, slow_length)

// Вычисление Ишимоку
tenkan_sen = ta.sma(high + low, tenkan_length) / 2
kijun_sen = ta.sma(high + low, kijun_length) / 2
senkou_span_a = (tenkan_sen + kijun_sen) / 2
senkou_span_b = ta.sma(close, senkou_length)

// Вычисление ADX
[diplus, diminus, adx_value] = ta.dmi(14, adx_length)

// Вычисление RSI
rsi_value = ta.rsi(close, rsi_length)

// Вычисление OBV
f_obv() => ta.cum(math.sign(ta.change(close)) * volume)
f_obv_1() => ta.cum(math.sign(ta.change(close[1])) * volume[1])
f_obv_2() => ta.cum(math.sign(ta.change(close[2])) * volume[2])
f_obv_3() => ta.cum(math.sign(ta.change(close[3])) * volume[3])
obv_value = f_obv()

price_is_up = close[1] > close[3] 
price_crossover_fast_ma = close > fast_ma
fast_ma_is_up = ta.sma(close[1], fast_length) > ta.sma(close[3], fast_length)
rsi_is_trand_up = ta.rsi(close[1], rsi_length) > ta.rsi(close[3], rsi_length)
rsi_is_upper_50 = rsi_value > 50
obv_is_trand_up = f_obv_1() > f_obv_3() and obv_value > ta.sma(obv_value, obv_length)
is_up = price_is_up and price_crossover_fast_ma and fast_ma_is_up and rsi_is_trand_up and rsi_is_upper_50 and obv_is_trand_up

fast_ma_is_down = close < fast_ma
rsi_is_trend_down =  ta.rsi(close[1], rsi_length) < ta.rsi(close[2], rsi_length)
rsi_is_crossover_sma = rsi_value < ta.sma(rsi_value, rsi_length)
obv_is_trend_down =  f_obv_1() < f_obv_2()
obv_is_crossover_sma = obv_value < ta.sma(obv_value, obv_length)
is_down = fast_ma_is_down and rsi_is_trend_down and rsi_is_crossover_sma and obv_is_trend_down and obv_is_crossover_sma

//----------//
// MOMENTUM //
//----------//
ema8 = ta.ema(close, 8)
ema13 = ta.ema(close, 13)
ema21 = ta.ema(close, 21)
ema34 = ta.ema(close, 34)
ema55 = ta.ema(close, 55)

longEmaCondition = ema8 > ema13 and ema13 > ema21 and ema21 > ema34 and ema34 > ema55
exitLongEmaCondition = ema13 < ema55

shortEmaCondition = ema8 < ema13 and ema13 < ema21 and ema21 < ema34 and ema34 < ema55
exitShortEmaCondition = ema13 > ema55

// ----------  //
// OSCILLATORS //
// ----------- //
rsi = ta.rsi(close, 14)
longRsiCondition = rsi < 70 and rsi > 40
exitLongRsiCondition = rsi > 70

shortRsiCondition = rsi > 30 and rsi < 60
exitShortRsiCondition = rsi < 30

// Stochastic
length = 14, smoothK = 3, smoothD = 3
kFast = ta.stoch(close, high, low, 14)
dSlow = ta.sma(kFast, smoothD)

longStochasticCondition = kFast < 80
exitLongStochasticCondition = kFast > 95

shortStochasticCondition = kFast > 20
exitShortStochasticCondition = kFast < 5

// Логика входа и выхода
longCondition = longEmaCondition and longRsiCondition and longStochasticCondition and strategy.position_size == 0
exitLongCondition = (exitLongEmaCondition or exitLongRsiCondition or exitLongStochasticCondition) and strategy.position_size > 0

shortCondition = shortEmaCondition and shortRsiCondition and shortStochasticCondition and strategy.position_size == 0
exitShortCondition = (exitShortEmaCondition or exitShortRsiCondition or exitShortStochasticCondition) and strategy.position_size < 0

enter_long = (ta.crossover(close, senkou_span_a) or is_up) and longCondition
enter_short = (ta.crossunder(close, senkou_span_a) or is_down) and shortCondition

exit_long = ((ta.crossunder(fast_ma, slow_ma) or ta.crossunder(close, senkou_span_b) or enter_short) or exitLongCondition) 
exit_short = ((ta.crossover(fast_ma, slow_ma) or ta.crossover(close, senkou_span_b) or enter_long) or exitShortCondition)

// Выполнение сделок
if is_long_enable == 1
    strategy.entry("Long", strategy.long, when=enter_long)
    strategy.close("Long", when=exit_long)

if is_short_enable == 1
    strategy.entry("Short", strategy.short, when=enter_short)
    strategy.close("Short", when=exit_short)