রিসোর্স লোড হচ্ছে... লোডিং...

FMZ পাইন স্ক্রিপ্ট ডক

লেখক:উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্ন, সৃষ্টিঃ ২০২২-০৪-২৮ ১৬ঃ০৫:০৫, আপডেটঃ ২০২৪-০১-১২ ১৭ঃ২৫ঃ২৭

[TOC]

img

কীওয়ার্ড, ব্যাকরণ, সেটিংসের ভূমিকা

কোডের গঠন

পাইনে কোডের সাধারণ কাঠামো নিম্নরূপঃ

<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)

নতুন লাইন কোড

দীর্ঘ রেখাগুলি একাধিক রেখায় বিভক্ত করা যেতে পারে, বা wrapped। একটি আবৃত রেখাকে যে কোনও পরিমাণ সাদা স্থান দিয়ে ইন্ডেন্ট করা উচিত, যতক্ষণ না এটি 4 এর গুণক নয় (এই সীমানাগুলি স্থানীয় ব্লকগুলি ইন্ডেন্ট করতে ব্যবহৃত হয়) ।

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 এর উদ্বোধনী মূল্য উল্লেখ করা।

যদিওসময় সিরিজএটি array ডাটা স্ট্রাকচারের খুব অনুরূপ, যদিও PINE ভাষায়ও একটি অ্যারে টাইপ রয়েছে। কিন্তু তারা এবং সময় সিরিজ সম্পূর্ণ ভিন্ন ধারণাগুলি।

পাইন ভাষায় পরিকল্পিত সময় সিরিজ সহজেই কৌশল কোড মধ্যে বন্ধ মূল্যের সমষ্টিগত মান গণনা করতে পারেন, এবং যেমন লুপ কাঠামো ব্যবহার করার প্রয়োজন নেই, শুধুমাত্র অন্তর্নির্মিত ফাংশন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 কৌশলটির অন্তর্নির্মিত টেমপ্লেট Pine Language Trade Class Library এর যুক্তি নির্ধারণের নির্দেশাবলী।

img

ট্রেডিং সেটিংস

  • এক্সিকিউশন মোড ক্লোজিং প্রাইস মডেলঃ মডেলটি বর্তমান BAR সম্পন্ন হওয়ার পরেই কার্যকর হয় এবং পরবর্তী BAR শুরু হলে ট্রেডটি কার্যকর হয়। রিয়েল-টাইম মূল্য মডেলঃ মডেলটি প্রতিবারই কার্যকর করা হয় যখনই মূল্য সরে যায় এবং তাত্ক্ষণিকভাবে বাণিজ্য সম্পাদন করার জন্য একটি সংকেত থাকে।
  • ডিফল্ট ওপেন লটের আকারঃ যদি ট্রেড অর্ডারে ট্রেডের পরিমাণ নির্দিষ্ট না করা হয়, তাহলে সেট পরিমাণ অনুযায়ী ট্রেডটি কার্যকর করা হবে।
  • একক ট্রেডের জন্য সর্বোচ্চ অর্ডার পরিমাণঃ প্রকৃত বাজার এবং এই যুক্তি সেটিং অনুযায়ী বাজারকে প্রভাবিত করা এড়াতে প্রতিটি অর্ডারের সর্বোচ্চ পরিমাণ নির্ধারণ করুন।
  • স্লাইপ পয়েন্টঃ অর্ডার দেওয়ার সময় স্লাইপ পয়েন্ট নির্ধারণ করুন।Pricing Currency Precisionউদাহরণস্বরূপ, মূল্য নির্ধারণের মুদ্রার যথার্থতা 2 এ সেট করা হয়, যা দ্বিতীয় দশমিক বিন্দুতে সঠিক, 0.01 এর সঠিক। তারপরে প্রতিটি স্লিপ পয়েন্ট 0.01 মূল্য ইউনিটকে উপস্থাপন করে। এই সময়ে, স্লিপ পয়েন্টটি 5 এ সেট করা হয়, এবং অর্ডার দেওয়ার সময় স্লিপ 0.05 হয় (স্লিপিং অর্ডারটি আরও ভাল এবং হ্যান্ডিপেড অর্ডার ট্রেড করার জন্য অর্ডার দেওয়ার সময় দামের অংশকে বোঝায়) ।
  • ভেরিয়েবলের দীর্ঘতম সময় সংখ্যাঃ চার্টে K-লাইন BAR এর সংখ্যাকে প্রভাবিত করে। এটি ফাংশনটি কল করার মতোইSetMaxBarLenমধ্যেjavascript srategy.

