चलती औसत पर आधारित औसत प्रतिगमन व्यापार रणनीति

लेखक:चाओझांग, दिनांकः 2023-10-26 15:38:14
टैगः

img

अवलोकन

औसत प्रतिगमन ट्रेडिंग रणनीति व्यापारिक निर्णय लेने के लिए चलती औसत से मूल्य विचलन पर आधारित होती है। यह कीमतों के अल्पकालिक विचलन और दीर्घकालिक प्रतिगमन पैटर्न का लाभ उठाता है जब कीमतें चलती औसत से काफी नीचे या ऊपर होती हैं और कीमतें वापस लौटती हैं तो बंद हो जाती हैं।

रणनीति तर्क

यह रणनीति पहले एक निश्चित अवधि में चलती औसत की गणना करती है ताकि लंबी अवधि के मूल्य रुझान का प्रतिनिधित्व किया जा सके। फिर यह चलती औसत से मूल्य के विचलन के आधार पर पदों के समय और आकार को निर्धारित करती है।

जब कीमत एक निश्चित प्रतिशत तक चलती औसत से नीचे गिर जाती है, तो यह संकेत देता है कि कीमत दीर्घकालिक प्रवृत्ति से विचलित हो जाती है। इस मामले में, विचलन के विस्तार के साथ धीरे-धीरे आकार बढ़ते हुए लंबी स्थिति बनाई जाती है। जब कीमत चलती औसत से ऊपर वापस उछलती है, तो औसत में रिवर्स का सुझाव देती है, तो लाभ लेने के लिए लंबी स्थिति बंद हो जाती है।

इसी प्रकार, जब कीमत एक सीमा से चलती औसत से ऊपर बढ़ जाती है, तो शॉर्ट पोजीशन बनाई जाती है। जब कीमत चलती औसत की ओर वापस गिर जाती है, तो शॉर्ट पोजीशन मुनाफे के साथ बंद हो जाती हैं।

लाभ विश्लेषण

  1. स्टॉक की कीमतों के दीर्घकालिक संतुलन की प्रवृत्ति का अनुसरण करने और प्रमुख प्रवृत्ति दिशा की पहचान करने के लिए चलती औसत की प्रवृत्ति पहचान क्षमता का उपयोग करें।

  2. पदों में स्केल करके औसत लागत को कम करें, बेहतर प्रवेश मूल्य प्राप्त करें।

  3. जोखिम को कम करते हुए औसत प्रतिगमन के विभिन्न स्तरों पर लाभ सुनिश्चित करने के लिए चरणबद्ध लाभ लेने को अपनाएं।

  4. एकल व्यापार हानि के आकार को सीमित करने के लिए निश्चित प्रतिशत द्वारा नियंत्रण स्थिति का आकार।

  5. विभिन्न उत्पादों के आधार पर चलती औसत अवधि और स्थिति आकार जैसी लचीली पैरामीटर सेटिंग्स।

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

  1. कीमतों में उतार-चढ़ाव होने पर लगातार स्टॉप लॉस। स्टॉप लॉस रेंज को बढ़ा सकते हैं या अन्य फ़िल्टर जोड़ सकते हैं।

  2. एक मजबूत प्रवृत्ति चलती औसत के माध्यम से टूट सकती है, औसत प्रतिगमन पर बंद करने में असमर्थ हो सकती है। प्रवृत्ति शक्ति संकेतकों द्वारा पहचाने जाने वाले पद के आकार को कम कर सकती है।

  3. गलत पैरामीटर सेटिंग्स के परिणामस्वरूप अत्यधिक आक्रामक प्रविष्टियां या स्टॉप हो सकते हैं। बाजार की स्थितियों के आधार पर सावधानीपूर्वक बैकटेस्टिंग और समायोजन आवश्यक है।

  4. उच्च व्यापारिक आवृत्ति के कारण व्यापारिक लागतें काफी होती हैं। पैरामीटर अनुकूलन में लागत कारकों पर विचार किया जाना चाहिए।

सुधार की दिशाएँ

  1. उत्पाद की विशेषताओं के अनुरूप चलती औसत अवधि का अनुकूलन करना।

  2. जोखिम और रिटर्न को संतुलित करने के लिए स्थिति आकार को अनुकूलित करें।

  3. अनावश्यक लेनदेन से बचने के लिए अन्य तकनीकी फ़िल्टर जोड़ें।

  4. बाजार के उतार-चढ़ाव के स्तर के आधार पर स्थिति के आकार को समायोजित करने के लिए अस्थिरता उपायों को शामिल करें।

  5. जोखिम को कम करने और रिटर्न बढ़ाने के लिए लाभ लक्ष्य स्केलिंग शुरू करें।

