FMZ PINE স্ক্রিপ্ট দস্তাবেজ

তৈরি: 2022-05-06 14:27:06, আপডেট করা হয়েছে: 2025-01-23 10:19:06
comments   18
hits   13761

[TOC]

কীওয়ার্ড, ব্যাকরণ, সেটিং সংক্ষিপ্ত বিবরণ

কোড গঠন

পাইন কোডের সাধারণ কাঠামো হলঃ

<version>
<declaration_statement>
<code>

মন্তব্য

এফএমজেড-এর পাইন ভাষার সমর্থিত মন্তব্য চিহ্নঃ একক লাইন মন্তব্য//(পরের সংবাদ)/* */উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণে মন্তব্যটি কীভাবে লেখা হয়েছেঃ

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)  // 计算MACD指标

/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')

সংস্করণ

নিম্নলিখিত ফর্মের একটি কম্পাইলার নির্দেশিকা কম্পাইলারকে বলে যে স্ক্রিপ্টটি কোন সংস্করণে লেখা হয়েছেঃ

//@version=5

ডিফল্ট v5 সংস্করণ, কোডে বাদ দেওয়া যাবে//@version=5

বিবৃতি

  • indicator()
  • strategy()

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

কোড

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

  • পরিবর্তনশীল বিবৃতি
  • পরিবর্তনশীল পুনরায় নির্ধারণ
  • ফাংশন বিবৃতি
  • বিল্ট-ইন ফাংশন কল, ব্যবহারকারী-সংজ্ঞায়িত ফাংশন কল
  • ifforwhileবাswitchইত্যাদি গঠন

