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

FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্মের সাথে কৌশল লেখার প্রাথমিক টিউটোরিয়াল (পড়া আবশ্যক)

লেখক:এফএমজেড-লিডিয়া, সৃষ্টিঃ ২০২৩-০৭-১২ ১৫ঃ০৯ঃ৩৩, আপডেটঃ ২০২৪-০২-০৫ ২০ঃ০৫ঃ৪৩

[TOC]

img

এই টিউটোরিয়ালে এপিআই ভূমিকা, ব্যাকটেস্ট, চার্ট এবং আরও অনেক কিছু সহ কৌশল লেখার প্রাথমিক জ্ঞান রয়েছে। এই প্রাথমিক টিউটোরিয়ালটি শেখার পরে, ব্যবহারকারীরা প্রাথমিক এপিআই দক্ষতার সাথে ব্যবহার করতে এবং একটি স্থিতিশীল বট কৌশল লিখতে সক্ষম হবেন। টিউটোরিয়ালটি শেখার আগে, আপনাকে কীভাবে ব্যবহার করতে হবে তা শিখতে হবে।এফএমজেড কোয়ান্ট প্ল্যাটফর্ম চালু করুন.

পুরাতন সংস্করণ টিউটোরিয়ালঃFMZ Quant (FMZ.COM) কৌশল লেখার ম্যানুয়াল ২.০ (টিউটোরিয়াল)টিউটোরিয়ালে অনেক পোস্ট ইন্ডেক্স রয়েছে, যা পড়ার পরামর্শ দেওয়া হচ্ছে।

কৌশল লেখার প্রাথমিক নির্দেশনা

এপিআই ভূমিকা

প্রোগ্রাম ট্রেডিং হ'ল অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেসকে প্রতিনিধিত্ব করে।

