[TOC]
পাইন কোডের সাধারণ কাঠামো হলঃ
<version>
<declaration_statement>
<code>
এফএমজেড-এর পাইন ভাষার সমর্থিত মন্তব্য চিহ্নঃ একক লাইন মন্তব্য//
(পরের সংবাদ)/* */
উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণে মন্তব্যটি কীভাবে লেখা হয়েছেঃ
[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)
ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ফাংশন বিবৃতিতে একটি বিবৃতিও প্যাকেজ করা যেতে পারে। যাইহোক, যেহেতু স্থানীয় ব্লকটি সিনট্যাক্সের সাথে শুরু করতে হবে ((৪ টি ফাঁকা বা ১ টি সূচক), যখন এটি পরবর্তী লাইনে বিভক্ত করা হয়, তখন বিবৃতিটির ধারাবাহিক অংশটি অবশ্যই এক বা একাধিক সংকোচনের সাথে শুরু করতে হবে ((৪ টি ফাঁকা সংখ্যার সমান নয়) । উদাহরণস্বরূপঃ
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 ((column)) এর ওপেন প্রাইস রেকর্ড করে। আপনার কৌশলটি যখন কার্যকর হয় তখন কোডটি উদ্ধৃত করেopen
অর্থাৎ, বর্তমান K লাইন BAR এর ওপেনিং মূল্য উদ্ধৃত করা হয়েছে। পূর্ববর্তী মান উদ্ধৃত করার জন্য (অতীতের মান) আমরা ব্যবহার করি[]
ইতিহাস অপারেটর, যখন কৌশলটি একটি K-লাইন BAR-এ কার্যকর হয়,open[1]
এর অর্থ হল বর্তমান K লাইন BAR এর পূর্ববর্তী K লাইন BAR এর খোলার মূল্য উল্লেখ করা।
যদিওসময়সূচীপিন ভাষায়ও অ্যারে টাইপ আছে। কিন্তু এগুলি এবং টাইম সিকোয়েন্স সম্পূর্ণ ভিন্ন ধারণা।
PINE ভাষা এইভাবে টাইম সিকোয়েন্স ডিজাইন করেছে, যা পলিসি কোডে সহজেই ক্লোজ-আপ মূল্যের ক্রমিক মান গণনা করতে পারে, এবং ফোরের মতো চক্রের কাঠামো ব্যবহার করার প্রয়োজন নেই, কেবলমাত্র PINE ভাষার অন্তর্নির্মিত ফাংশন ব্যবহার করেta.cum(close)
উদাহরণস্বরূপ, আমরা সর্বশেষ ১৪টি K-লাইন BAR (যেমন, কোড চালানোর সময় থেকে বর্তমান সময়ে নিকটতম ১৪টি 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 এর মান সর্বদা সমান, তাই এই দুটি উপস্থাপনার পদ্ধতি সমান।
ঐতিহাসিক তথ্য উদ্ধৃতি
ট্রেডিং ভিউতে ঐতিহাসিক ডেটা উদ্ধৃতির জন্য সর্বোচ্চ ক্রমিক সীমাবদ্ধতা রয়েছে (৫০০০ ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক):
//@version=6
indicator("test")
ema = ta.ema(close, 10000) // 报错:Error on bar 0: The 'ema'->'sum' function references too many historical candles (10000), the limit is 5000.
plot(ema, "ema")
// pre10000 = ema[10000] // 报错:Invalid number of bars back specified in the history-referencing operator. It accepts a value between 0 and 5000.
// plot(pre10000, "pre10000")
FMZ-এ PINE ভাষা নীতি ব্যবহার করে “Pine ভাষা ট্রেডিং ক্লাসরুমে” “ট্রেডিং সেটিং”, প্যারামিটারঃ “variable longest period number” নির্দিষ্টভাবে উল্লেখযোগ্য ডেটা সেট করার সর্বোচ্চ সংখ্যা।
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")
“Variable’s longest cycle number” প্যারামিটারটি খুব বেশি বড় হওয়া উচিত নয়, তবে উপযুক্ত নীতিতে ডেটা উদ্ধৃত করা যেতে পারে।
PINE নীতির অন্তর্নির্মিত টেমপ্লেট “Pine ভাষা লেনদেন শ্রেণীকক্ষ” এর প্যারামিটার সেটিং নির্দেশিকা
定价货币精度
প্যারামিটার এবং এই প্যারামিটারটি অর্ডার দেওয়ার সময় স্লাইড মূল্য নির্ধারণ করে। উদাহরণস্বরূপ, মূল্য নির্ধারণের মুদ্রার নির্ভুলতা 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
প্যারামিটার, অর্ডারটি প্রথম যোগ্য মূল্যের উপর ট্রিগার হয়।
//@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
শতাংশ হিসাবে গণনা করুন (০ থেকে ১০০), ১ হল ১%। অ্যাকাউন্টে যে পরিমাণ মুদ্রা রয়েছে তার উপর ভিত্তি করে অর্ডার গণনা করুন। উদাহরণস্বরূপঃ বর্তমান অ্যাকাউন্টে ১০,০০০ ইউএসডিটি রয়েছে, ১% অর্ডার সেট করুন, অর্থাৎ ১০০ ইউএসডিটি স্কেল ব্যবহার করে অর্ডার করুন (বিক্রয়ের সময় বর্তমান দামের উপর ভিত্তি করে) ।
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’ ধারাবাহিকের প্রথম ধান সবুজ ধান মূল্যদণ্ডের সমাপ্তি মূল্য বজায় রাখে। ভেরিয়েবল ‘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
রিয়েল-টাইম দাম মডেল
উপরোক্ত টেস্ট কোডটি দুই ধাপে বিভক্ত করা হয়েছেঃ ১, ইতিহাসের K-লাইন ধাপ; ২, রিয়েল-টাইম K-লাইন ধাপ; যখন রিয়েল-টাইম প্রাইস মডেল, ইতিহাসের K-লাইন ধাপে,var
、varip
বিবৃতির ভেরিয়েবল i, ii নীতি কোডের প্রতিটি রাউন্ডে ক্রমবর্ধমান অপারেশন সম্পাদন করেif true
সুতরাং অবশ্যই সংশ্লিষ্ট শর্ত কোড ব্লকটি সম্পাদন করুন) । সুতরাং আপনি দেখতে পারেন যে রিটার্নিং ফলাফলের K লাইন BAR এ প্রদর্শিত সংখ্যাগুলি একের পর এক বৃদ্ধি পেয়েছে। ইতিহাসের K লাইন পর্যায়টি শেষ হলে, রিয়েল-টাইম K লাইন পর্যায়টি শুরু হয়।var
、varip
বিবৃতির ভেরিয়েবলগুলি পরিবর্তিত হতে শুরু করে। যেহেতু এটি রিয়েল-টাইম মূল্য মডেল, তাই একটি K-লাইন BAR-এর মধ্যে প্রতিটি মূল্য পরিবর্তনের জন্য কৌশল কোডটি পুনরায় কার্যকর করা হয়।i := i + 1
এবংii := ii + 1
i একবারই কার্যকর করা হয়। পার্থক্য হল ii প্রতিবার সংশোধন করা হয়। যদিও i প্রতিবার সংশোধন করা হয়, তবে পরবর্তী রাউন্ডে কৌশলগত যুক্তি কার্যকর করার সময় পূর্বের মানটি পুনরুদ্ধার করা হয়, বর্তমান K লাইন BAR শেষ না হওয়া পর্যন্ত i এর মানটি পুনরুদ্ধার করা হয় না (অর্থাৎ পরবর্তী রাউন্ডে কৌশলগত যুক্তি কার্যকর করার সময় পূর্বের মান পুনরুদ্ধার করা হয় না) । সুতরাং আপনি দেখতে পাচ্ছেন যে i এখনও প্রতিটি BAR বৃদ্ধি করে 1। তবে পরিবর্তনশীল ii প্রতিটি BAR এ বেশ কয়েকবার যোগ করে।
সমাপনী মূল্য মডেল
যেহেতু ক্লোজিং প্রাইস মডেলটি প্রতিটি কে-লাইন বিএআর শেষ হওয়ার পরে একটি কৌশলগত যুক্তি সম্পাদন করে। তাই ক্লোজিং প্রাইস মডেলের সময়, historical K-লাইন পর্যায় এবং রিয়েল-টাইম K-লাইন পর্যায়,var
、varip
বিবৃতির ভেরিয়েবলের ক্রমবর্ধমান পারফরম্যান্স উপরের উদাহরণের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ, প্রতিটি কে লাইন 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 এর মান ফেরত দেয়। varp ব্যবহার করলে, ইতিহাসের K লাইনে একই আচরণ ঘটে, কিন্তু রিয়েল-টাইম K লাইনে, চিত্রটি একটি মান ফেরত দেয় যা প্রতিটি টিকের জন্য বৃদ্ধি পায়।
নোট কেবলমাত্র float, int, bool, string, এবং এই ধরনের অ্যারেগুলির সাথে ব্যবহার করা যেতে পারে।
একটি Boolean ভেরিয়েবলের মান, অথবা যখন এক্সপ্রেশন ব্যবহার করা হয়তুলনাবাযুক্তিঅপারেটরের সময় গণনা করা যায় এমন মান
নোট দেখুনতুলনাঅপারেটরযুক্তিঅপারেটরের বর্ণনাঃ
আরও দেখুন
bool
একটি Boolean ভেরিয়েবলের মান এবং তুলনা অপারেশন, লজিকাল অপারেশন ফলাফল উল্লেখ করে।
নোট দেখুনতুলনাঅপারেটরযুক্তিঅপারেটরের বর্ণনাঃ
আরও দেখুন
bool
If স্টেটমেন্টটি এমন একটি স্টেটমেন্ট ব্লককে সংজ্ঞায়িত করে যা এক্সপ্রেশনের শর্ত পূরণ করার জন্য অবশ্যই কার্যকর করা উচিত। পাইন স্ক্রিপ্টিং ভাষার চতুর্থ সংস্করণটি আপনাকে 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 ব্লকে একটি স্ট্রিং মান রাখেন, তখন then স্টেটমেন্ট ব্লক থেকে একটি পূর্ণসংখ্যা মান ফেরত দেওয়া সম্ভব নয়। FMZ এ চলার সময়, নিম্নলিখিত উদাহরণটি ভুল করে না, যখন 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
এই ক্ষেত্রে, যদি শর্তটি মিথ্যা হয়, তবে var_declarationX ভেরিয়েবলকে একটি ফাঁকা থ্রেশহোল্ড দেওয়া হবে ({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
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 বাক্যে যেগুলো অন্তর্ভুক্ত করা যায় সেগুলি হল:
উদাহরণ
// 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
- রিটার্নের প্রতিটি