[TOC]
वीडियो ट्यूटोरियलः ट्रेडिंग व्यू का उपयोग करके पाइन भाषा से लेकर क्वांटम तक - पाइन भाषा की शुरुआत
आविष्कारक क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म पाइन भाषा लेखन रणनीति का समर्थन करता है, पाइन भाषा रणनीति का समर्थन करता है और पाइन भाषा के निचले संस्करणों के साथ संगतता प्रदान करता है।रणनीति स्क्वायरइस लेख में, हम पिन रणनीतियों (स्क्रिप्ट) के बारे में बात करेंगे।
FMZ केवल पाइन भाषा का समर्थन नहीं करता है, बल्कि पाइन भाषा की शक्तिशाली चित्र सुविधाओं का भी समर्थन करता है। एफएमजेड प्लेटफॉर्म पर विभिन्न सुविधाएं, समृद्ध व्यावहारिक उपकरण, कुशल और आसान प्रबंधन, पाइन रणनीति की व्यावहारिकता को और बढ़ाता है। पाइन भाषा के अनुकूलता के आधार पर एफएमजेड, पाइन भाषा के लिए कुछ हद तक विस्तार, अनुकूलन और कटौती करता है। आधिकारिक रूप से ट्यूटोरियल में प्रवेश करने से पहले, आइए देखें कि एफएमजेड पर पाइन भाषा और मूल पाइन में क्या बदलाव हुए हैं।
कुछ स्पष्ट अंतरों को संक्षेप में प्रस्तुत करने के लिएः
//@versionऔर कोड के साथ शुरूstrategy、indicatorबयानों को लिखने के लिए बाध्य नहीं किया गया है, एफएमजेड ने इसे अभी तक समर्थन नहीं दिया है।importआयात करेंlibraryसमारोह।शायद कुछ रणनीतियों को इस तरह लिखा हुआ देखा होगाः
//@version=5
indicator("My Script", overlay = true)
src = close
a = ta.sma(src, 5)
b = ta.sma(src, 50)
c = ta.cross(a, b)
plot(a, color = color.blue)
plot(b, color = color.black)
plotshape(c, color = color.red)
या यह लिखा गया हैः
//@version=5
strategy("My Strategy", overlay=true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
एफएमजेड पर संक्षिप्त रूप मेंः
src = close
a = ta.sma(src, 5)
b = ta.sma(src, 50)
c = ta.cross(a, b)
plot(a, color = color.blue, overlay=true)
plot(b, color = color.black, overlay=true)
plotshape(c, color = color.red, overlay=true)
याः
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
2। नीति (स्क्रिप्ट) कुछ लेनदेन से संबंधित सेटिंग्स एफएमजेड नीति इंटरफ़ेस पर “पाइन भाषा लेनदेन कक्षा भंडार” पैरामीटर द्वारा सेट की जाती हैं।
strategyफ़ंक्शन काcalc_on_every_tickपैरामीटर सेट करने के लिए नीति स्क्रिप्ट वास्तविक समय में नीति तर्क निष्पादित करने के लिए हर बार जब कीमत बदलती है, इस समयcalc_on_every_tickपैरामीटर सेट किया जाना चाहिएtrueडिफ़ॉल्टcalc_on_every_tickपैरामीटर हैfalseजब रणनीति के वर्तमान K लाइन BAR पूरी तरह से समाप्त हो जाती है, तो रणनीति तर्क को निष्पादित किया जाता है।
एफएमजेड पर, यह “पाइन भाषा लेन-देन कक्षा भंडार” टेम्पलेट के पैरामीटर के माध्यम से सेट किया गया है।
रणनीति निष्पादन के समय मूल्य, नीचे आदेश मात्रा जैसे संख्यात्मक परिशुद्धता नियंत्रण को FMZ पर निर्दिष्ट करने की आवश्यकता है ट्रेडिंग दृश्य पर, चूंकि केवल एनालॉग परीक्षण किया जा सकता है, इसलिए वास्तविक समय पर आदेश की सटीकता का कोई सवाल नहीं है। एफएमजेड पर, पिन रणनीति को वास्तविक समय पर चलाया जा सकता है। तो रणनीति को व्यापार की किस्मों की कीमत सटीकता और आदेश मात्रा सटीकता को निर्दिष्ट करने के लिए लचीलापन की आवश्यकता होती है। इन सटीकता सेटिंग्स से संबंधित डेटा के छोटे अंकों को नियंत्रित करने की आवश्यकता होती है, जिससे डेटा एक्सचेंज रिपोर्टिंग आवश्यकताओं के अनुरूप नहीं होता है और इसलिए आदेश नहीं दिया जा सकता है।
फ्यूचर कॉन्ट्रैक्ट कोड
एफएमजेड पर ट्रेडिंग किस्म यदि यह अनुबंध है, तो 2 गुण हैं। क्रमशः “ट्रेडिंग जोड़ी” और “अनुबंध कोड”, रीयल-टाइम और रिटर्न्स पर स्पष्ट रूप से सेट करने के अलावा, ट्रेडिंग जोड़ी को “पाइन भाषा ट्रेडिंग क्लासरूम” टेम्पलेट के पैरामीटर “रेंज कोड” में सेट करने की आवश्यकता होती है। उदाहरण के लिए, स्थायी अनुबंध भरेंswap, अनुबंध कोड यह देखने के लिए कि क्या एक्सचेंजों में इस तरह के अनुबंध हैं। उदाहरण के लिए, सभी तिमाही अनुबंधों के लिए, यहां भरा जा सकता हैquarterये अनुबंध कोड FMZ के जावास्क्रिप्ट / पायथन / सी ++ भाषा एपीआई दस्तावेज पर परिभाषित वायदा अनुबंध कोड के अनुरूप हैं।
अन्य सेटिंग्स जैसे कि न्यूनतम आदेश मात्रा, डिफ़ॉल्ट आदेश मात्रा आदि के बारे में पाइन भाषा के दस्तावेज़ में देखें।“पाइन लैंग्वेज एक्सचेंज क्लासरूम”पैरामीटर का परिचय
runtime.debug 、runtime.log、runtime.errorFMZ एक्सटेंशन फ़ंक्शन को डिबगिंग के लिए प्रयोग किया जाता है।FMZ प्लेटफॉर्म पर डीबगिंग के लिए 3 फ़ंक्शंस जोड़े गए हैं।
runtime.debug: यह फ़ंक्शन आम तौर पर कंसोल पर चर जानकारी को प्रिंट करने के लिए उपयोग नहीं किया जाता है।
runtime.log: लॉग में आउटपुट सामग्री FMZ PINE भाषा के लिए विशेष फ़ंक्शन
runtime.log(1, 2, 3, close, high, ...),可以传多个参数。
runtime.error: कॉल करने पर, यह एक रनटाइम त्रुटि का कारण बनता है, और संदेश पैरामीटर में निर्दिष्ट त्रुटि संदेश के साथ।
runtime.error(message)
4। आंशिक रूप से विस्तारित चित्र फ़ंक्शनoverlayपैरामीटर
FMZ पर पिन भाषा, चित्र फ़ंक्शनplot、plotshape、plotcharऔर अधिकoverlayपैरामीटर समर्थन, जो चित्रों को मुख्य या उप-चित्रों में निर्दिष्ट करने की अनुमति देता है.overlayस्थापित करनाtrueमुख्य चित्र में चित्रितfalseएफएमजेड पर पाइन रणनीति चलाने के लिए मुख्य और उप-चित्रों को एक साथ चित्रित किया जा सकता है।
syminfo.mintickअंतर्निहित चर के लिएsyminfo.mintickअंतर्निहित चर को वर्तमान किस्मों के न्यूनतम माप मान के रूप में परिभाषित किया गया है। FMZ मेंपक्का प्रस्ताव/बैकटेस्टिंगमूल्य निर्धारण मुद्रा की सटीकता 2 है, जो कि मूल्य निर्धारण मुद्रा की सटीकता 2 है, जो कि मूल्य निर्धारण के लिए एक छोटी संख्या के दूसरे स्थान पर सटीक है, और इस समय मूल्य में न्यूनतम परिवर्तन 0.01 है।syminfo.mintickतो यह 0.01 होगा.
उदाहरण के लिएः ऑर्डर मूल्य 8000 है, बिक्री दिशा, मात्रा 1 हाथ ((एक, शीट), औसत मूल्य 8000 से कम नहीं है ((लागत में प्रसंस्करण शुल्क शामिल है)) ।
पाइन भाषा की मूल बातें सीखना शुरू करते समय, हम शायद कुछ उदाहरणों में निर्देशों, कोड व्याकरण से परिचित नहीं होंगे। यह कोई फर्क नहीं पड़ता कि हम क्या नहीं समझते हैं, हम पहले अवधारणाओं से परिचित हो सकते हैं, परीक्षण के उद्देश्य को समझ सकते हैं, या एफएमजेड के पाइन भाषा के दस्तावेज को देख सकते हैं। फिर ट्यूटोरियल का पालन करें। विभिन्न व्याकरण, निर्देश, फ़ंक्शन, अंतर्निहित चर से परिचित होने के लिए कदम-दर-चरण कदम।
पाइन भाषा की शुरुआत में, पाइन भाषा की स्क्रिप्ट निष्पादन प्रक्रिया जैसे संबंधित अवधारणाओं को समझना बहुत आवश्यक है। पाइन भाषा की रणनीति चार्ट पर आधारित है, जिसे गणना और संचालन की एक श्रृंखला के रूप में समझा जा सकता है, जो चार्ट पर पहले से लोड किए गए डेटा से शुरू होता है। चार्ट पर प्रारंभिक लोड की गई डेटा की मात्रा सीमित है। रीयल-टाइम में आमतौर पर यह डेटा सीमा एक्सचेंज इंटरफेस पर लौटे अधिकतम डेटा की मात्रा के आधार पर निर्धारित की जाती है, और समय-सीमा डेटा सीमा को रीमेटिंग सिस्टम डेटा स्रोत द्वारा प्रदान किए गए डेटा के आधार पर निर्धारित किया जाता है। चार्ट पर सबसे बाईं ओर पहली पंक्ति के-बार, यानी चार्ट डेटासेट का एक डेटा, जिसका इंडेक्स मान 0 हो सकता है पाइन भाषा के इनपुट चर द्वाराbar_indexपिन स्क्रिप्ट के निष्पादन के समय वर्तमान K-लाइन Bar के इंडेक्स मान को संदर्भित करता है.
plot(bar_index, "bar_index")

plotफ़ंक्शंस फ़ंक्शंस में से एक है जो हम भविष्य में उपयोग करेंगे. यह बहुत ही सरल है, आप फ़ंक्शंस के लिए फ़ंक्शंस का उपयोग कर सकते हैं, आप फ़ंक्शंस के लिए फ़ंक्शंस का उपयोग कर सकते हैं, आप फ़ंक्शंस के लिए फ़ंक्शंस का उपयोग कर सकते हैं, आप फ़ंक्शंस के लिए फ़ंक्शंस का उपयोग कर सकते हैं, आप फ़ंक्शंस के लिए फ़ंक्शंस का उपयोग कर सकते हैं, और आप फ़ंक्शंस के लिए फ़ंक्शंस का उपयोग कर सकते हैं।bar_indexलाइन नामित किया गया थाbar_indexआप देख सकते हैं कि पहले बार पर bar_index नामक पंक्ति का मान 0 है, और बार की वृद्धि के साथ दाईं ओर 1 की वृद्धि होती है।
नीति की सेटिंग्स के आधार पर, नीति के मॉडल को निष्पादित करने के तरीके अलग-अलग होते हैं।收盘价模型और实时价模型हम पहले भी इस पर चर्चा कर चुके हैं, लेकिन हम यह भी जानते हैं कि यह कैसे काम करता है।
जब रणनीति कोड निष्पादित किया जाता है, तो वर्तमान के-लाइन बार का चक्र पूरी तरह से निष्पादित हो जाता है, और के-लाइन बंद होने पर के-लाइन चक्र समाप्त हो जाता है। इस समय, पाइन रणनीति तर्क को फिर से निष्पादित किया जाता है, और ट्रिगर किए गए ट्रेडिंग सिग्नल को अगले के-लाइन बार की शुरुआत में निष्पादित किया जाएगा।
रणनीति कोड निष्पादित करते समय, वर्तमान K-लाइन बार, चाहे वह बंद हो या नहीं, हर बार जब स्थिति बदलती है, तो पाइन रणनीति तर्क को फिर से निष्पादित किया जाता है, और ट्रिगर किए गए व्यापार संकेत को तुरंत निष्पादित किया जाता है।
जब पाइन भाषा रणनीति चार्ट पर बाएं से दाएं से निष्पादित की जाती है, तो चार्ट पर K लाइन बार को विभाजित किया जाता है历史Barऔर实时Barके लिएः
जब रणनीति को “वास्तविक स्टॉक मूल्य मॉडल” के रूप में सेट किया जाता है, तो चार्ट पर सभी K-लाइनों को छोड़कर सभी K-लाइनों को सबसे दाईं ओर एक K-लाइन बार के रूप में सेट किया जाता है।历史Bar◦ रणनीति तर्क में हर历史Barकेवल एक बार किया गया
जब रणनीति को “क्लोज-आउट प्राइस मॉडल” के रूप में सेट किया जाता है, तो चार्ट पर सभी बार历史Bar◦ रणनीति तर्क में हर历史Barकेवल एक बार किया गया
इतिहास बार के आधार पर गणनाः नीति कोड इतिहास बार बंद होने पर एक बार निष्पादित होता है, और फिर नीति कोड अगले इतिहास बार पर निष्पादित होता रहता है, जब तक कि सभी इतिहास बार एक बार निष्पादित नहीं हो जाते।
जब रणनीति को सबसे दाईं ओर के अंतिम K-लाइन बार पर निष्पादित किया जाता है, तो यह बार वास्तविक समय का बार होता है। जब वास्तविक बार बंद हो जाता है, तो यह बार एक पारित वास्तविक बार बन जाता है ((हिस्ट्री बार में बदल जाता है)) । चार्ट के सबसे दाईं ओर एक नया वास्तविक समय बार उत्पन्न होता है।
जब रणनीति को “वास्तविक समय मूल्य मॉडल” के रूप में सेट किया जाता है, तो रणनीति तर्क को वास्तविक समय बार पर प्रत्येक व्यापार परिवर्तन के लिए निष्पादित किया जाता है। रणनीति को “क्लोज-आउट प्राइस मॉडल” के रूप में सेट किया गया है, जब यह निष्पादित होता है, तो चार्ट पर वास्तविक बार दिखाई नहीं देता है।
वास्तविक समय में Bar के आधार परः
यदि नीति को “बंद मूल्य मॉडल” के रूप में सेट किया गया है, तो वास्तविक बार नहीं दिखाया जाएगा, तो नीति कोड केवल वर्तमान बार बंद होने पर एक बार निष्पादित किया जाएगा।
यदि नीति को “वास्तविक स्टॉक मूल्य मॉडल” के रूप में सेट किया जाता है, तो वास्तविक बार पर गणना और इतिहास बार पूरी तरह से अलग हैं, प्रत्येक बार जब वास्तविक बार पर व्यवहार बदलता है, तो एक नीति कोड निष्पादित किया जाता है। जैसे कि अंतर्निहित चरhigh、low、closeइतिहास बार में निश्चित है, वास्तविक समय बार में हो सकता है कि हर बार जब स्थिति बदलती है तो ये मान बदल जाते हैं। इसलिए इन मानों के आधार पर गणना किए गए संकेतक जैसे डेटा भी वास्तविक समय में बदल जाते हैं। वास्तविक समय बार मेंcloseयह हमेशा नवीनतम कीमतों का प्रतिनिधित्व करता है।highऔरlowहमेशा वर्तमान लाइव बार की शुरुआत के बाद से प्राप्त उच्चतम और निम्नतम बिंदुओं को दर्शाता है. इन अंतर्निहित चरों को वास्तविक बार के अंतिम अद्यतन के समय के अंतिम मानों को दर्शाता है.
वास्तविक समय में बार पर रणनीति निष्पादन के लिए रिवॉल्वर (वास्तविक समय मूल्य मॉडल): वास्तविक समय में बार निष्पादन के दौरान, नीति के प्रत्येक नई आवृत्ति के लिए पूर्व-रिसेट उपयोगकर्ता-परिभाषित चर को रिवर्स कहा जाता है। हम एक उदाहरण के साथ रिवर्स तंत्र को समझते हैं, परीक्षण कोड के रूप में।
सूचना:
/*backtest
...
..
.
*/
पैकेज में FMZ प्लेटफ़ॉर्म पर कोड के रूप में संग्रहीत फीडबैक कॉन्फ़िगरेशन जानकारी शामिल है।
/*backtest
start: 2022-06-03 09:00:00
end: 2022-06-08 15:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
var n = 0
if not barstate.ishistory
runtime.log("n + 1之前, n:", n, " 当前bar_index:", bar_index)
n := n + 1
runtime.log("n + 1之后, n:", n, " 当前bar_index:", bar_index)
plot(n, title="n")


हम केवल वास्तविक समय बार में प्रदर्शन के दृश्यों का अध्ययन करते हैं, इसलिए हमने इसका उपयोग कियाnot barstate.ishistoryअभिव्यक्ति प्रतिबंध केवल वास्तविक समय Bar में चर n के लिए संचयी है, और संचयी संचालन करने से पहले और बाद में उपयोग किया जाता हैruntime.logफ़ंक्शन नीति लॉग में जानकारी का उत्पादन करता है।plotखींची गई वक्र n को देखा जा सकता है जब रणनीति इतिहास बार में चल रही थी, तो n हमेशा 0 रहा है। वास्तविक समय बार में निष्पादित होने पर, n को 1 पर ट्रिगर किया गया था, और वास्तविक समय बार पर हर बार रणनीति निष्पादित होने पर n को 1 पर निष्पादित किया गया था। लॉग जानकारी से देखा जा सकता है कि प्रत्येक बार फिर से निष्पादित करने के लिए रणनीति कोड को पिछले बार निष्पादित करने के लिए अंतिम बार प्रस्तुत किया गया था। वास्तविक समय बार में अंतिम बार निष्पादित करने के लिए रणनीति कोड को प्रस्तुत किया गया था। इसलिए, यह देखा जा सकता है कि चार्ट वास्तविक समय बार से शुरू होता है और वक्र n को हर बार बार वक्र n को बढ़ाता है।
संक्षेप में: 1. जब रणनीति वास्तविक समय बार में निष्पादित की जाती है, तो नीति कोड को हर बार अपडेट किया जाता है। 2. वास्तविक समय बार पर निष्पादित होने पर, नीति कोड निष्पादित होने से पहले चर को वापस रोल किया जाता है। 3. वास्तविक समय बार पर निष्पादित होने पर, चर को समापन अद्यतन पर एक बार प्रस्तुत किया जाता है
क्योंकि डेटा रिवर्स होता है, इसलिए आरेख पर वक्र जैसे आरेखण संचालन भी पुनः आरेखण का कारण बन सकते हैं, उदाहरण के लिए हमने अभी परीक्षण कोड को संशोधित किया है, रीयल-डिस्क परीक्षणः
var n = 0
if not barstate.ishistory
runtime.log("n + 1之前, n:", n, " 当前bar_index:", bar_index)
n := open > close ? n + 1 : n
runtime.log("n + 1之后, n:", n, " 当前bar_index:", bar_index)
plot(n, title="n")
क्षण A का स्क्रीनशॉट

पल बी का स्क्रीनशॉट

हमने केवल इस वाक्य को बदल दिया हैःn := open > close ? n + 1 : nयह देखा जा सकता है कि पहले ग्राफ में, चूंकि उस समय की शुरुआती कीमत बंद कीमत से अधिक थी, इसलिए n ने 1 को जोड़ा, इसलिए ग्राफ वक्र n का मूल्य 5 दिखाया गया था। फिर स्थिति बदल गई, कीमतों को अपडेट किया गया जैसा कि दूसरे ग्राफ में दिखाया गया था। इस समय की शुरुआती कीमत बंद कीमत से कम थी, एन मूल्य वापस चला गया और इसमें कोई अतिरिक्त 1 नहीं था। ग्राफ में वक्र n को तुरंत फिर से तैयार किया गया था, इस समय वक्र पर n 4 था। इसलिए वास्तविक समय बार पर दिखाए गए कांटा, मृत कांटा और अन्य संकेत अनिश्चित हैं, परिवर्तन की संभावना है।
नीचे हम पाइन भाषा फ़ंक्शन में चर का अध्ययन करते हैं। कुछ पाइन ट्यूटोरियल के अनुसार, फ़ंक्शन में चर और फ़ंक्शन के बाहर चर में इस तरह का अंतर हैः
Pine फ़ंक्शन में उपयोग किए जाने वाले श्रृंखला चर का इतिहास फ़ंक्शन के प्रत्येक लगातार कॉल के माध्यम से बनाया जाता है। यदि कोई फ़ंक्शन हर कॉलम पर कॉल नहीं किया जाता है, तो यह फ़ंक्शन के स्थानीय ब्लॉक के भीतर और बाहरी श्रृंखला के इतिहास मानों के बीच अंतर पैदा करेगा। इसलिए, यदि कोई फ़ंक्शन हर कॉलम पर कॉल नहीं किया जाता है, तो फ़ंक्शन के भीतर और बाहरी संदर्भों में समान अनुक्रमण मानों का उपयोग करने वाली श्रृंखलाएं समान इतिहास बिंदुओं का संदर्भ नहीं देंगी।
हम FMZ पर चलने वाले एक परीक्षण कोड के माध्यम से इस समस्या को समझते हैंः
/*backtest
start: 2022-06-03 09:00:00
end: 2022-06-08 15:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
f(a) => a[1]
f2() => close[1]
oneBarInTwo = bar_index % 2 == 0
plotchar(oneBarInTwo ? f(close) : na, title = "f(close)", color = color.red, location = location.absolute, style = shape.xcross, overlay = true, char = "A")
plotchar(oneBarInTwo ? f2() : na, title = "f2()", color = color.green, location = location.absolute, style = shape.circle, overlay = true, char = "B")
plot(close[2], title = "close[2]", color = color.red, overlay = true)
plot(close[1], title = "close[1]", color = color.green, overlay = true)
फ़ोटोशॉप

परीक्षण कोड अपेक्षाकृत सरल है, और मुख्य रूप से डेटा को दो तरीकों से उद्धृत किया जाता है, अर्थात्ःf(a) => a[1]औरf2() => close[1]。
f(a) => a[1]: फ़ंक्शन के अंत में लौटाए जाने वाले पैरामीटर का उपयोग करनाa[1]。
f2() => close[1]सीधे अंतर्निहित चर का उपयोग करें:close, फ़ंक्शन के अंत में लौटाता हैclose[1]。
[]प्रतीक डेटा श्रृंखला चर के ऐतिहासिक मानों के संदर्भ में उपयोग किया जाता है, close[1] यह वर्तमान समापन मूल्य से पहले एक बार पर समापन मूल्य डेटा संदर्भित करता है. हमारे परीक्षण कोड चार्ट पर चार प्रकार के डेटा को चित्रित करता हैः
plotchar(oneBarInTwo ? f(close) : na, title = "f(close)", color = color.red, location = location.absolute, style = shape.xcross, overlay = true, char = "A")
एक अक्षर A, रंग लाल, जब oneBarInTwo सही है, तो चित्रित करें, चित्रित स्थान (वाई-अक्ष पर) हैःf(close)लौटाया गया मान
plotchar(oneBarInTwo ? f2() : na, title = "f2()", color = color.green, location = location.absolute, style = shape.circle, overlay = true, char = "B")
एक वर्ण को B से B तक खींचें, और इसे हरे रंग में रंग दें, और जब oneBarInTwo सही हो, तो इसे खींचें, और इसे Y अक्ष पर खींचेंःf2()लौटाया गया मान
plot(close[2], title = "close[2]", color = color.red, overlay = true)
रेखाएं लाल रंग की हैं और रेखांकित स्थान (वाई-अक्ष पर) है:close[2]यानी वर्तमान बार के पूर्व की संख्या में 2 वें स्थान पर (बाएं की संख्या में 2 वें स्थान पर) बार पर समापन मूल्य।
plot(close[1], title = "close[1]", color = color.green, overlay = true)
रेखाएँ हरे रंग की हैं और रेखांकित स्थान (वाई-अक्ष पर) हैःclose[1]यानी वर्तमान बार के पहले नंबर 1 पर बंद होने की कीमत (बाएं नंबर 1 पर बंद)
रणनीति के माध्यम से चल रहा है अनुवर्ती स्क्रीनशॉट में देखा जा सकता है, हालांकि चित्र A में उपयोग किए गए कार्यों को चिह्नित किया गया हैf(a) => a[1]फ़ंक्शन और चित्र B के लिए उपयोग किया जाता हैf2() => close[1]सभी इस्तेमाल किया[1] डेटा श्रृंखला पर ऐतिहासिक डेटा को संदर्भित करने के लिए, लेकिन चार्ट पर “ए” और “बी” के लिए मार्कर की स्थिति पूरी तरह से अलग है। “ए” मार्कर की स्थिति हमेशा लाल रेखा पर होती है, अर्थात रणनीति में कोडplot(close[2], title = "close[2]", color = color.red, overlay = true)इस तरह की रेखाओं के लिए, डेटा का उपयोग किया जाता हैclose[2]。

कारण यह है कि K लाइन बार के माध्यम से अनुक्रमण है, जो कि अंतर्निहित चर हैbar_indexगणना करें कि क्या “ए” और “बी” चिह्नों को चित्रित किया गया है। “ए” और “बी” चिह्नों को प्रत्येक के-लाइन बार पर चित्रित नहीं किया गया है।f(a) => a[1]इस तरह से संदर्भित मान, यदि फ़ंक्शन हर बार पर नहीं बुलाया जाता है तो फ़ंक्शन के साथ मेल खाता हैf2() => close[1]इस तरह से उद्धरण के लिए अलग-अलग मानों का उपयोग किया जाता है[1] इस तरह के एक ही सूचकांक)
एक सरल उदाहरण के साथ, मैं इसे समझाता हूंः
res = close > close[1] ? ta.barssince(close < close[1]) : -1
plot(res, style = plot.style_histogram, color=res >= 0 ? color.red : color.blue)
हम फ़ंक्शन को कॉल करते हैंta.barssince(close < close[1])एक त्रिभुज ऑपरेटर में लिखाcondition ? value1 : value2और यह केवल भारत में ही हो रहा है।close > close[1]जब हम ta.barssince फ़ंक्शन को कॉल करते हैं।ta.barssinceफ़ंक्शन की गणना की गई हैclose < close[1]स्थापना के समय K पंक्तियों की संख्या. जब ta.barssince फ़ंक्शन को बुलाया जाता है तो close > close होता है[1], यानी वर्तमान समापन मूल्य पिछले Bar के समापन मूल्य से बड़ा है, फ़ंक्शन ta.barssince को बुलाया जाता है जब इसकी शर्त close < close[1] न तो स्थापित किया गया है और न ही हाल ही में स्थापित किया गया है
ta.barssince: जब यह बुलाया जाता है, तो यह फ़ंक्शन na。 को लौटाता है यदि यह स्थिति वर्तमान K लाइन से पहले कभी भी पूरी नहीं हुई है।
जैसा कि चित्र में दिखाया गया है:

इसलिए जब हम चित्र बनाते हैं, तो हम केवल उस डेटा को चित्रित करते हैं जिसके लिए रेस वैरिएबल ((-1)) ।
और हम सिर्फ इस समस्या से बचने के लिएta.barssince(close < close[1])फ़ंक्शन कॉल को त्रिकोणीय ऑपरेटर से निकाला जाता है और इसे किसी भी संभावित सशर्त शाखा के बाहर लिखा जाता है। इसे प्रत्येक के-लाइन बार पर गणना करने के लिए बनाया जाता है।
a = ta.barssince(close < close[1])
res = close > close[1] ? a : -1
plot(res, style = plot.style_histogram, color=res >= 0 ? color.red : color.blue)

समय अनुक्रम की अवधारणा पाइन भाषा में बहुत महत्वपूर्ण है, यह एक अवधारणा है जिसे हमें पाइन भाषा सीखने के लिए समझना होगा। समय अनुक्रम एक प्रकार नहीं है, बल्कि समय के साथ चर के निरंतर मानों को संग्रहीत करने के लिए एक बुनियादी संरचना है। हम जानते हैं कि पाइन स्क्रिप्ट चार्ट पर आधारित है, और चार्ट में प्रदर्शित होने वाली सबसे बुनियादी सामग्री K रेखाचित्र है। समय अनुक्रम जिनमें से प्रत्येक मान एक K लाइन बार की समय सारणी से जुड़ा हुआ है।openएक पेन भाषा का एक अंतर्निहित चर है, जिसका निर्माण प्रत्येक के-लाइन बार के उद्घाटन मूल्य के समय अनुक्रम को संग्रहीत करने के लिए किया जाता है। इसे समझा जा सकता हैopenयह समय-क्रम संरचना वर्तमान K रेखाचित्र के सभी K रेखाचित्रों के उद्घाटन मूल्य को दर्शाता है, जो शुरू होने वाले पहले Bar से वर्तमान स्क्रिप्ट द्वारा निष्पादित Bar तक है। यदि वर्तमान K रेखाचित्र 5 मिनट की अवधि है, तो हम पिन रणनीति कोड में संदर्भित करते हैं (या उपयोग करते हैं)openयदि आप समय-क्रम में ऐतिहासिक मानों को संदर्भित करना चाहते हैं, तो उपयोग करें[]ऑपरेटर जब पिन नीति किसी K-लाइन बार पर निष्पादित होती है, तो इसका उपयोग किया जाता हैopen[1]उद्धरण दिखाएँopenसमय-क्रम पर वर्तमान स्क्रिप्ट द्वारा निष्पादित इस K-लाइन Bar के पिछले K-लाइन Bar के उद्घाटन मूल्य ((यानी पिछले K-लाइन चक्र के उद्घाटन मूल्य) ।
ta.cumउदाहरण के लिएः ta.cum
Cumulative (total) sum of `source`. In other words it's a sum of all elements of `source`.
ta.cum(source) → series float
RETURNS
Total sum series.
ARGUMENTS
source (series int/float)
SEE ALSO
math.sum
परीक्षण कोड:
v1 = 1
v2 = ta.cum(v1)
plot(v1, title="v1")
plot(v2, title="v2")
plot(bar_index+1, title="bar_index")
बहुत कुछta.cumइस तरह के अंतर्निहित फ़ंक्शन समय-क्रम पर डेटा को सीधे संसाधित कर सकते हैं, जैसेta.cumहम एक चार्ट का उपयोग करने के लिए समझने में मदद करने के लिए आगे बढ़ते हैं.
रणनीति चलाने की प्रक्रिया | - | - | - | - | रणनीतियाँ चलती हैं 1 के-लाइन पर. रणनीतियाँ चलती हैं के-लाइन 2 पर. रणनीति चलती है तीसरे K-लाइन पर Bar ⇒ ⇒ 2 ⇒ 1 ⇒ 3 ⇒ |…|…|…|…| रणनीति के लिए चलाता है के N + 1 रूट के लिएBar
जैसा कि आप देख सकते हैं, वास्तव में v1, v2 और यहां तक कि bar_index सभी समय-क्रम संरचनाएं हैं, प्रत्येक बार पर संबंधित डेटा है। इस परीक्षण कोड को “वास्तविक मूल्य मॉडल” या “बंद मूल्य मॉडल” के बीच अंतर केवल यह है कि क्या वास्तविक बार चार्ट पर दिखाई देता है। गति को मापने के लिए हम “बंद मूल्य मॉडल” प्रतिक्रिया परीक्षण का उपयोग करते हैं।

क्योंकि v1 हर बार में 1 है.ta.cum(v1)फ़ंक्शन को पहले K-लाइन Bar पर निष्पादित किया जाता है, क्योंकि केवल पहला Bar है, इसलिए गणना परिणाम 1 है, जो चर v2 को निर्दिष्ट करता है।
जबta.cum(v1)दूसरी K-लाइन Bar पर कार्य करते समय, पहले से ही 2 K-लाइन Bar हैं ((पहली संबंधित अंतर्निहित चर bar_index 0 है, दूसरी संबंधित अंतर्निहित चर bar_index 1) है, इसलिए गणना परिणाम 2 है, चर v2 को मान दिया गया है, और इसी तरह। वास्तव में यह देखा जा सकता है कि v2 चार्ट में K-लाइन Bar की संख्या है, क्योंकि K-लाइन का अनुक्रमणbar_indexतो यह 0 से बढ़ रहा है.bar_index + 1यह वास्तव में K लाइनों की संख्या है.v2औरbar_indexयह सच है।

मैं भी उपयोग कर सकता हूँta.cumइनबिल्ट फ़ंक्शन वर्तमान चार्ट पर सभी बार्स के समापन मूल्य के योग की गणना करता है, तो इसे केवल इस तरह से लिखा जा सकता हैःta.cum(close), जब रणनीति चलाने के लिए सबसे दाईं ओर लाइव बारta.cum(close)प