Penemu buku harian kimia kuantitatif (*) selesai

Penulis:Mimpi kecil, Dibuat: 2016-05-23 23:10:46, Diperbarui: 2019-08-01 10:31:25

Sebelumnya jarang menulis log, sekarang merasa perlu mencatat sesuatu setiap hari, tidak bisa melihat sinar matahari kan! menulis apa? mencatat belajar, bekerja! (sebenarnya hampir semua..) hari ini selain pekerjaan sehari-hari, adalah menulis modul untuk klien, menguji ulang seluruh kode tidak ada masalah, kecuali garis indikator yang aneh di grafik, yang lainnya tampaknya normal, OK, uji simulasi atas.

Pertanyaan 1:

  • 1, garis K grafik kadang-kadang hilang satu BAR, sedang mencari BUG. Masalah ditemukan, dianalisis, tidak menerima data saat diuji dengan piringan analog. Pada saat menerima data, 2 BAR telah berlalu, sehingga data terbaru ditampilkan pada grafik, menyebabkan satu atau lebih jeda di tengahnya berlalu.
  • 2, berjalan untuk sementara waktu (siklus garis K 1 menit) tidak ada masalah, coba lagi (siklus garis K 30 menit) masalah datang, muncul aneh:

TypeError: cannot read property length of null duk_hobject_props.c:2258 WToneAndWTtwo __FIL Kesalahan ini dilaporkan.

Lihatlah di bawah ini kesalahan yang seharusnya muncul dalam fungsi WToneAndWTtwo, membaca nama nilai null yang disebut sifat panjang, yaitu variabel seperti var name = null; dan kemudian saya Setelah membaca name.length, maka seluruh kode akan mencari tempat untuk memanggil length. Untuk mengatasi kesalahan ini, fungsi ini juga ditulis:

function isNullAndLog(arr,strArrName){//空数组报错
     if(!arr){
         Log("arr is:",arr,"name:",strArrName);
         return true;
      }
      return false;
}

Pikirkan, wow! Sekarang semua variabel yang digunakan untuk panjang saya masukkan ke dalam fungsi ini untuk memeriksa, dan bug null pasti tidak bisa dihindari. Setelah 30 menit menguji K-line, menggosok-gosok kembali:

TypeError: tidak dapat membaca properti length dari null duk_hobject_props.c:2258 WToneAndWTtwoFilePernyataan yang salah.

BTS tidak bisa menafsirkannya!!! bersabar! keluar dan berputar-putar untuk mengubah pikiran atau mungkin sadar! Saya kembali dan bertanya-tanya apakah saya memanggil indeks database, parameter yang dikirim adalah null, kesalahan yang terjadi ketika indeks database berjalan.

function isNullAndLog(arr,strArrName){//空数组报错
    if(!arr){
        Log("arr is:",arr,"name:",strArrName);
        return true;
    }
    return false;
}

function main(){
   if(typeof(x) === undefined ){
       Log(typeof(x));
   }
    var aaa = null;
    Log(isNullAndLog(aaa));
    /*
    while(!aaa || aaa.length < 9){
        Log("while xunhuan");
        Sleep(5000 * 1000);
    } 
    */
    talib.EMA(aaa,5);
} 