বর্তমানে, ক্রিপ্টোকারেন্সি প্ল্যাটফর্মগুলির জন্য দুটি প্রধান ইন্টারফেস প্রোটোকল রয়েছেঃ REST এবং ওয়েবসকেট। প্রতিবার যখন REST প্রোটোকল ডেটা অর্জন করে, তখন এটি একবার অ্যাক্সেস করা দরকার। উদাহরণস্বরূপ সিমুলেটেড প্ল্যাটফর্ম Wex.app এর API নেওয়া যাক। [লিঙ্ক] (https://api.wex.app/api/v1/public/ticker?market=BTC_USDT) সরাসরি ব্রাউজারে খুলুন এবং আপনি নিম্নরূপ ফলাফল পেতে পারেনঃ

{"data:{"buy":"11351.73","high":"11595.77","last":"11351.85","low":"11118.45","open":"11358.74","quoteVol":"95995607137.00903936","sell":"11356.02","time":1565593489318,"vol":"3552.5153"}}

এইভাবে, আপনি দেখতে পারেন যে ট্রেডিং জোড়া বিটিসি_ইউএসডিটি এর সর্বশেষ বাজার কোট অনুসরণ করে ট্রেডিং, প্রতিবার এটি রিফ্রেশ হওয়ার পরে পরিবর্তন হবে; মার্কেট=" এর পরে নির্দিষ্ট ট্রেডিং জোড়া পরামিতিগুলি অনুসরণ করা হয়, যা অন্যান্য ট্রেডিং জোড়া ডেটা পেতে সংশোধন করা যেতে পারে। বাজার কোটগুলির মতো পাবলিক ইন্টারফেসের জন্য, প্রত্যেকে সেগুলি পেতে পারে, সুতরাং কোনও যাচাইয়ের প্রয়োজন নেই। তবে, কিছু ইন্টারফেসের অর্ডার দেওয়ার সময় বা অ্যাকাউন্ট পাওয়ার সময় ব্যবহারকারীর পরিচয় নির্ধারণ করতে হবে। এই ক্ষেত্রে, সাইন ইন করার জন্য API-KEY প্রয়োজন। ওয়েবসকেট একটি সাবস্ক্রিপশন মোড। সাবস্ক্রাইব করা দরকার এমন সামগ্রী পাঠানোর পরে, প্ল্যাটফর্মটি আপডেট করা ডেটা প্রোগ্রামটিতে প্রেরণ করবে এবং এটি প্রতিবার পুনর্বিবেচনা করার প্রয়োজন নেই, তাই এটি আরও দক্ষ।

এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম প্রতিটি প্ল্যাটফর্মের আরইএসটি ইন্টারফেসকে ক্যাপসুল করে এবং কল করার জন্য একটি ইউনিফাইড উপায় এবং একটি ইউনিফাইড ডেটা ফর্ম্যাট ব্যবহার করে, কৌশল লেখাকে সহজ এবং আরও সাধারণ করে তোলে। ওয়েবসকেট সহজেই এফএমজেড প্ল্যাটফর্মে সমর্থিত হতে পারে, যা পরবর্তী টিউটোরিয়ালে বিস্তারিতভাবে চালু করা হবে।

বিভিন্ন প্রোগ্রামিং ভাষা

এফএমজেড প্ল্যাটফর্ম এপিআই ডকুমেন্টের বেশিরভাগ অংশ জাভাস্ক্রিপ্টকে উদাহরণ হিসাবে ব্যবহার করে, তবে ইনক্যাপসুলার কারণে, বিভিন্ন ভাষার মধ্যে প্রায় কোনও পার্থক্য নেই, এবং আপনাকে কেবল সিনট্যাক্স ইস্যুতে মনোযোগ দিতে হবে। C++" কিছুটা বিশেষ, এবং ভবিষ্যতের টিউটোরিয়ালগুলিতে একটি বিশেষ ভূমিকা থাকবে। যেহেতু Js তুলনামূলকভাবে সহজ এবং এর কোনও সামঞ্জস্যের সমস্যা নেই, তাই এটি নতুনদের ব্যবহারের জন্য সুপারিশ করা হয়। এফএমজেড কোয়ান্ট প্ল্যাটফর্ম সম্পূর্ণ পাইথন সমর্থন করে এবং বিভিন্ন প্যাকেজ অবাধে ইনস্টল করতে পারে। এটি এমন ব্যবহারকারীদের জন্য সুপারিশ করা হয় যাদের একটি নির্দিষ্ট প্রোগ্রামিং ফাউন্ডেশন রয়েছে। যারা প্রোগ্রামিং ভাষা শিখতে চান না এবং কেবল কৌশলগুলি লিখতে চান তাদের জন্য, এফএমজেড প্ল্যাটফর্মটি দ্রুত মাইল্যাঙ্গুয়েজকেও সমর্থন করে, যা মূলত ওয়েবস্টকের কৌশলগুলির সাথে সামঞ্জস্যপূর্ণ, এবং এটি প্রাসঙ্গিক অভিজ্ঞদের জন্য সুপারিশ করা হয়। অসুবিধাটি

যেহেতু পাইথনের বিভিন্ন সংস্করণ রয়েছে, তাই এটি প্রোগ্রামের শুরুতে নির্দিষ্ট করা যেতে পারে, যেমনঃ#!Python2এবং#!Python3. মনে রাখবেন যে জাভাস্ক্রিপ্ট সম্প্রতি তার ES6 সিনট্যাক্স আপগ্রেড করেছে, এবং যারা আগ্রহী তারা এটি সম্পর্কে শিখতে পারেন। একই ফাংশন সহ পাইথন এবং জাভাস্ক্রিপ্ট কোডগুলি নীচে দেখানো হয়েছে। এটি দেখা যায় যে কেবল সিনট্যাক্স পার্থক্য রয়েছে, তাই এপিআই নথিটি কেবল জাভাস্ক্রিপ্টের উদাহরণ দেয় এবং এই টিউটোরিয়ালটি পাইথনের বিশেষ ব্যবহারের ক্ষেত্রেও বিবেচনা করবে।

#python code
def main():
    while True:
        Log(exchange.GetAccount().Balance)
        Sleep(2000)
#the corresponding Js code
function main(){
    while(true){
        Log(exchange.GetAccount().Balance)
        Sleep(2000)
    }
}

সম্পদ সুপারিশ

  • এই টিউটোরিয়ালটি এফএমজেড প্ল্যাটফর্ম এপিআই নথিতে প্রতিটি ইন্টারফেসের উপর বিস্তারিত ভূমিকা দেবে না, তাই আপনি চেক আউট করতে পারেনএই নিবন্ধে আরো বিস্তারিত জানার জন্য.
  • আপনি যদি ট্রেডিংভিউ সিগন্যাল পেতে চান এবং FMZ এ অর্ডার দিতে চান, আপনি উল্লেখ করতে পারেনএই নিবন্ধটি.
  • জাভাস্ক্রিপ্ট এবং পাইথনের দ্রুত শুরু করার জন্য, সহজ কৌশল লেখার জন্য জটিল সিনট্যাক্সের প্রয়োজন হয় না, তবে কেবল কয়েকটি প্রাথমিক ধারণার প্রয়োজন হয়; আপনি কীভাবে প্রোগ্রামিং শিখছেন তা শিখার সময় আপনি টিউটোরিয়ালটি অধ্যয়ন করতে পারেন (https://www.fmz.com/bbs-topic/9123, https://www.fmz.com/bbs-topic/9124).
  • মাইল্যাঙ্গুয়েজ নথি; মাইল্যাঙ্গুয়েজ এখনও ট্রেন্ড কৌশলগুলির জন্য খুব সুবিধাজনক।
  • এখানে C++ এর একটি ইনভোকেশন উদাহরণ দেওয়া হল। যারা C++ তে আগ্রহী তারা এটি দেখতে পারেন। যেহেতু এটি একটি ব্যাখ্যা ভাষা নয়, তাই ডিবাগিং খুব কঠিন, তাইউদাহরণএটি সুপারিশ করা হয় না।
  • নেটইজ ক্লাউড ক্লাসরুমের ক্রিপ্টোকারেন্সি কোয়ান্টিটিভেটিভ ট্রেডিং কোর্স, যা এফএমজেড কর্তৃক আনুষ্ঠানিকভাবে তৈরি করা হয়েছে, এর জন্য মাত্র ২০ ইউয়ান লাগবে, এতে সহজ থেকে গভীর পর্যন্ত বিস্তারিত বিষয়বস্তু রয়েছে, যা নতুনদের জন্য উপযুক্ত!কোর্স লিংক
  • এখানে আছেকিছু শিক্ষণ কৌশলআপনি মূল বিষয়গুলো অধ্যয়ন করার সময় কৌশল লিখতে চেষ্টা করতে পারেন।
  • কৌশল উৎস কোডের বিস্তারিত ব্যাখ্যাঃলিঙ্ক.

ডিবাগ টুল

FMZ Quant প্ল্যাটফর্মডিবাগ টুলএপিআই ইন্টারফেস ডিবাগিংয়ের জন্য। ডিবাগিং টুলটি শুধুমাত্র জাভাস্ক্রিপ্টকে সমর্থন করে এবং শুধুমাত্র একটি নির্দিষ্ট সময়ের জন্য চালানো যেতে পারে; একটি বট তৈরি না করেই প্ল্যাটফর্ম ইন্টারফেসটি ডিবাগ করা যেতে পারে; ফলাফল হিসাবে রিটার্ন ডেটা ফেরত দেওয়া হবে, এবং ডিবাগিং টুলের কোড সংরক্ষণ করা হবে না। আপনি এই টিউটোরিয়ালটি কাজ করার সময়, আপনি একই সময়ে ডিবাগিং টুলের সাথে পরীক্ষা করতে পারেন।img

কৌশলগত কর্মসূচির কাঠামো

কৌশল প্রোগ্রামটি একটি সাধারণ প্রোগ্রামের মতোই, যা কোড আদেশে কার্যকর করা হয়। বিশেষ অংশটি হ'ল একটি main ফাংশন থাকতে হবে। যেহেতু কৌশলটি নিরবচ্ছিন্নভাবে চালানো দরকার, সাধারণত একটি লুপ প্লাস ঘুমের সময় প্রয়োজন। কারণ প্ল্যাটফর্ম এপিআইগুলির অ্যাক্সেস ফ্রিকোয়েন্সি সীমিত, ঘুমের সময়টি সেই অনুযায়ী সামঞ্জস্য করা দরকার। এই কাঠামোটি নির্দিষ্ট ব্যবধানে প্রচলিত কার্যকরকরণ, এবং আপনি ইভেন্ট-চালিত কৌশলগুলি লিখতে ওয়েবসকেটও ব্যবহার করেন। উদাহরণস্বরূপ, যতক্ষণ গভীরতা পরিবর্তন হয় ততক্ষণ তাত্ক্ষণিক কার্যকরকরণ, যা উন্নত টিউটোরিয়ালে প্রবর্তিত হবে।

বিশেষ কর্মের সাথে অন্যান্য ফাংশনগুলি নিম্নরূপ দেখানো হয়েছেঃ

  • onexit() হল একটি স্বাভাবিক on-exit ফাংশন; এর সর্বাধিক এক্সিকিউশন সময় 5 মিনিট; এটি অনির্দিষ্ট হতে পারে; যদি সময়টি শেষ হয়ে যায়, তাহলে একটি বিচ্ছিন্ন ত্রুটি রিপোর্ট করা হবে।
  • onerror() একটি অস্বাভাবিক আউটপুট ফাংশন; এর সর্বোচ্চ এক্সিকিউশন সময় 5 মিনিট; এটি অনির্দিষ্ট হতে পারে।
  • init () একটি সূচনা ফাংশন; এটি চালানো শুরু হলে এর কৌশল প্রোগ্রামটি স্বয়ংক্রিয়ভাবে কল করা হবে; এটি অনির্দিষ্ট হতে পারে।
function onTick(){
   var ticker = exchange.GetTicker()
   var account = exchange.GetAccount()
    //write the strategy logic here, and it will be called ever 6 seconds
}
function main(){
    while(true){
        onTick()
        Sleep(6000)
    }
}

পূর্ববর্তী উদাহরণে, যদি নেটওয়ার্ক অ্যাক্সেসে একটি ত্রুটি থাকে তবে কৌশলটি সরাসরি বন্ধ হতে পারে। যদি আপনি এমন একটি কৌশল চান যা স্বয়ংক্রিয় পুনরায় চালু করার মতো এবং বন্ধ হবে না, আপনি বট কৌশলটিতে try catch ত্রুটি-সহনশীল প্রধান লুপটি ব্যবহার করতে পারেন (ব্যাকটেস্টের জন্য try ব্যবহার করবেন না) । অবশ্যই, এটি কেবলমাত্র যখন কৌশলটি স্থিতিশীল হয় তখনই এটি প্রস্তাবিত, অন্যথায় সমস্ত ত্রুটি রিপোর্ট করা হবে না, কৌশলটিতে ত্রুটিগুলি খুঁজে পাওয়া কঠিন করে তোলে।

function onTick(){
   var ticker = exchange.GetTicker()
   var account = exchange.GetAccount()
    //write the strategy logic here, and it will be called ever 6 seconds
}
function main(){
    try{
        while(true){
           onTick()
           Sleep(6000)
       }
    }catch(err){
        Log(err)
    }
}

প্ল্যাটফর্ম এপিআই ভূমিকা

সেট প্ল্যাটফর্ম এবং ট্রেডিং জুটি

যখন কোনো প্ল্যাটফর্ম-সম্পর্কিত API কল, আপনি প্ল্যাটফর্ম এবং ট্রেডিং জোড়া নির্দিষ্ট করতে হবে. যদি শুধুমাত্র এক প্ল্যাটফর্ম-ট্রেডিং জোড়া একটি বট তৈরি করার সময় যোগ করা হয়, ব্যবহারexchangeএই বস্তুর প্রতিনিধিত্ব করতে. উদাহরণস্বরূপ, কিexchange.GetTicker()এই ব্যাঙ্কিং জোড়ার মার্কেট টিকার পাওয়া যাবে।

এফএমজেড কোয়ান্ট প্ল্যাটফর্ম একই সময়ে একাধিক এক্সচেঞ্জ-ট্রেডিং জোড়া অবজেক্ট যুক্ত করতে সমর্থন করে। উদাহরণস্বরূপ, আপনি একই সময়ে একই প্ল্যাটফর্ম অ্যাকাউন্টের বিটিসি এবং ইটিএইচ পরিচালনা করতে পারেন, অথবা আপনি একই সময়ে এক এক্সচেঞ্জের বিটিসি এবং অন্য এক্সচেঞ্জের ইটিএইচ পরিচালনা করতে পারেন। মনে রাখবেন যে একই প্ল্যাটফর্মের বিভিন্ন অ্যাকাউন্ট একই সময়ে যুক্ত করা যেতে পারে এবং এফএমজেড ওয়েবসাইটে যুক্ত লেবেল অনুযায়ী তারা আলাদা। যখন একাধিক এক্সচেঞ্জ-ট্রেডিং জোড়া অবজেক্ট থাকে, তখন ব্যবহার করুনexchangesতাদের প্রতিনিধিত্ব করার জন্য অ্যারে, যথাexchanges[0]এবংexchanges[1]... এবং তাই উপর, যোগ আদেশ অনুযায়ী যখন বট তৈরি করা হয়. ট্রেডিং জোড়া বিন্যাসে, মতBTC_USDT, পূর্ববর্তী BTC হল ট্রেডিং মুদ্রা, এবং USDT হল কোট মুদ্রা।

img

স্পষ্টতই, যদি আমরা অনেক ট্রেডিং জোড়া পরিচালনা করি, এই পদ্ধতিটি খুব অসুবিধাজনক হবে। এই পরিস্থিতিতে, আমরা ট্রেডিং জোড়া স্যুইচ করতে SetCurrency ব্যবহার করতে পারি, যেমনexchange.SetCurrency("BTC_USDT")তারপর, ট্রেডিং জোড়া আবদ্ধexchangeহয়ে যায়BTC_USDT, যা ট্রেডিং জোড়ার পরিবর্তনের পরবর্তী কল পর্যন্ত বৈধ থাকবে।মনে রাখবেন যে ব্যাকটেস্ট সম্প্রতি ট্রেডিং জোড়া স্যুইচিং সমর্থন করেনিচে একটি নির্দিষ্ট উদাহরণ দেওয়া হল:

var symbols = ["BTC_USDT", "LTC_USDT", "EOS_USDT", "ETH_USDT"]
var buyValue = 1000
function main(){
  for(var i=0;i<symbols.length;i++){
      exchange.SetCurrency(symbols[i])
      var ticker = exchange.GetTicker()
      var amount = _N(buyValue/ticker.Sell, 3)
      exchange.Buy(ticker.Sell, amount)
      Sleep(1000)
  }
}

পাবলিক ইন্টারফেস পান

পূর্ববর্তী উদাহরণে উল্লিখিত হিসাবে, বাজার ইন্টারফেসটি সাধারণত একটি পাবলিক ইন্টারফেস, যা প্রত্যেকের দ্বারা অ্যাক্সেস করা যায়। সাধারণ বাজার ইন্টারফেসগুলি হলঃ GetTicker, GetDepth, GetRecords এবং GetTrades। বাজার উদ্ধৃতি ট্রেডিং রায় দেওয়ার কৌশলটির ভিত্তি। পরে, আমি তাদের একের পর এক পরিচয় করিয়ে দেব। Debug Tool এ নিজেরাই চেষ্টা করা ভাল। আপনার যদি বিস্তারিত ব্যাখ্যা প্রয়োজন হয় তবে আপনি এটি API নথিতে পরীক্ষা করতে পারেন।

প্রতিটি ইন্টারফেসের সাধারণত একটিInfoক্ষেত্র, যা প্ল্যাটফর্ম দ্বারা ফিরে আসা মূল ডেটা স্ট্রিং প্রতিনিধিত্ব করে, এবং যা অতিরিক্ত তথ্য পরিপূরক করতে ব্যবহার করা যেতে পারে। এটি ব্যবহারের আগে বিশ্লেষণ করা প্রয়োজন। জাভাস্ক্রিপ্ট ব্যবহার করেJSON.parse(), যখন পাইথন json লাইব্রেরি ব্যবহার করে.Timeক্ষেত্রটি অনুরোধের সময় চিহ্নিত করে, যা বিলম্বের বিচার করতে ব্যবহার করা যেতে পারে।

বট এ কোন এপিআই ব্যবহার করার সময়, অ্যাক্সেস ব্যর্থ হতে পারে এবং ফিরেnull, এবং পাইথন ফিরে আসেNone. এই সময়ে, ব্যবহার করা তথ্য একটি ত্রুটি রিপোর্ট করবে এবং বট বন্ধ করতে হবে, তাই ত্রুটি সহনশীলতা খুবই গুরুত্বপূর্ণ. এই টিউটোরিয়াল ত্রুটি সহনশীলতা বিশেষভাবে পরিচয় করিয়ে দেবে.

GetTicker

GetTicker সম্ভবত সর্বাধিক ব্যবহৃত ইন্টারফেস। আপনি সর্বশেষ সময় কার্যকর মূল্য, কিনুন1 মূল্য এবং বিক্রয়1 মূল্য, এবং সর্বশেষ ট্রেডিং ভলিউম খুঁজে পেতে পারেন। একটি অর্ডার স্থাপন করার আগে, কার্যকর মূল্য টিকার তথ্য অনুযায়ী নির্ধারণ করা যেতে পারে। একটি বট রিটার্ন একটি উদাহরণঃ{"Info:{}, "High":5226.69, "Low":5086.37,"Sell":5210.63, "Buy":5208.5, "Last":5208.51, "Volume":1703.1245, "OpenInterest":0, "Time":1554884195976}.

function main() {
    var ticker = exchange.GetTicker()
    Log(ticker) //return ticker in the debugging tool, and you can see the specific result
    Log('Last time executed price:',ticker.Last, 'Buy1 price:', ticker.Buy)
}

গভীরতা পান

অবশিষ্ট অর্ডারের গভীরতা তথ্য পেতে GetDepth ব্যবহার করুন। যদিও GetTicker কেনার 1 এবং বিক্রয় 1 দাম অন্তর্ভুক্ত করে, আপনি যদি গভীর অবশিষ্ট অর্ডার অনুসন্ধান করতে চান তবে আপনি এই ইন্টারফেসটি ব্যবহার করতে পারেন, সাধারণত 200 অবশিষ্ট অর্ডার আপ এবং ডাউন চেক করতে। এই ইন্টারফেসটি ব্যবহার করে শক দাম গণনা করা যেতে পারে। নীচে একটি বাস্তব রিটার্ন ফলাফল রয়েছে। তাদের মধ্যে, Asks অবশিষ্ট বিক্রয় অর্ডারকে উপস্থাপন করে, এবং অ্যারেটি Sell1, Sell2... তাই দামও পাল্টাভাবে বৃদ্ধি পায়। Bids অবশিষ্ট ক্রয় অর্ডারকে উপস্থাপন করে, এবং অ্যারেটি buy1, buy2... দাম পাল্টাভাবে কমে যায়।

{
    "Info":null,
    "Asks":[
        {"Price":5866.38,"Amount":0.068644},
        {"Price":5866.39,"Amount":0.263985},
        ......
        ]
    "Bids":[
        {"Price":5865.13,"Amount":0.001898},
        {"Price":5865,"Amount":0.085575},
        ......
        ],
    "Time":1530241857399
}

Asks & Bids এর জন্য GetDepth ব্যবহারের উদাহরণঃ

function main() {
    var depth = exchange.GetDepth()
    Log('Buy 1 price:', depth.Bids[0].Price, 'Sell 1 price:', depth.Asks[0].Price)
}

GetRecords

GetRecords হল সর্বাধিক ব্যবহৃত ইন্টারফেসগুলির মধ্যে একটি, একটি সময়ে একটি দীর্ঘ সময়ের মধ্যে মূল্য তথ্য ফেরত দিতে পারে, যা বিভিন্ন সূচক গণনার ভিত্তি। যদি কে-লাইন সময় নির্দিষ্ট না করা হয়, তবে এটি একটি বট যোগ করার সময় ডিফল্ট সময়কাল ব্যবহার করার অর্থ। কে-লাইন দৈর্ঘ্য নির্দিষ্ট করা যায় না, এবং এটি সময়ের সাথে সাথে বৃদ্ধি অব্যাহত থাকবে। সর্বাধিক সংখ্যা 2000 এবং প্রথম কলটিতে সংখ্যাটি প্রায় 200 (বিভিন্ন প্ল্যাটফর্মগুলি বিভিন্ন নম্বর ফেরত দেয়) । শেষ কে-লাইন সর্বশেষ কে-লাইন, তাই বাজার কোট পরিবর্তন হিসাবে ডেটা পরিবর্তন হবে; প্রথম কে-লাইন হল প্রাচীনতম ডেটা।

exchange.SetMaxBarLen(Len)প্রথমবারের জন্য অর্জিত কে-লাইন সংখ্যা সেট করতে পারেন (কিছু প্ল্যাটফর্ম দ্বারা সমর্থিত), এবং কে-লাইন সর্বোচ্চ সংখ্যা সেট করতে পারেন।যেমনঃexchange.SetMaxBarLen(500).

GetRecords PERIOD_M1: 1 মিনিট, PERIOD_M5: 5 মিনিট, PERIOD_M15: 15 মিনিট, PERIOD_M30: 30 মিনিট, PERIOD_H1: 1 ঘন্টা এবং PERIOD_D1: 1 দিনের মতো সময় নির্দিষ্ট করতে পারে। নির্দিষ্ট ব্যবহারটি হলexchange.GetRecords(PERIOD_M1). সর্বশেষ ডকার আপগ্রেড করার পরে, এটি সময়কাল কাস্টমাইজিং সমর্থন করবে, যা কেবলমাত্র প্যারামিটার হিসাবে সময়ের দ্বিতীয় সংখ্যাটি পাস করে। মিনিটের স্তরের কাস্টমাইজেশনটি 1 মিনিটের কে-লাইন অনুসারে সংশ্লেষিত হবে, 1 মিনিটের নীচে কে-লাইনটি গেটট্রেডসের মাধ্যমে সংশ্লেষিত হবে))) এবং পণ্যের ফিউচারগুলি টিক অনুসারে সংশ্লেষিত হবে।মনে রাখবেন যে অন্যান্য পূর্ণ বড় অক্ষর ভেরিয়েবল আছে যেমনPERIOD_M1টিউটোরিয়ালে. তারা FMZ এর ডিফল্ট গ্লোবাল ভেরিয়েবল হয়. আপনি আগ্রহী হলে, আপনি নিজের দ্বারা তাদের নির্দিষ্ট মান log করতে পারেন, এবং আপনি তাদের সরাসরি স্বাভাবিক ব্যবহার করতে পারেন.

রিটার্ন ডেটা উদাহরণঃ

[
    {"Time":1526616000000,"Open":7995,"High":8067.65,"Low":7986.6,"Close":8027.22,"Volume":9444676.27669432},
    {"Time":1526619600000,"Open":8019.03,"High":8049.99,"Low":7982.78,"Close":8027,"Volume":5354251.80804935},
    {"Time":1526623200000,"Open":8027.01,"High":8036.41,"Low":7955.24,"Close":7955.39,"Volume":6659842.42025361},
    ......
]

পুনরাবৃত্তি করা কে-লাইনের উদাহরণঃ

function main(){
    var close = []
    var records = exchange.GetRecords(PERIOD_H1)
    Log('total bars: ', records.length)
    for(var i=0;i<records.length;i++){
        close.push(records[i].Close)
    }
    return close
}

GetTrades

GetTrades একটি নির্দিষ্ট সময়সীমার মধ্যে ট্রেডিং ডেটা পায় (আপনার নিজের ট্রেডিং ডেটা নয়), যা কিছু প্ল্যাটফর্ম দ্বারা সমর্থিত নয়। এটি সাধারণত ব্যবহৃত হয় না, এবং আপনি API নথিতে বিস্তারিত ভূমিকা পরীক্ষা করতে পারেন।

ট্রেডিংয়ের জন্য অ্যাকাউন্ট পান

এই ইন্টারফেসগুলি অ্যাকাউন্টের সাথে সম্পর্কিত, তাই এগুলি সরাসরি প্রাপ্ত করা যায় না। এগুলি পেতে আপনাকে সাইন ইন করতে API-KEY ব্যবহার করতে হবে। FMZ প্ল্যাটফর্মের ইউনিফাইড স্বয়ংক্রিয় ব্যাকগ্রাউন্ড প্রসেসিংয়ের পরে, আপনি এগুলি সরাসরি ব্যবহার করতে পারেন।

অ্যাকাউন্ট পান

অ্যাকাউন্টের তথ্য পেতে GetAccount ব্যবহার করুন। এটি সর্বাধিক ব্যবহৃত ইন্টারফেসগুলির মধ্যে একটি হিসাবে, অর্ডার দেওয়ার আগে এটি কল করা দরকার, যাতে অপর্যাপ্ত ভারসাম্য এড়ানো যায়। রিটার্ন ফলাফলটি হলঃ{"Stocks":0.38594816,"FrozenStocks":0,"Balance":542.858308,"FrozenBalance":0,"Info":{}}যেখানে Stocks হল ট্রেডিং জোড়ার ট্রেডিং মুদ্রার উপলব্ধ ব্যালেন্স, FrozenStocks হল অ-সম্পাদিত অর্ডারের হিমায়িত ব্যালেন্স, Balance হল কোট মুদ্রার উপলব্ধ পরিমাণ এবং FrozenBalance হল হিমায়িত ব্যালেন্স। যদি ট্রেডিং জোড়াটিBTC_USDT, Stocks এর অর্থ BTC, এবং Balance এর অর্থ USDT।

মনে রাখবেন যে রিটার্ন ফলাফলটি নির্দিষ্ট ট্রেডিং জোড়ার ফলাফল, এবং ট্রেডিং অ্যাকাউন্টের অন্যান্য মুদ্রার তথ্য Info ক্ষেত্রে রয়েছে, তাই আপনি যখন একাধিক ট্রেডিং জোড়া পরিচালনা করেন তখন আপনাকে এটি একাধিকবার কল করার প্রয়োজন নেই।

বর্তমান ট্রেডিং জোড়ার মোট মূল্য ক্রমাগত মুদ্রণ করছে এমন একটি বট:

function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var account = exchange.GetAccount()
        var price = ticker.Buy
        var stocks = account.Stocks + account.FrozenStocks
        var balance = account.Balance + account.FrozenBalance
        var value = stocks*price + balance
        Log('Account value is: ', value)
        LogProfit(value)
        Sleep(3000)//sleep 3000ms(3s), A loop must has a sleep, or the rate-limit of the exchange will be exceed
        //when run in debug tool, add a break here
    }
}

