4
ध्यान केंद्रित करना
1076
समर्थक

FMZ PINE स्क्रिप्ट दस्तावेज़ीकरण

में बनाया: 2022-05-06 14:27:06, को अपडेट: 2025-01-23 10:19:06
comments   18
hits   13760

[TOC]

कीवर्ड, व्याकरण, सेटिंग्स

कोड संरचना

Pine में कोड की सामान्य संरचना इस प्रकार है:

<version>
<declaration_statement>
<code>

टिप्पणी

FMZ के पाइन भाषा समर्थित टिप्पणी चिह्नः एक पंक्ति टिप्पणी//कई पंक्तियाँ/* */उदाहरण के लिए, नीचे दिए गए उदाहरण में टिप्पणी को कैसे लिखा गया है:

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)  // 计算MACD指标

/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')

संस्करण

निम्न प्रकार के कंपाइलर निर्देश कंपाइलर को बताते हैं कि स्क्रिप्ट किस संस्करण में लिखी गई है:

//@version=5

डिफ़ॉल्ट v5 संस्करण, कोड में छोड़ दिया जा सकता है//@version=5

बयान

  • indicator()
  • strategy()

कथन कथन स्क्रिप्ट के प्रकार को निर्धारित करता है, जो यह निर्धारित करता है कि इसमें क्या अनुमति है, और इसे कैसे उपयोग और निष्पादित किया जाए। स्क्रिप्ट के महत्वपूर्ण गुणों को सेट करें, जैसे कि इसका नाम, जब इसे चार्ट में जोड़ा जाता है, तो यह कहां दिखाई देगा, इसके द्वारा प्रदर्शित किए जाने वाले मानों की सटीकता और प्रारूप, और कुछ कार्यों को प्रबंधित करने के लिए इसके संचालन के लिए कुछ मान, जैसे कि यह चार्ट में प्रदर्शित होने वाले अधिकतम आरेख वस्तुओं की संख्या। रणनीतियों के लिए, गुणों में पैरामीटर शामिल होते हैं जिन्हें वापस मापा जाता है, जैसे कि प्रारंभिक पूंजी, कमीशन, स्लाइड, आदि। एफएमजेड के लिए पिन को एक रणनीति कोड में शामिल करने की आवश्यकता नहीं हैindicator()याstrategy()बयान में कहा गयाः

कोड

स्क्रिप्ट में टिप्पणी या कंपाइलर निर्देशों की पंक्तियाँ नहीं हैं, जो कथन हैं, जो स्क्रिप्ट के एल्गोरिदम को लागू करते हैं। एक कथन इनमें से एक हो सकता है।

  • चर घोषणाएँ
  • चर को पुनः प्राप्त करना
  • फ़ंक्शन घोषणाएँ
  • अंतर्निहित फ़ंक्शन कॉल, उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन कॉल
  • ifforwhileयाswitchइकाइयों

