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

Penulis:Mimpi kecil, Dicipta: 2017-03-13 12:53:50, Dikemas kini: 2017-10-11 10:37:32

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

Satu tutorial untuk menulis bot kuantitatif menggunakan JS:https://www.fmz.com/bbs-topic/705(Selama Mark)
  • 1, Dasar-dasar data K-line, Masalah penggunaan data ini dalam transaksi kuantitatif.

    • Apa itu data K-Line:

      Jadual K mempunyai asal-usul pada zaman pemerintahan Degawa di Jepun, digunakan oleh pedagang pasaran beras Jepun untuk merakam pergerakan pasaran beras dan turun naik harga, kemudian diperkenalkan ke pasaran saham dan pasaran niaga hadapan dengan cara penandaannya yang unik. Kini, analisis grafik ini sangat popular di negara kita dan seluruh Asia Tenggara. Oleh kerana bentuk grafik yang digambar dengan cara ini menyerupai kerucut, ditambah dengan titik hitam putih yang berwarna hitam, maka ia juga dipanggil carta garis matahari. (Tanya daripada Baidoa)

      Gambar tidak menjelaskan, mari kita lihat struktur data K-line yang ditakrifkan menggunakan bahasa JS:

      {
          Time    :   1487034000000, // 一个时间戳, 精确到毫秒,与Javascript的 new Date().getTime() 得到的结果格式一样
          Open    :   3425,          // 开盘价
          High    :   3446,          // 最高价
          Low     :   3423,          // 最低价
          Close   :   3438,          // 收盘价
          Volume  :   177657.99,     // 交易量
      }
      

      Mari kita lihat data yang diperoleh dengan memanggil fungsi GetRecords: (Ingat untuk memanggil exchange.SetContractType terlebih dahulu ((rb1705); jelas jenis kontrak yang akan dioperasikan)

      [
          {"Time":1487034000000,"Open":3425,"High":3446,"Low":3423,"Close":3438,"Volume":177657.9999999999},
          {"Time":1487035800000,"Open":3438,"High":3448,"Low":3382,"Close":3385,"Volume":494882},
          {"Time":1487037600000,"Open":3385,"High":3398,"Low":3383,"Close":3394,"Volume":83656.00000000015}
      ]
      

      Data garis K yang dapat dilihat adalah satu susunan objek, dengan setiap objek adalah Bar Bar, yang mengandungi harga tertinggi, harga terendah, harga buka (iaitu harga pada permulaan garis K), harga penutupan (iaitu harga pada akhir garis K), dan jumlah dagangan (iaitu jumlah dagangan dalam kitaran K); dan kitaran ini adalah kitaran K. Sebagai contoh, bagaimana data dalam matriks di atas menentukan berapa besar kitaran K? Ia boleh dikira dengan dua bar senar masa: 1487035800000 - 1487034000000 Hasilnya ialah: 1800000, unit ini adalah milidetik, jadi bertukar: 1800000 / 1000 / 60 = 30 (menit), kitaran K ini adalah 30 minit.

      Persoalan pertama yang mudah timbul ialah: Apabila menggunakan data baris K, panjang aritmatika diabaikan. Ini menyebabkan lebihan akses aritmatika (BUG seperti ini biasa berlaku ketika menulis program C sebelumnya). Oleh itu, kita perlu membuat penilaian terhadapnya sebelum menggunakan baris K. Contohnya, untuk mendapatkan garis K: exchange.SetContractType ((rb1705); // Tetapan pertukaran untuk kontrak 1705 keluli berulir. var records = exchange.GetRecords ((); // Dapatkan data kitaran garis K lalai kontrak keluli skru rb1705. Data K-bar yang boleh diperoleh bergantung kepada API pertukaran. Oleh itu, jika lebih banyak K-bar diperlukan pada mulanya, program mesti dikumpulkan untuk sementara waktu. Dan dalam program untuk meningkatkan penilaian, sama ada cukup dikumpulkan, boleh ditulis seperti ini:

      if(records.length < n){    // n 就是我们限定的 n线数量。
          return;                // 当前函数返回。
      }
      

      Masalah kedua yang mudah timbul ialah: Data pada bar terakhir baris K, selain sifat Time, sifat Open, sifat lain boleh berubah, dan sifat Close berubah dalam masa nyata. Pemula akan mengalami banyak kekeliruan apabila menangani garis K kerana tidak memahami perkara ini. Contohnya, dalam bab sebelumnya, mengenai persimpangan garis rata. Gunakan bar pertama atau bar kedua.

      Soalan ketiga: Jangka masa pada garis K adalah masa permulaan, jangka masa adalah satu milisegund, nilai jangka masa adalah 0. Jangka masa yang diwakili adalah 1 Januari 1970 (untuk menentukan zon masa semasa menulis program tertentu). boleh menggunakan ayat berikut untukSekolahAtau cuba menggunakan BotVS Sandbox System:

      var arr = new Date(0);
      

      Dilihat sebagai:

      Thu Jan 01 1970 08:00:00 GMT+0800 (CST) // ditunjukkan sebagai zon waktu timur lapan Nilai ini adalah daripada tahun 1970 sendiri ditambah kepada sekarang (tambah 1000 setiap 1 saat, kerana 1 saat adalah 1000 ms), jadi nilai ini sudah agak besar. Berikut adalah tip kecil: kerana timestamp adalah unik untuk setiap Bar dalam K-line yang menentukan kitaran K-line, apabila timestamp berubah, anda boleh memastikan bahawa anda menerima data K-line terkini. Ini juga berguna dalam memproses data K-line yang sebenarnya.

  • 2, butiran panggilan penunjuk, soalan yang kerap dialami, tempoh pemenuhan, nilai pulangan, parameter

    Apabila menulis strategi pengaturcaraan atau kuantitatif, banyak fungsi penunjuk juga digunakan. Perpustakaan penunjuk yang lebih berguna mempunyai perpustakaan talib, yang mempunyai pelbagai versi, kami menggunakan versi JS di sini.

    Walaupun terdapat banyak kesalahan yang berlaku ketika pertama kali menggunakan fungsi dalam perpustakaan penunjuk, orang tua juga mengalami banyak kesilapan:

    • Pertama, kitaran parameter ((parameter indikator, berbeza dengan kitaran K, berapa kitaran K, berapa kitaran K yang dikira, contohnya 30 minit K dikira adalah 30 minit kitaran MACD, parameter untuk kitaran parameter) ditetapkan terlalu besar, panjang data K kurang: Sebagai contoh, MACD menggambarkan:

      MACD(Records[Close],Fast Period = 12,Slow Period = 26,Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]
      

      Jika tempoh parameter ditetapkan pada 12,26,9 semasa digunakan, kita masukkan rekod data K baris yang digunakan untuk mengira penunjuk, kod menulis seperti ini:

      var macd = talib.MACD(records, 12, 26, 9);
      

      Jika rekod yang dihantar pada masa ini terlalu kecil; ini adalah perangkaannya:

      [
        [null,null,null,null,null,null,null,null,null,null,null,null,null],
        [null,null,null,null,null,null,null,null,null,null,null,null,null],
        [null,null,null,null,null,null,null,null,null,null,null,null,null]
      ]
      

      Ini disebabkan oleh kekurangan data K-line, yang menunjukkan bahawa indikator yang dikira akan menyebabkan BUG jika digunakan, jadi kami menambah syarat sempadan sebelum program:

      while(!records || records.length < 50){
          records = exchange.GetRecords();
          Sleep(1000);
      }
      

      Untuk melompat keluar daripada gelung sehingga mendapat 50 tali K yang cukup, lakukan seperti berikut:img

      Pembaca yang berhati-hati dapat melihat mengapa data yang dikira oleh indikator ini adalah satu susunan dua dimensi (iaitu setiap elemen dalam susunan adalah susunan yang lain), kerana indikator MACD dikira bukan satu baris, tetapi tiga baris: dif, dea, macd barisan kuantiti. Oleh itu, nilai pulangan setiap indikator mungkin berbeza, atau perlu melihat deskripsi indikator secara khusus.

      [
        [null,null,null,null,null,null,null,null,数据...],
        [null,null,null,null,null,null,null,null,数据...],
        [null,null,null,null,null,null,null,null,数据...]
      ]
      

      Dalam beberapa kes, terdapat BUG kerana tidak memperhatikan struktur pulangan penunjuk.

    • Kedua, garis purata yang digunakan untuk mengira fungsi penunjuk berbeza atau algoritma penunjuk yang berbeza menghasilkan hasil yang berbeza.

      STOCH RSI adalah satu yang lebih ketara, yang menggambarkan sebagai berikut:

      STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]
      

      Nilai yang dikira ini jelas berbeza dengan algoritma lain, yang telah diberikan kod algoritma saya sendiri dalam bab pertama siri ini. Sebabnya mungkin disebabkan oleh sistem rata-rata yang digunakan yang tidak konsisten, beberapa perpustakaan algoritma terbiasa menggunakan MA, yang lain terbiasa menggunakan EMA. Sebahagian penunjuk dikira berulang setiap hari, jika jumlah data K yang diberikan berbeza, mungkin terdapat perbezaan dalam nilai yang dikira.

  • 3. API boleh diproses dengan salah

    • Cannot read property length of null Bug ini adalah yang paling kerap berlaku, tidak ada yang.

      Ini kerana API kadang-kadang mengalami kesilapan atau tidak mendapatkan data kerana pelbagai sebab. Apabila beberapa API mendapatkan data adalah nilai null. Data ini biasanya struktur aritmatika, dan sering memerlukan akses ke panjang aritmatika.

      Semua panggilan API memerlukan pengendalian ralat, dan kadang-kadang juga perlu untuk memeriksa sama ada data adalah normal (kadang-kadang data yang luar biasa akan muncul). Program kami hanya dapat menjamin ketepatan dalam kodnya sendiri, tetapi untuk maklumat data yang berjalan di rangkaian tidak dapat menjamin 100% ketepatan (apa yang tidak dapat dielakkan), jadi data yang diperoleh mesti diproses dengan ralat, menapis semua data yang luar biasa.

      Oleh kerana tidak ada debugging langkah tunggal, tidak ada debugging titik putus, tidak ada pemantauan nilai pembolehubah, dan sebagainya ~ Cara saya untuk melakukan debug adalah dengan menggunakan log yang paling mudah. Untuk penggunaan log yang munasabah dalam proses program untuk mengeluarkan maklumat teks, log output program analisis. Mungkin anda boleh memahami proses operasi program, atau anda boleh menggabungkan try, catch, throw JS untuk menangani bug, tetapi cadangan saya adalah untuk tidak menggunakannya sehingga anda perlu menggunakan capture yang luar biasa. Untuk DEBUG, menggunakan Log Log yang paling primitif adalah pengalaman yang sangat berkesan dari segi membangunkan keupayaan DEBUG.

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

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

Pengaturcara LittleDream Asli


Lebih lanjut