ক্রয় আদেশ

ক্রয় অর্ডার. আহ্বানের পদ্ধতি অন্তর্ভুক্তexchange.Buy(Price, Amount)এবংexchange.Buy(Price, Amount, Msg), যেখানে Price মূল্য নির্দেশ করে, Amount পরিমাণ, Msg একটি অতিরিক্ত স্ট্রিং যা বট লগ প্রদর্শিত হতে পারে, কিন্তু প্রয়োজন হয় না। এই পদ্ধতিগুলি অপেক্ষমান আদেশ। যদি অর্ডারটি অবিলম্বে সম্পূর্ণরূপে কার্যকর করা যায় না, তবে একটি অসম্পূর্ণ অর্ডার তৈরি করা হবে; অর্ডারটি সফলভাবে স্থাপন করা হলে অর্ডার আইডি ফেরত দেওয়া হয় এবংnullঅর্ডারটি ব্যর্থ হলে ফেরত দেওয়া হবে, যা অর্ডারের অবস্থা অনুসন্ধান করতে ব্যবহৃত হয়।

আপনি যদি বাজার মূল্যে ক্রয় অর্ডার দিতে চান, Price হল -1, এবং Amount অর্ডারের মান। উদাহরণস্বরূপ,exchange.Buy(-1, 0.5); যদি ট্রেডিং জুটিETH_BTCকিছু প্ল্যাটফর্ম মার্কেট অর্ডার সমর্থন করে না, এবং ফিউচার ব্যাকটেস্টও করে না।

