Bermain JavaScript dengan orang tua -- mencipta rakan kongsi yang akan membeli dan menjual

Penulis:Mimpi kecil, Dicipta: 2017-03-06 10:41:40, Dikemas kini: 2017-10-11 10:36:53

Bermain dengan orang tua dan orang tua dengan JavaScript untuk membuat rakan kongsi yang akan membeli dan menjual.

Dilahirkan dalam kotak pasir

  • Sistem kotak pasir

    Apabila mencari pelbagai bahan pembelajaran dalam talian, saya mendapati bahawa perdagangan sekuriti kewangan yang dilakukan dengan program komputer dipanggil perdagangan berprogram, perdagangan kuantitatif. Tingkat matematik yang tua juga pada peringkat sarjana, statistik hanya mempunyai beberapa konsep asas: pembahagian normal, jangkaan, integrasi, dan sebagainya. Tidak berani mengatakan diri saya paling banyak dikuantifikasi adalah dalam pembelajaran pengaturcaraan, pengukuran kuantitatif. Dalam proses pembelajaran, pengaturcaraan, pengukuran kuantitatif, atau dalam amalan.

    Menurutnya, kotak pasir yang berguna memerlukan beberapa perkara berikut:

    • 1. Simulasi sekuen masa yang sebenar, iaitu ketika menjalankan program dalam kotak pasir, sekuen masa harus sedekat mungkin dengan keadaan sebenar, berdasarkan tahap tik, sehingga hasil ujian mempunyai nilai rujukan. Ini mungkin menyebabkan program berjalan dalam kotak pasir dengan kelajuan yang terhad, tetapi kelajuan berjalan juga merupakan faktor yang penting, tidak boleh saya menguji satu program selama sehari, sehingga tuntutan yang lebih tinggi terhadap sistem kotak pasir.

    • 2, pelbagai parameter pilihan kawalan, yang diperlukan bukan parameter program yang diuji, tetapi parameter sistem kotak pasir. Contohnya: penyesuaian pertukaran (untuk niaga hadapan? Saham A? Pertukaran asing?), maklumat akaun simulasi bursa yang diuji, bayaran prosedur bursa, kadar titik glide yang mungkin berlaku, kawalan jangka masa, dan sebagainya.

    • 3. penyesuaian parameter program: kadang-kadang orang tua mempunyai banyak parameter sandaran, ingin mencuba mana yang lebih baik. Sistem sandaran yang baik boleh menerima banyak parameter praset, dan kemudian berjalan sendiri, menganalisis hasilnya, menunjukkan yang terbaik.

    • 4. ujian kesalahan: program simulasi sering berjalan dengan lancar, angin sepoi-sepoi, kerana berada di dalam cekungan (apakah gelombang besar yang boleh terjadi?), tetapi sebenarnya lautan dalam yang tidak dijangka, pelbagai ribut yang tidak diketahui akan muncul setiap saat.

    • 5, Jadual menunjukkan: Jadual boleh merakam banyak data yang berguna untuk analisis, seperti carta pendapatan, kurva perbezaan harga, dan lain-lain.

  • Kami mempunyai sistem kotak pasir di tangan kami, dan kami menulis beberapa kod mudah dalam JS.

    • 1. Bentuk umum program automatik niaga hadapan CTP Layer bawah yang digunakan oleh orang tua telah membungkus fungsiexchange.IO("status")Untuk mengenal pasti sama ada ia disambungkan ke pelayan depan syarikat niaga hadapan. Orang tua menjawab: Komoditi niaga hadapan menggunakan protokol CTP, dan struktur sambungan adalah: program terminal pelanggan syarikat niaga hadapan ((kod putih tua) ------> pelayan depan syarikat niaga hadapan-------> pelayan bursa Kembali kepada isu utama, ketika komoditi niaga hadapan tidak beroperasi, adalah tidak dapat menyambung ke pelayan depan syarikat niaga hadapan (selapas waktu tertentu, pelayan depan syarikat niaga hadapan ditutup); atau beberapa keadaan yang menyebabkan CTP terputus sambungan. Untuk menangani keadaan ini, prosedur yang biasa diperlukan untuk menilai status sambungan dalam tempoh masa tertentu, mengelakkan melakukan beberapa operasi tanpa sambungan yang menyebabkan masalah.

      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次数据。
          }
      }
      

      Cuba lari ke dalam kotak pasir:

      img img

      Jika anda melihat gambar, apakah anda tahu jumlah wang yang kita setup untuk akaun re-test, 100W?

      img

    • Bagaimana untuk mendapatkan data maklumat akaun anda dalam program ini, kerana lapisan bawah dibungkus menjadi satu fungsiexchange.GetAccount()Mari cuba ayat mudah ini.

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

      Hanya dalam bentuk ini.MainLoop()Menulis dalam fungsiexchange.GetAccount();

      Hasilnya tidak menunjukkan apa-apa. ! fungsi yang betul dijalankan, tetapi tidak memanggil fungsi cetak log.Log(), parameter fungsi adalah untuk mengeluarkan pelbagai pembolehubah, yang boleh dihantar beberapa dengan selang koma. Jika anda menulis kod, selain daripada senar yang boleh dimasukkan dengan cara input Cina, yang lain ketika menulis kod mesti ingat untuk menukar bahasa Inggeris, orang tua akan membuang lubang ini, membuang banyak masa untuk mendapati bahawa simbol yang ditulis dengan cara input Cina.

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

      img

      MainLoop dijalankan secara berterusan (selepas 1 saat sepenuhnya bergantung pada fungsi Sleep) jadi log sistem pengembalian semua output adalah maklumat akaun analog.
    • Kemudian meminta beberapa data lain di dalam kotak pasir, lama White sebelum ini sering memberi tumpuan kepada baja berulir ini barangan masa hadapan jenis, kerana pada masa yang sama juga memberi tumpuan kepada harga rumah.

      Pertama sekali anda perlu tahu pasaran jenis yang anda mahu ketahui, contohnya mengenai kontrak baja nilon 1705. Ya, kod kontrak di bursa: rb1705 (pengetahuan masa hadapan saya juga Baidu sendiri), gunakanexchange.SetContractType("rb1705")Selain itu, saya ingin tahu apa yang berlaku pada kontrak rb1705 pada masa ini.exchange.GetTicker()Kemudian saya ingin melihat statistik kitaran harga sejarah kontrak ini. Fungsi ini ialah:exchange.GetRecords()PergilahMainLoopFungsi ini boleh diubah:

      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

      Memilih sebahagian daripada rekod Nilai pembolehubah (tipe matriks): [Menyambung] {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},... Tempoh: Tanda masa, masa pada skala milidetik. Open: harga bukaan, High: harga tertinggi, Low: harga terendah, Close: harga penutupan, Volume: jumlah transaksi

      Nilai bagi pembolehubah ticker yang dicetak (objek): {COLOR="#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff High: Harga Tertinggi Kini 、 Low: Harga Terendah Kini 、 Sell: Jual Satu Harga 、 Buy: Beli Satu Harga 、 Last: Harga Transaksi Terakhir, Volume: Transaksi Terbaru

      Maklumat mengenai kontrak rb1705: ((Anda boleh melihat penerangan bidang dalam protokol CTP.)) ♪ Cakera CombinationType Cakera: 0, CreateDate:20160414 Penghantaran Bulan: 5, Penghantaran tahun: 1705 EndDelivDate:20170522 ExchangeID : SHFE Ia mempunyai ciri-ciri yang berbeza. ExpireDate:20170515 InstLifePhase:49, Instrument ID: rb1705, Peranti: Rb1705 Yang IsTrading berkata: Rasio Margin Panjang: 0.06, Perintah Maksimum LimitOrderVolume Perintah: 500 MaxMarginSideAlgorithm:48 Perintah Volume MaxMarket Perintah Volume: 30, Perintah MinLimitOrderVolume Perintah 1: MinMarketOrderVolume : 1 OpenDate:20160517, Sunting OptionsType : 0, PositionDateType :49, PositionType :50, Harga Tik Tok: 1 ProductClass:49, Tambahan pula, ia juga mempunyai ciri-ciri yang berbeza. Rasio Margin Singkat: 0.06, StartDelivDate:20170516 StrikePrice: 0, UnderlyingInstrID:"", Yang UnderlyingMultiple Yang: 0, VolumeMultiple: 10 {C:$0000FF}

    • Akhirnya, kita letakkan robot di dalam kotak pasir.

      Di sini kita akan membentangkan sedikit konsep niaga hadapan komoditi, dalam niaga hadapan sama ada kontrak membeli banyak kedudukan (kontrak lihat) atau kontrak membeli kosong kedudukan (kontrak turun kedudukan) disebut buka kedudukan, untuk membezakan: kontrak membeli banyak kedudukan dipanggil buka kedudukan, kontrak membeli kosong kedudukan dipanggil buka kedudukan. Begitu juga kontrak memegang banyak kedudukan dan kontrak memegang kosong kedudukan yang disebut rata, untuk membezakan: kontrak memegang banyak kedudukan dipanggil kosong kedudukan, kontrak memegang kosong kedudukan dipanggil rata.

Pelancongan adalah tindakan pedagang masa hadapan membeli atau menjual kontrak masa hadapan yang mempunyai kod, kuantiti dan bulan yang sama dengan kontrak masa depan yang mereka pegang tetapi arah dagangan bertentangan, dan meletakkan kedudukan. Peniaga niaga hadapan mempunyai pilihan untuk menjual kontrak niaga hadapan yang dibeli sebelum akhir hari dagangan terakhir, atau membeli semula kontrak niaga hadapan yang dijual, dengan tujuan untuk mendapatkan jumlah yang sama. Dagangan niaga hadapan yang berlawanan arah untuk melupuskan kontrak niaga hadapan asal, dengan itu mengakhiri dagangan niaga hadapan, membebaskan kewajipan untuk melakukan penyerahan fizikal apabila tamat tempoh. ``

##### 所以在期货市场做买卖就有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) 

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

Sebelum menulis ini, selamat datang pembaca untuk meninggalkan saya mesej! untuk membuat cadangan dan komen, jika anda merasa seronok boleh berkongsi kepada rakan-rakan yang lebih suka program yang suka perdagangan.

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

Pengaturcara LittleDream Asli


Lebih lanjut