বাক্যে বিভিন্নভাবে সাজানো যায়

  • কিছু বিবৃতি এক লাইনে প্রকাশ করা যায়, যেমন বেশিরভাগ ভেরিয়েবল বিবৃতি, যা শুধুমাত্র একটি ফাংশন কল লাইন বা একক লাইন ফাংশন বিবৃতি ধারণ করে। অন্যরা, যেমন কাঠামো, সবসময় একাধিক লাইন প্রয়োজন, কারণ তারা একটি স্থানীয় ব্লক প্রয়োজন।
  • একটি স্ক্রিপ্টের একটি বিশ্বব্যাপী বিবৃতি (অর্থাৎ স্থানীয় ব্লকের অংশ নয়)空格বা制表符(ট্যাব কী) শুরু। তাদের প্রথম অক্ষরটিও অবশ্যই এই লাইনের প্রথম অক্ষর হতে হবে। যে লাইনটি লাইনের প্রথম অবস্থানে শুরু হয় সেগুলি সংজ্ঞায়িতভাবে স্ক্রিপ্টের বৈশ্বিক পরিসরের অংশ হয়ে ওঠে।
  • কাঠামো বা মাল্টি-লাইন ফাংশন বিবৃতি সবসময় একটি প্রয়োজনlocal block。 একটি স্থানীয় ব্লককে অবশ্যই একটি সূচক চিহ্ন বা চারটি ফাঁকা জায়গায় স্ক্রোল করতে হবে (অন্যথায়, এটি পূর্ববর্তী লাইনের সিরিয়ালাইজড কোড হিসাবে পার্স করা হবে, যা পূর্ববর্তী লাইনের কোডের ধারাবাহিকতা হিসাবে বিচার করা হবে), প্রতিটি স্থানীয় ব্লক একটি ভিন্ন স্থানীয় পরিসীমা সংজ্ঞায়িত করে。
  • একাধিক একক-লাইন বাক্যাংশ কমা চিহ্ন ((,) ব্যবহার করে একটি লাইনে ক্রমিকভাবে সংযুক্ত করা যেতে পারে।
  • একটি লাইনে মন্তব্য থাকতে পারে, অথবা শুধু মন্তব্যই থাকতে পারে।
  • এই লাইনগুলোকে মোড়ানোও যায় (অন্তর্ভুক্ত করে) ।

উদাহরণস্বরূপ, তিনটি স্থানীয় ব্লক রয়েছে, একটি কাস্টম ফাংশন বিবৃতিতে এবং দুটি ভেরিয়েবল বিবৃতিতে if কাঠামো ব্যবহার করে, নিম্নলিখিত কোডটি সহঃ

indicator("", "", true)             // 声明语句(全局范围),可以省略不写

barIsUp() =>                        // 函数声明(全局范围)
    close > open                    // 本地块(本地范围)

plotColor = if barIsUp()            // 变量声明 (全局范围)
    color.green                     // 本地块 (本地范围)
else
    color.red                       // 本地块 (本地范围)

runtime.log("color", color = plotColor)  // 调用一个内置函数输出日志 (全局范围)

কোড পরিবর্তন করুন

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

a = open + high + low + close

এটিকে প্যাকেজ করা যায় (মনে রাখবেন যে প্রতি লাইনে কমানোর জন্য খালি জায়গাগুলির সংখ্যা 4 এর গুণিতক নয়):

a = open +
      high +
          low +
             close

একটি দীর্ঘ প্লট ((() কলকে প্যাকেজ করা যায়।

close1 = request.security(syminfo.tickerid, "D", close)      // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close)    // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100),                       // 一行长的plot()调用可以被包装
   color = color.new(color.purple, 40),
   style = plot.style_area,
   trackprice = true)

ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ফাংশন বিবৃতিতে একটি বিবৃতিও প্যাকেজ করা যেতে পারে। যাইহোক, যেহেতু স্থানীয় ব্লকটি সিনট্যাক্সের সাথে শুরু করতে হবে ((৪ টি ফাঁকা বা ১ টি সূচক), যখন এটি পরবর্তী লাইনে বিভক্ত করা হয়, তখন বিবৃতিটির ধারাবাহিক অংশটি অবশ্যই এক বা একাধিক সংকোচনের সাথে শুরু করতে হবে ((৪ টি ফাঁকা সংখ্যার সমান নয়) । উদাহরণস্বরূপঃ

test(c, o) =>
    ret = c > o ?
       (c > o+5000 ? 
          1 :
              0):
       (c < o-5000 ? 
          -1 : 
              0)

a = test(close, open)
plot(a, title="a")

সময়সূচী

টাইম সিকোয়েন্স একটি ডেটা টাইপ বা ফর্ম্যাট নয়, টাইম সিকোয়েন্স হল PINE ভাষার একটি মৌলিক কাঠামোগত ধারণা। এটি সময়ের সাথে ধারাবাহিকভাবে পরিবর্তিত মানগুলি সংরক্ষণ করার জন্য ব্যবহৃত হয়, প্রতিটি মান একটি সময় বিন্দুতে প্রযোজ্য। টাইম সিকোয়েন্সের এই ধারণার কাঠামোটি সময়ের সাথে পরিবর্তিত ডেটা সিরিজগুলি পরিচালনা এবং রেকর্ড করার জন্য উপযুক্ত। অন্তর্নির্মিত পরিবর্তনশীলopenউদাহরণস্বরূপ,openবিল্ট-ইন ভেরিয়েবলটি প্রতিটি K-লাইন BAR এর খোলার মূল্য রেকর্ড করে, যদি এইopen5 মিনিটের K-রেখা চক্রের তথ্য।openপরিবর্তনশীলটি প্রতি 5 মিনিটের K লাইন BAR ((column)) এর ওপেন প্রাইস রেকর্ড করে। আপনার কৌশলটি যখন কার্যকর হয় তখন কোডটি উদ্ধৃত করেopenঅর্থাৎ, বর্তমান K লাইন BAR এর ওপেনিং মূল্য উদ্ধৃত করা হয়েছে। পূর্ববর্তী মান উদ্ধৃত করার জন্য (অতীতের মান) আমরা ব্যবহার করি[]ইতিহাস অপারেটর, যখন কৌশলটি একটি K-লাইন BAR-এ কার্যকর হয়,open[1]এর অর্থ হল বর্তমান K লাইন BAR এর পূর্ববর্তী K লাইন BAR এর খোলার মূল্য উল্লেখ করা।

যদিওসময়সূচীপিন ভাষায়ও অ্যারে টাইপ আছে। কিন্তু এগুলি এবং টাইম সিকোয়েন্স সম্পূর্ণ ভিন্ন ধারণা।

PINE ভাষা এইভাবে টাইম সিকোয়েন্স ডিজাইন করেছে, যা পলিসি কোডে সহজেই ক্লোজ-আপ মূল্যের ক্রমিক মান গণনা করতে পারে, এবং ফোরের মতো চক্রের কাঠামো ব্যবহার করার প্রয়োজন নেই, কেবলমাত্র PINE ভাষার অন্তর্নির্মিত ফাংশন ব্যবহার করেta.cum(close)উদাহরণস্বরূপ, আমরা সর্বশেষ ১৪টি K-লাইন BAR (যেমন, কোড চালানোর সময় থেকে বর্তমান সময়ে নিকটতম ১৪টি K-লাইন BAR) এর সর্বোচ্চ ও সর্বনিম্ন মানের পার্থক্যের গড় গণনা করতে চাই।ta.sma(high - low, 14)

টাইম সিকোয়েন্সের উপর ফাংশন কল করার ফলাফলও টাইম সিকোয়েন্সের উপর একটি ট্রেস ছেড়ে দেয়।[]ইতিহাসের অপারেটরটি পূর্বের মানগুলিকে উল্লেখ করে। উদাহরণস্বরূপ, আমরা পরীক্ষা করি যে বর্তমান K-লাইন BAR এর সমাপ্তি মূল্যটি সর্বশেষ 10 টি K-লাইন BAR এর সর্বোচ্চ মানের সর্বোচ্চ মানের চেয়ে বেশি কিনা। (বর্তমান K-লাইন BAR বাদ দিয়ে) । আমরা লিখতে পারিbreach = close > ta.highest(close, 10)[1]অন্যভাবে লিখতে পারেন,breach = close > ta.highest(close[1], 10)তাইta.highest(close, 10)[1]এবংta.highest(close[1], 10)সমমানের।

নিম্নলিখিত কোড দিয়ে যাচাই করুনঃ

strategy("test pine", "test", true) 

a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)

plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)

উপরের টেস্ট কোডটি a এবং b এর মানকে তাদের সংশ্লিষ্ট টাইম সিকোয়েন্সের প্রতিটি BAR-এ আউটপুট করে, এবং দেখা যায় যে a এবং b এর মান সর্বদা সমান, তাই এই দুটি উপস্থাপনার পদ্ধতি সমান।

ঐতিহাসিক তথ্য উদ্ধৃতি

ট্রেডিং ভিউতে ঐতিহাসিক ডেটা উদ্ধৃতির জন্য সর্বোচ্চ ক্রমিক সীমাবদ্ধতা রয়েছে (৫০০০ ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক ক্রমিক):

//@version=6
indicator("test")

ema = ta.ema(close, 10000)      // 报错:Error on bar 0: The 'ema'->'sum' function references too many historical candles (10000), the limit is 5000.
plot(ema, "ema")

// pre10000 = ema[10000]        // 报错:Invalid number of bars back specified in the history-referencing operator. It accepts a value between 0 and 5000.
// plot(pre10000, "pre10000")

FMZ-এ PINE ভাষা নীতি ব্যবহার করে “Pine ভাষা ট্রেডিং ক্লাসরুমে” “ট্রেডিং সেটিং”, প্যারামিটারঃ “variable longest period number” নির্দিষ্টভাবে উল্লেখযোগ্য ডেটা সেট করার সর্বোচ্চ সংখ্যা।

FMZ PINE স্ক্রিপ্ট দস্তাবেজ

indicator("test")

ema = ta.ema(close, 1000)  // ema = ta.ema(close, 3000) 则报错:Invalid number 3000 of bars back specified in the history-referencing operator. It accepts a value between 0 and 2000.
plot(ema, "ema")

“Variable’s longest cycle number” প্যারামিটারটি খুব বেশি বড় হওয়া উচিত নয়, তবে উপযুক্ত নীতিতে ডেটা উদ্ধৃত করা যেতে পারে।

পাইন ভাষার লেনদেনের ক্লাসরুম মডেলের প্যারামিটার

PINE নীতির অন্তর্নির্মিত টেমপ্লেট “Pine ভাষা লেনদেন শ্রেণীকক্ষ” এর প্যারামিটার সেটিং নির্দেশিকা

FMZ PINE স্ক্রিপ্ট দস্তাবেজ

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

  • মৃত্যুদন্ড ক্লোজিং প্রাইস মডেলঃ বর্তমান বার শেষ হওয়ার পরে মডেলটি কার্যকর করা হয়, যখন নীচের বার শুরু হয় তখন লেনদেন করা হয়। রিয়েল-টাইম মূল্য মডেলিং: যখনই দামের পরিবর্তন হয় তখনই মডেলটি কার্যকর করা হয়।
  • ডিফল্ট খোলা পজিশনের সংখ্যা: যদি ট্রেডিং নির্দেশনাটি ট্রেডিংয়ের পরিমাণ নির্দিষ্ট না করে, তবে সেট করা পরিমাণ অনুযায়ী ট্রেডিং কার্যকর করুন।
  • সর্বাধিক একক লেনদেনের পরিমাণঃ প্রকৃত শপিংয়ের উপর ভিত্তি করে, এই প্যারামিটার সেটিংয়ের সাথে মিলিত হয়ে, প্রতিটি অর্ডারের সর্বাধিক পরিমাণ নির্ধারণ করুন, শপিং পৃষ্ঠকে আঘাত করা এড়িয়ে চলুন।
  • দামের পয়েন্টঃ定价货币精度প্যারামিটার এবং এই প্যারামিটারটি অর্ডার দেওয়ার সময় স্লাইড মূল্য নির্ধারণ করে। উদাহরণস্বরূপ, মূল্য নির্ধারণের মুদ্রার নির্ভুলতা 2 সেট করা হয়েছে, যা বিয়োগফলের দ্বিতীয় স্থানে, 0.01 পর্যন্ত নির্ভুল। সুতরাং স্লাইড পয়েন্টের প্রতিটি পয়েন্ট মূল্য নির্ধারণের 0.01 ইউনিট প্রতিনিধিত্ব করে। যখন স্লাইড পয়েন্টের সংখ্যাটি 5 সেট করা হয়, তখন অর্ডার দেওয়ার সময় স্লাইড মূল্য 0.05 ((স্লাইড মূল্যটি অর্ডার দেওয়ার সময় ভাল এবং খোলার অর্ডারের জন্য প্রবাহিত দামের অংশকে নির্দেশ করে)) ।
  • পরিবর্তনশীল দীর্ঘতম চক্রের সংখ্যা: প্রভাবিত চার্ট K-রেখা BAR সংখ্যা, এবংjavascriptকৌশলগত কলSetMaxBarLenফাংশন একই কাজ করে।

ফিউচার অপশন

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

বাস্তব অফার বিকল্প

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

নগদ লেনদেন, অন্যান্য সেটিং

  • একযোগে লেনদেনের পরিমাণঃ ডিফল্ট একযোগে লেনদেনের পরিমাণ, শুধুমাত্র নগদ লেনদেনের ক্ষেত্রে প্রযোজ্য।
  • ন্যূনতম লেনদেনের পরিমাণঃ ন্যূনতম লেনদেনের পরিমাণ
  • মূল্য নির্ধারণে মুদ্রার সঠিকতা: মূল্যের সঠিকতা, অর্থাৎ দামের ছোট সংখ্যা।
  • লেনদেনের সঠিকতাঃ নিম্ন অর্ডারের সঠিকতা, অর্থাৎ নিম্ন অর্ডারের ছোট সংখ্যা।
  • ০.০০২ মানে হাজার ভাগের দুই ভাগ।
  • লভ্যাংশের পরিসংখ্যানের ব্যবধানঃ লভ্যাংশের পরিসংখ্যান শুধুমাত্র রিয়েল-ডিস্কে প্রদর্শিত হয়।
  • ব্যর্থ পুনরায় চেষ্টা (মিলিসেকেন্ড): নেটওয়ার্ক অনুরোধ ব্যর্থ হলে পুনরায় চেষ্টা করার সময়কাল।
  • এজেন্ট ব্যবহার করুনঃ শুধুমাত্র 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), অর্ডারটি কেবল তখনই ট্রিগার হয় যখন বাজারের বর্তমান মূল্য সেই মূল্যের চেয়ে বেশি হয়।

  • স্টপ অর্ডার

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

  • stop-limit অর্ডার

একসাথে সেট করা যাবেlimitstopপ্যারামিটার, অর্ডারটি প্রথম যোগ্য মূল্যের উপর ট্রিগার হয়।

ক্রেডিট শতাংশ

//@version=5
strategy("Percent of Equity Order", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)  

// 简单的均线交叉策略
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))  

