TypeError: cannot read property
length of null duk_hobject_props.c:2258 WToneAndWTtwo __FIL یہ خرابی کی اطلاع دیتا ہے۔
ذیل میں دیکھا گیا ہے کہ یہ WToneAndWTtwo میں ہونے والی غلطی ہے، اور میں نے ایک متغیر کو پڑھ لیا ہے جس کا نام null ہے، جس کا نام length ہے، جیسے var name = null؛ اور پھر میں نے ایک متغیر پڑھا ہے جس کا نام null ہے، اور پھر میں نے ایک متغیر پڑھا ہے جس کا نام null ہے. نام.لمبائی پڑھا جاتا ہے، تو پورے کوڈ میں لمبائی کال کرنے کی جگہ مل جاتی ہے۔ اس مسئلے کو حل کرنے کے لئے ایک فنکشن بھی لکھا جاتا ہے:
function isNullAndLog(arr,strArrName){//空数组报错
if(!arr){
Log("arr is:",arr,"name:",strArrName);
return true;
}
return false;
}
سوچو، اوہ! اب میں نے اس فنکشن کو جانچنے کے لئے لمبائی تک استعمال ہونے والی تمام متغیرات ڈال دی ہیں، کوئی بھی null BUG بالکل نہیں بچ سکتا ہے۔ کوڈ کو بہتر بنائیں، روبوٹ ٹیسٹ کریں۔ ایک اور صارف نے لکھا کہ 'میں نے 30 منٹ کے لئے K لائن ٹیسٹ کیا ، پھر ایک بار پھر...
TypeError: property
length فائل1315 غلطی کی اطلاعof null duk_hobject_props.c:2258 WToneAndWTtwo نہیں پڑھ سکتا
بسٹ کو سمجھ نہیں آرہی ہے!!! صبر کرو! باہر جاؤ اور ایک چکر لگاؤ اور اپنا دماغ تبدیل کرو یا شاید آپ کو احساس ہو جائے! ((Z نے مجھے سکھایا) ؛ ایک چکر ، یہ واقعی کام کرتا ہے۔ جب میں واپس آیا تو میں نے سوچا کہ کیا میں نے انڈیکس بیٹری کو بلایا ہے؟ میں نے ایک بار پھر سوچا کہ کیا میں نے انڈیکس بیٹری کو بلایا ہے؟ میں نے ایک بار پھر سوچا کہ کیا میں نے انڈیکس بیٹری کو بلایا ہے؟ کیا میں نے انڈیکس بیٹری کو کال کیا ہے؟ کیا میں نے انڈیکس بیٹری کو کال کیا ہے؟ کیا میں نے انڈیکس بیٹری کو کال کیا ہے؟ کیا میں نے انڈیکس بیٹری کو کال کیا ہے؟ کیا میں نے انڈیکس بیٹری کو کال کیا ہے؟ کیا میں نے انڈیکس بیٹری کو کال کیا ہے؟ کیا میں نے انڈیکس بیٹری کو چلانے کے دوران غلطی کی ہے؟ کیا میں نے دستی تجربہ کیا ہے؟
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) ؛ کلید یہ ہے کہ aaa null ہے، میں نے اسے جان بوجھ کر مقرر کیا ہے، اور میں دیکھتا ہوں کہ کیا اثر پڑتا ہے۔
TypeError: Cannot read property
ایک اور مسئلہ یہ ہے کہ پہلے سوچا تھا کہ اب کوڈ ریکارڈ کریں:
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;
}
اس فنکشن کو شامل کرنے کی وجہ یہ ہے کہ کچھ صفیں اس طرح کی ہیں [NaN، NaN، NaN، NaN، 22,3,56,78,4,23] لیکن جب انوینٹر نے کوانٹائزیشن ٹیسٹ کیا تو لاگ فنکشن کے ساتھ آؤٹ پٹ کرتے وقت یہ ظاہر ہوتا ہے کہ یہ null ہے، جو کہ ایک بار جب آپ نے اس کی جانچ پڑتال کی تو آپ کو معلوم ہوگا کہ آپ نے اس کی جانچ پڑتال کی ہے.
مجھے ایک طویل وقت کے لئے الجھن میں ڈال دیا، بڑے گڑھے، یاد رکھنا ضروری ہے، آپ کو یہ دیکھنا ہے کہ یہ null ہے یا شاید NaN ہے، لہذا null کا فیصلہ کرنا ناممکن ہے۔
اور ایک اور بات یہ ہے کہ while ((!aaa gbla aaa.length < 10) {...}، اگر aaa === null، تو غلط کیوں نہیں ہے، کیونکہ جب آپ اس کے بارے میں بات کرتے ہیں تو آپ اس کے بارے میں کیا سوچتے ہیں؟
میں!aaa سچ ہے کہ اظہار ہمیشہ سچ ہے، تو اس کے بعد aaa.length شاید نہیں کیا گیا تھا ((یہ HTML، سی ایس ایس، ڈوم سیکھنے کے دوران دیکھا گیا ہے لگتا ہے، براؤزر کا فیصلہ
اس کے علاوہ، ہم نے کچھ API استعمال کیے ہیں۔)
اس کے علاوہ ، ایک دوست کی درخواست پر ، قیمتوں میں فرق کی نگرانی میں کچھ تبدیلی کرنے میں مدد کریں ، جو حقیقت میں فرق کی جانچ پڑتال کی حد میں اضافہ ہے ، اور ویکی میٹ کو آگے بڑھانا ، بہت آسان ہے۔
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;
}
کوڈ کی خالی لائنوں کے درمیان شامل کیا جاتا ہے کوڈ، بہت سادہ ہے، شاید ابھی تک کامل نہیں ہے.
فیوچر سیکھنے کی حکمت عملی لکھنا ، جو کہ فوری طور پر خریدنے سے کہیں زیادہ پیچیدہ ہے ، (خوش قسمتی سے ، زیڈ بڑے فیوچر ٹریڈنگ ٹیمپلیٹس ہیں ، ورنہ تجارت کی تفصیلات لکھنا کافی ہے >____
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) 看看。
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;
}
میں نے ریٹیسٹ کیا اور پتہ چلا کہ سوتے فنکشن ریٹیسٹ میں 1 سیکنڈ چلتا ہے ((پہلے اور بعد کا وقت فرق 1000 ہے) ، پھر اس ٹیسٹ کوڈ کا وقت کی غلطی بہت زیادہ ہے، لیکن اگر یہ ایک الیکٹرانک ڈرائیو کے ساتھ چلتا ہے تو ، بنیادی طور پر غلطی 1 ملی سیکنڈ کے اندر ہے۔ شاید ریٹیسٹ سسٹم ایک سینڈ باکس ماڈل کا ہے ، جس میں چلنے والے الگورتھم کی وجہ سے غلطی ہوتی ہے۔
- یہ ایک ڈائری ہے۔
runtime/cgo: pthread_create failed: Resource temporarily unavailable
SIGABRT: abort
PC=0x7f332c591cc9 m=2
goroutine 0 [idle]:
goroutine 1 [select, 207 minutes]:
پہلی سطر سے دیکھا گیا تھریڈ جنریٹر میں ناکامی ، وسائل عارضی طور پر دستیاب نہیں ہیں (کم) ؛ یہ شاید میموری کا مسئلہ ہونا چاہئے ، شاید میموری کی کمی کی وجہ سے ہے۔ حل: 1، روبوٹ کی پالیسی کوڈ چلانے کی جانچ پڑتال کریں، کیا استعمال شدہ وسائل کو جاری نہیں کیا گیا ہے، کیا متعدد موضوعات کا استعمال کرتے ہوئے اے پی پی ہے؛ 2٬ ulimit کمانڈ کا استعمال کرتے ہوئے میزبان کے سسٹم کی حدود چیک کریں ((لینکس) ). یہ بلاگ دیکھ سکتے ہیں: (بلاگ ایڈریس)http://smilejay.com/2012/04/fork_resource/] 3، سسٹم میموری کے استعمال پر توجہ دیں۔
ulimit -a کا استعمال کرتے ہوئے دکھائیں:
ulimit کمانڈ کے پیرامیٹرز: -H ہارڈ وسائل کی حد مقرر کرتا ہے۔ -S سافٹ ویئر وسائل کی حد مقرر کرتا ہے. -a موجودہ وسائل کی تمام حدود دکھاتا ہے۔ -c size: کور فائل کی زیادہ سے زیادہ مقدار مقرر کریں۔ یونٹ: blocks -d size: سیٹ کردہ ڈیٹا سیکشن کی زیادہ سے زیادہ مقدار۔ یونٹ: کی بائٹس -f size: فائل بنانے کے لئے مقرر کردہ زیادہ سے زیادہ مقدار۔ یونٹ: blocks -l size: میموری میں مقفل عمل کی زیادہ سے زیادہ قیمت مقرر کریں۔ یونٹ: کی بائٹس -m size: مقرر کردہ مستقل میموری کی زیادہ سے زیادہ مقدار۔ یونٹ: کلو بائٹس -n size: فائل کے بیان کنندہ کی زیادہ سے زیادہ قیمت مقرر کریں جو بیک وقت کھولے جاسکتے ہیں۔ یونٹ: n -p size: پائپ لائن کے بُفنگ زون کی زیادہ سے زیادہ مقدار مقرر کریں۔ یونٹ: کی بائٹس -s size: اسٹیک کی زیادہ سے زیادہ مقدار مقرر کریں۔ یونٹ: کی بائٹس -t size: سی پی یو کے استعمال کے وقت کی زیادہ سے زیادہ حد مقرر کریں۔ یونٹ: سیکنڈ -v size: مجازی میموری کی زیادہ سے زیادہ مقدار مقرر کریں۔ یونٹ: کی بائٹس -u < پروگراموں کی تعداد> زیادہ سے زیادہ پروگراموں کی تعداد جو صارف کھول سکتا ہے
دوستوں کو اس مسئلے کا سامنا کرنا پڑا ہے کہ غلط فلٹرنگ کی تقریب شاید اس مسئلے کی وجہ سے ہے، جس کی وجہ سے میزبان (ذہن میں مسلسل بڑھتی ہوئی) خراب ہو رہی ہے. SetErrorFilter ((
502: 503: tcp character unexpected networktimeout WSARecv Connect GetAddr no such reset httppreceived EOF reused ); فنکشن کا غلط استعمال۔ اس فنکشن کو صرف ایک بار بلایا جانا چاہئے ، اور اس کو لپیک ڈھانچے میں نہیں لکھا جاسکتا ہے۔ مندرجہ بالا مسئلہ ( میموری میں توسیع) یہ ہے کہ اس فنکشن کو onTick فنکشن میں لکھا گیا ہے ، جس کی وجہ سے onTick کی تعداد میں مسلسل لپیک لگتی ہے ، جس کی وجہ سے حتمی خرابی واقع ہوتی ہے۔
وضاحت: یہ فنکشن بنیادی طور پر API غلطیوں کو معاف کرنے کے لئے استعمال کیا جاتا ہے ، جیسے کہ تبادلہ.GetAccount () فنکشن ، جس کو اس طرح بلایا جاتا ہے: _C ((exchange.GetAccount) ؛ نوٹ کریں کہ فنکشن کا نام قوسین کے بغیر ہے ، اگر غلطیوں کو معاف کرنے والے فنکشن کو پیرامیٹرز شامل کرنے کی ضرورت ہے تو اسے _C (() فنکشن کی دوسری پیرامیٹر میں لکھا جاتا ہے ، اس کے بعد۔ مثالیں استعمال کریں۔
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);
}
اس کا اندازہ لگائیں کہ _C فنکشن کچھ اس طرح ہے:
function ___C(functionName,p1){
functionName("执行需要容错的函数,传入的测试参数为:",p1);
Log("__C 容错函数启动,容错完毕");
}
function main(){
pstr = "测试参数--hello";
___C(Log,pstr);
}
نتائج:
function main(){
var pi = 3.1415926535897;
Log("使用_N函数 前pi:",pi);
var piOfDeal = _N(pi,2);
Log("使用_N函数后 pi:",piOfDeal);
}
نتائج:
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")));
}
مندرجہ بالا _G() فنکشن ٹیسٹنگ کوڈ کو روبوٹ پر ٹیسٹ کرنے کی ضرورت ہے ، اور دوبارہ ٹیسٹ کی حمایت نہیں کی جاتی ہے۔ ٹیسٹنگ کا طریقہ ، روبوٹ پر پروگرام کو تعینات کریں ، پہلی بار روبوٹ شروع کریں ، روبوٹ 100.12546328765458 ریکارڈ کرے گا۔ یہ قدر عالمی لغت میں "totalYLMoney_save" کے نام سے ، ایک بار پھر روبوٹ چلائیں ، آپ کو یہ معلوم ہوگا کہ var totalYLMoney = 0 ، یہ متغیر totalYLMoney ابتدائیہ کے بعد بھی لغت سے پڑھتا ہے ، اس کی حکمت عملی کو پہلی بار چلنے پر ذخیرہ کیا گیا ہے۔
عام طور پر ، طریقہ کار کی کئی اقسام ہیں ، یہاں ایک سادہ سا بھیج دیا گیا ہے ، خیال بھی گروپ میں بڑے دیوتا کی طرف سے فراہم کیا گیا ہے ، یہاں میں وضاحت کرنے کے لئے ذمہ دار ہوں۔
اور پھر یہ ہے کہ آپ کو یہ معلوم کرنا چاہئے کہ آپ کو کیا کرنا چاہئے.
مثال کے طور پر: مثال کے طور پر، ابتدائی سکے کی قیمت 10 یوآن/ایک ہے، اکاؤنٹ میں 5 سکے اور 100 پیسے ہیں۔ ایک مقررہ مدت کے دوران میں نے اوسطاً 15 یوآن/ایک کی قیمت پر 3 سکے خریدے۔ اس مدت کے اختتام پر، سکے کی قیمت 20 یوآن/ایک تک پہنچ گئی ہے۔ اس وقت میرا اکاؤنٹ ہے: 8 سکے اور 55 پیسے۔ پھر ہم اوپر کے طریقہ کار کے مطابق اس مدت کے دوران تجارت کے منافع اور نقصان کا حساب لگاتے ہیں ((زیادہ سے زیادہ سمتوں میں کام کریں، اسی طرح کا کام کریں) ۔) Profit = (8 - 5) * 20 + (55 - 100) = 60 + (-45) = 15 اس حساب کا طریقہ منافع 15 یوآن ہے۔ (نوٹ: اس وقت آپ کی آمدنی فلوٹنگ ہے ، کیونکہ اگر اس وقت کرنسی کی قیمت میں بہت زیادہ کمی واقع ہوتی ہے تو ، شاید آپ نہ صرف منافع حاصل نہیں کریں گے ، بلکہ آپ کو نقصان بھی ہوگا ، اور یقینا your آپ کا نقصان بھی فلوٹنگ ہوگا ، کیونکہ اس وقت آپ کی آمدنی کرنسی کی قیمت کے ساتھ چلتی ہے ، اس کی وجہ زیادہ فلیٹ اسٹاک کرنا ، بیگ کرنا ہے) اس کے علاوہ ، اگر سکے کی قیمت 20 یوآن / ٹن ہے ، تو اگر آپ 20 یوآن کے لئے تین سکے فروخت کرتے ہیں ، جو 15 یوآن کی قیمت پر خریدتے ہیں ، تو اس وقت اکاؤنٹ یہ ہے: 5 سکے ، 115 یوآن ؛ یا پھر مندرجہ بالا الگورتھم: منافع = (5 - 5) * 20 + (115 - 100) = 15 ، منافع اب بھی 15 یوآن ہے ، فرق یہ ہے کہ اگر ابتدائی ہولڈنگ کرنٹ کی قدر میں کمی کو مدنظر نہ رکھا جائے تو منافع قیمت کے ساتھ نہیں بدلتا ہے۔
اکاؤنٹ منافع: (اب سکے x اب قیمت + اب پیسے) - (ابتدائی سکے x ابتدائی قیمت + ابتدائی پیسے)
اس مثال کو بھی استعمال کریں: مثال کے طور پر، 10 یوآرن کی ابتدائی قیمت پر، اکاؤنٹ میں 5 یوآرن شروع ہوئے، 100 یوآرن۔ کچھ عرصے کے دوران میں نے اوسطاً 15 یوآرن کی قیمت پر 3 یوآرن خریدے۔ اس وقت کے اختتام پر، قیمت 20 یوآرن تک پہنچ گئی۔ اس وقت میرا اکاؤنٹ ہے: 8 یوآرن، 55 یوآرن۔ Profit = (8 * 20 + 55) - (5 * 10 + 100) = 215 - 150 = 65 اس حساب کے طریقہ کار میں منافع 65 یوآن ہے۔ اسی طرح میں نے 20 یوآن کے برابر میں خریدے گئے 15 کے تین سکے فروخت کیے ہیں۔ اس وقت اکاؤنٹ یہ ہے: 5 سکے ، 115 پیسہ ، دوبارہ حساب لگائیں۔ منافع = (5 * 20 + 115) - (5 * 10 + 100) = 215 - 150 = 65
مندرجہ بالا دو طریقوں کا موازنہ کرنا ، ایک آمدنی 15 ، ایک آمدنی 65 ، دراصل یہ دیکھنا مشکل نہیں ہے۔ پہلا طریقہ ابتدائی کرنسی ہولڈر کی قدر میں اضافے کے نتیجے میں ہونے والے منافع کو نظرانداز کرتا ہے۔ دوسرا الگورتھم یہ ہے کہ جب منافع اور نقصان کا حساب لگایا جائے تو ، ابتدائی کرنسی ہولڈر کی قدر میں اضافے کے نتیجے میں ہونے والے نقصان کو بھی شامل کیا جائے۔ احساس اکاؤنٹ منافع کا حساب لگانے کے لئے استعمال کیا جاتا ہے. فلوٹنگ منافع ایک مدت کے دوران تجارت سے حاصل ہونے والے منافع اور نقصانات پر لاگو ہوتا ہے۔ یہ کچھ تجربات ہیں جن میں چھوٹی چھوٹی خوابوں کا خلاصہ کیا گیا ہے ، جیسے غلطیاں ، براہ کرم آقا کی طرف اشارہ کریں ، پہلے ہی شکریہ ^-^
اس کے علاوہ ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔
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显示到一组里
ٹیسٹ کا کوڈ:
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]) + "`");
}
پہلی تصویر میں دیکھا جا سکتا ہے کہ ہم اس سیشی1 ٹیبل میں صفحہ بندی کر رہے ہیں، ٹیبل کے اعداد و شمار کی شکل var table1 اور var table2 ہے، دونوں متغیرات کا اعلان کیا گیا ہے۔ یقینا table1 ٹیبل کے اندر تمام مواد مقررہ سٹرنگ ہیں۔
نوٹ کرنا ضروری ہے کہ JSON.stringify (([table1,table2]) فنکشن کے سامنے اور بعد میں
براہ راست ٹیسٹ کرنے کے لئے، میں نے ایک متحرک تبدیلی کی پیداوار کی شرح کا استعمال کرتے ہوئے ایک بے ترتیب اعداد و شمار کا تجزیہ کیا ہے، جس میں چارٹ پر پیداوار کی وکر دکھانے کے لئے استعمال کیا جاتا ہے؛ اوپر کوڈ:
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");
}
لیوکسنگوئیمیں نے ایک بار آپ کو بتایا تھا کہ میں نے آپ کے لئے ایک آرڈر کیا ہے اور میں نے آپ کے لئے ایک آرڈر کیا ہے؟
لوئسیہ ایک تعریف ہے!
شدید بارشاچھی چیزیں... بہت سی چیزیں جو API دستاویزات میں نہیں کہی گئی ہیں...
موسم خزاںشمیم نے ہمیشہ اچھی چیزیں مرتب کیں
شارٹ لائن پر شاہ جیون نے اعلی قیمت کی حکمت عملی فروخت کیاچھی چیز!
چھوٹا سا خوابآپ کا شکریہ۔ https://dn-filebox.qbox.me/bf52888dc68aba5326c403f2280994e81fbce2ee.png سبق کا لنک: https://www.botvs.com/bbs-topic/475
چھوٹا سا خوابیہ سیکھنے کے لئے آسان ہے!