इस लेख में, हम अवधारणा का पता लगाएंगे और स्क्रिप्ट को लागू करने का प्रयास करेंगे।
के-लाइन एरिया रणनीति मूल्य के-लाइन और चलती औसत के बीच क्षेत्र संबंध पर आधारित एक ट्रेडिंग रणनीति है। इसका मुख्य विचार मूल्य रुझानों के परिमाण और परिवर्तनों के साथ-साथ खरीद और बिक्री भावना में बदलाव का विश्लेषण करके शेयर की कीमतों में संभावित रुझानों की भविष्यवाणी करना है, जिससे यह निर्धारित होता है कि पदों को कब खोलना है और बाहर निकलना है। यह रणनीति के-लाइन और चलती औसत के बीच के क्षेत्र पर निर्भर करती है, साथ ही केडीजे संकेतक से मान, लंबे और छोटे ट्रेडिंग संकेत उत्पन्न करने के लिए।
के-लाइन का क्षेत्रफल मूल्य के-लाइन और चलती औसत के बीच के स्थानिक क्षेत्रफल को संदर्भित करता है, जिसे प्रत्येक पट्टी के समापन मूल्य से चलती औसत मूल्य को घटाकर और फिर इसे जोड़कर गणना की जाती है। जब लंबी अवधि के दौरान कीमत में बड़ी वृद्धि होती है, तो के-लाइन क्षेत्र बड़ा हो जाएगा, जबकि अस्थिर बाजारों के दौरान या अस्थिरता उलटने के बाद, के-लाइन क्षेत्र छोटा होता है।
एक आसन्न रुझान उलटने की पुष्टि करने के लिए, हम केडीजे संकेतकों का उपयोग शुरू करते हैं जो खरीद या बिक्री की भावना में बदलाव को निर्धारित करने में मदद करते हैं। सटीकता बढ़ाने के लिए विशिष्ट परिस्थितियों और जरूरतों के अनुसार रणनीति के लिए सीमाओं और इन संकेतकों के लिए मूल्यों को समायोजित किया जा सकता है।
के-लाइन क्षेत्र की रणनीति का लाभ मूल्य रुझानों की परिमाण और परिवर्तनों के साथ-साथ खरीद और बिक्री की भावना में बदलाव के संयोजन में निहित है, जो एक अपेक्षाकृत पूर्ण मात्रात्मक व्यापारिक रणनीति प्रदान करता है। इसके लाभों में शामिल हैंः
यद्यपि के-लाइन क्षेत्र की रणनीति में कुछ फायदे हैं, लेकिन इसमें कुछ जोखिम भी हैं, जिनमें शामिल हैंः
के-लाइन क्षेत्र की रणनीति को अनुकूलित करने के लिए, निम्नलिखित दिशाओं पर विचार करें:
के-लाइन क्षेत्रफल की गणना करें
लंबी स्थिति खोलने का संकेतः
(1) घटती प्रवृत्ति का
(2) KDJ सूचक का मान 80 से अधिक है।
शॉर्ट पोजीशन खोलने का संकेतः
(1) ऊपर की ओर बढ़ने वाले रुझान का
(2) KDJ संकेतक का मान 20 से कम है।
लंबे/लघु पदों के लिए बाहर निकलनाः एटीआर के पीछे स्टॉप लॉस और लाभ लेना।
कोड कार्यान्वयन
// Parameter
var maPeriod = 30
var threshold = 50000
var amount = 0.1
// Global variable
let c = KLineChart({})
let openPrice = 0
let tradeState = "NULL" // NULL BUY SELL
function calculateKLineArea(r, ma) {
var lastCrossUpIndex = null
var lastCrossDownIndex = null
for (var i = r.length - 1 ; i >= 0 ; i--) {
if (ma[i] !== null && r[i].Open < ma[i] && r[i].Close > ma[i]) {
lastCrossUpIndex = i
break
} else if (ma[i] !== null && r[i].Open > ma[i] && r[i].Close < ma[i]) {
lastCrossDownIndex = i
break
}
if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close < ma[i - 1] && r[i].Close > ma[i]) {
lastCrossUpIndex = i
break
} else if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close > ma[i - 1] && r[i].Close < ma[i]) {
lastCrossDownIndex = i
break
}
}
var area = 0
if (lastCrossDownIndex !== null) {
for (var i = r.length - 1 ; i >= lastCrossDownIndex ; i--) {
area -= Math.abs(r[i].Close - ma[i])
}
} else if (lastCrossUpIndex !== null) {
for (var i = r.length - 1 ; i >= lastCrossUpIndex ; i--) {
area += Math.abs(r[i].Close - ma[i])
}
}
return [area, lastCrossUpIndex, lastCrossDownIndex]
}
function onTick() {
var r = _C(exchange.GetRecords)
if (r.length < maPeriod) {
LogStatus(_D(), "Insufficient number of K-line")
return
}
var ma = TA.MA(r, maPeriod)
var atr = TA.ATR(r)
var kdj = TA.KDJ(r)
var lineK = kdj[0]
var lineD = kdj[1]
var lineJ = kdj[2]
var areaInfo = calculateKLineArea(r, ma)
var area = _N(areaInfo[0], 0)
var lastCrossUpIndex = areaInfo[1]
var lastCrossDownIndex = areaInfo[2]
r.forEach(function(bar, index) {
c.begin(bar)
c.plotcandle(bar.Open, bar.High, bar.Low, bar.Close, {overlay: true})
let maLine = c.plot(ma[index], "ma", {overlay: true})
let close = c.plot(bar.Close, 'close', {overlay: true})
c.fill(maLine, close, {color: bar.Close > ma[index] ? 'rgba(255, 0, 0, 0.1)' : 'rgba(0, 255, 0, 0.1)'})
if (lastCrossUpIndex !== null) {
c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
} else if (lastCrossDownIndex !== null) {
c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
}
c.plot(lineK[index], "K")
c.plot(lineD[index], "D")
c.plot(lineJ[index], "J")
c.close()
})
if (tradeState == "NULL" && area < -threshold && lineK[lineK.length - 1] > 70) {
// long
let tradeInfo = $.Buy(amount)
if (tradeInfo) {
openPrice = tradeInfo.price
tradeState = "BUY"
}
} else if (tradeState == "NULL" && area > threshold && lineK[lineK.length - 1] < 30) {
// short
let tradeInfo = $.Sell(amount)
if (tradeInfo) {
openPrice = tradeInfo.price
tradeState = "SELL"
}
}
let stopBase = tradeState == "BUY" ? Math.max(openPrice, r[r.length - 2].Close) : Math.min(openPrice, r[r.length - 2].Close)
if (tradeState == "BUY" && r[r.length - 1].Close < stopBase - atr[atr.length - 2]) {
// cover long
let tradeInfo = $.Sell(amount)
if (tradeInfo) {
tradeState = "NULL"
openPrice = 0
}
} else if (tradeState == "SELL" && r[r.length - 1].Close > stopBase + atr[atr.length - 2]) {
// cover short
let tradeInfo = $.Buy(amount)
if (tradeInfo) {
tradeState = "NULL"
openPrice = 0
}
}
LogStatus(_D(), "area:", area, ", lineK[lineK.length - 2]:", lineK[lineK.length - 2])
}
function main() {
if (exchange.GetName().includes("_Futures")) {
throw "not support Futures"
}
while (true) {
onTick()
Sleep(1000)
}
}
रणनीति का तर्क बहुत सरल हैः
रणनीतिक मापदंड
वैश्विक चर
कार्य गणना करें
मुख्य लूप फ़ंक्शन
onTick फ़ंक्शन: यह मुख्य रणनीति निष्पादन फ़ंक्शन है, और यहाँ फ़ंक्शन के भीतर संचालन हैंः
a. नवीनतम के-लाइन डेटा प्राप्त करें और सुनिश्चित करें कि के-लाइनों की संख्या maPeriod से कम नहीं है, अन्यथा स्थिति और रिटर्न रिकॉर्ड करें।
b. चलती औसत रेखा ma और एटीआर संकेतक atr, साथ ही केडीजे संकेतक की गणना करें।
c. areaInfo से क्षेत्र की जानकारी प्राप्त करें, अंतिम क्रॉस-ओवर K-लाइन सूचकांक, और अंतिम क्रॉस-अंडर K-लाइन सूचकांक।
d. मूल्य
ई. शर्तों के अनुसार खरीद या बिक्री का समय निर्धारित करें:
यदि tradeState
यदि यह ख़रीदने की स्थिति में है, जब कीमत पिछले ट्रेडिंग दिन की समापन कीमत से घटाकर पिछले दिनों के एटीआर (औसत सच्ची सीमा) से नीचे गिर जाती है, तो बंद स्थिति। यदि यह बिकने की स्थिति में है, तो जब कीमत पिछले ट्रेडिंग दिन की समापन मूल्य और पिछले दिनों के एटीआर (औसत सच्ची सीमा) से ऊपर बढ़ जाती है, तो स्थिति बंद हो जाती है।
main function: यह मुख्य निष्पादन प्रविष्टि बिंदु के रूप में कार्य करता है। यह जांचता है कि क्या एक्सचेंज नाम में
एक शब्द में, यह रणनीति मुख्य रूप से खरीद या बिक्री निर्णय लेने के लिए के-लाइन चार्ट और तकनीकी संकेतकों पर निर्भर करती है जबकि जोखिम को प्रबंधित करने के लिए स्टॉप-लॉस और ले-प्रॉफिट रणनीतियों का भी उपयोग करती है। कृपया ध्यान दें कि यह केवल एक उदाहरण रणनीति के रूप में कार्य करता है जिसे वास्तविक उपयोग के दौरान बाजार की स्थितियों और विशिष्ट आवश्यकताओं के अनुसार समायोजित और अनुकूलित करने की आवश्यकता है।
परFMZ.COM, जावास्क्रिप्ट भाषा का उपयोग करने के लिए कोड की कई पंक्तियों की आवश्यकता नहीं थी, इसके बजाय, इस मॉडल को आसानी से लागू किया गया था। और KLineChart फ़ंक्शन की मदद से K-लाइन चार्ट क्षेत्र का ग्राफिकल प्रतिनिधित्व भी आसानी से प्राप्त किया गया था। टेम्पलेट के भीतर कैप्सुलेटेड फ़ंक्शंस के माध्यम से ऑर्डर देने के लिए
मैंने यादृच्छिक रूप से एक बैकटेस्टिंग अवधि का चयन किया। हालांकि मैंने पैसा नहीं खोया, मैंने लगातार लाभ भी नहीं जमा किया, और निकासी का मुद्दा काफी महत्वपूर्ण है। रणनीति के लिए अन्य दिशाओं और अनुकूलन के लिए जगह होनी चाहिए। जो लोग रुचि रखते हैं वे रणनीति को अपग्रेड करने की कोशिश कर सकते हैं।
रणनीति के माध्यम से, हमने न केवल एक अपरंपरागत व्यापारिक विचार सीखा, बल्कि आरेखों को प्लॉट करने का तरीका भी सीखा; K-लाइन और चलती औसत रेखा द्वारा संलग्न क्षेत्र का प्रतिनिधित्व करना; KDJ संकेतकों को प्लॉट करना आदि।
के-लाइन एरिया रणनीति मूल्य प्रवृत्ति परिमाण और केडीजे संकेतक पर आधारित एक ट्रेडिंग रणनीति है। यह व्यापारियों को के-लाइन और चलती औसत के बीच के क्षेत्र का विश्लेषण करके बाजार के रुझानों की भविष्यवाणी करने में मदद करती है, साथ ही साथ खरीद और बिक्री की भावना में बदलाव भी करती है। कुछ जोखिमों के बावजूद, यह रणनीति निरंतर अनुकूलन और समायोजन के माध्यम से शक्तिशाली ट्रेडिंग उपकरण प्रदान कर सकती है, जिससे व्यापारियों को बाजार में उतार-चढ़ाव से बेहतर ढंग से निपटने में मदद मिलती है। इसके अलावा, व्यापारियों को बेहतर ट्रेडिंग प्रदर्शन प्राप्त करने के लिए विशिष्ट स्थितियों और बाजार की परिस्थितियों के अनुसार रणनीति के मापदंडों और नियमों को लचीले ढंग से समायोजित करना चाहिए।