Jurnal Pembelajaran Kimia Kuantitatif Pencipta

Penulis:Mimpi kecil, Dicipta: 2016-05-23 23:10:46, Dikemas kini: 2019-08-01 10:31:25

Sebelum ini jarang menulis log, sekarang saya rasa perlu mencatat sesuatu setiap hari, tidak boleh melihat cahaya hitam ya! menulis apa? mencatat belajar, bekerja! (sebenarnya hampir semua..) Hari ini selain kerja harian, adalah menulis modul kepada pelanggan, mengulas semula keseluruhan kod tidak ada masalah, kecuali garis penunjuk yang tidak biasa di carta, yang lain kelihatan normal, OK, ujian simulasi atas.

Soalan 1:

  • 1, garis K grafik kadang-kadang kekurangan satu BAR, sedang mencari BUG. Masalah ditemui, dianalisis, dan tidak menerima data semasa ujian dengan piringan analog. Pada masa data diterima, 2 BAR telah berlalu, jadi data terkini digambarkan pada carta, menyebabkan satu atau lebih jarak di tengah berlalu.
  • 2, berjalan untuk seketika (siklus garis K 1 minit) tidak ada masalah, cuba lagi (siklus garis K 30 minit) masalah datang, tanpa disedari muncul:

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

Lihat di bawah ini adalah kesilapan yang sepatutnya berlaku dalam fungsi WToneAndWTtwo, membaca nama nilai null yang disebut sifat panjang, iaitu satu pembolehubah seperti var name = null; dan kemudian saya membaca nama nilai null yang disebut panjang, iaitu satu pembolehubah seperti var name = null; dan kemudian saya membaca nama nilai null yang disebut panjang, dan kemudian saya membaca nama variable yang disebut panjang, dan kemudian saya membaca nama variable yang disebut panjang, dan kemudian saya membaca nama variable yang disebut panjang, dan kemudian saya membaca nama variable yang disebut panjang, dan kemudian saya membaca nama variable yang disebut panjang, dan kemudian saya membaca nama variable yang disebut panjang, dan kemudian saya membaca nama variable yang disebut panjang, dan kemudian saya membaca nama variable yang disebut panjang. Nama.length telah dibaca, dan mencari tempat untuk memanggil panjang dalam keseluruhan kod. Untuk menyelesaikan masalah ini, fungsi ini ditulis:

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

Fungsi ini akan mengesan semua pembolehubah yang digunakan untuk panjang, dan jika terdapat bug yang tidak dapat dielakkan. Dalam 30 minit ujian K-Line, menggosok~~ lagi:

TypeError: tidak boleh membaca sifat length dari null duk_hobject_props.c:2258 WToneAndWTtwoFilePerkhidmatan Perkhidmatan Internet

BTS tidak dapat memahaminya!!! bersabar! keluar dan berputar-putar untuk menukar fikiran atau mungkin sedar! (Z mengajar saya) ◎ berputar-putar, itu berkesan. Apabila saya kembali, saya berfikir, adakah saya memanggil perpustakaan penunjuk, parameter yang dihantar adalah null, kesalahan yang berlaku semasa menjalankan perpustakaan penunjuk, maka saya teruskan:

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); kunci aa adalah null, saya tentukan secara sengaja, masukkan dan lihat apa yang berlaku. TypeError: Cannot read property length of null ~~OK. Mungkin itu masalahnya, teruskan mengubah kod.

Soalan 2:

Satu lagi masalah ialah sebelum ini, kita berfikir untuk merekodkan kod sekarang:

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;
}

