Bermain JavaScript dengan orang tua - membuat mitra yang akan melakukan pembelian dan penjualan (Born in a Sandbox)

Penulis:Mimpi kecil, Dibuat: 2017-03-06 10:41:40, Diperbarui: 2017-10-11 10:36:53

Bermain dengan orang tua dan orang tua JavaScript membuat mitra kecil yang akan melakukan pembelian dan penjualan.

Lahir di Kotak Pasir

  • Sistem kotak pasir

    Saat mencari berbagai informasi belajar di internet, menemukan bahwa menggunakan program komputer untuk melakukan perdagangan sekuritas keuangan disebut perdagangan terprogram, perdagangan kuantitatif. Tingkat matematika tua-tua juga pada tingkat sarjana, statistik bahkan hanya memiliki beberapa konsep dasar: distribusi normal, harapan, integrasi, dll. Tidak berani mengatakan diri saya paling rumit dalam belajar pemrograman, pengukuran, dalam proses belajar pemrograman, pengukuran, atau dalam praktek. Sistem kotak pasir sangat diperlukan, ini seperti permainan kotak pasir, di mana ada berbagai sumber yang didefinisikan, " (agak seperti dunia minecraft) ".

    Orang tua merasa bahwa kotak pasir yang berguna membutuhkan hal-hal berikut:

    • 1, maksimal simulasi urutan waktu yang nyata, yaitu ketika menjalankan program di dalam kotak pasir, urutan waktu harus sedekat mungkin dengan situasi nyata, berdasarkan tingkat tik, sehingga hasil pengujian memiliki nilai referensi. Hal ini dapat menyebabkan program berjalan dalam kotak pasir dengan kecepatan terbatas, tetapi kecepatan berjalan juga merupakan faktor yang sangat penting, tidak pernah saya menguji sebuah program selama satu hari, sehingga persyaratan yang lebih tinggi untuk sistem kotak pasir.

    • 2, berbagai parameter pilihan kontrol, yang diperlukan bukan parameter yang diuji program, tetapi parameter dari sistem kotak pasir. Misalnya: pengaturan bursa ((Futures? A saham? Valuta asing?), informasi simulasi rekening bursa dalam pengujian, biaya transaksi bursa, kemungkinan tingkat titik geser, kontrol jangka waktu, dll.

    • 3. Pengaturan parameter program: Kadang-kadang orang tua memiliki banyak parameter cadangan, ingin mencoba untuk melihat mana yang lebih baik. Sistem kotak pasir yang baik dapat menerima banyak parameter preset, dan kemudian berjalan sendiri, menganalisis hasilnya, menunjukkan yang terbaik.

    • 4. pengujian kesalahan: ketika program simulasi berjalan, sering kali berjalan dengan lancar, angin sepoi-sepoi, itu karena berada di dalam keranjang (apakah ada gelombang besar?), sedangkan kenyataannya adalah lautan dalam yang tidak terduga, berbagai badai yang tidak diketahui muncul setiap saat.

    • 5, grafik menunjukkan: grafik dapat mencatat banyak data yang berguna untuk analisis, seperti grafik keuntungan, kurva harga, dll.

  • Kami memiliki sistem kotak pasir di tangan kami, dan kami menulis beberapa kode sederhana dengan JS.

    • 1. Arsitektur umum dari CTP Commodity Futures Automation Fungsi yang digunakan pada lapisan bawah sudah terbungkus.exchange.IO("status")Untuk mengidentifikasi apakah ada koneksi ke server terdepan perusahaan berjangka. Orang tua menjawab: Komoditas berjangka menggunakan protokol CTP, dan struktur koneksi adalah: terminal klien perusahaan berjangka (kode putih tua) ----> server depan perusahaan berjangka -----> server bursa Kembali ke masalah utama, ketika komoditas berjangka tidak dipasarkan, tidak dapat terhubung ke server depan perusahaan berjangka (setelah waktu tertentu dipasarkan, server depan perusahaan berjangka ditutup); atau beberapa situasi menyebabkan CTP terputus koneksi. Untuk mengatasi situasi ini, prosedur yang akrab membutuhkan waktu tertentu untuk menilai status koneksi, menghindari melakukan beberapa operasi tanpa koneksi, 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次数据。
          }
      }
      

      Pergilah ke dalam kotak pasir:

      img img

      Jika Anda melihat gambar di atas, apakah Anda melihat bahwa kita telah mengatur dana untuk akun uji ulang, 100W?

      img

    • Bagaimana cara mendapatkan data informasi akun Anda dalam program, karena lapisan bawahnya dibungkus menjadi fungsiexchange.GetAccount()Mari kita coba kalimat sederhana ini.

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

      Hanya dalam hal ini.MainLoop()Tuliskan fungsiexchange.GetAccount();

      Hasilnya tidak menunjukkan apa-apa. Fungsi yang benar berjalan, tetapi tidak memanggil fungsi cetak log. Ini juga fungsi output log yang terbungkus.Log(), parameter fungsi adalah untuk menghasilkan berbagai variabel, dapat menyampaikan beberapa interval koma.( Ketika menulis kode selain dalam string dapat dimasukkan dengan cara input bahasa Cina, sisa waktu menulis kode harus ingat untuk beralih bahasa Inggris, orang tua akan kehilangan lubang ini, membuang banyak waktu untuk menemukan bahwa simbol yang ditulis dengan cara input bahasa Cina.

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

      img

      MainLoop terus-menerus dijalankan (interval 1 detik sepenuhnya bergantung pada fungsi Sleep) sehingga semua output log sistem retargeting adalah informasi akun simulasi.
    • Kemudian meminta data lain di kotak pasir, lama-kelamaan, orang tua sering memperhatikan baja berulir, karena pada saat yang sama juga memperhatikan harga rumah. Kata-kata positif, karena untuk membuat program untuk membeli dan menjual orang, maka pasar tidak bisa dipungkiri.

      Pertama-tama Anda perlu tahu pasar jenis apa yang ingin Anda ketahui, misalnya tentang kontrak baja tahan karat 1705. Nah, kode kontrak di bursa: rb1705 (pengetahuan masa depan saya juga Baidu sendiri), gunakan saja.exchange.SetContractType("rb1705")Selain itu saya ingin tahu apakah saat ini kontrak rb1705 ini dapat dipanggil (dalam sistem retargeting adalah titik waktu saat berjalan).exchange.GetTicker()Kemudian saya ingin tahu statistik siklus harga sejarah kontrak tersebut.exchange.GetRecords()MengubahnyaMainLoopFungsi yang harus 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

      Mengatur sebagian dari records Nilai variabel (tipe array): [Sunting] {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: Timestamp, milisekund waktu. Open: harga bukaan, High: harga tertinggi, Low: harga terendah, Close: harga tutup, Volume: volume transaksi

      Nilai variabel ticker yang dicetak (obyek): {\cH00FFFF}{\cH00FFFF}{\cH00FFFF}{\cH00FFFF}{\cH00FFFF}Selengkapnya High: harga tertinggi saat ini Low: harga terendah saat ini Sell: jual satu harga Beli satu harga Last: harga transaksi terakhir Volume: transaksi terbaru

      Informasi tentang rb1705 kontrak: ((Anda dapat melihat deskripsi tentang bidang dalam protokol CTP.)) Aku tidak tahu. Silikon CombinationType Silikon: 0, Anda dapat mengklik tombol CreateDate: 20160414. Anda bisa mendapatkannya di situs kami. Di sini, Anda akan menemukan beberapa tips yang dapat Anda gunakan untuk mengatasi masalah ini. Anda bisa mendapatkan informasi lebih lanjut di sini. Di sini Anda akan menemukan beberapa tips yang dapat Anda gunakan. Di sini, Anda akan menemukan beberapa tips yang dapat Anda gunakan untuk meminimalisir risiko. Anda dapat mengklik pada halaman ini untuk melihat informasi lebih lanjut. @InstLifePhase @:49, Ini adalah salah satu yang paling populer di Indonesia. Ini adalah salah satu alat yang paling populer di Indonesia. Anda bisa mendapatkan informasi lebih lanjut di sini. "Selama ini, kami telah melakukan beberapa hal yang sangat penting. Anda tidak perlu khawatir tentang hal itu. Anda dapat melihat beberapa gambar di bawah ini. Anda tidak akan pernah bisa mendapatkannya. Anda dapat mengklik tombol "MinLimitOrderVolume". Anda dapat memilih untuk memilih salah satu dari dua pilihan ini. "Mengharukan" adalah kata yang ditujukan untuk orang-orang yang ingin tahu lebih banyak tentang dunia maya. OptionsType: 0 PositionDateType :49, Anda dapat melihat gambar di bawah ini. Anda bisa melihat gambar di bawah ini. Anda tidak akan pernah tahu apa yang Anda lakukan. Anda tidak perlu khawatir tentang produk Anda, tetapi Anda harus berhati-hati. Di bawah ini adalah daftar perusahaan yang memiliki saham di Indonesia. Anda dapat mengklik StartDelivDate pada: 20170516, "Saya tidak akan membiarkan Anda pergi", kata dia. Anda dapat mengklik tombol "UnderlyingInstrID":", "Menghancurkan" (UnderlyingMultiple) VolumeMultiple: 10 Aku tidak tahu.

    • Akhirnya, kita membuat robot bergerak di dalam kotak pasir.

      Di sini kita akan membahas tentang konsep komoditas berjangka, di mana kontrak berjangka baik untuk membeli kontrak berjangka besar (kontrak lihat) maupun kontrak berjangka kosong (kontrak turun) disebut open position, untuk membedakan: kontrak berjangka besar disebut open position, kontrak berjangka kosong disebut open position.

Pelancongan adalah tindakan pedagang futures membeli atau menjual kontrak futures dengan kode jenis, jumlah, dan bulan pengiriman yang sama dengan kontrak futures yang mereka pegang, tetapi dengan arah perdagangan yang berlawanan. Pedagang berjangka memilih untuk menjual kontrak berjangka yang dibeli atau membeli kembali kontrak berjangka yang dijual sebelum berakhirnya hari perdagangan terakhir, dengan tujuan untuk membeli dengan jumlah yang sama. Perdagangan berjangka di arah yang berlawanan untuk melumpuhkan kontrak berjangka asli, sehingga mengakhiri perdagangan berjangka, melepaskan kewajiban untuk melakukan pengiriman fisik pada saat jatuh tempo. ``

##### 所以在期货市场做买卖就有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, silakan kirimkan saran dan saran, dan jika Anda merasa menyenangkan, Anda dapat membagikannya kepada teman-teman yang lebih menyukai program dan perdagangan.

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

Pemrogram LittleDream


Lebih banyak