جاوا اسکرپٹ کے ساتھ کھیلنا - خرید و فروخت کرنے والے ساتھی کی تخلیق

مصنف:چھوٹا سا خواب, تخلیق: 2017-03-06 10:41:40, تازہ کاری: 2017-10-11 10:36:53

اس کے علاوہ ، آپ کو اپنے دوستوں کے ساتھ جاوا اسکرپٹ کھیلنا چاہئے ، اور اس کے ساتھ خرید و فروخت کرنے کے لئے ایک چھوٹا سا ساتھی بنانا چاہئے

سینڈباکس میں پیدا ہوئے

  • ریت خانہ نظام

    انٹرنیٹ پر مختلف معلومات سیکھنے کی تلاش کرتے وقت پتہ چلتا ہے کہ مالیاتی سیکیورٹیز کی تجارت کے لئے کمپیوٹر پروگراموں کا استعمال کرتے ہوئے پروگرامنگ ٹریڈنگ ، کوانٹائزڈ ٹریڈنگ کو کہا جاتا ہے۔ قدیم ریاضی کی سطح بھی جامعہ کی سطح پر ہے ، اعدادوشمار میں صرف کچھ بنیادی تصورات ہیں: باقاعدہ تقسیم ، توقعات ، ہم آہنگی وغیرہ۔ اپنے آپ کو مقداری کرنے کا زیادہ تر دعوی کرنے کی ہمت نہیں کرتا ہے۔ پروگرامنگ ، کوانٹائزنگ سیکھنے ، کوانٹائزنگ کے عمل میں ، یا عملی طور پر۔ سینڈ باکس سسٹم ناگزیر ہے ، یہ ایسا ہی ہے جیسے ایک سینڈ باکس گیم ، جس میں قواعد کی ایک قسم کی وضاحت کی گئی ہے وسائل ، ((کچھ حد تک مائن کرافٹ کی دنیا کی طرح) ؛ تحریری منطقی پروگرام اس سینڈ باکس سسٹم میں مختلف قسم کے ٹیسٹ ، جانچ پڑتال کر سکتے ہیں ، سب سے بنیادی تجارت کے طریقوں ، منطق ، سوچ کی درستگی۔

    اس کے علاوہ ، یہ بھی کہا جاتا ہے کہ ایک اچھا sandbox کے لئے مندرجہ ذیل چیزیں ضروری ہیں:

    • 1 ، زیادہ سے زیادہ حقیقی وقت کی ترتیب کی نقالی کریں ، یعنی جب کسی پروگرام کو سینڈ باکس میں چلایا جاتا ہے تو وقت کی ترتیب کو حقیقی صورتحال سے زیادہ سے زیادہ قریب رکھنا چاہئے ، ٹک کی سطح پر مبنی ہونا چاہئے ، تاکہ ٹیسٹ کے نتائج کا حوالہ دیا جاسکے۔ اس کی وجہ سے پروگرام کو سینڈ باکس میں چلنے کی رفتار محدود ہوسکتی ہے ، لیکن اس کی رفتار بھی ایک اہم عنصر ہے ، میں کبھی بھی کسی پروگرام کی جانچ نہیں کرسکتا۔ ایک دن ، اس طرح سینڈ باکس سسٹم پر نسبتا higher زیادہ تقاضے ہیں۔

    • 2، مختلف پیرامیٹرز کے اختیارات کو کنٹرول کرنا، جس کی ضرورت ٹیسٹ شدہ پروگرام کے پیرامیٹرز کی نہیں بلکہ سینڈ باکس سسٹم کے پیرامیٹرز کی ہے۔ مثال کے طور پر: ایکسچینج کی ترتیبات (فٹورز؟ اے اسٹاک؟ غیر ملکی کرنسی؟) ؛ ٹیسٹ میں آنے والے ایکسچینج کی سملیٹ اکاؤنٹ کی معلومات؛ ایکسچینج کی کارروائی کی فیس، ممکنہ سلائٹ پوائنٹ کی شرح، وقت کی حد کا کنٹرول وغیرہ۔

    • 3، پروگرام کے پیرامیٹرز کو ٹھیک کرنا: کبھی کبھی بوڑھے آدمی کے پاس بہت سارے متبادل پیرامیٹرز ہوتے ہیں ، اور یہ دیکھنے کی کوشش کرتے ہیں کہ کون سا بہتر ہے۔ اچھا سینڈ باکس سسٹم بہت سارے پیش سیٹ پیرامیٹرز کو قبول کرسکتا ہے ، اور پھر خود چل سکتا ہے ، نتائج کا تجزیہ کرتا ہے ، بہترین دکھاتا ہے۔ (کیا یہ کچھ زیادہ ضروری نہیں ہے...)

    • غلطی کی جانچ پڑتال: پروگرام کے مطابق چلنے کے وقت اکثر بادل چلتے ہیں ، ہواؤں کی لہر ہوتی ہے ، اس کی وجہ یہ ہے کہ یہ جھرمٹ کے حوض میں ہے (کتنی بڑی لہر ہوسکتی ہے؟) ، جبکہ حقیقت میں غیر متوقع طور پر گہرے سمندر میں ، ہر طرح کے نامعلوم طوفان ہر وقت سامنے آتے ہیں۔ پھر سینڈ باکس سسٹم کو جھرمٹ کے حوض میں خود بخود کچھ بڑی لہریں پیدا کرنا پڑتی ہیں ، جس سے زیادہ سے زیادہ خراب ماحول کی نقالی ہوتی ہے (یعنی ہر طرح کے غلط اعداد و شمار ، نیٹ ورک کی غلطیوں کی اطلاع دینا ، یہاں تک کہ منطقی طور پر ناممکن اعداد و شمار بھی) ۔

    • 5، چارٹ دکھاتا ہے: چارٹ تجزیہ کے لئے بہت سارے مفید اعداد و شمار کو ریکارڈ کرسکتے ہیں ، جیسے آمدنی کے چارٹ ، قیمتوں میں فرق کے منحنی خطوط وغیرہ۔

  • اس کے علاوہ، ہم نے اس کے بارے میں بات کی ہے کہ ہم اس کے بارے میں کیا سوچتے ہیں؟ ہم نے اس کے بارے میں کیا سوچا؟

    • 1، سی ٹی پی کموڈٹی فیوچر آٹومیشن پروگرام کا عمومی فریم ورک اس کے نیچے کی پرت میں ایک فنکشن ہے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

      اگر آپ اس گراف میں دیکھ سکتے ہیں تو ، ہم نے 100W کے حساب سے رقم کی جانچ پڑتال کی ہے۔

      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} ہائی: موجودہ سب سے زیادہ قیمت 、 لو:: موجودہ سب سے کم قیمت 、 سیل: ایک فروخت کی قیمت 、 خرید: ایک خرید کی قیمت 、 Last: آخری ٹرانزیکشن کی قیمت ، حجم: حالیہ ٹرانزیکشن

      rb1705 معاہدے کے بارے میں معلومات: ((CTP پروٹوکول میں فیلڈ کے بارے میں تفصیلات ملاحظہ کریں۔) { CombinationType : 0، CreateDate:20160414، ڈیلیوری مونتھ: 5 ڈیلیوری سال :1705، EndDelivDate:20170522، ExchangeID : SHFE ExchangeInstID: rb1705، ExpireDate:20170515، InstLifePhase:49، Instrument ID : rb1705 ، InstrumentName: rb1705، اسٹریڈنگ کی طرف سے: 1 لانگ مارجن ریشو : 0.06، MaxLimitOrderVolume :500، MaxMarginSideAlgorithm :48، MaxMarketOrderVolume :30، MinLimitOrderVolume : 1 MinMarketOrderVolume : 1 OpenDate:20160517، OptionsType : 0، PositionDateType :49، PositionType :50, قیمت ٹِک ٹِک: 1 ProductClass:49، ProductID: rb، rb، Short Margin Ratio : 0.06، : 0.06، : 0.06، : 0.06، : 0.06 StartDelivDate :20170516، StrikePrice : 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 اصل


مزید