Talib.EMA ((aaa,5); Kata kunci aaa adalah null, yang saya tentukan secara sengaja, lalu masuk dan lihat apa yang terjadi. TypeError: Cannot read property length of null ~~OK. Mungkin itu masalahnya, lanjutkan modifikasi kode.

Pertanyaan 2:

Di sisi lain, ada juga masalah dengan kode yang sekarang direkam:

function DeleteNullEle(initArr){
    var dealArr = [];
    var initArrLen = initArr.length;
    for(var i = 0,j = 0 ; i < initArrLen ; i++,j++){
    //Log("initArr-",i,":",initArr[i]);//ceshi
    if(initArr[i] === null || isNaN(initArr[i]) ){
        j--;
        //Log("i:",i);//ceshi
        continue;
    }
        dealArr[j] = initArr[i];
    }
    //Log("dealArr:",dealArr);//ceshi
return dealArr;
}

Beberapa dari mereka adalah [NaN, NaN, NaN, 22, 3, 56, 78, 4, 23], tetapi ketika penemu mengkuantifikasi tes dengan log, hasilnya adalah null. Yang membuat saya bingung untuk waktu yang lama, lubang besar, harus diingat, Anda melihat adalah null atau mungkin NaN, jadi menilai null adalah tidak dapat dipastikan.
Satu hal lagi, adalah while ini ((!aaa gbla aaa.length < 10) {...}, jika aaa === null, mengapa tidak memberikan kesalahan, karena pada saat ini, ekspresi operator ini Dalam!aaa adalah benar ekspresi selalu benar, jadi aaa.length di belakang mungkin tidak dilaksanakan (Ini tampaknya pernah terjadi ketika belajar HTML, CSS, DOM, menilai browser) Ada beberapa API yang digunakan.

Pertanyaan 3:

Selain itu, saya juga meminta teman-teman untuk mengubah pemantauan perbedaan harga, yang sebenarnya adalah menambahkan rentang perbedaan deteksi, dan WeChat mendorong, sangat sederhana.

 if (diff != __lastDiff) {
//--------------------------------------------------------------------------------------------
        if(openWeixin){
            if( (diff <= price1 || diff >= price2 ) && off_on === true ){
                Log("差价:"+diff+"微信推送@");
                off_on = false;
                Sleep(1000);
            }else{
                off_on = true;
                Sleep(1000);
                }
        }
//---------------------------------------------------------------------------------------------
        // add添加数据到series, 参数格式为[series序号, 数据];
        __chart.add([0, [new Date().getTime(), diff]]);
        __lastDiff = diff;
    }

img

Di antara garis kode kosong adalah kode yang ditambahkan, sangat sederhana, mungkin belum sempurna.

Pertanyaan 4: (Bukan masalah, hanya catatan belajar)

Saat ini dalam mempelajari strategi menulis futures, hal ini lebih rumit daripada spot, (untung ada template perdagangan futures besar Z, jika tidak menulis detail perdagangan cukup untuk minum >____

  • exchange.GetPosition() // digunakan untuk mendapatkan informasi penyimpanan, perhatikan bahwa fungsi ini mengembalikan suatu array struktur posisi yang berisi semua informasi spesifik penyimpanan.
  • exchange.SetMarginLevel ((MarginLevel) // Fungsi ini adalah pengaturan Leverage. Parameter tertentu MarginLevel pilihan ((5 kali? 10 kali?) tergantung jenis, bursa, khususnya, beberapa tidak dapat berubah ((seperti CTP komoditas berjangka)
  • exchange.SetDirection ((Direction) // Ini adalah API yang sangat penting, yang disebut sebelum daftar di bawah ini, karena hanya memperkenalkan 4 operasi ((jual buka posisi...), fungsi ini adalah pengaturan operasi ini (meskipun ada sedikit tambahan), ada juga parameter kedua dari CTP yang belum dipelajari untuk saat ini.
  • exchange.SetContractType ((ContractType) // Sebelum membuka atau menyeimbangkan satu adalah untuk menentukan arah perdagangan (lebih? kosong? rata?), yang lain adalah untuk menentukan kontrak perdagangan (menandai adalah gula putih? kapas?), jadi gunakan fungsi ini untuk mengatur jenis kontrak. Parameternya berbeda-beda di berbagai bursa. Pada dasarnya fungsi-fungsi ini juga digunakan. Fungsi yang tersisa adalah sama dengan yang ada.
  • exchange.Buy ((() // beli
  • exchange.Sell ((() // jual Di bawah ini adalah kode percobaan saya, dengan hanya memilih satu bagian (yang dapat disalin dalam fungsi utama) untuk menguji kembali.img
 if (!manager) {//Z大写的商品期货模板类库,用来管理交易的对象(manager 初始时null)。不明白的可以去看源代码,QQ群共享有注释版。
        if (_C(exchange.GetPosition).length > 0) {
            throw "策略启动前不能有持仓.";
        }
        Log('交易平台:', exchange.GetName(), _C(exchange.GetAccount));  //输出当前交易所 信息
        var insDetail = _C(exchange.SetContractType, ContractTypeName);  // 用容错函数 _C ,容错调用 SetContractType函数  首先明确 设置交易的合约类型。
        Log("合约", insDetail.InstrumentName, "一手", insDetail.VolumeMultiple, "份, 最大下单量", insDetail.MaxLimitOrderVolume, "保证金率:", insDetail.LongMarginRatio.toFixed(4), insDetail.ShortMarginRatio.toFixed(4), "交割日期", insDetail.StartDelivDate);
        // 上面这个Log 显示出合约的一些信息,注意 在回测的时候,与实际运行的结果不一样,可以看图杠杆都是null,保证金率都是0,可以试试看。
        manager = $.NewPositionManager();  // 这个生成管理者 对象
    }
    exchange.SetMarginLevel(10); //不支持       在这里我试着设置了一下杠杆试试,发现  显示 错误:Not support     ,CTP商品期货 应该不能自己调整杠杆
    var positions = exchange.GetPosition();     在所有的操作前 ,我试着调用了一下 GetPosition 函数  获取一下持仓信息,显示的null
    Log(positions[0]);
    exchange.SetDirection("buy"); // 在所有的操作前需要设置  操作方向  ,这里设置 买开仓(做多)。
    var id = exchange.Buy(1911,1); // 执行买入操作  下了一个  限价单,  有兴趣的同学 可以试试 市价单。(嘿嘿!自己动手记得牢)
    positions = _C(exchange.GetPosition); //再获取下 持仓信息 看看
    Log(positions);  //有持仓信息了,  在上面 Buy的时候  有兴趣的同学 试试 用低价格 买入。  Buy(1000,1) 看看。

Pertanyaan 5: Hari ini, seorang teman menulis kode yang bertanya, Sleep () Fungsi ini memiliki kesalahan besar yang mempengaruhi kebijakan frekuensi tinggi.

function main(){
    for(var i = 0 ; i < 10 ; i++){
        var b1 = 0;
        var b2 = 0;
        var b3 = 15;
        while(b1 < 200){
            var t2s1 = (new Date()).getTime();
            b1++;
            Sleep(b3);
            var t2s6 = (new Date()).getTime();
            b2 += (t2s6 - t2s1);
        }
        Log("Sleep()",b3,"MS",b1,"平均次数",b2/b1);
    }
    throw 2;
}

Saya melakukan tes ulang dan menemukan bahwa fungsi Sleep akan berjalan 1 detik dalam tes ulang ((masa sebelum dan sesudahnya berselisih 1000), maka kesalahan waktu dari kode uji ini sangat besar, tetapi jika berjalan dengan simulasi, kesalahan dasarnya dalam 1 milisecond. Mungkin kesalahan yang disebabkan oleh algoritma yang berjalan di dalamnya adalah kesalahan yang disebabkan oleh model kotak pasir. Simulasi memiliki kesalahan yang sangat kecil ((dalam 1 detik). Tetapi teman saya mengatakan bahwa meskipun kesalahan simulasi, namun tidak sama dengan saya.

Pertanyaan 6: Tadi pagi, seorang teman saya mengatakan bahwa hostnya crash pada tengah malam dan mengirim log sistem. Saya melaporkan masalah tersebut ke Z. Saya mencatatnya di sini.

- Ini adalah jurnal.

runtime/cgo: pthread_create failed: Resource temporarily unavailable
SIGABRT: abort
PC=0x7f332c591cc9 m=2

goroutine 0 [idle]:

goroutine 1 [select, 207 minutes]:

Dari baris pertama melihat kegagalan pembuatan thread, sumber daya tidak tersedia sementara (tidak cukup). Mungkin melihat bahwa seharusnya masalah memori, mungkin disebabkan oleh kekurangan memori. Solusi: 1. memeriksa kode kebijakan robot yang sedang berjalan, apakah ada sumber daya yang digunakan yang tidak dirilis, apakah ada API yang menggunakan multi-threaded; 2, menggunakan ulimit perintah untuk memeriksa pembatasan pada sistem di mana host berada ((Linux) ). Blog ini dapat dilihat di: (alamat blog)http://smilejay.com/2012/04/fork_resource/[Menyanyi] 3. Perhatikan penggunaan memori sistem.

Ulimit -a menunjukkan:img

Parameter untuk perintah ulimit: -H menetapkan batasan sumber daya keras. -S menetapkan batasan sumber daya lunak. -a menunjukkan semua batasan sumber daya saat ini. -c size: Setel nilai maksimum untuk file core. Unit: blocks -d size: Setel nilai maksimum bagi segmen data. Satuan: kbytes -f size: Setel maksimum untuk membuat file. Unit: blocks -l size: Setel nilai maksimum untuk proses yang terkunci dalam memori. Unit: kbytes -m size: Mengatur maksimum memori tetap yang dapat digunakan. Unit: kbytes -n size: Mengatur nilai maksimum deskriptor file yang dapat dibuka pada saat yang sama. Unit: n -p size: Setel nilai maksimum dari pipa buffer. Unit: kbytes -s size: Setel nilai maksimum dari tumpukan. Unit: kbytes -t size: menetapkan batas maksimum waktu penggunaan CPU. Unit:seconds -v size: Setel nilai maksimum untuk memori virtual. Unit: kbytes -u Jumlah program maksimum yang dapat dibuka oleh pengguna

Teman-teman yang mengalami masalah ini menemukan bahwa fungsi filter yang salah mungkin menjadi penyebab masalah, dan menemukan alasan mengapa host (memori yang terus berkembang) crash. SetErrorFilter (( 502: 503: tcp character unexpected network timeout WSARecv Connect GetAddr no such reset httppreceived EOF reused ); fungsi yang tidak digunakan dengan baik, fungsi ini hanya perlu dipanggil sekali, tidak dapat ditulis dalam struktur loop. Masalah di atas ( memori terus berkembang) adalah karena fungsi ini ditulis dalam fungsi onTick, panggilan loop yang terus menerus pada onTick, yang menyebabkan crash akhir.

Pertanyaan 7: Singkatan sederhana dari fungsi _C (((), fungsi _N (((), fungsi _G ((()

  • Fungsi _C()

Pernyataan: Fungsi ini terutama digunakan untuk API kesalahan-kesalahan, seperti fungsi exchange.GetAccount ((), yang disebut sebagai berikut: _C ((exchange.GetAccount); perhatikan nama fungsi tanpa tanda kurung, jika fungsi kesalahan-kesalahan membutuhkan tambahan parameter, ditulis pada parameter kedua fungsi _C(, kemudian ke belakang. Menggunakan contoh.

function main(){
    var account = null;
    var amount = 1;
    var price = 2000;
    account = exchange.GetAccount();
    Log("_C 函数使用前  account :",account);
    //exchange = null; 
    _C(exchange.Buy,price,amount);
    //exchange.Buy(price,1);
    account = exchange.GetAccount();
    Log("_C 函数使用后  account :",account);
}

Fungsi_C bisa diartikan sebagai berikut:

 function ___C(functionName,p1){
    functionName("执行需要容错的函数,传入的测试参数为:",p1);
    Log("__C 容错函数启动,容错完毕");
}
function main(){
    pstr = "测试参数--hello";
    ___C(Log,pstr);
}

Hasil pelaksanaan:img

  • Fungsi _N( Penjelasan: Fungsi ini digunakan untuk menangani terlalu banyak digit setelah titik bilangan kecil, dengan menyimpan beberapa digit bilangan kecil. Contoh penggunaan:
function main(){
    var pi = 3.1415926535897;
    Log("使用_N函数 前pi:",pi);
    var piOfDeal = _N(pi,2);
    Log("使用_N函数后 pi:",piOfDeal);
}

Hasil pelaksanaan:img

  • Fungsi _G( Penjelasan: Ini adalah daftar kamus global yang dapat disimpan di dokumen API. Tabel KV, menyimpan file lokal secara permanen, setiap robot memiliki database terpisah, yang tetap ada setelah restart atau administrator keluar K harus ditulis sebagai angka atau string, tidak ada perbedaan ukuran, dan V dapat ditulis untuk apa pun yang dapat diurutkan dalam JSON _G ((num, 1); // Mengatur variabel global num dengan nilai 1 _G ((num, ok); // Mengubah variabel global num, nilai untuk string ok _G ((num, null); // Hapus variabel global num _G ((num); // Mengembalikan nilai variabel global num _G(); // Mengembalikan ID bot saat ini _G(null); // Hapus semua variabel global
function main(){
    Log("totalYLMoney 初始赋值 0");
    var totalYLMoney = 0;
    Log("totalYLMoney 已赋,  = ",totalYLMoney);
    if(typeof(_G("totalYLMoney_save")) !== "object"){
        totalYLMoney = _G("totalYLMoney_save"); 
        Log("读取 totalYLMoney 本地数据库 名称为totalYLMoney_save 的值 赋给 totalYLMoney ");
    }else{
        totalYLMoney = 100.12546328765458;
        _G("totalYLMoney_save",totalYLMoney.toString());
        Log("记录 totalYLMoney 保存到本地数据库");
    }
    Log("totalYLMoney",totalYLMoney);
    Log("typeof\(_G(\"totalYLMoney_save\"))",typeof(_G("totalYLMoney_save")));
}

Kode pengujian fungsi di atas memerlukan pengujian pada robot, retesting tidak didukung. Metode pengujian, deploy program pada robot, pertama kali memulai robot, robot akan mencatat 100.12546328765458; nilai ini ke dalam kamus global "totalYLMoney_save" dalam nama "totalYLMoney_save", menjalankan bot sekali lagi, Anda akan menemukan var totalYLMoney = 0, variabel totalYLMoney ini masih membaca dari kamus nilai yang disimpan pada saat kebijakan pertama kali dijalankan.

Pertanyaan 8: Sedikit ide tentang strategi penghitungan laba rugi:

Sering kali melihat teman-teman baru di kelompok, bertanya tentang algoritma yang menguntungkan dan rugi strategi. Secara umum, ada beberapa cara untuk mengatasinya, di sini sedikit sederhana, ide-ide yang juga diberikan oleh dewa besar di kelompok, di sini saya bertanggung jawab untuk menjelaskan.

  • Pendapatan yang mengambang:

Dan untung yang mengambang adalah: per (mata uang sekarang - mata uang awal) x harga sekarang + (mata uang sekarang - uang awal)

Contoh: misalnya, harga koin awal adalah 10 yuan, dan akun dimulai dengan 5 koin, uang 100 yuan. Dalam jangka waktu tertentu, saya membeli 3 koin dengan harga rata-rata 15 yuan. Pada akhir periode ini, harga koin naik menjadi 20 yuan. Saat ini akun saya adalah: 8 koin, uang 55 yuan. Profit = (8 - 5) * 20 + (55 - 100) = 60 + (-45) = 15 Metode perhitungan ini. Keuntungan adalah 15 yuan. (Catatan: saat ini penghasilan Anda mengapung, karena jika saat ini harga mata uang turun, mungkin Anda tidak hanya tidak mendapatkan keuntungan, tetapi juga akan kehilangan uang, tentu saja kehilangan uang juga mengapung, karena keuntungan Anda saat ini mengikuti harga mata uang yang mengapung, karena Anda melakukan banyak pegangan, kehilangan kantong) Selain itu, jika pada saat harga koin 20 yuan/setiap, neraca, yaitu 20 yuan untuk menjual 3 koin yang dibeli dengan harga 15 yuan, saat ini akun adalah: 5 koin, uang 115 yuan; atau algoritma di atas: Profit = (5 - 5) * 20 + (115 - 100) = 15, keuntungan tetap 15 yuan, perbedaan adalah jika tidak mempertimbangkan devaluasi pemegang mata uang awal, maka keuntungan tidak berubah seiring dengan perubahan harga.

  • Keuntungan rekening:

Keuntungannya: (sekarang koin x sekarang harga + sekarang uang) - (sekarang koin x harga awal + uang awal)

Gunakan contoh di atas: misalnya, harga koin awal 10 yuan, akun dimulai dengan 5 koin, uang 100 yuan. Selama periode tertentu, saya membeli 3 koin dengan harga rata-rata 15 yuan. Pada akhir periode ini, harga koin naik menjadi 20 yuan. Saat ini akun saya adalah: 8 koin, uang 55 yuan. Profit = (8 * 20 + 55) - (5 * 10 + 100) = 215 - 150 = 65 Cara menghitung ini adalah keuntungan sebesar 65 yuan. Begitu juga saya menjual 3 koin yang dibeli dengan harga rata-rata 15 untuk harga rata-rata 20 yuan. Profit = (5 * 20 + 115) - (5 * 10 + 100) = 215 - 150 = 65 sama.

Perbandingan antara dua metode di atas, satu keuntungan 15 dan satu keuntungan 65, sebenarnya tidak sulit untuk dilihat. Metode pertama mengabaikan kerugian yang disebabkan oleh kenaikan nilai penipuan pemegang koin awal. Algoritme kedua adalah menghitung kerugian yang disebabkan oleh kenaikan nilai penipuan pemegang koin awal. Perhitungan keuntungan rekening yang dirasakan digunakan untuk menyelesaikan dana. Keuntungan mengambang digunakan untuk keuntungan atau kerugian yang dihasilkan dari transaksi dalam jangka waktu tertentu. Ini adalah beberapa pengalaman yang diuraikan dalam mimpi kecil-kecilan, jika ada kesalahan, tolong tunjukkan bahwa itu benar, terima kasih sebelumnya ^-^

Pertanyaan 9: Seorang teman melihat sebuah kebijakan terbuka yang ditampilkan pada status bar tabel, dan kemudian melihat ke bawah API dan menemukan bahwa tampaknya ada fitur baru yang ditambahkan, fungsi LogStatus di API dapat menggambar tabel.

Pertama, lihat penjelasan API platform:

LogStatus(Msg); //	此信息不保存到日志列表里, 只更新当前机器人的状态信息, 在日志上方显示, 可多次调用, 更新状态
LogStatus('这是一个普通的状态提示');
LogStatus('这是一个红色字体的状态提示 #ff0000');
LogStatus('这是一个多行的状态信息\n我是第二行');
var table = {type: 'table', title: '持仓信息', cols: ['列1', '列2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]};
LogStatus('`' + JSON.stringify(table)+'`'); // JSON序列化后两边加上`字符, 视为一个复杂消息格式(当前支持表格)
LogStatus('第一行消息\n`' + JSON.stringify(table)+'`\n第三行消息'); // 表格信息也可以在多行中出现
LogStatus('`' + JSON.stringify([table, table])+'`'); // 支持多个表格同时显示, 将以TAB显示到一组里

Kode tes:

function main(){
    var value1 = 99;
    var value2 ="ceshi 01";
    var table1 = { type : "table", title : "ceshi1", cols : ["列1","列2","列3"] , rows : [ ["abc","def","ghi"] , ["1","2","3"] ] };
    var table2 = { type : "table", title : "ceshi2", cols : ["列1","列2","列3"] , rows : [ ["abc",value1,"ghi"] , [value2,"2","3"] ] };
    LogStatus("测试文本1\n`" + JSON.stringify([table1,table2]) + "`");
}

imgGambar pertama menunjukkan bahwa dalam tabel yang dipisahkan ceshi1, format data tabel adalah var table1 dan var table2. Perlu dicatat bahwa sebelum dan sesudah fungsi JSON.stringify (([table1, table2]) harus ditambahkan ` ini. Jika tidak, tabel tidak akan muncul. Tentu saja, kita harus menunjukkan data secara dinamis dengan tabel, tidak selalu dapat menjadi konten teks tetap. Tabel 2 memiliki dua data uji, value1 、 value2, yang berada di dalam halaman ini.imgSiswa baru dapat menyalin kode, mencoba, mengubahnya sendiri.

Pertanyaan 10: Seorang pengguna mengirim pesan yang menginginkan grafik tingkat laba, mungkin pada saat ini, narasi dari dokumen API yang diukur oleh penemu relatif sederhana, dan penggunaan grafik mungkin relatif sulit.

Untuk melakukan tes langsung, saya menggunakan angka acak untuk meniru perubahan dinamis dalam tingkat laba yang digunakan untuk menampilkan kurva laba pada grafik.

var ChartObj = {//画图
    tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A',enabled:true,valueDecimals:2,valueSuffix:'%'}, //提示框  就是鼠标在线上时 显示的一个 框框 里面有一些内容,这里是设置提示框的格式
    chart: { zoomType:'x',panning:true },//图表缩放  
    title: { text: '收益率 %'}, //标题
    rangeSelector: { //范围 区域 选择 
            buttons:  [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
            selected: 0,
            inputEnabled: false
        },
    subtitle: {text: " 显示瞬时收益率 % "},//副标题
    xAxis:{type: 'datetime'}, //设置 X轴  的数值为时间类型
    yAxis: [{
            title: {text: '收益率 %'},//标题
            style: {color: '#4572A7'},//样式 
            //opposite: false  //生成右边Y轴
        }
    ],
    series: [//系列
        {name:'收益率',dataLables:{enabled:true,format:'{y} %'},type:'spline',yAxis:0,data:[]} //该图标只用到一条曲线  ,所以 只用设置一个数据序列
        ]                  
};
var chart = Chart(ChartObj);  //初始化

function main(){ //测试用的主函数
    chart.update(ChartObj); //更新
    chart.reset(); //清空图表
    var i = 0; //初始一个 i 值 , 后面循环用,   用来限制循环次数
    var randomNum = 0; //声明一个  随机数 初始化 0
    while(i < 5000){ //限制循环次数
        randomNum = Math.random() * 10;  // 生产随机数 0  -  9.9999
        //chart.add([0,[(new Date()),randomNum]]);
        chart.add(0,[(new Date()).getTime(),randomNum + 5]);  //把生成的随机数  按照时间(X 坐标)     把随机数 画在图表上(Y坐标)     
        Sleep(1000*60); // 程序 每次循环暂停60秒
        //chart.update(ChartObj);
        //chart.reset(500);
    }
    Log("over");
}
  • Satu masalah di sini membuat saya bingung selama setengah hari, saya juga mencatatnya. Saat menulis waktu, itu harus berupa hitungan milidetik, seperti ini: new Date (().getTime (()) Ini adalah hitungan milidetik, jika demikian new Date (()) maka akan muncul sedikit masalah, seperti tampilan waktu, dan skala sumbu X tidak dapat digunakan. Ada juga tooltip: {xDateFormat: %Y-%m-%d %H:%M:%S, %A,enabled:true,valueDecimals:2,valueSuffix:%}, pengaturan ini dapat dilihat dalam melihat data.

Lebih banyak

LiuxinghuiSi kecil, tolong beritahu saya, jika ada pesanan yang belum selesai, saya harus membatalkannya.

LouisIni harus memuji satu!

Hujan derasAda banyak hal yang tidak disebutkan dalam dokumentasi API.

Daun TelagaSyamrin selalu menyusun hal-hal yang bagus.

"Kalau tidak, saya tidak akan melakukannya", katanya.Itu bagus!

Mimpi kecilJangan terlalu marah. https://dn-filebox.qbox.me/bf52888dc68aba5326c403f2280994e81fbce2ee.png Tutorial Link: https://www.botvs.com/bbs-topic/475

Mimpi kecil"Sangat mudah untuk dipelajari!