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

মুদ্রাচক্রের পরিমাণগত লেনদেন নতুন কিছু দেখায় - যা আপনাকে মুদ্রাচক্রের পরিমাণগত লেনদেনের আরও কাছাকাছি নিয়ে যায়।

লেখক:উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্ন, তৈরিঃ 2021-04-19 14:16:21, আপডেটঃ 2024-12-04 21:21:43

币圈量化交易萌新看过来–带你走近币圈量化(二)

মুদ্রা বৃত্তের পরিমাণগত লেনদেনের নতুন চেহারা আপনাকে মুদ্রা বৃত্তের পরিমাণগত লেনদেনের কাছাকাছি নিয়ে যাবে।

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

প্রোগ্রামযুক্ত লেনদেনের স্ক্রিপ্ট

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

উপরের কৌশলগুলি ট্রেডিং কৌশলগুলির দৃষ্টিভঙ্গি থেকে বিভক্ত করা হয়েছে, এবং উদ্ভাবকদের পরিমাণগত ট্রেডিং প্ল্যাটফর্মের কৌশল নকশার দৃষ্টিভঙ্গি থেকে কৌশলগুলি আরও বিভক্ত করা যেতে পারেঃ

  • একজাতীয় কৌশল এই কৌশলটি কেবলমাত্র এক ধরণের কাজ করে, যেমন বিটিসি ট্রেডিং বা ইটিএইচ ট্রেডিং।

  • বহুবিধ কৌশল সহজভাবে বলতে গেলে, এটি একটি কৌশলগত যুক্তি অনুসারে একাধিক জাতের সাথে কাজ করা।

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

  • মাল্টি লজিক্যাল স্ট্র্যাটেজি উদাহরণস্বরূপ, একটি বাস্তব ডিস্কের উপর একই সময়ে MACD কৌশল, সমান্তরাল কৌশল, গ্রিড কৌশল ইত্যাদি ডিজাইন করা হয়েছে ((অবশ্যই, বিভিন্ন এক্সচেঞ্জের বস্তু পরিচালনা করা হয়, একই এক্সচেঞ্জের বস্তু পরিচালনা করা হয়। নির্দিষ্ট কৌশলটি লজিক্যালভাবে দ্বন্দ্বযুক্ত কিনা তা দেখতে হবে))

  • এক্সচেঞ্জ এপিআই ইন্টারফেস কিভাবে প্রোগ্রাম্যাটিক ট্রেডিং স্ক্রিপ্ট এক্সচেঞ্জ অ্যাকাউন্ট পরিচালনা করে? উত্তর হল এক্সচেঞ্জের মাধ্যমে খোলা API ইন্টারফেস। তাহলে এক্সচেঞ্জের ওপেন ইন্টারফেসের কি কি ধরনের আছে? আগের নিবন্ধে আমরা "এক্সচেঞ্জ" বিভাগে এক্সচেঞ্জের সাধারণভাবে REST, Websocket ইন্টারফেস সম্পর্কে আলোচনা করেছি। এখানে আমরা কৌশলগত প্রোগ্রামের স্তর থেকে কিছুটা ধারণা যোগ করেছি। এক্সচেঞ্জ ইন্টারফেসগুলি যাচাই করা হয় কিনা তা অনুসারে বিভক্ত করা হয়েছে (REST, Websocket উভয়ই) যাচাই করা হয় এবং যাচাই করা হয় না) ।

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

    • ইন্টারফেস যা যাচাই করা প্রয়োজন সহজভাবে বলতে গেলে, এগুলি হল ইন্টারফেসগুলি যা যাচাই করা প্রয়োজন (এপিআই কী দ্বারা যাচাই করা) । এই ধরনের ইন্টারফেসগুলিকে ব্যক্তিগত ইন্টারফেস বলা হয়। এই ধরনের ইন্টারফেসগুলি সাধারণত আপনার অ্যাকাউন্টের সাথে সম্পর্কিত কিছু ক্রিয়াকলাপ বা তথ্যের সাথে সম্পর্কিত হয়, যেমন অ্যাকাউন্টের সম্পদ অনুসন্ধান, অ্যাকাউন্টের হোল্ডিংয়ের জন্য অনুসন্ধান, অনুসন্ধান বন্ধ করা, একক অনুসন্ধান স্থানান্তর, স্থানান্তর, মুদ্রা সামঞ্জস্যের লিভারেজ, হোল্ডিং মোড সেট করা ইত্যাদি। এই অপারেশনগুলোকে যাচাই করতে হবে। ইনভেন্টর কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্মে, API ফাংশনগুলিকে কল করার সময় যাচাই করা প্রয়োজন (প্যাকেজযুক্ত এক্সচেঞ্জগুলির জন্য যাচাই করা দরকার এমন ইন্টারফেস, ব্যক্তিগত ইন্টারফেস), যদি API KEY ভুলভাবে কনফিগার করা হয় তবে ইন্টারফেসটি কল করার সময় একটি ত্রুটি রিটার্ন করে, একটি ফাঁকা মান ফেরত দেয়।

