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

लेखक:छोटे सपने, बनाया गयाः 2022-05-06 14:27:06, अद्यतन किया गयाः 2024-02-23 15:36:48

[TOC]

खोजशब्द, वाक्यविन्यास, सेटअप विवरण

कोड संरचना

पाइन में कोड का सामान्य संरचना का पालन करेंः

<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()

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

कोड

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

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

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

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

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

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")

समयक्रम

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

हालांकिसमयक्रमयह "सरणी" के रूप में डेटा संरचनाओं के बारे में सोचने के लिए आसान है, हालांकि पिन भाषा में भी सरणी प्रकार हैं; लेकिन वे समय अनुक्रम से पूरी तरह से अलग अवधारणाएं हैं।

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)

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

पाइन भाषा लेन-देन क्लासरूम टेम्पलेट पैरामीटर

पाइन नीति के लिए निर्मित टेम्पलेट "पाइन भाषा लेन-देन पुस्तकालय" के लिए पैरामीटर सेटिंग निर्देश।

लेन-देन सेटअप

  • निष्पादन समापन मूल्य मॉडलः वर्तमान बार समाप्त होने के बाद ही मॉडल निष्पादित किया जाता है और नीचे के मूल बार के शुरू होने पर ही लेनदेन निष्पादित किया जाता है। वास्तविक समय मूल्य मॉडलः प्रत्येक मूल्य परिवर्तन के साथ मॉडल निष्पादित होता है, और संकेत तुरंत लेनदेन निष्पादित करने के लिए होते हैं।
  • डिफ़ॉल्ट ट्रेड संख्याः यदि ट्रेडिंग निर्देश में ट्रेड संख्या निर्दिष्ट नहीं है, तो ट्रेडों को उस सेटिंग के अनुसार निष्पादित किया जाता है।
  • अधिकतम एकमुश्त ऑर्डर मात्राः वास्तविक डिब्बे के आधार पर, इस पैरामीटर सेटिंग के साथ संयोजन में, प्रत्येक ऑर्डर के लिए अधिकतम संख्या निर्धारित करें, ताकि डिब्बे के प्रभाव से बचा जा सके।
  • स्लाइडिंग मूल्य बिंदुओं की संख्याः定价货币精度पैरामीटर और यह पैरामीटर ऑर्डर के समय स्लाइड मूल्य निर्धारित करता है; उदाहरण के लिए, मूल्य निर्धारण मुद्रा सटीकता सेट 2 है, अर्थात्, दूसरे स्थान पर घन बिंदु तक सटीक, 0.01 तक सटीक; तो स्लाइड मूल्य बिंदु प्रत्येक बिंदु का प्रतिनिधित्व करता है 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पैरामीटर, ऑर्डर पहले मूल्य पर ट्रिगर किया जाता है जो शर्तों को पूरा करता है।

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

विर

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

var variable_name = expression

स्पष्टीकरणः

  • variable_name- पाइन स्क्रिप्ट में अनुमति प्राप्त उपयोगकर्ता चर का कोई भी नाम ((लाटिन अक्षरों, संख्याओं और रेखांकनों को बड़े और छोटे अक्षरों में शामिल कर सकता है, लेकिन संख्याओं से शुरू नहीं हो सकता है)) ।
  • 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 कणों ने श्रृंखला में पहले कणों की हरी कणों की कीमतों के बंद होने की कीमतों को बरकरार रखा। परिवर्तनीय एसी एसी ने श्रृंखला में दसवें एसी ग्रीन एसी के समापन मूल्य को बरकरार रखा।

एफएमजेड पर, इसे वास्तविक समय मूल्य मॉडल, समापन मूल्य मॉडल और वास्तविक समय मूल्य मॉडल के रूप में विभाजित किया गया है।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
  • वास्तविक समय मूल्य मॉडल उपरोक्त परीक्षण कोड को निष्पादन के समय दो चरणों में विभाजित किया गया हैः १, ऐतिहासिक के-लाइन चरण; २, वास्तविक समय के-लाइन चरण; जब वास्तविक समय मूल्य मॉडल, ऐतिहासिक के-लाइन चरण,varvaripघोषणा किए गए चर i, ii को नीति कोड के प्रत्येक चरण के निष्पादन के दौरान वृद्धिशील ऑपरेशन किया जाता है क्योंकिif trueतो निश्चित रूप से निष्पादित करने के लिए संबंधित शर्त कोड ब्लॉक) । इसलिए आप देख सकते हैं कि पुनरावृत्ति के परिणाम K लाइन BAR पर दिखाए गए संख्याओं में से प्रत्येक में 1 की वृद्धि होती है । जब ऐतिहासिक K लाइन चरण समाप्त होता है, तो वास्तविक समय K लाइन चरण शुरू होता है ।varvaripयह एक वास्तविक समय मूल्य मॉडल है, क्योंकि एक K-लाइन BAR में प्रत्येक मूल्य परिवर्तन के लिए एक बार रणनीति कोड निष्पादित किया जाता है।i := i + 1औरii := ii + 1यह भिन्नता यह है कि ii हर बार संशोधित होता है. i हालांकि प्रत्येक बार संशोधित होता है, लेकिन नीति लॉजिक के अगले चरण के निष्पादन के दौरान पिछले मूल्य को बहाल कर देता है, जब तक कि वर्तमान K लाइन BAR समाप्त न हो जाए।

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

विविधता

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

varip variable_name = expression

स्पष्टीकरणः

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

उदाहरण

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

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

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

सच

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

नोट्सकृपया देखेंतुलनाऑपरेटर औरतर्कऑपरेटर का वर्णन ।

अलविदा bool

झूठी

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

नोट्सकृपया देखेंतुलनाऑपरेटर औरतर्कऑपरेटर का वर्णन ।

अलविदा bool

यदि

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

