इंद्रधनुष चलती औसत ट्रेडिंग रणनीति इंद्रधनुष चलती औसत सूचक के आधार पर डिजाइन की गई है। यह रणनीति 7 चलती औसत युक्त इंद्रधनुष चलती औसत प्रणाली के निर्माण के माध्यम से प्रवृत्ति की दिशा का आकलन करती है, जो RSI सूचक के साथ मिलकर झूठे संकेतों को फ़िल्टर करती है, जिससे कम जोखिम वाले ट्रेडों में प्रवेश किया जा सकता है।
यह रणनीति मुख्य रूप से निम्नलिखित चरणों के माध्यम से ट्रेडिंग सिग्नल उत्पन्न करने के लिए बनाई गई हैः
एक इंद्रधनुष चलती औसत प्रणाली का निर्माण करना। इस प्रणाली में 7 चलती औसत शामिल हैं, जिनमें से पहली चलती औसत 12 है, और स्रोत डेटा समापन मूल्य का औसत है। शेष 6 चलती औसत की अवधि क्रमशः 3 चक्र घटती है, और स्रोत डेटा पिछले चलती औसत का मूल्य है।
प्रवृत्ति की दिशा का निर्धारण करना। यदि पहला चलती औसत इंद्रधनुष चलती औसत के शीर्ष पर स्थित है, तो इसे ऊपर की ओर प्रवृत्ति के रूप में परिभाषित किया गया है; यदि यह सबसे नीचे स्थित है, तो इसे नीचे की ओर प्रवृत्ति के रूप में परिभाषित किया गया है; यदि यह बीच में स्थित है, तो इसे संरेखित किया गया है।
ट्रेडिंग सिग्नल उत्पन्न करना। जब इंद्रधनुष चलती औसत प्रणाली की प्रवृत्ति ऊपर से नीचे की ओर जाती है, तो एक बिकने वाला सिग्नल उत्पन्न करना; जब प्रवृत्ति नीचे से ऊपर की ओर जाती है, तो एक खरीदने वाला सिग्नल उत्पन्न करना; जब प्रवृत्ति संरेखण से ऊपर या नीचे की ओर जाती है, तो वर्तमान स्थिति को समतल करना।
आरएसआई फ़िल्टर. केवल तभी ट्रेडिंग सिग्नल स्वीकार करते हैं जब आरएसआई संकेतक सामान्य दिखाता है. पहला आरएसआई संकेतक झूठे ब्रेकआउट से बचने के लिए ओवरबॉट और ओवरसोल्ड क्षेत्रों के बीच स्थित होना चाहिए; दूसरा आरएसआई मध्यवर्ती क्षेत्र में नहीं होना चाहिए, यह सुनिश्चित करने के लिए कि ब्रेकआउट पर्याप्त गतिशीलता है।
इस रणनीति के निम्नलिखित फायदे हैं:
इंद्रधनुष चलती औसत प्रणाली प्रवृत्ति की दिशा का सटीक रूप से आकलन कर सकती है। कई चलती औसत संयोजन बाजार के शोर को प्रभावी ढंग से फ़िल्टर कर सकते हैं और प्रवृत्ति को उलट कर सकते हैं।
आरएसआई सूचक दोहरे फिल्टर तंत्र, जो झूठे ब्रेकआउट सिग्नल को प्रभावी ढंग से फ़िल्टर कर सकता है, ताकि उन्हें पकड़े जाने से बचा जा सके। पहला आरएसआई सुनिश्चित करता है कि यह सामान्य क्षेत्र में है, दूसरा आरएसआई सुनिश्चित करता है कि ब्रेकआउट पर्याप्त मजबूत है।
ट्रेंड और रिवर्स इंडिकेटर के संयोजन के साथ, आप ट्रेंड रिवर्स के समय में प्रवेश कर सकते हैं और स्ट्राइक ड्रॉप का पीछा करने से बच सकते हैं।
संचय के चरण में सक्रिय रूप से पतन से बचने के लिए, क्षेत्र के चयन से संचय के जोखिम से बचें।
इस रणनीति के पैरामीटर अनुकूलित करने के लिए एक बड़ा स्थान है, जो विभिन्न किस्मों और अवधि के लिए अनुकूलित किया जा सकता है, जैसे कि चलती औसत चक्र, लंबाई अनुपात, आरएसआई पैरामीटर आदि को समायोजित करके बेहतर प्रभाव प्राप्त करने के लिए।
इस रणनीति में मुख्य रूप से निम्नलिखित जोखिम हैं:
ट्रेंड रिवर्स स्पष्ट नहीं होने पर, एक भ्रमपूर्ण रिवर्स सिग्नल उत्पन्न हो सकता है, जिससे ट्रेडिंग हानि होती है। रिवर्स सिग्नल को स्पष्ट बनाने के लिए चलती औसत चक्र को उचित रूप से समायोजित किया जा सकता है।
संकेतों के लंबे समय तक क्षेत्रीय समापन के दौरान, अक्सर शांति के स्थान खोले जाते हैं, जिससे लेनदेन की लागत और स्लाइड पॉइंट की हानि बढ़ जाती है। आरएसआई पैरामीटर को अनुकूलित करके, समापन चरण के लिए फ़िल्टरिंग की तीव्रता को बढ़ाया जा सकता है।
जब प्रतिगमन धीमा होता है, तो प्रतिगमन सिग्नल के बाद, समय और स्थान का विस्तार होता है। चलती औसत के चक्र अंतर को बढ़ाया जा सकता है, जिससे सिग्नल अधिक समय पर जारी किया जा सकता है।
पैरामीटर सेट समय पर नहीं है, यह कुछ सही संकेतों को फ़िल्टर कर सकता है, या सिग्नल में देरी पैदा कर सकता है। विभिन्न किस्मों की विशेषताओं के अनुसार पैरामीटर को समायोजित करने की आवश्यकता है।
इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
चलती औसत मापदंडों का अनुकूलन। आप एक अधिक सटीक प्रवृत्ति निर्णय प्राप्त करने के लिए चलती औसत की अवधि, आवधिक अंतर अनुपात, और चलती औसत विधि (एसएमए या ईएमए) जैसे मापदंडों का अनुकूलन कर सकते हैं।
आरएसआई पैरामीटर अनुकूलन. आरएसआई के चक्र की लंबाई, ओवरबॉय क्षेत्र, ओवरसोल्ड क्षेत्र, तटस्थ क्षेत्र आदि पैरामीटर को अनुकूलित किया जा सकता है, जिससे फ़िल्टरिंग अधिक सटीक और प्रभावी हो सके।
समय चक्र अनुकूलन. आप विभिन्न समय चक्रों का परीक्षण कर सकते हैं और उस समय चक्र को चुन सकते हैं जो रणनीति के लिए सबसे उपयुक्त है ताकि सर्वोत्तम प्रभाव प्राप्त हो सके।
नस्ल अनुकूलन. विभिन्न नस्लों के अनुसार, पैरामीटर या नियमों को अनुकूलित किया जा सकता है ताकि रणनीति उस नस्ल के लिए सबसे अच्छा हो।
स्टॉप लॉस स्टॉप मैकेनिज्म को बढ़ाएं। रिटर्न्स के परिणामों के आधार पर, स्टॉप लॉस स्टॉप के उचित स्तर को निर्धारित किया जा सकता है, जो एक एकल लेनदेन के जोखिम और लाभ के आकार को नियंत्रित करता है।
इंद्रधनुष चलती औसत ट्रेडिंग रणनीति प्रवृत्ति निर्णय और संकेत फिल्टर के संयोजन का उपयोग करके प्रवृत्ति के मोड़ बिंदु पर सिग्नल को पकड़ने के प्रभाव को प्राप्त करती है। इस रणनीति में निर्णय की सटीकता, जोखिम नियंत्रित करने की विशेषता है, और पैरामीटर अनुकूलन और नियमों को पूरा करने के माध्यम से, यह एक बहुत ही व्यावहारिक मात्रात्मक ट्रेडिंग रणनीति हो सकती है। कुल मिलाकर, यह रणनीति गहन अध्ययन और आवेदन के लायक है।
/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//╔════════════════════════════════════════════════════════════════════════════╗
//║Rainbow Backtesting base on "Rainbow Moving Average" Strategy as below: ║
//║1.Rainbow Moving Average setup ║
//║- Source: source of 1st MA ║
//║- Type: SMA/EMA ║
//║- Period: period of 1st MA ║
//║- Displacement: period of 2nd MA to 7th MA with source is previous MA ║
//║2.Trend Define ║
//║- Up Trend: Main MA moving at the top of Rainbow ║
//║- Down Trend: Main MA moving at the bottom of Rainbow ║
//║- Sideway: Main MA moving between the top and the bottom of Rainbow ║
//║3.Signal ║
//║- Buy Signal: When Rainbow change to Up Trend. ║
//║- Sell Signal: When Rainbow change to Down Trend. ║
//║- Exit: When Rainbow change to Sideway. ║
//║4.RSI Filter ║
//║- "Enable": Only signals have 1st RSI moving between Overbought and Oversold║
//║and 2nd RSI moving outside Middle Channel are accepted. ║
//║- The filter may help trader avoid bull trap, bear trap and choppy market. ║
//╚════════════════════════════════════════════════════════════════════════════╝
//@version=4
strategy("Rainbow Strategy Backtesting",overlay=false)
//++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++ Rainbow Moving Average +++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++
rainbow_tt="=== Rainbow Moving Average ==="
ma1_source=input(hlc3,title="Source",type=input.source, inline="set1", group=rainbow_tt)
rb_type=input("SMA",title="Type",options=["SMA","EMA"], inline="set1", group=rainbow_tt)
ma1_len=input(12,title="Period", inline="set2", group=rainbow_tt)
dis_len=input(3,title="Displacement", inline="set2", group=rainbow_tt,minval=2)
trend_tt="=== Trend Color ==="
up_col=input(color.new(color.blue,0),title="Up",inline="Color",group=trend_tt)
dn_col=input(color.new(color.red,0),title="Down",inline="Color",group=trend_tt)
sw_col=input(color.new(color.yellow,0),title="No",inline="Color",group=trend_tt)
//1st
ma1=rb_type=="SMA"?sma(ma1_source,ma1_len):ema(ma1_source,ma1_len)
//2nd
ma2=rb_type=="SMA"?sma(ma1,dis_len):ema(ma1,dis_len)
//3rd
ma3=rb_type=="SMA"?sma(ma2,dis_len):ema(ma2,dis_len)
//4
ma4=rb_type=="SMA"?sma(ma3,dis_len):ema(ma3,dis_len)
//5
ma5=rb_type=="SMA"?sma(ma4,dis_len):ema(ma4,dis_len)
//6
ma6=rb_type=="SMA"?sma(ma5,dis_len):ema(ma5,dis_len)
//7
ma7=rb_type=="SMA"?sma(ma6,dis_len):ema(ma6,dis_len)
//MinMax
rb_max=max(ma1,ma2,ma3,ma4,ma5,ma6,ma7)
rb_min=min(ma1,ma2,ma3,ma4,ma5,ma6,ma7)
dir_col=
ma1==rb_max?up_col:
ma1==rb_min?dn_col:
sw_col
dir_style=shape.circle
plotshape(dir_col[1]==dir_col?0:na,title="Trend",style=dir_style,color=dir_col,location=location.absolute)
//++++++++++++++++++++++++++++++++++++++
//+++++++++++++ RSI Filter +++++++++++++
//++++++++++++++++++++++++++++++++++++++
rsi_tt="=== RSI Filter ==="
rsi_filter=input("Enable",title="Filter",options=["Enable","Disable"],inline="set",group=rsi_tt)
over_tt="Over Filter"
rsi_len_1=input(12,title="Period",inline="set",group=over_tt)
rsi_ovb=input(65,title="Overbought",inline="set",group=over_tt)
rsi_ovs=input(35,title="Oversold",inline="set",group=over_tt)
rsi_1=rsi(close,rsi_len_1)
mid_tt="Middle Filter"
rsi_len_2=input(9,title="Period",inline="set",group=mid_tt)
rsi_mid_top=input(56,title="Upper",inline="set",group=mid_tt)
rsi_mid_bot=input(44,title="Lower",inline="set",group=mid_tt)
rsi_2=rsi(close,rsi_len_2)
//Status
var rsi_status="None"
if (rsi_1>rsi_ovs and rsi_1<rsi_ovb) and (rsi_2[1]<rsi_mid_bot or rsi_2[1]>rsi_mid_top)
rsi_status:="Normal"
else
rsi_status:="None"
//Signal
BuySignal=
rsi_filter=="Disable"?
dir_col[1]!=up_col
and
dir_col[0]==up_col
:
dir_col[1]!=up_col
and
dir_col[0]==up_col
and
rsi_status=="Normal"
SellSignal=
rsi_filter=="Disable"?
dir_col[1]!=dn_col
and
dir_col[0]==dn_col
:
dir_col[1]!=dn_col
and
dir_col[0]==dn_col
and
rsi_status=="Normal"
exit=
(dir_col[1]!=sw_col
and
dir_col[0]==sw_col)
buycol =
BuySignal?
up_col: na
sellcol =
SellSignal?
dn_col: na
exitcol =
exit?
sw_col: na
buy_style=shape.arrowup
sell_style=shape.arrowdown
exit_style=shape.square
plotshape(BuySignal?0:na,title="Buy",text="Buy",style=buy_style,color=buycol,location=location.absolute)
plotshape(SellSignal?0:na,title="Sell",text="Sell",style=sell_style,color=sellcol,location=location.absolute)
plotshape(exit?0:na,title="Exit",text="Exit",style=exit_style,color=exitcol,location=location.absolute)
filter=
rsi_filter=="Enable"?
dir_col[1]!=dir_col
and BuySignal==false
and SellSignal==false
and exit==false:
na
filter_style=shape.xcross
filtercol=
filter?
dir_col:na
plotshape(filter?0:na,title="Filter",text="Filter",style=filter_style,color=filtercol,location=location.absolute)
//+++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++ Backtesting ++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++
strategy.entry("Long", strategy.long, when=BuySignal)
strategy.close("Long", when=exit or filter)
strategy.entry("Short", strategy.short, when=SellSignal)
strategy.close("Short", when=exit or filter)
//EOF