কিছু প্ল্যাটফর্মের দাম এবং পরিমাণের জন্য নির্ভুলতার প্রয়োজনীয়তা রয়েছে যা নির্ভুলতা ফাংশন দিয়ে নিয়ন্ত্রণ করা যেতে পারে_N()ফিউচার ট্রেডিংয়ের ক্ষেত্রে, Buy এবং Sell এর অন্যান্য অর্থ রয়েছে, যা বিশেষভাবে চালু করা হবে।

সংশ্লিষ্ট মূল্যে পৌঁছানোর পর কিনে নেওয়ার একটি উদাহরণঃ

function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var price = ticker.Sell
        if(price >= 7000){
            exchange.Buy(_N(price+5,2), 1, 'BTC-USDT')
            break
        }
        Sleep(3000)//Sleep 3000ms
    }
    Log('done')
}

বিক্রয় আদেশ

বিক্রয় আদেশ। পরামিতিগুলি Buy এর সাথে একই। বাজার আদেশের পরামিতিগুলির বিভিন্ন অর্থ রয়েছে। একটি বাজার বিক্রয় আদেশ, যেমনexchange.Sell(-1, 0.2), মানে ০.২ ইটিএইচ বাজার মূল্যে বিক্রি করা।

অর্ডার পান

GetOrder অর্ডার আইডি উপর ভিত্তি করে অর্ডার তথ্য পায়. যখন এই সাধারণ ইন্টারফেস পদ্ধতি কলexchange.GetOrder(OrderId), OrderId হল অর্ডার আইডি, যা অর্ডার দেওয়ার সময় ফেরত দেওয়া হবে। লক্ষ্য করুন যে অর্ডারের স্ট্রিংTypeএবং অর্ডার প্রকৃত মানStatusFMZ এই মানগুলির প্রতিনিধিত্ব করতে গ্লোবাল ধ্রুবক ব্যবহার করে। উদাহরণস্বরূপ,Statusএকটি অসম্পূর্ণ অর্ডার মান 0, যা সমতুল্যORDER_STATE_PENDING. এই সব গ্লোবাল ধ্রুবক নথিতে দেখা যাবে... রিটার্ন ফলাফলঃ

{
    "Id":125723661, //Order id
    "Amount":0.01, //Order ammount 
    "Price":7000, //Order price 
    "DealAmount":0, //Executed amount 
    "AvgPrice":0, //executed average price
    "Status":0, //0: not completely executed; 1: executed; 2: canceled 
    "Type":1,//Order type; 0: buy order; 1: sell order 
    "ContractType":"",//contract type, used in futures trading
    "Info":{} //the platform returns the raw information
    }
}

নির্দিষ্ট পরিমাণ মুদ্রা কেনার কৌশলঃ

function main(){
    while(true){
        var amount = exchange.GetAccount().Stocks
        var ticker = exchange.GetTicker()
        var id = null
        if(5-amount>0.01){
            id = exchange.Buy(ticker.Sell, Math.min(5-amount,0.2))
        }else{
            Log('Job completed')
            return //return the main function, bot will stop
        }
        Sleep(3000) //Sleep 3000ms
        if(id){
            var status = exchange.GetOrder(id).Status
            if(status == 0){ //Here you can aslo use "status == ORDER_STATE_PENDING" to judge 
                exchange.CancelOrder(id)
            }
        }
    }
}

অর্ডার পান

GetOrder বর্তমান ট্রেডিং জোড়ার সমস্ত অসম্পূর্ণ অর্ডারের তালিকা পায়। যদি কোন অসম্পূর্ণ অর্ডার না থাকে তবে একটি খালি অ্যারে ফেরত দেয়। অর্ডার তালিকার নির্দিষ্ট ফলাফল, যেমন GetOrder

বর্তমান ট্রেডিং জোড়ার সমস্ত অর্ডার বাতিল করার উদাহরণঃ

function CancelAll(){
    var orders = exchange.GetOrders()
    for(var i=0;i<orders.length;i++){
        exchange.CancelOrder(orders[i].Id) // cancel order by orderID
    }
}
function main(){
    CancelAll()
    while(true){
        //do something
        Sleep(10000)
    }
}

অর্ডার বাতিল করুন

অর্ডার আইডি অনুযায়ী, অর্ডার বাতিল করুন।exchange.CancelOrder(OrderId). যদি বাতিল সফল হয়, তাহলে true ফেরত দিন; যদি না হয়, তাহলে false ফেরত দিন।

ফিউচার ও চিরস্থায়ী চুক্তি

ক্রিপ্টোকারেন্সির জন্য, ফিউচার ট্রেডিং স্পট ট্রেডিং থেকে আলাদা। স্পট ট্রেডিংয়ের উপরের ফাংশনগুলি ফিউচার ট্রেডিংয়ের জন্যও প্রযোজ্য, এবং একক ফিউচার ট্রেডিংয়ের নিজস্ব ফাংশন রয়েছে। ক্রিপ্টোকারেন্সি ফিউচারগুলির প্রোগ্রাম ট্রেডিং পরিচালনার আগে, আপনাকে ওয়েবসাইটে ম্যানুয়াল অপারেশনগুলির সাথে পরিচিত হওয়া উচিত এবং মূল ধারণাগুলি যেমন খোলা, বন্ধ, ক্রস, বিচ্ছিন্ন, লিভারেজ, বন্ধ লাভ এবং ক্ষতি, ভাসমান আয়, মার্জিন এবং অন্যান্য ধারণাগুলি, পাশাপাশি সংশ্লিষ্ট গণনার সূত্রগুলি বুঝতে হবে। সংশ্লিষ্ট টিউটোরিয়ালগুলি বিভিন্ন ফিউচার প্ল্যাটফর্মে পাওয়া যাবে এবং আপনাকে সেগুলি নিজেরাই শিখতে হবে।

চিরস্থায়ী চুক্তিগুলি ফিউচার চুক্তির অনুরূপ, তবে পার্থক্যটি হ'ল একই সময়ে দীর্ঘ এবং সংক্ষিপ্ত অবস্থান রাখার কোনও ধারণা নেই।

যদি প্ল্যাটফর্মটি ওকেএক্স এবং হুওবির ফিউচার এবং স্পট উভয়ই সমর্থন করে তবে আপনাকে প্ল্যাটফর্ম ইন্টারফেসে আলাদাভাবে ওকেএক্স ফিউচার এবং হুওবি ফিউচার নির্বাচন করতে হবে, কারণ এই ফিউচার প্ল্যাটফর্মগুলি এফএমজেডের স্পট প্ল্যাটফর্মগুলির থেকে আলাদা প্ল্যাটফর্ম হিসাবে বিবেচিত হয়।

SetContractType

ফিউচার ট্রেডিংয়ের প্রথম ধাপ হল ট্রেড করার জন্য চুক্তি সেট করা। উদাহরণস্বরূপ ওকেএক্স ফিউচার গ্রহণ করে, একটি বট বা ব্যাকটেস্টিং তৈরি করার সময় একটি বিটিসি ট্রেডিং জোড়া নির্বাচন করুন এবং আপনাকে কোডে সাপ্তাহিক, পরের সপ্তাহ বা ত্রৈমাসিক চুক্তিও সেট করতে হবে। যদি এটি সেট না হয় তবে এটি আপনাকে অনুরোধ করবেinvalid contract type. স্পট ট্রেডিং জোড়া থেকে পৃথক, ফিউচার চুক্তিগুলি প্রায়শই মার্জিন হিসাবে বিটিসির মতো ট্রেডিং মুদ্রা ব্যবহার করে। একটি ট্রেডিং জোড়ায় বিটিসি যুক্ত করা সাধারণত বিটিসি_ইউএসডি ট্রেডিং জোড়ার প্রতিনিধিত্ব করে যা মার্জিন হিসাবে বিটিসি ব্যবহার করে। যদি মার্জিন হিসাবে ইউএসডিটি সহ কোনও ফিউচার চুক্তি থাকে তবে বিটিসি_ইউএসডিটি ট্রেডিং জোড়া যুক্ত করতে একটি বট তৈরি করতে হবে। উদাহরণস্বরূপ, বাইনারেন্স ওকেএক্স ফিউচারগুলির মতো চিরস্থায়ী চুক্তি, উভয় ক্রিপ্টো-মার্জিনযুক্ত এবং ইউএসডিটি-মার্জিনযুক্ত চুক্তি সহ।ট্রেডিং জোড়া সেট করার পরে, আপনাকে নির্দিষ্ট চুক্তির ধরন যেমন চিরস্থায়ী, সাপ্তাহিক, পরের সপ্তাহ ইত্যাদি সেট করতে হবে। চুক্তিটি সেট করার পরে, আপনি বাজার কোট, ক্রয় এবং বিক্রয় পাওয়ার মতো ক্রিয়াকলাপ সম্পাদন করতে পারেন।

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

