অক্টা-ইএমএ এবং ইচিমোকু ক্লাউড চার্ট কোয়ান্টিটেটিভ ট্রেডিং কৌশল


সৃষ্টির তারিখ: 2023-12-11 14:52:05 অবশেষে সংশোধন করুন: 2023-12-11 14:52:05
অনুলিপি: 1 ক্লিকের সংখ্যা: 443

অক্টা-ইএমএ এবং ইচিমোকু ক্লাউড চার্ট কোয়ান্টিটেটিভ ট্রেডিং কৌশল

ওভারভিউ

এই কৌশলটি 8 টি ভিন্ন সময়ের ইন্ডেক্সাল মুভিং এভারেজ এবং Ichimoku ক্লাউড গ্রাফকে প্রধান ট্রেডিং সিগন্যাল হিসাবে ব্যবহার করে এবং 1 ঘন্টা, 4 ঘন্টা বা দিবালোক সময় ফ্রেমে কার্যকরভাবে কাজ করতে পারে।

কৌশল নীতি

এই কৌশলটি মূলত নিম্নলিখিত দুটি বিষয়ের উপর ভিত্তি করে তৈরি করা হয়েছেঃ

  1. 8 টি সূচকীয় চলমান গড় ((অক্টা-ইএমএ)

এই কৌশলটি 8 টি বিভিন্ন পিরিয়ডের ইএমএ ব্যবহার করে, যথাক্রমে 5 তম, 11 তম, 15 তম, 18 তম, 21 তম, 24 তম, 28 তম এবং 34 তম লাইন। এই 8 টি ইএমএকে বলা হয় Octa-EMA। যখন একটি সংক্ষিপ্ত পিরিয়ডের ইএমএ দীর্ঘ পিরিয়ডের ইএমএর উপরে থাকে তখন এটি একটি মাল্টি-হেড প্রবণতা দেখায় এবং বিপরীতভাবে এটি একটি বায়ুমুখী প্রবণতা দেখায়।

  1. ইচিমোকু মেঘ মানচিত্র

Ichimoku মেঘের চার্টটিতে রূপান্তর লাইন, বেঞ্চমার্ক লাইন, বিলম্ব লাইন এবং নেতৃস্থানীয় লাইন A / B রয়েছে। মেঘের চার্টটি মূলত প্রবণতার দিকনির্দেশনা এবং সমর্থন প্রতিরোধ সরবরাহ করে। যখন দামগুলি মেঘের চার্টের উপরে থাকে তখন এটি একটি মাল্টিহেড ট্রেন্ড এবং মেঘের চার্টের নীচে এটি একটি ফাঁকা ট্রেন্ড।

এই কৌশলটির জন্য ট্রেডিং সিগন্যালগুলি উপরের দুটি প্রধান উপাদান থেকে আসে। যখন 8 টি ইএমএ সমস্ত মাল্টি-হেড সারিতে থাকে (ছোট ইএমএ লম্বা ইএমএর উপরে) এবং দামটি ইচিমোকুর মেঘের চিত্রের চেয়ে বেশি থাকে তখন একটি কেনার সংকেত উত্পন্ন হয়। যখন ইএমএ সারিটি খালি মাথা (ছোট ইএমএর নীচে লম্বা ইএমএ) হয়ে যায় তখন একটি বিক্রয় সংকেত উত্পন্ন হয়।

কৌশলগত শক্তি বিশ্লেষণ

এই কৌশলটির প্রধান সুবিধাগুলো হলঃ

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

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

এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ

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

উপরের ঝুঁকির জন্য, EMA প্যারামিটারগুলিকে সামঞ্জস্য করে বা ভর্তির শর্তগুলিকে অনুকূলিত করে ঝুঁকি হ্রাস করা যেতে পারে, বা অন্যান্য সূচকগুলিকে সহায়ক হিসাবে সংযুক্ত করা যেতে পারে।

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

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

  1. ইএমএ প্যারামিটারগুলি সামঞ্জস্য করুন এবং সংশ্লিষ্ট চক্রটি অনুকূলিত করুন
  2. ট্রেন্ডের সঠিকতা নিশ্চিত করার জন্য গড়-রেখার-অতি-খালি বিচারক যোগ করুন
  3. MACD, KDJ এবং অন্যান্য সূচকগুলির সাথে মিলিত, প্রবেশের সময়কে অনুকূলিত করুন
  4. স্টপ লস স্টপ কৌশল বৃদ্ধি করুন, একক ক্ষতি নিয়ন্ত্রণ করুন
  5. বিভিন্ন জাতের প্যারামিটারগুলির প্রভাব পরীক্ষা করে সেরা প্যারামিটার সমন্বয় খুঁজুন
  6. মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে স্বয়ংক্রিয়ভাবে বেস্ট প্যারামিটার খুঁজে বের করা

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Fukuiz

strategy(title='Fukuiz Octa-EMA + Ichimoku', shorttitle='Fuku octa strategy', overlay=true, process_orders_on_close=true, 
     default_qty_type= strategy.cash , default_qty_value=1000, currency=currency.USD, initial_capital=10000 ,commission_type = strategy.commission.percent,commission_value=0.25)


//OCTA EMA ##################################################


// Functions
f_emaRibbon(_src, _e1, _e2, _e3, _e4, _e5, _e6, _e7, _e8) =>
    _ema1 = ta.ema(_src, _e1)
    _ema2 = ta.ema(_src, _e2)
    _ema3 = ta.ema(_src, _e3)
    _ema4 = ta.ema(_src, _e4)
    _ema5 = ta.ema(_src, _e5)
    _ema6 = ta.ema(_src, _e6)
    _ema7 = ta.ema(_src, _e7)
    _ema8 = ta.ema(_src, _e8)
    [_ema1, _ema2, _ema3, _ema4, _ema5, _ema6, _ema7, _ema8]

showRibbon = input(true, 'Show Ribbon (EMA)')
ema1Len = input(5, title='EMA 1 Length')
ema2Len = input(11, title='EMA 2 Length')
ema3Len = input(15, title='EMA 3 Length')
ema4Len = input(18, title='EMA 4 Length')
ema5Len = input(21, title='EMA 5 Length')
ema6Len = input(24, title='EMA 6 Length')
ema7Len = input(28, title='EMA 7 Length')
ema8Len = input(34, title='EMA 8 Length')

[ema1, ema2, ema3, ema4, ema5, ema6, ema7, ema8] = f_emaRibbon(close, ema1Len, ema2Len, ema3Len, ema4Len, ema5Len, ema6Len, ema7Len, ema8Len)

//Plot

ribbonDir = ema8 < ema2
p1 = plot(ema1, color=showRibbon ? ribbonDir ? #1573d4 : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 1')
p2 = plot(ema2, color=showRibbon ? ribbonDir ? #3096ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 2')
plot(ema3, color=showRibbon ? ribbonDir ? #57abff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 3')
plot(ema4, color=showRibbon ? ribbonDir ? #85c2ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 4')
plot(ema5, color=showRibbon ? ribbonDir ? #9bcdff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 5')
plot(ema6, color=showRibbon ? ribbonDir ? #b3d9ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 6')
plot(ema7, color=showRibbon ? ribbonDir ? #c9e5ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 7')
p8 = plot(ema8, color=showRibbon ? ribbonDir ? #dfecfb : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 8')
fill(p1, p2, color.new(#1573d4, 85))
fill(p2, p8, color.new(#1573d4, 85))

//ichimoku##################################################

//color
colorblue = #3300CC
colorred = #993300
colorwhite = #FFFFFF
colorgreen = #CCCC33
colorpink = #CC6699
colorpurple = #6633FF

//switch
switch1 = input(false, title='Chikou')
switch2 = input(false, title='Tenkan')
switch3 = input(false, title='Kijun')

middleDonchian(Length) =>
    lower = ta.lowest(Length)
    upper = ta.highest(Length)
    math.avg(upper, lower)

//Functions
conversionPeriods = input.int(9, minval=1)
basePeriods = input.int(26, minval=1)
laggingSpan2Periods = input.int(52, minval=1)
displacement = input.int(26, minval=1)
Tenkan = middleDonchian(conversionPeriods)
Kijun = middleDonchian(basePeriods)
xChikou = close
SenkouA = middleDonchian(laggingSpan2Periods)
SenkouB = (Tenkan[basePeriods] + Kijun[basePeriods]) / 2

//Plot
A = plot(SenkouA[displacement], color=color.new(colorpurple, 0), title='SenkouA')
B = plot(SenkouB, color=color.new(colorgreen, 0), title='SenkouB')
plot(switch1 ? xChikou : na, color=color.new(colorpink, 0), title='Chikou', offset=-displacement)
plot(switch2 ? Tenkan : na, color=color.new(colorred, 0), title='Tenkan')
plot(switch3 ? Kijun : na, color=color.new(colorblue, 0), title='Kijun')
fill(A, B, color=color.new(colorgreen, 90), title='Ichimoku Cloud')

//Buy and Sell signals
fukuiz = math.avg(ema2, ema8)
white = ema2 > ema8
gray = ema2 < ema8
buycond = white and white[1] == 0
sellcond = gray and gray[1] == 0
bullish = ta.barssince(buycond) < ta.barssince(sellcond)
bearish = ta.barssince(sellcond) < ta.barssince(buycond)
buy = bearish[1] and buycond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell = bullish[1] and sellcond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell2=ema2 < ema8
buy2 = white and fukuiz > SenkouA[displacement] and fukuiz > SenkouB

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//Back test

startYear = input.int(defval=2017, title='Start Year', minval=2000, maxval=3000)
startMonth = input.int(defval=1, title='Start Month', minval=1, maxval=12)
startDay = input.int(defval=1, title='Start Day', minval=1, maxval=31)
endYear = input.int(defval=2023, title='End Year', minval=2000 ,maxval=3000)
endMonth = input.int(defval=12, title='End Month', minval=1, maxval=12)
endDay = input.int(defval=31, title='End Day', minval=1, maxval=31)

start = timestamp(startYear, startMonth, startDay, 00, 00)
end = timestamp(endYear, endMonth, endDay, 23, 59)
period() => time >= start and time <= end ? true : false

if buy2 
    strategy.entry(id='long', direction=strategy.long, when=period(), comment='BUY')

if sell2
    strategy.close(id='long', when=period(), comment='SELL')