ऑक्टा-ईएमए और इचिमोकू क्लाउड क्वांटिटेटिव ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-12-11 14:52:05
टैगः

img

अवलोकन

यह रणनीति विभिन्न अवधियों के 8 घातीय चलती औसत (ईएमए) और मुख्य ट्रेडिंग संकेतों के रूप में इचिमोकू क्लाउड का उपयोग करती है, जो प्रति घंटे, 4 घंटे या दैनिक समय सीमाओं में प्रभावी ढंग से चल सकती है।

रणनीतिक सिद्धांत

इस रणनीति के मूल सिद्धांत निम्नलिखित दो भागों पर आधारित हैंः

  1. एक्सपोनेंशियल मूविंग एवरेज (ओक्टा-ईएमए)

    यह रणनीति विभिन्न अवधि के साथ 8 ईएमए का उपयोग करती है, विशेष रूप से 5-दिवसीय, 11-दिवसीय, 15-दिवसीय, 18-दिवसीय, 21-दिवसीय, 24-दिवसीय, 28-दिवसीय और 34-दिवसीय। इन 8 ईएमए को ऑक्टा-ईएमए कहा जाता है। जब छोटी अवधि के ईएमए लंबी अवधि के ईएमए से ऊपर होते हैं, तो यह एक अपट्रेंड का संकेत देता है, और इसके विपरीत एक डाउनट्रेंड के लिए।

  2. इचिमोकू बादल

    इचिमोकू क्लाउड में रूपांतरण रेखा, बेस लाइन, लेगिंग स्पैन और लीडिंग स्पैन ए / बी होते हैं। क्लाउड मुख्य रूप से प्रवृत्ति की दिशा का न्याय करता है और समर्थन / प्रतिरोध प्रदान करता है। जब कीमत क्लाउड के ऊपर होती है, तो यह एक अपट्रेंड का संकेत देती है, और जब यह क्लाउड के नीचे होती है, तो यह एक डाउनट्रेंड का संकेत देती है।

इस रणनीति के लिए ट्रेडिंग सिग्नल उपरोक्त दो घटकों के संयोजन से आते हैं। एक खरीद सिग्नल तब उत्पन्न होता है जब सभी 8 ईएमए अपट्रेंड व्यवस्था (लंबे ईएमए के ऊपर छोटा ईएमए) में होते हैं और कीमत इचिमोकू क्लाउड के ऊपर होती है। एक बिक्री संकेत तब उत्पन्न होता है जब ईएमए व्यवस्था डाउनट्रेंड में बदल जाती है (लंबे ईएमए के नीचे छोटा ईएमए क्रॉसिंग) ।

लाभ विश्लेषण

इस रणनीति के मुख्य लाभ इस प्रकार हैंः

  1. दोहरे संकेतक फ़िल्टरिंग के माध्यम से झूठे संकेतों को कम करता है
  2. इचिमोकू क्लाउड ट्रेंड की दिशा का आकलन करता है, काउंटर ट्रेंड ट्रेडिंग से बचता है
  3. 8 ईएमए क्रॉसओवर अधिक सटीकता के साथ रुझानों का निर्धारण करने के लिए संयोजन करते हैं
  4. कई समय सीमाओं पर चलाया जा सकता है
  5. बड़े पैरामीटर ट्यूनिंग स्थान, विभिन्न उत्पादों के लिए अनुकूलित कर सकते हैं

जोखिम विश्लेषण

इस रणनीति में कुछ जोखिम भी हैं:

  1. सीमाबद्ध बाजारों के दौरान अधिक झूठे बिक्री संकेत उत्पन्न कर सकता है
  2. सख्त खरीद शर्तें कुछ खरीद अवसरों को खो सकती हैं
  3. अल्पकालिक और मध्यमकालिक रुझानों के संघर्ष में विफल हो सकता है
  4. खराब ईएमए पैरामीटर ट्यूनिंग संकेत विलंब का कारण बन सकता है

इन जोखिमों से निपटने के लिए, जोखिम को कम करने के लिए मापदंडों को समायोजित किया जा सकता है या प्रवेश स्थितियों को अनुकूलित किया जा सकता है। पुष्टि के लिए अन्य संकेतकों को भी शामिल किया जा सकता है।

अनुकूलन दिशाएँ

इस रणनीति को कई पहलुओं में अनुकूलित किया जा सकता हैः

  1. इष्टतम अवधि खोजने के लिए ईएमए मापदंडों को समायोजित करें
  2. सटीक रुझान आकलन सुनिश्चित करने के लिए रुझान निर्धारित करने वाले संकेतक जोड़ें
  3. प्रवेश समय में सुधार के लिए एमएसीडी, केडीजे जैसे अतिरिक्त संकेतकों को शामिल करें
  4. ट्रेड जोखिम के अनुसार नियंत्रण में स्टॉप लॉस/टेक प्रॉफिट जोड़ें
  5. सबसे अच्छा फिट खोजने के लिए विभिन्न उत्पादों पर परीक्षण मापदंड
  6. मापदंडों का स्वतः अनुकूलन करने के लिए मशीन सीखने का उपयोग करें

निष्कर्ष

कुल मिलाकर, ऑक्टा-ईएमए और इचिमोकू क्लाउड रणनीति एक अपेक्षाकृत स्थिर और विश्वसनीय प्रवृत्ति अनुसरण प्रणाली है। यह प्रवृत्तियों को निर्धारित करने के लिए ईएमए क्रॉसओवर और इचिमोकू को संकेतों को फ़िल्टर करने के लिए उपयोग करती है, जब अनुकूलित किया जाता है तो कम झूठे संकेत प्रदान करती है। यह रणनीति कई समय सीमाओं पर सूचकांक, विदेशी मुद्रा, धातु आदि पर व्यापक रूप से लागू की जा सकती है। स्टॉप लॉस / टेक प्रॉफिट और पुष्टि संकेतकों को शामिल करके, जीत दर और लाभप्रदता में और सुधार किया जा सकता है।


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





अधिक