//OKEX Futures
exchange.SetContractType("swap")        // set to perpetual contract
exchange.SetContractType("this_week")   // set to weekly contract 
exchange.SetContractType("next_week")   // set to next week contract 
exchange.SetContractType("quarter")     // set to quarterly contract

//HuobiDM
exchange.SetContractType("this_week")   // set to weekly contract 
exchange.SetContractType("next_week")   // set to next week contract
exchange.SetContractType("quarter")     // set to quarterly contract 
exchange.SetContractType("swap")        // set to perpetual contract

//Binance Futures
exchange.SetContractType("swap")   // set to perpetual contract, and notice that crypto-margined and USDT-margined contracts are all in the perpetual contract
exchange.SetContractType("quarter")   // set to quarterly contract
exchange.SetContractType("next_quarter")  // set to next quarter contract

//BitMEX
exchange.SetContractType("XBTUSD")    // set to perpetual contract
exchange.SetContractType("XBTM19")  // the contract settled at a specific time; for more details, please log in BitMEX to check each contract code

//GateIO
exchange.SetContractType("swap")      // set to perpetual contract, and do not set the default as swap perpetual contract 
//Deribit
exchange.SetContractType("BTC-27APR18")  // the contract settled at a specific time; for more details, please log in Deribit to check out 

অবস্থান পান

বর্তমান অবস্থান তথ্য তালিকা পেতে, OKEX (OKCOIN) ফিউচার একটি পরামিতি পাস করতে পারেন প্রাপ্ত চুক্তি টাইপ নির্দিষ্ট করতে। একটি খালি তালিকা ফেরত[], যদি কোন অবস্থান না থাকে। অবস্থান তথ্য নিম্নরূপ ফেরত দেওয়া হয়। অনেক নির্দিষ্ট তথ্য আছে, যা ট্রেডিং জোড়া সঙ্গে সমন্বয়ে বিশ্লেষণ করা প্রয়োজন।

ডেটা টাইপ ভেরিয়েবল নাম বর্ণনা
বস্তু তথ্য প্ল্যাটফর্ম রিটার্ন করে এমন কাঁচা কাঠামো
সংখ্যা মার্জিন লেভেল লিভারেজ আকার; OKCoin 10 বা 20 হয়, এবং OK ফিউচার ক্রস পজিশন 10 (স্থির) ফেরত, জন্য কাঁচা API সমর্থন করে না
সংখ্যা পরিমাণ পজিশনের পরিমাণ; OKCoin চুক্তির পরিমাণ নির্দেশ করে (১ এর পূর্ণসংখ্যা)
সংখ্যা হিমায়িত পরিমাণ হিমায়িত পজিশন পরিমাণ
সংখ্যা দাম পজিশনের গড় মূল্য
সংখ্যা মার্জিন ফ্রিজড মার্জিন
সংখ্যা মুনাফা কমোডিটি ফিউচারঃ মার্কেটে অবস্থানের মুনাফা এবং ক্ষতির চিহ্ন; ক্রিপ্টোকারেন্সিঃ ক্রিপ্টোকারেন্সি ইউনিটঃ বিটিসি / এলটিসি, traditionalতিহ্যবাহী ফিউচার ইউনিটঃ আরএমবি (দ্রষ্টব্যঃওকেকয়েনের ফিউচারগুলির ক্রস পজিশনের ক্ষেত্রে, এটি উপলব্ধ মুনাফা এবং ক্ষতি বোঝায়, অবস্থানের মুনাফা এবং ক্ষতি নয়। বিচ্ছিন্ন অবস্থানের অধীনে, এটি অবস্থানের মুনাফা এবং ক্ষতি বোঝায়।)
কনস্ট প্রকার PD_LONG হল লং পজিশন (CTP একটি পজিশন বন্ধ করতে closebuy_today ব্যবহার করে); PD_SHORT হল শর্ট পজিশন (CTP একটি পজিশন বন্ধ করতে closesell_today ব্যবহার করে); CTP ফিউচারে, PD_LONG_YD গতকালের লং পজিশন নির্দেশ করে (যা পজিশন বন্ধ করতে closebuy ব্যবহার করে); PD_SHORT_YD হল গতকালের শর্ট পজিশন (যা পজিশন বন্ধ করতে closesell ব্যবহার করে)
স্ট্রিং চুক্তির ধরন কমোডিটি ফিউচার হল চুক্তির কোড, এবং স্টক হল প্ল্যাটফর্ম কোড_স্টক কোড; সেটকন্ট্রাক্ট টাইপের নির্দিষ্ট পরামিতিগুলির পাস টাইপ
function main(){
    exchange.SetContractType("this_week");
    var position = exchange.GetPosition();
    if(position.length>0){ //especially pay attention to judging the length of position before call, or an error will occur
        Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
            position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,"ContractType:", position[0].ContractType)
    }
}

ফিউচার ওপেন ও ক্লোজ পজিশন

প্রথমত, আপনি লিভারেজ আকার সেট করতে হবে; কল পদ্ধতিঃexchange.SetMarginLevel(10), যেখানে 10 অর্থ হোল্ডিংয়ের ১০ গুণ, এবং নির্দিষ্ট সমর্থিত হোল্ডিংয়ের আকার সংশ্লিষ্ট প্ল্যাটফর্মে পরীক্ষা করা যেতে পারে,মনে রাখবেন যে লিভারেজটি প্ল্যাটফর্মে সেট করা উচিত এবং কোডটি প্ল্যাটফর্মে সেট করা সেটিংসগুলির সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত, অন্যথায় একটি ত্রুটি ঘটবেআপনি এটিকে আনসেট রেখে ডিফল্ট লিভারেজ ব্যবহার করতে পারেন। তারপর, ট্রেডিং দিক নির্ধারণ করুন; কল পদ্ধতিঃexchange.SetDirection(Direction), যা খোলা ও বন্ধ পজিশনের সাথে মিলে যায়।ফিউচারগুলির বিপরীতে, যদি একটি চিরস্থায়ী চুক্তি একই সময়ে দীর্ঘ এবং সংক্ষিপ্ত ধারণাগুলি ধারণ করে না, অর্থাৎ একটি একক অবস্থান অনুমোদিত নয়। যখন আপনি একটি দীর্ঘ অবস্থানের উপর খোলা সংক্ষিপ্ত কাজ করেন, তখন দীর্ঘ অবস্থানটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে, তাই আপনাকে কেবল সেট করতে হবেbuyএবংsell. যদি এটি উভয় দিক অবস্থান সমর্থন করে, আপনি সেট করতে হবেclosebuy, closesell.বিশেষ সম্পর্কঃ

