जावास्क्रिप्ट के साथ खेलना - एक खरीदार बनाने के लिए एक साथी है जो बिक्री करता है

लेखक:छोटे सपने, बनाया गयाः 2017-03-06 10:41:40, अद्यतन किया गयाः 2017-10-11 10:36:53

पुराने लोगों के साथ जावास्क्रिप्ट के साथ खेलना और एक खरीद-बिक्री करने वाला साथी बनाना।

रेत में पैदा हुए

  • सैंडबॉक्स प्रणाली

    इंटरनेट पर विभिन्न प्रकार की जानकारी सीखने के लिए खोज करते समय कंप्यूटर प्रोग्राम का उपयोग करके वित्तीय प्रतिभूतियों का व्यापार करने के लिए प्रोग्रामेटिक ट्रेडिंग, क्वांटिफाइड ट्रेडिंग के रूप में जाना जाता है। पुराने गणित का स्तर भी महाविद्यालय के स्तर पर है, जबकि सांख्यिकी में केवल कुछ बुनियादी अवधारणाएं हैंः सामान्य वितरण, उम्मीद, सहसंबंध आदि। यह कहने की हिम्मत नहीं है कि खुद को प्रोग्रामेटिक, क्वांटिफाइड सीखने में सबसे अधिक क्वांटिफाइड किया गया है।

    बुजुर्गों को लगता है कि एक उपयोगी सैंडबॉक्स के लिए निम्नलिखित चीजें आवश्यक हैंः

    • 1, अधिकतम वास्तविक समय अनुक्रम का अनुकरण करें, यानी जब सैंडबॉक्स में प्रोग्राम चल रहा हो, तो समय अनुक्रम वास्तविक स्थिति के जितना संभव हो उतना करीब होना चाहिए, टिक स्तर पर आधारित होना चाहिए, ताकि परीक्षण के परिणामों का संदर्भ मूल्य हो। यह संभव है कि सैंडबॉक्स में प्रोग्राम की गति सीमित हो, लेकिन गति भी एक महत्वपूर्ण कारक है, कभी भी मैं एक प्रोग्राम का परीक्षण नहीं कर सकता एक दिन, इसलिए सैंडबॉक्स सिस्टम पर अपेक्षाकृत अधिक आवश्यकताएं हैं।

    • 2, विभिन्न पैरामीटर विकल्प नियंत्रण, जो परीक्षण किए गए कार्यक्रम के पैरामीटर की आवश्यकता नहीं है, लेकिन sandbox प्रणाली के पैरामीटर; उदाहरण के लिएः एक्सचेंज की सेटिंग्स ((फ्यूचर्स? ए शेयर? विदेशी मुद्रा?), परीक्षण में एक्सचेंज के लिए नकली खाता जानकारी, एक्सचेंज की प्रक्रिया शुल्क, संभावित स्लिप दर, समय सीमा नियंत्रण आदि।

    • 3. प्रोग्राम के पैरामीटर को ट्विक करेंः कभी-कभी पुराने लोगों के पास कई बैकअप पैरामीटर होते हैं, यह देखने के लिए कि कौन सा बेहतर है। एक अच्छा सैंडबॉक्स सिस्टम कई पूर्वनिर्धारित पैरामीटर स्वीकार कर सकता है, और फिर खुद को चला सकता है, परिणामों का विश्लेषण कर सकता है और सबसे अच्छा दिखा सकता है।

    • 4. त्रुटि परीक्षणः प्रोग्राम का अनुकरण करने के दौरान अक्सर हवाएं सुचारू होती हैं, हवाएं शांत होती हैं, क्योंकि यह ज्वारीय बेसिन में होती है (कई बड़ी लहरें हो सकती हैं?), जबकि वास्तविकता में अप्रत्याशित गहरे समुद्र, विभिन्न अज्ञात तूफान हर समय दिखाई देते हैं। तो सैंडबॉक्स सिस्टम को ज्वारीय बेसिन में स्वचालित रूप से कुछ बड़ी हवाओं का निर्माण करना पड़ता है, जिससे खराब वातावरण का अधिकतम अनुकरण किया जा सकता है। (यह सभी प्रकार के गलत डेटा, नेटवर्क त्रुटि रिपोर्ट, यहां तक कि तार्किक रूप से असंभव डेटा भी जारी करना है।)

    • 5. चार्ट दिखाता हैः चार्ट विश्लेषण के लिए बहुत सारे उपयोगी डेटा रिकॉर्ड कर सकते हैं, जैसे कि लाभ चार्ट, अंतर मूल्य वक्र आदि।

  • एक sandbox system है, और हम पहले कुछ सरल कोड लिखते हैं जो JS में खेलते हैं।

    • 1। सीटीपी कमोडिटी फ्यूचर्स ऑटोमेशन प्रोग्राम का सामान्य ढांचा पुराने सफेद के लिए उपयोग किया जाता है कि नीचे की परत एक फ़ंक्शन में लिपटे हुए हैexchange.IO("status")यह पहचानने के लिए कि क्या फ्यूचर्स कंपनी के सामने वाले सर्वर से कनेक्ट किया गया है। यहाँ प्रश्न चलाएंः फ्यूचर्स कंपनी के सामने वाले सर्वर? बुजुर्ग ने कहाः कमोडिटी वायदा CTP प्रोटोकॉल का उपयोग करता है, कनेक्शन संरचना हैः वायदा कंपनी के ग्राहक के टर्मिनल प्रोग्राम ((पुराना सफेद कोड) ------> वायदा कंपनी के अग्रिम सर्वर-------> एक्सचेंज सर्वर मुख्य मुद्दे पर लौटते हुए, कमोडिटी वायदा बाजार बंद होने के समय, वायदा कंपनी के अग्रिम सर्वर से कनेक्ट नहीं हो सकता है (एक निश्चित समय के बाद वायदा कंपनी का अग्रिम सर्वर बंद हो जाता है) । या कुछ परिस्थितियों के कारण सीटीपी का कनेक्शन टूट जाता है। इन स्थितियों से निपटने के लिए, पुराने और सफेद प्रक्रियाओं को कनेक्शन की स्थिति का निर्धारण करने के लिए कुछ समय का अंतराल लेना पड़ता है, कुछ ऑपरेशन करने से बचने के लिए, जो समस्याओं का कारण बनता है।

      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

      आप चित्र में देख सकते हैं कि हमने 100W के लिए एक रीसेट खाता सेट किया है।

      img

    • कैसे प्रोग्राम में अपने खाते के बारे में जानकारी प्राप्त करने के लिए, एक फ़ंक्शन के रूप में नीचे की परत में लिपटे के रूप मेंexchange.GetAccount()इस सरल वाक्य पर एक नज़र डालें।

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

      केवल इस कस्टम मेंMainLoop()फ़ंक्शन में लिखेंexchange.GetAccount();

      परिणाम कुछ भी नहीं दिखाता है. ओ! सही फ़ंक्शन चलाया गया है, लेकिन लॉग प्रिंट फ़ंक्शन को नहीं बुलाया गया है. यह भी एक अच्छी तरह से पैक किया गया लॉग आउटपुट फ़ंक्शन है।Log(), फ़ंक्शन पैरामीटर विभिन्न प्रकार के चरों को आउटपुट करने के लिए है, कॉमा अंतराल का उपयोग करके कई को पारित किया जा सकता है. ((कोड लिखने के दौरान स्ट्रिंग के अलावा चीनी इनपुट विधि में इनपुट किया जा सकता है, बाकी कोड लिखने के दौरान अंग्रेजी में स्विच करना याद रखें, बूढ़े आदमी इस गड्ढे को छोड़ देते हैं, बहुत समय बर्बाद करते हैं जब तक कि वे चीनी इनपुट विधि में संकेत नहीं लिखते हैं।)

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

      img

      MainLoop लगातार चलाया जाता है (एक सेकंड के अंतराल पर सभी नींद फ़ंक्शन पर निर्भर करता है) इसलिए रीसेट सिस्टम लॉग का पूरा आउटपुट एनालॉग खाता जानकारी है।
    • इसके बाद रेत के डिब्बे में कुछ अन्य डेटा का अनुरोध करें, पुराने लोग पहले अक्सर शिकंजा स्टील पर ध्यान केंद्रित करते थे, क्योंकि वे घर की कीमतों पर भी ध्यान केंद्रित करते थे। यह सकारात्मक है, क्योंकि कार्यक्रमों को लोगों के लिए खरीद-बिक्री करने के लिए बाजार की स्थिति अनिवार्य है।

      सबसे पहले, आपको यह जानना होगा कि किस प्रकार के बाजार को समझना है, उदाहरण के लिए, एल्यूमीनियम नालीदार स्टील 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},...] Time: टाइमर, मिलीसेकंड का समय। ओपनः ओपन प्राइस, हाईः हाईस्ट प्राइस, लोः लोस्ट प्राइस, क्लोजः क्लोज प्राइस, वॉल्यूमः लेनदेन की मात्रा

      मुद्रित टिकर चर का मान (ऑब्जेक्ट): {High:3090.5,Low:3088.5,Sell:3090.5,Buy:3088.5,Last:3089.5,Volume:100} High: वर्तमान उच्चतम मूल्य 、 Low: वर्तमान निम्नतम मूल्य 、 Sell: एक बिक्री मूल्य 、 Buy: एक खरीद मूल्य 、 Last: अंतिम लेनदेन मूल्य, Volume: हालिया लेनदेन

      rb1705 अनुबंध के बारे में जानकारीः ((सीटीपी प्रोटोकॉल में फ़ील्ड के बारे में विवरण देखें।) { क्लोन संयोजन प्रकार क्लोनः 0, CreateDate:20160414 पर क्लिक करें DeliveryMonth: 5 DeliveryYear :1705, EndDelivDate:20170522, ExchangeID : SHFE , ExchangeInstID : rb1705 ExpireDate:20170515, इंस्टलाइफ फेज ४९, Instrument ID : rb1705 , InstrumentName: rb1705, इस ट्रेडिंग के बारे मेंः Long Margin Ratio : 0.06, MaxLimitOrderVolume :500, MaxMarginSideAlgorithm :48, :48, :48, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, :49, MaxMarketOrderVolume :30, MinLimitOrderVolume :1, MinMarketOrderVolume :1, OpenDate :20160517, OptionsType : 0, PositionDateType :49, PositionType :50, PriceTick : 1 ProductClass :49, ProductID : rb , rb , rb , rb , rb , rb , rb , rb , rb , rb , rb , rb Short Margin Ratio : 0.06, StartDelivDate:20170516 स्ट्राइक प्राइस: 0 UnderlyingInstrID:"", UnderlyingMultiple : 0, VolumeMultiple :10 }

    • और अंत में, हम रोटर्स को रेत के डिब्बे में चलाने के लिए मजबूर करते हैं।

      यहाँ कमोडिटी वायदा की अवधारणा का परिचय दिया गया है, वायदा में चाहे वह खरीदें बहु-हॉज अनुबंध (देखें) या खरीदें खाली स्थिति अनुबंध (बाउंसर अनुबंध) दोनों को खुला स्थिति कहा जाता है, ताकि अंतर किया जा सकेः खरीदें बहु-हॉज अनुबंध को खुला स्थिति कहा जाता है, खरीदें खाली स्थिति अनुबंध को खाली स्थिति कहा जाता है। इसी तरह, समतल (होर्डिंग उन्मूलन दायित्व) रखने वाले बहु-हॉज अनुबंध और समतल रखने वाले खाली स्थिति अनुबंध को समतल कहा जाता है, ताकि अंतर किया जा सकेः समतल बहु-हॉज अनुबंध को अधिक स्थिति कहा जाता है, समतल खाली स्थिति अनुबंध को खाली स्थिति कहा जाता है।

पलायन का अर्थ है कि एक फ्यूचर्स व्यापारी ने फ्यूचर्स कॉन्ट्रैक्ट को खरीदने या बेचने का कार्य किया है, जिसमें वह फ्यूचर्स कॉन्ट्रैक्ट के समान प्रकार के कोड, संख्या और वितरण के महीने के साथ है, लेकिन व्यापार की दिशा में विपरीत है। फ्यूचर्स ट्रेडरों के पास विकल्प होता है कि वे अंतिम ट्रेडिंग दिन के अंत से पहले खरीदे गए फ्यूचर्स कॉन्ट्रैक्ट को बेच देंगे, या बेचे गए फ्यूचर्स कॉन्ट्रैक्ट को वापस खरीद लेंगे, ताकि एक समान राशि का भुगतान किया जा सके। विपरीत दिशा में वायदा व्यापार करने के लिए मूल वायदा अनुबंध को बंद करने के लिए, वायदा व्यापार को समाप्त करने के लिए, समाप्ति पर भौतिक वितरण के लिए दायित्व को समाप्त करना। ``

##### 所以在期货市场做买卖就有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 मूल रूप से


अधिक