वाक्यों को कई तरीकों से व्यवस्थित किया जा सकता है

  • कुछ वाक्यों को एक पंक्ति में व्यक्त किया जा सकता है, जैसे कि अधिकांश चर घोषणाओं में केवल एक पंक्ति होती है जिसमें फ़ंक्शन कॉल किया जाता है या एक पंक्ति फ़ंक्शन घोषणाएँ होती हैं। अन्य, संरचनाओं की तरह, हमेशा कई पंक्तियों की आवश्यकता होती है, क्योंकि उन्हें एक स्थानीय ब्लॉक की आवश्यकता होती है।
  • स्क्रिप्ट के वैश्विक स्तर पर बयानों (यानी जो भाग स्थानीय ब्लॉक से संबंधित नहीं हैं) को इस प्रकार नहीं समझा जा सकता है空格या制表符(टैब कुंजी) शुरू. उनके पहले अक्षर भी इस पंक्ति के पहले अक्षर होना चाहिए. पंक्तियों में पंक्ति के पहले स्थान पर शुरू पंक्तियों, परिभाषा के अनुसार स्क्रिप्ट के वैश्विक दायरे का हिस्सा बनने के लिए.
  • संरचना या बहु-पंक्ति फ़ंक्शन कथन हमेशा एक की आवश्यकता होती हैlocal block。 एक स्थानीय ब्लॉक को एक तालिका चिह्न या चार रिक्त स्थानों में स्केल करना होगा (अन्यथा, इसे पिछले पंक्ति के सीरियल कोड के रूप में पार्स किया जाएगा, यानी इसे पिछले पंक्ति के कोड के निरंतरता के रूप में माना जाएगा), प्रत्येक स्थानीय ब्लॉक एक अलग स्थानीय सीमा को परिभाषित करता है 。
  • एक पंक्ति में कई एक पंक्ति के वाक्य को एक पंक्ति में क्रमबद्ध किया जा सकता है, जिसमें एक विराम चिह्न के रूप में (() का उपयोग किया जाता है।
  • एक पंक्ति में टिप्पणी हो सकती है या केवल टिप्पणी हो सकती है।
  • पंक्तियों को एक साथ लपेटा जा सकता है (बहु पंक्तियों में जारी रखें) ।

उदाहरण के लिए, तीन स्थानीय ब्लॉकों को शामिल करें, एक कस्टम फ़ंक्शन घोषणा में और दो चर घोषणाओं में if संरचना का उपयोग करते हुए, निम्न कोड के साथः

indicator("", "", true)             // 声明语句(全局范围),可以省略不写

barIsUp() =>                        // 函数声明(全局范围)
    close > open                    // 本地块(本地范围)

plotColor = if barIsUp()            // 变量声明 (全局范围)
    color.green                     // 本地块 (本地范围)
else
    color.red                       // 本地块 (本地范围)

runtime.log("color", color = plotColor)  // 调用一个内置函数输出日志 (全局范围)

कोड बदलें

लंबी पंक्तियों को कई पंक्तियों में विभाजित किया जा सकता है, या उन्हें “पैक” किया जा सकता है। लपेटी गई पंक्तियों को किसी भी संख्या में रिक्त स्थान में संकुचित किया जाना चाहिए, जब तक कि यह 4 का गुणक न हो (इन सीमाओं को स्थानीय ब्लॉक में संकुचित करने के लिए उपयोग किया जाता है) ।

a = open + high + low + close

इसे पैक किया जा सकता है (ध्यान दें कि प्रत्येक पंक्ति में संकुचित रिक्त स्थान की संख्या 4 के गुणक नहीं है):

a = open +
      high +
          low +
             close

एक लंबा प्लॉट ((() कॉल पैक किया जा सकता है।

close1 = request.security(syminfo.tickerid, "D", close)      // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close)    // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100),                       // 一行长的plot()调用可以被包装
   color = color.new(color.purple, 40),
   style = plot.style_area,
   trackprice = true)

उपयोगकर्ता-परिभाषित फ़ंक्शन कथन में एक कथन को भी पैक किया जा सकता है। हालांकि, चूंकि स्थानीय ब्लॉक को वाक्यविन्यास में एक संकोचन के साथ शुरू करना होगा ((4 रिक्त स्थान या 1 मेमोरी), जब इसे अगली पंक्ति में विभाजित किया जाता है, तो कथन का निरंतर भाग एक या अधिक संकोचन के साथ शुरू होना चाहिए ((जो 4 रिक्त स्थान के गुणक के बराबर नहीं है) । जैसेः

test(c, o) =>
    ret = c > o ?
       (c > o+5000 ? 
          1 :
              0):
       (c < o-5000 ? 
          -1 : 
              0)

a = test(close, open)
plot(a, title="a")

कालक्रम

समय अनुक्रम एक डेटा प्रकार या प्रारूप नहीं है, समय अनुक्रम एक मूलभूत संरचनात्मक अवधारणा है PINE भाषा में। इसका उपयोग समय के साथ लगातार बदलते मानों को संग्रहीत करने के लिए किया जाता है, प्रत्येक मान एक समय बिंदु से मेल खाता है। समय अनुक्रम की इस अवधारणा की संरचना समय के साथ बदलते डेटा की एक श्रृंखला को संभालने और रिकॉर्ड करने के लिए उपयुक्त है। अंतर्निहित चरopenउदाहरण के लिएopenएक अंतर्निहित चर प्रत्येक K लाइन BAR के लिए एक मूल्य रिकॉर्ड करता है, यदि यहopen5 मिनट के लिए K-लाइन चक्र की जानकारी है. तो यह हैopenचर में दर्ज किया गया है कि हर 5 मिनट K लाइन BAR ((स्तंभ) के लिए स्टार्टअप की कीमत है.openउदाहरण के लिए, यदि हम एक समय-क्रम में पिछले मान को संदर्भित करते हैं, तो हम K लाइन BAR के उद्घाटन मूल्य को संदर्भित करते हैं।[]इतिहास संचालक, जब नीति किसी K लाइन BAR पर निष्पादित होती है,open[1]इसका मतलब है कि वर्तमान K लाइन BAR के पिछले K लाइन BAR के उद्घाटन मूल्य को संदर्भित करना।

हालांकिकालक्रमपिन भाषा में arrays के प्रकार भी होते हैं, लेकिन ये और समय अनुक्रम पूरी तरह से अलग अवधारणाएं हैं।

PINE भाषा इस तरह से समय अनुक्रम को डिजाइन करती है, जो कि नीति कोड में आसानी से समापन मूल्य के संचयी मानों की गणना कर सकती है, और इसके लिए for जैसे पुनरावर्ती संरचना का उपयोग करने की आवश्यकता नहीं है, केवल PINE भाषा के अंतर्निहित कार्यों का उपयोग करेंta.cum(close)एक और उदाहरण के लिए, हमें अंतिम 14 K लाइनों BAR की गणना करने की आवश्यकता है (अर्थात, कोड निष्पादन के समय वर्तमान समय के लिए निकटतम 14 K लाइनें BAR) के उच्चतम मूल्य और निम्नतम मूल्य के बीच का अंतर औसत के रूप में लिखा जा सकता हैःta.sma(high - low, 14)

फ़ंक्शन को समय-क्रम पर कॉल करने के परिणाम भी समय-क्रम पर निशान छोड़ते हैं।[]उदाहरण के लिए, यह परीक्षण करें कि क्या वर्तमान K-लाइन BAR का समापन मूल्य अंतिम 10 K-लाइन BAR में सबसे अधिक मूल्य के अधिकतम मूल्य से अधिक है। (वर्तमान K-लाइन BAR को छोड़कर)breach = close > ta.highest(close, 10)[1]यह भी लिखा जा सकता है,breach = close > ta.highest(close[1], 10)तोta.highest(close, 10)[1]औरta.highest(close[1], 10)यह समान है।

इस कोड का उपयोग करके सत्यापित करेंः

strategy("test pine", "test", true) 

a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)

plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)

उपरोक्त परीक्षण कोड a और b को प्रत्येक BAR पर उनके समवर्ती समय अनुक्रमों पर आउटपुट करता है, और यह देखा जा सकता है कि a और b के मान हमेशा समान होते हैं, इसलिए ये दो प्रतिनिधित्व विधियां समकक्ष होती हैं।

इतिहास-संदर्भ

ट्रेडिंग व्यू में ऐतिहासिक डेटा के संदर्भ के लिए अधिकतम लेखों की संख्या की सीमा है (अधिकतम 5000 लेख), उदाहरण के लिए निम्न कोडः

//@version=6
indicator("test")

ema = ta.ema(close, 10000)      // 报错:Error on bar 0: The 'ema'->'sum' function references too many historical candles (10000), the limit is 5000.
plot(ema, "ema")

// pre10000 = ema[10000]        // 报错:Invalid number of bars back specified in the history-referencing operator. It accepts a value between 0 and 5000.
// plot(pre10000, "pre10000")

एफएमजेड पर पाइन भाषा नीति का उपयोग करें पाइन भाषा ट्रेडिंग क्लासरूम में “ट्रेडिंग सेटिंग्स”, पैरामीटरः “परिवर्तकों की सबसे लंबी अवधि की संख्या” विशेष रूप से संदर्भ योग्य डेटा की अधिकतम संख्या निर्धारित करता है।

FMZ PINE स्क्रिप्ट दस्तावेज़ीकरण

indicator("test")

ema = ta.ema(close, 1000)  // ema = ta.ema(close, 3000) 则报错:Invalid number 3000 of bars back specified in the history-referencing operator. It accepts a value between 0 and 2000.
plot(ema, "ema")

पैरामीटर “परिवर्तकों की सबसे लंबी अवधि की संख्या” को बहुत बड़ा नहीं होना चाहिए, उपयुक्त नीति में डेटा संदर्भ की सीमा हो सकती है।

पाइन भाषा विनिमय वर्ग पुस्तकालय मॉड्यूल पैरामीटर

PINE नीति के अंतर्निहित टेम्पलेट “Pine भाषा लेनदेन कक्षाओं” के लिए पैरामीटर सेट करने का निर्देश

FMZ PINE स्क्रिप्ट दस्तावेज़ीकरण

ट्रेडिंग सेटिंग्स

  • कार्यान्वयन समापन मूल्य मॉडलः वर्तमान BAR समाप्त होने पर मॉडल निष्पादित करें, और जब निचला BAR शुरू होता है तो ट्रेडों को निष्पादित करें वास्तविक समय मूल्य मॉडलः हर बार जब कीमत बदलती है, तो मॉडल निष्पादित किया जाता है, और व्यापार को तुरंत निष्पादित करने के लिए संकेत दिया जाता है।
  • डिफ़ॉल्ट स्थिति संख्याः यदि ट्रेडिंग निर्देश ट्रेडिंग की संख्या निर्दिष्ट नहीं करता है, तो ट्रेडों को उस सेटिंग के अनुसार निष्पादित करें।
  • अधिकतम एक बार के व्यापार के तहत आदेश की मात्राः वास्तविक लिफाफे के आधार पर, इस पैरामीटर की सेटिंग के साथ, प्रत्येक आदेश की अधिकतम मात्रा निर्धारित करें, जिससे लिफाफे को झटका न लगे।
  • स्लाइड अंकः के आधार पर定价货币精度पैरामीटर और यह पैरामीटर ऑर्डर के समय स्लिप मूल्य निर्धारित करता है। उदाहरण के लिए, मूल्य निर्धारण मुद्रा परिशुद्धता 2 पर सेट की गई है, यानी, एक छोटी संख्या के दूसरे स्थान पर सटीक, 0.01 तक सटीक। तो स्लिप अंक संख्या में से प्रत्येक अंक मूल्य निर्धारण इकाइयों का प्रतिनिधित्व करता है। इस समय स्लिप अंक संख्या 5 पर सेट की गई है, और ऑर्डर के समय स्लिप मूल्य 0.05 है। (स्लिप मूल्य ऑर्डर के समय स्लिप मूल्य का हिस्सा है जो ऑर्डर के लिए बेहतर है और ऑर्डर को बंद करने के लिए किया जाता है) ।
  • चर के सबसे लंबे चक्रों की संख्याः K रेखा BAR की संख्या जो आरेख को प्रभावित करती है, औरjavascriptरणनीति में बुलावाSetMaxBarLenफ़ंक्शन एक ही है.

वायदा विकल्प

  • नस्ल कोडः अनुबंध कोड, केवल तब सेट करने की आवश्यकता होती है जब एक्सचेंज ऑब्जेक्ट नॉन-नॉक एक्सचेंज ऑब्जेक्ट होता है।
  • अनुबंधों की न्यूनतम संख्याः आदेश देने के समय अनुबंधों की न्यूनतम मात्रा।

वास्तविक विकल्प

  • स्वतः बहाल प्रगतिः पिछली रणनीति के रुकने से पहले की स्थिति को स्वचालित रूप से बहाल करना।
  • आदेश पुनः प्रयासों की संख्याः यदि कोई आदेश निष्पादित नहीं होता है, तो आदेश को रद्द कर दिया जाता है और व्यापार की कोशिश करने के लिए फिर से आदेश दिया जाता है। यह पैरामीटर अधिकतम पुनः प्रयासों को सीमित करने के लिए उपयोग किया जाता है।
  • नेटवर्क पूछताछ अंतराल ((मिलीसेकंड): केवल REST प्रोटोकॉल के लिए मान्य, नेटवर्क अनुरोध अंतराल को नियंत्रित करें, अनुरोधों को बहुत बार से बचें, एक्सचेंज की सीमा से परे।
  • खाता सिंक समय ((सेकंड): खाता डेटा सिंक करने के लिए समय अवधि।
  • पोजीशन खोलने के बाद पोजीशन सिंक करने का समय (मिलीसेकंड): केवल कुछ एक्सचेंजों के डेटा में देरी के कारण बार-बार पोजीशन खोलने के लिए, सिंक समय को बड़ा सेट करने से ऐसी समस्याओं को कम किया जा सकता है।
  • लीवर गुणांकः लीवर गुणांक सेट करें

नकद लेन-देन, अन्य सेटिंग्स

  • एकमुश्त लेन-देन की मात्राः डिफ़ॉल्ट एकमुश्त लेन-देन की मात्रा, केवल नकदी के लिए मान्य।
  • न्यूनतम लेनदेनः न्यूनतम लेनदेन की मात्रा।
  • मूल्य निर्धारण मुद्रा की सटीकता: मूल्य की सटीकता, जो कीमत के छोटे अंकों की संख्या है।
  • लेन-देन की सटीकताः निम्न आदेश की सटीकता, अर्थात् निम्न आदेश की छोटी संख्याएँ।
  • प्रसंस्करण शुल्कः इस सेटिंग के आधार पर कुछ आंकड़ों के लिए गणना की जाती है, 0.002 का अर्थ है 2 हज़ारवां।
  • घाटे के आंकड़ों का अंतरालः घाटे के आंकड़ों का उपयोग केवल रीयल-डिस्क पर प्रदर्शित किया जाता है।
  • विफलता पुनः प्रयास (मिलीसेकंड): नेटवर्क अनुरोध विफल होने पर पुनः प्रयास अंतराल।
  • एजेंट का उपयोग करेंः केवल REST प्रोटोकॉल के लिए मान्य।
  • छिपाएँ सामान्य नेटवर्क त्रुटियाँः लॉग क्षेत्र में छिपाएँ सामान्य त्रुटियाँ लॉग।
  • स्विच आधार पता: केवल REST प्रोटोकॉल के लिए मान्य
  • सूचनाओं को भेजने के लिएः संदेशों को मेलबॉक्स में भेजने के लिए।

एक आदेश दें

पोजीशन बनाना

strategy(title = "open long example", pyramiding = 3)                                // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10))       // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000)                          // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓

बराबरी

strategy(title = "close long example", pyramiding = 2)                              // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%")   // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%")   // 平仓,指定平掉分组标签为long2的仓位的80%持仓

लेनदेन तंत्र

PINE भाषा का पोजीशन रखने का तंत्र एकतरफा पोजीशन रखने के समान है। उदाहरण के लिए, जब पोजीशन रखने के लिए कई दिशाएं होती हैं, तो यदि कोई ऑर्डर बेचने के लिए होता है, तो ऑर्डर निष्पादन को ट्रिगर किया जाता है।

योजना पत्र

आदेश आदेश निर्देश का उपयोग करते समय, यदि कोई मूल्य निर्दिष्ट नहीं किया जाता है, तो बाजार मूल्य सूची को डिफ़ॉल्ट रूप से माना जाता है। बाजार मूल्य सूची के अलावा योजना सूची के माध्यम से भी आदेश दिया जा सकता है, योजना सूची तुरंत आदेश को संचालित नहीं करेगी। योजना सूची को योजना के लिए नियुक्त किया जा सकता है जो ट्रिगर होने पर कोई प्रक्रिया नहीं है।फिक्स्ड डिस्क/पुनरावलोकनसमय की स्थिति की जानकारी (यानी रणनीति चलाने के समय की स्थिति तालिका) के “योजनाबद्ध आदेश” फ़ॉर्म में देखा गया है। सिस्टम वास्तव में केवल तभी ऑर्डर करेगा जब बाजार वास्तविक समय की कीमतों को पूरा करता है। इसलिए इन आदेशों को लेनदेन की कीमतों में मामूली विचलन के रूप में सामान्य माना जाता है।strategy.entryफ़ंक्शन के आदेश के लिए, हम निर्दिष्ट कर सकते हैंlimitstopपैरामीटर

var isTrade = false 
if not barstate.ishistory and not isTrade
    isTrade := true 
    strategy.entry("test 1", strategy.long, 0.1, stop=close*1.3, comment="test 1 order")                     // stop
    strategy.entry("test 2", strategy.long, 0.2, limit=close*0.7, comment="test 2 order")                    // limit
    strategy.entry("test 3", strategy.short, 0.3, stop=close*0.6, limit=close*1.4, comment="test 3 order")   // stop-limit    
  • सीमा आदेश

ऑर्डर की सीमा निर्धारित करें जब ऑर्डर खरीद के लिए हैdirectionपैरामीटर हैंstrategy.long), ऑर्डर तभी ट्रिगर होता है जब बाजार की वर्तमान कीमत उस कीमत से कम हो। जब ऑर्डर बिक्री सूची के लिए होता हैdirectionपैरामीटर हैंstrategy.short), ऑर्डर तभी ट्रिगर होता है जब बाजार की वर्तमान कीमत उस कीमत से अधिक होती है।

  • आदेश बंद करो

ऑर्डर के लिए एक स्टॉप-लॉस मूल्य सेट करें, जब ऑर्डर खरीद के लिए होता है, तो ऑर्डर तभी ट्रिगर होता है जब बाजार की वर्तमान कीमत उस कीमत से अधिक होती है। जब कोई ऑर्डर बिक्री के लिए होता है, तो ऑर्डर तभी ट्रिगर होता है जब बाजार की वर्तमान कीमत उस कीमत से कम हो।

  • रोक-सीमा आदेश

एक साथ सेट किया जा सकता हैlimitstopपैरामीटर, ऑर्डर सबसे पहले प्रासंगिक कीमत पर ट्रिगर किया जाता है

अधिकार का प्रतिशत

//@version=5
strategy("Percent of Equity Order", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)  

// 简单的均线交叉策略
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))  

// 如果均线交叉条件满足,则买入或卖出
if (longCondition)
    strategy.entry("Long", strategy.long)  

if (shortCondition)
    strategy.entry("Short", strategy.short)
  

निर्दिष्ट करेंdefault_qty_type=strategy.percent_of_equityबाद में, सेटिंगdefault_qty_valueएक प्रतिशत संख्या के रूप में ((0 ~ 100), 1 1% है। खाते में मूल्य निर्धारण मुद्राओं की संख्या के आधार पर आदेश की गणना की गई है। उदाहरण के लिएः वर्तमान खाते में 10000 USDT है, 1% आदेश सेट करें, यानी 100 USDT के पैमाने पर आदेश का उपयोग करें ((बिक्री के समय वर्तमान मूल्य के आधार पर गणना की गई) ।

घोषणा, तार्किक संरचना

var

var कीवर्ड को आवंटित करने और एक बार में शुरू करने के लिए उपयोग किया जाता है। आम तौर पर, कीवर्ड var को शामिल किए बिना चर-मूल्य निर्धारण सिंटैक्स के परिणामस्वरूप डेटा अपडेट होने पर चर के मूल्य को कवर किया जाता है। इसके विपरीत, जब कीवर्ड var का उपयोग किया जाता है, तो वे डेटा अपडेट होने के बावजूद चर को आवंटित करते हैं। वे अभी भी अपनी स्थिति को बनाए रख सकते हैं और इसे केवल तभी बदल सकते हैं जब वे if-expressions में शर्तों को पूरा करते हैं।

var variable_name = expression

व्याख्या:

  • variable_name- Pine Script में अनुमत उपयोगकर्ता चर का कोई भी नाम ((, जो लैटिन अक्षरों, संख्याओं और रेखांकन को शामिल कर सकता है, जो अपरकेस और लोअरकेस हैं))_), लेकिन संख्या के साथ शुरू नहीं किया जा सकता)
  • expression- किसी भी अंकगणितीय अभिव्यक्ति, जैसे कि एक नियमित चर को परिभाषित करना। अभिव्यक्ति की गणना करें और इसे एक बार चर को आवंटित करें।

उदाहरण

// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
    var x = close
    b := x
    green_bars_count := green_bars_count + 1
    if green_bars_count >= 10
        var y = close
        c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")

चर ‘a’ श्रृंखला में प्रत्येक स्तंभ के पहले स्तंभ के समापन मूल्य को बनाए रखता है। चर ‘b’ श्रृंखला में पहले नीलमणि नीलमणि मूल्य पट्टी के समापन मूल्य को बनाए रखता है। चर ‘c’ श्रृंखला में दसवें स्ट्राबेरी के समापन मूल्य को बनाए रखता है।

एफएमजेड पर, यह वास्तविक समय मूल्य मॉडल, समापन मूल्य मॉडल, औरvarvaripहम निम्नलिखित कोड का उपयोग करके घोषित चर का परीक्षण करते हैं:

strategy("test pine", "test 1", true) 

// 测试 var varip
var i = 0
varip ii = 0

// 将策略逻辑每轮改变的i、ii打印在图上
plotchar(true, title="ii", char=str.tostring(ii), location=location.abovebar, color=color.red)
plotchar(true, title="i", char=str.tostring(i), location=location.belowbar, color=color.green)

// 每轮逻辑执行都给i、ii递增1
if true
    i := i + 1
    ii := ii + 1
  • वास्तविक समय मूल्य मॉडल उपरोक्त परीक्षण कोड को निष्पादित करते समय दो चरणों में विभाजित किया गया हैः 1. ऐतिहासिक K-लाइन चरण 2. वास्तविक K-लाइन चरण 3. जब वास्तविक समय मूल्य मॉडल, ऐतिहासिक K-लाइन चरणvarvaripकथन के चर i, ii, नीति कोड के प्रत्येक दौर के निष्पादन पर वृद्धिशील कार्रवाई करते हैं क्योंकिif trueतो यह निश्चित रूप से लागू करने के लिए इसी शर्त कोड ब्लॉक) तो यह देखा जा सकता है कि परिणाम K लाइन BAR पर प्रदर्शित संख्याओं में से प्रत्येक 1 की वृद्धि होती है जब ऐतिहासिक K लाइन चरण समाप्त हो जाता है, तो वास्तविक समय K लाइन चरण शुरू होता है varvaripघोषणाओं के चर अलग-अलग बदलते हैं। क्योंकि यह वास्तविक समय मूल्य मॉडल है, एक K-लाइन BAR के भीतर प्रत्येक मूल्य परिवर्तन के लिए रणनीति कोड को एक बार निष्पादित किया जाता है,i := i + 1औरii := ii + 1सभी को एक बार निष्पादित किया जाता है। अंतर यह है कि ii हर बार संशोधित किया जाता है। हालांकि i हर बार संशोधित होता है, लेकिन अगले दौर के निष्पादन के लिए रणनीति तर्क पिछले मूल्य को पुनर्स्थापित करता है, जब तक कि वर्तमान K लाइन BAR समाप्त नहीं हो जाता है, i का मूल्य निर्धारित करने के लिए अद्यतन किया जाता है (यानी, अगले दौर के निष्पादन के लिए रणनीति तर्क पहले मूल्य को पुनर्स्थापित नहीं करता है) । इसलिए आप देख सकते हैं कि चर i अभी भी हर बार बढ़ता है। लेकिन चर ii हर बार कई बार बढ़ता है।

  • समापन मूल्य मॉडल चूंकि समापन मूल्य मॉडल एक रणनीति तर्क को निष्पादित करता है जब प्रत्येक K लाइन BAR समाप्त हो जाता है। इसलिए समापन मूल्य मॉडल में, ऐतिहासिक K लाइन चरण और वास्तविक समय K लाइन चरण,varvaripघोषित किए गए चर के उदाहरणों में वृद्धि पूरी तरह से समान है, प्रत्येक K लाइन पर BAR वृद्धि 1 है।