// 如果均线交叉条件满足,则买入或卖出
if (longCondition)
    strategy.entry("Long", strategy.long)  

if (shortCondition)
    strategy.entry("Short", strategy.short)
  

নির্দিষ্টdefault_qty_type=strategy.percent_of_equityপরে, সেটিংdefault_qty_valueশতাংশ হিসাবে গণনা করুন (০ থেকে ১০০), ১ হল ১%। অ্যাকাউন্টে যে পরিমাণ মুদ্রা রয়েছে তার উপর ভিত্তি করে অর্ডার গণনা করুন। উদাহরণস্বরূপঃ বর্তমান অ্যাকাউন্টে ১০,০০০ ইউএসডিটি রয়েছে, ১% অর্ডার সেট করুন, অর্থাৎ ১০০ ইউএসডিটি স্কেল ব্যবহার করে অর্ডার করুন (বিক্রয়ের সময় বর্তমান দামের উপর ভিত্তি করে) ।

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

var

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

  • সমাপনী মূল্য মডেল যেহেতু ক্লোজিং প্রাইস মডেলটি প্রতিটি কে-লাইন বিএআর শেষ হওয়ার পরে একটি কৌশলগত যুক্তি সম্পাদন করে। তাই ক্লোজিং প্রাইস মডেলের সময়, historical K-লাইন পর্যায় এবং রিয়েল-টাইম K-লাইন পর্যায়,varvaripবিবৃতির ভেরিয়েবলের ক্রমবর্ধমান পারফরম্যান্স উপরের উদাহরণের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ, প্রতিটি কে লাইন BAR ক্রমবর্ধমান 1।

