জাভাস্ক্রিপ্ট খেলুন পুরানো সাদাদের সাথে - একটি ক্রেতা এবং বিক্রেতা অংশীদার তৈরি করুন

লেখক:ছোট্ট স্বপ্ন, তৈরিঃ 2017-03-06 10:41:40, আপডেটঃ 2017-10-11 10:36:53

এই ভিডিওতে, আমি আমার ভাইয়ের সাথে জাভাস্ক্রিপ্টের সাথে খেলছি এবং একটি ছোট অংশীদার তৈরি করেছি যা কেনা বেচা করবে।

বালি বাক্সে জন্মগ্রহণ

  • স্যান্ডবক্স সিস্টেম

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

    বঙ্গবন্ধুর মতে, একটি কার্যকর স্যান্ডবক্সের জন্য নিম্নলিখিত জিনিসগুলি প্রয়োজনঃ

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

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

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

    • ৪. ভুল-সমর্থন পরীক্ষাঃ প্রোগ্রামের সিমুলেশন চলার সময় প্রায়শই ঝড়ো বাতাস হয়, বাতাস শান্ত হয়, কারণ এটি ঝর্ণাখণ্ডের ভিতরে রয়েছে ((কোন বড় তরঙ্গ হতে পারে?), যখন বাস্তবে এটি অপ্রত্যাশিত গভীর সমুদ্র, বিভিন্ন অজানা ঝড়ের সাথে ঘন ঘন দেখা যায়। তাহলে স্যান্ডবক্স সিস্টেমটি ঝর্ণাখণ্ডের ভিতরে যান্ত্রিকভাবে কিছু বড় বাতাসের তরঙ্গ তৈরি করতে হবে, সর্বাধিক খারাপ পরিবেশের সিমুলেশন করতে হবে ((যেমন বিভিন্ন ভুল ডেটা, নেটওয়ার্ক ত্রুটি রিপোর্ট, এমনকি যৌক্তিকভাবে অসম্ভব ডেটা প্রকাশ করা)) ।

    • ৫. চার্ট দেখানোঃ চার্ট বিশ্লেষণের জন্য অনেক দরকারী তথ্য রেকর্ড করতে পারে, যেমন আয় চার্ট, মূল্য পার্থক্যের কার্ভ ইত্যাদি।

  • আমরা একটি স্যান্ডবক্স সিস্টেম হাতে নিয়েছি এবং আমরা প্রথমে কিছু সহজ কোড লিখেছি।

    • ১। সিটিপি কমোডিটি ফিউচার অটোমেশনের সাধারণ কাঠামো ওল্ড হোয়াইট এর নীচের স্তরটি একটি ফাংশনকে আবৃত করেexchange.IO("status")ফরওয়ার্ড কোম্পানির ফরওয়ার্ড সার্ভার এর সাথে সংযোগ আছে কিনা তা চিহ্নিত করতে। এখানে প্রশ্নটি চালানঃ ফরওয়ার্ড কোম্পানির ফরওয়ার্ড সার্ভার? পুরানো উত্তরঃ কমোডিটি ফিউচারগুলি সিটিপি প্রোটোকল ব্যবহার করে এবং সংযোগের কাঠামোটি হ'লঃ ফিউচার সংস্থার ক্লায়েন্টের টার্মিনাল প্রোগ্রাম ((পুরানো সাদা কোড) -----> ফিউচার সংস্থার প্রিফোর্ড সার্ভার-------> এক্সচেঞ্জ সার্ভার আবার আসল প্রশ্নের দিকে ফিরে যাওয়া যাক, কমোডিটি ফিউচার বন্ধ হওয়ার সময়, ফিউচার কোম্পানির প্রিফট সার্ভারের সাথে সংযোগ স্থাপন করা যায় না (একটি নির্দিষ্ট সময় বন্ধ হওয়ার পরে, ফিউচার কোম্পানির প্রিফট সার্ভার বন্ধ হয়ে যায়) । অথবা কিছু পরিস্থিতির কারণে সিটিপি সংযোগ বিচ্ছিন্ন হয়। এই পরিস্থিতিগুলি মোকাবেলা করার জন্য, প্রচলিত পদ্ধতিগুলি নির্দিষ্ট সময়ের মধ্যে সংযোগের অবস্থা নির্ধারণ করতে হবে, অ-সংযুক্ত অবস্থায় কিছু অপারেশন এড়াতে হবে যা সমস্যার কারণ হতে পারে।

      function MainLoop(){  //  处理具体工作的函数
                          //  编写处理具体交易逻辑
      }
      function main() {
          var status = null;
          while(true){
              status = exchange.IO("status");      //  调用API 确定连接状态
              if(status === true){                 //  判断状态
                  LogStatus("已连接!");            //  在回测或者实际运行中显示一些实时数据、信息。
                  MainLoop();                      //  连接上 交易所服务器后,执行主要工作函数。
              }else{                               //  如果没有连接上 即 exchange.IO("status") 函数返回 false
                  LogStatus("未连接状态!");         //  显示 未连接状态。
              }
              Sleep(1000);                         //  封装的睡眠函数,参数是毫秒,1000毫秒 等于 1秒,需要有轮询间隔, 以免访问过于频繁。CTP协议是每秒推送2次数据。
          }
      }
      

      স্যান্ডবক্সের ভেতরে দৌড়াওঃ

      img img

      আপনি গ্রাফ দেখতে পাচ্ছেন, আমরা কি রিটেনশন অ্যাকাউন্টের জন্য ১০০ ওয়াট সেট করেছি?

      img

    • আপনি কিভাবে আপনার অ্যাকাউন্টের তথ্য তথ্য পেতে পারেন যেহেতু এটি একটি ফাংশন হিসাবে একটি তল স্তর আবৃত করা হয়exchange.GetAccount()আসুন, এই সহজ বাক্যটি ব্যবহার করে দেখুন।

      function MainLoop(){  //  处理具体工作的函数
          exchange.GetAccount();    
      }
      

      শুধু এই কাস্টমাইজডMainLoop()ফাংশনে লিখুনexchange.GetAccount();

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

      function MainLoop(){                     // 处理具体工作的函数
          Log(exchange.GetAccount());          // 写法1
          var Account = exchange.GetAccount(); // 写法2
      }
      

      img

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

      প্রথমত, আপনাকে জানতে হবে যে কোন ধরণের বাজারটি বোঝার জন্য, উদাহরণস্বরূপ, সিলিকন স্ক্রুড স্টিলের 1705 চুক্তি সম্পর্কে। ঠিক আছে, এক্সচেঞ্জে এই চুক্তির কোডঃ rb1705 (ফিউচার জ্ঞান আমিও বায়ুডো নিজের মস্তিষ্ক পূরণ করেছি), ব্যবহার করুন।exchange.SetContractType("rb1705")এছাড়াও, আমি জানতে চাই যে এই rb1705 চুক্তির বর্তমান অবস্থা (এটি পুনর্বিবেচনার সিস্টেমে চলমান সময়) ।exchange.GetTicker()এখন আমি এই চুক্তির ইতিহাসের মূল্য চক্রের পরিসংখ্যান জানতে চাই।exchange.GetRecords()এটিকেMainLoopফাংশনটি পরিবর্তন করুনঃ

      var index = 0;                                                // 声明一个全局变量 用来记录循环次数
      function MainLoop(){
          var ContractInfo = exchange.SetContractType("rb1705");    // 设置我要操作的 商品期货合约类型 即 螺纹钢1705合约。
          if(!ContractInfo){
              return;                                               // 如果设置合约没有成功,即返回函数,再次进入重试。
          }
          Log("rb1705 Info:", ContractInfo);                        // 显示一下合约详细信息。
          var ticker = exchange.GetTicker();                        // 通过CTP协议请求 此刻行情数据
          var records = exchange.GetRecords();                      // 通过CTP协议请求 历史K线数据,K线的周期默认周期是在沙盒系统上设置的。
          Log("ticker:", ticker);                                   // 打印出来 此刻行情数据
          Log("records:", records);                                 // 打印出来 历史K线数据
          Log("index:", index++, "#FF0000");                        // 打印循环次数, 在最后参数传入 "#FF0000" 可以使打印的日志显示为红色。
      }
      

      img

      রেকর্ডের একটি অংশ নির্বাচন করুন ভেরিয়েবলের মান (বিভিন্ন অ্যারে টাইপ): [ {Time:1486083600000,Open:3354,High:3358,Low:3071,Close:3272,Volume:328708.00000000006}, {Time:1486083900000,Open:3272,High:3272,Low:3228,Close:3228,Volume:133542},... টাইমঃ টাইমস্ট্যাম্প, মিলিসেকেন্ডের সময়। ওপেনঃ ওপেন মূল্য, হাইঃ সর্বোচ্চ মূল্য, লোঃ সর্বনিম্ন মূল্য, ক্লোজঃ ক্লোজ মূল্য, ভলিউমঃ অর্ডার পরিমাণ

      মুদ্রিত টিকার ভেরিয়েবলের মান (অবজেক্ট): {High:3090.5,Low:3088.5,Sell:3090.5,Buy:3088.5,Last:3089.5,Volume:100} High: বর্তমান সর্বোচ্চ মূল্য, Low: বর্তমান সর্বনিম্ন মূল্য, Sell: বিক্রয় মূল্য, Buy: ক্রয় মূল্য, Last: সর্বশেষ লেনদেন মূল্য, Volume: সাম্প্রতিক লেনদেন

      rb1705 চুক্তির তথ্যঃ ((CTP প্রোটোকলের ক্ষেত্রে ক্ষেত্রের বর্ণনা দেখতে পারেন.)) { CombinationType : 0, CreateDate :20160414 DeliveryMonth: ৫ DeliveryYear: ১৭০৫ EndDelivDate:20170522 এক্সচেঞ্জ আইডি SHFE এক্সচেঞ্জ ইনস্টআইডি : rb1705 , ExpireDate:20170515, এক্সপায়ার ডেট:20170515 ইনস্ট লাইফ ফেজ ৪৯ঃ Instrument ID : rb1705 , InstrumentName: rb1705, ইস্টিট্রেডিং ১ঃ১ লং মার্জিন রেসিওঃ ০.০৬ MaxLimitOrderVolume : ৫০০, ম্যাক্স মার্জিনসাইড অ্যালগরিদম ম্যাক্সঃ 48 MaxMarketOrderVolume : ৩০, MinLimitOrderVolume ১, MinMarketOrderVolume :1, OpenDate :20160517, খোলা তারিখ OptionsType : 0, PositionDateType :49, PositionType :50, প্রাইস টিক ১ঃ১ ProductClass :49, ProductID : rb , rb , rb , rb , rb , rb , rb , rb শর্ট মার্জিন রেসিওঃ ০.০৬ StartDelivDate:20170516 স্ট্রাইক প্রাইসঃ ০ UnderlyingInstrID:", UnderlyingMultiple : 0, ভলিউম মাল্টিপল ভলিউম ১০ }

    • অবশেষে, আমরা বালি বাক্সের ভেতরে রোবটকে কাজ করতে দিয়েছি।

      এখানে কমোডিটি ফিউচার এর ধারণা সম্পর্কে কিছু তথ্য দেওয়া হল, ফিউচারের ভিতরে যে কোনটি ক্রয় ওভারহোল্ড কন্ট্রাক্ট বা ক্রয় ওভারহোল্ড কন্ট্রাক্ট বা ক্রয় ওভারহোল্ড কন্ট্রাক্ট উভয়কেই ওপেন হোল্ড বলা হয়।

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

##### 所以在期货市场做买卖就有4个方向:

用 ```SetDirection()``` 函数来 确定操作的方向

- 开多仓:SetDirection("buy") ,传入参数 "buy" 字符串,明确 exchange.Buy() 函数为 开多仓 操作, Buy 函数稍后讲到。

- 开空仓:SetDirection("sell"), 传入参数 "sell" 字符串,明确 exchange.Sell() 函数为 开空仓 操作,Sell 函数稍后讲到。

- 平多仓:SetDirection("closebuy"), 传入参数 "closebuy" 字符串, 明确 exchange.Sell()函数为 平多仓操作。

- 平空仓:SetDirection("closesell"), 传入参数 "closesell" 字符串,明确 exchange.Buy()函数为 平空仓操作。

下个单试试!继续改写 MainLoop 函数,我们让程序在沙盒里面每隔10分钟 交易一次,开多仓平多仓交替进行。
```
var index = 0;
var isFirst = true;
function MainLoop(){
    if(isFirst){
        Log(exchange.GetAccount());
        isFirst = false;
    }
    var ContractInfo = exchange.SetContractType("rb1705");
    if(!ContractInfo){
        return;                                               // 如果设置合约没有成功,即返回函数,再次进入重试。
    }
    var ticker = exchange.GetTicker();
    if(index % 2 === 0){
        exchange.SetDirection("buy");
        exchange.Buy(ticker.Last + 1, 1, ticker); // exchange.Buy 函数有2个必要参数,第一个参数为下单价格,
                                          // 第二个参数为下单数量(希望交易的数量),之后还可以跟一些参数输出在日志信息。 
                                          //ticker.Last + 1 是为了让单子能成交,意思是在最后成交价的基础上多出1块钱。
    }else if(index % 2 === 1){
        exchange.SetDirection("closebuy");
        exchange.Sell(ticker.Last - 1, 1, ticker); // ticker.Last - 1 是为了在最后成交价的基础上减去1元 卖出。
    }
    index++;
    Sleep(1000 * 60 * 10 - 1000);         // 这里暂停10分钟 ,减去的1000 即1秒是 main 函数循环中的1秒。
    Log(exchange.GetAccount());
}
```

![img](/upload/asset/bd6dd2ef0e5db88c70f0585aee3a417c92227d31.png) 

##### 开始的账户信息 和 最后一次开仓 前的账户信息比较,可见不能胡乱开仓平仓。 >_<

এই লেখাটি লেখার আগে, পাঠকদের স্বাগতম আমাকে একটি মন্তব্য লিখতে! পরামর্শ এবং মতামত দিন, যদি আপনি মজা অনুভব করেন তবে এটি আরও প্রোগ্রাম প্রেমী এবং লেনদেন প্রেমী বন্ধুদের সাথে ভাগ করে নিতে পারেন।

https://www.fmz.com/bbs-topic/724

প্রোগ্রামার littleDream মূলত


আরো