[TOC]
পাইনে কোডের সাধারণ কাঠামো নিম্নরূপঃ
<version>
<declaration_statement>
<code>
নোটঃ এফএমজেডের পাইন ভাষায় সমর্থিত প্রতীকঃ এক-লাইন নোট//
, বহু-রেখা নোট/* */
, যেমন নিচের উদাহরণে উল্লেখিত নোট পদ্ধতিঃ
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // calculate the MACD indicator
/*
The plot function draws the indicator line on the chart
*/
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()
ডিক্লারেশন বিবৃতি অবশ্যই একটি কৌশল কোড মধ্যে অন্তর্ভুক্ত করা আবশ্যক পাইন এর FMZ.
স্ক্রিপ্টের লাইনগুলি যা মন্তব্য বা কম্পাইলারের নির্দেশাবলী নয়, যা স্ট্রিং, যা স্ক্রিপ্টের অ্যালগরিদম বাস্তবায়ন করে। একটি স্ট্রিং এই সামগ্রীগুলির মধ্যে একটি হতে পারে।
if
, for
, while
অথবাswitch
এবং অন্যান্য নির্মাণবিবৃতি বিভিন্ন উপায়ে সাজানো যেতে পারে
space
অথবাtab
(ট্যাব কী) তাদের প্রথম অক্ষরটি অবশ্যই লাইনের প্রথম অক্ষর হতে হবে। একটি লাইনের প্রথম অবস্থানে শুরু হওয়া লাইনগুলি সংজ্ঞা অনুসারে স্ক্রিপ্টের গ্লোবাল সুযোগের অংশ।local block
সর্বদা কাঠামো বা মাল্টি-লাইন ফাংশন ঘোষণার জন্য প্রয়োজন হয়। একটি স্থানীয় ব্লককে একটি ট্যাব বা চারটি স্পেস দ্বারা ইন্ডেন্ট করা উচিত (অন্যথায়, এটি পূর্ববর্তী লাইনের সংযুক্ত কোড হিসাবে বিশ্লেষণ করা হবে, যা কোডের পূর্ববর্তী লাইনের অবিচ্ছিন্ন সামগ্রী হিসাবে নির্ধারিত হয়) এবং প্রতিটি স্থানীয় ব্লক একটি ভিন্ন স্থানীয় সুযোগ সংজ্ঞায়িত করে।উদাহরণস্বরূপ, তিনটি স্থানীয় ব্লক অন্তর্ভুক্ত করুন, একটি কাস্টম ফাংশন ঘোষণায়, এবং দুটি যদি কাঠামো ব্যবহার করে পরিবর্তনশীল ঘোষণায়, নিম্নরূপঃ
indicator("", "", true) // Declaration statement (global scope), can be omitted
barIsUp() => // Function declaration (global scope)
close > open // Local block (local scope)
plotColor = if barIsUp() // Variable declaration (global scope)
color.green // Local block (local scope)
else
color.red // Local block (local scope)
runtime.log("color", color = plotColor) // Call a built-in function to output the log (global scope)
দীর্ঘ রেখাগুলি একাধিক রেখায় বিভক্ত করা যেতে পারে, বা
a = open + high + low + close
এটি এভাবে প্যাকেজ করা যায় (দ্রষ্টব্য যে প্রতি লাইনে ইন্ডেন্টযুক্ত স্পেসগুলির সংখ্যা 4 এর গুণিতক নয়):
a = open +
high +
low +
close
একটি দীর্ঘ প্লট ((() কল এভাবে আবৃত করা যেতে পারেঃ
close1 = request.security(syminfo.tickerid, "D", close) // closing price data series of syminfo.tickerid daily level of the current trading pair
close2 = request.security(syminfo.tickerid, "240", close) // closing price data series of syminfo.tickerid 240-minute level of the current trading pair
plot(ta.correlation(close, open, 100), // Line-long plot() calls can be wrapped
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
অন্তর্নির্মিত পরিবর্তনশীল প্রতিটি int প্রতিনিধিত্ব BAR এর উদ্বোধনী মূল্য রেকর্ড করে, যদি এইopen
একটি 5 মিনিট int প্রতিনিধিত্ব সময়কাল তথ্য. তারপর এইopen
পরিবর্তনশীল প্রতিটি 5-মিনিট int প্রতিনিধিত্ব BAR (বার) এর উদ্বোধনী মূল্য রেকর্ড করে। যখন আপনার কৌশল প্রোগ্রাম কার্যকর হয়,open
কোড বর্তমান int প্রতিনিধিত্ব BAR এর উদ্বোধনী মূল্য বোঝায়। সময় সিরিজের পূর্ববর্তী মান (পূর্ববর্তী মান) উল্লেখ করার জন্য, আমরা[]
ইতিহাস অপারেটর. যখন কৌশল একটি নির্দিষ্ট int প্রতিনিধিত্ব BAR উপর চালানো হয়,open[1]
এর অর্থ হল বর্তমান int প্রতিনিধিত্ব BAR এর পূর্ববর্তী int প্রতিনিধিত্ব BAR এর উদ্বোধনী মূল্য উল্লেখ করা।
যদিওসময় সিরিজএটি
পাইন ভাষায় পরিকল্পিত সময় সিরিজ সহজেই কৌশল কোড মধ্যে বন্ধ মূল্যের সমষ্টিগত মান গণনা করতে পারেন, এবং যেমন লুপ কাঠামো ব্যবহার করার প্রয়োজন নেই, শুধুমাত্র অন্তর্নির্মিত ফাংশনta.cum(close)
আরেকটি উদাহরণের জন্য, আমাদের সর্বশেষ 14 int প্রতিনিধিত্ব BAR এর সর্বোচ্চ মূল্য এবং সর্বনিম্ন মূল্যের মধ্যে পার্থক্যের গড় মান গণনা করতে হবে (অর্থাৎ, কোডটি কার্যকর হওয়ার বর্তমান মুহুর্তের নিকটতম 14 int প্রতিনিধিত্ব BAR), যা লিখতে পারেঃta.sma(high - low, 14)
একটি টাইম সিরিজে ফাংশন কল করার ফলাফলটিও টাইম সিরিজে একটি ট্রেস ছেড়ে যাবে, আবার আমরা[]
ইতিহাস অপারেটর পূর্ববর্তী মান উল্লেখ করতে. উদাহরণস্বরূপ, বর্তমান int উপস্থাপনা BAR এর বন্ধ মূল্য সর্বশেষ 10 int উপস্থাপনা BAR এর সর্বোচ্চ মূল্যের সর্বোচ্চ মান অতিক্রম করে কিনা তা পরীক্ষা করার সময় (বর্তমান int উপস্থাপনা 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 এর মান সর্বদা সমান, তাই এই দুটি উপস্থাপনা পদ্ধতি সমতুল্য।
PINE কৌশলটির অন্তর্নির্মিত টেমপ্লেট
Pricing Currency Precision
উদাহরণস্বরূপ, মূল্য নির্ধারণের মুদ্রার যথার্থতা 2 এ সেট করা হয়, যা দ্বিতীয় দশমিক বিন্দুতে সঠিক, 0.01 এর সঠিক। তারপরে প্রতিটি স্লিপ পয়েন্ট 0.01 মূল্য ইউনিটকে উপস্থাপন করে। এই সময়ে, স্লিপ পয়েন্টটি 5 এ সেট করা হয়, এবং অর্ডার দেওয়ার সময় স্লিপ 0.05 হয় (স্লিপিং অর্ডারটি আরও ভাল এবং হ্যান্ডিপেড অর্ডার ট্রেড করার জন্য অর্ডার দেওয়ার সময় দামের অংশকে বোঝায়) ।SetMaxBarLen
মধ্যেjavascript
srategy.strategy(title = "open long example", pyramiding = 3) // The number of orders placed in the same direction allowed by pyramiding
strategy.entry("long1", strategy.long, 0.01) // Open a long position at the market price, specify the group label as long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10)) // The condition is triggered, the order is executed, and the market price opens a long position
strategy.entry("long3", strategy.long, 0.03, limit = 30000) // Specify the (lower) price, plan to place a buy order, wait for a deal to open a position, and open a position at a limit price
strategy(title = "close long example", pyramiding = 2) // The number of orders placed in the same direction allowed by pyramiding
strategy.entry("long1", strategy.long, 0.1) // Open a long position at the market price, specify the group label as long1
strategy.entry("long2", strategy.long, 0.1) // Open a long position at the market price, specify the group label as long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%") // To close a position, specify to close 50% of the positions whose group label is long1
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%") // To close a position, specify to close 80% of the positions whose group label is long2
PINE ভাষার অবস্থান প্রক্রিয়া একমুখী অবস্থানের অনুরূপ। উদাহরণস্বরূপ, দীর্ঘ দিকের অবস্থানে (দীর্ঘ অবস্থান) একটি অবস্থান ধরে রাখার সময়, যদি বিক্রয় অপারেশন জন্য একটি অর্ডার, একটি পরিকল্পিত অর্ডার, ইত্যাদি (পজিশনের বিপরীত দিকের) থাকে তবে মৃত্যুদন্ড কার্যকর করা হবে, এবং দীর্ঘ দিকের অবস্থানটি প্রথমে বন্ধ করা হবে। (সমস্ত দীর্ঘ অবস্থান বন্ধ করুন), এবং তারপর ট্রিগার অর্ডারটি কার্যকর করুন (বন্ধ হওয়ার আগে অবস্থানের তুলনায় বিপরীত দিকের দিকে) ।
অর্ডার প্লেসমেন্ট কমান্ড ব্যবহার করে অর্ডার দেওয়ার সময়, যদি কোনও মূল্য নির্দিষ্ট না করা হয় তবে ডিফল্টটি একটি বাজার অর্ডার। বাজার অর্ডার ছাড়াও, আপনি একটি পরিকল্পিত অর্ডারের মাধ্যমেও অর্ডার দিতে পারেন, যা অর্ডার দেওয়ার জন্য তাত্ক্ষণিকভাবে কাজ করে না। পরিকল্পিত অর্ডারটি প্রোগ্রামের পরিকল্পিত অর্ডার সারিতে বিদ্যমান যখন এটি ট্রিগার হয় না এবং স্ট্যাটাস তথ্যের strategy.entry
ফাংশন একটি অর্ডার স্থাপন করতে, আমরা নির্দিষ্ট করতে পারেনlimit
, stop
arguments.
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)
// Simple moving average crossover strategy
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
// If the moving average crossover condition is met, buy or sell
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। অর্ডার পরিমাণ অ্যাকাউন্টে নামযুক্ত মুদ্রার পরিমাণ অনুযায়ী গণনা করা হয়। উদাহরণস্বরূপঃ যদি বর্তমান অ্যাকাউন্টে 10,000 ইউএসডিটি থাকে তবে 1% অর্ডার স্থাপন করার অর্থ 100 ইউএসডিটি স্কেল সহ একটি অর্ডার স্থাপন করা (বিক্রয় করার সময় বর্তমান মূল্যের ভিত্তিতে গণনা করা) ।
var একটি কীওয়ার্ড যা ভেরিয়েবল বরাদ্দ এবং এককালীন প্রারম্ভিকীকরণের জন্য ব্যবহৃত হয়।
সাধারণভাবে, ভেরিয়েবল অ্যাসাইনমেন্ট ব্যাকরণ যা কীওয়ার্ড var ধারণ করে না তার ফলে যখনই ডেটা আপডেট করা হয় তখনই ভেরিয়েবল
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)
// Test var varip
var i = 0
varip ii = 0
// Print the i and ii changed in each round of the strategy logic on the graph
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)
// Each round of logic execution increments i and ii by 1
if true
i := i + 1
ii := ii + 1
রিয়েল-টাইম মূল্য মডেল
উপরের পরীক্ষার কোডটি দুটি পর্যায়ে সম্পাদিত হয়ঃ 1. historical int representation phase. 2. real-time int representation phase. real-time price model, historical int representation phase, the variables i and ii declared byvar
, varip
কৌশল কোড কার্যকর করার প্রতিটি রাউন্ডে ধীরে ধীরে কার্যকর করা হয় (কারণif true
সুতরাং, এটি দেখা যায় যে ব্যাকটেস্টের ফলাফলের int প্রতিনিধিত্ব BAR এ প্রদর্শিত সংখ্যাগুলি একের পর এক 1 দ্বারা বৃদ্ধি পায়। যখন ঐতিহাসিক int প্রতিনিধিত্বের ধাপ শেষ হয়, তখন রিয়েল-টাইম int প্রতিনিধিত্বের ধাপ শুরু হয়।var
, varip
ঘোষিত ভেরিয়েবলগুলি ভিন্নভাবে পরিবর্তন করতে শুরু করে। কারণ এটি একটি রিয়েল-টাইম মূল্য মডেল, কৌশল কোডটি একটি int প্রতিনিধিত্ব BAR এ প্রতিটি মূল্য পরিবর্তনের জন্য একবার কার্যকর করা হবে,i := i + 1
এবংii := ii + 1
i-এর মান পুনরুদ্ধার করা হবে না যতক্ষণ না বর্তমান int প্রতিনিধিত্ব BAR সম্পন্ন হয় (অর্থাৎ, পূর্ববর্তী মান পুনরুদ্ধার করা হবে না যখন কৌশল যুক্তি পরবর্তী রাউন্ডে কার্যকর করা হয়) । সুতরাং এটি দেখা যায় যে পরিবর্তনশীল i এখনও প্রতিটি BAR এর জন্য 1 দ্বারা বৃদ্ধি পায়। কিন্তু পরিবর্তনশীল ii প্রতিটি BAR এর জন্য বেশ কয়েকবার জমা হয়।
ক্লোজিং মূল্য মডেল
যেহেতু বন্ধ মূল্য মডেল প্রতি int প্রতিনিধিত্ব BAR চলে গেছে শুধুমাত্র একবার কৌশল যুক্তি বাস্তবায়ন করে. তাই পরিবর্তনশীল দ্বারা ঘোষিতvar
এবংvarip
উপরের উদাহরণে, উভয় ঐতিহাসিক int প্রতিনিধিত্ব পর্যায়ে এবং রিয়েল টাইম int প্রতিনিধিত্ব পর্যায়ে, বন্ধ মূল্য মডেলের ঠিক একই ক্রমবর্ধমান আচরণ, প্রতি int প্রতিনিধিত্ব BAR প্রতি 1 দ্বারা বৃদ্ধি।
varp (var intrabar persist) একটি কীওয়ার্ড যা ভেরিয়েবলকে বরাদ্দ এবং এককালীন সূচনা করার জন্য ব্যবহৃত হয়। এটি var কীওয়ার্ডের অনুরূপ, তবে ভেরিয়েবলের সাথে ঘোষিত একটি ভেরিয়েবল লাইভ ক্যান্ডেলস্টিক আপডেটের মধ্যে এর মান ধরে রাখে।
varip variable_name = expression
ব্যাখ্যাঃ
variable_name
- পাইন স্ক্রিপ্টে ব্যবহারকারীর ভেরিয়েবলের যে কোনও নাম অনুমোদিত (এতে বড় এবং ছোট ল্যাটিন অক্ষর, সংখ্যা এবং underscores (_) থাকতে পারে, তবে এটি একটি সংখ্যার সাথে শুরু হতে পারে না) ।expression
- যে কোন গাণিতিক অভিব্যক্তি, যেমন সময় নিয়মিত ভেরিয়েবল সংজ্ঞায়িত। প্রথম K-লাইন বারে, অভিব্যক্তি মূল্যায়ন করা হয় এবং শুধুমাত্র একবার ভেরিয়েবল নির্ধারিত হয়।উদাহরণ
// varip
varip int v = -1
v := v + 1
plot(v)
var ব্যবহার করার সময়, প্লটটি bar_index এর মান প্রদান করবে। varip এর সাথে, একই আচরণ ঐতিহাসিক বারগুলিতে ঘটে, কিন্তু লাইভ বারগুলিতে, চার্টটি একটি মান প্রদান করে যা প্রতিটি টিকের জন্য এক দ্বারা বৃদ্ধি পায়।
মন্তব্যসমূহএটি শুধুমাত্র float, int, bool, string, এবং এই ধরনের অ্যারেগুলির মতো সহজ প্রকারের সাথে ব্যবহার করা যেতে পারে।
এটি একটি বুল ভেরিয়েবলের মানকে উপস্থাপন করে, অথবা একটি মান যা গণনা করা যায় যখন একটি এক্সপ্রেশন একটিতুলনাঅথবাযৌক্তিক operator.
মন্তব্যসমূহঅনুগ্রহ করে বর্ণনা দেখুনতুলনাঅপারেটর এবংযুক্তিসঙ্গত Operators.
আরও দেখুন
bool
এটি একটি বুল ভেরিয়েবলের মান এবং তুলনা অপারেশন এবং যৌক্তিক অপারেশনগুলির ফলাফলকে উপস্থাপন করে।
মন্তব্যসমূহঅনুগ্রহ করে বর্ণনা দেখুনতুলনাঅপারেটর এবংযুক্তিসঙ্গত Operators.
আরও দেখুন
bool
একটি If স্ট্রাকশন এমন একটি স্ট্রাকশন ব্লককে সংজ্ঞায়িত করে যা একটি অভিব্যক্তির শর্ত পূরণ হলে কার্যকর করা আবশ্যক। পাইন স্ক্রিপ্টিং ভাষার সংস্করণ 4 আপনাকে
ইউনিভার্সাল কোডঃ
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
, ইত্যাদি) যদি শর্ত মিথ্যা হয়, বিবৃতি ব্লক মধ্যে যুক্তিelse if
অথবাelse
ব্যবহার করা হয় (var_decl_else0
, var_decl_else1
ইত্যাদি) ।return_expression_then
এবংreturn_expression_else
- মডিউলের শেষ এক্সপ্রেশন বা অন্য ব্লক থেকে এক্সপ্রেশনটি বিবৃতির চূড়ান্ত মান প্রদান করে। যদি পরিবর্তনশীলটি সর্বশেষ ঘোষিত হয় তবে এর মান ফলাফল মান হবে।
if বিবৃতির রিটার্ন মানের ধরন নির্ভর করেreturn_expression_then
এবংreturn_expression_else
. ট্রেডিং ভিউতে চালানোর সময়, তাদের প্রকারগুলি অবশ্যই মেলেঃ যখন আপনার অন্য ব্লকে একটি স্ট্রিং মান থাকে, তখন সেই ব্লক থেকে একটি পূর্ণসংখ্যা মান ফেরত দেওয়া সম্ভব নয়। যখন এফএমজেডে চালানো হয়, নিম্নলিখিত উদাহরণটি কোনও ত্রুটি রিপোর্ট করবে না। যখন y মানটি
উদাহরণ
// 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 ভেরিয়েবলকে একটি
উদাহরণ
// 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)
[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 এর চেয়ে ছোট) । step_num
- কাউন্টারের ইনক্রিমেন্ট/ডিগ্রামেন্ট মান। এটি ঐচ্ছিক। ডিফল্ট হল +1 বা -1, যা from_num বা to_num এর বৃহত্তমটির উপর নির্ভর করে। মান ব্যবহার করার সময়, কাউন্টারটিও from_num বা to_num এর বৃহত্তমটির উপর ভিত্তি করে ইনক্রিমেন্টেড/ডিগ্রামেন্টেড হয়, তাই step_num এর +/- চিহ্নটি ঐচ্ছিক।statements | continue | break
- যে কোন সংখ্যক বিবৃতি, অথবা return_expression
- লুপের রিটার্ন ভ্যালু, যদি উপস্থিত থাকে, var_declaration এর ভেরিয়েবলকে নির্ধারিত হয়। যদি লুপটি 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
construct অ্যারেতে প্রতিটি উপাদানের জন্য একাধিক বিবৃতি পুনরাবৃত্তি করার অনুমতি দেয়। এটি যে কোনও আর্গুমেন্টের সাথে ব্যবহার করা যেতে পারেঃ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
- যে কোন সংখ্যক বিবৃতি, অথবা return_expression
- লুপের রিটার্ন মানটি ভেরিয়েবলকে নির্ধারিত হয়var_declaration
continue
- একটি কীওয়ার্ড যা শুধুমাত্র লুপে ব্যবহার করা যেতে পারে. এটি লুপের পরবর্তী পুনরাবৃত্তি চালানোর কারণ হয়.break
- চক্র থেকে বেরিয়ে আসার কীওয়ার্ড।
একটি লুপের মধ্যে একটি অ্যারে বা তাদের আকারের উপাদানগুলি সংশোধন করার অনুমতি দেয়।
এখানে, আমরা এক-অর্গুমেন্ট ফর্ম ব্যবহার করিfor...in
প্রতিটি বারের জন্য কতটি বারের OHLC মান
উদাহরণ
// 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
statement.
continue
- দ্যcontinue
কীওয়ার্ড লুপকে পরবর্তী পুনরাবৃত্তিতে শাখা করতে বাধ্য করে।break
- দ্যbreak
কীওয়ার্ড লুপের সমাপ্তির কারণ হয়. স্ক্রিপ্ট চালানো পুনরায় শুরু হয়while
statement.
return_expression
- অপশনাল লাইন যা রিটার্ন মান প্রদান করেwhile
statement.
উদাহরণ
// 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
নির্দিষ্ট করা হয় না, বিবৃতি রিটার্ন করেna
যদিlocal_block
একটি ফলাফল বরাদ্দ করার সময়switch
একটি ভেরিয়েবলের জন্য বিবৃতি, সবlocal_block
ইনস্ট্যান্সগুলি অবশ্যই একই ধরণের মান ফেরত দিতে হবে।
আরও দেখুন
if
?:
series একটি কীওয়ার্ড যা ডেটা সিরিজের ধরন নির্দেশ করে।series
keyword.
ভেরিয়েবলের মান নির্ধারণ করতে ব্যবহৃত হয়, কিন্তু শুধুমাত্র যখন ভেরিয়েবলটি ঘোষণা করা হয় (প্রথমবার ব্যবহার করা হয়) ।
অ্যাসাইনমেন্ট অপারেটর বাম দিকে ভেরিয়েবলের একটি মান বরাদ্দ করে। পূর্বে ঘোষিত ভেরিয়েবলের মান বরাদ্দ করতে ব্যবহৃত হয়।
এর সমান নয়. যে কোন ধরনের অভিব্যক্তিতে প্রযোজ্য।
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
রিটার্নবাইনারি+
স্ট্রিং এর expr1 এবং expr2 সমন্বয় ফেরৎ
সংখ্যা একটি পূর্ণসংখ্যা বা ভাসমান বিন্দু মান বা মানের ক্রম প্রদান করেঃ
বাইনারি
মন্তব্যসমূহআপনি সংখ্যার পাশাপাশি সিরিজ ভেরিয়েবলগুলির সাথে গাণিতিক অপারেটরগুলি ব্যবহার করতে পারেন। সিরিজের সাথে ব্যবহারের ক্ষেত্রে অপারেটরগুলি উপাদান অনুসারে প্রয়োগ করা হয়।
সংযোজনীয় বরাদ্দ। সংখ্যাসূচক অভিব্যক্তি বা স্ট্রিংগুলিতে প্রযোজ্য।
expr1 += expr2
উদাহরণ
// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)
রিটার্নস্ট্রিংগুলির জন্য, expr1 এবং expr2 এর সংযুক্তি প্রদান করে। সংখ্যাগুলির জন্য, একটি পূর্ণসংখ্যা বা ফ্লোট মান, বা মানের সিরিজ প্রদান করে।
মন্তব্যসমূহআপনি সংখ্যার পাশাপাশি সিরিজ ভেরিয়েবলগুলির সাথে গাণিতিক অপারেটরগুলি ব্যবহার করতে পারেন। সিরিজের সাথে ব্যবহারের ক্ষেত্রে অপারেটরগুলি উপাদান অনুসারে প্রয়োগ করা হয়।
বিয়োগ বা একক বিয়োগ। সংখ্যাসূচক অভিব্যক্তিতে প্রযোজ্য।
expr1 - expr2
- expr
রিটার্নএকটি পূর্ণসংখ্যা বা ফ্লোটিং-পয়েন্ট মান, অথবা মানের সিরিজ ফেরত দিনঃ
বাইনারি -
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
statements.
ফাংশন ঘোষণার ব্যাকরণ হলঃ
<identifier>([<argument_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)
রিটার্নexpr2 যদি expr1 true হিসাবে মূল্যায়ন করা হয়, অন্যথায় expr3। শূন্য মান (0 এবং এছাড়াও NaN, +অসীম, -অসীম) মিথ্যা হিসাবে বিবেচিত হয়, অন্য কোন মান সত্য।
মন্তব্যসমূহযদি আপনার এটির প্রয়োজন না হয় তবে
আরও দেখুন
na
সিরিজ সাবস্ক্রিপ্ট. সিরিজ expr1 এর পূর্ববর্তী মান অ্যাক্সেস প্রদান করে। expr2 অতীতে বার সংখ্যা, এবং এটি সংখ্যাগত হতে হবে। ফ্লোটিং নিচে ঘূর্ণিত করা হবে।
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
লজিক্যাল এন্ড। বুলিয়ান এক্সপ্রেশনগুলিতে প্রযোজ্য।
expr1 and expr2
রিটার্নবুলিয়ান মান, বা বুলিয়ান মানের সিরিজ।
লজিক্যাল ওআর। বুলিয়ান এক্সপ্রেশনগুলিতে প্রযোজ্য।
expr1 or expr2
রিটার্নবুলিয়ান মান, বা বুলিয়ান মানের সিরিজ।
লজিক্যাল নেগেশন (NOT) । বুলিয়ান এক্সপ্রেশনগুলিতে প্রযোজ্য।
not expr1
রিটার্নবুলিয়ান মান, বা বুলিয়ান মানের সিরিজ।
একটি ভেরিয়েবল বা আর্গুমেন্টের
উদাহরণ
// 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 textColor = color.green
if barstate.islastconfirmedhistory
runtime.log("test", textcolor = textColor)
মন্তব্যসমূহরঙের লিটরালগুলির নিম্নলিখিত ফর্ম্যাট রয়েছেঃ #RRGGBB বা #RRGGBBAA। অক্ষর জোড়া 00 থেকে FF হেক্সাডেসিমাল মান (0 থেকে 255 দশমিক) উপস্থাপন করে যেখানে RR, GG এবং BB জোড়া হল রঙের
একটি ভেরিয়েবল ঘোষণায় টাইপটি স্পষ্টভাবে উল্লেখ করা ঐচ্ছিক, যদি না এটি na দিয়ে শুরু করা হয়। টাইপ সিস্টেমের ব্যবহারকারী ম্যানুয়াল পৃষ্ঠায় পাইন স্ক্রিপ্ট টাইপ সম্পর্কে আরও জানুন।
আরও দেখুন
var
varip
int
float
string
color.rgb
color.new
একটি ভেরিয়েবল বা একটি আর্গুমেন্টের array.new<type>
, array.from
function.
উদাহরণ
// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))
মন্তব্যসমূহঅ্যারে অবজেক্ট সবসময়
আরও দেখুন
var
array.new
array.from
পাইন ভাষায় অবজেক্টগুলি ব্যবহারকারী-সংজ্ঞায়িত প্রকারের (ইউডিটি) উদাহরণ, যা পদ্ধতিহীন ক্লাস হিসাবে বোঝা যায় যা ব্যবহারকারীদের একটি সত্তার বিভিন্ন মান সংগঠিত করার কৌশলগুলিতে কাস্টম প্রকার তৈরি করতে দেয়।
প্রকারের সংজ্ঞা
আসুন অর্ডার তথ্য সংরক্ষণের জন্য একটি অর্ডার টাইপ সংজ্ঞায়িত করা যাকঃ
type order
float price
float amount
string symbol
type
keyword.বস্তু তৈরি করা
ঘোষিত টাইপ ব্যবহার করে, কল করুন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) // Output {"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 মানটিতে পুনরায় সূচনা করা হবে।
varip কীওয়ার্ড ব্যবহারের জন্য অবজেক্টের ধরন
//@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)
পাইনে, varip কীওয়ার্ডটি নির্দেশ করতে ব্যবহৃত হয় যে একটি অবজেক্টের ক্ষেত্রগুলি স্ক্রিপ্ট এক্সিকিউশন জুড়ে স্থায়ী হয় এবং নিশ্চিত না হওয়া বারগুলিতে ফিরে যায় না। কাউন্টার টাইপের ঘোষণায়, bars ক্ষেত্রটি varip কীওয়ার্ড ব্যবহার করে না, তাই এটি প্রতিটি অনিশ্চিত বারে রোল ব্যাক করে। টিক্স ক্ষেত্রটি varip কীওয়ার্ড ব্যবহার করে, তাই এটি অনিশ্চিত বারে রোল ব্যাক করে না। কাউন্টার অবজেক্টটি var কীওয়ার্ড ব্যবহার করে ঘোষণা করা হয়, তাই এটি স্ক্রিপ্ট এক্সিকিউশন জুড়ে স্থায়ী হয়। প্রতিটি পুনরাবৃত্তিতে, বার ক্ষেত্র এবং টিক ক্ষেত্র উভয়ই 1 দ্বারা বৃদ্ধি পায়। বার ক্ষেত্রটি প্রতিটি অনিশ্চিত বারে ফিরে যায়, যখন টিক ক্ষেত্রটি ফিরে যায় না। অবশেষে, counter.bars এবং counter.ticks ক্ষেত্রগুলি প্লট করে, আপনি তাদের মধ্যে পার্থক্য তুলনা করতে পারেন। counter.bars এর মান প্রতিটি অনিশ্চিত বারে ফিরে যায়, যখন counter.ticks এর মান স্ক্রিপ্ট এক্সিকিউশন শেষ না হওয়া পর্যন্ত বাড়তে থাকে।
ভিক্ষুককেন কৌশল স্কোয়ার অনুলিপি পাইন কৌশল বাস্তবায়ন করতে পারে না
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নঠিক আছে, আমরা পরীক্ষা করে দেখি।
ভিক্ষুকচ্যাং সুপারড্যাং এর অপ্টিমাইজড ট্রেন্ড ট্র্যাকার
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নহ্যালো, কোন কৌশলটি আপনি ব্যবহার করছেন?