FMZ PINE স্ক্রিপ্ট নথিপত্র

লেখক:ছোট্ট স্বপ্ন, সৃষ্টিঃ ২০২২-০৫-০৬ ১৪ঃ২৭ঃ০৬, আপডেটঃ ২০২৪-০২-২৩ ১৫ঃ৩৬ঃ৪৮

[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()এই ভিডিওটি ভিডিওতে দেখা যাচ্ছে।

কোড

স্ক্রিপ্টের যে লাইনটি মন্তব্য বা কম্পাইলার নির্দেশ নয় তা একটি বাক্য, যা স্ক্রিপ্টের অ্যালগরিদম বাস্তবায়ন করে। একটি বাক্য এইগুলির মধ্যে একটি হতে পারে।

  • ভেরিয়েবল ঘোষণা
  • ভেরিয়েবল পুনরায় নির্ধারণ
  • ফাংশন বিবৃতি
  • বিল্ট-ইন ফাংশন কল, ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ফাংশন কল
  • ifforwhileঅথবা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 হয় ((স্লিড পয়েন্ট অর্ডার দেওয়ার সময় আরও ভালভাবে এবং অর্ডার সম্পন্ন করার জন্য অতিরিক্ত মূল্যের অংশটি খোলার জন্য) ।) ।
  • ভেরিয়েবলের দীর্ঘতম চক্রের সংখ্যাঃ গ্রাফের K-রেখা BAR এর সংখ্যাকে প্রভাবিত করে, এবংjavascriptকৌশলগতভাবে কল করুনSetMaxBarLenফাংশন একই কাজ করে।

ফিউচার অপশন

  • প্রজাতি কোডঃ চুক্তি কোড, যখন এক্সচেঞ্জের বস্তুগুলি নন-স্টোরি এক্সচেঞ্জের বস্তু হয় তখন সেট করা প্রয়োজন।
  • ন্যূনতম চুক্তির সংখ্যাঃ অর্ডার দেওয়ার সময় চুক্তির সর্বনিম্ন লেনদেনের পরিমাণ।

রিয়েল ডিস্ক বিকল্প

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

তাত্ক্ষণিক লেনদেন, অন্যান্য সেটিংস

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

লেনদেন

খোলামেলা

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আমরা ফাংশনটি অর্ডার করার সময় এটি উল্লেখ করতে পারিlimitstopপ্যারামিটার ।

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), অর্ডারটি কেবল তখনই ট্রিগার হয় যখন বাজারের বর্তমান মূল্য তার চেয়ে বেশি হয়।

  • স্টপ অর্ডার

    অর্ডারের স্টপ লস দাম সেট করুন, যখন অর্ডারটি কিনতে হয়, তখন অর্ডারটি কেবল তখনই ট্রিগার হয় যখন বাজারের বর্তমান মূল্য তার চেয়ে বেশি হয়। যখন অর্ডারটি বিক্রয় হয়, তখন অর্ডারটি কেবল তখনই ট্রিগার হয় যখন বাজারের বর্তমান মূল্য তার চেয়ে কম হয়।

  • স্টপ-লিমিট

    একই সময়ে সেট আপ করা যাবেlimitstopপ্যারামিটার, অর্ডারটি প্রথমে যে দামের সাথে সামঞ্জস্যপূর্ণ তা ট্রিগার করা হয়।

বিবৃতি, লজিক্যাল স্ট্রাকচার কীওয়ার্ড

ভার্

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

ভেরিয়েবল a ধারাবাহিকতার প্রতিটি স্তম্ভের প্রথম স্তম্ভের বন্ধের মূল্য বজায় রাখে। ভেরিয়েবল b সিরিজের প্রথম সবুজ দামের লাঠি বন্ধের দাম বজায় রাখে। ভেরিয়েবল c ধারাবাহিকতার দশম সবুজ এর বন্ধের দাম বজায় রেখেছে।