varip

varip ((var intrabar persist) एक कीवर्ड है जिसका उपयोग आवंटन और एक बार में आरंभ करने वाले चरों के लिए किया जाता है। यह var कीवर्ड के समान है, लेकिन varip कथन का उपयोग करने वाले चर वास्तविक समय के-लाइन अपडेट के बीच अपने मानों को बरकरार रखते हैं।

varip variable_name = expression

व्याख्या:

  • variable_name- किसी भी उपयोगकर्ता चर का नाम जिसे पाइन स्क्रिप्ट में अनुमति दी गई है, जिसमें कैपिटल और लोअरकेस लैटिन अक्षर, संख्या और रेखांकन शामिल हो सकते हैं।_), लेकिन संख्या के साथ शुरू नहीं किया जा सकता)
  • expression- किसी भी अंकगणितीय अभिव्यक्ति, जैसा कि एक नियमित चर को परिभाषित करते समय होता है। पहली K रेखा पर, अभिव्यक्ति को केवल एक बार गणना की जाती है और इसे एक बार चर को आवंटित किया जाता है।

उदाहरण

// varip
varip int v = -1
v := v + 1
plot(v)

var का उपयोग करते समय, नक्शा bar_index का मान लौटाता है। varp का उपयोग करते समय, ऐतिहासिक K लाइन पर एक ही व्यवहार होता है, लेकिन वास्तविक समय K लाइन पर, यह एक मान लौटाता है, जो प्रत्येक टिक के लिए एक बढ़ता है।