यदि कथन का लौटाया गया मान के प्रकार पर निर्भर करता हैreturn_expression_thenऔरreturn_expression_elseप्रकार. ट्रेडिंग व्यू पर चलने पर, उनके प्रकारों का मिलान होना चाहिएः जब आपके पासelse ब्लॉक में एक स्ट्रिंग मान होता है, तो then कथन ब्लॉक से एक पूर्णांक मान वापस करना असंभव होता है. FMZ पर चलने पर, निम्नलिखित उदाहरण त्रुटि नहीं देते हैं, जब y मान "open" लिया जाता है, तो प्लॉट ग्राफ में 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 threshold ((na、false या ) आवंटित किया जाता हैः

उदाहरण

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

आप कई else if ब्लॉक का उपयोग कर सकते हैं या बिल्कुल भी उपयोग नहीं कर सकते हैं. then , else if , else if के ब्लॉक को चार रिक्त स्थानों में स्थानांतरित किया जाता हैः

उदाहरण

// 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' स्ट्रक्चर कई कथन को दोहराने की अनुमति देता हैः

[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- काउंटर का आरंभिक मान.to_num- काउंटर का अंतिम मान; जब काउंटर to_num से बड़ा होता है ((या from_num > to_num के मामले में to_num से छोटा होता है) तो लूप टूट जाता है; hsseries int/float thresholds/expressions का उपयोग करने की अनुमति है, लेकिन वे केवल लूप के पहले पुनरावृत्ति पर मूल्यांकन करते हैं।step_num- काउंटर का वृद्धि / घटाव. यह वैकल्पिक है. डिफ़ॉल्ट मान +1 या -1 है, जो कि from_num या to_num में से सबसे बड़ा है. जब मान का उपयोग किया जाता है, तो काउंटर भी from_num या to_num में से सबसे बड़ा के आधार पर वृद्धि / घटाव करता है, इसलिए step_num का +/- प्रतीक वैकल्पिक है.statements | continue | break- किसी भी संख्या में वाक्यांश, या 4 रिक्त स्थान या एक टैब तक संकुचित करने के लिए एक निरंतर या ब्रेक टैब कुंजी शब्द।return_expression- लूप का रिटर्न मान, यदि मौजूद हो, तो var_declaration में दिए गए चर को दिया जाता है। यदि लूप को "continue" या "break" कीवर्ड के कारण छोड़ दिया जाता है, तो लूप का रिटर्न मान उस अंतिम चर का रिटर्न मान है जिसे लूप से बाहर निकलने से पहले आवंटित किया गया था।continue- केवल एक कुंजी शब्द का उपयोग करने के लिए वापस लौटाया जा सकता है. इस कारण के लिए अगली बार फिर से दोहराया जा सकता है।break- वापस सर्कल से बाहर निकलने के लिए कुंजी शब्द ।

उदाहरण

// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
    int result = 0
    for i = 1 to lookback
        if close[i] > close
            result += 1
    result
plot(qtyOfHigherCloses(14))

अलविदा for...in while

के लिए... में

for...inसंरचनाएँ सरणी के प्रत्येक तत्व के लिए कई कथन दोहराने की अनुमति देती हैं। यह किसी भी पैरामीटर के साथ इस्तेमाल किया जा सकता हैःarray_element, या दो पैरामीटर के साथ प्रयोग किया जा सकता हैः[index, array_element]दूसरा रूप लूप के कामकाज को प्रभावित नहीं करता है। यह तत्व समूह के पहले चर में वर्तमान पुनरावृत्ति के सूचकांक को ट्रैक करता है।

[var_declaration =] for array_element in array_id
    statements | continue | break
    return_expression

[var_declaration =] for [index, array_element] in array_id
    statements | continue | break
    return_expression

var_declaration- एक वैकल्पिक चर घोषणा, जो लूप के लिए दिया जाएगाreturn_expressionका मान है।index- वर्तमान पुनरावर्ती सूचकांक के लिए एक वैकल्पिक चर को ट्रैक करें. सूचकांक 0 से शुरू होता है. चर लूप में अपरिवर्तनीय है. जब इसका उपयोग किया जाता है, तो इसे एक में शामिल किया जाना चाहिए.array_elementइस तरह के एक समूह में।array_element- प्रत्येक निरंतर सरणी तत्व के चर को शामिल करता है जिसे चक्र में संसाधित किया जाना है। यह चर चक्र में अपरिवर्तनीय है।array_id- घुमावदार पुनरावृत्ति के साथ सरणी आईडी।statements | continue | break- किसी भी संख्या में वाक्यांश, या 4 रिक्त स्थान या एक टैब तक संकुचित करने के लिए एक निरंतर या ब्रेक टैब कुंजी शब्द।return_expression- लूप का रिटर्न मान आवंटित किया गया हैvar_declarationयदि कोई लूप के भीतर का चर है, यदि यह मौजूद है. यदि लूप के बाहर निकलने का कारण "continue" या "break" कीवर्ड है, तो लूप का लौटाया गया मान उस चर का है जिसे लूप से बाहर निकलने से पहले अंतिम रूप दिया गया है.continue- केवल एक कुंजी शब्द का उपयोग करने के लिए वापस लौटाया जा सकता है. इस कारण के लिए अगली बार फिर से दोहराया जा सकता है।break- वापस सर्कल से बाहर निकलने के लिए कुंजी शब्द ।

लूप के दौरान सरणी के तत्वों या उनके आकार को संशोधित करने की अनुमति देता है। यहाँ हम उपयोग करते हैंfor...inएक सिंगल पैरामीटर के रूप में, यह निर्धारित किया जाता है कि प्रत्येक K लाइन पर कितने K लाइनों का OHLC SMA है, जो कि kclose threshold से बड़ा हैः

उदाहरण

// Here we determine on each bar how many of the bar's OHLC values are greater than the SMA of 'close' values
float[] ohlcValues = array.from(open, high, low, close)
qtyGreaterThan(value, array) =>
    int result = 0
    for currentElement in array
        if currentElement > value
            result += 1
        result
plot(qtyGreaterThan(ta.sma(close, 20), ohlcValues))

यहाँ, हम दो पैरामीटर के रूप में इस्तेमाल किया है for...in हमारेisPosसमवर्ती मान सेट किया गया हैtrueजब वे हमारे पास होते हैं,valuesArrayअंकगणित में समकक्ष मान सही समय पर हैः

उदाहरण

// for...in
var valuesArray = array.from(4, -8, 11, 78, -16, 34, 7, 99, 0, 55)
var isPos = array.new_bool(10, false)  

for [index, value] in valuesArray
    if value > 0
        array.set(isPos, index, true)  

if barstate.islastconfirmedhistory
    runtime.log(str.tostring(isPos))

अलविदा for while array.sum array.min array.max

जबकि

whileकथन स्थानीय कोड ब्लॉक की शर्तों को दोहराने की अनुमति देता है।

variable_declaration = while boolean_expression
    ...
    continue
    ...
    break
    ...
    return_expression

स्पष्टीकरणःvariable_declaration- वैकल्पिक चर घोषणाएं ।return expressionइस चर के लिए एक आरंभिक मान प्रदान किया जा सकता है.boolean_expression- यदि सच है, तो निष्पादित करेंwhileवाक्य का स्थानीय ब्लॉक. यदि गलत है, तोwhileवाक्य के बाद स्क्रिप्ट को निष्पादित करना जारी रखें।continue - continueएक कुंजी शब्द अगले पुनरावृत्ति के लिए एक पुनरावर्ती शाखा का कारण बनता है।break - breakकुंजी शब्द लूप को समाप्त कर देता है.whileयह वाक्य के बाद फिर से शुरू होता है।return_expression- उपलब्ध करायाwhileवाक्य का वैकल्पिक मान लौटता है ।

उदाहरण

// This is a simple example of calculating a factorial using a while loop.
int i_n = input.int(10, "Factorial Size", minval=0)
int counter   = i_n
int factorial = 1
while counter > 0
    factorial := factorial * counter
    counter   := counter - 1

plot(factorial)

नोट्सआरंभिकwhileपंक्तियों के बाद स्थानीय कोड ब्लॉक को चार रिक्त स्थान या एक टाइमर के रूप में संकुचित किया जाना चाहिए।whileचक्र,whileबाद के बुल अभिव्यक्ति को अंततः गलत होना चाहिए या निष्पादित होना चाहिएbreak

स्विच करना

स्विच ऑपरेटर शर्तों और अभिव्यक्ति के मानों के आधार पर नियंत्रण को कुछ कथनों में से एक में स्थानांतरित करता है।

[variable_declaration = ] switch expression
    value1 => local_block
    value2 => local_block
    ...
    => default_local_block

[variable_declaration = ] switch
    boolean_expression1 => local_block
    boolean_expression2 => local_block
    ...
    => default_local_block

एक अभिव्यक्ति के साथ स्विचः

उदाहरण

// Switch using an expression

string i_maType = input.string("EMA", "MA type", options = ["EMA", "SMA", "RMA", "WMA"])

float ma = switch i_maType
    "EMA" => ta.ema(close, 10)
    "SMA" => ta.sma(close, 10)
    "RMA" => ta.rma(close, 10)
    // Default used when the three first cases do not match.
    => ta.wma(close, 10)

plot(ma)

बिना अभिव्यक्ति वाले स्विचः

उदाहरण

strategy("Switch without an expression", overlay = true)

bool longCondition  = ta.crossover( ta.sma(close, 14), ta.sma(close, 28))
bool shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))

switch
    longCondition  => strategy.entry("Long ID", strategy.long)
    shortCondition => strategy.entry("Short ID", strategy.short)

लौटाता हैनिष्पादित स्थानीय वाक्य खंड में अंतिम अभिव्यक्ति का मान।

नोट्सकेवल निष्पादित करेंlocal_blockउदाहरण याdefault_local_blockएक है।default_local_blockकेवल=>चिह्न एक साथ पेश किए जाते हैं, और केवल तभी निष्पादित किए जाते हैं जब पिछले ब्लॉक को निष्पादित नहीं किया जाता है; यदिswitchकथन का परिणाम एक चर को सौंपा गया है और निर्दिष्ट नहीं किया गया हैdefault_local_blockयदि यह नहीं किया जाता हैlocal_blockयह वाक्य वापस आ जाता हैna◎ होगाswitchजब हम किसी variable को statement का result assign करते है, तो सभी variable को statement का result assign करते है.local_blockउदाहरण को एक ही प्रकार का मान लौटा देना चाहिए.

अलविदा if ?:

सीरीज

series एक कीवर्ड है जो डेटा श्रृंखला प्रकार को दर्शाता है।seriesयह अक्सर एक अनावश्यक खोजशब्द होता है।

ऑपरेटर

=

चर को असाइन करने के लिए प्रयोग किया जाता है, लेकिन केवल जब चर घोषित किया जाता है (पहली बार उपयोग किया जाता है) ।

:=

वैल्यूएशन ऑपरेटर, जो बायीं ओर के चर को वैल्यूएशन देता है. इसे पहले घोषित किए गए चर के लिए प्रयोग किया जाता है.

!=

नहीं है । किसी भी प्रकार के अभिव्यक्ति के लिए लागू होता है ।

expr1 != expr2

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

%

मॉड्यूल ((पूर्णांक शेष संख्याएँ) ⇒ संख्यात्मक अभिव्यक्ति के लिए प्रयोग किया जाता है ⇒

expr1 % expr2

लौटाता हैपूर्णांक या फ्लोटिंग मान, या मानों की एक श्रृंखला।

नोट्सपाइन स्क्रिप्ट में, पूर्णांक के शेष की गणना करते समय, व्यापारी को काट दिया जाता है; यानी, इसका चौथाई से पांचवां सबसे कम पूर्ण मूल्य तक काट दिया जाता है; प्राप्त मूल्य में लाभांश के समान प्रतीक होते हैं।

उदाहरण: -1 % 9 = -1 - 9 * truncate ((-1/9) = -1 - 9 * truncate ((-0.111) = -1 - 9 * 0 = -1.

%=

मॉड्यूल निर्दिष्ट करना↑ संख्यात्मक अभिव्यक्ति के लिए उपयुक्त है↑

expr1 %= expr2

उदाहरण

// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)

लौटाता हैपूर्णांक या फ्लोटिंग मान, या मानों की एक श्रृंखला।

*

गुणन । यह संख्यात्मक अभिव्यक्ति के लिए है ।

expr1 * expr2

लौटाता हैपूर्णांक या फ्लोटिंग मान, या मानों की एक श्रृंखला।

*=

गुणन निर्दिष्ट करना↑ संख्यात्मक अभिव्यक्ति के लिए लागू है↑

expr1 *= expr2

उदाहरण

// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)

लौटाता हैपूर्णांक या फ्लोटिंग मान, या मानों की एक श्रृंखला।

+

जोड़ा या एकमुश्त वास्तविक संख्याएँ.

expr1 + expr2
+ expr

लौटाता हैस्ट्रिंग का द्विआधारीकरण+एक्सप्रेस 1 और एक्सप्रेस 2 का संयोजन लौटाता है संख्याएँ पूर्णांक या फ्लोटिंग बिंदु मान, या मानों की एक श्रृंखला लौटाती हैंः द्विआधारी क्लोन + 'expr1 + expr2 वापस आता है. एक यूनीट + एक यूनीट एक्सप्रेस देता है ((एक यूनीट ऑपरेटर के सममिति के लिए कुछ भी नहीं जोड़ता है) ।) ।

नोट्सआप संख्याओं के साथ अंकगणितीय ऑपरेटरों का उपयोग कर सकते हैं और साथ ही चरों की संख्याएँ भी कर सकते हैं। संख्याओं की संख्याओं का उपयोग करने के मामले में, ऑपरेटरों को तत्वों पर लागू किया जाता है।

+=

संकेतकों को जोड़ें.

expr1 += expr2

उदाहरण

// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)

लौटाता हैस्ट्रिंग के लिए, एक्सप्रेस1 और एक्सप्रेस2 की श्रृंखला लौटाता है. संख्याओं के लिए, पूर्णांक या फ्लोटिंग बिंदु मान, या मानों की एक श्रृंखला लौटाता है.

नोट्सआप संख्याओं के साथ अंकगणितीय ऑपरेटरों का उपयोग कर सकते हैं और साथ ही चरों की संख्याएँ भी कर सकते हैं। संख्याओं की संख्याओं का उपयोग करने के मामले में, ऑपरेटरों को तत्वों पर लागू किया जाता है।

-

घटाव विधि या एकात्मक ऋणात्मक संख्या.

expr1 - expr2
- expr

लौटाता हैपूर्णांक या फ्लोटिंग बिंदु मान, या मानों की एक श्रृंखला लौटाता हैः द्विआधारी क्लोन + 'expr1 घटाकर expr2 देता है. एक युआन-Expr का नकारात्मक शब्द वापस करता है.

नोट्सआप संख्याओं के साथ अंकगणितीय ऑपरेटरों का उपयोग कर सकते हैं और साथ ही चरों की संख्याएँ भी कर सकते हैं। संख्याओं की संख्याओं का उपयोग करने के मामले में, ऑपरेटरों को तत्वों पर लागू किया जाता है।

-=

घटाव विधि निर्दिष्ट करना.

expr1 -= expr2

उदाहरण

// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)

लौटाता हैपूर्णांक या फ्लोटिंग मान, या मानों की एक श्रृंखला।

/

अपवादों में से एक है ।

expr1 / expr2

लौटाता हैपूर्णांक या फ्लोटिंग मान, या मानों की एक श्रृंखला।

/=

अपवाद निर्दिष्ट करना. संख्यात्मक अभिव्यक्ति के लिए लागू करना.

expr1 /= expr2

उदाहरण

// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)

लौटाता हैपूर्णांक या फ्लोटिंग मान, या मानों की एक श्रृंखला।

<

से छोटा । संख्यात्मक अभिव्यक्ति के लिए लागू ।

expr1 < expr2

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

<=

से कम या बराबर है । संख्यात्मक अभिव्यक्ति के लिए लागू होता है ।

expr1 <= expr2

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

==

यह किसी भी प्रकार के अभिव्यक्ति के लिए लागू होता है।

expr1 == expr2

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

=>

'=>' ऑपरेटर उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन घोषणाओं औरswitchयह एक बहुत ही दिलचस्प लेख है।

फ़ंक्शन की घोषणा का वाक्यविन्यास हैः

<identifier>([<parameter_name>[=<default_value>]], ...) =>
    <local_block>
    <function_result>

एक<local_block>शून्य या अधिक पाइन वाक्यांश हैं।<function_result>एक चर, एक अभिव्यक्ति या एक तत्व है।

उदाहरण

// single-line function
f1(x, y) => x + y
// multi-line function
f2(x, y) => 
    sum = x + y
    sumChange = ta.change(sum, 10)
    // Function automatically returns the last expression used in it
plot(f1(30, 8) + f2(1, 3))

नोट्सआप यूजर मैनुअल में उपयोगकर्ता परिभाषित फ़ंक्शन के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

>

अधिक से अधिक । संख्यात्मक अभिव्यक्ति के लिए लागू होता है ।

expr1 > expr2

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

>=

से बड़ा या बराबर है.

expr1 >= expr2

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

?:

त्रिमूली शर्त ऑपरेटर ।

expr1 ? expr2 : expr3

उदाहरण

// Draw circles at the bars where open crosses close
s2 = ta.cross(open, close) ? math.avg(open,close) : na
plot(s2, style=plot.style_circles, linewidth=2, color=color.red)  

// Combination of ?: operators for 'switch'-like logic
c = timeframe.isintraday ? color.red : timeframe.isdaily ? color.green : timeframe.isweekly ? color.blue : color.gray
plot(hl2, color=c)

लौटाता हैयदि एक्सप्रेस 1 का मूल्यांकन true किया जाता है, तो एक्सप्रेस 2 का मूल्यांकन किया जाता है, अन्यथा एक्सप्रेस 3 का मूल्यांकन किया जाता है। शून्य मान ((0 और NaN+, Infinity,-Infinity) गलत माना जाता है, अन्य सभी मान true हैं।

नोट्सयदि आपको इसकी आवश्यकता नहीं है, तो कृपया na को else शाखा के रूप में उपयोग करें. आप दो या अधिक का उपयोग कर सकते हैंः ऑपरेटरों को जोड़ने के लिए, एक वाक्य को लागू करने के लिए, जो कि स्विच बटन के समान है ((उपरोक्त उदाहरण देखें) ।) । आप संख्याओं के साथ अंकगणितीय ऑपरेटरों का उपयोग कर सकते हैं और साथ ही चरों की संख्याएँ भी कर सकते हैं। संख्याओं की संख्याओं का उपयोग करने के मामले में, ऑपरेटरों को तत्वों पर लागू किया जाता है।

अलविदा na

[]

श्रृंखला उपशीर्षक──expr1 श्रृंखला के पिछले मानों तक पहुँच प्रदान करता है─expr2 पिछले k पंक्तियों की संख्या है, जो संख्या होनी चाहिए─फ्लोटिंग को नीचे की ओर मोड़ दिया जाएगा─

expr1[expr2]

उदाहरण

// [] can be used to "save" variable value between bars
a = 0.0 // declare `a`
a := a[1] // immediately set current value to the same as previous. `na` in the beginning of history
if high == low // if some condition - change `a` value to another
    a := low
plot(a)

लौटाता हैएक संख्यात्मक श्रृंखला।

अलविदा math.floor

और

तर्क AND↑ बुल अभिव्यक्ति के लिए लागू होता है↑

expr1 and expr2

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

या

तर्क OR↑ बुल अभिव्यक्ति के लिए लागू होता है↑

expr1 or expr2

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

नहीं

तार्किक उल्टा (NOT) ।

not expr1

लौटाता हैबुल मान, या बुल मानों की एक श्रृंखला।

डेटा प्रकार कीवर्ड

बोल

"Bool" प्रकार के कीवर्ड जो एक स्पष्ट रूप से घोषित चर या पैरामीटर के लिए उपयोग किए जाते हैं. "Bool" चर का मान true, false या na हो सकता है.

उदाहरण

// bool
bool b = true    // Same as `b = true`
b := na
plot(b ? open : close)

नोट्सप्रकार के बारे में स्पष्ट रूप से उल्लेख करना वैकल्पिक है, जब तक कि यह na के साथ आरंभ न हो; प्रकार प्रणाली के उपयोगकर्ता पुस्तिका पृष्ठ पर पाइन प्रकार के बारे में अधिक जानकारी प्राप्त करें।

अलविदा var varip int float color string true false

इंट

int ((पूर्णांक) प्रकार के कुंजीशब्दों का उपयोग स्पष्ट रूप से एक चर या पैरामीटर घोषित करने के लिए किया जाता है।

उदाहरण

// int
int i = 14    // Same as `i = 14`
i := na
plot(i)

नोट्सप्रकार के बारे में स्पष्ट रूप से उल्लेख करना वैकल्पिक है, जब तक कि यह na के साथ आरंभ न हो; प्रकार प्रणाली के उपयोगकर्ता पुस्तिका पृष्ठ पर पाइन प्रकार के बारे में अधिक जानकारी प्राप्त करें।

अलविदा var varip float bool color string

तैरना

फ्लोट (फ्लोट) प्रकार के कीवर्ड जो स्पष्ट रूप से एक चर या पैरामीटर घोषित करते हैं।

उदाहरण

// float
float f = 3.14    // Same as `f = 3.14`
f := na
plot(f)

नोट्सकिसी प्रकार का स्पष्ट रूप से उल्लेख करना वैकल्पिक है, जब तक कि यह na के साथ आरंभ न हो।

अलविदा var varip int bool color string

स्ट्रिंग

"string" प्रकार के कुंजीशब्दों का उपयोग स्पष्ट रूप से एक चर या पैरामीटर घोषित करने के लिए किया जाता है.

उदाहरण

// string
string s = "Hello World!"    // Same as `s = "Hello world!"`
// string s = na // same as "" 
plot(na, title=s)

नोट्सप्रकार के बारे में स्पष्ट रूप से उल्लेख करना वैकल्पिक है, जब तक कि यह na के साथ आरंभ न हो; प्रकार प्रणाली के उपयोगकर्ता पुस्तिका पृष्ठ पर पाइन प्रकार के बारे में अधिक जानकारी प्राप्त करें।

अलविदा var varip int float bool str.tostring str.format

रंग

"color" प्रकार के लिए उपयोग किया जाने वाला कीवर्ड जो स्पष्ट रूप से चर या पैरामीटर घोषित करता है.

उदाहरण

// color
color textColor = color.green
if barstate.islastconfirmedhistory
    runtime.log("test", textcolor = textColor)

नोट्सरंग अक्षरों का निम्न प्रारूप हैः #RRGGBB या #RRGGBBAA;; अक्षरों का प्रतिनिधित्व 00 से FF तक के सोलह अंकों के लिए किया जाता है (दस अंकों के 0 से 255) जिसमें RR, GG और BB रंगों के लाल, हरे और नीले घटकों के मान हैं;; AA रंग पारदर्शिता (या अल्फा घटकों) के लिए एक वैकल्पिक मान है, जिसमें 00 अदृश्य है, FF अपारदर्शी है;; जब AA नहीं दिया जाता है, तो FF का उपयोग किया जाता है;; सोलह अंकों का उपयोग बड़े या छोटे अक्षरों में किया जा सकता है;; प्रकार के बारे में स्पष्ट रूप से उल्लेख करना वैकल्पिक है, जब तक कि यह na के साथ आरंभ न हो; प्रकार प्रणाली के उपयोगकर्ता पुस्तिका पृष्ठ पर पाइन प्रकार के बारे में अधिक जानकारी प्राप्त करें।

अलविदा var varip int float string color.rgb color.new

सरणी

चर या पैरामीटर को स्पष्ट रूप से घोषित करने के लिए उपयोग किए जाने वाले सरणी सरणी के प्रकार के लिए कुंजीशब्द; इस्तेमाल किया जा सकता हैarray.new<type>,array.fromफ़ंक्शन सरणी ऑब्जेक्ट (या आईडी) बनाता है।

उदाहरण

// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))

नोट्ससरणी के ऑब्जेक्ट हमेशा सरणी के सरणी के रूप में होते हैं।

अलविदा var array.new array.from

अंतर्निहित फ़ंक्शन

फ़ंक्शन को कॉल करते समय पैरामीटर पास करना, पैरामीटर नाम असाइनमेंट निर्दिष्ट करना, संबंधित पैरामीटर स्थान पर सीधे चर को पास करना, और मिश्रित उपयोग का समर्थन करना संभव है; उदाहरण के लिएः

plot(close, title="test plot")     // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"

पैरामीटर नाम असाइनमेंट को निर्दिष्ट करने के बाद, चर को सीधे पैरामीटर के रूप में नहीं भेजा जा सकता है, इसके बाद के पैरामीटर को पैरामीटर नाम असाइनमेंट के रूप में लिखा जाना चाहिए।

// plot(close, title="test", color.red)    // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red)             // 正确写法

समय-सीमा

समय सीमा.सेकंड में

और इसेtimeframeपैरामीटर के समय चक्र को सेकंड में परिवर्तित किया जाता है।

timeframe.in_seconds(timeframe)

उदाहरण

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

लौटाता है timeframeके एक पंक्ति में सेकंडों की संख्या के लिए int का प्रतिनिधित्व करता है।

पैरामीटर

  • timeframe(simple string) समय अवधि↑ वैकल्पिक↑ डिफ़ॉल्ट मान timeframe.period↑ है

नोट्सके लिएtimeframe>= 1M फ़ंक्शन एक महीने में 30.4167 (365/12) दिनों के आधार पर सेकंड की गणना करता है।

अलविदा input.timeframe timeframe.period

टिक्कर

ticker.heikinashi

एक कोड आइडेंटिफायर बनाने के लिए एक सरलीकृत औसत K-लाइन मान का अनुरोध करें।

ticker.heikinashi(symbol)

उदाहरण

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

लौटाता है 股票代码的字符串值,可以提供给request.security函数。

पैरामीटर

  • symbol(simple string) वस्तु कोड पहचानकर्ता.

अलविदा syminfo.tickerid syminfo.ticker request.security

अनुरोध

request.data

बाहरी डेटा का अनुरोध करें।

request.data(url, attribute)

उदाहरण

/*backtest
start: 2022-01-26 09:00:00
end: 2024-02-01 15:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

// 图表地址https://www.datadata.cn/queries/a10ea45c-1674-48ef-b414-cc17a7e4a548
var chart_data = "https://www.datadata.cn/api/v1/query/a10ea45c-1674-48ef-b414-cc17a7e4a548/data"
add_investor = request.data(chart_data, "$.add_investor")
idx_price = request.data(chart_data, "$.close_price")

plot(add_investor, "股市新增人口")
plot(idx_price, "股指价格")
// 反指交易
avg_investor = ta.ema(add_investor[1], 30)
if strategy.position_size == 0
    if add_investor > avg_investor*1.1
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Short", strategy.short)
    else if add_investor < avg_investor*0.9
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Long", strategy.long)

लौटाता हैपैरामीटरattributeनिर्दिष्ट डेटा श्रृंखला।

पैरामीटर

  • url(simple string) अनुरोधित डेटा स्रोत url, डेटा स्रोत का उत्तर देने के लिए डेटा प्रारूप की आवश्यकता होती है (कम से कम time、data गुण शामिल करें):{"data": [], "schema": ["time", "data"]}◎ उदाहरण में डेटा प्रारूप का संदर्भ लेंः
    {
        "data": [
            [1430438400000, "2015年04月", "{\"add_investor\" : 497.53, \"close_price\" : 4441.655}"],
            [1433116800000, "2015年05月", "{\"add_investor\" : 415.87, \"close_price\" : 4611.744}"]
            // ...
        ],
        "schema": ["time", "date", "data"]
    }  
    
  • attribute(simple string) विशेषता का नाम निर्दिष्ट करता है और वांछित डेटा देता है; उदाहरण के लिएः"$.add_investor", उपयोग$.उपसर्ग के रूप में, गुण नाम अनुरोधित डेटा स्रोत पर उत्तर दिए गए डेटा में डेटा फ़ील्ड में गुणों के साथ मेल खाते हैं

request.security

एक अलग किस्म / रिज़ॉल्यूशन की आवश्यकता है।

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

उदाहरण

s = request.security(syminfo.tickerid, "D", close)   // 1 Day
plot(s)

expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)

// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)

लौटाता हैअनुरोध श्रृंखला

पैरामीटर

  • symbol(simple string) माल कोड।
  • timeframe(simple string) समय अवधि. खाली स्ट्रिंग को चार्ट के वर्तमान समय अवधि के रूप में व्याख्या की जाएगी.
  • expression(series int/float/bool/color) को request.security से कॉल किया जा सकता है और एक अभिव्यक्ति लौटाई जा सकती है. यह एक सरणी हो सकती है या एक तत्व समूह हो सकता है जिसमें तत्व हो सकते हैं जिन्हें सरणी में परिवर्तित किया जा सकता है.
  • gaps(barmerge_gaps) अनुरोधित डेटा को जोड़ने की नीति ((डेटा को स्वचालित रूप से ओएचएलसी डेटा के मुख्य सेट के साथ जोड़ने की आवश्यकता है) । संभावित मानः barmerge.gaps_on, barmerge.gaps_off。 barmerge.gaps_on - अनुरोधित डेटा को संभावित अंतरों के साथ जोड़ने के लिए ((na मान) । barmerge.gaps_off - अनुरोधित डेटा को लगातार बिना रुके जोड़ा जाता है, सभी अंतराल हाल के मौजूदा मानों से पहले भरे जाते हैं。 डिफ़ॉल्ट मान है barmerge.gaps_off。
  • lookahead(barmerge_lookahead) अनुरोधित डेटा को जोड़ने की नीति देता है; संभावित मानः barmerge.lookahead_on, barmerge.lookahead_off; संस्करण 3 के बाद से, डिफ़ॉल्ट मान है barmerge.lookahead_off; ध्यान दें कि व्यवहार वास्तविक समय के समान है, केवल इतिहास में अलग है;
  • ignore_invalid_symbol(const bool) एक वैकल्पिक पैरामीटर. यदि निर्दिष्ट वस्तु नहीं मिली है, तो फ़ंक्शन के व्यवहार को निर्धारित करेंः यदि गलत है, तो स्क्रिप्ट रुक जाएगी और रन पर गलत लौटेगी; यदि सही है, तो फ़ंक्शन na लौटेगा और निष्पादन जारी रखेगा. डिफ़ॉल्ट मान गलत है.
  • currency(simple string) वस्तु के मुद्रा-संबंधित मानों (जैसे OHLC) को परिवर्तित करता है; फिर परिवर्तित मूल्य के आधार पर एक्सप्रेशन कणों की गणना करता है; उपयोग की जाने वाली रूपांतरण दरें FX_IDC जोड़ी के लिए पिछले दिन की दैनिक विनिमय दरों (जैसे कि गणना की जाने वाली K-लाइन के सापेक्ष) पर आधारित होती हैं; वैकल्पिक; डिफ़ॉल्ट मान syminfo.currency है; संभावित मानः एक ISO 4217 प्रारूपित मुद्रा कोड (जैसे कि कण USD कण) के साथ एक तीन-अक्षर स्ट्रिंग या currency।* नामस्थान में एक निरंतर, जैसे currency.USD।

नोट्सइस सुविधा का उपयोग करके पाइनस्क्रिप्ट कोड इतिहास और वास्तविक समय डेटा के लिए अलग-अलग गणना कर सकता है।यदि आप अनुरोधित वस्तुओं के लिए अतिरिक्त पैरामीटर निर्दिष्ट करना चाहते हैं, जैसे कि लेनदेन का समय या समायोजन प्रकार, तो आप अपने अनुरोध के लिए अतिरिक्त पैरामीटर निर्दिष्ट कर सकते हैं।您可以使用ticker.new() फ़ंक्शन। इस फ़ंक्शन को एक बिंदु अंतर पास करने के लिए टिक्कर टिक्कर चर का उपयोग करना असंभव है. आप टिक्कर का उपयोग कर सकते हैं।ticker.newअलंकार चर या स्टॉक कोड के लिए स्ट्रिंग प्रतिनिधित्व का रूप, जैसे अलंकार AAPL + MSFT * TSLA अलंकार;वर्तमान में, एक स्क्रिप्ट में अधिकतम 40 request.security कॉल हो सकते हैं। कृपया ध्यान दें कि इस चर/फंक्शन का उपयोग करने से संकेतक को फिर से तैयार किया जा सकता है। रिज़ॉल्यूशन पैरामीटर के लिए अनुमति दी गई मानः 1S, 5S, 15S, 30S - सेकंड का अंतराल (चार्ट चक्र अनुरोधित चक्र से कम या बराबर होना चाहिए) 1 से 1440 मिनट तक 1D से 365D तक 1W से 52W तक कुछ सप्ताह 1M से 12M तक कुछ महीनों में

अलविदा syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

अगरsourceस्ट्रिंग शामिल हैstrयदि कोई उप-स्ट्रिंग है, तो यह true या false लौटाता है.

str.contains(source, str)

उदाहरण

// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

लौटाता हैअगरsourceस्ट्रिंग में पायाstr, तो यह सच है, अन्यथा यह गलत है.

पैरामीटर

  • source(series string) स्रोत स्ट्रिंग
  • str(series string) खोज करने के लिए उप-स्ट्रिंग।

अलविदा str.pos str.match

str.endswith

अगरsourceस्ट्रिंग कोstrमें निर्दिष्ट सबस्ट्रिंग के अंत में, true लौटाता है, अन्यथा false लौटाता है.

str.endswith(source, str)

लौटाता हैअगरsourceस्ट्रिंग कोstrइसमें निर्दिष्ट सबस्ट्रिंग का अंत true है, अन्यथा false है.

पैरामीटर

  • source(series string) स्रोत स्ट्रिंग
  • str(series string) खोज करने के लिए उप-स्ट्रिंग।

अलविदा str.startswith

str.startswith

अगरsourceस्ट्रिंग कोstrमें निर्दिष्ट सबस्ट्रिंग का प्रारंभ, true लौटाता है, अन्यथा false लौटाता है.

str.startswith(source, str)

लौटाता हैअगरsourceस्ट्रिंग कोstrमें निर्दिष्ट सबस्ट्रिंग का प्रारंभ true है, अन्यथा false है.

पैरामीटर

  • source(series string) स्रोत स्ट्रिंग
  • str(series string) खोज करने के लिए उप-स्ट्रिंग।

अलविदा str.endswith

str.substring

एक नई स्ट्रिंग लौटाता है, यह हैsourceस्ट्रिंग का उप-स्ट्रिंग.begin_posनिर्दिष्ट सूचकांक में वर्ण से शुरू होता है और विस्तार करता हैsourceस्ट्रिंग के end_pos - 1.

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

उदाहरण

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

लौटाता हैस्रोत स्ट्रिंग से निकाले गए उप-स्ट्रिंग।

पैरामीटर

  • source(series string) स्रोत स्ट्रिंग को उप-स्ट्रिंग से निकालें.
  • begin_pos(series int) निकाली गई उप-स्ट्रिंग का आरंभिक स्थान है. यह अनन्य है (( निकाली गई उप-स्ट्रिंग में उस स्थान के वर्ण शामिल हैं) ।)
  • end_pos(series int) समाप्ति स्थान. यह अनन्य है. निकाले गए स्ट्रिंग में उस स्थान के वर्ण शामिल नहीं हैं. यह वैकल्पिक है.sourceस्ट्रिंग की लंबाई ।

नोट्सस्ट्रिंग सूचकांक 0 से शुरू होता है.begin_posके बराबर हैend_pos, फ़ंक्शन एक खाली स्ट्रिंग देता है.

अलविदा str.contains str.pos str.match

str.tonumber

str.tonumber(string)

लौटाता हैयदि कोई वैध संख्या है, तो यह स्ट्रिंग का फ्लोटिंग टाइप है, अन्यथा यह na है।

पैरामीटर

  • string(series string) int या float के लिए स्ट्रिंग अभिव्यक्ति का रूप।

str.format

स्वरूपण स्ट्रिंग और मानों को स्वरूपण स्ट्रिंग में परिवर्तित करें. स्वरूपण स्ट्रिंग में पाठ पाठ और प्रत्येक स्वरूपित मान के लिए एक स्थानान्तरण शामिल हो सकता है। प्रत्येक स्थानान्तरण में एक सूचकांक शामिल होता है जो इसके आवश्यक पैरामीटर को बदल देगा ((0 से शुरू होता है), और एक वैकल्पिक स्वरूपण विवरणक। सूचकांक पैरामीटर को str.format पैरामीटर सूची में स्थान देता है।

str.format(formatString, arg0, arg1, ...)

उदाहरण

// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)

// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)

// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)

// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)

// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)

// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)

// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)

लौटाता हैप्रारूपित स्ट्रिंग।

पैरामीटर

  • formatString(series string) प्रारूपित स्ट्रिंग।
  • arg0, arg1, ...(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) प्रारूपित करने के लिए मान।

नोट्सबिना संदर्भित शैली में सभी कोष्ठक संतुलित होने चाहिए। उदाहरण के लिए, "ab {0} de" और "ab } de" वैध शैली हैं, लेकिन "ab {0} de, ab } de" और "{" वैध शैली नहीं हैं।

str.length

स्ट्रिंग में वर्णों की संख्या के अनुरूप पूर्णांक लौटाता है.

str.length(string)

लौटाता हैस्रोत स्ट्रिंग में वर्णों की संख्या।

पैरामीटर

  • string(series string) स्रोत स्ट्रिंग

str.lower

एक नया स्ट्रिंग लौटाता है जिसमें सभी अक्षरों को छोटा लिखा जाता है.

str.lower(source)

लौटाता हैसभी अक्षरों को छोटे अक्षरों में नई स्ट्रिंग में परिवर्तित किया गया है।

पैरामीटर

  • source(series string) परिवर्तित करने के लिए स्ट्रिंग।

अलविदा str.upper

str.upper

एक नया स्ट्रिंग लौटाता है जिसमें सभी अक्षर बड़े अक्षरों में परिवर्तित होते हैं.

str.upper(source)

लौटाता हैसभी अक्षरों को बड़े अक्षरों में नई स्ट्रिंग में परिवर्तित किया गया है।

पैरामीटर

  • source(series string) परिवर्तित करने के लिए स्ट्रिंग।

अलविदा str.lower

str.match

अगर मेल खाता हैregexएक नियमित अभिव्यक्ति, वापस आ जाता हैsourceस्ट्रिंग का नया उप-स्ट्रिंग, अन्यथा लौटता है na.

str.match(source, regex) 

उदाहरण

s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")

// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")

if barstate.islastconfirmedhistory
    runtime.log(tickerid) // "EXCHAN

अधिक

वूहुओयनएक ही समय में कई लेनदेन कैसे चलेंगे?

हल्के बादलकृपया मुझे बताएं, क्या पाइन अधिक लेनदेन कर सकता है? या JS की तरह लेनदेन को पार कर सकता है? धन्यवाद.

लिसा20231अधिक जानकारी के लिए धन्यवाद।

कलात्मकताओह, यह पाइन स्क्रिप्ट प्लेटफॉर्म पर ओकेएक्स के सिमुलेटर का उपयोग कैसे करती है?

कलात्मकतायह ट्रेडिंग व्यू प्लेटफॉर्म की रणनीति को सीधे आविष्कारक प्लेटफॉर्म पर कॉपी करने के बराबर है!

छोटे सपनेPINE भाषा केवल एकल-प्रजाति रणनीतियों को कर सकती है, बहु-प्रजाति रणनीतियों के लिए सबसे अच्छा है या पायथन, जावास्क्रिप्ट, सी ++ में डिजाइन लिखना।

छोटे सपनेओह, हाँ, ओकेएक्स विशेष है, उनके एनालॉग वातावरण और वास्तविक डिस्क वातावरण एक ही पते पर हैं, केवल एक अंतर है।

हल्के बादलokx एनालॉग डिस्क का उपयोग नहीं किया जा सकता है ।

छोटे सपनेइस विविध वास्तुकला समस्या का समाधान नहीं किया जा सकता है, क्योंकि प्रत्येक एक्सचेंज का इंटरफ़ेस अलग है, और इंटरफ़ेस आवृत्ति सीमाएं अलग नहीं हैं, जिससे कई समस्याएं उत्पन्न होती हैं।

छोटे सपनेठीक है, सुझाव देने के लिए धन्यवाद, और इस आवश्यकता को रिपोर्ट करें।

हल्के बादलमुझे लगता है कि JS के साथ मिश्रण करना बेहतर है, क्योंकि JS विभिन्न प्रकार के लेनदेन के लिए बेहतर अनुकूल है।

ट्रेंडिंग शिकारीक्या आप बाद में कई किस्मों पर विचार करेंगे?

छोटे सपनेअशिष्टता।

हल्के बादलअच्छा, शुक्रिया ड्रीम डैड।

छोटे सपनेनमस्ते, अभी के लिए, PINE भाषा नीति केवल एक ही किस्म का काम करती है।

छोटे सपनेअजनबी, आपके समर्थन के लिए धन्यवाद. दस्तावेज को और भी बेहतर किया जाएगा.

छोटे सपनेहाँ।

छोटे सपनेPINE टेम्पलेट क्लासरूम, पैरामीटर पर स्विच एक्सचेंज बेस एड्रेस सेट किया जा सकता है.