सम-रेखा क्रॉसिंग रणनीति एक सामान्य ट्रेडिंग रणनीति है जो चलती सम-रेखा पर आधारित है। यह रणनीति तेजी से चलती सम-रेखा और धीमी गति से चलती सम-रेखा के क्रॉसिंग का उपयोग करती है जो एक खरीद और बेचने के संकेत के रूप में कार्य करती है। जब तेज सम-रेखा नीचे से धीमी सम-रेखा को पार करती है, तो इसे एक खरीद संकेत के रूप में माना जाता है; जब तेज सम-रेखा ऊपर से नीचे से धीमी सम-रेखा को पार करती है, तो इसे एक बेचने के संकेत के रूप में माना जाता है। यह रणनीति 50-दिन की औसत रेखा को तेजी से औसत रेखा के रूप में और 200-दिन की औसत रेखा को धीमी औसत रेखा के रूप में उपयोग करती है।
इस रणनीति का मुख्य तर्क समानांतर रेखा सिद्धांत पर आधारित है। एक चलती समानांतर रेखा मूल्य में उतार-चढ़ाव को प्रभावी ढंग से समतल करने में सक्षम है और मूल्य प्रवृत्ति को दर्शाता है। एक तेज समानांतर रेखा मूल्य में बदलाव के लिए अधिक संवेदनशील है और प्रवृत्ति के मोड़ को पकड़ने में सक्षम है। एक धीमी समानांतर रेखा मूल्य में बदलाव के लिए कम संवेदनशील है और अल्पकालिक उतार-चढ़ाव को फ़िल्टर कर सकती है। जब एक तेज समानांतर रेखा एक धीमी समानांतर रेखा को पार करती है, तो एक अल्पकालिक मूल्य बढ़ना शुरू होता है और एक बहुमुखी प्रवृत्ति में प्रवेश करना शुरू कर देता है; जब एक तेज समानांतर रेखा एक धीमी समानांतर रेखा को पार करती है, तो एक अल्पकालिक मूल्य गिरना शुरू होता है और एक शून्य प्रवृत्ति में प्रवेश करना शुरू होता है।
विशेष रूप से, इस रणनीति ने पहले 50 दिन की औसत रेखा और 200 दिन की औसत रेखा को परिभाषित किया। इसके बाद मल्टीहेड प्रविष्टि को धीमी औसत रेखा के माध्यम से तेजी से औसत रेखा पर सेट किया गया, और खाली सिर प्रविष्टि को धीमी औसत रेखा के माध्यम से तेजी से औसत रेखा के नीचे सेट किया गया। ओवरलैप ट्रेडिंग से बचने के लिए, रणनीति isEntry और isExit संकेत बिंदुओं का उपयोग करके नियंत्रित की जाती है। जब प्रविष्टि की स्थिति पूरी हो जाती है, तो isEntry को सही के रूप में सेट किया जाता है, और जब बाहर निकलने की स्थिति पूरी हो जाती है, तो isExit को सही के रूप में सेट किया जाता है। मल्टीहेड केवल तभी खोला जाता है जब isEntry झूठा होता है और एक खरीद संकेत होता है; खाली सिर केवल तभी खोला जाता है जब isExit झूठा होता है और एक बेचने का संकेत होता है।
इसके अलावा, रणनीति में एक स्टॉप और स्टॉप लॉस पॉइंट भी सेट किया गया है। उपयोगकर्ता स्टॉप और स्टॉप लॉस की दूरी को प्रतिशत दर्ज करके सेट कर सकता है। स्टॉप और स्टॉप लॉस की कीमतों की गणना प्रवेश मूल्य के प्रतिशत परिवर्तन के आधार पर की जाती है। स्टॉप लॉस को सेट स्टॉप और स्टॉप लॉस प्रतिशत के आधार पर निष्पादित किया जाता है जब स्थिति 0 से अधिक हो; और स्टॉप लॉस को सेट खाली हेड स्टॉप लॉस प्रतिशत के आधार पर निष्पादित किया जाता है जब स्थिति 0 से कम हो।
इस रणनीति के निम्नलिखित फायदे हैं:
यह सरल है और इसे लागू करने में आसान है। यह केवल सम-रेखा पार के आधार पर व्यापार करने के लिए उपयुक्त है, जो बिना किसी व्यापारिक अनुभव वाले शुरुआती लोगों के लिए उपयुक्त है।
एक नियंत्रित वापसी, एक निश्चित जोखिम प्रबंधन तंत्र के साथ। एक चलती औसत रेखा एक प्रभावी फ़िल्टर है जो अल्पकालिक मूल्य उतार-चढ़ाव को रोकती है और बोली लगाने से बचती है।
अनुकूलन योग्य पैरामीटर, अनुकूलन योग्य। उपयोगकर्ता स्वयं औसत पैरामीटर और स्टॉप-स्टॉप-लॉस मानकों को सेट कर सकते हैं, रणनीति को अनुकूलित करने के लिए पैरामीटर।
स्पष्ट रूप से प्रदर्शित किया गया। रणनीतियों ने सीधे चार्ट पर महत्वपूर्ण औसत रेखा, प्रवेश बिंदु, स्टॉप-स्टॉप-लॉस बिंदुओं को चित्रित किया।
स्केलेबिलिटी मजबूत. रणनीति का ढांचा पूर्ण है और केवल महत्वपूर्ण व्यापारिक संकेतों को संशोधित करने, संकेतकों को जोड़ने आदि के साथ रणनीति में सुधार किया जा सकता है.
इस रणनीति के कुछ जोखिम भी हैं:
बाजार की अचानक घटनाओं के कारण भारी व्यापारिक स्थिति होती है, जिसे रोकना असंभव है। रैपिड औसत मूल्य परिवर्तनों के प्रति अधिक संवेदनशील होता है, जिससे अचानक घटनाओं का प्रभावी ढंग से सामना नहीं किया जा सकता है।
यदि बाजार में लंबे समय तक उतार-चढ़ाव होता है, तो नुकसान दोहराया जाएगा।
लेनदेन की लागत को ध्यान में नहीं रखा गया है। वास्तविक लेनदेन में शुल्क और स्लाइड-ऑफ हानि से लाभ पर गंभीर प्रभाव पड़ता है।
फीडबैक डेटा के अनुरूप जोखिम. वास्तविक स्थिति जटिल और परिवर्तनशील है, फीडबैक परिणाम वास्तविक युद्ध के प्रदर्शन का प्रतिनिधित्व नहीं करते हैं.
समाधान के लिएः
अधिक आराम से रोकथाम मानदंड सेट किया जा सकता है, या अतिरिक्त ब्रेकआउट रोकथाम जोड़ा जा सकता है।
औसत दूरी को बढ़ाया जा सकता है, लेनदेन की आवृत्ति को कम किया जा सकता है, या सिग्नल को अन्य संकेतकों द्वारा फ़िल्टर किया जा सकता है।
वास्तविक लेनदेन लागत को ध्यान में रखते हुए, एक अधिक उदार रोक की जगह स्थापित की जानी चाहिए
बाजार के परिवेश में बदलाव को ध्यान में रखते हुए, पैरामीटर को अनुकूलित करें और धीरे-धीरे कम करें।
इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
विभिन्न मापदंडों के संयोजनों का परीक्षण करें, सबसे अच्छा मापदंडों की तलाश करें। दिन की संख्या और मापदंडों के संयोजनों का परीक्षण करें, जैसे कि धीमी गति से औसत।
अन्य संकेतकों के साथ फ़िल्टर करें ताकि आपातकालीन स्थिति में गलत व्यापार से बचा जा सके। उदाहरण के लिए MACD, KD आदि।
स्टॉप-स्टॉप रणनीति को अनुकूलित करें और अधिक कुशल जोखिम प्रबंधन प्राप्त करें। जैसे कि स्टॉप को ट्रैक करना, स्टॉप को लटकाना आदि।
अपनी स्थिति को बड़ा करें, लाभ उठाने के लिए लीवरेज का उपयोग करें, लाभ के लिए जगह बढ़ाएं। लेकिन जोखिम को नियंत्रित करें।
वास्तविक समय के लिए रणनीति पैरामीटर को अनुकूलित करने के लिए फीडबैक पैरामीटर को अनुकूलित करने के लिए, वास्तविक समय के लेनदेन की लागत को ध्यान में रखते हुए।
सांख्यिकीय विधियों के संयोजन के साथ पैरामीटर स्थिरता का आकलन करें, डेटा मिलान के जोखिम को कम करें, स्थिरता बढ़ाएं।
कुल मिलाकर, इस समानांतर क्रॉसिंग रणनीति की समग्र अवधारणा स्पष्ट है, सरल है, और इसे सीखने के लिए क्वांटिफाइड ट्रेडिंग के लिए एक प्रवेश रणनीति के रूप में अनुकूलित किया गया है। हालांकि, इस रणनीति में कुछ जोखिम और कमियां भी हैं। स्थिर रिटर्न प्राप्त करने के लिए पैरामीटर और फ़िल्टर को बारीकी से अनुकूलित करने की आवश्यकता है। इस रणनीति के ढांचे में बहुत मजबूत विस्तारशीलता है। उपयोगकर्ता इस आधार पर नवाचार और अनुकूलन कर सकते हैं और अपनी शैली के लिए अधिक उपयुक्त ट्रेडिंग रणनीति विकसित कर सकते हैं।
/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-09 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gjfsdrtytru
//@version=4
strategy("Backtest Engine", "Backtest", overlay=true, commission_type=strategy.commission.percent, commission_value=0.07, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD)
// Start code here...
fastMA = sma(close,50)
slowMA = sma(close,200)
plot(fastMA, "Fast MA", color.blue)
plot(slowMA, "Slow MA", color.red)
// Long Enrty/Exit
longCondition = crossover(fastMA,slowMA)
closeLong = crossover(slowMA,fastMA)
// Short Enrty/Exit
shortCondition = crossover(slowMA,fastMA)
closeShort = crossover(fastMA,slowMA)
// Bot web-link alert - {{strategy.order.comment}}
botLONG = "ENTRY LONG ALERT"
botCLOSELONG = "CLOSE LONG ALERT"
botSHORT = "ENTRY SHORT ALERT"
botCLOSESHORT = "CLOSE SHORT ALERT"
//////////////////////////////////////////////////////////////////
//////////////////////// BACKTEST ENGINE \\\\\\\\\\\\\\\\\\\\\\\\\
/////////////////// [NO USER INPUT REQUIRED] /////////////////////
//////////////////////////////////////////////////////////////////
// Time period
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(5, "Backtest Start Month")
testStartDay = input(11, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
periodLength = input(3650, "Backtest Period (days)", minval=0,tooltip="Days until strategy ends") * 86400000 // convert days into UNIX time
testPeriodStop = testPeriodStart + periodLength
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
// Convert Take profit and Stop loss to percentage
longTP = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
longSL = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortTP = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortSL = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
// 0% TP/SL = OFF (a value of 0 turns off TP/SL feature)
longProfitPerc = longTP == 0 ? 1000 : longTP
longStopPerc = longSL == 0 ? 1 : longSL
shortProfitPerc = shortTP == 0 ? 1 : shortTP
shortStopPerc = shortSL == 0 ? 1000 : shortSL
// Determine TP/SL price based on percentage given
longProfitPrice = strategy.position_avg_price * (1 + longProfitPerc)
longStopPrice = strategy.position_avg_price * (1 - longStopPerc)
shortProfitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortStopPerc)
// Anti-overlap
isEntry_Long = false
isEntry_Long := nz(isEntry_Long[1], false)
isExit_Long = false
isExit_Long := nz(isExit_Long[1], false)
isEntry_Short = false
isEntry_Short := nz(isEntry_Short[1], false)
isExit_Short = false
isExit_Short := nz(isExit_Short[1], false)
entryLong = not isEntry_Long and longCondition
exitLong = not isExit_Long and closeLong
entryShort = not isEntry_Short and shortCondition
exitShort = not isExit_Short and closeShort
if (entryLong)
isEntry_Long := true
isExit_Long := false
if (exitLong)
isEntry_Long := false
isExit_Long := true
if (entryShort)
isEntry_Short := true
isExit_Short := false
if (exitShort)
isEntry_Short := false
isExit_Short := true
// Order Execution
if testPeriod()
if entryLong
strategy.entry(id="Long", long=true, when = entryLong, comment=botLONG) // {{strategy.order.comment}}
if entryShort
strategy.entry(id="Short", long=false, when = entryShort, comment=botSHORT) // {{strategy.order.comment}}
// TP/SL Execution
if (strategy.position_size > 0)
strategy.exit(id="Long SL/TP", from_entry="Long", limit=longProfitPrice, stop=longStopPrice)
strategy.close(id="Long", when=exitLong, comment=botCLOSELONG) // {{strategy.order.comment}}
if (strategy.position_size < 0)
strategy.exit(id="Short TP/SL", from_entry="Short", limit=shortProfitPrice, stop=shortStopPrice)
strategy.close(id="Short", when=exitShort, comment=botCLOSESHORT) // {{strategy.order.comment}}
// Draw Entry, TP and SL Levels for Long Positions
plot(strategy.position_size > 0 ? longTP == 0 ? na : longProfitPrice : na, style=plot.style_linebr, color=color.green, title="Long TP")
plot(strategy.position_size > 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Long Entry")
plot(strategy.position_size > 0 ? longSL == 0 ? na : longStopPrice : na, style=plot.style_linebr, color=color.red, title="Long SL")
// Draw Entry, TP and SL Levels for Short Positions
plot(strategy.position_size < 0 ? shortTP == 0 ? na : shortProfitPrice : na, style=plot.style_linebr, color=color.green, title="Short TP")
plot(strategy.position_size < 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Short Entry")
plot(strategy.position_size < 0 ? shortSL == 0 ? na : shortStopPrice : na, style=plot.style_linebr, color=color.red, title="Short SL")