varip

varip ((var intrabar persist) হল একটি কীওয়ার্ড যা বরাদ্দ এবং এককালীন ইনশালাইজেশনের জন্য ব্যবহৃত হয়। এটি var কীওয়ার্ডের অনুরূপ, তবে varip বিবৃতি ব্যবহার করে একটি পরিবর্তনশীল তার মানকে রিয়েল-টাইম K- লাইন আপডেটের মধ্যে ধরে রাখে।

varip variable_name = expression

ব্যাখ্যাঃ

  • variable_name- পিন স্ক্রিপ্টে অনুমোদিত ব্যবহারকারীর ভেরিয়েবলের যে কোনও নাম ((, বড় এবং ছোট ল্যাটিন অক্ষর, সংখ্যা এবং আন্ডারলাইন)) থাকতে পারে_), কিন্তু কোন সংখ্যা দিয়ে শুরু করা যাবে না)
  • expression- যে কোন গাণিতিক অভিব্যক্তি, যেমন একটি নিয়মিত পরিবর্তনশীল সংজ্ঞায়িত করা হয়। প্রথম K লাইনে, অভিব্যক্তিটি শুধুমাত্র একবার গণনা করা হয় এবং এটি পরিবর্তনশীলকে একবার বরাদ্দ করা হয়।