ফিউচার অপশন

  • বৈচিত্র্য কোডঃ চুক্তির কোড, এটি কেবল তখনই সেট করা প্রয়োজন যখন বিনিময় বস্তুটি একটি নন-স্পট বিনিময় বস্তু।
  • ন্যূনতম চুক্তির আকারঃ অর্ডার দেওয়ার সময় চুক্তির ন্যূনতম ট্রেডিং ভলিউম।

লাইভ ট্রেডিং অপশন

  • স্বয়ংক্রিয় পুনরুদ্ধারের অগ্রগতিঃ শেষ কৌশল বন্ধের আগে স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করে।
  • অর্ডার পুনরায় চেষ্টা করার সময়ঃ যদি অর্ডারটি পূরণ না হয় তবে অর্ডারটি বাতিল করা হবে, এবং অর্ডারটি ট্রেড করার চেষ্টা করার জন্য পুনরায় স্থাপন করা হবে। এই যুক্তিটি সর্বোচ্চ সংখ্যক পুনরায় চেষ্টা সীমাবদ্ধ করতে ব্যবহৃত হয়।
  • নেটওয়ার্ক পোলিং অন্তরাল (মিলিসেকেন্ড): শুধুমাত্র REST প্রোটোকলের জন্য বৈধ, এটি নেটওয়ার্ক অনুরোধের অন্তরাল নিয়ন্ত্রণ করে যাতে অনুরোধগুলি খুব ঘন ঘন হয় এবং বিনিময় সীমা অতিক্রম করে না।
  • অ্যাকাউন্ট সিঙ্ক্রোনাইজেশন সময় (সেকেন্ড): অ্যাকাউন্ট ডেটা সিঙ্ক্রোনাইজ করার সময়কাল।
  • পজিশন খোলার পর পজিশন সিঙ্ক্রোনাইজেশনের সময় (মিলিসেকেন্ড): কিছু এক্সচেঞ্জে ডেটা বিলম্বের কারণে পুনরাবৃত্ত পজিশনের জন্য, একটি বৃহত্তর সিঙ্ক্রোনাইজেশন সময় সেট করা এই ধরনের সমস্যাগুলিকে প্রশমিত করতে পারে।
  • লিভারেজ মাল্টিপলঃ লিভারেজ মাল্টিপল সেট করে।

স্পট ট্রেডিং, অন্যান্য সেটিং

  • এক লটের ট্রেডিং ভলিউমঃ এক লটের ডিফল্ট ট্রেডিং ভলিউম, যা শুধুমাত্র স্পট-এর জন্য বৈধ।
  • ন্যূনতম লেনদেনের পরিমাণঃ ন্যূনতম লেনদেনের পরিমাণ।
  • মূল্য নির্ধারণের মুদ্রার নির্ভুলতাঃ মূল্যের নির্ভুলতা, অর্থাৎ দামের দশমিকের সংখ্যা।
  • ট্রেডিং বৈচিত্র্যের নির্ভুলতাঃ অর্ডার পরিমাণের নির্ভুলতা, অর্থাৎ অর্ডার পরিমাণের দশমিকের সংখ্যা।
  • হ্যান্ডলিং ফিঃ এই সেটিং অনুযায়ী কিছু তথ্য গণনা করুন, 0.002 মানে 2/1000.
  • লাভ ও ক্ষতির পরিসংখ্যানের ব্যবধানঃ এটি শুধুমাত্র বাস্তব বাজারে লাভ ও ক্ষতির পরিসংখ্যান প্রদর্শনের জন্য ব্যবহৃত হয়।
  • ব্যর্থ পুনরায় চেষ্টা (ms): নেটওয়ার্ক অনুরোধ ব্যর্থ হলে পুনরায় চেষ্টা করার সময়সীমা।
  • প্রক্সি ব্যবহার করুন: শুধুমাত্র REST প্রোটোকলের জন্য বৈধ।
  • সাধারণ নেটওয়ার্ক ত্রুটি লুকান: লগ এলাকায় সাধারণ ত্রুটি লগ লুকান।
  • সুইচ বেস ঠিকানাঃ শুধুমাত্র REST প্রোটোকলের জন্য বৈধ।
  • পুশ নোটিফিকেশনঃ মেইলবক্সে পুশ বার্তা ইত্যাদি।