এফএমজেডে, রিয়েল-টাইম মূল্য মডেল, ক্লোজিং মূল্য মডেল,varvaripআমরা নিম্নলিখিত কোড ব্যবহার করে পরীক্ষা করেছি।

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
  • রিয়েল-টাইম মূল্য মডেল উপরের পরীক্ষার কোডটি চালানোর সময় দুটি পর্যায়ে বিভক্তঃ ১, ইতিহাসের কে-লাইন পর্যায়ে; ২, রিয়েল-টাইম কে-লাইন পর্যায়ে। যখন রিয়েল-টাইম মূল্য মডেল, ইতিহাসের কে-লাইন পর্যায়ে,varvaripবিবৃতির ভেরিয়েবল i, ii নীতি কোডের প্রতিটি রান বাস্তবায়নের সময় ক্রমবর্ধমান ক্রিয়াকলাপ সম্পাদন করে ((কারণif trueসুতরাং অবশ্যই সংশ্লিষ্ট শর্তাদি কোড ব্লকটি কার্যকর করা হবে) । সুতরাং আপনি দেখতে পারেন যে পুনরুদ্ধারের ফলাফলের K-লাইন BAR-এ প্রদর্শিত সংখ্যাগুলি প্রতিটিতে 1 এর সাথে বৃদ্ধি পায় । যখন ইতিহাসের K-লাইন ধাপ শেষ হয়, তখন রিয়েল-টাইম K-লাইন ধাপ শুরু হয় ।varvaripবিবৃতির ভেরিয়েবলগুলি পরিবর্তিত হতে শুরু করে। কারণ এটি একটি রিয়েল-টাইম মূল্য মডেল, একটি কে-লাইন বারের মধ্যে প্রতিটি মূল্য পরিবর্তনের জন্য কৌশল কোডটি পুনরাবৃত্তি করা হয়।i := i + 1এবংii := ii + 1বিপরীতে, i প্রতিবার সংশোধন করা হয়। যদিও i প্রতিবার সংশোধন করা হয়, তবে পরবর্তী রাউন্ডে নীতিগত লজিক চালানোর সময় পূর্বের মানটি পুনরুদ্ধার করা হয়, তবে বর্তমান K-লাইন BAR শেষ না হওয়া পর্যন্ত i এর মানটি পুনর্নির্ধারণ করা হয় না ((যেমন, পরবর্তী রাউন্ডে নীতিগত লজিক চালানোর সময় পূর্বের মানটি পুনরুদ্ধার করা হয় না) । সুতরাং আপনি দেখতে পারেন যে পরিবর্তনশীল i এখনও প্রতিটি রুটের সাথে BAR1 যোগ করা হয়; তবে পরিবর্তনশীল ii প্রতি বার একাধিকবার যোগ করা হয়।

  • বন্ধ মূল্য মডেল যেহেতু ক্লোজিং প্রাইস মডেলটি প্রতিটি K লাইন BAR শেষ হওয়ার পরে একবার কৌশলগত যুক্তি সম্পাদন করে। সুতরাং, ক্লোজিং প্রাইস মডেলটিতে, ইতিহাস K লাইন পর্যায়ে এবং রিয়েল-টাইম K লাইন পর্যায়ে, একটি নির্দিষ্ট সময়সীমার মধ্যে একটি নির্দিষ্ট সময়সীমা থাকে।varvaripবিবৃতির ভেরিয়েবলগুলি উপরের উদাহরণে ক্রমবর্ধমানভাবে প্রদর্শিত হয়, প্রতিটি 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 স্ট্রিংগুলি এমন একটি স্ট্রিং ব্লককে সংজ্ঞায়িত করে যা একটি অভিব্যক্তির শর্ত পূরণের সময় সম্পাদন করা আবশ্যক। ৪র্থ সংস্করণ পাইন স্ক্রিপ্ট ল্যাঙ্গুয়েজ আপনাকে else if সিনট্যাক্স ব্যবহার করতে দেয়।

সাধারণ কোডগুলি এসেছেঃ

var_declarationX = if condition
    var_decl_then0
    var_decl_then1
    ...
    var_decl_thenN
    return_expression_then
else if [optional block]
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else
else
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else

নোট var_declarationX- এই ভেরিয়েবলটি if স্ট্রিং এর মান পায়condition- যদি শর্তটি সত্য হয়, তাহলে স্ট্যাটাস ব্লক ব্যবহার করুনthenলজিক ())var_decl_then0var_decl_then1ইত্যাদি) ⇒ যদি শর্ত false হয় তবে বাক্যাংশ ব্লক ব্যবহার করুনelse ifঅথবাelseলজিক ())var_decl_else0var_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 ভেরিয়েবলের জন্য একটি empty threshold ((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 টুকরা চারটি স্পেস দ্বারা সরানো হয়ঃ

উদাহরণ

// if
x = if open > close
    5
else if high > low
    close
else
    open
plot(x)

উপেক্ষা করা যায়ifবিবৃতির ফলাফলের মান ((var_declarationX= বাদ দেওয়া যেতে পারে) ); যদি আপনি একটি অভিব্যক্তির পার্শ্ব প্রতিক্রিয়া চান তবে এটি দরকারী হতে পারে, যেমন কৌশলগত লেনদেনেঃ

উদাহরণ

if (ta.crossover(high, low))
    strategy.entry("BBandLE", strategy.long, stop=low)
else
    strategy.cancel(id="BBandLE")

If বাক্যগুলি একে অপরের সাথে যুক্ত হতে পারেঃ

উদাহরণ

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

দেখা হবে 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 ((integer)) টাইপের কীওয়ার্ড।

উদাহরণ

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

অন্তর্নির্মিত ফাংশন

ফাংশন কল করার সময় প্যারামিটার পাস করা যায়, প্যারামিটার নামের মান নির্ধারণ করা যায়, সংশ্লিষ্ট প্যারামিটার অবস্থানে সরাসরি ভেরিয়েবল পাস করা যায়, এবং মিশ্রিত ব্যবহারও সমর্থিত হয়; উদাহরণস্বরূপঃ

plot(close, title="test plot")     // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"

প্যারামিটার নামের অ্যাসাইনমেন্টের পরে, আপনি সরাসরি ভেরিয়েবলগুলিকে প্যারামিটার হিসাবে পাস করতে পারবেন না। এর পরেও, প্যারামিটার নামের অ্যাসাইনমেন্টের আকারে লিখতে হবে।

// plot(close, title="test", color.red)    // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red)             // 正确写法

সময়সীমা

সময়সীমা.সেকেন্ডে

পাঠানো হবেtimeframeপ্যারামিটারের সময়কালকে সেকেন্ডে রূপান্তর করা হয়।

timeframe.in_seconds(timeframe)

উদাহরণ

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

রিটার্ন মান timeframeক ক্রিয়াগুলির মধ্যে int এর সংখ্যার জন্য।

প্যারামিটার

  • timeframe(simple string) সময়সীমা↑অপশনাল↑ডিফল্ট মান timeframe.period↑

নোটজন্যtimeframe>= 1M ফাংশন একটি মাসের 30.4167 (365/12) দিনের উপর ভিত্তি করে সেকেন্ডের সংখ্যা গণনা করে।

দেখা হবে input.timeframe timeframe.period

টিকার

ticker.heikinashi

একটি কোড আইডেন্টিফায়ার তৈরি করুন যা একটি সমতল গড় K স্ট্রিং মানের জন্য অনুরোধ করে।

ticker.heikinashi(symbol)

উদাহরণ

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

রিটার্ন মান 股票代码的字符串值,可以提供给request.security函数。

প্যারামিটার

  • symbol(simple string) পণ্যের কোড আইডেন্টিফায়ার।

দেখা হবে syminfo.tickerid syminfo.ticker request.security

অনুরোধ

request.data

বাইরের তথ্যের জন্য অনুরোধ করুন।

request.data(url, attribute)

উদাহরণ

/*backtest
start: 2022-01-26 09:00:00
end: 2024-02-01 15:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

// 图表地址https://www.datadata.cn/queries/a10ea45c-1674-48ef-b414-cc17a7e4a548
var chart_data = "https://www.datadata.cn/api/v1/query/a10ea45c-1674-48ef-b414-cc17a7e4a548/data"
add_investor = request.data(chart_data, "$.add_investor")
idx_price = request.data(chart_data, "$.close_price")

plot(add_investor, "股市新增人口")
plot(idx_price, "股指价格")
// 反指交易
avg_investor = ta.ema(add_investor[1], 30)
if strategy.position_size == 0
    if add_investor > avg_investor*1.1
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Short", strategy.short)
    else if add_investor < avg_investor*0.9
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Long", strategy.long)

রিটার্ন মানপ্যারামিটারattributeনির্দিষ্ট ডেটা সিরিজ।

প্যারামিটার

  • url(simple string) অনুরোধ করা তথ্য উৎস url, তথ্য উৎস উত্তর তথ্য বিন্যাসে প্রয়োজনীয়তা ((কমপক্ষে time、data বৈশিষ্ট্য অন্তর্ভুক্ত):{"data": [], "schema": ["time", "data"]}◎ উদাহরণস্বরূপ ডেটা ফরম্যাটের উল্লেখ করা যেতে পারেঃ
    {
        "data": [
            [1430438400000, "2015年04月", "{\"add_investor\" : 497.53, \"close_price\" : 4441.655}"],
            [1433116800000, "2015年05月", "{\"add_investor\" : 415.87, \"close_price\" : 4611.744}"]
            // ...
        ],
        "schema": ["time", "date", "data"]
    }  
    
  • attribute(simple string) একটি বৈশিষ্ট্য নাম নির্দিষ্ট করে, যা প্রয়োজনীয় তথ্য প্রদান করে; উদাহরণস্বরূপঃ"$.add_investor"ব্যবহার$.উপসর্গ হিসাবে, বৈশিষ্ট্য নামগুলি অনুরোধ করা ডেটা উত্সের উত্তর দেওয়া ডেটার মধ্যে ডেটা ক্ষেত্রের বৈশিষ্ট্যগুলির সাথে সামঞ্জস্যপূর্ণ

request.security

অন্য জাত / রেজোলিউশন প্রয়োজন।

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

উদাহরণ

s = request.security(syminfo.tickerid, "D", close)   // 1 Day
plot(s)

expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)

// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)

রিটার্ন মানপ্রয়োজনীয় সিরিজ

প্যারামিটার

  • symbol(simple string) পণ্যের কোড।
  • timeframe(simple string) সময়সীমা. ফাঁকা স্ট্রিংটি চার্টের বর্তমান সময়সীমা হিসেবে ব্যাখ্যা করা হবে.
  • expression(series int/float/bool/color) request.security থেকে কল করা যায় এবং একটি এক্সপ্রেশন ফেরত দেওয়া যায়। এটি হতে পারে একটি সিরিজ বা এমন একটি সেট যা এমন উপাদান ধারণ করে যা সিরিজে রূপান্তরিত হতে পারে।
  • gaps(barmerge_gaps) অনুরোধ করা ডেটা একত্রিত করার নীতি ((প্রয়োজন করা হয় যে ডেটা স্বয়ংক্রিয়ভাবে প্রধান সিরিজের ওএইচএলসি ডেটার সাথে একত্রিত হয়) । সম্ভাব্য মানঃ barmerge.gaps_on, barmerge.gaps_off。 barmerge.gaps_on - অনুরোধ করা ডেটা সম্ভাব্য ব্যবধানের সাথে একত্রিত করা হয় ((na মান) ー barmerge.gaps_off - অনুরোধ করা ডেটা ধারাবাহিকভাবে অবিচ্ছিন্নভাবে একত্রিত করা হয়, সমস্ত ব্যবধানগুলি সর্বশেষের আগে বিদ্যমান মান পূরণ করে। ডিফল্ট মানটি হল barmerge.gaps_off。
  • lookahead(barmerge_lookahead) অনুরোধ করা ডেটা একত্রিত করার নীতি; সম্ভাব্য মানঃ barmerge.lookahead_on, barmerge.lookahead_off; সংস্করণ 3 থেকে ডিফল্ট মানটি হল barmerge.lookahead_off; দয়া করে নোট করুন যে এটি রিয়েল-টাইমে একই কাজ করে, শুধুমাত্র ইতিহাসের ক্ষেত্রে ভিন্ন।
  • ignore_invalid_symbol(const bool) একটি বিকল্প পরামিতি. যদি নির্দিষ্ট পণ্যটি পাওয়া না যায় তবে ফাংশনের আচরণ নির্ধারণ করেঃ যদি মিথ্যা হয় তবে স্ক্রিপ্টটি থামবে এবং চালানোর সময় ভুল ফিরে আসবে; যদি সত্য হয় তবে ফাংশনটি ফিরে আসবে এবং চালিয়ে যাবে। ডিফল্ট মানটি মিথ্যা।
  • currency(simple string) পণ্যটির মুদ্রা সম্পর্কিত মান (যেমন OHLC) রূপান্তর করা হয়; তারপর রূপান্তরিত মানের উপর ভিত্তি করে এক্সপ্রেশন ট্যাগ গণনা করা হয়; ব্যবহৃত রূপান্তর হারটি FX_IDC জোড়ার আগের দিনের দৈনিক বিনিময় হার (যেমন গণনা করা হয় তার তুলনায় K লাইন) এর উপর ভিত্তি করে তৈরি করা হয়; অপশনাল; ডিফল্ট মানটি syminfo.currency; সম্ভাব্য মানঃ ISO 4217 ফর্ম্যাটেড মুদ্রা কোড সহ একটি তিন অক্ষরের স্ট্রিং বা currency।* নামকরণ স্পেসের একটি ধ্রুবক, যেমন currency.USD।

নোটএই বৈশিষ্ট্যটি ব্যবহার করে পাইনস্ক্রিপ্ট কোডগুলি ইতিহাস রেকর্ড এবং রিয়েল-টাইম ডেটার জন্য বিভিন্ন গণনা করতে পারে।আপনি যদি অনুরোধকৃত পণ্যের জন্য অতিরিক্ত প্যারামিটার নির্দিষ্ট করতে চান, যেমন লেনদেনের সময়সীমা বা সামঞ্জস্যের ধরন, তাহলে আপনি আপনার পণ্যের জন্য একটি নির্দিষ্ট সময়সীমা নির্ধারণ করতে পারেন।您可以使用ticker.new() ফাংশন। এই ফাংশনটির কাছে পয়েন্ট ডিসঅর্ডার পাস করতে টিক টিকার টিক ভেরিয়েবল ব্যবহার করা যায়নি। আপনি টিক ব্যবহার করতে পারেন।ticker.newভেরিয়েবল বা স্টক কোডের স্ট্রিং উপস্থাপনের ফর্ম, যেমন ভেরিয়েবল AAPL + MSFT * TSLA ভেরিয়েবল;বর্তমানে, একটি স্ক্রিপ্ট সর্বোচ্চ ৪০টি request.security কল করতে পারে। অনুগ্রহ করে মনে রাখবেন যে এই ভেরিয়েবল/ফাংশনটি ব্যবহার করলে সূচকটি পুনরায় চিত্রিত হতে পারে। রেজোলিউশনের পরামিতিগুলি নিম্নলিখিত মানগুলির অনুমতি দেয়ঃ 1S, 5S, 15S, 30S - সেকেন্ডের ব্যবধান ((গ্রাফের সময়কাল অনুরোধ করা সময়ের চেয়ে কম বা সমান হতে হবে)) ১ থেকে ১৪৪০ মিনিট ১ ডি থেকে ৩৬৫ ডি পর্যন্ত ১ ওয়াট থেকে ৫২ ওয়াটে কয়েক সপ্তাহ 1M থেকে 12M পর্যন্ত কয়েক মাস

দেখা হবে syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

যদিsourceস্ট্রিং অন্তর্ভুক্তstrএকটি সাব স্ট্রিং, যা true ফেরত দেয়, অন্যথায় false ফেরত দেয়.

str.contains(source, str)

উদাহরণ

// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

রিটার্ন মানযদিsourceস্ট্রিং খুঁজেstr, সত্য, অন্যথায় মিথ্যা ।

প্যারামিটার

  • source(series string) উৎস স্ট্রিং
  • str(series string) অনুসন্ধান করার জন্য সাবস্ট্রিং ।

দেখা হবে str.pos str.match

str.endswith

যদিsourceএই স্ট্রিংটিstrএকটি নির্দিষ্ট সাব-স্ট্রিংয়ের শেষে, true ফেরত দেওয়া হয়, অন্যথায় false ফেরত দেওয়া হয়।

str.endswith(source, str)

রিটার্ন মানযদিsourceএই স্ট্রিংটিstrযদি আপনি একটি স্ট্রিং এর শেষের অংশটি সঠিকভাবে দেখেন তবে এটি সত্য হবে।

প্যারামিটার

  • source(series string) উৎস স্ট্রিং
  • str(series string) অনুসন্ধান করার জন্য সাবস্ট্রিং ।

দেখা হবে str.startswith

str.startswith

যদিsourceএই স্ট্রিংটিstrএকটি নির্দিষ্ট সাব-স্ট্রিংয়ের শুরুতে, true ফেরত দেওয়া হয়, অন্যথায় false ফেরত দেওয়া হয়।

str.startswith(source, str)

রিটার্ন মানযদিsourceএই স্ট্রিংটিstrযদি কোন সাব-স্ট্রিং শুরু হয়, তাহলে সেটি হবে true, অন্যথায় false.

প্যারামিটার

  • source(series string) উৎস স্ট্রিং
  • str(series string) অনুসন্ধান করার জন্য সাবস্ট্রিং ।

দেখা হবে str.endswith

str.substring

এবং এটি একটি নতুন স্ট্রিং ফেরত দেয়।sourceএকটি স্ট্রিংয়ের একটি উপ-স্ট্রিং।begin_posনির্দিষ্ট সূচকের অক্ষর দিয়ে শুরু হয় এবং এর সাথে প্রসারিত হয়sourceস্ট্রিং এর end_pos - 1

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

উদাহরণ

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

রিটার্ন মানসোর্স স্ট্রিং থেকে বের করা একটি সাব স্ট্রিং ।

প্যারামিটার

  • source(series string) এর থেকে সাব স্ট্রিং এর উৎস স্ট্রিং বের করা।
  • begin_pos(series int) এক্সট্রাক্ট করা সাবস্ট্রিংয়ের শুরু অবস্থান. এটি একচেটিয়া ((এক্সট্রাক্ট করা সাবস্ট্রিংটি সেই অবস্থানের অক্ষরগুলি অন্তর্ভুক্ত করে) ।) ।
  • end_pos(series int) শেষ অবস্থান. এটি একচেটিয়া. (এক্সট্রাক্ট করা স্ট্রিংটি এই অবস্থানের অক্ষরগুলি অন্তর্ভুক্ত করে না) । অপশনাল। ডিফল্ট মানটি হলsourceস্ট্রিংয়ের দৈর্ঘ্য ।

নোটস্ট্রিং সূচক 0 থেকে শুরু হয়; যদিbegin_posএর সমানend_pos, ফাংশনটি একটি ফাঁকা স্ট্রিং ফেরত দেয় ।

দেখা হবে str.contains str.pos str.match

str.tonumber

str.tonumber(string)

রিটার্ন মানযদি বৈধ সংখ্যা থাকে তবে এটি স্ট্রিংয়ের ফ্লোটেন্ট টাইপ, অন্যথায় এটি na.

প্যারামিটার

  • string(series string) int বা float এর স্ট্রিং উপস্থাপনের ফর্ম।

str.format

ফরম্যাট স্ট্রিং এবং মানকে ফরম্যাট স্ট্রিংতে রূপান্তর করা হয়। একটি ফরম্যাট স্ট্রিং টেক্সট টেক্সট এবং প্রতিটি ফরম্যাট করা মানের জন্য বড় বন্ধনী {} এর মধ্যে একটি স্থানচ্যুতি থাকতে পারে। প্রতিটি স্থানচ্যুতির মধ্যে একটি সূচক রয়েছে যা এর প্রয়োজনীয় পরামিতিগুলি প্রতিস্থাপন করবে ((০ থেকে শুরু করে) এবং একটি বিকল্প ফর্ম্যাট নির্দেশক। সূচকটি এই পরামিতিটির স্ট্র.ফরম্যাট পরামিতি তালিকায় অবস্থান নির্দেশ করে।

str.format(formatString, arg0, arg1, ...)

উদাহরণ

// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)

// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)

// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)

// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)

// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)

// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)

// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)

রিটার্ন মানফরম্যাটেড স্ট্রিং ।

প্যারামিটার

  • formatString(series string) বিন্যাস স্ট্রিং ।
  • arg0, arg1, ...(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) ফরম্যাট করা মান।

নোটস্টাইলের মধ্যে যে কোন অ-উল্লেখিত বন্ধনীকে ভারসাম্য বজায় রাখতে হবে। উদাহরণস্বরূপ, ab {0} de" এবং "ab } de" বৈধ স্টাইল, কিন্তু "ab {0} de, ab } de" এবং {" বৈধ স্টাইল নয়।

str.length

স্ট্রিং এর অক্ষরের সংখ্যার সাথে সংশ্লিষ্ট পূর্ণসংখ্যা ফেরত দেয়.

str.length(string)

রিটার্ন মানসোর্স স্ট্রিংয়ের অক্ষরের সংখ্যা।

প্যারামিটার

  • string(series string) উৎস স্ট্রিং

str.lower

একটি নতুন স্ট্রিং ফেরত দেয় যেখানে সমস্ত অক্ষরকে ছোট আকারে রূপান্তর করা হয়।

str.lower(source)

রিটার্ন মানসমস্ত অক্ষরকে নতুন ছোট হাতের অক্ষরে রূপান্তরিত করা হয়েছে।

প্যারামিটার

  • source(series string) যে স্ট্রিংটি রূপান্তর করা হবে।

দেখা হবে str.upper

str.upper

একটি নতুন স্ট্রিং ফেরত যা সব অক্ষরকে বড় আকারে রূপান্তরিত করে।

str.upper(source)

রিটার্ন মানসমস্ত অক্ষরকে বড় আকারের নতুন স্ট্রিংয়ে রূপান্তরিত করা হয়েছে।

প্যারামিটার

  • source(series string) যে স্ট্রিংটি রূপান্তর করা হবে।

দেখা হবে str.lower

str.match

যদি মেলেregexযদি আপনি একটি সাধারণ অভিব্যক্তি ব্যবহার করেন, তাহলে এটি ফিরে আসবেsourceস্ট্রিং এর নতুন সাব স্ট্রিং, অন্যথায় ফিরে আসে na.

str.match(source, regex) 

উদাহরণ

s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")

// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")

if barstate.islastconfirmedhistory
    runtime.log(tickerid) // "EXCHAN

আরো

উহুওয়ানআপনি কি একই সময়ে একাধিক লেনদেনের জন্য বিএনইউ চুক্তি চান?

হালকা মেঘদয়া করে আমাকে বলুন, পাইন কি একাধিক লেনদেন করতে পারে? অথবা JS এর মতো লেনদেন করতে পারে? ধন্যবাদ।

লিসা ২০২৩১বিস্তারিত তথ্যের জন্য ধন্যবাদ।

শিল্পকলাওহো! এই পাইন স্ক্রিপ্টটি কীভাবে প্ল্যাটফর্মে ওকেএক্সের সিমুলেটর ব্যবহার করে?

শিল্পকলাএটি ট্রেডিংভিউ প্ল্যাটফর্মের কৌশলগুলি সরাসরি ইনভেন্টর প্ল্যাটফর্মে অনুলিপি করার সমান!

ছোট্ট স্বপ্নপাইন ভাষা শুধুমাত্র একক প্রজাতির কৌশলগুলি করতে পারে, তবে বহু-প্রজাতির কৌশলগুলি পাইথন, জাভাস্ক্রিপ্ট, সি ++ এ ডিজাইন করা ভাল।

ছোট্ট স্বপ্নওহ, হ্যাঁ, ওকেএক্স বিশেষ, তাদের অ্যানালগ পরিবেশ এবং বাস্তব পরিবেশ একই ঠিকানা আছে, কিন্তু অন্য কোথাও পার্থক্য করা হয়। সুতরাং একটি বেস ঠিকানা পরিবর্তন করার জন্য একটি উপায় নেই, একটি অ্যানালগ ডিস্ক পরিবর্তন করতে।

হালকা মেঘokx অ্যালগরিদম ডিস্ক ব্যবহার করা যাবে না ।

ছোট্ট স্বপ্নএই বৈচিত্র্যপূর্ণ আর্কিটেকচার সমস্যার সমাধান করা যায় না, কারণ প্রতিটি এক্সচেঞ্জের ইন্টারফেস আলাদা এবং ইন্টারফেস ফ্রিকোয়েন্সি সীমাবদ্ধতাও একই নয়, যা অনেক সমস্যা সৃষ্টি করে।

ছোট্ট স্বপ্নভাল, আপনার পরামর্শের জন্য আপনাকে ধন্যবাদ, এই অনুরোধটি এখানে জানান।

হালকা মেঘএটি JS এর সাথে মিশ্রিত করা ভাল বলে মনে হচ্ছে, যা বিভিন্ন লেনদেনের পদ্ধতিতে আরও ভালভাবে মানিয়ে নিতে পারে।

ট্রেন্ড হান্টারআপনি কি মনে করেন যে, আপনি যদি আপনার পণ্যের জন্য একটি নতুন পণ্যের সন্ধান করতে চান তবে আপনি কি ভবিষ্যতে আরও বিভিন্ন ধরণের পণ্য বিবেচনা করবেন?

ছোট্ট স্বপ্নঅযৌক্তিক ।

হালকা মেঘভাল, ধন্যবাদ ড্রিম।

ছোট্ট স্বপ্নহ্যালো, পিআইএনই ভাষার কৌশলটি সাময়িকভাবে শুধুমাত্র একটি জাতের জন্য কাজ করে।

ছোট্ট স্বপ্নঅযৌক্তিক, আপনার সমর্থনের জন্য ধন্যবাদ।

ছোট্ট স্বপ্নহ্যাঁ।

ছোট্ট স্বপ্নPINE টেমপ্লেট ক্লাস ল্যাবরেটরি, যার প্যারামিটারে বিনিময় স্থানান্তর বেস ঠিকানা সেট করা যেতে পারে। নথির শুরুঃ PINE ভাষা বিনিময় ক্লাস ল্যাবরেটরি টেমপ্লেট প্যারামিট।