অপারেশন সেটডিরেকশন প্যারামিটার অর্ডার দেওয়ার কাজ
খোলা লং পজিশন exchange.SetDirection ((buy) বিনিময়.কপাই ((()
লং পজিশন বন্ধ করুন exchange.SetDirection ((closebuy) বিনিময়.বিক্রয় ((()
খোলা শর্ট পজিশন exchange.SetDirection ((sell) বিনিময়.বিক্রয় ((()
শর্ট পজিশন বন্ধ করুন exchange.SetDirection ((closesell) বিনিময়.কপাই ((()

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

function main(){
    exchange.SetContractType("this_week")    // for example, set OKEX futures to weekly contract 
    price = exchange.GetTicker().Last
    exchange.SetMarginLevel(10) // set to 10 times of leverage  
    exchange.SetDirection("buy") // set the order type as buy long 
    exchange.Buy(price+10, 20) // set contract quantity as 20 orders
    pos = exchange.GetPosition()
    Log(pos)
    Log(exchange.GetOrders()) // check out if there is any unfinished order 
    exchange.SetDirection("closebuy"); // if it is a perpetual contract, directly set exchange.SetDirection("sell")
    exchange.Sell(price-10, 20)
}

নিম্নরূপ পূর্ণ বন্ধ পজিশনের একটি নির্দিষ্ট কৌশল উদাহরণ দিনঃ

function main(){
    while(true){
        var pos = exchange.GetPosition()
        var ticker = exchange.GetTicekr()
        if(!ticker){
            Log('not able to obtain ticker')
            return
        }
        if(!pos || pos.length == 0 ){
            Log('no position')
            return
        }
        for(var i=0;i<pos.length;i++){
            if(pos[i].Type == PD_LONG){
                exchange.SetContractType(pos[i].ContractType)
                exchange.SetDirection('closebuy')
                exchange.Sell(ticker.Buy, pos[i].Amount - pos[i].FrozenAmount)
            }
            if(pos[i].Type == PD_SHORT){
                exchange.SetContractType(pos[i].ContractType)
                exchange.SetDirection('closesell')
                exchange.Buy(ticker.Sell, pos[i].Amount - pos[i].FrozenAmount)
            }
        }
        var orders = exchange.Getorders()
        Sleep(500)
        for(var j=0;j<orders.length;j++){
            if(orders[i].Status == ORDER_STATE_PENDING){
                exchange.CancelOrder(orders[i].Id)
            }
        }
    }
}

ক্রিপ্টোকারেন্সি লিভারেজ ট্রেডিং

ক্রিপ্টোকারেন্সি লিভারেজ ট্রেডিং কোডের লিভারেজ অ্যাকাউন্টে স্যুইচ করতে হবে, এবং অন্যান্য অংশগুলি স্পট ট্রেডিংয়ের মতোই।

ব্যবহারexchange.IO("trade_margin") লিভারেজ অ্যাকাউন্ট মোডে স্যুইচ করতে; একটি অর্ডার স্থাপন এবং অ্যাকাউন্ট সম্পদ প্রাপ্তি প্ল্যাটফর্ম লিভারেজের ইন্টারফেস অ্যাক্সেস করবে। ব্যবহারexchange.IO("trade_normal") সাধারণ অ্যাকাউন্ট মোডে ফিরে যেতে।

সমর্থিত প্ল্যাটফর্মঃ

  • OKEX V3: লিভারেজ অ্যাকাউন্ট মোডের ট্রেডিং জোড়া সাধারণ জোড়া থেকে আলাদা, এবং কিছু ট্রেডিং জোড়া বিদ্যমান নাও থাকতে পারে।
  • হুবিঃ লিভারেজ অ্যাকাউন্ট মোডের ট্রেডিং জোড়া সাধারণ জোড়া থেকে আলাদা এবং কিছু ট্রেডিং জোড়া বিদ্যমান নাও থাকতে পারে।
  • ZB: সম্পদগুলি কেবল QC-তে স্থানান্তরিত হতে পারে। লিভারেজ ট্রেডিং সেক্টরে, বিভিন্ন ট্রেডিং জোড়ার মধ্যে সম্পদগুলি স্বাধীন, অর্থাৎ, ETH_QC ট্রেডিং জোড়ার অধীনে QC মুদ্রার সংখ্যা BTC_QC-তে দৃশ্যমান নয়।
  • এফসিওইন
  • বিন্যান্স

পণ্যের ফিউচার ট্রেডিং

কমোডিটি ফিউচার ট্রেডিং এবং ক্রিপ্টোকারেন্সি ফিউচার ট্রেডিং বেশ আলাদা। প্রথমত, কমোডিটি ফিউচারগুলির ট্রেডিংয়ের সময় খুব কম, তবে ক্রিপ্টোকারেন্সি 24 ঘন্টা ধরে ট্রেড করা হয়; কমোডিটি ফিউচারগুলির প্রোটোকলটি সাধারণত ব্যবহৃত REST API নয়; কমোডিটি ফিউচারগুলির ট্রেডিং ফ্রিকোয়েন্সি এবং মুলতুবি অর্ডার পরিমাণ সীমিত, তবে ক্রিপ্টোকারেন্সিগুলির খুব আলগা, ইত্যাদি। অতএব, কমোডিটি ফিউচার ট্রেডিংয়ের সময় বিশেষ মনোযোগের প্রয়োজন এমন অনেকগুলি বিষয় রয়েছে এবং ম্যানুয়াল অপারেশনে সমৃদ্ধ অভিজ্ঞতার জন্য এটি প্রস্তাবিত। এফএমজেড এখন কমোডিটি ফিউচার সিমুলেটেড বট সমর্থন করে এবং আপনি উল্লেখ করতে পারেনঃhttps://www.fmz.com/bbs-topic/325কমোডিটি ফিউচার কোম্পানি যোগ করার জন্যঃhttps://www.fmz.com/bbs-topic/371

কমোডিটি ফিউচারগুলি জুন 2019 এ see-through তদারকি বাস্তবায়ন করেছে; পৃথক প্রোগ্রামের জন্য, পৃথক ব্যবহারকারীদের ফিউচার ব্রোকারদের জন্য অনুমোদনের কোডের জন্য আবেদন করার জন্য একটি অ্যাকাউন্ট খুলতে হবে (নির্দিষ্ট অ্যাপ্লিকেশন তথ্য টেম্পলেটটি ওয়েচ্যাট গ্রুপ বা কিউকিউ গ্রুপে প্রেরণ করা যেতে পারে), যা সাধারণত 4-5 দিন সময় নেয়; পদ্ধতিগুলি বেশ জটিল। একটি প্রোগ্রাম্যাটিক ট্রেডিং সরবরাহকারী হিসাবে, এফএমজেড প্ল্যাটফর্মটি বিভিন্ন ফিউচার পরিষেবা সরবরাহকারীদের কাছ থেকে সফ্টওয়্যার অনুমোদনের কোডগুলির জন্য আবেদন করেছে। ব্যবহারকারীরা আবেদন না করেই সরাসরি সেগুলি ব্যবহার করতে পারে। একটি ফিউচার ব্রোকার যুক্ত করার সময়, এফএমজেডের জন্য আবেদন করা তালিকাটি দেখতে see through এর জন্য অনুসন্ধান করুন। নির্দিষ্ট রেফারেন্স পোস্টঃhttps://www.fmz.com/bbs-topic/3860. যদি আপনার ফিউচার ব্রোকারটি আর তালিকায় না থাকে তবে আপনি কেবল নিজেরাই আবেদন করতে পারেন, বা সমর্থিত ব্রোকারের একটি নতুন অ্যাকাউন্ট খুলতে পারেন, যা সাধারণত 2 দিন সময় নেয়। এফএমজেডের কিছু পরিষেবা সরবরাহকারীর সাথে গভীর সহযোগিতামূলক সম্পর্ক রয়েছে; উদাহরণস্বরূপ, গুওতাই জুনান হংকুয়ান ফিউচারস এফএমজেড প্ল্যাটফর্মের প্রাতিষ্ঠানিক সংস্করণ কিনেছে, যা এর ব্যবহারকারীরা ব্যবহার করতে পারে এবং ব্যবহারকারীরা অ্যাকাউন্ট খোলার সময় স্বয়ংক্রিয়ভাবে ভিআইপি হয়ে যায় এবং পরিষেবা ফি হ্রাস পায়। অ্যাকাউন্ট খোলার রেফারেন্সঃhttps://www.fmz.com/bbs-topic/506.

এফএমজেড কোয়ান্ট প্ল্যাটফর্মের কাঠামোর সুবিধার কারণে, ব্যবহারকারীরা একাধিক ফিউচার ব্রোকার অ্যাকাউন্ট যুক্ত করতে পারে এবং অন্যান্য পণ্যের ফিউচার প্রোগ্রাম ট্রেডিং সফ্টওয়্যার যেমন উচ্চ-ফ্রিকোয়েন্সি টিকের সংশ্লেষণ সম্পন্ন করতে পারে না এমন কিছু ফাংশন বাস্তবায়ন করতে পারে; আপনি উল্লেখ করতে পারেনঃhttps://www.fmz.com/bbs-topic/1184

কৌশলগত কাঠামো

প্রথমত, এটি ২৪ ঘণ্টার ট্রেডিং নয় এবং এর জন্য লগইন অপারেশন প্রয়োজন, তাই ট্রেডিংয়ের আগে লিংক স্ট্যাটাস বিচার করা প্রয়োজন।exchange.IO("status")হয়true, যা প্ল্যাটফর্মের সাথে সফল সংযোগের ইঙ্গিত দেয়। লগইন সফল না হলে যদি এপিআই কল করা হয় তবে নট লগইন অনুরোধ করা হয় না। আপনি কৌশলটি শুরু করার পরে স্লাইপ (2000) যুক্ত করতে পারেন, এটিকে লগ ইন করার জন্য একটি নির্দিষ্ট সময় দিতে পারেন। আপনি আবার সাবস্ক্রাইব করার চেষ্টা করতে পারেন_C(exchange.SetContractType,"MA888"), যা সফলভাবে লগইন নিশ্চিত করবে।

কমোডিটি ফিউচারগুলির বাজার কোট অধিগ্রহণ এবং ট্রেডিং কোডগুলি ক্রিপ্টোকারেন্সি ফিউচারের সাথে একই। এখানে আমরা পার্থক্য এবং পয়েন্টগুলি পরিচয় করিয়ে দেব যা মনোযোগ দেওয়ার প্রয়োজন।

function main(){
    _C(exchange.SetContractType,"MA888") //If you do not log in successfully, you cannot subscribe to the contract, so better to try again
    while(true){
        if(exchange.IO("status")){
            var ticker = exchange.GetTicker()
            Log("MA888 ticker:", ticker)
            LogStatus(_D(), "Already connected with CTP !")//_D obtain event
        } else {
            LogStatus(_D(), "Not connected with CTP !")
            Sleep(1000)
        }
    }
}

ট্রেডিংয়ের জন্য কমোডিটি ফিউচার লাইব্রেরি ব্যবহার করার পরামর্শ দেওয়া হয় (যা পরে বর্ণনা করা হবে), কোডটি এই সময়ে খুব সহজ হবে, এবং ক্লান্তিকর বিবরণ মোকাবেলা করার প্রয়োজন নেই। উত্স কোড কপি ঠিকানাঃhttps://www.fmz.com/strategy/57029

function main() {
    // Use the CTA strategy framework of commodity futures library 
    $.CTA(Symbols, function(st) {
        var r = st.records
        var mp = st.position.amount
        var symbol = st.symbol
        /*
        "r" represents K-line, "mp" indicates the position amount of the current variety; positive number means long position, negative number means short position, and 0 means no position; "symbol" is the variety name
        if the return value is n: 
            n = 0 : full close positions (no matter now they are long or short)
            n > 0 : if right now long positions are held, add n long positions; if now they are short positions, close n short posiitons; if n is over the position amount right now, reverse to open long positions 
            n < 0 : if right now short positions are held, add n short positions; if now they are long positions, close n long posiitons; if -n is over the position amount right now, reverse to open short positions 
        */
        if (r.length < SlowPeriod) {
            return
        }
        var cross = _Cross(TA.EMA(r, FastPeriod), TA.EMA(r, SlowPeriod));
        if (mp <= 0 && cross > ConfirmPeriod) {
            Log(symbol, "Golden Cross Period", cross, "the moment position", mp);
            return Lots * (mp < 0 ? 2 : 1)
        } else if (mp >= 0 && cross < -ConfirmPeriod) {
            Log(symbol, "Death Cross Period", cross, "the moment position", mp);
            return -Lots * (mp > 0 ? 2 : 1)
        }
    });
}

সিটিপি ডেটা পাওয়ার পদ্ধতি

কমোডিটি ফিউচারগুলি সিটিপি প্রোটোকল ব্যবহার করে এবং সমস্ত বাজার কোট এবং অর্ডার কার্যকরকরণ পরিবর্তন হওয়ার পরে কেবলমাত্র বিজ্ঞাপিত হবে, যখন অর্ডার, অ্যাকাউন্ট এবং অবস্থান সম্পর্কে অনুসন্ধানগুলি সক্রিয় অনুসন্ধান। অতএব, এটি ইভেন্ট-চালিত উচ্চ-ফ্রিকোয়েন্সি কৌশল লেখার জন্য উপযুক্ত। ডিফল্ট মোডে বাজার কোট পাওয়ার জন্য ইন্টারফেসগুলি, যেমনGetTicker, GetDepthএবংGetRecords, সর্বশেষতম তথ্য পেতে সকলকে ক্যাশেড ডেটা থাকতে হবে। যদি কোনও ডেটা না থাকে তবে এটি ডেটা না পাওয়া পর্যন্ত অপেক্ষা করবে, তাই কৌশলটির জন্য Sleep ব্যবহার করা প্রয়োজন নেই। যখন বাজার কোট পরিবর্তন হয়, তখন টিকার, গভীরতা এবং রেকর্ডগুলি আপডেট করা হবে। এই সময়ে, এই ইন্টারফেসের যে কোনও একটি কল করা অবিলম্বে ফিরে আসবে এবং কল করা ইন্টারফেসের অবস্থা আপডেটের জন্য অপেক্ষা করুন মোডে সেট করা হবে। পরের বার যখন একই ইন্টারফেসটি কল করা হবে, এটি নতুন ডেটা ফিরে না আসা পর্যন্ত অপেক্ষা করবে। কিছু অপ্রচলিত চুক্তি বা মূল্য সীমা দীর্ঘ সময়ের জন্য কোনও ট্রেডিংয়ের কারণ হবে না, যার অর্থ কৌশলটি দীর্ঘ সময়ের জন্য আটকে গেছে, এটিও স্বাভাবিক।

আপনি যদি বাজার কোট পেতে প্রতিবার তথ্য পেতে চান, এমনকি যদি এটি পুরানো তথ্য, আপনি বাজারের কোট অবিলম্বে আপডেট মোডে স্যুইচ করতে পারেনexchange.IO("mode", 0). এই সময়ে, কৌশলটি ইভেন্ট-চালিত হিসাবে লেখা যাবে না, এবং একটি দ্রুত অসীম লুপ এড়াতে একটি SLeep ইভেন্ট যোগ করা প্রয়োজন। কিছু বিরল কৌশল এই মোড ব্যবহার করতে পারেন, এবং কৌশল নকশা সহজ। ব্যবহারexchange.IO("mode", 1)ডিফল্ট ক্যাশে মোডে ফিরে যেতে।

একটি একক চুক্তি পরিচালনা করার সময়, ডিফল্ট মোডটি ব্যবহার করুন। তবে, যদি একাধিক চুক্তি থাকে তবে এটি সম্ভব যে চুক্তিগুলির মধ্যে একটি বাজার কোট আপডেট করে না, যার ফলে বাজার কোট পাওয়ার জন্য ইন্টারফেস ব্লক হয় এবং অন্যান্য চুক্তির কোট আপডেটগুলিও পাওয়া যায় না। এই সমস্যাটি সমাধানের জন্য, তাত্ক্ষণিক আপডেট মোড ব্যবহার করা যেতে পারে, তবে উচ্চ-ফ্রিকোয়েন্সি কৌশলগুলি লিখতে অসুবিধা হয়। এই সময়ে আপনি অর্ডার এবং কোটগুলির ধাক্কা পেতে ইভেন্ট পুশ মোড ব্যবহার করতে পারেন। সেটিং পদ্ধতিটি হলexchange.IO("wait"). যদি একাধিক বিনিময় বস্তু যোগ করা হয়, যা কমোডিটি ফিউচার মধ্যে বিরল, আপনি ব্যবহার করতে পারেনexchange.IO("wait_any"), এবং ফেরত Index ফেরত প্ল্যাটফর্ম সূচক নির্দেশ করবে।

বাজার টিক পরিবর্তন ধাক্কাঃ{Event:"tick", Index: platform index (in the order of the platforms added in the bot), Nano: event of nanosecond-level time, Symbol: contract name}অর্ডার চাপঃ{Event:"order", Index:Exchange index, Nano:Event of nanosecond-level time, Order:Order information (same as GetOrder)}

এই সময়ে, কৌশল কাঠামো হিসাবে লেখা যেতে পারেঃ

function on_tick(symbol){
    Log("symbol update")
    exchange.SetContractType(symbol)
    Log(exchange.GetTicker())
}

function on_order(order){
    Log("order update", order)
}

function main(){
    while(true){
        if(exchange.IO("status")){ //Judge the link status 
            exchange.IO("mode", 0)
            _C(exchange.SetContractType, "MA888")//Subscribe to MA; only the subscription request for the first time is ture, and the later ones are program switches, which do not consume time
            _C(exchange.SetContractType, "rb888")//Subscribe to rb
            while(true){
                var e = exchange.IO("wait")
                if(e){
                    if(e.event == "tick"){
                        on_tick(e.Symbol)
                    }else if(e.event == "order"){
                        on_order(e.Order)
                    }
                }
           }
        }else{
            Sleep(10*1000)
        }
    }
}

কমোডিটি ফিউচার এবং ক্রিপ্টোকারেন্সির মধ্যে পার্থক্য

এছাড়াও কমোডিটি ফিউচার এবং ক্রিপ্টোকারেন্সি প্ল্যাটফর্মগুলির মধ্যে পার্থক্যটি লক্ষ্য করুন। উদাহরণস্বরূপ, গেটডিপথ আসলে কেবলমাত্র এক স্তরের গভীরতা রয়েছে (গভীরতার 5 স্তর ব্যয়বহুল), এবং গেটটট্রেডস ট্রেডিংয়ের ইতিহাস পেতে পারে না (সমস্ত অবস্থান পরিবর্তনের ভিত্তিতে সিমুলেট করা হয়, এবং কোনও বাস্তব ট্রেডিং রেকর্ড নেই) । কমোডিটি ফিউচারগুলির একটি মূল্য সীমা প্রক্রিয়া রয়েছে। যখন সীমাটি থাকে, তখন একটি বিক্রয়ের জন্য গভীর বিক্রয় আদেশের দাম সীমা মূল্য হয় এবং অর্ডার ভলিউম 0 হয়। যখন সীমাটি থাকে, তখন একটি কেনার অর্ডার ক্রয়ের দাম সীমা মূল্য হয় এবং অর্ডার ভলিউম 0 হয়। এছাড়াও, অ্যাকাউন্ট, অর্ডার এবং অবস্থানগুলি পাওয়ার মতো কমোডিটি ফিউচার ক্যোয়ারি ইন্টারফেসের ফ্রিকোয়েন্সি কঠোরভাবে সীমাবদ্ধ, সাধারণত প্রতি 2 সেকেন্ডে। কমোডিটি ফিউচারগুলিতে অর্ডারগুলির পরিমাণ এবং বাতিলের উপরও বিধিনিষেধ রয়েছে।

সেট চুক্তি

exchange.IO("ইনস্ট্রুমেন্টস"): এটি প্ল্যাটফর্মে {কন্ট্রাক্টের নামঃ বিস্তারিত} এর সমস্ত চুক্তির তালিকাটি অভিধানের আকারে ফেরত দেয় এবং শুধুমাত্র বটগুলিকে সমর্থন করে।exchange.IO("পণ্য"): এটি প্ল্যাটফর্মের সমস্ত আইটেমগুলির তালিকাটি অভিধানের আকারে ফেরত দেয় এবং কেবল বটগুলিকে সমর্থন করে।exchange.IO("সাবস্ক্রিপ্ট"): এটি প্ল্যাটফর্মে অভিধানের আকারে সাবস্ক্রাইব করা বাজার কোটগুলি ফেরত দেয় এবং কেবল বটগুলিকে সমর্থন করে।

দ্যContractTypeঐতিহ্যগত সিটিপি ফিউচার্স চুক্তি আইডি বোঝায়, যা বড় এবং ছোট ক্ষেত্রে সংবেদনশীল। যেমনexchange.SetContractType("au1506"). চুক্তিটি সফলভাবে সেট করার পরে, এটি চুক্তির বিশদ তথ্য, যেমন সর্বনিম্ন ক্রয়ের পরিমাণ, পরিষেবা ফি, বিতরণ সময় ইত্যাদি ফিরিয়ে দেবে। একাধিক চুক্তিতে সাবস্ক্রাইব করার সময়, কেবলমাত্র প্রথমবারের জন্য একটি সাবস্ক্রিপশন অনুরোধ পাঠানো হয় এবং তারপরে ট্রেডিং জোড়াটি কেবল কোড স্তরে স্যুইচ করা হয়, যা সময় নেয় না। প্রধান অবিচ্ছিন্ন চুক্তিটি হ'ল কোড 888, যেমন এমএ 888, অবিচ্ছিন্ন হার চুক্তিটি 000, যেমন এমএ 000; 888 এবং 000 হ'ল ভার্চুয়াল চুক্তি বাণিজ্য যা কেবল ব্যাকটেস্ট সমর্থন করে এবং আসল বটগুলি কেবল বাজার কোট সমর্থন করে।যাইহোক, মাইল্যাঙ্গুয়েজ মূল চুক্তি পরিচালনা করতে পারে, এবং প্রোগ্রামটি স্বয়ংক্রিয়ভাবে অবস্থান পরিবর্তন করবে, অর্থাৎ, অ-মূল অবস্থানগুলি বন্ধ করবে এবং প্রধান অবস্থানে নতুন অবস্থানগুলি খুলবে।

ব্যর্থ লগইন চুক্তি সেট করতে পারে না, কিন্তু অবিলম্বে ফিরে আসবে, তাই আপনি _c দ্বারা আবার চেষ্টা করতে পারেন, সিটিপি লগইন সম্পন্ন হয়েছে জানতে. সফল লগইন পরে, এটি চুক্তি সেট করতে কোন সময় খরচ করে না, এবং কোন বাস্তব নেটওয়ার্ক অ্যাক্সেস হবে না.

ওপেন পজিশন ও ক্লোজ পজিশন

ডাইরেকশন SetDirectionচারটি পরামিতি পেতে পারেঃbuy, closebuy, sell, closesellকমোডিটি ফিউচারগুলোতে বেশিclosebuy_todayএবংclosesell_today, যা বর্তমান পজিশনের সমাপ্তি নির্দেশ করে; ডিফল্ট হলclosebuy/ closesell, গতকালের অবস্থান বন্ধের ইঙ্গিত দেয়; শুধুমাত্র সাংহাই ফিউচার এক্সচেঞ্জের জাতগুলি আজ বন্ধ এবং গতকাল বন্ধে বিভক্ত, যা পরিষেবা ফিকে প্রভাবিত করতে পারে, তাই গতকালের অবস্থান বন্ধের অগ্রাধিকার দেওয়া প্রয়োজন। সিটিপি ঐতিহ্যগত ফিউচারগুলির জন্য, আপনি দ্বিতীয় পরামিতিটি 1 বা 2 বা 3 হিসাবে সেট করতে পারেন, যা যথাক্রমে স্পেকুলেশন, অর্বিট্রেজ এবং হেজ বোঝায়। যদি সেট না হয় তবে ডিফল্টটি হ'ল জল্পনা।ক্রয়-বিক্রয়, পজিশন গ্রহণ, অর্ডার গ্রহণ, অর্ডার বাতিল এবং অ্যাকাউন্ট গ্রহণের মতো নির্দিষ্ট ক্রিয়াকলাপগুলি ক্রিপ্টোকারেন্সি ফিউচার ট্রেডিংয়ের সাথে একই, তাই দয়া করে পূর্ববর্তী বিভাগটি দেখুন।

অপারেশন সেটডিরেকশন প্যারামিটার অর্ডার দেওয়ার কাজ
খোলা লং পজিশন exchange.SetDirection ((buy) বিনিময়.কপাই ((()
লং পজিশন বন্ধ করুন exchange.SetDirection ((closebuy) বিনিময়.বিক্রয় ((()
খোলা শর্ট পজিশন exchange.SetDirection ((sell) বিনিময়.বিক্রয় ((()
শর্ট পজিশন বন্ধ করুন exchange.SetDirection ((closesell) বিনিময়.কপাই ((()

নিম্নলিখিত উদাহরণটি একটি নির্দিষ্ট ক্লোজিং পজিশন ফাংশন। মনে রাখবেন যে এই উদাহরণটি খুব সহজ। আপনাকে বিবেচনা করতে হবে যে এটি ট্রেডিং সময়ের মধ্যে রয়েছে কিনা, যদি এটি সম্পূর্ণরূপে পূরণ না হয় তবে অপেক্ষমান অর্ডারটি কীভাবে পুনরায় চেষ্টা করা যায়, সর্বোচ্চ অর্ডার ভলিউম কী, ফ্রিকোয়েন্সিটি খুব বেশি কিনা এবং এটি স্লাইডিং মূল্য বা বাজার মূল্য ইত্যাদি কিনা। কেবলমাত্র রেফারেন্সের জন্য,এটি একটি লাইব্রেরি প্যাকেজ যা বাস্তব বটগুলিতে পজিশন খোলার এবং বন্ধ করার জন্য প্রস্তাবিত প্ল্যাটফর্মগুলির একটি সংগ্রহস্থলঃhttps://www.fmz.com/strategy/12961লাইব্রেরী বিভাগে একটি নির্দিষ্ট ভূমিকা রয়েছে, এবং লাইব্রেরির সোর্স কোডগুলি অধ্যয়ন করার পরামর্শ দেওয়া হয়।

function Cover(contractType, amount, slide) {
    for (var i = 0; i < positions.length; i++) {
        if (positions[i].ContractType != contractType) {
            continue;
        }
        var depth = _C(e.GetDepth);
        if (positions[i].Type == PD_LONG || positions[i].Type == PD_LONG_YD) {
            exchange.SetDirection(positions[i].Type == PD_LONG ? "closebuy_today" : "closebuy");
            exchange.Sell(depth.Bids[0]-slide, amount, contractType, positions[i].Type == PD_LONG ? "Close today" : "Close yesterday", 'Bid', depth.Bids[0]);
        } else {
            exchange.SetDirection(positions[i].Type == PD_SHORT ? "closesell_today" : "closesell");
            exchange.Buy(depth.Asks[0]+slide, amount, contractType, positions[i].Type == PD_SHORT ? "Close today" : "Close yesterday", 'Ask', depth.Asks[0]);
        }
    }
}

কমোডিটি ফিউচারগুলি কাস্টম অর্ডার টাইপগুলি সমর্থন করে (বটগুলির জন্য সমর্থন, তবে ব্যাকটেস্টের জন্য নয়), যা _ এর সাথে সংযুক্ত উপসর্গ দ্বারা নির্দিষ্ট করা হয়, যেমনঃ

exchange.SetDirection("buy_ioc");
exchange.SetDirection("sell_gtd-20170111")

নির্দিষ্ট উপসর্গঃ

  • ioc অবিলম্বে সম্পন্ন, অথবা বাতিল THOST_FTDC_TC_IOC
  • নোড THOST_FTDC_TC_GFS-এ gfs বৈধ
  • দিনটিতে বৈধ gfd THOST_FTDC_TC_GFD
  • নির্দিষ্ট তারিখের আগে বৈধ gtd THOST_FTDC_TC_GTD
  • বাতিল হওয়ার আগে gtc বৈধ THOST_FTDC_TC_GTC
  • gfa অ্যাকশনের দরপত্র THOST_FTDC_TC_GFA-তে বৈধ

এসুননি ইন্টারফেস

ডিফল্টরূপে, কমোডিটি ফিউচার ব্রোকারগুলিতে খোলা ইন্টারফেসগুলি সমস্ত সিটিপি ইন্টারফেস। যদি প্রয়োজন হয় তবে এগুলি ইসুনি ইন্টারফেস দ্বারা প্রতিস্থাপিত হতে পারে। এফএমজেডের ইনক্যাপসুলারিংয়ের মাধ্যমে, কল পদ্ধতিটি একই। পার্থক্যটি হ'ল অ্যাকাউন্ট, অর্ডার এবং অবস্থানগুলি সমস্তই পুশ মোডে রয়েছে, তাই ডকার এই ডেটাগুলি স্থানীয়ভাবে বজায় রাখবে এবং প্রকৃতপক্ষে কোনও অনুরোধ না করেই সংশ্লিষ্ট ইন্টারফেসটি কল করার সাথে সাথে অবিলম্বে ফিরে আসবে।

Esunny প্রোটোকল কাস্টম অর্ডার প্রকারঃ

  • gfd দিনটিতে বৈধ TAPI_ORDER_TIMEINFORCE_GFD
  • TAPI_ORDER_TIMEINFORCE_GTC বাতিল হওয়ার আগে gtc বৈধ
  • gtd নির্দিষ্ট তারিখের আগে বৈধ TAPI_ORDER_TIMEINFORCE_GTD
  • fak আংশিকভাবে কার্যকর, বাকি বাতিল TAPI_ORDER_TIMEINFORCE_FAK
  • ioc অবিলম্বে কার্যকর, অথবা TAPI_ORDER_TIMEINFORCE_FAK বাতিল
  • fok সম্পূর্ণরূপে কার্যকর করা হয় নি, সব TAPI_ORDER_TIMEINFORCE_FOK বাতিল

সাধারণভাবে ব্যবহৃত গ্লোবাল ফাংশন

লগ - লগ & WeChat Push

বট ইন্টারফেসে লগ রেকর্ড লগ করার সময়, এবং স্ট্রিংয়ের পরে অক্ষর @ যোগ করার সময়, বার্তাটি পুশ সারিতে প্রবেশ করবে, এবং এটি ওয়েচ্যাট বা টেলিগ্রামের সাথে আবদ্ধ হওয়ার পরে সরাসরি চাপ দেওয়া হবে, যেমনLog('Push to WeChat@').

লগ রঙ এছাড়াও কাস্টমাইজ করা যাবে, যেমনLog('this is a log in red font #ff0000'). #ff0000হল RGB রঙের ষোড়শ, যা নির্দেশ করে যে সমস্ত লগ ফাইলগুলি ডকারের অবস্থানের ডিরেক্টরিতে বটের SqLit ডাটাবেসে সংরক্ষণ করা হয়, যা ডাটাবেস সফ্টওয়্যার দিয়ে ডাউনলোড এবং খোলা যেতে পারে, অথবা ব্যাকআপ এবং পুনরুদ্ধারের জন্য কপি করতে ব্যবহার করা যেতে পারে (ডাটাবেস নাম এবং বট আইডি একই) ।

লোগপ্রফিট - মুদ্রণ লাভ

এটি মুনাফা রেকর্ড করে, এবং বট ইন্টারফেসে মুনাফা বক্ররেখা আঁকে, যা বট পুনরায় চালু হওয়ার পরে ধরে রাখা যেতে পারে।LogProfit(1000). লক্ষ্য করুন যে প্যারামিটারLogProfitএটা অবশ্যই মুনাফা নয়, এবং এটা যে কোন সংখ্যা হতে পারে এবং নিজের দ্বারা পূরণ করা প্রয়োজন।

LogStatus - অবস্থা প্রদর্শন (টেবিল সহ)

যদি বট অবস্থা, যেহেতু লগ প্রথম সংরক্ষণ করা হবে এবং ক্রমাগত আপডেট, শুধুমাত্র প্রদর্শন জন্য তথ্য প্রয়োজন না সংরক্ষণের জন্য, আপনি ব্যবহার করতে পারেনLogStatusফাংশন।LogStatusতারা স্ট্রিং, যা টেবিল তথ্য প্রতিনিধিত্ব করতে ব্যবহার করা যেতে পারে।

একটি নির্দিষ্ট বাস্তব বট অবস্থান প্রদর্শন টেবিলের উদাহরণঃ

var table = {type: 'table', title: 'position information', cols: ['Column1', 'Column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}; 
LogStatus('`' + JSON.stringify(table) + '`'); // After serialization, JSON will be added the character "'" on both sides, which is regarded as a comlpex messag format (now supporting tables)
LogStatus('The first line information\n`' + JSON.stringify(table) + '`\nthe third line information'); // the table information can be displayed in multiple lines
LogStatus('`' + JSON.stringify([table, table]) + '`'); // Multiple tables are supported to be displayed at the same time, which will be displayed in one group by TAB  
LogStatus('`' + JSON.stringify(tab1) + '`\n' + '`' + JSON.stringify(tab2) + '`\n

আরো