موجد کی کیمیائی کیمیائی ڈائری (۱) مکمل

مصنف:چھوٹا سا خواب, تخلیق: 2016-05-23 23:10:46, تازہ کاری: 2019-08-01 10:31:25

پہلے تو بہت کم لوگ ڈائجسٹ لکھتے تھے، اب تو لگتا ہے کہ ہر روز کچھ نہ کچھ نوٹ کرنا پڑتا ہے، کیا آپ کو کچھ نہ کچھ لکھنا پڑتا ہے؟ پڑھنا، کام کرنا! (دراصل تقریباً سب کچھ۔) آج کل روزمرہ کے کام کے علاوہ، گاہکوں کو ایک ماڈیول لکھنا، پورے کوڈ کی جانچ پڑتال کرنا کوئی مسئلہ نہیں ہے۔ چارٹ پر ایک عجیب و غریب اشارے کی لائن کے علاوہ، باقی سب کچھ معمول کی طرح لگتا ہے، ٹھیک ہے، ماڈیول ٹیسٹنگ۔ ہر طرح کے مسائل آتے ہیں۔

سوال نمبر ایک:

  • 1، گراف K لائنیں کبھی کبھی ایک BAR کی کمی محسوس کرتی ہیں، BUG کی تلاش میں ہیں۔ مسئلہ مل گیا، تجزیہ کیا، اور جب ہم انوکھے ڈسک کے ساتھ ٹیسٹ کر رہے تھے تو کوئی ڈیٹا موصول نہیں ہوا تھا۔ جب اعداد و شمار موصول ہوتے ہیں تو ، 2 بار گزر چکے ہیں ، لہذا تازہ ترین اعداد و شمار چارٹ پر پینٹ کیے گئے ہیں ، جس کے نتیجے میں ایک یا زیادہ وقفے گزر چکے ہیں۔
  • 2، کچھ دیر کے لئے چلائیں (ایک منٹ کی لائن سائیکل) کوئی مسئلہ نہیں، پھر کوشش کریں (تیس منٹ کی لائن سائیکل) مسئلہ آتا ہے، اور حیرت انگیز طور پر:

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 of null duk_hobject_props.c:2258 WToneAndWTtwo نہیں پڑھ سکتافائل1315 غلطی کی اطلاع

