[TOC]
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম কী করতে পারে?
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মটি পরিমাণগত ব্যবসায়ের ক্ষেত্রে সর্বাধিক পেশাদার পরিমাণগত সম্প্রদায়। এখানে আপনি পরিমাণগত কৌশলগুলি শিখতে, লিখতে, ভাগ করতে, কিনতে এবং বিক্রয় করতে পারেন; আপনি অনলাইনে ব্যাকটেস্টিং পরিচালনা করতে পারেন এবং সিমুলেটেড ট্রেডিং পরিচালনার জন্য সিমুলেশন বট ব্যবহার করতে পারেন; আপনি লাইভ ট্রেডিং চালাতে, প্রচার করতে এবং দেখতে পারেন। আমরা প্রায় সমস্ত মূলধারার ডিজিটাল মুদ্রা বিনিময় সমর্থন করি।
সম্পূর্ণ টিউটোরিয়াল সিরিজ
গ্রাফিকাল টিউটোরিয়ালঃ
যদি কোনো সমস্যা হয়, আপনি যেকোনো সময় প্রশ্ন পোস্ট করতে পারেন এবং ফোরামে আলোচনা করতে পারেন, অথবা টিকিট জমা দিতে পারেন, অথবা টেলিগ্রাম গ্রুপের একজন প্রশাসকের সাথে যোগাযোগ করতে পারেন (টেলিগ্রাম), সাধারণভাবে বলতে গেলে, এই প্রশ্নের উত্তর দ্রুত দেওয়া হবে।
উন্নয়ন সহায়তার জন্য চ্যাটজিপিটি সমর্থন
FMZ Quantitative Trading Platform ChatGPT কে একটি উন্নয়ন সহায়তা সরঞ্জাম হিসেবে গ্রহণ করেছে, যা
আমার কৌশল বাস্তবায়নের জন্য কোন প্রোগ্রামিং ভাষা উপলব্ধ?
FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম ব্যবহার করতে সমর্থন করেJavaScript
, TypeScript
, Python
, C++
, Pine
Mylanguage
এবংBlockly Visualization
কৌশল লিখতে এবং ডিজাইন করতে।
এটি সমর্থন করেTypeScript
ভাষা, এখনও এটি সেট করুনJavaScript
কৌশল যখন আমরা কৌশল তৈরি, তারপর আমরা লিখুন// @ts-check
কৌশল কোড শুরুতে অথবা বোতামে ক্লিক করুনTypeScript
কৌশল সম্পাদনা এলাকার উপরের ডানদিকেTypeScript
প্ল্যাটফর্ম কোডটি চিনবেTypeScript
স্বয়ংক্রিয়ভাবে এবং আপনাকে নিম্নলিখিতগুলির জন্য উপযুক্ত সংকলন এবং টাইপ চেকিং সমর্থন প্রদান করেঃ
TypeScript
এর স্ট্যাটিক টাইপ চেক ফাংশন আপনাকে কোড লেখার সময় সম্ভাব্য ত্রুটি খুঁজে পেতে এবং কোডের গুণমান উন্নত করতে সাহায্য করতে পারে।TypeScript
এর টাইপ সিস্টেম কোড লেখার সময় প্রয়োজনীয় বৈশিষ্ট্য এবং পদ্ধতিগুলি দ্রুত খুঁজে পেতে সহায়তা করে, যা বিকাশের দক্ষতা উন্নত করে।TypeScript
, আপনি আপনার কোডটি আরও ভালভাবে সংগঠিত করতে এবং বজায় রাখতে পারেন, এটি পড়তে এবং বুঝতে সহজ করে তোলে।TypeScript
শক্তিশালী বস্তুভিত্তিক প্রোগ্রামিং বৈশিষ্ট্য প্রদান করে, যেমন ইন্টারফেস, ক্লাস, জেনেরিক ইত্যাদি, আপনাকে আরো শক্তিশালী এবং পুনরায় ব্যবহারযোগ্য কৌশল কোড লিখতে সাহায্য করে।আপনি শুধুমাত্র এই ভাষাগুলির মধ্যে একটি আয়ত্ত করতে হবে। কোড লেখার মাধ্যমে কৌশল ডিজাইনের উপায় সমর্থন করার পাশাপাশি, আপনি ভিজ্যুয়াল মডিউল (ব্লকলি) ব্যবহার করে কৌশল তৈরি করতে পারেন। ভিজ্যুয়ালাইজেশন মডিউল স্প্লাইসিং এবং কোডিং ছাড়াই কৌশল নির্মাণ, কৌশল ডিজাইনের আরও স্বজ্ঞাত উপায় গ্রহণ করে, যা প্রোগ্রাম্যাটিক এবং পরিমাণগত ট্রেডিংয়ের সাথে দ্রুত শুরু করার জন্য কৌশল ডিজাইনে আগ্রহ গড়ে তোলার জন্য খুব উপযুক্ত।
Blockly
ভিজ্যুয়ালাইজেশন টিউটোরিয়ালঃ
সেট করুন
Python
অনুবাদক দ্বারা ব্যবহৃতPython
কৌশলগত কর্মসূচি
কৌশলগুলি লিখিতPython
, ব্যাকটেস্টিং বা লাইভ ট্রেডিংয়ের সময়, যদি ডকার সিস্টেম পরিবেশে উভয়ই থাকেপাইথন২এবংপাইথন ৩ইনস্টল করা, আপনি সেট করতে পারেনPython
কৌশলটির প্রথম লাইনে রানটাইমে চালু করা হবে, যেমনঃ#!python3
এবং#!python2
, যাতে সিস্টেম স্বয়ংক্রিয়ভাবে অনুবাদক খুঁজে পাবে। এবং আপনি একটি পরম পথ নির্দিষ্ট করতে পারেন, যেমনঃ#!/usr/bin/python3
.
ডকার কি?
ডকারকে আপনার ট্রেডিং কৌশলটির নির্বাহী হিসাবে বোঝা যেতে পারে, যা জটিল ডেটা অনুরোধ, ডেটা গ্রহণ, নেটওয়ার্ক লিঙ্ক, লগ পোস্টব্যাক ইত্যাদির জন্য দায়ী। ডকার আপনার সার্ভারে চালিত হয়, এমনকি যদি এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মের ওয়েবসাইটে নেটওয়ার্ক ব্যর্থতা থাকে তবে এটি আপনার ডকারের ক্রিয়াকলাপকে প্রভাবিত করবে না। ডকারটি চালিত হতে পারেলিনাক্স, উইন্ডোজ, ম্যাক ওএস, অ্যান্ড্রয়েড, রাস্পবেরি পাই এআরএম লিনাক্সএবং অন্যান্য সিস্টেম।ডকার পৃষ্ঠা, লিনাক্স ডকার ইনস্টলেশন এবং আপডেট পদক্ষেপ. বট এবং লগ ডকার দ্বারা পরিচালিত ডিরেক্টরিতে সংরক্ষিত হয়/logs/storage
. ফাইলটি একটিSqlite
সঙ্গে ডাটাবেস ফাইলdb3
, যা সরাসরি সম্পাদনা করা যেতে পারেSqlite
এক্সটেনশন সহ ফাইলের জন্যdb3
আসল বট ডাটাবেসে, ফাইলের নাম হচ্ছে বট আইডি।
সমর্থিত প্রোটোকল
যখন FMZ Quant Trading প্ল্যাটফর্মে ট্রেডিং কৌশলগুলি বিকাশ করা হয়, তখন কৌশল সামগ্রীগুলি কেবলমাত্র FMZ অ্যাকাউন্টধারীদের কাছে দৃশ্যমান। এবং FMZ পরিমাণগত ট্রেডিং প্ল্যাটফর্মে, আপনি কৌশল কোডের সম্পূর্ণ স্থানীয়করণ অর্জন করতে পারেন। উদাহরণস্বরূপ, একটি কৌশল যুক্তি একটিতে ক্যাপসুল করা যেতে পারেPython
প্যাকেজ, যা কৌশল কোডে লোড করা হয়, যাতে কৌশল বিষয়বস্তু স্থানীয়করণ বাস্তবায়ন করা যেতে পারে।
নিরাপত্তাPython
কোডঃ
কারণPython
এটি একটি ওপেন সোর্স ভাষা যা ডিকম্পাইল করা অত্যন্ত সহজ, যদি কৌশলটি ব্যক্তিগত ব্যবহারের জন্য না হয় তবে ভাড়া দেওয়ার জন্য হয়, আপনি আপনার নিজের স্থাপন করা ডকারের উপর কৌশলটি চালাতে পারেন এবং সাব-অ্যাকাউন্ট বা সম্পূর্ণ ডকার পরিচালনার আকারে এটি ভাড়া নিতে পারেন যদি আপনি কৌশল ফুটো সম্পর্কে উদ্বিগ্ন হন।
এনক্রিপশনPython
কৌশল কোডঃ
ডিফল্টরূপে,Python
কৌশল কোডটি লেখকের দ্বারা ব্যবহৃত হলে এনক্রিপ্ট করা হয় না এবং অন্যদের কাছে ভাড়া দেওয়া হলে এনক্রিপ্ট করা হয়।
নিম্নলিখিত কোডটি সম্পাদনা করেPython
কৌশল, আপনি ব্যক্তিগত ব্যবহার বা ভাড়া জন্য কৌশল কোড এনক্রিপ্ট কিনা তা নির্দিষ্ট করতে পারেন.Python
কৌশল কোডের এনক্রিপশন সমর্থনকারী সংস্করণগুলি নিম্নরূপঃPython 2.7
, Python 3.5
এবংPython 3.6
.
#!python
পাইথন অনুবাদক সংস্করণ হিসাবে, এবং তারপর ব্যবহার,
পৃথক রাখা; এনক্রিপশন কমান্ড লিখুনencrypt
. যদি আপনি সংস্করণ নির্দিষ্ট নাPython
, যোগ করুন#!,encrypt
directly. #!python,encrypt
অথবা
#!encrypt
#!python, not encrypted
অথবা
#!not encrypted
কোড ব্যবহার করুনos.getenv('__FMZ_ENV__')
এনক্রিপশন কোডটি বৈধ কিনা তা নির্ধারণ করতে; স্ট্রিং ফেরত"encrypt"
এটি শুধুমাত্র বাস্তব বট বৈধ, এবং ব্যাকটেস্ট এনক্রিপ্ট করবে নাPython
কৌশল কোড।
#!encrypt
def main():
ret = os.getenv('__FMZ_ENV__')
# If the print variable ret is the string "encrypt" or ret == "encrypt" is true, that means the encryption is valid.
Log(ret, ret == "encrypt")
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মে কনফিগার করা অ্যাকাউন্টের তথ্য এবং কৌশল পরামিতিগুলিতে এনক্রিপ্ট করা স্ট্রিংগুলির মতো সংবেদনশীল ডেটা ওয়েব ব্রাউজারে এনক্রিপ্ট করা হয়। এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মে সঞ্চিত সমস্ত তথ্য এনক্রিপ্ট করা হয় (প্লিনটেক্সট ডেটা নয়), এবং কেবলমাত্র ব্যবহারকারীরা
RSA KEY
এক্সচেঞ্জের প্রমাণীকরণ পদ্ধতি একটি উদাহরণ হিসাবে ডাকার প্রোগ্রাম অবস্থিত যেখানে ডিভাইসে স্থানীয়ভাবে সংবেদনশীল তথ্য কনফিগার কিভাবে বিস্তারিতভাবে ব্যাখ্যা করার জন্য।PKCS#8
, অনেক সরঞ্জাম তৈরির জন্য উপলব্ধ, যেমনঃopenssl
.RSA KEY
এক্সচেঞ্জ, এবং আপলোড পাবলিক কী তৈরি১ম ধাপসৃষ্টির সময়।txt
ফাইল, অথবা ডকার প্রোগ্রামের ডিরেক্টরিতে অন্যান্য পাথ.RSA KEY
কনফিগারেশনের সম্পাদনা বাক্সে এক্সচেঞ্জ দ্বারা তৈরিAccess Key
.txt
ফাইল একই স্তরের ডকারের ডিরেক্টরিতে স্থাপন করাতৃতীয় ধাপকনফিগারেশনের সম্পাদনা বাক্সেSecret Key
. উদাহরণস্বরূপ, যদি ফাইলের নাম স্থাপন করা হয়ঃrsaKey.txt
, এবং ফাইল এবং ডকার একই স্তরের ডিরেক্টরিতে পূরণ করা হয়ঃfile:///rsaKey.txt
. যদি ফাইল ডকার প্রোগ্রামের ডিরেক্টরির পাশে ডিরেক্টরিতে থাকেrsa_key
, পূরণ করুনঃfile:///rsa_key//rsaKey.txt
. যদি আপনি স্থানrsaKey. txt
আপনার কম্পিউটার বা সার্ভারে অন্য কোথাও এই নির্দেশাবলী অনুসারে অনুসরণ করুন, এটি লক্ষ করা উচিত যে এই ফাইলটি শুধুমাত্র একই স্তরের ডিরেক্টরি বা ডকার সম্পর্কিত উপ-ডিরেক্টরিতে স্থাপন করা যেতে পারে।এটি স্থানীয়করণ এবং ব্যক্তিগত কী সংরক্ষণ নিরাপদ করে তোলে, আপনি উল্লেখ করতে পারেনভিডিও ব্যাখ্যাবিস্তারিত প্রক্রিয়া জন্য.
ব্যাকটেস্ট সিস্টেম কী এবং এটি কীসের জন্য ব্যবহৃত হয়?
আপনি একটি পরিমাণগত ট্রেডিং কৌশল ডিজাইন সম্পন্ন করার পরে, আপনি কিভাবে আপনার কৌশল মৌলিক অবস্থা জানতে পারেন, যেমন কৌশল যুক্তি এবং কৌশল এর রিটার্ন দিক? অবশ্যই, আমরা সরাসরি বাস্তব ট্রেডিং বাজারে কৌশল চালানোর জন্য বাস্তব অর্থ ব্যবহার করতে পারবেন না, কিন্তু আমরা আপনার কৌশল পরীক্ষা করার জন্য ঐতিহাসিক তথ্য ব্যবহার করতে পারেন এবং ঐতিহাসিক তথ্য আপনার কৌশল মুনাফা জানতে।
ব্যাকটেস্ট সিস্টেমের তথ্য কি সঠিক এবং ব্যাকটেস্টের ফলাফলের সঠিকতা সম্পর্কে কি?
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম ব্যাকটেস্ট সিস্টেমকে ভাগ করেবাস্তব বাজারের স্তরএবংসিমুলেশন স্তর. বাস্তব বাজার স্তর সম্পূর্ণরূপে সম্পূর্ণ ঐতিহাসিক তথ্য অনুযায়ী ব্যাকটেস্ট করা হয়; যখন সিমুলেশন স্তর ব্যাকটেস্ট উৎপন্নtick
উভয়ই বাস্তব ঐতিহাসিক তথ্যের উপর ভিত্তি করে, কিন্তু বাস্তব বাজার স্তরের তথ্য আরো সঠিক এবং ফলাফল আরো বিশ্বাসযোগ্য।এফএমজেড ব্যাকটেস্ট মেকানিজমের বর্ণনা. তবে, ব্যাকটেস্টিং কেবল historicalতিহাসিক তথ্য অনুসারে কৌশলটির পারফরম্যান্স। historicalতিহাসিক তথ্য ভবিষ্যতের বাজারকে পুরোপুরি উপস্থাপন করতে পারে না। historicalতিহাসিক বাজার পুনরাবৃত্তি হতে পারে, বা এটি ব্ল্যাক সোয়ানের দিকেও নিয়ে যেতে পারে। অতএব, ব্যাকটেস্টিং ফলাফলগুলিকে যুক্তিসঙ্গতভাবে এবং বস্তুনিষ্ঠভাবে আচরণ করা উচিত।
বিভিন্ন প্রোগ্রামিং ভাষার কৌশল ব্যাকটেস্টিং করার সময় সচেতন হওয়া বিষয়গুলিঃ
এর ব্যাকটেস্টজাভাস্ক্রিপ্টএবংসি++ট্রেডিং কৌশল ব্রাউজারে পরিচালিত হয়, এবং বাস্তব বাজার বট বাWexAppঅনুকরণ করা বিনিময় বাস্তব বাজার (যেমনWexAppFMZ Quant Trading প্ল্যাটফর্মের এমুলেটেড এক্সচেঞ্জ) অন্য কোন সফটওয়্যার, লাইব্রেরি বা মডিউল ইনস্টল না করেই চলে। এর ব্যাকটেস্টপাইথনএটি ডকারের উপর সঞ্চালিত হয়; এটি FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম দ্বারা যুক্ত পাবলিক সার্ভারে সঞ্চালিত হতে পারে এবং এটি ব্যবহারকারীর নিজস্ব ডকারের উপরও সঞ্চালিত হতে পারে। বাস্তব বাজার অপারেশন এবং ব্যাকটেস্ট উভয়ইপাইথনযদি কিছু লাইব্রেরি প্রয়োজন হয়, তবে তাদের ম্যানুয়ালি ইনস্টল করা দরকার (কেবলমাত্র সাধারণ লাইব্রেরিগুলি পাবলিক সার্ভারে সমর্থিত) ।
সিস্টেমে ব্যাকটেস্ট ডেটা
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম ব্যাকটেস্টের দুটি প্রকার রয়েছেঃ সিমুলেশন স্তরের ব্যাকটেস্ট এবং বাস্তব বাজারের স্তরের ব্যাকটেস্ট। সিমুলেশন স্তরের ব্যাকটেস্ট সিমুলেটেডtick
প্রতিটি কে-লাইন সময়কাল 12 ব্যাকটেস্টিং সময় পয়েন্ট উৎপন্ন করবে; তবে বাস্তব বাজার স্তর সংগ্রহ করেticks
প্রকৃতপক্ষে, যা প্রতি কয়েক সেকেন্ডে প্রায় একবার ঘটে, যার ফলে প্রচুর পরিমাণে ডেটা এবং ধীর ব্যাকটেস্টের গতি হয়; সুতরাং এটি খুব দীর্ঘ সময়ের জন্য ব্যাকটেস্ট করা যায় না। এফএমজেডের ব্যাকটেস্ট প্রক্রিয়াটি ট্রেডিং কৌশলটিকে একক কে-লাইনে একাধিকবার ট্রেড করার অনুমতি দেয়, এমন পরিস্থিতি এড়ায় যেখানে ট্রেডিংটি কেবল বন্ধের মূল্যে কার্যকর করা যায়। ব্যাকটেস্টের গতি বিবেচনা করে এটি আরও নির্ভুল। আরও বিস্তারিত ব্যাখ্যাগুলির জন্য, দয়া করে পড়ুনলিঙ্ক.
ব্যাকটেস্টিং সিস্টেমে কৌশল ডিবাগ পদ্ধতি
ক্রোম ডেভটুলসে জাভাস্ক্রিপ্ট কৌশল ব্যাকটেস্টিং ডিবাগিং
এনক্রিপ্ট করা মুদ্রা (ক্রিপ্টোকারেন্সি)
নাম | প্রকার | নির্দেশাবলী |
---|---|---|
বিটফিনেক্স | স্পট এক্সচেঞ্জ অবজেক্ট | সীমিত সংখ্যক ট্রেডিং জোড়া সমর্থন, যেমনঃBTC_USD , ETH_USD এবংLTC_USD , ইত্যাদি (দ্রষ্টব্য যে ট্রেডিং জোড়ার কোট মুদ্রা হলUSD ডলার) |
বিন্যান্স | স্পট এক্সচেঞ্জ অবজেক্ট | সীমিত সংখ্যক ট্রেডিং জোড়া সমর্থন, যেমনঃBTC_USDT , ETH_USDT , ETH_BTC এবংLTC_BTC ইত্যাদি। |
ঠিক আছে | স্পট এক্সচেঞ্জ অবজেক্ট | সীমিত সংখ্যক ট্রেডিং জোড়া সমর্থন, যেমনঃBTC_USDT , ETH_USDT , ETH_BTC এবংLTC_BTC ইত্যাদি। |
হুবি | স্পট এক্সচেঞ্জ অবজেক্ট | সীমিত সংখ্যক ট্রেডিং জোড়া সমর্থন, যেমনঃBTC_USDT , ETH_USDT , ETH_BTC এবংLTC_BTC ইত্যাদি। |
OKX ফিউচার | ফিউচার এক্সচেঞ্জ অবজেক্ট | সীমিত সংখ্যক ট্রেডিং জোড়া সমর্থন, যেমনঃBTC_USD এবংETH_USD , ইত্যাদি; ট্রেডিং জোড়ার কোট মুদ্রা হলUSD ; নির্দিষ্ট চুক্তির কোড নির্ধারণের পরে (অনুগ্রহ করে ফাংশনটি দেখুন)exchange.SetContractType ), চুক্তিটি ক্রিপ্টো-মার্জিনযুক্ত চুক্তি; সমর্থিত চুক্তি কোডগুলির মধ্যে রয়েছেঃthis_week , next_week , quarter এবংswap |
হুওবিডিএম | ফিউচার এক্সচেঞ্জ অবজেক্ট | HuobiDM হল Huobi ফিউচারস (Huobi Contract), যা সীমিত ট্রেডিং জোড়া সমর্থন করে, যেমনঃBTC_USD এবংETH_USD , ইত্যাদি; ট্রেডিং জোড়ার কোট মুদ্রা হলUSD ; নির্দিষ্ট চুক্তির কোড নির্ধারণের পরে (অনুগ্রহ করে ফাংশনটি দেখুন)exchange.SetContractType ), চুক্তিটি ক্রিপ্টো-মার্জিনযুক্ত চুক্তি; সমর্থিত চুক্তি কোডগুলির মধ্যে রয়েছেঃthis_week , next_week , quarter এবংswap . |
বিটমেক্স | ফিউচার এক্সচেঞ্জ অবজেক্ট | ট্রেডিং জুটি হলXBT_USD ; নির্দিষ্ট চুক্তির কোড নির্ধারণের পরে (অনুগ্রহ করে ফাংশনটি দেখুন)exchange.SetContractType ), চুক্তিটি একটি ক্রিপ্টো-মার্জিনযুক্ত চুক্তি; সমর্থিত চুক্তি কোড হলঃXBTUSD |
বিন্যান্স ফিউচার | ফিউচার এক্সচেঞ্জ অবজেক্ট | সীমিত সংখ্যক ট্রেডিং জোড়া সমর্থন, যেমনঃBTC_USDT এবংETH_USDT , ইত্যাদি; ট্রেডিং জোড়ার কোট মুদ্রা হলUSD ; নির্দিষ্ট চুক্তির কোড নির্ধারণের পরে (অনুগ্রহ করে ফাংশনটি দেখুন)exchange.SetContractType ), চুক্তিটি একটিUSDT - মার্জিনযুক্ত চুক্তি; সমর্থিত চুক্তির কোড হলswap |
ডেরিবিট অপশন | ফিউচার এক্সচেঞ্জ অবজেক্ট | ট্রেডিং জোড়া হলঃBTC_USD এবংETH_USD ; নির্দিষ্ট চুক্তির কোড নির্ধারণের পরে (অনুগ্রহ করে ফাংশনটি দেখুন)exchange.SetContractType ), চুক্তিটি একটি ক্রিপ্টো-মার্জিনযুক্ত চুক্তি; নির্দিষ্ট বিকল্প চুক্তির কোড নির্ধারণ করা প্রয়োজন |
ব্যাকটেস্ট সিস্টেমের ফিউচার এক্সচেঞ্জ অবজেক্টগুলির জন্য, ট্রেডিং জোড়া পরিবর্তন করা সাময়িকভাবে কৌশল কোডগুলিতে সমর্থিত নয়।
সিমুলেশন স্তরের ব্যাকটেস্ট ব্যাকটেস্ট সিস্টেমের অন্তর্নিহিত কে-লাইন ডেটার উপর ভিত্তি করে তৈরি করা হয়, একটি নির্দিষ্ট অ্যালগরিদম অনুযায়ী প্রদত্ত অন্তর্নিহিত কে-লাইন বারের সর্বোচ্চ মূল্য, সর্বনিম্ন মূল্য, খোলার মূল্য এবং বন্ধের মূল্যের মানের কাঠামোর মধ্যে টিক ডেটা সিমুলেট করে। ডেটা রিয়েল-টাইম ফিরে আসবেtick
ইন্টারফেসটি অনুরোধ করার সময় তথ্য। বিস্তারিত জানার জন্য, দয়া করে দেখুনঃFMZ কোয়ান্টাম সিমুলেশন লেভেল ব্যাকটেস্ট মেকানিজম বর্ণনা.
প্রকৃত বাজার স্তরের ব্যাকটেস্ট হল প্রকৃতtick
বার টাইম সিরিজের স্তরের তথ্য।tick
বাস্তব বাজারের স্তরের ব্যাকটেস্টের জন্য বাস্তব বাজারের স্তরের ব্যাকটেস্ট ব্যবহার করা বাস্তবতার কাছাকাছি।tick
ডেটা হল বাস্তব রেকর্ড করা ডেটা, সিমুলেটেড নয়। এটি গভীরতার ডেটা, বাজারের ট্রেডিংয়ের রেকর্ড ডেটা প্লেব্যাক, কাস্টম গভীরতা এবং প্রতিটি পৃথক ট্রেডিং ডেটা সমর্থন করে। বাস্তব বাজার-স্তরের ডেটা ব্যাকটেস্টের সর্বাধিক আকার সর্বোচ্চ 50MB পর্যন্ত, ডেটাসেটের উপরের সীমার মধ্যে ব্যাকটেস্টের সময়সীমার কোনও সীমা নেই। যদি আপনার ব্যাকটেস্টের সময়সীমা যতটা সম্ভব বড় করতে হয় তবে আপনি গভীরতা সেটিং গিয়ারটির মান হ্রাস করতে পারেন এবং ব্যাকটেস্টের সময়সীমা বাড়ানোর জন্য প্রতিটি পৃথক ট্রেডিং ডেটা ব্যবহার করবেন না।GetDepth
,GetTrades
বাজারের তথ্য পুনরায় খেলার জন্য ফাংশন।GetTicker
,GetTrades
, GetDepth
এবংGetRecords
সময়টি ব্যাকটেস্ট টাইমলাইনে একাধিকবার সরানো হবে না (যা পরবর্তী বাজারের ডেটা মুহুর্তে একটি লাফকে ট্রিগার করবে না) । উপরের ফাংশনগুলির মধ্যে একটিতে পুনরাবৃত্তি কলগুলি ব্যাকটেস্ট সময়কে ব্যাকটেস্ট টাইমলাইনে সরানোর জন্য চাপ দেবে (পরবর্তী বাজারের ডেটা মুহুর্তে লাফ দিন) । যখন ব্যাকটেস্টের জন্য বাস্তব বাজারের স্তর ব্যবহার করা হয়, তখন পূর্ববর্তী সময়টি বেছে নেওয়ার পরামর্শ দেওয়া হয় না। অকাল সময়ের মধ্যে বাস্তব বাজারের স্তরের ডেটা নাও থাকতে পারে।
বাস্তব বাজারের স্তরের ব্যাকটেস্ট বর্তমানে সমর্থন করে:
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মের ব্যাকটেস্ট সিস্টেমের প্যারামিটার অপ্টিমাইজেশন ফাংশনটি ব্যাকটেস্টের সময় প্রতিটি প্যারামিটার অপ্টিমাইজেশান বিকল্প অনুসারে অপ্টিমাইজেশন সেট করা এবং বিকল্পগুলি নিম্নরূপ দেখানো হয়েছেঃ
প্যারামিটার সমন্বয় উৎপন্ন, এবং ব্যাকটেস্টিং (অর্থাৎ প্রতি প্যারামিটার সমন্বয় একবার ব্যাকটেস্টিং) জন্য ঐ সব সমন্বয় অতিক্রম। শুধুমাত্র কৌশল পরামিতিসংখ্যাব্যাকটেস্টিং সিস্টেমে টাইপ অপ্টিমাইজ করা যায়।
উদাহরণস্বরূপ, ব্যাকটেস্ট পৃষ্ঠায় প্যারামিটার অপ্টিমাইজেশান অপশন সেট করুনঃ
প্যারামিটার অপ্টিমাইজেশন মোডের ব্যাকটেস্টঃ
কৌশল সম্পাদনা পৃষ্ঠায়,
নিনJavaScript
উদাহরণস্বরূপ, এবং ক্লিক করুন
JavaScript
, Python
, cpp
এবংMylanguage
:
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
platforms: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
'''backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
platforms: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
/*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
platforms: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
মাইল্যাঙ্গুয়েজ:
(*backtest
start: 2021-06-26 00:00:00
end: 2021-09-23 00:00:00
period: 1d
basePeriod: 1h
platforms: [{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
*)
সিস্টেমটিGET
ব্যাকটেস্টের জন্য একটি বাহ্যিক ডেটা উত্স পাওয়ার জন্য একটি কাস্টম URL (সর্বজনীনভাবে অ্যাক্সেসযোগ্য URL) অনুরোধ করার পদ্ধতি। অতিরিক্ত অনুরোধ পরামিতিগুলি নিম্নরূপঃ
প্যারামিটার | অর্থ | ব্যাখ্যা |
---|---|---|
প্রতীক | প্রতীকের নাম | যেমন BTC_USD_OKCoin_EN |
ঈদ | বিনিময় | যেমন OKCoin_EN |
বৃত্তাকার | দামের সঠিকতা | যেমন 3, ফেরত তথ্য মূল্য 1000 দ্বারা গুণিত এবং ঘূর্ণিত করা আবশ্যক |
চারপাশে | পরিমাণগত নির্ভুলতা | যেমন 2, ফেরত তথ্য পরিমাণ 100 দ্বারা গুণিত এবং ঘূর্ণিত করা আবশ্যক |
সময়কাল | বার পিরিয়ড (মিলিসেকেন্ড) | যেমন ৬০,০০০ বার নির্দেশ করে এক মিনিট অনুরোধ করে |
গভীরতা | গভীরতা স্তর | 1-20 |
বাণিজ্য | ডেটা বিভক্ত করা প্রয়োজন কিনা | সত্য/মিথ্যা |
থেকে | শুরু সময় | ইউনিক্স টাইমস্ট্যাম্প |
থেকে | শেষ সময় | ইউনিক্স টাইমস্ট্যাম্প |
নোটঃ
Round and V-Round are two parameters designed to avoid losing the precision of floating-point numbers during network transmission. The price data, trading volume and order amount, are all transmitted using integers.
সেলাই করা তথ্যের একটি উদাহরণঃ
http://customserver:80/data?symbol=BTC_USD_OKCoin_EN&eid=OKCoin_EN&round=3&vround=3&period=900000&from=1564315200&to=1567267200
রিটার্ন ফরম্যাটের নিম্নলিখিত দুটি ফরম্যাটের মধ্যে একটি হতে হবে (যা সিস্টেম স্বয়ংক্রিয়ভাবে স্বীকৃতি দেবে):
সাধারণ বার-লেভেল ব্যাকটেস্ট
{
"schema":["time","open","high","low","close","vol"],
"data":[[1564315200000,9531300,9531300,9497060,9497060,787],[1564316100000,9495160,9495160,9474260,9489460,338]]
}
টিক-লেভেল ব্যাকটেস্ট ডেটা (বাজার গভীরতার তথ্য সহ, [মূল্য, ভলিউম] এর গভীরতার বিন্যাস সহ একটি অ্যারে; গভীরতার একাধিক স্তর থাকতে পারে;
Asks দামের ক্রমবর্ধমান আদেশকে বোঝায় এবং Bids দামের বিপরীত আদেশকে বোঝায়।)
{
"schema":["time","asks", "bids","trades","close","vol"],
"data":[[1564315200000,[[9531300,10]], [[9531300,10]],[[1564315200000,0,9531300,10]],9497060,787]]
}
বর্ণনা
ক্ষেত্র | বর্ণনা |
---|---|
স্কিম | এটি ডেটা অ্যারেতে কলামগুলির বৈশিষ্ট্যগুলি নির্দিষ্ট করে, যা কেস সংবেদনশীল এবং কেবল |
তথ্য | একটি অ্যারে যা স্কিম অনুসারে ডেটা সঞ্চয় করে |
তথ্য বিন্যাস
ক্ষেত্র | বর্ণনা |
---|---|
অনুরোধ/প্রস্তাব | [মূল্য, পরিমাণ,...] |
বাণিজ্য | [সময়, দিকনির্দেশনা, ০: কিনুন, ১ঃ বিক্রয়, মূল্য, পরিমাণ,...] |
অর্থায়ন হার সংক্রান্ত তথ্য প্রদানঃ
উদাহরণস্বরূপ, বাইনারেন্স ফিউচারস ব্যাকটেস্টিংয়ের সময়, তহবিলের হারের অতিরিক্ত ডেটা থাকা প্রয়োজন, যা কাস্টম ডেটা উত্স দ্বারা সরবরাহ করা দরকার। উদাহরণস্বরূপ, বাইনারেন্স ফিউচারসের ব্যাকটেস্টিংয়ের সময় অনুরোধ করা তহবিলের হারের ডেটা কাঠামো নিম্নরূপ দেখানো হয়েছেঃ
{
"detail": {},
"symbol": "futures_binance.eth_usdt.funding",
"schema": ["time", "open", "high", "low", "close", "vol"],
"data": [
[1582876800000, 25289, 25289, 25289, 25289, 0],
[1582905600000, 30522, 30522, 30522, 30522, 0],
[1582934400000, 40998, 40998, 40998, 40998, 0],
...
[1626652800000, 198, 198, 198, 198, 0],
[1626681600000, 691, 691, 691, 691, 0], // The adjacent periodic interval is 8 hours
[1626710400000, 310, 310, 310, 310, 0], // The funding rate of Binance updates every 8 hours, and why the data of the funding rate turns out to be 310?
[1626739200000, 310, 310, 310, 310, 0], // Like the bars data, to avoid losing the precision of floating-point numbers during network transmission, the data uses integer, so the data needs to be processed according to round parameter; the data, returned to the backtest system after processing, is 310
[1626768000000, -41610, -41610, -41610, -41610, 0], // The funding rate might be a negative value
[1626796800000, -5125, -5125, -5125, -5125, 0],
...
[1627977600000, 10000, 10000, 10000, 10000, 0]
]
}
ব্যাকটেস্ট সিস্টেম থেকে ডাটা অনুরোধের উদাহরণঃ
http://customserver:80/data?symbol=futures_binance.eth_usdt.funding&eid=Futures_Binance&round=8&vround=5&depth=20&trades=1&custom=0&period=3600000&from=1360771200&to=1628006400
কাস্টম ডেটা উৎসের উদাহরণঃ
তথ্য উৎস, ইউআরএল উল্লেখ করুনঃhttp://xxx.xx.x.xx:9090/data
ডাটা সার্ভার কাস্টমাইজ করুন, গোলংয়ে লেখাঃ
package main
import (
"fmt"
"net/http"
"encoding/json"
)
func Handle (w http.ResponseWriter, r *http.Request) {
// e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data
// r.URL: /data?depth=20&detail=true&eid=Binance&from=1566820800&period=900000&round=3&symbol=BTC_USDT_Binance&to=1569686400&trades=1&vround=5
// response
defer func() {
// response data
/* e.g. data
{
"schema":["time","open","high","low","close","vol"],
"data":[
[1564315200000,9531300,9531300,9497060,9497060,787],
[1564316100000,9495160,9495160,9474260,9489460,338]
]
}
*/
ret := map[string]interface{}{
"schema" : []string{"time","open","high","low","close","vol"},
"data" : []interface{}{
[]int64{1564315200000,9531300,9531300,9497060,9497060,787},
[]int64{1564316100000,9495160,9495160,9474260,9489460,338},
},
}
b, _ := json.Marshal(ret)
w.Write(b)
}()
}
func main () {
fmt.Println("listen http://localhost:9090")
http.HandleFunc("/data", Handle)
http.ListenAndServe(":9090", nil)
}
পরীক্ষার কৌশল,JavaScript
উদাহরণঃ
/*backtest
start: 2019-07-28 00:00:00
end: 2019-07-29 00:00:00
period: 1m
platforms: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
*/
function main() {
var ticker = exchange.GetTicker()
var records = exchange.GetRecords()
Log(ticker)
Log(records)
}
ব্যাকটেস্ট সিস্টেমে কাস্টম ডেটা দ্বারা আঁকা চার্টঃ
কৌশল মুদ্রণ তথ্যঃ
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মটিJavaScript
সংস্করণ এবংPython
স্থানীয় ব্যাকটেস্ট ইঞ্জিনের সংস্করণ, সমর্থনকারী সেটিংঅন্তর্নিহিত কে লাইন সময়কালব্যাকটেস্টিং এর সময়।
কৌশল
চাবি ব্যবহার করুনCtrl +,
Ctrl
, কী চাপুন,
.
সংরক্ষণ কৌশল জন্য শর্টকাট কী
চাবি ব্যবহার করুনCtrl + s
কৌশল সংরক্ষণ করার জন্য।
কৌশল ব্যাকটেস্ট শুরু করার জন্য শর্টকাট
চাবি ব্যবহার করুনCtrl + b
ফাংশনের নাম | বর্ণনা |
---|---|
main() |
এটি একটি এন্ট্রি ফাংশন। |
onexit() |
এটি একটি পরিষ্কার ফাংশন যখন স্বাভাবিকভাবে প্রস্থান, তার সর্বোচ্চ এক্সিকিউশন সময় 5 মিনিট, যা undeclared ছেড়ে দেওয়া যেতে পারে; যদি সময়সীমা ঘটে, একটিবিরতি দিনত্রুটি রিপোর্ট করা হবে। |
onerror() |
এটি একটি অস্বাভাবিক প্রস্থান ফাংশন, এর সর্বোচ্চ এক্সিকিউশন সময় 5 মিনিট, যা undeclared ছেড়ে দেওয়া যেতে পারে।Python এবংcpp এই ফাংশন সমর্থন করে না. |
init() |
এটি একটি প্রারম্ভিকীকরণ ফাংশন, তার কৌশল প্রোগ্রাম স্বয়ংক্রিয়ভাবে কল করা হবে যখন এটি চালানো শুরু, যা undeclared ছেড়ে দেওয়া যেতে পারে। |
onerror()
.onerror()
বট, ফাংশন ট্রিগার করা হয়onexit()
সক্রিয় করা হবে না।onexit()
, ব্যবহারকারী দ্বারা উপলব্ধ সর্বোচ্চ 5 মিনিটের এক্সিকিউশন সময় সঙ্গে পরিস্কার কাজ প্রক্রিয়া।
function main(){
Log("Start running, stop after 5 seconds, and execute onexit function!")
Sleep(1000 * 5)
}
// onexit function implementation
function onexit(){
var beginTime = new Date().getTime()
while(true){
var nowTime = new Date().getTime()
Log("The program stops counting down..The cleaning starts and has passed:", (nowTime - beginTime) / 1000, "Seconds!")
Sleep(1000)
}
}
import time
def main():
Log("Start running, stop after 5 seconds, and execute onexit function!")
Sleep(1000 * 5)
def onexit():
beginTime = time.time() * 1000
while True:
ts = time.time() * 1000
Log("The program stops counting down..The cleaning starts and has passed:", (ts - beginTime) / 1000, "Seconds!")
Sleep(1000)
void main() {
Log("Start running, stop after 5 seconds, and execute onexit function!");
Sleep(1000 * 5);
}
void onexit() {
auto beginTime = Unix() * 1000;
while(true) {
auto ts = Unix() * 1000;
Log("The program stops counting down..The cleaning starts and has passed:", (ts - beginTime) / 1000, "Seconds!");
Sleep(1000);
}
}
ব্যবহারকারী সূচনা ফাংশন বাস্তবায়নinit()
, যা স্বয়ংক্রিয়ভাবে ফাংশন চালানো হবেinit()
কৌশল শুরুতে প্রাথমিকীকরণ টাস্ক সম্পন্ন করার জন্য।
function main(){
Log("The first line of the code executed in the program!", "#FF0000")
Log("Exit!")
}
// Initialization Function
function init(){
Log("Initialization!")
}
def main():
Log("The first line of the code is executed!", "#FF0000")
Log("Exit!")
def init():
Log("Initialization!")
void main() {
Log("The first line of the code is executed!", "#FF0000");
Log("Exit!");
}
void init() {
Log("Initialization!");
}
ফাংশন সম্পাদনonerror()
একটি ব্যতিক্রম ঘটে যখন ট্রিগার করা হবে.Python
এবংcpp
.
function main() {
var arr = []
Log(arr[6].Close)
}
function onerror() {
Log("error")
}
# not supported by python
// not supported by C++
এর মধ্যে লেখা কৌশলগুলোতেJavaScript
, Python
এবংcpp
,Sleep()
ফাংশনটি এই কৌশলগুলির মূল লুপে কল করা দরকার। এটি ব্যাকট্র্যাকিং গতি নিয়ন্ত্রণ করতে ব্যবহৃত হবে। বটে, এটি কৌশল পোলিং ব্যবধান নিয়ন্ত্রণ করতে ব্যবহৃত হয়, এবং এক্সচেঞ্জের এপিআই ইন্টারফেসে অ্যাক্সেসের অনুরোধের ফ্রিকোয়েন্সিও নিয়ন্ত্রণ করে।
ক্রিপ্টোকারেন্সি কৌশলগুলির মৌলিক কাঠামোগত উদাহরণঃ
function onTick(){
//Write strategy logic here, and it will be called constantly, such as printing market information
Log(exchange.GetTicker())
}
function main(){
while(true){
onTick()
//The function "Sleep" is mainly used to control the polling frequency of cryptocurrency strategies to prevent accessing the exchange API interafce too frequently
Sleep(60000)
}
}
def onTick():
Log(exchange.GetTicker())
def main():
while True:
onTick()
Sleep(60000)
void onTick() {
Log(exchange.GetTicker());
}
void main() {
while(true) {
onTick();
Sleep(60000);
}
}
সবচেয়ে সহজ উদাহরণটি নিই, যদি আমি প্রতি সেকেন্ডে এক্সচেঞ্জে 100 এর দাম এবং 1 এর পরিমাণের সাথে একটি ক্রয় অর্ডার দিতে চাই, আমি এটি এভাবে লিখতে পারিঃ
function onTick(){
// It is just an example; for all the assets will be used to place orders fast during backtest or in the bot, do not implement the example in the bot
exchange. Buy(100, 1)
}
function main(){
while(true){
onTick()
// The pause period can be customized in millisecond (1 second = 1000 milliseconds)
Sleep(1000)
}
}
def onTick():
exchange.Buy(100, 1)
def main():
while True:
onTick()
Sleep(1000)
void onTick() {
exchange.Buy(100, 1);
}
void main() {
while(true) {
onTick();
Sleep(1000);
}
}
দ্যটেমপ্লেট লাইব্রেরিFMZ Quant Trading প্ল্যাটফর্মের একটি পুনরায় ব্যবহারযোগ্য কোড মডিউল, ট্রেডিং কৌশল কোডগুলির একটি বিভাগ হিসাবে কাজ করে।টেমপ্লেট লাইব্রেরি, একটি টেমপ্লেট
JavaScript
:
Python
:
cpp
:
/*
-- This method is called directly with $.Test() after the strategy refers to the template
-- The "main" function will not be triggered in the strategy, and it is only used as the entry point for template debugging
*/
$.Test = function() {
Log('Test')
}
function main() {
$.Test()
}
def Test():
Log("template call")
# Export "Test" function; the main strategy can be called by ext.Test()
ext.Test = Test
// The strategy refers to the template and calls this method directly with ext::Test()
void Test() {
Log("template call");
}
টেমপ্লেট লাইব্রেরি কোডঃ
$.SetParam1 = function(p1) {
param1 = p1
}
$.GetParam1 = function() {
Log("param1:", param1)
return param1
}
def SetParam1(p1):
global param1
param1 = p1
def GetParam1():
Log("param1:", param1)
return param1
ext.SetParam1 = SetParam1
ext.GetParam1 = GetParam1
void SetParam1(float p1) {
param1 = p1;
}
float GetParam1() {
Log("param1:", param1);
return param1;
}
এই নিবন্ধে কৌশল কোড দেখুন।টেমপ্লেট লাইব্রেরিউপরে উল্লিখিত উদাহরণঃ
function main () {
Log("call $.GetParam1:", $.GetParam1())
Log("call $.SetParam1:", "#FF0000")
$.SetParam1(20)
Log("call $.GetParam1:", $.GetParam1())
}
def main():
Log("call ext.GetParam1:", ext.GetParam1())
Log("call ext.SetParam1:", "#FF0000")
ext.SetParam1(20)
Log("call ext.GetParam1:", ext.GetParam1())
void main() {
Log("call ext::GetParam1:", ext::GetParam1());
Log("call ext::SetParam1:", "#FF0000");
ext::SetParam1(20);
Log("call ext::GetParam1:", ext::GetParam1());
}
উদ্ধৃতি
কৌশল সম্পাদনা পৃষ্ঠার টেমপ্লেট কলামে উল্লেখটি পরীক্ষা করার পরে, কৌশল সংরক্ষণ করুন।
Exchange
এক্সচেঞ্জ অবজেক্ট হিসাবে বিবেচিত হতে পারে। ডিফল্টরূপে, এটি কৌশল পরামিতিগুলিতে যুক্ত প্রথম এক্সচেঞ্জ অবজেক্ট হিসাবে বিবেচিত হয়। এক্সচেঞ্জের সাথে সমস্ত ডেটা মিথস্ক্রিয়া এই অবজেক্টের ফাংশনগুলির মাধ্যমে উপলব্ধি করা হয়।
যোগ করা বিনিময় বস্তুর সাথে মিলে যায়exchange
কোডের বিষয়বস্তুঃ
function main() {
Log("The name of the first exchange object added on the bot page or backtest page:", exchange.GetName(), ", Label:", exchange.GetLabel())
}
def main():
Log("The name of the first exchange object added on the bot page or backtest page:", exchange.GetName(), ", Label:", exchange.GetLabel())
void main() {
Log("The name of the first exchange object added on the bot page or backtest page:", exchange.GetName(), ", Label:", exchange.GetLabel());
}
এটি একটি অ্যারে হিসাবে বোঝা যেতে পারে যা সমস্ত বিনিময় বস্তু যেমনexchange
এক্সচেঞ্জ অবজেক্ট, যার মধ্যে একাধিক এক্সচেঞ্জ অবজেক্ট থাকতে পারে;exchanges[0]
হয়exchange
.
যোগ করা বিনিময় বস্তুর সাথে মিলে যায়exchanges[0]
, exchanges[1]
, exchanges[2]
... এবং কৌশল কোড ইত্যাদি।
function main() {
for(var i = 0; i < exchanges.length; i++) {
Log("Index of the exchange object added (the first one is 0 and so on):", i, "Name:", exchanges[i].GetName(), "Label:", exchanges[i].GetLabel())
}
}
def main():
for i in range(len(exchanges)):
Log("Index of the exchange object added (the first one is 0 and so on):", i, "Name:", exchanges[i].GetName(), "Label:", exchanges[i].GetLabel())
void main() {
for(int i = 0; i < exchanges.size(); i++) {
Log("Index of the exchange object added (the first one is 0 and so on):", i, "Name:", exchanges[i].GetName(), "Label:", exchanges[i].GetLabel());
}
}
বৈশিষ্ট্যStatus
মধ্যেOrder
structure.
ধ্রুবক নাম | সংজ্ঞা | মূল্য |
---|---|---|
অর্ডার_স্টেট_পেন্ডিং | অপূর্ণ | 0 |
ORDER_STATE_CLOSED | শেষ | 1 |
ORDER_STATE_CANCELED-এর জন্য অনুরোধ | বাতিল | 2 |
ORDER_STATE_UNKNOWN | অজানা অবস্থা (অন্যান্য অবস্থা) | 3 |
ORDER_STATE_UNKNOWNস্ট্যাটাস কল করতে পারেনexchange.GetRawJSON()
মূল অর্ডার অবস্থা তথ্য পেতে, এক্সচেঞ্জ ফাইল অনুসন্ধান, এবং নির্দিষ্ট বিবরণ দেখতে.
ফর্মের ধ্রুবক নামগুলি সরাসরি কৌশল কোডের সাথে তুলনা করতে ব্যবহার করা যেতে পারেStatus
মধ্যেOrder
এই ধ্রুবক নামগুলি মুদ্রণ করলে অর্ডারের স্থিতি প্রদর্শিত হবে।ধ্রুব নামএবং তাদের সংশ্লিষ্টমান, এবং নীচের অন্যান্য ধ্রুবক নামগুলি একইভাবে কাজ করে, তাই তাদের সম্পর্কে আরও বিস্তারিত বিবরণ থাকবে না।
বৈশিষ্ট্যType
মধ্যেOrder
structure.
ধ্রুবক নাম | সংজ্ঞা | মূল্য |
---|---|---|
ORDER_TYPE_BUY | ক্রয় আদেশ | 0 |
ORDER_TYPE_SELL | বিক্রয় আদেশ | 1 |
বৈশিষ্ট্যType
মধ্যেPosition
structure.
ধ্রুবক নাম | সংজ্ঞা | বর্ণনা | প্রযোজ্য | মূল্য |
---|---|---|---|---|
PD_LONG | দীর্ঘ অবস্থান | ক্রিপ্টোকারেন্সি ফিউচার ব্যবহারexchange.SetDirection("closebuy") বন্ধ অবস্থান দিক সেট করতে, এবং অবস্থান এই ধরনের বন্ধ |
ক্রিপ্টোকারেন্সি ফিউচার | 0 |
PD_SHORT | শর্ট পজিশন | ক্রিপ্টোকারেন্সি ফিউচার ব্যবহারexchange.SetDirection("closesell") বন্ধ অবস্থান দিক সেট করতে, এবং অবস্থান এই ধরনের বন্ধ |
ক্রিপ্টোকারেন্সি ফিউচার | 1 |
বৈশিষ্ট্যOffset
মধ্যেOrder
structure.
ধ্রুবক নাম | সংজ্ঞা | মূল্য |
---|---|---|
ORDER_OFFSET_OPEN | ওপেন পজিশন অর্ডার | 0 |
ORDER_OFFSET_CLOSE | ক্লোজ পজিশন অর্ডার | 1 |
ট্রেডিং কৌশল কোডগুলিতে, কৌশল ইন্টারফেসে সেট করা কৌশল পরামিতিগুলি গ্লোবাল ভেরিয়েবলের আকারে প্রতিফলিত হয়।JavaScript
ভাষা সরাসরি পরামিতি মান সেট বা কৌশল ইন্টারফেসে পরিবর্তিত অ্যাক্সেস করতে পারেন;Python
কৌশল, মূল শব্দglobal
কৌশলটির সামগ্রিক ভেরিয়েবলগুলি পরিবর্তন করার জন্য এটি প্রয়োজনীয়।
প্যারামিটার প্রকারঃ
ভেরিয়েবল | বর্ণনা | মন্তব্যসমূহ | প্রকার | ডিফল্ট মান | বর্ণনা |
---|---|---|---|---|---|
সংখ্যা | সংখ্যাসূচক প্রকার | মন্তব্যসমূহ | সংখ্যা (সংখ্যা) | 1 | সি++ কৌশল একটি ফ্লোটিং-পয়েন্ট টাইপ |
স্ট্রিং | স্ট্রিং | মন্তব্যসমূহ | স্ট্রিং (স্ট্রিং) | হ্যালো এফএমজেড | ডিফল্ট মান উদ্ধৃত করা প্রয়োজন হয় না. ইনপুট একটি স্ট্রিং হিসাবে চিকিত্সা করা হয় |
কমবক্স | কম্বোবক্স | মন্তব্যসমূহ | কম্বোবক্স (নির্বাচিত) | 1|2|3 | কমবক্স ভেরিয়েবল নিজেই একটি সংখ্যাসূচক মান, যা কমবক্স কন্ট্রোল দ্বারা নির্বাচিত কলামের সূচককে উপস্থাপন করে। প্রথম কমবক্সের মান 1 এবং অন্যান্যগুলি 0 ইত্যাদি |
বুল | চেক অপশন | মন্তব্যসমূহ | বুলিয়ান (সত্য/মিথ্যা) | সত্য | যদি চেক করা হয়, ভেরিয়েবল bool true হয়; যদি চেক না করা হয়, ভেরিয়েবল bool false হয় |
সিক্রেটস্ট্রিং | এনক্রিপ্ট করা স্ট্রিং | মন্তব্যসমূহ | এনক্রিপ্ট করা স্ট্রিং (স্ট্রিং) | পাসওয়ার্ড | স্ট্রিংয়ের মতো একই ব্যবহারের সাথে, এনক্রিপ্ট করা স্ট্রিংটি এনক্রিপশন দ্বারা প্রেরণ করা হবে এবং সরল পাঠ্যে প্রেরণ করা হবে না |
number
, string
, combox
, bool
, secretString
.প্যারামিটার নির্ভরতা সেটিংসঃ
একটি প্যারামিটার সেট করা যেতে পারে অন্য প্যারামিটার প্রদর্শিত এবং প্যারামিটার নির্বাচন উপর ভিত্তি করে লুকানো করার অনুমতি দেয়. উদাহরণস্বরূপ, আমরা প্যারামিটার সেটnumberA
, যা একটি সংখ্যাসূচক টাইপ. আমরা যাকnumberA
প্যারামিটার কিনা তার উপর ভিত্তি করে প্রদর্শিত বা লুকানো হবেisShowA
(বুলিয়ান টাইপ) সত্য বা মিথ্যা হয়. আমরা পরিবর্তনশীল সেট করতে হবেnumberA
ইন্টারফেস প্যারামিটার সম্পর্কেঃnumberA@isShowA
.
এই ভাবে, যদি প্যারামিটারisShowA
চেক করা হয় না, প্যারামিটারnumberA
ComboBox নিয়ন্ত্রণ টাইপ পরামিতি হিসাবে, পরামিতির নির্ভর অংশ পরামিতি মান সমান কিনা তা বিচার করা হয়সূচক মানএকই ভাবে, প্যারামিটার নিতেisShowA
উদাহরণস্বরূপ, যখন পরামিতিতে ভেরিয়েবল সেট, লিখুনঃnumberA@combox==2
. প্যারামিটারnumberA
প্যারামিটার প্রদর্শন বা লুকিয়ে রাখা হবে কিনা তার উপর ভিত্তি করেcombox
তৃতীয় বিকল্প হিসাবে পরীক্ষা করা হবে (যেখানে সূচক 0 প্রথম বিকল্পের সাথে মিলে যায়, সূচক 1 দ্বিতীয়টির সাথে মিলে যায় এবং সূচক 2 তৃতীয়টির সাথে মিলে যায়) ।
কৌশল ইন্টারফেস পরামিতি, ইন্টারেক্টিভ কন্ট্রোল এবং প্যারামিটার গ্রুপিং ফাংশন (?First group)
যে প্যারামিটারটি গ্রুপিং শুরু করে তার বর্ণনার শুরুতে, নিম্নলিখিত চিত্র অনুযায়ীঃ
আপনি যখন কৌশলটি ব্যবহার করছেন, তখন প্যারামিটারগুলি গ্রুপে প্রদর্শিত হয়ঃ
প্যারামিটার ডিফল্ট মান সংরক্ষণ করুনঃ
কৌশল পরামিতি চিত্র দেখানো হয়. ব্যাকটেস্ট সময়, আপনি যদি কৌশল পরামিতি ডিফল্ট মান সংরক্ষণ করতে চান, আপনি ক্লিক করতে পারেনSave settings
কৌশল পরামিতি পরিবর্তন করার পর বোতাম.
আপনি কোড আকারে কৌশল পরামিতি সেটিংস সংরক্ষণ করতে পারেনঃ
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
'''backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
'''
/*backtest
start: 2020-02-29 00:00:00
end: 2020-03-29 00:00:00
period: 1d
args: [["number",2],["string","Hello FMZ.COM"],["combox",2],["bool",false],["numberA@isShowA",666],["isShowA",true]]
*/
কিছু ফাংশন মূল সঙ্গে থাকবেJSON
কলের সময় অনুরোধ করা তথ্য।JSON
ডেটা অ্যাট্রিবিউটে সংরক্ষণ করা হয়Info
যেহেতু ব্যাকটেস্ট একটি প্ল্যাটফর্ম ইন্টারফেস অ্যাক্সেস করা হয় না, ব্যাকটেস্টের সময় ফেরত দেওয়া ডেটা কোন বৈশিষ্ট্য নেইInfo
নিম্নলিখিত প্রতিটি ডাটা স্ট্রাকচারের প্রধান বৈশিষ্ট্যগুলির একটি বর্ণনা।
ফাংশন দ্বারা ফেরত সমস্ত লেনদেনের ইতিহাস (নিজেকে নয়) পানexchange.GetTrades()
.
{
Id : 9585306, // Trading record ID; if the exchange interface does not provide order ID, use the timestamp to fill in
Time : 1567736576000, // Time (Unix timestamp milliseconds)
Price : 1000, // Price
Amount : 1, // Volume
Type : 0 // Order Type; refer to the order type in the constants; 0 is ORDER_TYPE_BUY, meaning the value of ORDER_TYPE_BUY is 0
}
মার্কেট কোট ফাংশন দ্বারা ফিরে আসেexchange.GetTicker()
.
{
Info : {...}, // After requesting the platform interface, this attribute is not available in the raw data that the exchange interface responds to, during the backtest
High : 1000, // Highest price; if the platform interface does not provide the 24-hour highest price, use sell price 1 to fill in
Low : 500, // Lowest price; if the platform interface does not provide the 24-hour lowest price, use buy price 1 to fill in
Sell : 900, // Sell price 1
Buy : 899, // Buy price 1
Last : 900, // Last executed price
Volume : 10000000, // Recent trading volume; in principle, the unit of spot trading volume is base currency, and the unit of futures trading volume is contract quantity. If the platform interface does not provide this kind of data, use the existing data of the platform interface to fill in; for instance, it might be a trading volume in the unit of quote currency
Time : 1567736576000 // Millisecond-level timestamp
}
স্ট্যান্ডার্ডOHLC
কাঠামোটি কে-লাইন এবং প্রক্রিয়া সূচক গণনা এবং বিশ্লেষণ আঁকতে ব্যবহৃত হয়।exchange.GetRecords()
গঠন অ্যারে ফেরত দেয়. প্রতিটিRecord
কাঠামো একটি k-লাইন বার প্রতিনিধিত্ব করে, যথা এক k-লাইনBAR
.Time
মধ্যেRecord
K-লাইন বার সময়ের শুরু সময়।
{
Time : 1567736576000, // A timestamp, accurate to millisecond, in the same format as the result obtained by Javascript's newDate().GetTime()
Open : 1000, // Open price
High : 1500, // Highest price
Low : 900, // Lowest price
Close : 1200, // Close price
Volume : 1000000 // Trading volume; in principle, the unit of spot trading volume is base currency, and the unit of futures trading volume is contract quantity. If the platform interface does not provide this kind of data, use the existing data of the platform interface to fill in; for instance, it might be a trading volume in the unit of quote currency
}
অর্ডার কাঠামো ফাংশন দ্বারা ফেরত দেওয়া যেতে পারে, সহexchange.GetOrder()
এবংexchange.GetOrders()
. ফাংশনexchange.GetOrders()
অ্যারে বা স্ট্রাকচার একটি খালি অ্যারে ফেরত (যদি কোনবর্তমান অসম্পূর্ণ অর্ডার, ফেরত[]
, অর্থাৎ, একটি খালি অ্যারে) ।
{
Info : {...}, // After requesting the platform interface, this attribute is not available in the raw data that the exchange interface responds to, during the backtest
Id : 123456, // Unique ide