
यह रणनीति चलती औसत क्रॉसिंग के सिद्धांत पर आधारित है, और यह एक विशिष्ट प्रवृत्ति-अनुवर्ती रणनीति है, जब अल्पकालिक औसत नीचे से लंबी अवधि के औसत को पार करता है, और जब अल्पकालिक औसत ऊपर से नीचे से लंबी अवधि के औसत को पार करता है, तो यह खाली हो जाता है।
यह रणनीति मुख्य रूप से दो सरल चलती औसत, एक अल्पकालिक और एक दीर्घकालिक, की गणना करके और उनके क्रॉसिंग के आधार पर प्रवृत्ति की दिशा का आकलन करती है।
विशेष रूप से, रणनीति ने सबसे पहले अल्पकालिक औसत xMA और दीर्घकालिक औसत की गणना की, अल्पकालिक औसत की लंबाई Len है, और दीर्घकालिक औसत की लंबाई 2 है*Len。
फिर रणनीति यह निर्धारित करती है कि क्या अल्पकालिक औसत लंबी अवधि की औसत रेखा को पार कर रहा है, यदि ऐसा होता है तो यह एक बहुसंकेतक उत्पन्न करता है; यह निर्धारित करना कि क्या अल्पकालिक औसत लंबी अवधि की औसत रेखा को पार कर रहा है, यदि ऐसा होता है तो यह एक शून्य संकेत उत्पन्न करता है।
अधिक संकेत प्राप्त करने के बाद, यदि वर्तमान में कोई स्थिति नहीं है, तो बाजार मूल्य पर अधिक स्थिति खोलें; यदि वर्तमान में कोई स्थिति नहीं है, तो बाजार मूल्य पर स्थिति खोलें।
इसके अलावा, रणनीति एक स्टॉप-लॉस स्टॉप पॉइंट भी सेट करती है। अधिक करने के बाद स्टॉप-लॉस को प्रवेश मूल्य-स्टॉप-लॉस प्रतिशत के रूप में सेट करें*प्रवेश मूल्य, स्टॉप मूल्य के रूप में प्रवेश मूल्य + स्टॉप प्रतिशत*प्रवेश मूल्य; स्टॉप-लॉस को स्टॉप-लॉस प्रतिशत के रूप में सेट करें*प्रवेश मूल्य, प्रवेश मूल्य के रूप में स्टॉप मूल्य - स्टॉप मूल्य का प्रतिशत*प्रवेश शुल्क
अंत में, रणनीति एक समान दृश्य वक्र का उत्पादन करती है जो प्रवृत्ति का आकलन करने में मदद करती है।
यह एक सरल, स्पष्ट, समझने में आसान और शुरुआती सीखने के लिए उपयुक्त है।
बाजार के रुझानों को प्रभावी ढंग से ट्रैक करने के लिए एक चलती औसत के आधार पर प्रवृत्ति की दिशा का आकलन करें;
स्टॉप लॉस स्टॉप पॉइंट्स जो जोखिम को नियंत्रित करते हैं;
दृश्यमान रूप से एकसमान वक्र प्रदर्शित करता है, और रुझान में परिवर्तन को दर्शाता है।
औसत रेखा में देरी होती है, जिससे सबसे अच्छे प्रवेश बिंदुओं को याद करने का जोखिम होता है;
अनुचित रोक-टोक की स्थापना के कारण रोक-टोक बहुत ढीली या बहुत सख्त हो सकती है;
स्टॉक की कीमतों में भारी उतार-चढ़ाव होने पर औसत रेखा में झूठे संकेतों की संभावना;
केवल औसत रेखा आवृत्ति के आधार पर पैरामीटर अनुकूलन, ओवरफिटिंग का कारण बन सकता है।
इन जोखिमों को कम करने के लिए उचित रूप से आराम से रोकना, औसत चक्र पैरामीटर के संयोजन को अनुकूलित करना और अन्य संकेतकों को फ़िल्टर करना शामिल है।
अन्य संकेतकों को फ़िल्टर करने के लिए जोड़ें, जैसे कि MACD, KDJ, आदि, ताकि गलत संकेत उत्पन्न करने से बचें;
अल्पकालिक औसत रेखा और दीर्घकालिक औसत रेखा की लंबाई के लिए बहु-संयोजन अनुकूलन, सर्वोत्तम पैरामीटर संयोजन खोजने के लिए;
विभिन्न स्टॉप-ऑफ-लॉस रणनीतियों का परीक्षण करना, जैसे कि वर्ड स्टॉप, मूव स्टॉप आदि।
स्टॉक मैनेजमेंट मॉड्यूल जोड़ा गया है, जिससे पूंजी उपयोग दक्षता में सुधार हुआ है।
इस रणनीति के समग्र विचार स्पष्ट और संक्षिप्त है, प्रवृत्ति की दिशा का न्याय करने के लिए समानांतर रेखा के आधार पर, प्रवृत्ति को प्रभावी ढंग से ट्रैक किया जा सकता है, और जोखिम नियंत्रित है, जो नौसिखिया सीखने के संदर्भ के लिए उपयुक्त है। लेकिन केवल समानांतर रेखा पर भरोसा करने से गलत संकेत हो सकते हैं, अनुकूलन के लिए बहुत जगह है, अनुकूलन सुधार के लिए कई पहलुओं से सुधार किया जा सकता है, जिससे रणनीति अधिक स्थिर और विश्वसनीय हो सके।
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//@strategy_alert_message {{strategy.order.alert_message}}
////////////////////////////////////////////////////////////
// Copyright by HPotter v2.0 19/09/2023
// MA Crossover Bot for OKX Exchange
////////////////////////////////////////////////////////////
var ALERTGRP_CRED = "entry"
signalToken = input("", "Signal Token", inline = "11", group = ALERTGRP_CRED)
OrderType = input.string("market", "Order Type", options = ["market", "limit"], inline = "21", group = ALERTGRP_CRED)
OrderPriceOffset = input.float(0, "Order Price Offset", minval = 0, maxval = 100, step = 0.01, inline = "21", group = ALERTGRP_CRED)
InvestmentType = input.string("percentage_balance", "Investment Type", options = ["margin", "contract", "percentage_balance", "percentage_investment"], inline = "31", group = ALERTGRP_CRED)
Amount = input.float(100, "Amount", minval = 0.01, inline = "31", group = ALERTGRP_CRED)
getAlertMsg(action, instrument, signalToken, orderType, orderPriceOffset, investmentType, amount) =>
str = '{'
str := str + '"action": "' + action + '", '
str := str + '"instrument": "' + instrument + '", '
str := str + '"signalToken": "' + signalToken + '", '
//str := str + '"timestamp": "' + str.format_time(timenow, "yyyy-MM-dd'T'HH:mm:ssZ", "UTC+0") + '", '
str := str + '"timestamp": "' + '{{timenow}}' + '", '
str := str + '"orderType": "' + orderType + '", '
str := str + '"orderPriceOffset": "' + str.tostring(orderPriceOffset) + '", '
str := str + '"investmentType": "' + investmentType + '", '
str := str + '"amount": "' + str.tostring(amount) + '"'
str := str + '}'
str
getOrderAlertMsgExit(action, instrument, signalToken) =>
str = '{'
str := str + '"action": "' + action + '", '
str := str + '"instrument": "' + instrument + '", '
str := str + '"signalToken": "' + signalToken + '", '
str := str + '"timestamp": "' + '{{timenow}}' + '", '
str := str + '}'
str
strategy(title='OKX: MA Crossover', overlay=true)
Len = input(13)
Profit = input.float(7, title='Take Profit %', minval=0.01) / 100
Stop = input.float(7, title='Stop Loss %', minval=0.01) / 100
xMA = ta.sma(close, Len)
//Robot State
isLong = strategy.position_size > 0
isShort = strategy.position_size < 0
isFlat = strategy.position_size == 0
//Current Signal
doLong = low < xMA[1] ? true : false
doShort = high > xMA[1] ? true: false
//Backtest Start Date
tm = timestamp(2022, 01, 01, 09, 30)
//Entry and exit orders
if doLong[2] == false and isLong == false and doLong and time > tm
strategy.cancel_all()
buyAlertMsgExit = getOrderAlertMsgExit(action = 'EXIT_LONG', instrument = syminfo.ticker, signalToken = signalToken)
buyAlertMsg = getAlertMsg(action = 'ENTER_LONG', instrument = syminfo.ticker, signalToken = signalToken, orderType = OrderType, orderPriceOffset = OrderPriceOffset, investmentType = InvestmentType, amount = Amount)
strategy.entry('Long', strategy.long, limit = close, comment='Long', alert_message =buyAlertMsg)
strategy.exit("ExitLong", 'Long', stop=close - close * Stop , limit = close + close * Profit , qty_percent = 100, alert_message = buyAlertMsgExit)
if doShort[2] == false and isShort == false and doShort and time > tm
strategy.cancel_all()
sellAlertMsgExit = getOrderAlertMsgExit(action = 'EXIT_SHORT', instrument = syminfo.ticker, signalToken = signalToken)
sellAlertMsg = getAlertMsg(action = 'ENTER_SHORT', instrument = syminfo.ticker, signalToken = signalToken, orderType = OrderType, orderPriceOffset = OrderPriceOffset, investmentType = InvestmentType, amount = Amount)
strategy.entry('Short', strategy.short, limit=close, comment='Short', alert_message = sellAlertMsg)
strategy.exit("ExitShort", 'Short', stop=close + close * Stop , limit = close - close * Profit , qty_percent = 100, alert_message = sellAlertMsgExit)
//Visual
barcolor(isShort ? color.red : isLong ? color.green : color.blue)
plot(xMA, color=color.new(color.red, 0), title='MA')