উদাহরণ

// varip
varip int v = -1
v := v + 1
plot(v)

var ব্যবহার করলে, চিত্রটি bar_index এর মান ফেরত দেয়। varp ব্যবহার করলে, ইতিহাসের K লাইনে একই আচরণ ঘটে, কিন্তু রিয়েল-টাইম K লাইনে, চিত্রটি একটি মান ফেরত দেয় যা প্রতিটি টিকের জন্য বৃদ্ধি পায়।

নোট কেবলমাত্র float, int, bool, string, এবং এই ধরনের অ্যারেগুলির সাথে ব্যবহার করা যেতে পারে।

true

একটি Boolean ভেরিয়েবলের মান, অথবা যখন এক্সপ্রেশন ব্যবহার করা হয়তুলনাবাযুক্তিঅপারেটরের সময় গণনা করা যায় এমন মান

নোট দেখুনতুলনাঅপারেটরযুক্তিঅপারেটরের বর্ণনাঃ

আরও দেখুন bool

false

একটি Boolean ভেরিয়েবলের মান এবং তুলনা অপারেশন, লজিকাল অপারেশন ফলাফল উল্লেখ করে।

নোট দেখুনতুলনাঅপারেটরযুক্তিঅপারেটরের বর্ণনাঃ

আরও দেখুন bool

