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

Penulis:Mimpi kecil, Dibuat: 2017-03-13 12:53:50, Diperbarui: 2017-10-11 10:37:32

Bermain dengan orang tua dan orang tua JavaScript untuk menciptakan mitra yang akan melakukan pembelian dan penjualan.

Sebuah tutorial untuk menulis robot kuantitatif menggunakan JS:https://www.fmz.com/bbs-topic/705(Mulai dengan Mark)
  • 1, Pengetahuan dasar tentang data K-line, Masalah penggunaan data ini dalam transaksi kuantitatif.

    • Apa itu data K-line:

      K-line chart berasal dari zaman pemerintahan Deokawa di Jepang, dan digunakan oleh pedagang pasar beras Jepang untuk mencatat pergerakan pasar beras dan harga, kemudian diperkenalkan ke pasar saham dan pasar berjangka karena cara penandaannya yang unik. Saat ini, analisis grafik ini sangat populer di negara kita dan di seluruh Asia Tenggara. Karena bentuk grafik yang digambar dengan metode ini mirip dengan kerucut, ditambah kerucut hitam dan putih, maka juga disebut grafik garis matahari. (Konsultasi dari Baidu)

      Gambar-gambar tertentu tidak menjelaskan, mari kita lihat struktur data dari K-line yang didefinisikan 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 terlihat adalah sebuah array objek, masing-masing objek adalah sebuah Bar garis K, yang berisi harga tertinggi, harga terendah, harga buka (yang berarti harga pada saat garis K dimulai), harga tutup (yang berarti harga pada saat garis K berakhir), transaksi (yang berarti transaksi dalam siklus); dan siklus ini adalah siklus garis K. Bagaimana data dalam array di atas dapat menentukan berapa panjang garis K yang memiliki siklus? Anda dapat menghitung dengan dua batang waktu yang berbeda: 1487035800000 - 1487034000000 Hasilnya: 1800000, satuan nilai ini adalah milidetik, jadi perhitungannya: 1800000 / 1000 / 60 = 30 (menit), siklus garis K ini adalah 30 menit.

      Saya tidak tahu apa yang akan terjadi. Dengan menggunakan data K-line, panjang array diabaikan. Hal ini menyebabkan overload akses array (BUG seperti ini sering terjadi ketika menulis program C sebelumnya). Jadi kita perlu membuat penilaian terhadapnya sebelum menggunakan K-line. Seperti mendapatkan K-line: exchange.SetContractType ((rb1705); // Switch setting untuk kontrak 1705 baja bergerigi. var records = exchange.GetRecords ((); // Dapatkan data siklus garis K default rb1705 dari kontrak baja bolong. Data K-bar yang dapat diperoleh tergantung pada API bursa. Jadi pada awalnya, jika Anda membutuhkan lebih banyak K-bar, Anda harus membiarkan program mengumpulkan untuk waktu yang lama. Dan untuk meningkatkan penilaian dalam program, apakah cukup dikumpulkan, Anda dapat menuliskan:

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

      "Saya tidak tahu apa yang terjadi", katanya. Data pada bar terakhir baris K, selain sifat Time, Open, dan Close, sifat lainnya dapat berubah secara real time. Para pemula akan mengalami banyak kebingungan ketika menangani garis K karena tidak mengerti hal ini. Misalnya, pada bab sebelumnya, kita berbicara tentang persimpangan garis rata.

      Pertanyaan ketiga: Periode garis K, timestamp adalah saat awal siklus ini, timestamp adalah milisekund, nilai timestamp adalah 0. Waktu yang diwakili adalah 1 Januari 1970 (untuk menentukan zona waktu ketika menulis program tertentu juga perlu dipertimbangkan). Anda bisa menggunakan kalimat ini untuksekolahAtau cobalah di BotVS Sandbox System:

      var arr = new Date(0);
      

      Tampak seperti:

      Thu Jan 01 1970 08:00:00 GMT+0800 (CST) // ditampilkan sebagai zona waktu timur delapan Ini adalah nilai yang ditambahkan dari tahun 1970 sendiri sampai sekarang (tambah 1000 setiap 1 detik, karena 1 detik adalah 1000 millisecond), jadi ini adalah angka yang relatif besar. Berikut adalah triknya: karena timestamp adalah unik untuk setiap Bar pada K-line yang menentukan siklus K-line, Anda dapat memastikan bahwa Anda menerima data K-line terbaru setelah timestamp berubah. Hal ini juga berguna dalam memproses data K-line yang sebenarnya.

  • 2, Perincian panggilan indikator, masalah yang sering dialami Periode pemenuhan, nilai pengembalian, parameter

    Pada saat menulis strategi pemrograman atau kuantifikasi, banyak fungsi indikator juga digunakan. Perpustakaan indikator yang lebih berguna adalah perpustakaan talib, yang memiliki berbagai versi, di sini kita menggunakan versi JS.

    Pada saat pertama kali menggunakan fungsi indeks, banyak kesalahan yang terjadi:

    • Pertama, parameter siklus (parameter indikator, berbeda dari siklus K garis, berapa banyak siklus K garis, berapa banyak siklus K garis yang dihitung indikator, seperti 30 menit K garis dihitung adalah indikator MACD siklus 30 menit, parameter untuk siklus parameter) diatur terlalu besar, K garis data panjang yang tidak cukup: Sebagai contoh, indikator MACD menggambarkan:

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

      Pada saat digunakan jika parameter periode diatur 12,26,9, kita masukkan K-line data records yang digunakan untuk menghitung indikator, kode ini ditulis seperti ini:

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

      Jika panjang data record yang ditransfer saat ini terlalu kecil, ini adalah perhitungan:

      [
        [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]
      ]
      

      Hal ini disebabkan oleh kurangnya data K-line, indikator yang dihitung akan menyebabkan BUG jika digunakan, jadi kami menambahkan kondisi keterbatasan sebelum program:

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

      Setelah 50 K-string, Anda akan keluar dari loop. Lakukan sebagai berikut:img

      Pembaca yang berhati-hati dapat melihat mengapa data yang dihitung oleh indikator ini adalah suatu array dua dimensi (yaitu, setiap elemen dalam suatu array adalah sebuah array), karena indikator MACD dihitung bukan satu baris, tetapi tiga baris masing-masing: dif, dea, macd kolom kuantitas. Jadi setiap indikator mungkin memiliki nilai kembali yang berbeda, atau lebih spesifiknya perlu melihat deskripsi indikator.

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

      Beberapa kali juga muncul BUG karena tidak memperhatikan struktur pengembalian indikator.

    • Kedua, rata-rata yang digunakan untuk menghitung fungsi indikator berbeda atau algoritma indikator yang berbeda menghasilkan hasil yang berbeda.

      STOCH RSI adalah indikator yang lebih menonjol, yang menggambarkan:

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

      Nilai yang dihitung ini sangat berbeda dari algoritma lain, indikator yang saya berikan kode algoritma saya sendiri di bab pertama dari seri ini. Penyebabnya mungkin disebabkan oleh sistem rata-rata yang digunakan yang tidak konsisten, beberapa algoritma yang digunakan menggunakan MA, beberapa menggunakan EMA. Beberapa indikator dihitung secara berulang setiap hari, dan jika jumlah data K yang diberikan berbeda, mungkin ada perbedaan dalam perhitungan.

  • 3, API yang bisa diproses dengan salah

    • Cannot read property length of null Bug ini adalah salah satu yang paling sering muncul.

      Ini karena API kadang-kadang terjadi kesalahan pengambilan data, atau tidak mendapatkan data karena berbagai alasan. Dalam hal ini, beberapa API pengambilan data mendapatkan nilai nol. Data ini biasanya merupakan struktur array, dan seringkali membutuhkan akses ke panjang array.

      Untuk semua panggilan API perlu pengolahan kesalahan, bahkan kadang-kadang diperlukan untuk memeriksa apakah data normal (kadang-kadang data yang tidak normal muncul). Program kami hanya dapat menjamin keakuratan dalam kode mereka sendiri, tetapi untuk informasi data yang berjalan di jaringan tidak dapat menjamin 100% keakuratan (tidak dapat dihindari), sehingga data yang diperoleh harus diproses dengan salah dan disaring semua data yang tidak normal.

      Karena tidak ada debugging langkah tunggal, tidak ada debugging titik putus, tidak ada pemantauan nilai variabel, dll. Cara DEBUG saya biasanya adalah dengan Logaritma yang paling sederhana! Untuk penggunaan log yang masuk akal dalam proses program, log output analisis. Anda mungkin dapat memahami proses operasi program, atau Anda dapat menggunakan try, catch, throw JS untuk menangani bug, tetapi saran saya adalah untuk tidak menggunakannya selama Anda harus menggunakan capture, tetapi jangan sampai Anda harus menggunakan capture. Untuk DEBUG, menggunakan metode Log yang paling primitif memang merupakan pengalaman yang sangat efektif dari sudut pandang mengembangkan kemampuan DEBUG.

Sebelum menulis ini, selamat datang pembaca untuk meninggalkan saya komentar! memberikan saran dan saran, jika Anda merasa menyenangkan dapat dibagikan kepada lebih banyak teman yang menyukai program yang suka perdagangan

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

Pemrogram LittleDream


Lebih banyak