টাইম সিরিজ সমান সময়ের অবিচ্ছিন্ন ব্যবধানে প্রাপ্ত ডেটা সিরিজকে বোঝায়। পরিমাণগত বিনিয়োগে, এই ডেটাগুলি মূলত ট্র্যাক করা বিনিয়োগের বস্তুর দাম এবং ডেটা পয়েন্টগুলির আন্দোলনে প্রতিফলিত হয়। উদাহরণস্বরূপ, স্টক মূল্যের জন্য, নির্দিষ্ট সময়ের মধ্যে নিয়মিত রেকর্ড করা টাইম সিরিজের ডেটা নিম্নলিখিত চার্টটি উল্লেখ করতে পারে, যা পাঠকদের আরও পরিষ্কার বোঝার দেবেঃ
আপনি দেখতে পাচ্ছেন, তারিখটি এক্স-অক্সিসে রয়েছে এবং দামটি ওয়াই-অক্সিসে প্রদর্শিত হয়। এই ক্ষেত্রে,
যাইহোক, যখন আপনি সময় সিরিজের তথ্য ব্যবহার করেন, আপনি প্রায়শই এই ধরনের ডেটা দেখতে পাবেন যা শুধুমাত্র দুটি কলাম ধারণ করেঃ তারিখ এবং মূল্য। বেশিরভাগ ক্ষেত্রে, আপনি পাঁচটি কলামের ডেটা ব্যবহার করবেনঃ ডেটা সময়কাল, খোলার মূল্য, সর্বোচ্চ মূল্য, সর্বনিম্ন মূল্য এবং বন্ধ মূল্য। এর অর্থ হল যে যদি আপনার ডেটা সময়কাল দৈনিক স্তরে সেট করা হয় তবে দিনের উচ্চ, খোলা, নিম্ন এবং বন্ধ মূল্য পরিবর্তনগুলি এই সময় সিরিজের ডেটাতে প্রতিফলিত হবে।
টিক ডেটা এক্সচেঞ্জের সবচেয়ে বিস্তারিত ট্রেডিং ডেটা কাঠামো। এটি উপরে উল্লিখিত সময় সিরিজের ডেটাগুলির একটি বর্ধিত রূপ, যার মধ্যে রয়েছেঃ খোলার মূল্য, সর্বোচ্চ মূল্য, সর্বনিম্ন মূল্য, সর্বশেষ মূল্য, ট্রেডিং পরিমাণ এবং টার্নওভার। যদি লেনদেনের ডেটা একটি নদীর সাথে তুলনা করা হয় তবে টিক ডেটা একটি নির্দিষ্ট ক্রস বিভাগে নদীর ডেটা।
বিদেশী এক্সচেঞ্জের প্রতিটি ক্রিয়া রিয়েল-টাইমে বাজারে ধাক্কা দেওয়া হবে, যখন দেশীয় এক্সচেঞ্জ প্রতি সেকেন্ডে দুবার চেক করে। যদি এই সময়ের মধ্যে ক্রিয়া থাকে তবে একটি স্ন্যাপশট তৈরি করা হবে এবং ধাক্কা দেওয়া হবে। তুলনায়, ডেটা ধাক্কা কেবলমাত্র অনটাইম হিসাবে বিবেচিত হতে পারে, অনটিক নয়।
এই টিউটোরিয়ালে সমস্ত কোড এবং টাইম সিরিজ ডেটা অধিগ্রহণ এফএমজেড কোয়ান্ট প্ল্যাটফর্মে সম্পন্ন হবে।
যদিও দেশীয় টিক ডেটা একটি বাস্তব টিক নয়, এটি অন্তত ব্যাকটেস্টিং জন্য এই তথ্য ব্যবহার করে বাস্তবতা অসীম কাছাকাছি এবং পুনরুদ্ধার করতে পারেন। প্রতিটি টিক বাজারে পণ্য প্রধান পরামিতি প্রদর্শন করে যে সময়, এবং বাস্তব বট আমাদের কোড তত্ত্বগত টিক দুইবার প্রতি সেকেন্ড অনুযায়ী গণনা করা হয়।
শুধু তাই নয়, এফএমজেড কোয়ান্টে, এমনকি যদি 1 ঘন্টা সময়কালের ডেটা লোড করা হয়, তবে ডেটা গ্রানুলারিটি এখনও সামঞ্জস্য করা যেতে পারে, যেমন ডেটা গ্রানুলারিটি 1 মিনিটে সামঞ্জস্য করা। এই মুহুর্তে, 1 ঘন্টা কে-লাইনটি 1 মিনিটের ডেটা নিয়ে গঠিত। অবশ্যই, গ্রানুলারিটি যত কম, নির্ভুলতা তত বেশি। আরও শক্তিশালী বিষয় হ'ল আপনি যদি ডেটাটি একটি বাস্তব বট টিকতে স্যুইচ করেন তবে আপনি বাস্তব বট পরিবেশটি নির্বিঘ্নে পুনরুদ্ধার করতে পারেন। অর্থাৎ, টিক এক্সচেঞ্জের প্রকৃত ডেটা প্রতি সেকেন্ডে দুবার।
এখন আপনি এই টিউটোরিয়ালটি সম্পূর্ণ করার জন্য আপনার প্রয়োজনীয় মৌলিক ধারণাগুলি শিখেছেন। এই ধারণাগুলি শীঘ্রই ফিরে আসবে, এবং আপনি এই টিউটোরিয়ালের পরে তাদের সম্পর্কে আরও শিখবেন।
আরও ভাল সরঞ্জাম ভাল কাজ করে। আমাদের প্রথমে এফএমজেড কোয়ান্ট প্ল্যাটফর্মে একটি ডকার স্থাপন করতে হবে। ডকারের ধারণার বিষয়ে, প্রোগ্রামিংয়ের অভিজ্ঞতা থাকা পাঠকরা এটিকে আনুষ্ঠানিকভাবে প্যাকেজড ডকার সিস্টেম হিসাবে কল্পনা করতে পারেন, যা বিভিন্ন মূলধারার এক্সচেঞ্জের পাবলিক এপিআই ইন্টারফেসগুলি এবং কৌশল লেখার এবং ব্যাকটেস্টিংয়ের প্রযুক্তিগত বিবরণগুলিকে ক্যাপসুল করেছে। এই সিস্টেমটি প্রতিষ্ঠার মূল উদ্দেশ্য হ'ল পরিমাণগত ব্যবসায়ীরা এফএমজেড কোয়ান্ট প্ল্যাটফর্ম ব্যবহার করার সময় কৌশল লেখার এবং নকশায় মনোনিবেশ করা। এই প্রযুক্তিগত বিবরণগুলি কৌশল লেখকদের কাছে একটি ক্যাপসুল ফর্মুলে উপস্থাপিত হয় যাতে তাদের অনেক সময় এবং প্রচেষ্টা সাশ্রয় হয়।
পদ্ধতি A: ব্যবহারকারীরা নিজেরাই সার্ভারগুলি ভাড়া বা কিনতে পারে এবং এডাব্লুএস, আলিবাবা ক্লাউড, ডিজিটাল মহাসাগর এবং গুগল ক্লাউডের মতো বিভিন্ন ক্লাউড কম্পিউটিং প্ল্যাটফর্মে সেগুলি স্থাপন করতে পারে। সুবিধাটি হ'ল কৌশল সুরক্ষা এবং সিস্টেমের সুরক্ষা উভয়ই গ্যারান্টিযুক্ত। এফএমজেড কোয়ান্ট প্ল্যাটফর্মের জন্য, ব্যবহারকারীদের এই পদ্ধতিটি ব্যবহার করতে উত্সাহিত করা হয়। বিতরণ স্থাপনার মাধ্যমে সার্ভার আক্রমণের লুকানো বিপদ দূর হয় (এটি গ্রাহক বা প্ল্যাটফর্ম নিজেই হোক) ।
পদ্ধতি বিঃ স্থাপনার জন্য এফএমজেড কোয়ান্ট প্ল্যাটফর্মের পাবলিক সার্ভার ব্যবহার করুন, প্ল্যাটফর্মটি হংকং, সিঙ্গাপুর, জাপান এবং পূর্ব মার্কিন যুক্তরাষ্ট্রে স্থাপনের জন্য চারটি অবস্থান সরবরাহ করে। ব্যবহারকারীরা যে এক্সচেঞ্জটি তারা বাণিজ্য করতে চান তার অবস্থান এবং নিকটবর্তীতার নীতি অনুসারে স্থাপন করতে পারেন। এই দিকটির সুবিধা হ'ল এটি এক ক্লিকের সাথে সহজ এবং সহজেই সম্পন্ন করা যায়, যা বিশেষত নতুন ব্যবহারকারীদের জন্য উপযুক্ত। এটি লিনাক্স সার্ভার কেনার বিষয়ে অনেক কিছু জানতে হবে না এবং এটি লিনাক্স কমান্ডগুলি শেখার সময় এবং শক্তিও সাশ্রয় করে। দাম তুলনামূলকভাবে সস্তা। ছোট তহবিলের ব্যবহারকারীদের জন্য প্ল্যাটফর্মটি এই স্থাপনার পদ্ধতিটি ব্যবহার করার পরামর্শ দেয়।
নতুনদের বোঝার জন্য, এই নিবন্ধটি বি পদ্ধতি গ্রহণ করবে।
নির্দিষ্ট ক্রিয়াকলাপগুলি হলঃ লগ ইন করুনFMZ.COM, ড্যাশবোর্ড, ডকার ক্লিক করুন, এবং ডকার ভাড়া করার জন্য ডকার ভিপিএস ভাড়া করার জন্য এক-ক্লিক ক্লিক করুন।
পাসওয়ার্ড লিখুন, যেমন নিচে দেখানো হয়েছে সফল বাস্তবায়নের পরেঃ
একটি রোবট তৈরি করা খুব সহজ। ডকারটি স্থাপন করার পরে, বামদিকে বট কলামে ক্লিক করুন, বট যুক্ত করুন ক্লিক করুন, ট্যাগের নামটিতে একটি নাম পূরণ করুন এবং সবেমাত্র স্থাপন করা ডকারটি নির্বাচন করুন। নীচের পরামিতি এবং কে-লাইন সময়কাল নির্দিষ্ট পরিস্থিতি অনুযায়ী সেট করা যেতে পারে, মূলত ট্রেডিং কৌশলটির সাথে সমন্বয় করে।
এখন পর্যন্ত, আমাদের কাজের পরিবেশ তৈরি করা হয়েছে। এটা দেখা যায় যে এটি খুব সহজ এবং কার্যকর, এবং প্রতিটি ফাংশন তার নিজস্ব দায়িত্ব পালন করে। পরবর্তী, আমরা একটি পরিমাণগত কৌশল লিখতে শুরু হবে।
আমরা উপরে টাইম সিরিজ ডেটা এবং টিক ডেটা এর ধারণাগুলি উল্লেখ করেছি। এরপরে, আমরা দুটি ধারণাকে সংযুক্ত করার জন্য একটি সহজ EMA কৌশল ব্যবহার করি।
একটি ধীর সময়ের ইএমএ, যেমন 7-দিনের ইএমএ, এবং একটি দ্রুত সময়ের ইএমএ, যেমন 3-দিনের ইএমএ এর মাধ্যমে। এগুলি একই কে-লাইন চার্টে প্রয়োগ করা হয়। যখন দ্রুত সময়ের ইএমএ ধীর সময়ের ইএমএ অতিক্রম করে, আমরা এটিকে গোল্ডেন ক্রস বলি; যখন ধীর সময়ের ইএমএ দ্রুত সময়ের ইএমএ দিয়ে নেমে যায়, আমরা এটিকে বিয়ারিশ ক্রসওভার বলি।
একটি পজিশন খোলার ভিত্তি হল গোল্ডেন ক্রস দিয়ে লং পজিশন খোলার এবং bearish crossover দিয়ে শর্ট পজিশন খোলার। পজিশন বন্ধ করার কারণ একই।
আসুন খোলা যাক।FMZ.COM, অ্যাকাউন্ট, ড্যাশবোর্ড, কৌশল লাইব্রেরিতে লগ ইন করুন, এবং একটি নতুন কৌশল তৈরি করুন। উপরের বাম কোণে কৌশল লেখার ভাষায় পাইথন নির্বাচন করুন। নিম্নলিখিত এই কৌশলটির কোড। প্রতিটি লাইনে বিস্তারিত মন্তব্য রয়েছে। দয়া করে বুঝতে আপনার সময় নিন। এই কৌশলটি একটি বাস্তব বট কৌশল নয়। আসল অর্থের সাথে পরীক্ষা করবেন না। মূল উদ্দেশ্য আপনাকে কৌশল লেখার সাধারণ ধারণা এবং শেখার জন্য একটি টেমপ্লেট দেওয়া।
import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.
def main(): # The main function, where the strategy logic begins.
STATE_IDLE = -1 # Mark position status variables
state = STATE_IDLE # Mark the current position status
initAccount = ext.GetAccount() # The spot digital currency trading class library (python version) is used here. Remember to check it when writing the strategy to obtain the initial account information.
while True: # Enter the loop
if state == STATE_IDLE : # Here begins the logic of opening positions.
n = ext.Cross(FastPeriod,SlowPeriod) # The indicator crossover function is used here, for details please see: https://www.fmz.com/strategy/21104.
if abs(n) >= EnterPeriod : # If n is greater than or equal to the market entry observation period, the market entry observation period here is to prevent positions from being opened indiscriminately as soon as the market opens.
opAmount = _N(initAccount.Stocks * PositionRatio,3) # Opening position quantity, for the usage of _N, please check the official API documentation.
Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # Create a variable to store the open position status and execute the open position operation.
if Dict : # Check the dict variable and prepare for the following log output.
opAmount = Dict['amount']
state = PD_LONG if n > 0 else PD_SHORT # Both PD_LONG and PD_SHORT are global constants used to represent long and short positions, respectively.
Log("Details of opening positions",Dict,"Cross-period",n) # Log information
else: # Here begins the logic of closing positions.
n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # The indicator crossover function.
if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # If the market exit observation period has passed and the current account status is in the position status, then you can determine the Golden Cross or Bearish Crossover.
nowAccount = ext.GetAccount() # Refresh and get account information again.
Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # The logic of closing a position is to close the long position if it is a long position and close the short position if it is a short position.
state = STATE_IDLE # Mark the position status after closing positions.
nowAccount = ext.GetAccount() # Refresh and get account information again.
LogProfit(nowAccount.Balance - initAccount.Balance,'money:',nowAccount.Balance,'currency:',nowAccount.Stocks,'The details of closing positions',Dict2,'Cross-over period:',n) # Log information
Sleep(Interval * 1000) # Pause the loop for one second to prevent the account from being restricted due to too fast API access frequency.
ব্যাকটেস্ট ক্লিক করুন, আপনি দেখতে পারেন যে অনেকগুলি সামঞ্জস্যযোগ্য পরামিতি রয়েছে, যা সরাসরি সংশোধন করা যেতে পারে। ভবিষ্যতের জন্য, কৌশলটি আরও বেশি জটিল এবং পরামিতিগুলি আরও বেশি। সংশোধন করার এই পদ্ধতিটি ব্যবহারকারীদের কোডটি একের পর এক সংশোধন করার ঝামেলা এড়াতে সহায়তা করতে পারে, যা সুবিধাজনক, দ্রুত এবং পরিষ্কার।
নিম্নলিখিত অপ্টিমাইজেশান বিকল্পগুলি সেট পরামিতিগুলি স্বয়ংক্রিয়ভাবে অপ্টিমাইজ করতে পারে। কৌশল বিকাশকারীদের সর্বোত্তম পছন্দটি খুঁজে পেতে সহায়তা করার জন্য সিস্টেমটি বিভিন্ন অনুকূল পরামিতিগুলি চেষ্টা করবে।
উপরের উদাহরণগুলি থেকে আমরা দেখতে পাচ্ছি যে পরিমাণগত ব্যবসায়ের ভিত্তি হ'ল সময় সিরিজের ডেটা বিশ্লেষণ এবং টিক ডেটার ব্যাকটেস্টিং মিথস্ক্রিয়া। যুক্তিটি যতই জটিল হোক না কেন, এটি এই দুটি মৌলিক উপাদান থেকে পৃথক করা যায় না। পার্থক্যটি মাত্র মাত্রার পার্থক্য। উদাহরণস্বরূপ, উচ্চ-ফ্রিকোয়েন্সি লেনদেনের জন্য আরও বিশদ ডেটা দিক এবং আরও সময় সিরিজের ডেটা প্রয়োজন। আরেকটি উদাহরণ হ'ল সালিশ ট্রেডিং, যার জন্য ব্যাকটেস্ট নমুনা থেকে প্রচুর ডেটা প্রয়োজন। এটির আগ্রহের প্রসার এবং হ্রাসের পরিসংখ্যানগত ফলাফলগুলি জানতে দশ বছরেরও বেশি সময় ধরে দুটি ট্রেডিং অবজেক্টের অবিচ্ছিন্ন গভীরতার ডেটা প্রয়োজন হতে পারে। ভবিষ্যতের নিবন্ধগুলিতে, আমি একের পর এক উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং এবং সালিশ ট্রেডিং কৌশলগুলি প্রবর্তন করব। দয়া করে এটির জন্য উন্মুখ হন।