بسٹ کو سمجھ نہیں آرہی ہے!!! صبر کرو! باہر جاؤ اور ایک چکر لگاؤ اور اپنا دماغ تبدیل کرو یا شاید آپ کو احساس ہو جائے! ((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 length of null ~~OK شاید یہی مسئلہ ہے، کوڈ میں ترمیم جاری رکھیں۔

سوال نمبر دو:

ایک اور مسئلہ یہ ہے کہ پہلے سوچا تھا کہ اب کوڈ ریکارڈ کریں:

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 استعمال کیے ہیں۔)

سوال نمبر 3:

اس کے علاوہ ، ایک دوست کی درخواست پر ، قیمتوں میں فرق کی نگرانی میں کچھ تبدیلی کرنے میں مدد کریں ، جو حقیقت میں فرق کی جانچ پڑتال کی حد میں اضافہ ہے ، اور ویکی میٹ کو آگے بڑھانا ، بہت آسان ہے۔

 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

کوڈ کی خالی لائنوں کے درمیان شامل کیا جاتا ہے کوڈ، بہت سادہ ہے، شاید ابھی تک کامل نہیں ہے.

سوال نمبر 4 (یہ مسئلہ نہیں ہے، صرف ایک مطالعہ ریکارڈ)

فیوچر سیکھنے کی حکمت عملی لکھنا ، جو کہ فوری طور پر خریدنے سے کہیں زیادہ پیچیدہ ہے ، (خوش قسمتی سے ، زیڈ بڑے فیوچر ٹریڈنگ ٹیمپلیٹس ہیں ، ورنہ تجارت کی تفصیلات لکھنا کافی ہے >____

  • exchange.GetPosition() // ہولڈنگ کی معلومات حاصل کرنے کے لئے استعمال کیا جاتا ہے، نوٹ کریں کہ یہ فنکشن ایک پوزیشن کی ساخت کا ایک صف واپس کرتا ہے جس میں ہولڈنگ کی مخصوص معلومات ہیں۔
  • exchange.SetMarginLevel ((MarginLevel) // یہ فنکشن لیورز کی سیٹنگ ہے۔ مخصوص پیرامیٹرز MarginLevel منتخب کریں ((5 گنا؟ 10 گنا؟) مختلف قسم کی ، تبادلہ ، خاص طور پر ، کچھ تبدیل نہیں ہوسکتے ہیں ((جیسے سی ٹی پی تجارتی مستقبل)
  • exchange.SetDirection ((Direction) // یہ ایک بہت اہم API ہے، یہ نیچے کی فہرست سے پہلے بلایا جاتا ہے، کیونکہ صرف چار آپریشنز متعارف کرایا گیا ہے ((بچاؤ کھولیں...)) ، یہ فنکشن ان آپریشنز کو ترتیب دیتا ہے ((لیکن کچھ اضافی چیزیں ہیں) ، CTP کے لئے دوسرا پیرامیٹر ابھی تک مطالعہ نہیں کیا گیا ہے۔
  • exchange.SetContractType ((ContractType) // کھلنے یا ختم ہونے سے پہلے ایک تجارت کی سمت (زیادہ؟ خالی؟ برابر؟) ، اور دوسرا تجارت کا واضح معاہدہ (بھید چینی؟ کپاس؟) ہے ، لہذا اس فنکشن کا استعمال کرتے ہوئے معاہدے کی قسم مقرر کریں۔ پیرامیٹر مختلف تبادلے میں مخصوص ہے۔ بنیادی طور پر ان افعال کا استعمال کرتے ہوئے. باقی افعال ایک ہی ہیں.
  • exchange.Buy() // خریدیں
  • exchange.Sell() // فروخت کریں ذیل میں میرے تجربے کا کوڈ ہے، صرف ایک ٹکڑا منتخب کریں (آپ کو بنیادی فنکشن میں نقل کر سکتے ہیں) اور دوبارہ ٹیسٹ کریں.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) 看看。

سوال نمبر 5: آج ایک دوست نے کوڈ کا ایک ٹکڑا لکھا جس میں سوال کیا گیا تھا کہ ، Sleep () فنکشن میں بہت بڑی غلطی ہوئی ہے ، جس سے ہائی فریکوئنسی کی پالیسی متاثر ہوئی ہے۔ دوست نے کوڈ بھیجا ، میں نے بھی کوشش کی ہے۔ اوپر کا کوڈ:

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 ملی سیکنڈ کے اندر ہے۔ شاید ریٹیسٹ سسٹم ایک سینڈ باکس ماڈل کا ہے ، جس میں چلنے والے الگورتھم کی وجہ سے غلطی ہوتی ہے۔

سوال نمبر 6: آج صبح ایک دوست نے مجھے بتایا کہ میرے میزبان کا کام آدھی رات کو خراب ہو گیا ہے۔ اس نے مجھے سسٹم لاگ بھیجا۔ میں نے Z کو اطلاع دی۔ میں نے مسئلہ دریافت کیا اور میں نے اسے یہاں ریکارڈ کیا۔

- یہ ایک ڈائری ہے۔

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 کا استعمال کرتے ہوئے دکھائیں:img

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 کی تعداد میں مسلسل لپیک لگتی ہے ، جس کی وجہ سے حتمی خرابی واقع ہوتی ہے۔

مسئلہ 7: _C (() فنکشن ، _N (() فنکشن ، _G (() فنکشن کا ایک سادہ خلاصہ۔

  • _C() فنکشن

وضاحت: یہ فنکشن بنیادی طور پر 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);
}

نتائج:img

  • _N() فنکشن وضاحت: یہ فنکشن بہت زیادہ عدد کے بعد عدد کو ہینڈل کرنے کے لئے استعمال کیا جاتا ہے، اور چند عدد کو برقرار رکھتا ہے۔ مثال کے طور پر:
function main(){
    var pi = 3.1415926535897;
    Log("使用_N函数 前pi:",pi);
    var piOfDeal = _N(pi,2);
    Log("使用_N函数后 pi:",piOfDeal);
}

نتائج:img

  • _G() فنکشن وضاحت: یہ ایک عالمی لغت کی فہرست ہے جو API دستاویزات میں پیش کی گئی ہے اور محفوظ کی جاسکتی ہے۔ KV ٹیبل، مستقل طور پر مقامی فائلوں کو برقرار رکھنے، ہر روبوٹ کے لئے ایک علیحدہ ڈیٹا بیس، دوبارہ شروع یا مینیجر باہر نکلنے کے بعد بھی موجود ہے K کو ایک عدد یا سٹرنگ کے طور پر لکھا جانا چاہئے، جس میں کوئی فرق نہیں پڑتا ہے کہ بڑے یا چھوٹے، اور V کسی بھی چیز کے لئے استعمال کیا جا سکتا ہے جو JSON ترتیب دے سکتا ہے. _G ((num, 1); // ایک گلوبل متغیر نمبر مقرر کریں، جس کی قدر 1 ہے _G ((num, ok); // ایک عالمی متغیر نمبر کو تبدیل کریں، جس کی قدر سٹرنگ ok ہے _G ((num, null); // عالمی متغیر نمبر کو ہٹا دیں _G ((num); // مجموعی متغیر نمبر کی قدر واپس کرتا ہے _G(); // موجودہ روبوٹ کی شناخت واپس کرتا ہے _G(null); // تمام عالمی متغیرات کو ہٹا دیں
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 ابتدائیہ کے بعد بھی لغت سے پڑھتا ہے ، اس کی حکمت عملی کو پہلی بار چلنے پر ذخیرہ کیا گیا ہے۔

سوال نمبر 8: حکمت عملی کے بارے میں کچھ خیالات۔ منافع اور نقصان کا حساب:

عام طور پر ، طریقہ کار کی کئی اقسام ہیں ، یہاں ایک سادہ سا بھیج دیا گیا ہے ، خیال بھی گروپ میں بڑے دیوتا کی طرف سے فراہم کیا گیا ہے ، یہاں میں وضاحت کرنے کے لئے ذمہ دار ہوں۔

  • فلوٹنگ منافع:

اور پھر یہ ہے کہ آپ کو یہ معلوم کرنا چاہئے کہ آپ کو کیا کرنا چاہئے.

مثال کے طور پر: مثال کے طور پر، ابتدائی سکے کی قیمت 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 ، دراصل یہ دیکھنا مشکل نہیں ہے۔ پہلا طریقہ ابتدائی کرنسی ہولڈر کی قدر میں اضافے کے نتیجے میں ہونے والے منافع کو نظرانداز کرتا ہے۔ دوسرا الگورتھم یہ ہے کہ جب منافع اور نقصان کا حساب لگایا جائے تو ، ابتدائی کرنسی ہولڈر کی قدر میں اضافے کے نتیجے میں ہونے والے نقصان کو بھی شامل کیا جائے۔ احساس اکاؤنٹ منافع کا حساب لگانے کے لئے استعمال کیا جاتا ہے. فلوٹنگ منافع ایک مدت کے دوران تجارت سے حاصل ہونے والے منافع اور نقصانات پر لاگو ہوتا ہے۔ یہ کچھ تجربات ہیں جن میں چھوٹی چھوٹی خوابوں کا خلاصہ کیا گیا ہے ، جیسے غلطیاں ، براہ کرم آقا کی طرف اشارہ کریں ، پہلے ہی شکریہ ^-^

مسئلہ 9: ایک دوست نے دیکھا کہ ایک کھلی پالیسی کی حالت ٹیبل میں ظاہر ہوتی ہے ، لہذا وہ نیچے کی API پر نظر ڈالتا ہے اور پتہ چلتا ہے کہ ایسا لگتا ہے کہ API میں لاگ اسٹیٹس فنکشن نے ایک نئی خصوصیت شامل کی ہے جس میں ٹیبل پینٹ کیا جاسکتا ہے۔ اس دوست نے مجھے ٹیسٹ ٹیسٹ کرنے کے لئے کہا ، اور میں نے بھی یاد رکھا ، تاکہ نئے ساتھیوں کو سیکھنے میں آسانی ہو۔

اس کے علاوہ ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہے۔

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]) + "`");
}

imgپہلی تصویر میں دیکھا جا سکتا ہے کہ ہم اس سیشی1 ٹیبل میں صفحہ بندی کر رہے ہیں، ٹیبل کے اعداد و شمار کی شکل var table1 اور var table2 ہے، دونوں متغیرات کا اعلان کیا گیا ہے۔ یقینا table1 ٹیبل کے اندر تمام مواد مقررہ سٹرنگ ہیں۔ نوٹ کرنا ضروری ہے کہ JSON.stringify (([table1,table2]) فنکشن کے سامنے اور بعد میں ` کو شامل کیا جائے۔ ورنہ ٹیبل ظاہر نہیں ہوگا۔ ہم نے اس کے بارے میں کیا سوچا ہے؟ ہم نے اس کے بارے میں کیا سوچا ہے؟ ہم نے اس کے بارے میں کیا سوچا ہے؟ table2 اس صفحہ بندی میں دو ٹیسٹ کے اعداد و شمار ہیں، value1 、 value2، یہ دونوں اعداد و شمار ہیں۔imgنئے طلباء کوڈ کو کاپی کر سکتے ہیں، اپنے آپ کو آزما سکتے ہیں، تبدیل کر سکتے ہیں؛ یہ یاد رکھنے کے لئے زیادہ مضبوط ہے.

سوال 10: ایک صارف نے واپسی کی شرح کے چارٹ کے بارے میں ایک تبصرہ کیا ، شاید فی الحال ایجاد کنندہ کی طرف سے کیوٹیفائیڈ API دستاویزات کی وضاحت نسبتا آسان ہے ، اور چارٹ کا استعمال کرنا مشکل ہوسکتا ہے۔ یہاں میں نے کھلے عام لکھا ہے ، اور کوٹیشن کو چھوڑ دیا ہے۔

براہ راست ٹیسٹ کرنے کے لئے، میں نے ایک متحرک تبدیلی کی پیداوار کی شرح کا استعمال کرتے ہوئے ایک بے ترتیب اعداد و شمار کا تجزیہ کیا ہے، جس میں چارٹ پر پیداوار کی وکر دکھانے کے لئے استعمال کیا جاتا ہے؛ اوپر کوڈ:

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");
}
  • یہاں ایک مسئلہ ہے جس نے مجھے آدھے دن تک الجھا دیا ، اور میں نے بھی ریکارڈ کیا ہے۔ وقت لکھتے وقت ، یہ ملی سیکنڈ ہونا ضروری ہے ، اس طرح لکھیں: new Date (().getTime (()) یہ ملی سیکنڈ ہے ، اگر ایسا ہے new Date (()) تو ایک چھوٹا سا مسئلہ پیدا ہوتا ہے ، جیسے وقت کی نمائش ، اور ایکس محور میں توسیع کا استعمال نہیں کیا جاسکتا ہے۔ ایک ٹول ٹپ بھی ہے: {xDateFormat: %Y-%m-%d %H:%M:%S, %A,enabled:true,valueDecimals:2,valueSuffix:%}، یہ سیٹنگ معلوماتی مواد کو دیکھنے کے لئے ہے۔ valueDecimals:2 Y محور کی قدر کو ظاہر کرنے کے لئے محدود کرنے کے لئے 2 ہندسوں کا ایک جزو برقرار رکھتا ہے، valueSuffix:%' اشارہ باکس کے آخر میں دکھائے جانے والے مواد کے ساتھ ساتھ اس علامت کو بھی شامل کرتا ہے۔

مزید

لیوکسنگوئیمیں نے ایک بار آپ کو بتایا تھا کہ میں نے آپ کے لئے ایک آرڈر کیا ہے اور میں نے آپ کے لئے ایک آرڈر کیا ہے؟

لوئسیہ ایک تعریف ہے!

شدید بارشاچھی چیزیں... بہت سی چیزیں جو API دستاویزات میں نہیں کہی گئی ہیں...

موسم خزاںشمیم نے ہمیشہ اچھی چیزیں مرتب کیں

شارٹ لائن پر شاہ جیون نے اعلی قیمت کی حکمت عملی فروخت کیاچھی چیز!

چھوٹا سا خوابآپ کا شکریہ۔ https://dn-filebox.qbox.me/bf52888dc68aba5326c403f2280994e81fbce2ee.png سبق کا لنک: https://www.botvs.com/bbs-topic/475

چھوٹا سا خوابیہ سیکھنے کے لئے آسان ہے!