তাহলে কিভাবে এই ইন্টারফেসগুলোকে ইনভেন্টরদের কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্মে ব্যবহার করা হয়?

ইনভেন্টর কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্মে এক্সচেঞ্জের আচরণ, সংজ্ঞায়িত ইন্টারফেস (যেমন, কে-লাইন ইন্টারফেস, গভীরতা মার্কেট ইন্টারফেস, বর্তমান সম্পদ ইন্টারফেস, ডাউনলোড ইন্টারফেস, অর্ডার প্রত্যাহার ইন্টারফেস ইত্যাদি) অন্তর্ভুক্ত রয়েছে।https://www.fmz.com/api )。

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

এই এক্সচেঞ্জগুলির ইন্টারফেসগুলি উদাহরণস্বরূপঃ সম্পদ স্থানান্তর, শর্তাদি অর্ডার, বাল্ক অর্ডার, বাল্ক প্রত্যাহার, সংশোধন আদেশ ইত্যাদি। এই ইন্টারফেসগুলি কিছু এক্সচেঞ্জের কাছে রয়েছে, কিছু এক্সচেঞ্জের কাছে নেই এবং কার্যকারিতা, ব্যবহারের বিবরণগুলি খুব আলাদা হতে পারে, তাই এই ইন্টারফেসগুলি উদ্ভাবকের পরিমাণগত ট্রেডিং প্ল্যাটফর্মে পাস করা হয়।exchange.IOএই ফাংশনটি অ্যাক্সেস করার জন্য, ইনভেন্টরদের কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্ম এপিআই ডকুমেন্টেশন দেখুনঃhttps://www.fmz.com/api#exchange.io…)。在发明者量化交易平台策略广场上也有些实用IO的范例策略。

