[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
ইত্যাদি গঠনবাক্যাংশ বিভিন্ন উপায়ে সাজানো যেতে পারে
空格
অথবা制表符
(tab কী) শুরু হয়. তাদের প্রথম অক্ষরটি অবশ্যই লাইনের প্রথম অক্ষর হতে হবে. লাইনের প্রথম অবস্থানের শুরু হওয়া লাইনটি সংজ্ঞা অনুসারে স্ক্রিপ্টের গ্লোবাল পরিসরের অংশ হয়ে ওঠে।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)
ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ফাংশন বিবৃতিতে থাকা একটি বিবৃতিও প্যাকেজ করা যেতে পারে। তবে, যেহেতু স্থানীয়করণগুলি সিনট্যাক্সিয়ালভাবে একটি সংকোচন দিয়ে শুরু হতে হবে ((৪ টি স্পেস বা ১ টি প্রতীক), তাই যখন এটিকে পরবর্তী লাইনে বিভক্ত করা হয়, তখন বিবৃতির ধারাবাহিক অংশটি এক বা একাধিক সংকোচনের সাথে শুরু হতে হবে ((৪ টি স্পেসের গুণের সমান নয়) । উদাহরণস্বরূপঃ
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
ভেরিয়েবলের মধ্যে রেকর্ড করা হয় K লাইন BAR (কলাম) এর প্রতি 5 মিনিটের ওপেনিং মূল্য। যখন আপনার কৌশল প্রোগ্রামটি কার্যকর হয় তখন কোডে উদ্ধৃতি দেওয়া হয়।open
অর্থাৎ বর্তমান অবস্থানে K-রেখা BAR এর ওপেন-ড্রাইভ মূল্য উল্লেখ করা হয়। সময়ের ক্রমের আগের মান (পূর্বের মান) উল্লেখ করার জন্য আমরা ব্যবহার করি[]
ইতিহাস অপারেটর, যখন নীতিটি একটি K-line 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)
উপরের টেস্টিং কোডটি a এবং b এর মানগুলিকে প্রতিটি BAR এ তাদের সংশ্লিষ্ট সময়সূচির উপর আউটপুট দেয়, এবং আপনি দেখতে পারেন যে a এবং b এর মানগুলি সর্বদা সমান, তাই উভয় উপায়েই সমান।
PINE নীতির অন্তর্নির্মিত টেমপ্লেট "Pine Language Exchange Library" এর জন্য প্যারামিটার সেটিং নির্দেশাবলী।
定价货币精度
প্যারামিটার এবং এই প্যারামিটারটি অর্ডার দেওয়ার সময় স্লাইড মূল্য নির্ধারণ করে; উদাহরণস্বরূপ, মূল্য নির্ধারণের মুদ্রার নির্ভুলতা 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 হল একটি কীওয়ার্ড যা ভেরিয়েবলকে বরাদ্দ এবং এককালীন প্রারম্ভিকীকরণের জন্য ব্যবহৃত হয়। সাধারণত, কীওয়ার্ড 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
বিবৃতির ভেরিয়েবলগুলি পরিবর্তিত হতে শুরু করে। কারণ এটি একটি রিয়েল-টাইম মূল্য মডেল, একটি কে-লাইন বারের মধ্যে প্রতিটি মূল্য পরিবর্তনের জন্য কৌশল কোডটি পুনরাবৃত্তি করা হয়।i := i + 1
এবংii := ii + 1
বিপরীতে, i প্রতিবার সংশোধন করা হয়। যদিও i প্রতিবার সংশোধন করা হয়, তবে পরবর্তী রাউন্ডে নীতিগত লজিক চালানোর সময় পূর্বের মানটি পুনরুদ্ধার করা হয়, তবে বর্তমান K-লাইন BAR শেষ না হওয়া পর্যন্ত i এর মানটি পুনর্নির্ধারণ করা হয় না ((যেমন, পরবর্তী রাউন্ডে নীতিগত লজিক চালানোর সময় পূর্বের মানটি পুনরুদ্ধার করা হয় না) । সুতরাং আপনি দেখতে পারেন যে পরিবর্তনশীল i এখনও প্রতিটি রুটের সাথে BAR1 যোগ করা হয়; তবে পরিবর্তনশীল ii প্রতি বার একাধিকবার যোগ করা হয়।
বন্ধ মূল্য মডেল
যেহেতু ক্লোজিং প্রাইস মডেলটি প্রতিটি K লাইন BAR শেষ হওয়ার পরে একবার কৌশলগত যুক্তি সম্পাদন করে। সুতরাং, ক্লোজিং প্রাইস মডেলটিতে, ইতিহাস K লাইন পর্যায়ে এবং রিয়েল-টাইম K লাইন পর্যায়ে, একটি নির্দিষ্ট সময়সীমার মধ্যে একটি নির্দিষ্ট সময়সীমা থাকে।var
、varip
বিবৃতির ভেরিয়েবলগুলি উপরের উদাহরণে ক্রমবর্ধমানভাবে প্রদর্শিত হয়, প্রতিটি K-রেখা BAR এর জন্য 1 ক্রমবর্ধমান।
varip (var intrabar persist) হল একটি কীওয়ার্ড যা ভেরিয়েবলকে বরাদ্দ এবং একবারে ইনস্টল করার জন্য ব্যবহৃত হয়। এটি var কীওয়ার্ডের মতোই, তবে ভেরিয়েবলটি রিয়েল-টাইম কে-লাইন আপডেটের মধ্যে তার মান সংরক্ষণ করে।
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, boolean, string এবং এই ধরনের অ্যারেগুলির সাথে ব্যবহার করা যেতে পারে।
একটি Boolean টাইপ ভেরিয়েবলের মান বা যখন একটি অভিব্যক্তি ব্যবহার করা হয়তুলনাঅথবাযুক্তিঅপারেটরের সময় গণনা করা যায় এমন মান।
নোটআরও দেখুনতুলনাঅপারেটর এবংযুক্তিঅপারেটরের বর্ণনা ।
দেখা হবে
bool
একটি বুল টাইপ ভেরিয়েবলের মান এবং তুলনা অপারেশন, লজিক অপারেশন এর ফলাফল নির্দেশ করে।
নোটআরও দেখুনতুলনাঅপারেটর এবংযুক্তিঅপারেটরের বর্ণনা ।
দেখা হবে
bool
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
টাইপ ⇒ ট্রেডিং ভিউতে কাজ করার সময়, তাদের টাইপগুলি অবশ্যই মেলেঃ যখন আপনি অন্য ব্লকে একটি স্ট্রিং ভ্যালু রাখেন, তখন 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 বাক্যগুলি একে অপরের সাথে যুক্ত হতে পারেঃ
উদাহরণ
// 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 এর চেয়ে ছোট হয়) তখন লুপটি বিরতি দেয়; 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 এর ভেরিয়েবলকে দেওয়া হবে। যদি লুপটি continuous_logs বা break_logs কীওয়ার্ডের কারণে প্রস্থান করে, তাহলে লুপের রিটার্ন ভ্যালু হল শেষ ভেরিয়েবলের মান যা লুপটি প্রস্থান করার আগে বরাদ্দ করা হয়েছিল।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 loop" বা "break loop" কীওয়ার্ডের কারণে প্রস্থান করে, তাহলে লুপের ফিরে আসা মানটি হল লুপটি প্রস্থান করার আগে শেষ ভেরিয়েবলের মান নির্ধারণ করা।continue
- কেবলমাত্র রিবাউন্ডে ব্যবহৃত কীওয়ার্ড। এটি রিবাউন্ডের পরবর্তী পুনরাবৃত্তির জন্য কার্যকর হয়।break
- চক্র থেকে বেরিয়ে আসার মূল শব্দ ।
লুপের মধ্যে অ্যারে এর উপাদান বা এর আকার পরিবর্তন করার অনুমতি দেয়।
এখানে আমরা ব্যবহার করছিfor...in
একটি একক পরামিতির ফর্ম যা নির্ধারণ করে যে প্রতিটি K-লাইনে কতটি K-লাইনের OHLC-ভ্যালু হল সানক্লোজের threshold-এর SMA-এর চেয়ে বড়ঃ
উদাহরণ
// 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
- যদি true হয়, তাহলে চালান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
পরবর্তী বুল এক্সপ্রেশন অবশ্যই শেষ পর্যন্ত false হতে হবে, অথবা এটিকে বাস্তবায়ন করতে হবে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
যখন একটি স্ট্রিং এর ফলাফলকে একটি ভেরিয়েবলকে বরাদ্দ করা হয়, তখন সব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 এর সংমিশ্রণ ফেরত
একটি সংখ্যা একটি পূর্ণসংখ্যা বা ফ্লোটিং পয়েন্ট মান, বা মান একটি সিরিজ ফেরতঃ
দ্বিপদী সিলিন্ডার +'ফিরে আসে এক্সপ্রেস 1 + এক্সপ্রেস 2 ।
একক ক্রিয়া + ক্রিয়া ফেরত দেয় expr ((একক অপারেটর সমান্তরালের জন্য কোন সামগ্রী যোগ করা হয় না) ।)
নোটআপনি সংখ্যাযুক্ত অ্যারিথমিক অপারেটর এবং ভেরিয়েবল অ্যারে ব্যবহার করতে পারেন। অ্যারে ব্যবহারের ক্ষেত্রে, অপারেটরগুলি উপাদানগুলির জন্য প্রয়োগ করা হয়।
সংযোজন সূচক । এটি সংখ্যাসূচক অভিব্যক্তি বা স্ট্রিং ব্যবহার করে ।
expr1 += expr2
উদাহরণ
// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)
রিটার্ন মানস্ট্রিংয়ের জন্য, এক্সপ্রা 1 এবং এক্সপ্রা 2 এর ক্রমবর্ধমান ফিরে আসে। সংখ্যাগুলির জন্য, পূর্ণসংখ্যা বা ফ্লোটিং পয়েন্ট মান, বা মানের একটি সিরিজ ফিরে আসে।
নোটআপনি সংখ্যাযুক্ত অ্যারিথমিক অপারেটর এবং ভেরিয়েবল অ্যারে ব্যবহার করতে পারেন। অ্যারে ব্যবহারের ক্ষেত্রে, অপারেটরগুলি উপাদানগুলির জন্য প্রয়োগ করা হয়।
বিয়োগের আইন বা একক নেতিবাচক সংখ্যা।
expr1 - expr2
- expr
রিটার্ন মানপূর্ণসংখ্যা বা ফ্লোটিং পয়েন্টের মান বা মানের একটি অ্যারে ফেরত দেয়ঃ
দ্বিপদী সিলিন্ডার +'ফিরে আসে এক্সপ্রেস 1 বিয়োগ এক্সপ্রেস 2 ।
এক ডলার-
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 সত্য হিসাবে মূল্যায়ন করা হয়, তবে এক্সপ্রেস 2 হয়, অন্যথায় এক্সপ্রেস 3 হয়; শূন্য মান ((0 এবং NaN+, Infinity,-Infinity) মিথ্যা হিসাবে বিবেচিত হয়, অন্য সমস্ত মান সত্য।
নোটআপনি যদি না চান, তাহলে na কে
দেখা হবে
na
সিরিজের উপশিরোনামগুলো↑ এক্সপ্রি১ সিরিজের পূর্ববর্তী মানগুলোতে অ্যাক্সেস প্রদান করা হয়↑ এক্সপ্রি২ হল বিগত 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 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
PINE ভাষার অবজেক্টগুলি হল ইউজার ডিফাইন টাইপ (UDT) এর একটি উদাহরণ, যা একটি পদ্ধতিহীন শ্রেণী হিসাবে বোঝা যায়, যা ব্যবহারকারীদের নীতিতে কাস্টম টাইপ তৈরি করতে দেয় যা একটি বস্তুর মধ্যে বিভিন্ন মান সংগঠিত করে।
টাইপ সংজ্ঞা
আসুন আমরা একটি অর্ডার টাইপ সংজ্ঞায়িত করি যাতে অর্ডার তথ্য সংরক্ষণ করা যায়ঃ
type order
float price
float amount
string symbol
type
কীওয়ার্ড ঘোষণার ধরন ।অবজেক্ট তৈরি করা
ডিক্লেয়ারড টাইপ ব্যবহার করুন, কল করুনnew()
ফাংশন তৈরির বস্তুঃ
order1 = order.new()
order1 = order.new(100, 0.1, "BTC_USDT")
order1 = order.new(amount = 0.1, symbol = "BTC_USDT", price = 100)
আপনি একটি শূন্য বস্তু তৈরি করতে পারেনঃ
order order1 = na
এখানে একটি বাস্তব উদাহরণ দেওয়া হলঃ
type order
float price
float amount
string symbol
if strategy.position_size == 0 and open > close
strategy.entry("long", strategy.long, 1)
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)
// runtime.log(order1) // 输出 {"data":{"price":46002.8,"amount":1,"symbol":"swap"},"_meta":0,"_type":"order"}
উদাহরণস্বরূপঃ
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)
আপনি নিম্নলিখিত ফর্মটিও ব্যবহার করতে পারেনঃ
order order1 = na
order1 := order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)
var কীওয়ার্ডের জন্য অবজেক্টের ধরন
//@version=5
indicator("Objects using `var` demo")
//@type A custom type to hold index, price, and volume information.
type BarInfo
int index = bar_index
float price = close
float vol = volume
//@variable A `BarInfo` instance whose fields persist through all iterations, starting from the first bar.
var BarInfo firstBar = BarInfo.new()
//@variable A `BarInfo` instance declared on every bar.
BarInfo currentBar = BarInfo.new()
// Plot the `index` fields of both instances to compare the difference.
plot(firstBar.index, "firstBar")
plot(currentBar.index, "currentBar")
যখন var কীওয়ার্ড বিবৃতি ব্যবহার করে ব্যবহারকারীর সংজ্ঞায়িত প্রকারের অবজেক্টের একটি ভেরিয়েবলকে বরাদ্দ করা হয়, তখন এই কীওয়ার্ডটি স্বয়ংক্রিয়ভাবে সেই অবজেক্টের সমস্ত ক্ষেত্রের জন্য প্রয়োগ করা হয়। এর অর্থ হল যে var কীওয়ার্ডের মাধ্যমে ঘোষিত বস্তুটি প্রতিটি আইরিসের মধ্যে তার অবস্থা বজায় রাখবে, প্রতিটি আইরিসের মধ্যে তার ক্ষেত্রের মান পুনরায় ইনসিট করার প্রয়োজন নেই।
আপনি দুটি বস্তুর জন্য একটি সূচক ক্ষেত্র আঁকতে পারেন এবং তাদের মধ্যে পার্থক্য তুলনা করতে পারেন। firstBar.index প্রতিটি আইরিডিয়ামের জন্য পূর্বের সেট করা মান বজায় রাখবে, এবং currentBar.index প্রতিটি আইরিডিয়ামে বর্তমান নিবন্ধের জন্য bar_index মান হিসাবে পুনরায় ইনস্টল করা হবে।
ভ্যারাইপ কীওয়ার্ডের জন্য অবজেক্টের ধরন
//@version=5
indicator("Objects using `varip` fields demo")
//@type A custom type that counts the bars and ticks in the script's execution.
type Counter
int bars = 0
varip int ticks = 0
//@variable A `Counter` object whose reference persists throughout all bars.
var Counter counter = Counter.new()
// Add 1 to the `bars` and `ticks` fields. The `ticks` field is not subject to rollback on unconfirmed bars.
counter.bars += 1
counter.ticks += 1
// Plot both fields for comparison.
plot(counter.bars, "Bar counter", color.blue, 3)
plot(counter.ticks, "Tick counter", color.purple, 3)
পাইনে, ভ্যারাইপ কীওয়ার্ড ব্যবহার করা হয় যা নির্দেশ করে যে একটি বস্তুর ক্ষেত্রটি স্ক্রিপ্টের কার্যকরকরণের সময় ধরে স্থায়ীভাবে বিদ্যমান থাকবে, যা অনিশ্চিত কলামে ফিরে যাবে না। কাউন্টার টাইপের বিবৃতিতে, bars ক্ষেত্রটি varip কীওয়ার্ড ব্যবহার করে না, তাই এটি প্রতিটি অনিশ্চিত কলামে ফিরে যায়; ticks ক্ষেত্রটি varip কীওয়ার্ড ব্যবহার করে, তাই এটি অনিশ্চিত কলামে ফিরে যায় না। counter অবজেক্টটি var কীওয়ার্ড ব্যবহার করে ঘোষণা করা হয়, তাই এটি স্ক্রিপ্টের পুরো কার্যকরকরণের সময় অব্যাহত থাকবে। প্রতিটি আইডেরেশনে, bars ক্ষেত্র এবং ticks ক্ষেত্র উভয়ই 1 যোগ করা হয়। bars ক্ষেত্রটি প্রতিটি অনিশ্চিত কলামে রোল করবে, কিন্তু ticks ক্ষেত্রটি রোল করবে না। অবশেষে, counter.bars এবং counter.ticks ক্ষেত্রগুলি অঙ্কন করে তাদের মধ্যে পার্থক্য তুলনা করা যায়। counter.bars এর মানগুলি প্রতিটি অনিশ্চিত কলামের মধ্যে পিছনে ফিরে যাবে, যখন counter.ticks এর মানগুলি স্ক্রিপ্টটি শেষ না হওয়া পর্যন্ত বৃদ্ধি পাবে।
ক্ষেত্রের মান পরিবর্তন করুন
type order
float price
float amount
string symbol
if strategy.position_size == 0 and open > close
strategy.entry("long", strategy.long, 1)
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)
if strategy.position_size != 0
runtime.log(order1)
order1.price := 999
order1.amount := 100
runtime.log(order1)
runtime.error("stop")
ব্যবহার করা যাবে:=
পুনরায় নির্ধারণ অপারেটরটি বস্তুর ক্ষেত্রের মান পরিবর্তন করে।
বস্তুর সমষ্টি
উদাহরণস্বরূপ একটি ফাঁকা অ্যারে ঘোষণা করে যা ব্যবহারকারীর দ্বারা সংজ্ঞায়িত অর্ডার টাইপের বস্তু সংরক্ষণ করেঃ
type order
float price
float amount
string symbol
arrOrder = array.new<order>()
order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")
array.push(arrOrder, order1)
array.push(arrOrder, order2)
runtime.log(arrOrder)
runtime.error("stop")
অথবা
type order
float price
float amount
string symbol
var array<order> arrOrder = na
arrOrder := array.new<order>()
order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")
array.push(arrOrder, order1)
array.push(arrOrder, order2)
runtime.log(arrOrder)
runtime.error("stop")
কপি করা বস্তু
পাইনে, অবজেক্টগুলি রেফারেন্স দ্বারা বরাদ্দ করা হয়। যখন বিদ্যমান অবজেক্টগুলি নতুন ভেরিয়েবলগুলিতে বরাদ্দ করা হয়, তখন উভয়ই একই অবজেক্টের দিকে নির্দেশ করে।
//@version=5
indicator("")
type pivotPoint
int x
float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivot1
pivot2.x := 2000
// Both plot the value 2000.
plot(pivot1.x)
plot(pivot2.x)
নিচের উদাহরণে, আমরা একটি pivot1 অবজেক্ট তৈরি করি এবং এর x ক্ষেত্রটি 1000 এ সেট করি। তারপর আমরা একটি pivot2 ঘোষণা করি যা এই pivot1 অবজেক্টের রেফারেন্স ধারণ করে, তাই উভয়ই একই উদাহরণে নির্দেশ করে। সুতরাং, pivot2.x পরিবর্তন করলে pivot1.x পরিবর্তন হবে, কারণ উভয়ই একই x অবজেক্টের ক্ষেত্রের রেফারেন্স করে।
মূল বস্তুর থেকে পৃথক অনুলিপি তৈরি করতে, আমরা এই ক্ষেত্রে বিল্ট-ইন কপি ((() পদ্ধতি ব্যবহার করতে পারি। এই উদাহরণে, আমরা pivot2 কে pivot1 বস্তুর অনুলিপি ইনস্ট্যান্সের ভেরিয়েবলের সাথে উল্লেখ করেছি। এখন, pivot2.x পরিবর্তন করা pivot1.x পরিবর্তন করবে না, কারণ এটি x এর একটি পৃথক বস্তুর ক্ষেত্রকে নির্দেশ করেঃ
//@version=5
indicator("")
type pivotPoint
int x
float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivotPoint.copy(pivot1)
pivot2.x := 2000
// Plots 1000 and 2000.
plot(pivot1.x)
plot(pivot2.x)
মনে রাখবেন যে ট্রেডিং ভিউতে কপি করার পদ্ধতিটি হ'ল শূন্য কপি। যদি বস্তুর একটি বিশেষ ধরণের ক্ষেত্র থাকে (যেমন অ্যারে) তবে বস্তুর শূন্য কপিতে থাকা ক্ষেত্রগুলি একই বস্তুর সাথে একই ইনস্ট্যান্সের দিকে নির্দেশ করবে। এফএমজেড প্ল্যাটফর্ম সরাসরি গভীর অনুলিপি বাস্তবায়ন করে এবং অতিরিক্ত প্রক্রিয়াকরণের প্রয়োজন হয় না।
গভীর কপি
//@version=5
indicator("test deepCopy")
type orderInfo
float price
float amount
type labelInfo
orderInfo order
string labelMsg
labelInfo1 = labelInfo.new(orderInfo.new(100, 0.1), "test labelInfo1")
labelInfo2 = labelInfo.copy(labelInfo1)
labelInfo1.labelMsg := "labelInfo1->2" // 修改 labelInfo1 的基础类型字段,看是否影响 labelInfo2
labelInfo1.order.price := 999 // 修改 labelInfo1 的复合类型字段,看是否影响 labelInfo2
runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")
পরীক্ষার ফলাফল, labelInfo.copy ((labelInfo1) চালানোর সময় গভীর অনুলিপি করা হয়, labelInfo1 এর কোনও ক্ষেত্র পরিবর্তন করা labelInfo2 এর উপর প্রভাব ফেলবে না।
পাইন ভাষার পদ্ধতি হল নির্দিষ্ট উদাহরণগুলির অন্তর্নির্মিত বা ব্যবহারকারীর দ্বারা সংজ্ঞায়িত প্রকারের সাথে সম্পর্কিত বিশেষ ফাংশনসমূহ। বেশিরভাগ ক্ষেত্রে, এগুলি নিয়মিত ফাংশনের সাথে মূলত একই রকম, তবে সংক্ষিপ্ত, আরও সুবিধাজনক সিনট্যাক্স সরবরাহ করে। ব্যবহারকারীরা সরাসরি পয়েন্ট চিহ্নগুলি ব্যবহার করে ভেরিয়েবলগুলিতে পদ্ধতিগুলি অ্যাক্সেস করতে পারে, যেমন পাইন বস্তুর ক্ষেত্রগুলি অ্যাক্সেস করতে পারে। পাইনে সমস্ত বিশেষ ধরণের অন্তর্নির্মিত পদ্ধতি রয়েছে, যার মধ্যে রয়েছে গ্রুপ সংখ্যা, ম্যাট্রিক্স, ম্যাপিং, লাইন, ফিলিং লাইন ইত্যাদি। এই পদ্ধতিগুলি ব্যবহারকারীদের স্ক্রিপ্টে এই ধরণের বিশেষ প্রোগ্রামগুলি কল করার জন্য আরও সংক্ষিপ্ত উপায় সরবরাহ করে।
অভ্যন্তরীণ পদ্ধতি
উদাহরণস্বরূপ, এইরকম একটি স্ক্রিপ্ট কোডঃ
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
array.push(sourceArray, sourceInput)
array.shift(sourceArray)
// Update the mean and standard deviaiton values.
sampleMean := array.avg(sourceArray)
sampleDev := array.stdev(sourceArray) * multiplier
// Calculate bands.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
এর সমতুল্য হতে পারেঃ
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
sourceArray.push(sourceInput)
sourceArray.shift()
// Update the mean and standard deviaiton values.
sampleMean := sourceArray.avg()
sampleDev := sourceArray.stdev() * multiplier
// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
আপনি দেখতে পাচ্ছেন যে পাইন সমর্থন করে।Methods
তারপর, কোডarray.avg(sourceArray)
ব্যবহারকারীর জন্য পদ্ধতির ফর্মটি লিখতে পারেনঃsourceArray.avg()
◄
বিঃদ্রঃ এফএমজেড বর্তমানে সমর্থিত নয়array.avg
এই ধরনের কলিং।
ব্যবহারকারীর দ্বারা সংজ্ঞায়িত পদ্ধতি
পাইন ব্যবহারকারীকে একটি কাস্টম পদ্ধতি সংজ্ঞায়িত করতে দেয় যা কোনও অন্তর্নির্মিত বা ব্যবহারকারী-সংজ্ঞায়িত ধরণের বস্তুর সাথে ব্যবহার করা হয়। সংজ্ঞায়িত পদ্ধতিগুলি মূলত সংজ্ঞায়িত ফাংশনের সাথে একই, তবে দুটি মূল পার্থক্য রয়েছেঃ
১, method কীওয়ার্ডটি ফাংশনের নামের আগে থাকতে হবে । ২. পদ্ধতির পরামিতি, যার প্রথম পরামিতির প্রকারটি স্পষ্টভাবে ঘোষণা করা আবশ্যক, কারণ এটি পদ্ধতির সাথে সম্পর্কিত বস্তুর প্রকারকে নির্দেশ করে।
উদাহরণস্বরূপ, নিম্নলিখিত কোডগুলির মধ্যে একটি ব্যবহারকারীর কাস্টমাইজড পদ্ধতিতে ব্রিন সূচক গণনা করার জন্য কোডটি আবরণ করুনঃ
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
sourceArray.push(sourceInput)
sourceArray.shift()
// Update the mean and standard deviaiton values.
sampleMean := sourceArray.avg()
sampleDev := sourceArray.stdev() * multiplier
// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
পরিবর্তন করা হয়েছেঃ
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sour
উহুওয়ানআপনি কি একই সময়ে একাধিক লেনদেনের জন্য বিএনইউ চুক্তি চান?
হালকা মেঘদয়া করে আমাকে বলুন, পাইন কি একাধিক লেনদেন করতে পারে? অথবা JS এর মতো লেনদেন করতে পারে? ধন্যবাদ।
লিসা ২০২৩১বিস্তারিত তথ্যের জন্য ধন্যবাদ।
শিল্পকলাওহো! এই পাইন স্ক্রিপ্টটি কীভাবে প্ল্যাটফর্মে ওকেএক্সের সিমুলেটর ব্যবহার করে?
শিল্পকলাএটি ট্রেডিংভিউ প্ল্যাটফর্মের কৌশলগুলি সরাসরি ইনভেন্টর প্ল্যাটফর্মে অনুলিপি করার সমান!
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নপাইন ভাষা শুধুমাত্র একক প্রজাতির কৌশলগুলি করতে পারে, তবে বহু-প্রজাতির কৌশলগুলি পাইথন, জাভাস্ক্রিপ্ট, সি ++ এ ডিজাইন করা ভাল।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নওহ, হ্যাঁ, ওকেএক্স বিশেষ, তাদের অ্যানালগ পরিবেশ এবং বাস্তব পরিবেশ একই ঠিকানা আছে, কিন্তু অন্য কোথাও পার্থক্য করা হয়। সুতরাং একটি বেস ঠিকানা পরিবর্তন করার জন্য একটি উপায় নেই, একটি অ্যানালগ ডিস্ক পরিবর্তন করতে।
হালকা মেঘokx অ্যালগরিদম ডিস্ক ব্যবহার করা যাবে না ।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নএই বৈচিত্র্যপূর্ণ আর্কিটেকচার সমস্যার সমাধান করা যায় না, কারণ প্রতিটি এক্সচেঞ্জের ইন্টারফেস আলাদা এবং ইন্টারফেস ফ্রিকোয়েন্সি সীমাবদ্ধতাও একই নয়, যা অনেক সমস্যা সৃষ্টি করে।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নভাল, আপনার পরামর্শের জন্য আপনাকে ধন্যবাদ, এই অনুরোধটি এখানে জানান।
হালকা মেঘএটি JS এর সাথে মিশ্রিত করা ভাল বলে মনে হচ্ছে, যা বিভিন্ন লেনদেনের পদ্ধতিতে আরও ভালভাবে মানিয়ে নিতে পারে।
ট্রেন্ড হান্টারআপনি কি মনে করেন যে, আপনি যদি আপনার পণ্যের জন্য একটি নতুন পণ্যের সন্ধান করতে চান তবে আপনি কি ভবিষ্যতে আরও বিভিন্ন ধরণের পণ্য বিবেচনা করবেন?
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নঅযৌক্তিক ।
হালকা মেঘভাল, ধন্যবাদ ড্রিম।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নহ্যালো, পিআইএনই ভাষার কৌশলটি সাময়িকভাবে শুধুমাত্র একটি জাতের জন্য কাজ করে।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নঅযৌক্তিক, আপনার সমর্থনের জন্য ধন্যবাদ।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নহ্যাঁ।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নPINE টেমপ্লেট ক্লাস ল্যাবরেটরি, যার প্যারামিটারে বিনিময় স্থানান্তর বেস ঠিকানা সেট করা যেতে পারে। নথির শুরুঃ PINE ভাষা বিনিময় ক্লাস ল্যাবরেটরি টেমপ্লেট প্যারামিট।