হার্ডকোর কৌশল শিখতে আপনাকে নিয়ে যাবে "C++ সংস্করণ OKEX চুক্তি হেজিং কৌশল"

লেখক:ছোট্ট স্বপ্ন, তৈরিঃ 2019-08-26 14:30:47, আপডেটঃ 2023-10-19 21:09:01

img

হার্ডকোর কৌশল শিখতে আপনাকে নিয়ে যাবে "C++ সংস্করণ OKEX চুক্তি হেজিং কৌশল"

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

  • কৌশলগত নীতি

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

  • কোড বিশ্লেষণ কৌশল

    কোডটি প্রায় চারটি অংশে বিভক্ত।

    • 1. তালিকাভুক্ত মান সংজ্ঞা, কিছু অবস্থা মান সংজ্ঞায়িত করে, যা অবস্থা চিহ্নিত করার জন্য ব্যবহৃত হয়। কিছু ফাংশন ফাংশন, যেমন url কোডিং ফাংশন, সময় রূপান্তর ফাংশন ইত্যাদি, যা নীতির সাথে সম্পর্কিত নয়, শুধুমাত্র ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়।
    • 2.K线数据生成器类:策略由该生成器类对象生成的K线数据驱动。
    • 3.对冲类:该类的对象可以执行具体的交易逻辑,对冲操作、策略细节的处理机制等。
    • 4.策略主函数,也就是 mainফাংশন ।mainফাংশনটি একটি নীতির ইনপুট ফাংশন, যার মধ্যে মূল লুপটি কার্যকর হয়, এবং এটি একটি গুরুত্বপূর্ণ ক্রিয়াকলাপ সম্পাদন করে, যা এক্সচেঞ্জের ওয়েবসকেট ইন্টারফেসে অ্যাক্সেস করে, প্রেরিত টিক ট্রেডিং ডেটা পান, যা কে-লাইন ডেটা জেনারেটরের কাঁচামাল ডেটা হিসাবে কাজ করে।

    কৌশলগত কোডের সামগ্রিক জ্ঞান অর্জন করে, আমরা নীচে ধাপে ধাপে প্রতিটি অংশকে বিশ্লেষণ করে কৌশলটির নকশা, ধারণা এবং কৌশলগুলি সম্পূর্ণভাবে শিখতে পারি।

    • তালিকাভুক্ত মান সংজ্ঞা, অন্যান্য ফাংশন ফাংশন

      ১। তালিকাভুক্ত প্রকারStateবিবৃতি

      enum State {                    // 枚举类型  定义一些 状态
          STATE_NA,                   // 非正常状态
          STATE_IDLE,                 // 空闲
          STATE_HOLD_LONG,            // 持多仓
          STATE_HOLD_SHORT,           // 持空仓
      };
      

      যেহেতু কোডের কিছু ফাংশন একটি নির্দিষ্ট অবস্থা ফেরত দেয়, তাই এই অবস্থাগুলি তালিকাভুক্ত প্রকারের মধ্যে সংজ্ঞায়িত।Stateমধ্যভাগে । কোড দেখায়STATE_NAএটি একটি অস্বাভাবিক অবস্থা।STATE_IDLEএটি একটি অস্থায়ী অবস্থা, যা হেজিং অপারেশন করতে পারে।STATE_HOLD_LONGহার্ডিং পজিশনের জন্য একটি স্ট্যাটাস।STATE_HOLD_SHORTপ্রতিবন্ধী পজিশন ধারণের জন্য স্থিতি।

      ২, স্ট্রিং প্রতিস্থাপন, এই নীতিতে কোন কল নেই, এটি একটি ব্যাকআপ টুল ফাংশন, যা মূলত স্ট্রিংগুলি পরিচালনা করে।

      string replace(string s, const string from, const string& to)   
      

      ৩, ফাংশন হল একটি ফাংশন যা ষোল অক্ষরের মধ্যে রূপান্তরিত হয়toHex

      inline unsigned char toHex(unsigned char x)
      

      ৪, ইউআরএল কোডিং এর জন্য ফাংশন

      std::string urlencode(const std::string& str)
      

      5, টাইম রূপান্তর ফাংশন, যা স্ট্রিং ফরম্যাটের সময়কে টাইম টেম্পারে রূপান্তর করে ।

      uint64_t _Time(string &s)
      
    • কে-লাইন ডেটা জেনারেটর

      class BarFeeder {                                                                       // K线 数据生成器类
          public:
              BarFeeder(int period) : _period(period) {                                       // 构造函数,参数为 period 周期, 初始化列表中初始化
                  _rs.Valid = true;                                                           // 构造函数体中初始化 K线数据的 Valid属性。
              }    
      
              void feed(double price, Chart *c=nullptr, int chartIdx=0) {                     // 输入数据,nullptr 空指针类型,chartIdx 索引默认参数为 0
                  uint64_t epoch = uint64_t(Unix() / _period) * _period * 1000;               // 秒级时间戳祛除不完整时间周期(不完整的_period 秒数),转为 毫秒级时间戳。
                  bool newBar = false;                                                        // 标记 新K线Bar 的标记变量
                  if (_rs.size() == 0 || _rs[_rs.size()-1].Time < epoch) {                    // 如果 K线数据 长度为 0 。 或者 最后一bar 的时间戳小于 epoch(K线最后一bar 比当前最近的周期时间戳还要靠前)
                      Record r;                                                               // 声明一个 K线bar 结构
                      r.Time = epoch;                                                         // 构造当前周期的K线bar 
                      r.Open = r.High = r.Low = r.Close = price;                              // 初始化 属性
                      _rs.push_back(r);                                                       // K线bar 压入 K线数据结构
                      if (_rs.size() > 2000) {                                                // 如果K线数据结构长度超过 2000 , 就剔除最早的数据。
                          _rs.erase(_rs.begin());
                      }
                      newBar = true;                                                          // 标记
                  } else {                                                                    // 其它情况,不是出现新bar 的情况下的处理。
                      Record &r = _rs[_rs.size() - 1];                                        // 引用 数据中最后一bar 的数据。
                      r.High = max(r.High, price);                                            // 对引用数据的最高价更新操作。
                      r.Low = min(r.Low, price);                                              // 对引用数据的最低价更新操作。
                      r.Close = price;                                                        // 对引用数据的收盘价更新操作。
                  }
          
                  auto bar = _rs[_rs.size()-1];                                               // 取最后一柱数据 ,赋值给 bar 变量
                  json point = {bar.Time, bar.Open, bar.High, bar.Low, bar.Close};            // 构造一个 json 类型数据
                  if (c != nullptr) {                                                         // 图表对象指针不等于 空指针,执行以下。
                     if (newBar) {                                                            // 根据标记判断,如果出现新Bar 
                          c->add(chartIdx, point);                                            // 调用图表对象成员函数add,向图表对象中插入数据(新增K线bar)
                          c->reset(1000);                                                     // 只保留1000 bar的数据
                      } else {
                          c->add(chartIdx, point, -1);                                        // 否则就更新(不是新bar),这个点(更新这个bar)。
                      } 
                  }
              }
              Records & get() {                                                               // 成员函数,获取K线数据的方法。
                  return _rs;                                                                 // 返回对象的私有变量 _rs 。(即 生成的K线数据)
              }
          private:
              int _period;
              Records _rs;
      };
      

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

    • হেজিং শ্রেণী

      class Hedge {                                                                           // 对冲类,策略主要逻辑。
        public:
          Hedge() {                                                                           // 构造函数
              ...
          };
          
          State getState(string &symbolA, Depth &depthA, string &symbolB, Depth &depthB) {        // 获取状态,参数: 合约A名称 、合约A深度数据, 合约B名称、 合约B深度数据
              
              ...
          }
          bool Loop(string &symbolA, Depth &depthA, string &symbolB, Depth &depthB, string extra="") {       // 开平仓 策略主要逻辑
              
              ...
          }    
      
        private:
          vector<double> _addArr;                                     // 对冲加仓列表
          string _state_desc[4] = {"NA", "IDLE", "LONG", "SHORT"};    // 状态值 描述信息
          int _countOpen = 0;                                 // 开仓次数
          int _countCover = 0;                                // 平仓次数
          int _lastCache = 0;                                 // 
          int _hedgeCount = 0;                                // 对冲次数
          int _loopCount = 0;                                 // 循环计数(循环累计次数)
          double _holdPrice = 0;                              // 持仓价格
          BarFeeder _feederA = BarFeeder(DPeriod);            // A合约 行情 K线生成器
          BarFeeder _feederB = BarFeeder(DPeriod);            // B合约 行情 K线生成器
          State _st = STATE_NA;                               // 对冲类型 对象的 对冲持仓状态
          string _cfgStr;                                     // 图表配置 字符串
          double _holdAmount = 0;                             // 持仓量
          bool _isCover = false;                              // 是否平仓 标记
          bool _needCheckOrder = true;                        // 设置是否 检查订单
          Chart _c = Chart("");                               // 图表对象,并初始化
      };
      
      
      

      কোডটি তুলনামূলকভাবে দীর্ঘ, একটি অংশ বাদ দেওয়া হয়েছে, যা মূলত এই হেজিং ক্লাসের কাঠামো দেখায়, গঠন ফাংশন হেজকে বলা হয় না, যা মূলত অবজেক্টের সূচনা; বাকি, প্রধানত 2 টি ফাংশন ফাংশন রয়েছে।

      • getState

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

      • লুপ

        কৌশলটির লেনদেনের যুক্তি এই ফাংশনে আবৃত, যেখানে কল করা হয়getState, কে-লাইন ডেটা জেনারেটর অবজেক্ট ব্যবহার করে পার্থক্যের জন্য কে-লাইন ডেটা উত্পন্ন করা হয়, হেজিং ওপেন, স্থিতিশীল, বাগদান যুক্তির বিচার করা হয়; চার্টের ডেটা আপডেটের জন্য কিছু অপারেশনও রয়েছে।

    • কৌশল প্রধান ফাংশন

      void main() {  
      
          ...
          
          string realSymbolA = exchange.SetContractType(symbolA)["instrument"];    // 获取设置的A合约(this_week / next_week / quarter ) ,在 OKEX 合约 当周、次周、季度 对应的真实合约ID 。
          string realSymbolB = exchange.SetContractType(symbolB)["instrument"];    // ...
          
          string qs = urlencode(json({{"op", "subscribe"}, {"args", {"futures/depth5:" + realSymbolA, "futures/depth5:" + realSymbolB}}}).dump());    // 对 ws 接口的要传的参数进行 json 编码、 url 编码
          Log("try connect to websocket");                                                                                                            // 打印连接 WS接口的信息。
          auto ws = Dial("wss://real.okex.com:10442/ws/v3|compress=gzip_raw&mode=recv&reconnect=true&payload="+qs);     // 调用FMZ API Dial 函数 访问  OKEX 期货的 WS 接口
          Log("connect to websocket success");
          
          Depth depthA, depthB;                               // 声明两个 深度数据结构的变量 用于储存A合约和B合约 的深度数据
          auto fillDepth = [](json &data, Depth &d) {         // 用接口返回的json 数据,构造 Depth 数据的代码。
              d.Valid = true;
              d.Asks.clear();
              d.Asks.push_back({atof(string(data["asks"][0][0]).c_str()), atof(string(data["asks"][0][1]).c_str())});
              d.Bids.clear();
              d.Bids.push_back({atof(string(data["bids"][0][0]).c_str()), atof(string(data["bids"][0][1]).c_str())});
          };
          string timeA;   // 时间 字符串 A 
          string timeB;   // 时间 字符串 B 
          while (true) {
              auto buf = ws.read();                           // 读取 WS接口 推送来的数据
              
              ...
              
      }
      

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

      string qs = urlencode(json({{"op", "subscribe"}, {"args", {"futures/depth5:" + realSymbolA, "futures/depth5:" + realSymbolB}}}).dump());    
      Log("try connect to websocket");                                                                                                            
      auto ws = Dial("wss://real.okex.com:10442/ws/v3|compress=gzip_raw&mode=recv&reconnect=true&payload="+qs);     
      Log("connect to websocket success");
      

      প্রথমে সাবস্ক্রাইব করা ইন্টারফেসের মাধ্যমে পাঠানো সাবস্ক্রাইব বার্তার json পরামিতিতে url কোড করা হয়, অর্থাৎpayloadপরামিতির মান. তারপর আরো গুরুত্বপূর্ণ পদক্ষেপ হল ইনভেন্টর কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্মের API ইন্টারফেস ফাংশন কল করা।Dialফাংশন ।Dialফাংশনটি এক্সচেঞ্জের ওয়েবসকেট ইন্টারফেস অ্যাক্সেস করতে ব্যবহৃত হয়। আমরা এখানে কিছু সেটিংস তৈরি করেছি যাতে তৈরি হতে চলেছে এমন ওয়েবসকেট সংযোগ নিয়ন্ত্রণ অবজেক্ট ws এর সাথে স্বয়ংক্রিয়ভাবে সংযোগ বিচ্ছিন্ন হয় ((সাবস্ক্রিপশন বার্তাগুলি এখনও payload পরামিতির মান qs স্ট্রিং ব্যবহার করে) ।Dialফাংশনের প্যারামিটার স্ট্রিংয়ে কনফিগারেশন অপশন যোগ করা হয়েছে।

      Dialফাংশন পরামিতির প্রথম অংশটি নিম্নরূপঃ

      wss://real.okex.com:10442/ws/v3
      

      এটি একটি ওয়েবসকেট ইন্টারফেসের ঠিকানা যা আপনি অ্যাক্সেস করতে চান এবং তারপরে এটি ব্যবহার করতে পারেন|বিভাজন ।compress=gzip_raw&mode=recv&reconnect=true&payload="+qsসবগুলোই কনফিগারেশন প্যারামিটার।

      প্যারামিটার নাম বর্ণনা
      কম্প্রেস compress হল কম্প্রেশন মোড, OKEX ওয়েবসকেট ইন্টারফেস gzip_raw ব্যবহার করে। এই মোডটি gzip_raw হিসাবে সেট করা হয়
      মোড মোড হল মোড, dual, send, recv তিন ধরনের; dual হল দ্বি-মুখী, কম্প্রেসড ডেটা প্রেরণ, কম্প্রেসড ডেটা গ্রহণ; send হল কম্প্রেসড ডেটা প্রেরণ;recv হল কম্প্রেসড ডেটা গ্রহণ, স্থানীয়ভাবে কম্প্রেসড মুক্ত করা;
      পুনরায় সংযোগ করুন reconnect পুনরায় সংযোগ সেট করা আছে কিনা তা দেখায়, reconnect=true পুনরায় সংযোগ সক্ষম করার জন্য, ডিফল্টভাবে পুনরায় সংযোগ না করার জন্য সেট করা নেই।
      পয়লড লোড payload as ws পুনরায় সংযুক্ত করার সময় পাঠানোর জন্য সাবস্ক্রিপশন বার্তা।

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

  • অবস্থান নিয়ন্ত্রণ

    পজিশন কন্ট্রোল হেকিং পজিশনের অনুপাত ব্যবহার করে যা "পফিন্যাচ" সংখ্যার মতো।

    for (int i = 0; i < AddMax + 1; i++) {                                          // 构造 控制加仓数量的数据结构,类似 波菲纳契数列 对冲数量 比例。
        if (_addArr.size() < 2) {                                                   // 前两次加仓量变化为: 加一倍对冲数量 递增
            _addArr.push_back((i+1)*OpenAmount);
        }
        _addArr.push_back(_addArr[_addArr.size()-1] + _addArr[_addArr.size()-2]);   // 最后 两个加仓数量相加,算出当前的加仓数量储存到 _addArr数据结构中。
    }
    

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

  • স্থিতিস্থাপকতাঃ ক্ষতি বন্ধ

    ফিক্সড স্টপ ডিফারেন্স, স্টপ লস ডিফারেন্স। হোল্ডিংয়ের পার্থক্যটি পিকিং পজিশনে পৌঁছানোর পরে, স্টপ লস পজিশনে স্টপ লস হয়।

  • বাজারে আসা, বের হওয়া, চক্রের নকশা

    প্যারামিটার এনপিরিওড নিয়ন্ত্রিত চক্র কৌশলটির ওপেন পজিশনের উপর একটি নির্দিষ্ট গতিশীল নিয়ন্ত্রণ করে।

  • কৌশল চার্ট

    কৌশলটি স্বয়ংক্রিয়ভাবে K-লাইন চার্ট তৈরি করে, যা সম্পর্কিত লেনদেনের তথ্য চিহ্নিত করে।

    C++ কৌশল কাস্টম চার্ট অঙ্কন চার্ট অপারেশন, এছাড়াও খুব সহজ, আপনি দেখতে পারেন যে হেজিং শ্রেণীর নির্মাণ ফাংশন আমরা ভাল লিখিত চার্ট কনফিগার স্ট্রিং_cfgStr কনফিগার ব্যবহার করা হয় চার্ট অবজেক্ট_c, _c হ'ল হেজিং শ্রেণীর ব্যক্তিগত সদস্য ইনস্টল করার সময় ইনভেন্টরকে কল করা হয়Chartফাংশন গঠনের জন্য চার্ট বস্তু।

    _cfgStr = R"EOF(
    [{
    "extension": { "layout": "single", "col": 6, "height": "500px"},
    "rangeSelector": {"enabled": false},
    "tooltip": {"xDateFormat": "%Y-%m-%d %H:%M:%S, %A"},
    "plotOptions": {"candlestick": {"color": "#d75442", "upColor": "#6ba583"}},
    "chart":{"type":"line"},
    "title":{"text":"Spread Long"},
    "xAxis":{"title":{"text":"Date"}},
    "series":[
        {"type":"candlestick", "name":"Long Spread","data":[], "id":"dataseriesA"},
        {"type":"flags","data":[], "onSeries": "dataseriesA"}
        ]
    },
    {
    "extension": { "layout": "single", "col": 6, "height": "500px"},
    "rangeSelector": {"enabled": false},
    "tooltip": {"xDateFormat": "%Y-%m-%d %H:%M:%S, %A"},
    "plotOptions": {"candlestick": {"color": "#d75442", "upColor": "#6ba583"}},
    "chart":{"type":"line"},
    "title":{"text":"Spread Short"},
    "xAxis":{"title":{"text":"Date"}},
    "series":[
        {"type":"candlestick", "name":"Long Spread","data":[], "id":"dataseriesA"},
        {"type":"flags","data":[], "onSeries": "dataseriesA"}
        ]
    }
    ]
    )EOF";
    _c.update(_cfgStr);                 // 用图表配置 更新图表对象
    _c.reset();                         // 重置图表数据。
    
    • কল করুন_c.update(_cfgStr);_cfgStr ব্যবহার করে চার্ট অবজেক্ট কনফিগার করুন।
    • কল করুন_c.reset();চার্ট ডেটা পুনরায় সেট করুন।

    যখন কৌশল কোডটি চার্টে তথ্য সন্নিবেশ করানোর প্রয়োজন হয়, তখন এটি সরাসরি _c অবজেক্টের সদস্য ফাংশন কল করে বা _c এর রেফারেন্সটি একটি পরামিতি হিসাবে পাস করে এবং তারপরে _c অবজেক্টের সদস্য ফাংশনটি কল করে চার্টের ডেটা আপডেট, সন্নিবেশ অপারেশন সম্পাদন করে। উদাহরণস্বরূপঃ

    _c.add(chartIdx, {{"x", UnixNano()/1000000}, {"title", action},  {"text", format("diff: %f", opPrice)}, {"color", color}});
    

    অর্ডার করার পর, K লাইন চার্টে একটি ট্যাগ রেকর্ড করুন।

    নীচে, K স্ট্রিংগুলিকে BarFeeder ক্লাসের সদস্য ফাংশনগুলিকে কল করে অঙ্কিত করা হয়েছে।feedযখন আপনি একটি চার্ট অবজেক্ট _c এর রেফারেন্সটি একটি পরামিতি হিসাবে পাস করেন।

    void feed(double price, Chart *c=nullptr, int chartIdx=0)
    

    অর্থাৎfeedফাংশনের রূপক পরামিতি c ⋅

    json point = {bar.Time, bar.Open, bar.High, bar.Low, bar.Close};            // 构造一个 json 类型数据
    if (c != nullptr) {                                                         // 图表对象指针不等于 空指针,执行以下。
       if (newBar) {                                                            // 根据标记判断,如果出现新Bar 
            c->add(chartIdx, point);                                            // 调用图表对象成员函数add,向图表对象中插入数据(新增K线bar)
            c->reset(1000);                                                     // 只保留1000 bar个数据
        } else {
            c->add(chartIdx, point, -1);                                        // 否则就更新(不是新bar),这个点(更新这个bar)。
        } 
    }
    

    চার্ট অবজেক্ট _c কে কল করেaddসদস্য ফাংশন, চার্টে নতুন কে-লাইন বার ডেটা সন্নিবেশ করান। কোডঃc->add(chartIdx, point);

  • পুনরায় পরীক্ষা

    img

    img

    img

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

এই পাতাটি আলাপঃপ্রতিবন্ধী পাতা।https://www.fmz.com/strategy/163447

আরও আকর্ষণীয় কৌশলগুলি "ইনভেন্টর কোয়ালিফাইড ট্রেডিং প্ল্যাটফর্ম" এ রয়েছেঃhttps://www.fmz.com


সম্পর্কিত

আরো