टिप्पणी केवल साधारण प्रकारों के साथ प्रयोग किया जा सकता है, जैसे float, int, bool, string, और इन प्रकारों के सरणियों के साथ।

true

एक Boolean चर के मान को इंगित करने के लिए, या जब अभिव्यक्ति का उपयोग किया जाता हैतुलना करेंयातर्कऑपरेटर के रूप में गणना की जा सकती है

टिप्पणी यह भी देखेंतुलना करेंऑपरेटरतर्कऑपरेटर का वर्णन

और देखें bool

false

एक बुल प्रकार के चर के मान, और तुलनात्मक और तार्किक संचालन के परिणामों को दर्शाता है।

टिप्पणी यह भी देखेंतुलना करेंऑपरेटरतर्कऑपरेटर का वर्णन

और देखें bool

if

यदि कथन कथन को परिभाषित करता है जिसे अभिव्यक्ति की शर्तों को पूरा करने के लिए निष्पादित किया जाना चाहिए। पाइन स्क्रिप्टिंग भाषा के संस्करण 4 में आपको else if सिंटैक्स का उपयोग करने की अनुमति है।

सामान्य कोडः

var_declarationX = if condition
    var_decl_then0
    var_decl_then1
    ...
    var_decl_thenN
    return_expression_then
else if [optional block]
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else
else
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else