निष्कर्ष

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


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("YJ Mean Reversion", overlay=true)
//Was designed firstly to work on an index like the S&P 500 , which over time tends to go up in value. 
//Avoid trading too frequently (e.g. Daily, Weekly), to avoid getting eaten by fees. 
//If you change the underlying asset, or time frame, tweaking the moving average may be necessary. 
//Can work with a starting capital of just $1000, optimise the settings as necessary. 
//Accepts floating point values for the amount of units to purchase (e.g. Bitcoin ). 
//If price of units exceeds available capital, script will cancel the buy. 
//Adjusted the input parameters to be more intuitive.

//input variables
movingAverage = input(title="Moving Average (bars)", type=input.integer, defval=28, minval=1, maxval=1000)
//riskPercentage = input(title="Amount to Risk (%)", type=input.integer, defval=1, minval=1, maxval=50)
deviation = input(title="Deviation Increment (%)", type=input.float, defval=5, minval=0.01, maxval=100) / 100
unitsLevel1 = input(title="Level 1 (units)", type=input.float, defval=1, minval=0.0001, maxval=10000)
unitsLevel2 = input(title="Level 2 (units)", type=input.float, defval=2, minval=0.0001, maxval=10000)
unitsLevel3 = input(title="Level 3 (units)", type=input.float, defval=4, minval=0.0001, maxval=10000)
unitsLevel4 = input(title="Level 4 (units)", type=input.float, defval=8, minval=0.0001, maxval=10000)
unitsLevel5 = input(title="Level 5 (units)", type=input.float, defval=16, minval=0.0001, maxval=10000)

//moving average and ma slope (use on weekly chart)
ma = sma(close, movingAverage)
//sl = ma > ma[4]

//units to buy
//amount = riskPercentage / 100 * (strategy.initial_capital + strategy.netprofit)
//units = floor(amount / close)

//mode 1
//strategy.order("buy", true, 1, when = (close < 0.95 * ma) and (strategy.position_size < 10))
//strategy.order("sell", false, strategy.position_size, when = (close > 1.05 * ma) and (strategy.position_size > 0))

//mode 2
//strategy.order("buy", true, 1, when = close < 0.8 * ma)
//strategy.order("sell", false, strategy.position_size, when = (close > 310) and (strategy.position_size > 0))

//mode 3
//strategy.order("buy", true, 1, when = (close < 0.95 * ma) and (close > 0.9 * ma))
//strategy.order("buy", true, 2, when = (close < 0.9 * ma) and (close > 0.85 * ma))
//strategy.order("buy", true, 4, when = (close < 0.85 * ma) and (close > 0.8 * ma))
//strategy.order("buy", true, 8, when = (close < 0.8 * ma) and (close > 0.75 * ma))
//strategy.order("buy", true, 16, when = (close < 0.75 * ma))
//strategy.order("sell", false, strategy.position_size, when = (close > 310) and (strategy.position_size > 0))

//mode 4
//strategy.order("buy", true, 1, when = (close < 0.98 * ma) and (close > 0.96 * ma) and (sl))
//strategy.order("buy", true, 2, when = (close < 0.96 * ma) and (close > 0.94 * ma) and (sl))
//strategy.order("buy", true, 4, when = (close < 0.94 * ma) and (close > 0.92 * ma) and (sl))
//strategy.order("buy", true, 8, when = (close < 0.92 * ma) and (close > 0.90 * ma) and (sl))
//strategy.order("buy", true, 16, when = (close < 0.90 * ma) and (sl))
//strategy.order("sell", false, strategy.position_size, when = (close > 310) and (strategy.position_size > 0))

//mode 5
//strategy.order("buy", true, 1, when = (close < 0.95 * ma) and (close > 0.9 * ma))
//strategy.order("buy", true, 2, when = (close < 0.9 * ma) and (close > 0.85 * ma))
//strategy.order("buy", true, 4, when = (close < 0.85 * ma) and (close > 0.8 * ma))
//strategy.order("buy", true, 8, when = (close < 0.8 * ma) and (close > 0.75 * ma))
//strategy.order("buy", true, 16, when = (close < 0.75 * ma))

//strategy.order("sell", false, 1, when = (close > 1.05 * ma) and (close < 1.1 * ma) and (strategy.position_size > 0))
//strategy.order("sell", false, 2, when = (close > 1.1 * ma) and (close < 1.15 * ma) and (strategy.position_size > 0))
//strategy.order("sell", false, 4, when = (close > 1.15 * ma) and (close < 1.2 * ma) and (strategy.position_size > 0))
//strategy.order("sell", false, 8, when = (close > 1.2 * ma) and (close < 1.25 * ma) and (strategy.position_size > 0))
//strategy.order("sell", false, 16, when = (close > 1.25 * ma) and (close < 1.3 * ma) and (strategy.position_size > 0))