অর্ডার বাণিজ্য

খোলা পজিশন

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 ধারণ করে না তার ফলে যখনই ডেটা আপডেট করা হয় তখনই ভেরিয়েবলs মানটি ওভাররাইড হয়। এর বিপরীতে, যখন ভেরিয়েবলগুলি কীওয়ার্ড 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 সিরিজের প্রথম green দামের বন্ধের মূল্য ধারণ করে। ভেরিয়েবল c সিরিজের দশম green বারের বন্ধের মূল্য ধারণ করে।

এফএমজেডে, এটি রিয়েল-টাইম মূল্য মডেল এবং বন্ধ মূল্য মডেল বিভক্ত। আমরা নিম্নলিখিত কোডটি ব্যবহার করি যা দ্বারা ঘোষিত ভেরিয়েবলগুলি পরীক্ষা করতে।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 + 1i-এর মান পুনরুদ্ধার করা হবে না যতক্ষণ না বর্তমান 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 আপনাকে 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- এই পরিবর্তনশীল যদি বিবৃতির মান পায়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 মানটি 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ব্লক বাদ দেওয়া যেতে পারে। এই ক্ষেত্রে, যদি শর্তটি মিথ্যা হয়, তবে var_declarationX ভেরিয়েবলকে একটি empty মান (na, false, বা ) বরাদ্দ করা হয়ঃ

উদাহরণ

// if
x = if close > open
    close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)

একাধিক 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
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- কাউন্টারের প্রারম্ভিক মান। series int/float values/expressions অনুমোদিত।to_num- কাউন্টারের চূড়ান্ত মান। কাউন্টারটি to_num এর চেয়ে বড় হলে লুপটি ভেঙে যায় (বা from_num > to_num এর ক্ষেত্রে to_num এর চেয়ে ছোট) । series int/float মান/উক্তিগুলি অনুমোদিত, তবে সেগুলি কেবল লুপের প্রথম পুনরাবৃত্তিতে মূল্যায়ন করা হয়।step_num- কাউন্টারের ইনক্রিমেন্ট/ডিগ্রামেন্ট মান। এটি ঐচ্ছিক। ডিফল্ট হল +1 বা -1, যা from_num বা to_num এর বৃহত্তমটির উপর নির্ভর করে। মান ব্যবহার করার সময়, কাউন্টারটিও from_num বা to_num এর বৃহত্তমটির উপর ভিত্তি করে ইনক্রিমেন্টেড/ডিগ্রামেন্টেড হয়, তাই step_num এর +/- চিহ্নটি ঐচ্ছিক।statements | continue | break- যে কোন সংখ্যক বিবৃতি, অথবা continue বা break কীওয়ার্ড, চারটি স্পেস বা একক ট্যাব দ্বারা ইন্ডেন্ট করা।return_expression- লুপের রিটার্ন ভ্যালু, যদি উপস্থিত থাকে, var_declaration এর ভেরিয়েবলকে নির্ধারিত হয়। যদি লুপটি continue বা break কীওয়ার্ডের কারণে বন্ধ হয়, তাহলে লুপের রিটার্ন ভ্যালু হল লুপটি বন্ধ হওয়ার আগে একটি মান নির্ধারিত শেষ ভেরিয়েবলের রিটার্ন ভ্যালু।continue- একটি কীওয়ার্ড যা শুধুমাত্র লুপে ব্যবহার করা যেতে পারে. এটি লুপের পরবর্তী পুনরাবৃত্তি চালানোর কারণ হয়.break- চক্র থেকে বেরিয়ে আসার কীওয়ার্ড।

উদাহরণ

// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
    int result = 0
    for i = 1 to lookback
        if close[i] > close
            result += 1
    result
plot(qtyOfHigherCloses(14))

আরও দেখুন for...in while

জন্য... মধ্যে