टिप्पणी var_declarationX- यह चर if कथन का मान प्राप्त करता है condition- यदि शर्त सही है, तो वाक्यविन्यास का उपयोग करेंthenतर्क मेंvar_decl_then0var_decl_then1यदि शर्त false है, तो वाक्य खंड का उपयोग करेंelse ifयाelseतर्क मेंvar_decl_else0var_decl_else1आदि) । return_expression_then , return_expression_else- मॉड्यूल में अंतिम अभिव्यक्ति या ब्लॉक else से अभिव्यक्ति कथन का अंतिम मान लौटाएगा। यदि चर की घोषणा अंत में है, तो इसका मूल्य परिणाम मान होगा।

if कथन के लिए लौटाए गए मान का प्रकार इस पर निर्भर करता हैreturn_expression_thenऔरreturn_expression_elseप्रकार 。 ट्रेडिंग व्यू पर चलने पर, उनके प्रकारों को मिलान करना होगा: जब आप else ब्लॉक में एक स्ट्रिंग मान रखते हैं, तो फिर कथन ब्लॉक से एक पूर्णांक मान वापस करना असंभव है 。 एफएमजेड पर चलने पर, निम्नलिखित उदाहरण त्रुटि मुक्त है, जब y मान “खुला” होता है, तो प्लॉट ग्राफिंग के लिए n/a होता है 。