if

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প্রকারভেদ. ট্রেডিংভিউতে চলার সময় তাদের প্রকারভেদ অবশ্যই মিলে যায়: যখন আপনি else ব্লকে একটি স্ট্রিং মান রাখেন, তখন then স্টেটমেন্ট ব্লক থেকে একটি পূর্ণসংখ্যা মান ফেরত দেওয়া সম্ভব নয়। FMZ এ চলার সময়, নিম্নলিখিত উদাহরণটি ভুল করে না, যখন y মান “ওপেন” হয়, তখন প্লট অঙ্কনের মান n/a হয়।

উদাহরণ

// This code compiles
x = if close > open
    close
else
    open  

// This code doesn’t compile by trading view
// y = if close > open
//     close
// else
//     "open"
plot(x)

বাদ দিতে পারেনelseএই ক্ষেত্রে, যদি শর্তটি মিথ্যা হয়, তবে var_declarationX ভেরিয়েবলকে একটি ফাঁকা থ্রেশহোল্ড দেওয়া হবে ({na, false বা ):

উদাহরণ

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

একাধিক else if টুকরা ব্যবহার করা যেতে পারে অথবা একেবারেই ব্যবহার করা যায় না। then, else if, else টুকরা চারটি ফাঁকা স্থান থেকে সরানো হয়ঃ

উদাহরণ

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

উপেক্ষা করা যায়ifযদি আপনার এক্সপ্রেশনের পার্শ্ব প্রতিক্রিয়া প্রয়োজন হয়, তাহলে এটি দরকারী হতে পারে, যেমন কৌশলগত লেনদেনের ক্ষেত্রেঃ

উদাহরণ

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

If বাক্যে যেগুলো অন্তর্ভুক্ত করা যায় সেগুলি হল:

উদাহরণ

// if
float x = na
if close > open
    if close > close[1]
        x := close
    else
        x := close[1]
else
    x := open
plot(x)

for

‘for’ কাঠামোটি একাধিক ক্রিয়াকে পুনরাবৃত্তি করতে দেয়ঃ

[var_declaration =] for counter = from_num to to_num [by step_num]
    statements | continue | break
    return_expression

var_declaration- একটি অপশনাল ভেরিয়েবল বিবৃতি, যা return_expression এর মান হিসেবে বরাদ্দ করা হবে counter- রিটার্নের প্রতিটি