দ্যfor...inconstruct অ্যারেতে প্রতিটি উপাদানের জন্য একাধিক বিবৃতি পুনরাবৃত্তি করার অনুমতি দেয়। এটি যে কোনও আর্গুমেন্টের সাথে ব্যবহার করা যেতে পারেঃ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- যে কোন সংখ্যক বিবৃতি, অথবা continue বা break কীওয়ার্ড, চারটি স্পেস বা একক ট্যাব দ্বারা ইন্ডেন্ট করা।return_expression- লুপের রিটার্ন মানটি ভেরিয়েবলকে নির্ধারিত হয়var_declarationcontinue বা break কীওয়ার্ডের কারণে যদি লুপটি বন্ধ হয়ে যায়, তাহলে লুপের রিটার্ন মান হল লুপটি বন্ধ হওয়ার আগে সর্বশেষ নির্ধারিত ভেরিয়েবল।continue- একটি কীওয়ার্ড যা শুধুমাত্র লুপে ব্যবহার করা যেতে পারে. এটি লুপের পরবর্তী পুনরাবৃত্তি চালানোর কারণ হয়.break- চক্র থেকে বেরিয়ে আসার কীওয়ার্ড।

একটি লুপের মধ্যে একটি অ্যারে বা তাদের আকারের উপাদানগুলি সংশোধন করার অনুমতি দেয়। এখানে, আমরা এক-অর্গুমেন্ট ফর্ম ব্যবহার করিfor...inপ্রতিটি বারের জন্য কতটি বারের OHLC মান close মানের 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- যদি সত্য হয়, স্থানীয় ব্লক চালান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 প্রদান করে। ইউনারি + এক্সপ্র রিটার্ন করে (উনারি অপারেটর সিমেট্রিতে কিছুই যোগ করা হয় না) ।

মন্তব্যসমূহআপনি সংখ্যার পাশাপাশি সিরিজ ভেরিয়েবলগুলির সাথে গাণিতিক অপারেটরগুলি ব্যবহার করতে পারেন। সিরিজের সাথে ব্যবহারের ক্ষেত্রে অপারেটরগুলি উপাদান অনুসারে প্রয়োগ করা হয়।

+=

সংযোজনীয় বরাদ্দ। সংখ্যাসূচক অভিব্যক্তি বা স্ট্রিংগুলিতে প্রযোজ্য।

expr1 += expr2

উদাহরণ

// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)

রিটার্নস্ট্রিংগুলির জন্য, expr1 এবং expr2 এর সংযুক্তি প্রদান করে। সংখ্যাগুলির জন্য, একটি পূর্ণসংখ্যা বা ফ্লোট মান, বা মানের সিরিজ প্রদান করে।

মন্তব্যসমূহআপনি সংখ্যার পাশাপাশি সিরিজ ভেরিয়েবলগুলির সাথে গাণিতিক অপারেটরগুলি ব্যবহার করতে পারেন। সিরিজের সাথে ব্যবহারের ক্ষেত্রে অপারেটরগুলি উপাদান অনুসারে প্রয়োগ করা হয়।

-

বিয়োগ বা একক বিয়োগ। সংখ্যাসূচক অভিব্যক্তিতে প্রযোজ্য।

expr1 - expr2
- expr

রিটার্নএকটি পূর্ণসংখ্যা বা ফ্লোটিং-পয়েন্ট মান, অথবা মানের সিরিজ ফেরত দিনঃ বাইনারি + expr1 বিয়োগ expr2 প্রদান করে। একক-expr এর অস্বীকৃতি প্রদান করে।

মন্তব্যসমূহআপনি সংখ্যার পাশাপাশি সিরিজ ভেরিয়েবলগুলির সাথে গাণিতিক অপারেটরগুলি ব্যবহার করতে পারেন। সিরিজের সাথে ব্যবহারের ক্ষেত্রে, অপারেটরগুলি উপাদান অনুসারে প্রয়োগ করা হয়।

-=

বিয়োগের কাজ. সংখ্যাসূচক অভিব্যক্তিতে প্রযোজ্য।

expr1 -= expr2

উদাহরণ

// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)

রিটার্নপূর্ণসংখ্যা বা ভাসমান মান, বা মানের সিরিজ।

/

ডিভিশন অ্যাসাইনমেন্ট। সংখ্যাসূচক অভিব্যক্তিতে প্রযোজ্য।

expr1 / expr2

রিটার্নপূর্ণসংখ্যা বা ভাসমান মান, বা মানের সিরিজ।

/=

ডিভিশন অ্যাসাইনমেন্ট। সংখ্যাসূচক অভিব্যক্তিতে প্রযোজ্য।

expr1 /= expr2

উদাহরণ

// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)

রিটার্নপূর্ণসংখ্যা বা ভাসমান মান, বা মানের সিরিজ।