उदाहरण

// This code compiles
x = if close > open
    close
else
    open  

// This code doesn’t compile by trading view
// y = if close > open
//     close
// else
//     "open"
plot(x)

छोड़ सकते हैंelseब्लॉक इस स्थिति में, यदि शर्त false है, तो var_declarationX को एक empty थ्रेसहोल्ड दिया जाता है (na, false या ):

उदाहरण

// if
x = if close > open
    close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)

then, else if, else के ब्लॉक को चार रिक्त स्थानों में स्थानांतरित किया जाता हैः

उदाहरण

// if
x = if open > close
    5
else if high > low
    close
else
    open
plot(x)

अनदेखा कर सकते हैंifकथन का परिणाम मान ((var_declarationX= को छोड़ दिया जा सकता है) । यह उपयोगी हो सकता है यदि आपको एक्सप्रेशन के साइड इफेक्ट की आवश्यकता है, उदाहरण के लिए रणनीतिक ट्रेडिंग मेंः

उदाहरण

if (ta.crossover(high, low))
    strategy.entry("BBandLE", strategy.long, stop=low)
else
    strategy.cancel(id="BBandLE")

यदि कथन एक दूसरे को शामिल कर सकते हैं:

उदाहरण

// if
float x = na
if close > open
    if close > close[1]
        x := close
    else
        x := close[1]
else
    x := open
plot(x)

for

‘for’ संरचना कई वाक्यों को बार-बार निष्पादित करने की अनुमति देती हैः

[var_declaration =] for counter = from_num to to_num [by step_num]
    statements | continue | break
    return_expression

var_declaration- एक वैकल्पिक चर कथन, जिसे return_expression के मान के रूप में सौंपा जाएगा। counter- एक चर जो रिवर्स काउंटर मान को संग्रहीत करता है, जो रिवर्स के प्रत्येक पुनरावृत्ति में 1 या step_num मान को बढ़ाता / घटाता है। from_num- काउंटर का प्रारंभिक मान int/float thresholds/expressions का उपयोग करने की अनुमति है to_num- काउंटर का अंतिम मान. loop को तब बंद कर दिया जाता है जब काउंटर to_num से बड़