//mode 6
//strategy.order("B1", true, unitsLevel1 * units, when = (close < 0.95 * ma) and (close > 0.9 * ma))
//strategy.order("B2", true, unitsLevel2 * units, when = (close < 0.9 * ma) and (close > 0.85 * ma))
//strategy.order("B3", true, unitsLevel3 * units, when = (close < 0.85 * ma) and (close > 0.8 * ma))
//strategy.order("B4", true, unitsLevel4 * units, when = (close < 0.8 * ma) and (close > 0.75 * ma))
//strategy.order("B5", true, unitsLevel5 * units, when = (close < 0.75 * ma))

//strategy.order("S1", false, unitsLevel1 * units, when = (close > 1.05 * ma) and (close < 1.1 * ma) and (strategy.position_size > 0))
//strategy.order("S2", false, unitsLevel2 * units, when = (close > 1.1 * ma) and (close < 1.15 * ma) and (strategy.position_size > 0))
//strategy.order("S3", false, unitsLevel3 * units, when = (close > 1.15 * ma) and (close < 1.2 * ma) and (strategy.position_size > 0))
//strategy.order("S4", false, unitsLevel4 * units, when = (close > 1.2 * ma) and (close < 1.25 * ma) and (strategy.position_size > 0))
//strategy.order("S5", false, unitsLevel5 * units, when = (close > 1.25 * ma) and (close < 1.3 * ma) and (strategy.position_size > 0))

//mode 7
//strategy.order("B1", true, units, when = (close < 0.95 * ma) and (close > 0.9 * ma))
//strategy.order("B2", true, units, when = (close < 0.9 * ma) and (close > 0.85 * ma))
//strategy.order("B3", true, units, when = (close < 0.85 * ma) and (close > 0.8 * ma))
//strategy.order("B4", true, units, when = (close < 0.8 * ma) and (close > 0.75 * ma))
//strategy.order("B5", true, units, when = (close < 0.75 * ma))

//strategy.order("S1", false, units, when = (close > 1.05 * ma) and (close < 1.1 * ma) and (strategy.position_size > 0))
//strategy.order("S2", false, units, when = (close > 1.1 * ma) and (close < 1.15 * ma) and (strategy.position_size > 0))
//strategy.order("S3", false, units, when = (close > 1.15 * ma) and (close < 1.2 * ma) and (strategy.position_size > 0))
//strategy.order("S4", false, units, when = (close > 1.2 * ma) and (close < 1.25 * ma) and (strategy.position_size > 0))
//strategy.order("S5", false, units, when = (close > 1.25 * ma) and (close < 1.3 * ma) and (strategy.position_size > 0))

//banding calculations
aH = 1.0 - deviation
aL = aH - deviation
bH = aL
bL = bH - deviation
cH = bL
cL = cH - deviation
dH = cL
dL = dH - deviation
eH = dL
strategy.initial_capital = 50000
//mode 8
strategy.order("B1", true, unitsLevel1, when = (close < aH * ma) and (close > aL * ma) and (unitsLevel1 * close < (strategy.initial_capital + strategy.netprofit)))
strategy.order("B2", true, unitsLevel2, when = (close < bH * ma) and (close > bL * ma) and (unitsLevel2 * close < (strategy.initial_capital + strategy.netprofit)))
strategy.order("B3", true, unitsLevel3, when = (close < cH * ma) and (close > cL * ma) and (unitsLevel3 * close < (strategy.initial_capital + strategy.netprofit)))
strategy.order("B4", true, unitsLevel4, when = (close < dH * ma) and (close > dL * ma) and (unitsLevel4 * close < (strategy.initial_capital + strategy.netprofit)))
strategy.order("B5", true, unitsLevel5, when = (close < eH * ma) and (unitsLevel5 * close < (strategy.initial_capital + strategy.netprofit)))

//banding calculations
fL = 1.0 + deviation
fH = fL + deviation
gL = fH
gH = gL + deviation
hL = gH
hH = hL + deviation
iL = hH
iH = iL + deviation
jL = iH

strategy.order("S1", false, unitsLevel1, when = (close > fL * ma) and (close < fH * ma) and (strategy.position_size > 0))
strategy.order("S2", false, unitsLevel2, when = (close > gL * ma) and (close < gH * ma) and (strategy.position_size > 0))
strategy.order("S3", false, unitsLevel3, when = (close > hL * ma) and (close < hH * ma) and (strategy.position_size > 0))
strategy.order("S4", false, unitsLevel4, when = (close > iL * ma) and (close < iH * ma) and (strategy.position_size > 0))
strategy.order("S5", false, unitsLevel5, when = (close > jL * ma) and (strategy.position_size > 0))

plot(ma, color=#666666, linewidth=5)

अधिक