<

সংখ্যার অভিব্যক্তিতে প্রযোজ্য।

expr1 < expr2

রিটার্নবুলিয়ান মান, বা বুলিয়ান মানের সিরিজ।

<=

সংখ্যার অভিব্যক্তিতে প্রযোজ্য।

expr1 <= expr2

রিটার্নবুলিয়ান মান, বা বুলিয়ান মানের সিরিজ।

==

যে কোন ধরনের এক্সপ্রেশন এর জন্য প্রযোজ্য।

expr1 == expr2

রিটার্নবুলিয়ান মান, বা বুলিয়ান মানের সিরিজ।

=>

=> অপারেটর ব্যবহারকারীর সংজ্ঞায়িত ফাংশন ঘোষণায় এবংswitch 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, +অসীম, -অসীম) মিথ্যা হিসাবে বিবেচিত হয়, অন্য কোন মান সত্য।

মন্তব্যসমূহযদি আপনার এটির প্রয়োজন না হয় তবে else শাখার জন্য na ব্যবহার করুন। আপনি switch-like বিবৃতির সমতুল্য অর্জনের জন্য দুই বা ততোধিক?: অপারেটর একত্রিত করতে পারেন (উপরের উদাহরণ দেখুন) । আপনি সংখ্যার পাশাপাশি সিরিজ ভেরিয়েবলগুলির সাথে অ্যারিথমেটিক অপারেটর ব্যবহার করতে পারেন। সিরিজের সাথে ব্যবহারের ক্ষেত্রে অপারেটরগুলি উপাদান অনুসারে প্রয়োগ করা হয়।

আরও দেখুন 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 ভেরিয়েবলগুলির মান থাকতে পারেঃ সত্য, মিথ্যা বা না।

উদাহরণ

// 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 (integer) টাইপ স্পষ্টভাবে ঘোষণা করতে ব্যবহৃত কীওয়ার্ড।

উদাহরণ

// int
int i = 14    // Same as `i = 14`
i := na
plot(i)

মন্তব্যসমূহএকটি ভেরিয়েবল ঘোষণায় টাইপটি স্পষ্টভাবে উল্লেখ করা ঐচ্ছিক, যদি না এটি na দিয়ে শুরু করা হয়। টাইপ সিস্টেমের ব্যবহারকারী ম্যানুয়াল পৃষ্ঠায় পাইন স্ক্রিপ্ট টাইপ সম্পর্কে আরও জানুন।

আরও দেখুন var varip float bool color string

ভাসমান

একটি ভেরিয়েবল বা আর্গুমেন্টের float (ফ্লোটিং পয়েন্ট) টাইপকে স্পষ্টভাবে ঘোষণা করার জন্য ব্যবহৃত কীওয়ার্ড।

উদাহরণ

// float
float f = 3.14    // Same as `f = 3.14`
f := na
plot(f)

মন্তব্যসমূহএকটি ভেরিয়েবল ঘোষণায় টাইপটি স্পষ্টভাবে উল্লেখ করা ঐচ্ছিক, যদি না এটি na দিয়ে শুরু হয়।

আরও দেখুন var varip int bool color string

স্ট্রিং

একটি ভেরিয়েবল বা আর্গুমেন্টের string টাইপ স্পষ্টভাবে ঘোষণা করতে ব্যবহৃত কীওয়ার্ড।

উদাহরণ

// string
string s = "Hello World!"    // Same as `s = "Hello world!"`
// string s = na // same as "" 
plot(na, title=s)

মন্তব্যসমূহএকটি ভেরিয়েবল ঘোষণায় টাইপটি স্পষ্টভাবে উল্লেখ করা ঐচ্ছিক, যদি না এটি na দিয়ে শুরু করা হয়। টাইপ সিস্টেমের ব্যবহারকারী ম্যানুয়াল পৃষ্ঠায় পাইন স্ক্রিপ্ট টাইপ সম্পর্কে আরও জানুন।

আরও দেখুন var varip int float bool str.tostring str.format

রঙ

একটি ভেরিয়েবল বা আর্গুমেন্টের color টাইপ স্পষ্টভাবে ঘোষণা করতে ব্যবহৃত কীওয়ার্ড।

উদাহরণ

// color
color textColor = color.green
if barstate.islastconfirmedhistory
    runtime.log("test", textcolor = textColor)

