[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()
इस तरह के बयानों को स्वीकार करें।
स्क्रिप्ट में जो पंक्ति टिप्पणी या संकलक निर्देश नहीं है, वह वाक्य है, जो स्क्रिप्ट के एल्गोरिदम को लागू करता है। एक वाक्य इनमें से एक हो सकता है।
if
,for
,while
या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 है ((स्लाइड मूल्य ऑर्डर के लिए बेहतर है और ऑर्डर के लेनदेन के लिए ओवरफ्लो मूल्य का हिस्सा डिस्क) ।) ।javascript
रणनीति में कॉल करेंSetMaxBarLen
फ़ंक्शन का कार्य समान है।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
और जब हम फ़ंक्शन को क्रमबद्ध करते हैं, तो हम निर्दिष्ट कर सकते हैंlimit
、stop
पैरामीटर ।
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
), ऑर्डर केवल तभी ट्रिगर होता है जब बाजार का वर्तमान मूल्य उस मूल्य से अधिक हो।
रोकें आदेश
ऑर्डर का स्टॉप-लॉस मूल्य सेट करें, जब ऑर्डर एक भुगतान है, तो ऑर्डर केवल तभी ट्रिगर होता है जब बाजार का वर्तमान मूल्य उस मूल्य से अधिक होता है। जब ऑर्डर एक बिक्री ऑर्डर है, तो ऑर्डर केवल तभी ट्रिगर होता है जब बाजार में वर्तमान मूल्य उस मूल्य से कम हो।
रोक-सीमा आदेश
एक साथ सेट कर सकते हैंlimit
、stop
पैरामीटर, ऑर्डर पहले मूल्य पर ट्रिगर किया जाता है जो शर्तों को पूरा करता है।
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")
चर
एफएमजेड पर, इसे वास्तविक समय मूल्य मॉडल, समापन मूल्य मॉडल और वास्तविक समय मूल्य मॉडल के रूप में विभाजित किया गया है।var
、varip
हम निम्नलिखित कोड का उपयोग करके परीक्षण करते हैं।
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
वास्तविक समय मूल्य मॉडल
उपरोक्त परीक्षण कोड को निष्पादन के समय दो चरणों में विभाजित किया गया हैः १, ऐतिहासिक के-लाइन चरण; २, वास्तविक समय के-लाइन चरण; जब वास्तविक समय मूल्य मॉडल, ऐतिहासिक के-लाइन चरण,var
、varip
घोषणा किए गए चर i, ii को नीति कोड के प्रत्येक चरण के निष्पादन के दौरान वृद्धिशील ऑपरेशन किया जाता है क्योंकिif true
तो निश्चित रूप से निष्पादित करने के लिए संबंधित शर्त कोड ब्लॉक) । इसलिए आप देख सकते हैं कि पुनरावृत्ति के परिणाम K लाइन BAR पर दिखाए गए संख्याओं में से प्रत्येक में 1 की वृद्धि होती है । जब ऐतिहासिक K लाइन चरण समाप्त होता है, तो वास्तविक समय K लाइन चरण शुरू होता है ।var
、varip
यह एक वास्तविक समय मूल्य मॉडल है, क्योंकि एक K-लाइन BAR में प्रत्येक मूल्य परिवर्तन के लिए एक बार रणनीति कोड निष्पादित किया जाता है।i := i + 1
औरii := ii + 1
यह भिन्नता यह है कि ii हर बार संशोधित होता है. i हालांकि प्रत्येक बार संशोधित होता है, लेकिन नीति लॉजिक के अगले चरण के निष्पादन के दौरान पिछले मूल्य को बहाल कर देता है, जब तक कि वर्तमान K लाइन BAR समाप्त न हो जाए।
समापन मूल्य मॉडल
चूंकि समापन मूल्य मॉडल में प्रत्येक K-लाइन BAR के समाप्त होने पर एक रणनीति तर्क निष्पादित किया जाता है। इसलिए समापन मूल्य मॉडल में, ऐतिहासिक K-लाइन चरण और वास्तविक समय K-लाइन चरण, दोनों के लिए समान हैं।var
、varip
उपरोक्त उदाहरणों में, जो चर घोषित किए गए हैं, वे पूरी तरह से समान हैं, प्रत्येक 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
यदि कथन एक वाक्य खंड को परिभाषित करता है जिसे अभिव्यक्ति की शर्तों को पूरा करने के लिए निष्पादित किया जाना चाहिए। चौथे संस्करण के पाइन स्क्रिप्टिंग भाषा में आपको
सामान्य कोडः
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_then0
,var_decl_then1
आदि) ⇒ यदि शर्त false है, तो वाक्य खंड का उपयोग करेंelse if
याelse
तर्क में ((var_decl_else0
,var_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 चर को एक
उदाहरण
// if
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)
आप कई
उदाहरण
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
अनदेखा किया जा सकता हैif
कथन का परिणाम मान ((
उदाहरण
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 को
अलविदा
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 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
>=
अलविदा
input.timeframe
timeframe.period
एक कोड आइडेंटिफायर बनाने के लिए एक सरलीकृत औसत 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(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(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
अगर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
अगरsource
स्ट्रिंग कोstr
में निर्दिष्ट सबस्ट्रिंग के अंत में, true लौटाता है, अन्यथा false लौटाता है.
str.endswith(source, str)
लौटाता हैअगरsource
स्ट्रिंग कोstr
इसमें निर्दिष्ट सबस्ट्रिंग का अंत true है, अन्यथा false है.
पैरामीटर
source
(series string) स्रोत स्ट्रिंगstr
(series string) खोज करने के लिए उप-स्ट्रिंग।अलविदा
str.startswith
अगरsource
स्ट्रिंग कोstr
में निर्दिष्ट सबस्ट्रिंग का प्रारंभ, true लौटाता है, अन्यथा false लौटाता है.
str.startswith(source, str)
लौटाता हैअगरsource
स्ट्रिंग कोstr
में निर्दिष्ट सबस्ट्रिंग का प्रारंभ true है, अन्यथा false है.
पैरामीटर
source
(series string) स्रोत स्ट्रिंगstr
(series string) खोज करने के लिए उप-स्ट्रिंग।अलविदा
str.endswith
एक नई स्ट्रिंग लौटाता है, यह हैsource
स्ट्रिंग का उप-स्ट्रिंग.begin_pos
निर्दिष्ट सूचकांक में वर्ण से शुरू होता है और विस्तार करता हैsource
स्ट्रिंग के
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(string)
लौटाता हैयदि कोई वैध संख्या है, तो यह स्ट्रिंग का फ्लोटिंग टाइप है, अन्यथा यह na है।
पैरामीटर
string
(series string) int या float के लिए स्ट्रिंग अभिव्यक्ति का रूप।स्वरूपण स्ट्रिंग और मानों को स्वरूपण स्ट्रिंग में परिवर्तित करें. स्वरूपण स्ट्रिंग में पाठ पाठ और प्रत्येक स्वरूपित मान के लिए एक स्थानान्तरण शामिल हो सकता है। प्रत्येक स्थानान्तरण में एक सूचकांक शामिल होता है जो इसके आवश्यक पैरामीटर को बदल देगा ((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
स्ट्रिंग में वर्णों की संख्या के अनुरूप पूर्णांक लौटाता है.
str.length(string)
लौटाता हैस्रोत स्ट्रिंग में वर्णों की संख्या।
पैरामीटर
string
(series string) स्रोत स्ट्रिंगएक नया स्ट्रिंग लौटाता है जिसमें सभी अक्षरों को छोटा लिखा जाता है.
str.lower(source)
लौटाता हैसभी अक्षरों को छोटे अक्षरों में नई स्ट्रिंग में परिवर्तित किया गया है।
पैरामीटर
source
(series string) परिवर्तित करने के लिए स्ट्रिंग।अलविदा
str.upper
एक नया स्ट्रिंग लौटाता है जिसमें सभी अक्षर बड़े अक्षरों में परिवर्तित होते हैं.
str.upper(source)
लौटाता हैसभी अक्षरों को बड़े अक्षरों में नई स्ट्रिंग में परिवर्तित किया गया है।
पैरामीटर
source
(series string) परिवर्तित करने के लिए स्ट्रिंग।अलविदा
str.lower
अगर मेल खाता हैregex
एक नियमित अभिव्यक्ति, वापस आ जाता हैsource
स्ट्रिंग का नया उप-स्ट्रिंग, अन्यथा लौटता है
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 टेम्पलेट क्लासरूम, पैरामीटर पर स्विच एक्सचेंज बेस एड्रेस सेट किया जा सकता है.