ইনভেন্টর কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্মের API ডকুমেন্টেশনে থাকা সমস্ত API ফাংশন কি নেটওয়ার্ক অনুরোধ তৈরি করে?

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

  • এখানে কিছু সাধারণ প্রশ্ন এবং অভিজ্ঞতা রয়েছে যা উদ্ভাবকরা কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্মের সাথে API ফাংশন ব্যবহার করে।

    • ভুল হতে পারে এটি সবচেয়ে সাধারণ ত্রুটি, যা অসংখ্য নতুনত্বকে বিরক্ত করে, প্রায়শই কৌশলগুলি পুনরায় পরীক্ষা করে দেখায় যে সবকিছু ঠিক আছে, কেন বাস্তব ড্রাইভটি কিছুক্ষণের জন্য চলছে ((যে কোনও সময় ট্রিগার হতে পারে) এবং বাস্তব ড্রাইভটি ঝুলে যায় ~

    币圈量化交易萌新看过来–带你走近币圈量化(二)

    ইন্টারফেস রিটার্ন ডেটার জন্য নীতিগুলি লেখার সময় আমাদের যাচাই করার প্রয়োজন হয়, উদাহরণস্বরূপ, উদ্ভাবকের পরিমাণগত ট্রেডিং প্ল্যাটফর্মে ট্রেডিংয়ের এই লাইনটি পান (এটি আপনার নিজের প্রোগ্রামটি সরাসরি এক্সচেঞ্জ ইন্টারফেসে অ্যাক্সেস করার জন্যও একই):var ticker = exchange.GetTicker()এবং যদি আমরা এটি ব্যবহার করতে চাই,tickerভেরিয়েবল (দেখুন GetTicker ফাংশন ফিরে গঠন)Last(সাম্প্রতিক মূল্য) এই তথ্যটি আমরা ব্যবহার করতে চাই।var newPrice = ticker.Lastএইভাবে ডেটা পাওয়া যায় ((newPrice is???new: সর্বশেষ,Price: দাম, হ্যাঁ! একত্রিত করুন!) এই সময়ে, যদিGetTicker()ফাংশনটি স্বাভাবিক ডেটা ফেরত দেয়, কিন্তু যদি অনুরোধের সময়সীমা, নেটওয়ার্ক ত্রুটি, এক্সচেঞ্জের লাইন বন্ধ করা, তারগুলি কেটে ফেলা, বাচ্চাদের টানানো ইত্যাদি ঘটে তবে এটি ঘটবে।GetTicker()ফাংশন ফিরে আসেnull❖ এই সময়েtickerএর মান হচ্ছেnullএবং আমি আবার এটি দেখতে যাচ্ছি।Lastযদি আপনি এই পদ্ধতিটি ব্যবহার না করেন তবে আপনি একটি অপ্রয়োজনীয় প্রক্রিয়া দেখতে পাবেন যা নীতিগত প্রক্রিয়া বন্ধ করে দেয়। সুতরাং দেখা যাচ্ছে যে ইন্টারফেস কল ব্যর্থতা (GetTicker কল ব্যর্থতা null ফিরে আসে) সরাসরি কারণ নয় যা নীতি ডিস্ক বন্ধ করে দেয় (প্রত্যক্ষ কারণ হল একটি অ্যাক্সেস)nullভেরিয়েবলের বৈশিষ্ট্য), ইন্টারফেস কল ব্যর্থতা রিপোর্টিং ত্রুটিটি প্রকৃত ড্রাইভ বন্ধের কারণ হবে না ((উল্লেখ্য) । তাই আমরা কি করতে পারি যাতে ডিস্কটি অস্বাভাবিকভাবে বন্ধ না হয়? উত্তর হল ইন্টারফেস থেকে ফিরে আসা তথ্যের ভুল-প্রক্রিয়া করা, যা খুব সহজ, শুধুমাত্র রিটার্ন করা তথ্যের উপর নির্ভর করে।null(জাভাস্ক্রিপ্ট ভাষার উদাহরণ, অন্যান্য ভাষাগুলি প্রায় একই) একটি ছোট কোড অনুচ্ছেদ লিখুন (এটি কেবল একটি অনুচ্ছেদ, সরাসরি চালানো অসম্ভব!

      var ticker = exchange.GetTicker()
      if (ticker) {
          var newPrice = ticker.Last
          Log("打印最新价格:", newPrice)
      } else {
          // 数据为null,不做操作就不会出问题
      }
    

    শুধু নয়।GetTickerইন্টারফেসগুলিকে ভুল করতে হবে, নেটওয়ার্ক অনুরোধগুলির সাথে ইন্টারফেসগুলিকে ফেরতের মানগুলির জন্য ভুল করতে হবে ((যদি আপনি ফাংশনের ফেরতের মান ব্যবহার করেন) ভুলের প্রতি সহানুভূতিশীল হওয়ার অনেকগুলি উপায় রয়েছে।_C()ফাংশন (FMZ API ডকুমেন্টেশন দেখুন), নিজের ত্রুটি-সমর্থন ফাংশন লিখুন, নিজের ত্রুটি-সমর্থন প্রক্রিয়া, যুক্তি ডিজাইন করুন। সম্পর্কে_C()ফাংশন ব্যবহারের ক্ষেত্রে, অনেক নতুন ছাত্র সম্ভবত ভুল ব্যবহার করবে।_C()ফাংশনের পরামিতি হল ফাংশন রেফারেন্স, ফাংশন কল নয়।

      ```_C(funcName(param1, param2))```,调用错误,通常萌新没认真看FMZ API文档都会这么写。
     - 现货市价单买单的下单量
      现货市价单买单的下单量也是很多萌新容易搞错的,上一篇中已经讲过现货市价单买单的下单量通常是金额(极个别的交易所可能是其它设定,一般FMZ上这些特殊的交易所设定都会在FMZ API文档上说明),例如我用OKEX V5 模拟盘测试:
      交易对设置为:```LTC_USDT```
    

    function main (() { exchange.IO ((simulate, true) // ওকেএক্স এক্সচেঞ্জের অ্যালগরিদম ডিস্ক হিসাবে স্যুইচ করুন exchange.Buy ((-1, 1) // দাম হল -1, নির্দেশ করে যে অর্ডারটি বাজারের মূল্য তালিকা, পরিমাণ হল 1 নির্দেশ করে যে অর্ডার পরিমাণ 1USDT }

      由于交易所一般都有下单金额限制,小于限制的订单是不予报单的(例如币安现货要求每单大于5USDT才可以报单成功)。所以这样下单会报错:
    

    ত্রুটি Buy ((-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]

    
     - 期货下单时的方向
      在做期货策略时下单方向也是萌新们经常搞错导致出问题的,以在发明者量化交易平台上编写策略为例。
      我们先看下API文档上的描述:
      https://www.fmz.com/api#exchange.setdirection...
    
    
      ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/16d065f0dfda87640aaf.png) 
    
    
      由于下单函数就只有```Buy```,```Sell```。然而期货(现货当然没问题了,现货只有买卖)有开多、平多、开空、平空这些方向,那么显然Buy/Sell表示不了这么多个方向的操作,这时就需要引入设置期货交易方向这个函数```exchange.SetDirection()```。
      在FMZ上
      ```exchange.SetDirection("buy")```(先设置方向)和```exchange.Buy```配合使用,就表示下的单子是开多仓的订单。
      以此类推:
      ```exchange.SetDirection("sell")```和```exchange.Sell```配合使用,就表示下的单子是开空仓的订单。
      ```exchange.SetDirection("closebuy")```和```exchange.Sell```配合使用,就表示下的单子是平多仓的订单。
      ```exchange.SetDirection("closesell")```和```exchange.Buy```配合使用,就表示下的单子是平空仓的订单。
      通常萌新会```exchange.SetDirection("sell")```和```exchange.Buy```配合使用,或者其它的错误组合。然后就报错了(回测可能不报错,但是这个明显是逻辑错误,强迫症不能忍....的)。
      另一个萌新经常犯的错误
    

    function main (() { exchange.SetContractType ((quarter টেমপ্লেট) // বর্তমান চুক্তিকে ত্রৈমাসিক চুক্তিতে সেট করুন exchange.SetDirection (এক্সচেঞ্জ.সেটডিরেকশন) var id = exchange.Sell ((-1, 1)
    Log ((ওহ, দেখুন আমার বাজার মূল্যের অর্ডারটি অর্ডার করা হয়েছে, এটি সম্পন্ন হয়েছে, এবং সেখানে সঞ্চয় করা হয়েছে, exchange.GetPosition)))
    exchange.SetDirection ((closebuy) // closebuy এবং Sell এর সাথে ব্যবহার করুন, ঠিক আছে ~ exchange.Sell ((-1, 1) }

      ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/168d332fddad25f0859e.png)       
      看到这里会问:“为什么我有持仓并且closebuy和Sell也是搭配使用的,怎么就报错,不能平仓了?”。我会回答:“平错方向了!平的是多头仓位”
      以上这个报错还可能出现的一种情况是:平仓方向设置正确、下单函数使用也正确、也持有这个方向的持仓,但是还是报这个错误。
      原因是可能你的程序下了多次单,开始的订单并没成交,平仓单在盘口挂着等待成交,这个时候程序继续去平仓,就会提示超出平仓头寸的错误。
    
     - 日志输出、交易信息展示
      设计编写程序化、量化交易策略就离不开“数据显示”,“操作日志输出”等人机交互的设计。通常使用原生编程语言编写实盘脚本、策略程序。直接使用当前语言的输出函数。
      例如:
      python用```print```。
      javascript用```console.log```。
      Golang用```fmt.Println()```。
      C++用```cout```
    
    
      再来说下FMZ平台上的信息显示,在发明者量化交易平台上,显示信息的地方有两个主要位置。
         - 状态栏
        在实盘运行起来之后,实盘页面如图
    
    
        ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/16bafc3d4df6dfa18102.png) 
    
    
        显示部分为状态栏信息,状态栏主要是为了显示一些实时变动的数据(因为实时变动需要实时观察,又不能每次都打印成日志,所以这类数据可以在状态栏显示,如果每条都打印日志会很多重复无意义的数据,影响查询)。
        状态栏上显示数据使用```LogStatus```函数,具体可以参看FMZ的API文档。
    
         - 日志栏
        同样在实盘页面,如图所示:
    
    
        ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/16cf9d61e66384022a76.png) 
    
    
        显示部分为日志栏,日志栏主要是为了永久记录某个时刻某些数据,或者记录某个时候策略的某项操作。
        日志分为多种类型:
        1、普通日志,FMZ的策略中使用Log函数输出、打印在策略日志。
    
    
           ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/16ddc72e1f7d07dcfa5a.png) 
    
    
        2、下单日志,FMZ的策略中使用```exchange.Sell```/```exchange.Buy```会自动在日志输出记录。
    
    
           ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/172aac2089e93865e3c2.png) 
    
    
        3、撤单日志,FMZ的策略中使用```exchange.CancelOrder```,会自动在日志输出撤单日志。
    
    
           ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/15e90c7be742743c7421.png) 
    
    
        4、错误日志,FMZ的策略运行时,进行网络请求的接口发生调用错误时,抛出异常时(例如throw之类的语句),会自动在日志中输出错误日志。        
    
    
           ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/166196451439434a800f.png) 
    
    
      FMZ的API函数,可以产生日志输出的函数比如Log(...),exchange.Buy(Price, Amount),exchange.CancelOrder(Id)等都可以在必要参数后跟一些附带输出参数,比如:exchange.CancelOrder(orders[j].Id, orders[j])这样就是在取消orders[j]这个订单时,附带输出这个订单信息。
    

    function main (() { Log ((টেন ডেটা ১ টন, টেন ডেটা ২ টন, টেন ডেটা ৩ টন, টেন... টেন)) var data2 = ২০০ var id = exchange.Sell ((১০০,০০০, ০.১, সংযোজন ডেটা ১ টন, ডেটা ২, ... ) exchange.CancelOrder ((id, এর সাথে ডেটা 1 টন, data2, ...) LogProfit ((100, সংযোজন ডেটা 1 টন, data2, ... ) }

    
     - 指标函数的使用
      在说指标函数之前,我们先弄懂什么是指标,简单说就是均线、MACD、ATR之类的线。
      问:这些指标怎么来的?
      答:当然是计算出来的。
      问:是依据什么计算的呢?
      答:根据K线数据计算。
      问:举个例子?
      答:以最简单的指标均线指标举例,如果我们使用日K线(就是一根阳线或者阴线代表一天)数据作为指标计算的数据源。均线指标参数为10,那么计算出的均线指标就是10日均线。
      问:如果K线BAR数量不够10根,可以算出均线指标么?
      答:不仅是均线指标无法算出,任何指标在K线数据BAR数量不满足指标周期参数时都无法算出有效指标值,算出的数组对应位置上就会用空值填充,例如```JavaScript```语言策略打印算出的指标数据时就会显示```null```。
    
    
      正好策略广场上有个教学例子:https://www.fmz.com/strategy/125770
      回测这个教学例子策略,可以看到回测系统生成的图表以及10周期的均线:
    
    
      ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/16626b033d3b5ccafb3b.png) 
    
    
      策略自定义画图,画出的K线以及均线图表:
    
    
      ![币圈量化交易萌新看过来--带你走近币圈量化(二)](/upload/asset/16ba98eec859abb30366.png) 
    
    
      问:如果我要10小时均线呢?
      答:K线数据用小时周期的K线数据就可以了。
    
    
      通俗说,我们看到的K线,我们把它数据化之后就是一个数组(数组概念不了解,可以百度下),其中每个元素就是一个K线柱,是按顺序排列的,数组第一个元素是距离当前时间最远的,数组最后一个元素是距离当前时间最近的。
      通常K线数据最后一个线柱是当前周期的线柱,是实时变动的,是未完成的(登录一个交易所的页面观察他的K线就能观察出来变动)。计算出的指标也是和K线柱一一对应的,上面的例子可以看到一个指标数值对应一个K线柱。注意最后一个K线柱是实时变动的,算出的指标也是会跟随K线柱变化而变化的。
    
    
      在发明者量化交易平台上,可以使用TA库(FMZ平台实现的库,集成在托管者,各种语言都可以直接使用)或者使用talib库(talib老牌指标库,JS、C++集成,Python需要自行安装)。
      例如以上例子中计算计算均线:
      使用TA库:
    

    function main (() { var records = exchange.GetRecords (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) var ma = TA.MA ((records, 10) Log ((ma) // প্রিন্ট সমতল }

      使用talib库:
    

    function main (() { var records = exchange.GetRecords (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) var ma = talib.MA ((records, 10) Log ((ma) // প্রিন্ট সমতল }

      算出的指标数据ma是一个数组,每个元素一一对应K线数组(records),即```ma[ma.length -1]```对应```records[records.length - 1]```,以此类推。
    
    
      其它再复杂的指标也是同理,需要注意MACD这类指标。
    

    var macd = TA.MACD ((records) // এইভাবে শুধুমাত্র K লাইন ডেটা পাস করা হয়, নির্দেশক পরামিতি পাস করা হয় না, নির্দেশক পরামিতি ব্যবহার করা হয় ডিফল্ট মান, অন্যান্য নির্দেশক ফাংশন এছাড়াও সমার্থক হয়

      此时macd这个变量是一个二维数组(不了解概念可以百度),二维数组简单说就是一个数组它的每个元素也是一个数组。
      问:为什么macd指标数据是个二维数组呢?
      答:因为macd指标是由两条线(dif线,dea线)和一组量柱组成(macd量柱,其实这个量柱数据也可以看成是一条线)。所以macd变量可以拆分为:
    

    var dif = macd[0] var dea = macd[১] var macdColumn = macd[2] ` এখানে একটি প্রস্তুত শিক্ষার উদাহরণ রয়েছে, এবং এটি একটি আকর্ষণীয় গবেষণাঃhttps://www.fmz.com/strategy/151972

    币圈量化交易萌新看过来–带你走近币圈量化(二)


সম্পর্কিত বিষয়বস্তু

আরও দেখুন