মন্তব্যসমূহরঙের লিটরালগুলির নিম্নলিখিত ফর্ম্যাট রয়েছেঃ #RRGGBB বা #RRGGBBAA। অক্ষর জোড়া 00 থেকে FF হেক্সাডেসিমাল মান (0 থেকে 255 দশমিক) উপস্থাপন করে যেখানে RR, GG এবং BB জোড়া হল রঙের এর লাল, সবুজ এবং নীল উপাদানগুলির মান। AA হল রঙের এর স্বচ্ছতার জন্য একটি ঐচ্ছিক মান (বা আলফা উপাদান) যেখানে 00 অদৃশ্য এবং FF অস্বচ্ছ। যখন AA জোড়া সরবরাহ করা হয় না, তখন FF ব্যবহার করা হয়। হেক্সাডেসিমাল অক্ষরগুলি বড় বা ছোট হতে পারে।

একটি ভেরিয়েবল ঘোষণায় টাইপটি স্পষ্টভাবে উল্লেখ করা ঐচ্ছিক, যদি না এটি na দিয়ে শুরু করা হয়। টাইপ সিস্টেমের ব্যবহারকারী ম্যানুয়াল পৃষ্ঠায় পাইন স্ক্রিপ্ট টাইপ সম্পর্কে আরও জানুন।

আরও দেখুন var varip int float string color.rgb color.new

অ্যারে

একটি ভেরিয়েবল বা একটি আর্গুমেন্টের array টাইপকে স্পষ্টভাবে ঘোষণা করতে ব্যবহৃত কীওয়ার্ড। অ্যারে অবজেক্ট (বা আইডি) এর সাথে তৈরি করা যেতে পারেarray.new<type>, array.from function.

উদাহরণ

// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))

মন্তব্যসমূহঅ্যারে অবজেক্ট সবসময় series ফর্মের হয়।

আরও দেখুন var array.new array.from

বস্তু

পাইন ভাষায় অবজেক্টগুলি ব্যবহারকারী-সংজ্ঞায়িত প্রকারের (ইউডিটি) উদাহরণ, যা পদ্ধতিহীন ক্লাস হিসাবে বোঝা যায় যা ব্যবহারকারীদের একটি সত্তার বিভিন্ন মান সংগঠিত করার কৌশলগুলিতে কাস্টম প্রকার তৈরি করতে দেয়।

প্রকারের সংজ্ঞা

আসুন অর্ডার তথ্য সংরক্ষণের জন্য একটি অর্ডার টাইপ সংজ্ঞায়িত করা যাকঃ

type order
    float price
    float amount
    string symbol
  • প্রকারগুলি ব্যবহার করে ঘোষণা করা হয়type keyword.
  • টাইপ কীওয়ার্ডের পরে টাইপ নাম থাকে।
  • প্রথম লাইন টাইপ টাইপ নাম সংজ্ঞায়িত করে, চারটি স্পেস ইন্ডেন্ট করে এবং টাইপে থাকা ক্ষেত্রগুলি সংজ্ঞায়িত করে।
  • প্রতিটি ক্ষেত্রকে তার ডেটা টাইপ ঘোষণা করতে হবে, যেমন int, float, string।

বস্তু তৈরি করা

ঘোষিত টাইপ ব্যবহার করে, কল করুন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 অবজেক্টটি var কীওয়ার্ড ব্যবহার করে ঘোষণা করা হয়, তাই এর ক্ষেত্রগুলি (সূচক, মূল্য, ভলিউম) প্রতিটি পুনরাবৃত্তিতে তাদের মানগুলি ধরে রাখবে, প্রথম এন্ট্রি থেকে শুরু করে শেষ এন্ট্রি দিয়ে শেষ হবে।
  • currentBar অবজেক্টটি 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 এর মান স্ক্রিপ্ট এক্সিকিউশন শেষ না হওয়া পর্যন্ত বাড়তে থাকে।


আরো

ভিক্ষুককেন কৌশল স্কোয়ার অনুলিপি পাইন কৌশল বাস্তবায়ন করতে পারে না

উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নঠিক আছে, আমরা পরীক্ষা করে দেখি।

ভিক্ষুকচ্যাং সুপারড্যাং এর অপ্টিমাইজড ট্রেন্ড ট্র্যাকার

উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নহ্যালো, কোন কৌশলটি আপনি ব্যবহার করছেন?