Ini adalah kerana beberapa array adalah seperti ini [NaN, NaN, NaN, 22, 3, 56, 78, 4, 23] tetapi dalam ujian pencipta kuantitatif, apabila output log menunjukkan null, yang menunjukkan bahawa Biar saya tersesat untuk masa yang lama, lubang besar, perlu diingat, anda melihat adalah null atau mungkin NaN, jadi menilai null adalah tidak dapat dihakimi.
Satu lagi perkara, ialah while ((!aaa gbla aaa.length < 10) {...}, jika aaa === null, kenapa tidak dibalikkan kerana dalam keadaan ini, ungkapan pengendali Dalam!aaa adalah benar, jadi aaa.length mungkin tidak dilaksanakan. (Ini mungkin dilihat semasa belajar HTML, CSS, DOM, menilai penyemak imbas) Saya telah menggunakan beberapa API.

Soalan 3:

Di samping itu, atas permintaan rakan sekumpulan, bantuan untuk mengubah pemantauan perbezaan harga, sebenarnya adalah menambah julat perbezaan pengesanan, dan WeChat mendorong, sangat mudah.

 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 baris kod kosong adalah kod yang disertakan, sangat mudah, mungkin belum sempurna.

Soalan 4 (tidak masalah, belajar sedikit)

Pada hari-hari ini dalam belajar strategi untuk menulis niaga hadapan, ini adalah titik yang lebih rumit daripada yang ada, (nasib baik terdapat templat dagangan niaga hadapan yang besar Z, jika tidak, menulis butiran dagangan cukup untuk minum >____

  • exchange.GetPosition() // digunakan untuk mendapatkan maklumat simpanan, perhatikan bahawa fungsi ini mengembalikan satu susunan struktur kedudukan yang mengandungi semua maklumat khusus simpanan.
  • exchange.SetMarginLevel ((MarginLevel) // fungsi ini adalah untuk menetapkan Leverage. Parameter tertentu MarginLevel pilihan ((5 kali? 10 kali?) bergantung kepada jenis, bursa, khususnya, ada yang tidak boleh berubah ((seperti CTP komoditi niaga hadapan)
  • exchange.SetDirection ((Direction) // Ini adalah API yang sangat penting, yang dipanggil sebelum senarai di bawah, kerana hanya memperkenalkan 4 operasi ((jual bukaan...), fungsi ini adalah untuk menetapkan operasi ini ((walaupun terdapat sedikit kandungan tambahan), CTP mempunyai parameter kedua yang belum dipelajari untuk sementara waktu.
  • exchange.SetContractType ((ContractType) // Satu adalah untuk menentukan arah dagangan sebelum membuka atau menyelaraskan dagangan, yang lain adalah untuk menentukan kontrak dagangan, jadi gunakan fungsi ini untuk menetapkan jenis kontrak. Parameternya adalah khusus di bursa yang berbeza. Pada asasnya, fungsi-fungsi ini juga digunakan. Fungsi yang tersisa adalah sama dengan barang sedia ada.
  • exchange.Buy() // Beli
  • exchange.Sell() // jual Di bawah ini adalah kod eksperimen saya, hanya memilih satu petikan (yang boleh disalin dalam fungsi utama) untuk menguji semula. Bursa yang diuji adalah bursa masa hadapan komoditi: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) 看看。

Soalan 5: Hari ini, seorang rakan menulis satu petikan kod untuk bertanya, fungsi Sleep ()) mempunyai kesilapan besar yang mempengaruhi dasar 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 ujian semula dan mendapati fungsi tidur akan berjalan dalam ujian semula selama 1 saat (kesesuaian masa sebelum dan sesudah 1000), maka kesalahan masa kod ujian ini adalah besar, tetapi jika dijalankan dengan analog, ia pada dasarnya adalah dalam masa 1 milidetik. Mungkin kesalahan yang disebabkan oleh algoritma yang dijalankan dalam model kotak pasir. Simulasi adalah kecil (dalam masa 1 saat).

Soalan 6: Seorang kawan saya pagi ini berkata bahawa hoster saya telah terhempas pada tengah malam dan menghantar log sistem kepada saya. Saya melaporkan kepada Z. Saya mencari masalah, saya merakamnya 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 penjanaan utas, sumber tidak tersedia sementara (tidak mencukupi). Penyelesaian: 1. Periksa kod dasar bot yang sedang dijalankan, sama ada sumber yang digunakan tidak dibebaskan, sama ada API yang menggunakan pelbagai benang; 2, menggunakan perintah ulimit untuk memeriksa batasan sistem hos ((Linux)).http://smilejay.com/2012/04/fork_resource/] 3. Berhati-hati dengan penggunaan memori sistem.

Menggunakan ulimit -a untuk menunjukkan:img

Parameter untuk perintah ulimit: -H menetapkan had sumber keras. -S menetapkan had sumber lunak. -a menunjukkan semua had sumber semasa. -c size: set nilai maksimum untuk fail teras. Unit: blocks -d size: Nilai maksimum bagi segmen data yang ditetapkan. Unit: kbytes -f size: menetapkan nilai maksimum untuk membuat fail. Unit: blocks -l size: Nilai maksimum yang ditetapkan untuk mengunci proses dalam memori. Unit: kbytes -m size: Nilai maksimum memori tetap yang boleh digunakan. Unit: kbytes -n size: Tetapkan nilai maksimum deskriptor fail yang boleh dibuka pada masa yang sama. Unit: n -p size: Nilai maksimum untuk menetapkan kawasan penyangga paip. Unit: kbytes -s size: Setkan nilai maksimum untuk timbunan. Unit: kbytes -t size: menetapkan had maksimum penggunaan CPU. Unit:seconds -v size: Setkan maksimum nilai ingatan maya. Unit: kbytes -u < bilangan program > Jumlah maksimum program yang boleh dibuka oleh pengguna

Teman yang menghadapi masalah ini mendapati bahawa fungsi penapisan yang salah mungkin menyebabkan masalah, dan telah menemui sebab mengapa hoster (memori yang terus berkembang) runtuh. SetErrorFilter (( 502: 503: tcp character unexpected network timeout WSARecv Connect GetAddr no such reset httppreceived EOF reused ); fungsi yang tidak digunakan, fungsi ini hanya perlu dipanggil sekali dan tidak boleh ditulis dalam struktur gelung. Masalah di atas adalah kerana fungsi ini ditulis dalam fungsi onTick, panggilan gelung yang berterusan pada onTick menyebabkan keruntuhan akhir.

Soalan 7: Ringkasan mudah fungsi _C ((), fungsi _N ((), fungsi _G (() dan kegunaan fungsi.

  • Fungsi _C(

Penerangan: Fungsi ini digunakan terutamanya untuk API kesalahan, seperti fungsi exchange.GetAccount ((), dipanggil sebagai berikut: _C ((exchange.GetAccount); perhatikan nama fungsi tanpa tanda kurung, jika fungsi kesalahan memerlukan penambahan parameter, ia ditulis pada parameter kedua fungsi _C(, seterusnya 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 mungkin kelihatan seperti ini:

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

Hasil pelaksanaan:img

  • Fungsi _N( Penjalasan: Fungsi ini digunakan untuk menangani terlalu banyak digit di belakang 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( Penegasan: Ini adalah senarai kamus global yang boleh disimpan di dokumen API. Jadual KV, menyimpan fail tempatan secara kekal, setiap bot mempunyai pangkalan data yang berasingan, terus wujud selepas dimulakan semula atau pengurus keluar K mesti ditulis sebagai nombor atau rentetan, tidak kira saiz atau saiz, dan V boleh digunakan untuk apa sahaja yang boleh diurutkan dalam JSON _G ((num, 1); // Tetapkan num pembolehubah global dengan nilai 1 _G ((num, ok); // Mengubah pembolehubah global num, nilai untuk baris ok _G ((num, null); // Hapus pembolehubah global num _G ((num); // Mengembalikan nilai pembolehubah global num _G(); // Kembalikan ID bot semasa _G(null); // Hapus semua pembolehubah 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")));
}

Kod ujian fungsi di atas memerlukan ujian pada bot, ujian semula tidak disokong. Kaedah ujian, letakkan program pada bot, pertama kali memulakan bot, bot akan mencatat 100.12546328765458; nilai ini akan disimpan dalam kamus global "totalYLMoney_save" dalam nama "totalYLMoney_save", menjalankan bot sekali lagi, anda akan mendapati var totalYLMoney = 0, yang masih membaca dari kamus nilai yang disimpan semasa strategi dijalankan untuk pertama kalinya selepas pemasangan semula.

Soalan 8: Sedikit idea mengenai strategi untuk mengira keuntungan dan kerugian:

Banyak kali melihat rakan sekelas baru di dalam kumpulan, bertanya tentang algoritma keuntungan dan kerugian strategi. Secara amnya, terdapat beberapa cara untuk menangani masalah ini, di sini adalah sedikit mudah, dan idea yang diberikan oleh Tuhan di dalam kumpulan, di sini saya bertanggungjawab untuk menerangkannya.

  • Keuntungan terapung:

Pendapatan terapung ialah: per (mata wang sekarang - mata wang awal) x harga sekarang + (mata wang sekarang - mata wang awal)

Contoh: Sebagai contoh, harga awal 10 yuan, akaun bermula dengan 5 yuan, wang 100 yuan. Dalam jangka masa tertentu, saya membeli 3 yuan dengan harga purata 15 yuan. Pada akhir tempoh ini, harga koin meningkat kepada 20 yuan. Pada masa ini akaun saya adalah: 8 yuan, wang 55 yuan. Profit = (8 - 5) * 20 + (55 - 100) = 60 + (-45) = 15 Kaedah pengiraan ini. Keuntungan adalah 15 yuan. (Catatan: Kini pendapatan anda adalah terapung, kerana jika harga mata wang jatuh besar pada masa ini, mungkin anda bukan sahaja tidak mendapat keuntungan, tetapi juga akan kehilangan wang, tentu saja kehilangan wang juga terapung, kerana keuntungan anda pada masa ini mengikuti harga mata wang terapung, sebabnya adalah kerana melakukan banyak penarikan, kehilangan beg) Tambahan pula, jika pada masa harga duit syiling 20 yuan/setiap, penempatan, iaitu 20 yuan menjual 3 syiling yang dibeli dengan harga 15 yuan, pada masa ini akaun adalah: 5 syiling, 115 yuan; atau algoritma di atas: Profit = (5 - 5) * 20 + (115 - 100) = 15, keuntungan masih 15 yuan, perbezaannya ialah jika tidak mengambil kira penurunan nilai awal, maka keuntungan tidak berubah mengikut harga.

  • Keuntungan dalam akaun:

Keuntungan akaun: (sekarang duit syiling x harga sekarang + wang sekarang) - (sekarang duit syiling x harga awal + wang awal)

Kemudian gunakan contoh di atas: Sebagai contoh, harga awal 10 yuan/setiap, akaun bermula dengan 5 yuan, wang 100 yuan. Dalam tempoh tertentu, saya membeli 3 yuan dengan harga purata 15 yuan/setiap. Pada akhir tempoh ini, harga koin meningkat kepada 20 yuan/setiap. Profit = (8 * 20 + 55) - (5 * 10 + 100) = 215 - 150 = 65 Cara ini adalah untuk membuat keuntungan sebanyak 65 yuan. Begitu juga saya menjual 3 sen yang saya beli pada harga purata 15 dengan harga 20 yuan. Profit = (5 * 20 + 115) - (5 * 10 + 100) = 215 - 150 = 65 sama.

Perbandingan kedua-dua kaedah di atas, satu keuntungan 15, satu keuntungan 65, sebenarnya tidak sukar dilihat. Kaedah pertama mengabaikan keuntungan dan kerugian yang disebabkan oleh kenaikan nilai mata wang pemegang awal. Algoritma kedua adalah untuk mengira keuntungan dan kerugian termasuk kerugian yang disebabkan oleh kenaikan nilai mata wang pemegang awal. Perkiraan keuntungan akaun yang dirasakan digunakan untuk menyelesaikan dana. Keuntungan terapung digunakan untuk keuntungan atau kerugian yang dihasilkan melalui transaksi dalam tempoh masa tertentu. Ini adalah beberapa pengalaman yang diuraikan secara terperinci, jika ada kesilapan, sila beri isyarat kepada Tuhan, terima kasih sebelumnya ^-^

Soalan 9: Seorang rakan melihat tetingkap status yang terbuka untuk satu dasar yang menunjukkan jadual, jadi dia pergi ke bawah API dan mendapati bahawa ia kelihatan seperti fungsi baru yang ditambahkan, fungsi LogStatus dalam API dapat melukis jadual.

Perhatikan 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 ujian:

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 bahawa dalam tabel yang dipaparkan ceshi1, format data adalah var table1 dan var table2. Kedua-dua pembolehubah tersebut dinyatakan. Perlu diperhatikan bahawa sebelum dan selepas fungsi JSON.stringify (([table1, table2]) anda perlu menambahkan ` ini; jika tidak, jadual tidak akan muncul. Sudah tentu, kita perlu menggunakan jadual untuk menunjukkan data secara dinamik, tetapi tidak boleh selalu menjadi kandungan teks tetap. Tabel 2 mempunyai dua data ujian dalam bahagian ini, value1 、 value2, kedua-dua data ini.imgPelajar baru boleh menyalin kod, mencuba sendiri, mengubahnya.

Soalan 10: Seorang pengguna ingin carta kadar pulangan, mungkin pada masa ini, penerbit kuantitatif dokumen API yang menggambarkan adalah lebih mudah dan grafik mungkin lebih sukar untuk digunakan.

Untuk menguji secara langsung, saya menggunakan bilangan rawak untuk meniru perubahan dinamik dalam kadar pulangan untuk menunjukkan grafik pada grafik; di atas kod:

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 yang membingungkan saya selama setengah hari, dan juga mencatat. Pada saat menulis masa, ia mestilah bilangan milisegun, seperti ini: new Date (().getTime (()) Ini adalah bilangan milisegun, jika new Date (()) maka akan timbul sedikit masalah, seperti menunjukkan masa, dan skala paksi X tidak dapat digunakan. Terdapat juga alat: {xDateFormat: %Y-%m-%d %H:%M:%S, %A,enabled:true,valueDecimals:2,valueSuffix:%}, ini adalah tetapan untuk melihat maklumat.valueDecimals:2 adalah batasan untuk memaparkan nilai paksi Y untuk menyimpan bilangan kecil 2 digit, valueSuffix:%' adalah terakhir daripada apa yang dipaparkan dalam kotak isyarat ditambah dengan simbol % ini.

Lebih lanjut

LiuxinghuiCik Little Dream, tolong beritahu saya bagaimana saya boleh membatalkan semua pesanan yang belum selesai selepas memesan?

LouisIni mesti satu pujian!

Hujan lebatBanyak perkara yang tidak dinyatakan dalam dokumentasi API.

Autumn yang jatuhSyamrin selalu menyusun sesuatu yang baik.

Wang Won jual strategi harga tinggiIni sesuatu yang baik!

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

Mimpi kecilIni adalah satu perkara yang sangat mudah untuk dipelajari!