
কমোডিটি ফিউচার CTP এবং ডিজিটাল কারেন্সি এপিআই এর মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে যারা ডিজিটাল কারেন্সি প্রোগ্রাম্যাটিক ট্রেডিং এর সাথে পরিচিত কিন্তু কমোডিটি ফিউচার প্রোগ্রাম্যাটিক ট্রেডিং এর সাথে পরিচিত নয় তারা কেবল তাদের অভিজ্ঞতা কপি করতে পারে না। এই পোস্ট তাদের মধ্যে মিল এবং পার্থক্য সংক্ষিপ্ত হবে.
ঐতিহাসিক তথ্য
CTP ইন্টারফেস ঐতিহাসিক বাজার তথ্য প্রদান করে না, এবং ঐতিহাসিক বাজার তথ্য বাজারের উদ্ধৃতির মাধ্যমে সমাধান করা প্রয়োজন। লগ ইন করতে ব্যর্থতার কারণে বাজারের ডেটা হারিয়ে গেলে বা লগইন সংযোগ বিচ্ছিন্ন হয়ে গেলে, CTP একটি বাজার পুনঃপূরণ প্রক্রিয়া প্রদান করে না। ঐতিহাসিক বাজার পরিস্থিতি শুধুমাত্র তৃতীয় পক্ষের ডেটার মাধ্যমে পাওয়া যেতে পারে।
বিভিন্ন প্রোটোকল
ডিজিটাল কারেন্সি এপিআই সাধারণত REST এবং ওয়েবসকেট প্রোটোকল হয় CTP অভ্যন্তরীণভাবে নেটওয়ার্ক-সম্পর্কিত যুক্তিকে এনক্যাপসুলেট করে এবং CTP ব্যাকএন্ডের সাথে যোগাযোগ করার জন্য TCP প্রোটোকলের উপর ভিত্তি করে FTD প্রোটোকল ব্যবহার করে। তিনটি মোডে বিভক্ত:
CTP প্রোটোকলের সমস্ত বাজার মূল্য এবং অর্ডার লেনদেন পরিবর্তনের পরে বিজ্ঞপ্তি দেওয়া হবে, যখন অর্ডার, অ্যাকাউন্ট এবং অবস্থান সম্পর্কে অনুসন্ধানগুলি সক্রিয় অনুসন্ধান। উপরের তিনটি মোডের অনুরূপ রূপ ডিজিটাল মুদ্রা API-তে পাওয়া যাবে।
ডেটা গ্রানুলারিটি পরিবর্তিত হয়
CTP প্রোটোকলের গভীরতা হল শুধুমাত্র একটি ক্রয় এবং একটি বিক্রি, এবং পাঁচটি স্তরের বাজার মূল্যের দাম সাধারণত পূর্ণ গভীরতা বা 200 মাত্রা পেতে পারে। CTP প্রকৃত লেনদেনগুলিকে ঠেলে দেয় না এবং শুধুমাত্র অবস্থানের পরিবর্তনের মাধ্যমে পিছিয়ে যেতে পারে, যখন ডিজিটাল মুদ্রা বিনিময় API প্রকৃত ব্যক্তিগত লেনদেনগুলি পেতে পারে। গার্হস্থ্য CTP প্ল্যাটফর্মের বাজার ডেটা টিক স্তর প্রতি সেকেন্ডে 2 টিক। বেশিরভাগ ডিজিটাল মুদ্রা বিনিময় ওয়েবসকেট প্রতি সেকেন্ডে 10 বার করতে পারে।
অ্যাক্সেস সীমাবদ্ধতা পরিবর্তিত হয়
ডিজিটাল মুদ্রা বিনিময় সাধারণত প্রতি সেকেন্ডে 10 বার লেনদেন সীমাবদ্ধ করে। বেশিরভাগ সময়, অর্ডার বাতিল করার জন্য কোন বিশেষ প্রয়োজনীয়তা নেই। CTP-এর অনুরোধের উপর কঠোর নিষেধাজ্ঞা রয়েছে যা সাধারণত প্রতি 2 সেকেন্ডে একবার অনুরোধ করা আরও নিরাপদ।
স্থিতিশীলতা
CTP প্রোটোকল খুব স্থিতিশীল, প্রায় কোন ত্রুটি এবং নেটওয়ার্ক সমস্যা ছাড়া. ডিজিটাল মুদ্রায় কিছু সীমাবদ্ধতা থাকা উচিত এবং দীর্ঘ লেনদেনের সময় রক্ষণাবেক্ষণ, ডেটা বিলম্ব, নেটওয়ার্ক ত্রুটি ইত্যাদি খুবই সাধারণ।
এফএমজেড কোয়ান্টিফিকেশন প্ল্যাটফর্ম CTP প্রোটোকল সেরা অনুশীলন
বাজারের তথ্য পাওয়ার জন্য CTP ডিফল্ট মোড ইন্টারফেস, যেমন GetTicker, GetDepth, এবং GetRecords, সাম্প্রতিক ডেটা প্রাপ্ত করার জন্য ক্যাশ করা ডেটার প্রয়োজন হয়, যদি ডেটা না থাকে, তাহলে কৌশলটির জন্য স্লিপ প্রয়োজন হয় না। যখন বাজার পরিবর্তন হয়, তখন যেকোনও ইন্টারফেসকে কল করা হলে তা পরের বার একই ইন্টারফেসের জন্য অপেক্ষা করা হয় , এটি নতুন ডেটা রিটার্নের জন্য অপেক্ষা করবে। কিছু অজনপ্রিয় চুক্তি বা মূল্য সীমা দীর্ঘ সময়ের জন্য লেনদেন করা হবে না এটি একটি দীর্ঘ সময়ের জন্য কৌশল আটকে থাকা স্বাভাবিক।
যদি আপনি প্রতিবার বাজার পেতে ডেটা পেতে চান, এমনকি যদি এটি পুরানো ডেটাও হয়, তাহলে আপনি বাজারে অবিলম্বে আপডেট মোড বিনিময় করতে পারেন। IO(“মোড”, 0)। এই সময়ে, কৌশলটি ইভেন্ট-চালিত হিসাবে লেখা যাবে না, এবং দ্রুত অন্তহীন লুপ এড়াতে একটি স্লিপ ইভেন্ট যোগ করতে হবে। কিছু কম ফ্রিকোয়েন্সি কৌশল এই মোড ব্যবহার করতে পারে, এবং কৌশল নকশা সহজ. ডিফল্ট ক্যাশে মোডে ফিরে যেতে exchange.IO(“মোড”, 1) ব্যবহার করুন।
একটি একক চুক্তি পরিচালনা করার সময়, শুধুমাত্র ডিফল্ট মোড ব্যবহার করুন। যাইহোক, যদি একাধিক চুক্তি থাকে, তাহলে এটা সম্ভব যে একটি চুক্তির বাজার মূল্য আপডেট নাও থাকতে পারে, যার ফলে বাজার অ্যাক্সেস ইন্টারফেস ব্লক হয়ে যেতে পারে এবং অন্যান্য চুক্তি বাজার আপডেটগুলি উপলব্ধ নাও হতে পারে। এই সমস্যাটি সমাধান করতে, আপনি তাত্ক্ষণিক আপডেট মোড ব্যবহার করতে পারেন, তবে উচ্চ-ফ্রিকোয়েন্সি কৌশলগুলি লিখতে অসুবিধাজনক। এই সময়ে, আপনি পুশ অর্ডার এবং বাজার মূল্য পেতে ইভেন্ট পুশ মোড ব্যবহার করতে পারেন। সেটিং পদ্ধতি হল exchange.IO(“wait”)। যদি একাধিক বিনিময় বস্তু যোগ করা হয়, যা কমোডিটি ফিউচারে বিরল, আপনি বিনিময় ব্যবহার করতে পারেন।
মার্কেট টিক পরিবর্তন পুশ: {ইভেন্ট: “টিক”, সূচক: বিনিময় সূচক (রোবট বিনিময় যোগের ক্রমে), ন্যানো: ইভেন্ট ন্যানোসেকেন্ড সময়, প্রতীক: চুক্তির নাম} অর্ডার পুশ: {ইভেন্ট: “অর্ডার”, সূচক: বিনিময় সূচক, ন্যানো: ইভেন্ট ন্যানোসেকেন্ড সময়, অর্ডার: অর্ডার তথ্য (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")){ //判断链接状态
exchange.IO("mode", 0)
_C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。
_C(exchange.SetContractType, "rb888")//订阅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)
}
}
}