[TOC]
Pine में कोड की सामान्य संरचना इस प्रकार है:
<version>
<declaration_statement>
<code>
FMZ के पाइन भाषा समर्थित टिप्पणी चिह्नः एक पंक्ति टिप्पणी//
कई पंक्तियाँ/* */
उदाहरण के लिए, नीचे दिए गए उदाहरण में टिप्पणी को कैसे लिखा गया है:
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // 计算MACD指标
/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')
निम्न प्रकार के कंपाइलर निर्देश कंपाइलर को बताते हैं कि स्क्रिप्ट किस संस्करण में लिखी गई है:
//@version=5
डिफ़ॉल्ट v5 संस्करण, कोड में छोड़ दिया जा सकता है//@version=5
。
indicator()
strategy()
कथन कथन स्क्रिप्ट के प्रकार को निर्धारित करता है, जो यह निर्धारित करता है कि इसमें क्या अनुमति है, और इसे कैसे उपयोग और निष्पादित किया जाए। स्क्रिप्ट के महत्वपूर्ण गुणों को सेट करें, जैसे कि इसका नाम, जब इसे चार्ट में जोड़ा जाता है, तो यह कहां दिखाई देगा, इसके द्वारा प्रदर्शित किए जाने वाले मानों की सटीकता और प्रारूप, और कुछ कार्यों को प्रबंधित करने के लिए इसके संचालन के लिए कुछ मान, जैसे कि यह चार्ट में प्रदर्शित होने वाले अधिकतम आरेख वस्तुओं की संख्या। रणनीतियों के लिए, गुणों में पैरामीटर शामिल होते हैं जिन्हें वापस मापा जाता है, जैसे कि प्रारंभिक पूंजी, कमीशन, स्लाइड, आदि। एफएमजेड के लिए पिन को एक रणनीति कोड में शामिल करने की आवश्यकता नहीं हैindicator()
याstrategy()
बयान में कहा गयाः
स्क्रिप्ट में टिप्पणी या कंपाइलर निर्देशों की पंक्तियाँ नहीं हैं, जो कथन हैं, जो स्क्रिप्ट के एल्गोरिदम को लागू करते हैं। एक कथन इनमें से एक हो सकता है।
if
,for
,while
याswitch
इकाइयोंवाक्यों को कई तरीकों से व्यवस्थित किया जा सकता है
空格
या制表符
(टैब कुंजी) शुरू. उनके पहले अक्षर भी इस पंक्ति के पहले अक्षर होना चाहिए. पंक्तियों में पंक्ति के पहले स्थान पर शुरू पंक्तियों, परिभाषा के अनुसार स्क्रिप्ट के वैश्विक दायरे का हिस्सा बनने के लिए.local block
。 एक स्थानीय ब्लॉक को एक तालिका चिह्न या चार रिक्त स्थानों में स्केल करना होगा (अन्यथा, इसे पिछले पंक्ति के सीरियल कोड के रूप में पार्स किया जाएगा, यानी इसे पिछले पंक्ति के कोड के निरंतरता के रूप में माना जाएगा), प्रत्येक स्थानीय ब्लॉक एक अलग स्थानीय सीमा को परिभाषित करता है 。उदाहरण के लिए, तीन स्थानीय ब्लॉकों को शामिल करें, एक कस्टम फ़ंक्शन घोषणा में और दो चर घोषणाओं में if संरचना का उपयोग करते हुए, निम्न कोड के साथः
indicator("", "", true) // 声明语句(全局范围),可以省略不写
barIsUp() => // 函数声明(全局范围)
close > open // 本地块(本地范围)
plotColor = if barIsUp() // 变量声明 (全局范围)
color.green // 本地块 (本地范围)
else
color.red // 本地块 (本地范围)
runtime.log("color", color = plotColor) // 调用一个内置函数输出日志 (全局范围)
लंबी पंक्तियों को कई पंक्तियों में विभाजित किया जा सकता है, या उन्हें “पैक” किया जा सकता है। लपेटी गई पंक्तियों को किसी भी संख्या में रिक्त स्थान में संकुचित किया जाना चाहिए, जब तक कि यह 4 का गुणक न हो (इन सीमाओं को स्थानीय ब्लॉक में संकुचित करने के लिए उपयोग किया जाता है) ।
a = open + high + low + close
इसे पैक किया जा सकता है (ध्यान दें कि प्रत्येक पंक्ति में संकुचित रिक्त स्थान की संख्या 4 के गुणक नहीं है):
a = open +
high +
low +
close
एक लंबा प्लॉट ((() कॉल पैक किया जा सकता है।
close1 = request.security(syminfo.tickerid, "D", close) // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close) // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100), // 一行长的plot()调用可以被包装
color = color.new(color.purple, 40),
style = plot.style_area,
trackprice = true)
उपयोगकर्ता-परिभाषित फ़ंक्शन कथन में एक कथन को भी पैक किया जा सकता है। हालांकि, चूंकि स्थानीय ब्लॉक को वाक्यविन्यास में एक संकोचन के साथ शुरू करना होगा ((4 रिक्त स्थान या 1 मेमोरी), जब इसे अगली पंक्ति में विभाजित किया जाता है, तो कथन का निरंतर भाग एक या अधिक संकोचन के साथ शुरू होना चाहिए ((जो 4 रिक्त स्थान के गुणक के बराबर नहीं है) । जैसेः
test(c, o) =>
ret = c > o ?
(c > o+5000 ?
1 :
0):
(c < o-5000 ?
-1 :
0)
a = test(close, open)
plot(a, title="a")
समय अनुक्रम एक डेटा प्रकार या प्रारूप नहीं है, समय अनुक्रम एक मूलभूत संरचनात्मक अवधारणा है PINE भाषा में। इसका उपयोग समय के साथ लगातार बदलते मानों को संग्रहीत करने के लिए किया जाता है, प्रत्येक मान एक समय बिंदु से मेल खाता है। समय अनुक्रम की इस अवधारणा की संरचना समय के साथ बदलते डेटा की एक श्रृंखला को संभालने और रिकॉर्ड करने के लिए उपयुक्त है।
अंतर्निहित चरopen
उदाहरण के लिएopen
एक अंतर्निहित चर प्रत्येक K लाइन BAR के लिए एक मूल्य रिकॉर्ड करता है, यदि यहopen
5 मिनट के लिए K-लाइन चक्र की जानकारी है. तो यह हैopen
चर में दर्ज किया गया है कि हर 5 मिनट K लाइन BAR ((स्तंभ) के लिए स्टार्टअप की कीमत है.open
उदाहरण के लिए, यदि हम एक समय-क्रम में पिछले मान को संदर्भित करते हैं, तो हम K लाइन BAR के उद्घाटन मूल्य को संदर्भित करते हैं।[]
इतिहास संचालक, जब नीति किसी K लाइन BAR पर निष्पादित होती है,open[1]
इसका मतलब है कि वर्तमान K लाइन BAR के पिछले K लाइन BAR के उद्घाटन मूल्य को संदर्भित करना।
हालांकिकालक्रमपिन भाषा में arrays के प्रकार भी होते हैं, लेकिन ये और समय अनुक्रम पूरी तरह से अलग अवधारणाएं हैं।
PINE भाषा इस तरह से समय अनुक्रम को डिजाइन करती है, जो कि नीति कोड में आसानी से समापन मूल्य के संचयी मानों की गणना कर सकती है, और इसके लिए for जैसे पुनरावर्ती संरचना का उपयोग करने की आवश्यकता नहीं है, केवल PINE भाषा के अंतर्निहित कार्यों का उपयोग करेंta.cum(close)
एक और उदाहरण के लिए, हमें अंतिम 14 K लाइनों BAR की गणना करने की आवश्यकता है (अर्थात, कोड निष्पादन के समय वर्तमान समय के लिए निकटतम 14 K लाइनें BAR) के उच्चतम मूल्य और निम्नतम मूल्य के बीच का अंतर औसत के रूप में लिखा जा सकता हैःta.sma(high - low, 14)
फ़ंक्शन को समय-क्रम पर कॉल करने के परिणाम भी समय-क्रम पर निशान छोड़ते हैं।[]
उदाहरण के लिए, यह परीक्षण करें कि क्या वर्तमान K-लाइन BAR का समापन मूल्य अंतिम 10 K-लाइन BAR में सबसे अधिक मूल्य के अधिकतम मूल्य से अधिक है। (वर्तमान K-लाइन BAR को छोड़कर)breach = close > ta.highest(close, 10)[1]
यह भी लिखा जा सकता है,breach = close > ta.highest(close[1], 10)
तोta.highest(close, 10)[1]
औरta.highest(close[1], 10)
यह समान है।
इस कोड का उपयोग करके सत्यापित करेंः
strategy("test pine", "test", true)
a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)
plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)
उपरोक्त परीक्षण कोड a और b को प्रत्येक BAR पर उनके समवर्ती समय अनुक्रमों पर आउटपुट करता है, और यह देखा जा सकता है कि a और b के मान हमेशा समान होते हैं, इसलिए ये दो प्रतिनिधित्व विधियां समकक्ष होती हैं।
इतिहास-संदर्भ
ट्रेडिंग व्यू में ऐतिहासिक डेटा के संदर्भ के लिए अधिकतम लेखों की संख्या की सीमा है (अधिकतम 5000 लेख), उदाहरण के लिए निम्न कोडः
//@version=6
indicator("test")
ema = ta.ema(close, 10000) // 报错:Error on bar 0: The 'ema'->'sum' function references too many historical candles (10000), the limit is 5000.
plot(ema, "ema")
// pre10000 = ema[10000] // 报错:Invalid number of bars back specified in the history-referencing operator. It accepts a value between 0 and 5000.
// plot(pre10000, "pre10000")
एफएमजेड पर पाइन भाषा नीति का उपयोग करें पाइन भाषा ट्रेडिंग क्लासरूम में “ट्रेडिंग सेटिंग्स”, पैरामीटरः “परिवर्तकों की सबसे लंबी अवधि की संख्या” विशेष रूप से संदर्भ योग्य डेटा की अधिकतम संख्या निर्धारित करता है।
indicator("test")
ema = ta.ema(close, 1000) // ema = ta.ema(close, 3000) 则报错:Invalid number 3000 of bars back specified in the history-referencing operator. It accepts a value between 0 and 2000.
plot(ema, "ema")
पैरामीटर “परिवर्तकों की सबसे लंबी अवधि की संख्या” को बहुत बड़ा नहीं होना चाहिए, उपयुक्त नीति में डेटा संदर्भ की सीमा हो सकती है।
PINE नीति के अंतर्निहित टेम्पलेट “Pine भाषा लेनदेन कक्षाओं” के लिए पैरामीटर सेट करने का निर्देश
定价货币精度
पैरामीटर और यह पैरामीटर ऑर्डर के समय स्लिप मूल्य निर्धारित करता है। उदाहरण के लिए, मूल्य निर्धारण मुद्रा परिशुद्धता 2 पर सेट की गई है, यानी, एक छोटी संख्या के दूसरे स्थान पर सटीक, 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
पैरामीटर, ऑर्डर सबसे पहले प्रासंगिक कीमत पर ट्रिगर किया जाता है
//@version=5
strategy("Percent of Equity Order", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// 简单的均线交叉策略
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
// 如果均线交叉条件满足,则买入或卖出
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
निर्दिष्ट करेंdefault_qty_type=strategy.percent_of_equity
बाद में, सेटिंगdefault_qty_value
एक प्रतिशत संख्या के रूप में ((0 ~ 100), 1 1% है। खाते में मूल्य निर्धारण मुद्राओं की संख्या के आधार पर आदेश की गणना की गई है। उदाहरण के लिएः वर्तमान खाते में 10000 USDT है, 1% आदेश सेट करें, यानी 100 USDT के पैमाने पर आदेश का उपयोग करें ((बिक्री के समय वर्तमान मूल्य के आधार पर गणना की गई) ।
var कीवर्ड को आवंटित करने और एक बार में शुरू करने के लिए उपयोग किया जाता है। आम तौर पर, कीवर्ड var को शामिल किए बिना चर-मूल्य निर्धारण सिंटैक्स के परिणामस्वरूप डेटा अपडेट होने पर चर के मूल्य को कवर किया जाता है। इसके विपरीत, जब कीवर्ड var का उपयोग किया जाता है, तो वे डेटा अपडेट होने के बावजूद चर को आवंटित करते हैं। वे अभी भी अपनी स्थिति को बनाए रख सकते हैं और इसे केवल तभी बदल सकते हैं जब वे if-expressions में शर्तों को पूरा करते हैं।
var variable_name = expression
व्याख्या:
variable_name
- Pine Script में अनुमत उपयोगकर्ता चर का कोई भी नाम ((, जो लैटिन अक्षरों, संख्याओं और रेखांकन को शामिल कर सकता है, जो अपरकेस और लोअरकेस हैं))_), लेकिन संख्या के साथ शुरू नहीं किया जा सकता) expression
- किसी भी अंकगणितीय अभिव्यक्ति, जैसे कि एक नियमित चर को परिभाषित करना। अभिव्यक्ति की गणना करें और इसे एक बार चर को आवंटित करें।उदाहरण
// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
var x = close
b := x
green_bars_count := green_bars_count + 1
if green_bars_count >= 10
var y = close
c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")
चर ‘a’ श्रृंखला में प्रत्येक स्तंभ के पहले स्तंभ के समापन मूल्य को बनाए रखता है। चर ‘b’ श्रृंखला में पहले नीलमणि नीलमणि मूल्य पट्टी के समापन मूल्य को बनाए रखता है। चर ‘c’ श्रृंखला में दसवें स्ट्राबेरी के समापन मूल्य को बनाए रखता है।
एफएमजेड पर, यह वास्तविक समय मूल्य मॉडल, समापन मूल्य मॉडल, और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
वास्तविक समय मूल्य मॉडल
उपरोक्त परीक्षण कोड को निष्पादित करते समय दो चरणों में विभाजित किया गया हैः 1. ऐतिहासिक K-लाइन चरण 2. वास्तविक K-लाइन चरण 3. जब वास्तविक समय मूल्य मॉडल, ऐतिहासिक K-लाइन चरण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 समाप्त नहीं हो जाता है, i का मूल्य निर्धारित करने के लिए अद्यतन किया जाता है (यानी, अगले दौर के निष्पादन के लिए रणनीति तर्क पहले मूल्य को पुनर्स्थापित नहीं करता है) । इसलिए आप देख सकते हैं कि चर i अभी भी हर बार बढ़ता है। लेकिन चर ii हर बार कई बार बढ़ता है।
समापन मूल्य मॉडल
चूंकि समापन मूल्य मॉडल एक रणनीति तर्क को निष्पादित करता है जब प्रत्येक K लाइन BAR समाप्त हो जाता है। इसलिए समापन मूल्य मॉडल में, ऐतिहासिक K लाइन चरण और वास्तविक समय K लाइन चरण,var
、varip
घोषित किए गए चर के उदाहरणों में वृद्धि पूरी तरह से समान है, प्रत्येक K लाइन पर BAR वृद्धि 1 है।
varip ((var intrabar persist) एक कीवर्ड है जिसका उपयोग आवंटन और एक बार में आरंभ करने वाले चरों के लिए किया जाता है। यह var कीवर्ड के समान है, लेकिन varip कथन का उपयोग करने वाले चर वास्तविक समय के-लाइन अपडेट के बीच अपने मानों को बरकरार रखते हैं।
varip variable_name = expression
व्याख्या:
variable_name
- किसी भी उपयोगकर्ता चर का नाम जिसे पाइन स्क्रिप्ट में अनुमति दी गई है, जिसमें कैपिटल और लोअरकेस लैटिन अक्षर, संख्या और रेखांकन शामिल हो सकते हैं।_), लेकिन संख्या के साथ शुरू नहीं किया जा सकता) expression
- किसी भी अंकगणितीय अभिव्यक्ति, जैसा कि एक नियमित चर को परिभाषित करते समय होता है। पहली K रेखा पर, अभिव्यक्ति को केवल एक बार गणना की जाती है और इसे एक बार चर को आवंटित किया जाता है।उदाहरण
// varip
varip int v = -1
v := v + 1
plot(v)
var का उपयोग करते समय, नक्शा bar_index का मान लौटाता है। varp का उपयोग करते समय, ऐतिहासिक K लाइन पर एक ही व्यवहार होता है, लेकिन वास्तविक समय K लाइन पर, यह एक मान लौटाता है, जो प्रत्येक टिक के लिए एक बढ़ता है।
टिप्पणी केवल साधारण प्रकारों के साथ प्रयोग किया जा सकता है, जैसे float, int, bool, string, और इन प्रकारों के सरणियों के साथ।
एक Boolean चर के मान को इंगित करने के लिए, या जब अभिव्यक्ति का उपयोग किया जाता हैतुलना करेंयातर्कऑपरेटर के रूप में गणना की जा सकती है
टिप्पणी यह भी देखेंतुलना करेंऑपरेटरतर्कऑपरेटर का वर्णन
और देखें
bool
एक बुल प्रकार के चर के मान, और तुलनात्मक और तार्किक संचालन के परिणामों को दर्शाता है।
टिप्पणी यह भी देखेंतुलना करेंऑपरेटरतर्कऑपरेटर का वर्णन
और देखें
bool
यदि कथन कथन को परिभाषित करता है जिसे अभिव्यक्ति की शर्तों को पूरा करने के लिए निष्पादित किया जाना चाहिए। पाइन स्क्रिप्टिंग भाषा के संस्करण 4 में आपको else if सिंटैक्स का उपयोग करने की अनुमति है।
सामान्य कोडः
var_declarationX = if condition
var_decl_then0
var_decl_then1
...
var_decl_thenN
return_expression_then
else if [optional block]
var_decl_else0
var_decl_else1
...
var_decl_elseN
return_expression_else
else
var_decl_else0
var_decl_else1
...
var_decl_elseN
return_expression_else
टिप्पणी
var_declarationX
- यह चर if कथन का मान प्राप्त करता है
condition
- यदि शर्त सही है, तो वाक्यविन्यास का उपयोग करेंthen
तर्क मेंvar_decl_then0
,var_decl_then1
यदि शर्त false है, तो वाक्य खंड का उपयोग करेंelse if
याelse
तर्क मेंvar_decl_else0
,var_decl_else1
आदि) ।
return_expression_then , return_expression_else
- मॉड्यूल में अंतिम अभिव्यक्ति या ब्लॉक else से अभिव्यक्ति कथन का अंतिम मान लौटाएगा। यदि चर की घोषणा अंत में है, तो इसका मूल्य परिणाम मान होगा।
if कथन के लिए लौटाए गए मान का प्रकार इस पर निर्भर करता हैreturn_expression_then
औरreturn_expression_else
प्रकार 。 ट्रेडिंग व्यू पर चलने पर, उनके प्रकारों को मिलान करना होगा: जब आप else ब्लॉक में एक स्ट्रिंग मान रखते हैं, तो फिर कथन ब्लॉक से एक पूर्णांक मान वापस करना असंभव है 。 एफएमजेड पर चलने पर, निम्नलिखित उदाहरण त्रुटि मुक्त है, जब y मान “खुला” होता है, तो प्लॉट ग्राफिंग के लिए n/a होता है 。
उदाहरण
// This code compiles
x = if close > open
close
else
open
// This code doesn’t compile by trading view
// y = if close > open
// close
// else
// "open"
plot(x)
छोड़ सकते हैंelse
ब्लॉक इस स्थिति में, यदि शर्त false है, तो var_declarationX को एक empty थ्रेसहोल्ड दिया जाता है (na, false या ):
उदाहरण
// if
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)
then, else if, else के ब्लॉक को चार रिक्त स्थानों में स्थानांतरित किया जाता हैः
उदाहरण
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
अनदेखा कर सकते हैंif
कथन का परिणाम मान ((var_declarationX= को छोड़ दिया जा सकता है) । यह उपयोगी हो सकता है यदि आपको एक्सप्रेशन के साइड इफेक्ट की आवश्यकता है, उदाहरण के लिए रणनीतिक ट्रेडिंग मेंः
उदाहरण
if (ta.crossover(high, low))
strategy.entry("BBandLE", strategy.long, stop=low)
else
strategy.cancel(id="BBandLE")
यदि कथन एक दूसरे को शामिल कर सकते हैं:
उदाहरण
// if
float x = na
if close > open
if close > close[1]
x := close
else
x := close[1]
else
x := open
plot(x)
‘for’ संरचना कई वाक्यों को बार-बार निष्पादित करने की अनुमति देती हैः
[var_declaration =] for counter = from_num to to_num [by step_num]
statements | continue | break
return_expression
var_declaration
- एक वैकल्पिक चर कथन, जिसे return_expression के मान के रूप में सौंपा जाएगा।
counter
- एक चर जो रिवर्स काउंटर मान को संग्रहीत करता है, जो रिवर्स के प्रत्येक पुनरावृत्ति में 1 या step_num मान को बढ़ाता / घटाता है।
from_num
- काउंटर का प्रारंभिक मान int/float thresholds/expressions का उपयोग करने की अनुमति है
to_num
- काउंटर का अंतिम मान. loop को तब बंद कर दिया जाता है जब काउंटर to_num से बड़