আবিষ্কারকের পরিমাণগত রসায়ন ডায়েরি (১) সমাপ্ত

লেখক:ছোট্ট স্বপ্ন, তৈরিঃ ২০১৬-০৫-২৩ ২৩ঃ১০ঃ৪৬, আপডেটঃ ২০১৯-০৮-০১ ১০ঃ৩১ঃ২৫

আগে খুব কমই লগ লিখতাম, এখন মনে হয় প্রতিদিন কিছু নথিভুক্ত করা দরকার, তাই না? কিছু লিখুন? পড়াশোনা করুন, কাজ করুন! (আসলে প্রায় সবই।) আজ প্রতিদিনের কাজ ছাড়াও, গ্রাহকের জন্য একটি মডিউল লিখতে, পুরো কোডটি পুনরায় পরীক্ষা করতে কোনও সমস্যা নেই, গ্রাফটিতে অদ্ভুতভাবে অদ্ভুত একটি সূচক লাইন ব্যতীত, বাকিগুলি স্বাভাবিক বলে মনে হচ্ছে, ঠিক আছে, অনুলিপি পরীক্ষা করা হয়েছে। সমস্ত ধরণের সমস্যা আসে।

প্রশ্ন ১ঃ

  • 1, চার্ট K লাইন কখনও কখনও একটি BAR অনুপস্থিত হয়, একটি BUG খুঁজছে; সমস্যা পাওয়া যায়, বিশ্লেষণ করা হয়, অ্যানালগ ডিস্ক দিয়ে পরীক্ষা করার সময় কোনও ডেটা গ্রহণ করা হয় না; ডেটা পাওয়ার সময়, 2 টি BAR পাস হয়ে গেছে, তাই সর্বশেষতম ডেটা চার্টে আঁকা হয়েছে, যার ফলে একটি বা একাধিক মধ্যবর্তী ব্যবধান অতিক্রম করেছে।
  • ২, কিছুক্ষণের জন্য চালান ((১ মিনিটের কে লাইন চক্রের জন্য) কোন সমস্যা নেই, আবার চেষ্টা করুন ((৩০ মিনিটের কে লাইন চক্রের জন্য) সমস্যাটি আসে, অদ্ভুতভাবে দেখা যায়ঃ

TypeError: cannot read property length of null duk_hobject_props.c:2258 WToneAndWTtwo __FIL এই ত্রুটি রিপোর্ট করা হয়।

নিচে দেখলাম যে WToneAndWTtwo ফাংশনের ভুল হওয়া উচিত ছিল, এবং আমি একটি variable এর length নামের একটি property পড়লাম, যেমন var name = null; তারপর আমি name.length পাঠ করা হয়েছে, তাই পুরো কোডের মধ্যে length কল করার জায়গা খুঁজে পাওয়া যায়।

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

ভাবুন, ওহ! এখন আমি এই ফাংশনে length পর্যন্ত ব্যবহার করা সমস্ত ভেরিয়েবল ঢুকিয়েছি, পরীক্ষা করে দেখুন, কোন null bug এড়ানো যাবে না। আমি 30 মিনিটের জন্য কে-লাইন পরীক্ষা করেছি, এবং এটি আবার সরাতে হবেঃ

TypeError: null duk_hobject_props.c:2258 WToneAndWTtwo এর সম্পত্তি length পড়তে পারেনিফাইল#১৩১৫ ত্রুটি রিপোর্ট

বাস্ট বুঝতে পারছে না! ধৈর্য ধরুন! বাইরে গিয়ে এক চক্র ঘুরে চিন্তাভাবনা পরিবর্তন করুন নাহলে হয়তো আপনি বুঝতে পারবেন! ((Z আমাকে শিখিয়েছে) ◎ এক চক্র, এটি কার্যকর ছিল। আমি ফিরে এসে ভাবলাম, যদি ইনডিকেটর কল করা হয়, তাহলে ইনপুট করা প্যারামিটারটি null হয়, ইনডিকেটর চালানোর সময় একটি ভুল ঘটেছে।

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, CSS, DOM শেখার সময় দেখা গেছে, ব্রাউজার বিচার করুন এই অ্যাপ্লিকেশনের কিছু এপিআই ব্যবহার করা হয়েছে।

প্রশ্ন ৩ঃ

অন্যদিকে, একটি গ্রুপের অনুরোধে, পার্থক্য পর্যবেক্ষণে কিছুটা পরিবর্তন আনতে সহায়তা করুন, যা আসলে একটি পার্থক্য পরিসীমা পরীক্ষা করে এবং উইকিমিডিয়াটি ধাক্কা দেয়, যা খুব সহজ।

 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

কোডের ফাঁকা লাইনগুলির মধ্যে যোগ করা কোডটি খুব সহজ এবং সম্ভবত অসম্পূর্ণ।

প্রশ্ন ৪ (প্রকৃতপক্ষে সমস্যা নয়, একটু রেকর্ডিং শিখুন)

এই দিনগুলিতে ভবিষ্যতের কৌশলগুলি শেখার জন্য, এটি স্থিরের চেয়ে জটিল, (ভাগ্যক্রমে Z বড় ভবিষ্যতের ট্রেডিং টেমপ্লেট রয়েছে, অন্যথায় লেনদেনের বিবরণ লিখতে যথেষ্ট >____

  • exchange.GetPosition() // হোল্ডিংয়ের তথ্য পেতে ব্যবহৃত হয়, লক্ষ্য করুন যে এই ফাংশনটি একটি অবস্থান কাঠামোর একটি অ্যারে ফেরত দেয় যা হোল্ডিংয়ের নির্দিষ্ট তথ্য রয়েছে।
  • exchange.SetMarginLevel (মার্জিন লেভেল) // এই ফাংশনটি হল লিভারেজ সেট করা; নির্দিষ্ট পরামিতি মার্জিন লেভেল নির্বাচন ((৫ গুণ? ১০ গুণ?
  • exchange.SetDirection ((Direction) // এটি একটি গুরুত্বপূর্ণ এপিআই, এটি নীচের ক্রমের আগে কল করা হয়, কারণ আমরা মাত্র চারটি অপারেশন চালু করেছি ((বিক্রয় খুলুন...), এই ফাংশনটি এই অপারেশনগুলি সেট করে ((তবে কিছু অতিরিক্ত বিষয় রয়েছে), সিটিপির দ্বিতীয় পরামিতিটি এখনও গবেষণা করা হয়নি।
  • 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) 看看。

প্রশ্ন ৫ঃ আজকে আমার এক বন্ধু কোড লিখেছে, 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;
}

আমি রিটার্নেট করেছি এবং দেখেছি যে ঘুম ফাংশনটি রিটার্নেটে ১ সেকেন্ডের মধ্যে চলবে ((প্রথম এবং পরবর্তী সময় 1000 এর মধ্যে পার্থক্য)), এবং তারপরে এই পরীক্ষার কোডটির সময় ত্রুটিটি খুব বেশি, তবে যদি এটি অ্যালগরিদম ড্রাইভের সাথে চলে তবে মূলত ত্রুটিটি ১ মিলিসেকেন্ডের মধ্যে। সম্ভবত রিটার্নেট সিস্টেমটি বালি বাক্সের মডেলের অন্তর্ভুক্ত, এর মধ্যে চলমান অ্যালগরিদমের কারণে ত্রুটি। সিমুলেশনটি খুব ছোট ত্রুটি ছিল ((১ সেকেন্ডের মধ্যে) । তবে আমার বন্ধুরা বলেছিল যে যদিও অ্যালগরিদম ত্রুটি ছিল তবে এটি আমার সাথে চালিত হয়েছিল। আমি ব্যক্তিগতভাবে সমস্যাটি পরিচালনা করতে পেরেছি বলে মনে করি (যেমনটি আমরা পরীক্ষা করেছি), আমার হোস্টটি নেটিভ মেশিনে চলছে এবং তার হোস্টটি ভিপিএস-এ রয়েছে। মনে হচ্ছে সমস্যাটি, তবে এটিও নয়। দয়া করে আমার মাথাটি পরিষ্কার করুন।

প্রশ্ন ৬ঃ আমার এক বন্ধু আজ সকালে আমাকে বলেছিল যে তার হোস্টারটি মধ্যরাতে ভেঙে পড়েছে এবং সে আমাকে সিস্টেম লগ পাঠিয়েছে। আমি Z কে খবর দিয়েছি। সমস্যাটি খুঁজে পেয়েছি, আমি এখানে রেকর্ড করছি।

- এইটা একটা ডায়েরি।

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

goroutine 0 [idle]:

goroutine 1 [select, 207 minutes]:

প্রথম লাইন থেকে দেখা যায় থ্রেড জেনারেশন ব্যর্থ হয়েছে, রিসোর্স অস্থায়ীভাবে অনুপলব্ধ ((অল্প) ); সম্ভবত এটি একটি মেমরি সমস্যা হওয়া উচিত, সম্ভবত মেমরির অভাবের কারণে। সমাধানঃ ১। চালিত রোবট নীতি কোড পরীক্ষা করে দেখুন, ব্যবহার করা সম্পদের মুক্তি নেই, মাল্টি-থ্রেডের API ব্যবহার করা হয়েছে কিনা। ২, ইউলিমিট কমান্ড ব্যবহার করে হোস্টের সিস্টেমের সীমাবদ্ধতা পরীক্ষা করুন ((লিনাক্স)) । এই ব্লগটি দেখতে পারেনঃ (ব্লগ ঠিকানা)http://smilejay.com/2012/04/fork_resource/] ৩। সিস্টেম মেমরি ব্যবহারের দিকে নজর দিন।

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 network timeout WSARecv Connect GetAddr no such reset httppreceived EOF reused ); ফাংশনটি অপব্যবহার করা হয়েছে, ফাংশনটি শুধুমাত্র একবার কল করা প্রয়োজন, এটি লুপ কাঠামোতে লেখা যাবে না।

প্রশ্ন ৭ঃ _C (() ফাংশন, _N (() ফাংশন, _G (() ফাংশনের সহজ সংক্ষিপ্তসার।

  • _C() ফাংশন

ব্যাখ্যাঃ এই ফাংশনটি মূলত এপিআই ত্রুটিমুক্ত করার জন্য ব্যবহৃত হয়, যেমন exchange.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 ডকুমেন্টেশনে সংরক্ষণ করা যেতে পারে। কেভি টেবিল, স্থায়ীভাবে স্থানীয়ভাবে সংরক্ষিত ফাইল, প্রতিটি বোটের জন্য একটি পৃথক ডাটাবেস, পুনরায় চালু বা হোস্ট লগ আউট পরে বিদ্যমান K অবশ্যই সংখ্যা বা স্ট্রিং হতে হবে, ছোট বা বড়, এবং V যেকোনো বিষয়বস্তুর জন্য যা JSON-এ সেরিয়েবল হতে পারে _G ((num, 1); // একটি গ্লোবাল ভেরিয়েবল নাম্বার সেট করুন, যার মান 1 _G ((num, ok); // একটি গ্লোবাল ভেরিয়েবল নাম্বার পরিবর্তন করুন, যার মান স্ট্রিং ok _G ((num, null); // গ্লোবাল ভেরিয়েবল num মুছে ফেলা হয়েছে _G ((num); // গ্লোবাল ভেরিয়েবল 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 ইনস্টল করার পরেও অভিধান থেকে পাঠ করা হয়েছে যা নীতিটি প্রথমবারের মতো চালানোর সময় সংরক্ষণ করা হয়েছে।

প্রশ্ন ৮ঃ কৌশলগত লাভ-ক্ষতির হিসাব সম্পর্কে কিছু ধারণাঃ

প্রায়শই আমি নতুন শিক্ষার্থীদের গ্রুপে দেখি এবং তাদের কৌশলগত লাভ-ক্ষতির অ্যালগরিদম সম্পর্কে জিজ্ঞাসা করি। সাধারণভাবে সমাধানের উপায়গুলি বেশ কয়েকটি, এখানে একটি সহজ পাঠানো হয়েছে, ধারণাটিও গ্রুপের প্রধান দেবতা দ্বারা সরবরাহ করা হয়েছে, এখানে আমি ব্যাখ্যা করার জন্য দায়বদ্ধ।

  • ফ্লোটিং মুনাফাঃ

ফ্লোটিং মুনাফা হচ্ছে, x এর বর্তমান মূল্য + (বর্তমান টাকা - প্রাথমিক টাকা)

উদাহরণস্বরূপঃ উদাহরণস্বরূপ, আমার অ্যাকাউন্টের শুরুতে 10 ইউএসডি, অ্যাকাউন্টের শুরুতে 5 ইউএসডি, 100 ইউএসডি। কিছু সময়ের মধ্যে, আমি 15 ইউএসডি / এর গড় মূল্যে 3 টি মুদ্রা কিনেছি। এই সময়ের শেষে, মুদ্রার দাম 20 ইউএসডি / তে পৌঁছেছে। এই মুহুর্তে আমার অ্যাকাউন্টটিঃ 8 টি মুদ্রা, 55 ইউএসডি। সুতরাং আমরা উপরের পদ্ধতি অনুসারে এই সময়ের মধ্যে ব্যবসায়ের লাভ এবং ক্ষতি গণনা করি ((বহু দিকের জন্য, একই দিকের কাজ করুন)) । Profit = (8 - 5) * 20 + (55 - 100) = 60 + (-45) = 15 এই গণনার পদ্ধতি লাভ 15 ইউয়ান। (দ্রষ্টব্যঃ এই মুহুর্তে আপনার উপার্জন উদ্বায়ী, কারণ যদি এই মুহুর্তে মুদ্রার দাম খুব বেশি কমে যায় তবে আপনি কেবল লাভ করবেন না, তবে আপনি অর্থও হারাবেন। অবশ্যই আপনার ক্ষতিও উদ্বায়ী, কারণ আপনার লাভ এই মুহুর্তে মুদ্রার দামের সাথে সাথেই উদ্বায়ী হয়, কারণ আপনি খুব সমতল ভাঙ্গন, পকেট হারাতে পারেন) অতিরিক্ত পয়েন্ট, যদি মুদ্রার মূল্য 20 ইউএসডি / টাকায় হয়, তাহলে প্যারিস, অর্থাৎ 20 ইউএসডি বিক্রি করে 15 ইউএসডি তে 3 টি মুদ্রা কেনা হয়, এই মুহুর্তে অ্যাকাউন্টটি হলঃ 5 টি মুদ্রা, 115 ইউএসডি; অথবা উপরের অ্যালগরিদমঃ মুনাফা = (5 - 5) * 20 + (115 - 100) = 15, মুনাফা এখনও 15 ইউয়ান, পার্থক্যটি হ'ল যদি প্রাথমিক মুদ্রা ধারণের অবমূল্যায়ন বিবেচনা না করা হয় তবে মুনাফা দামের সাথে পরিবর্তিত হয় না।

  • অ্যাকাউন্ট মুনাফাঃ

অ্যাকাউন্ট মুনাফাঃ (বর্তমান মুদ্রা x বর্তমান মূল্য + বর্তমান অর্থ) - (প্রাথমিক মুদ্রা x প্রাথমিক মূল্য + প্রাথমিক অর্থ)

উপরের উদাহরণটিও ব্যবহার করুনঃ উদাহরণস্বরূপ, আমার অ্যাকাউন্টটি 10 ইউএসডি / টাকার সাথে শুরু হয়েছিল এবং আমি 5 টাকার সাথে শুরু করেছি, 100 ডলার। কিছু সময়ের মধ্যে আমি 3 টি টাকাগুলি 15 ইউএসডি / টাকার গড় মূল্যে কিনেছি। এই সময়ের শেষে, টাকাগুলির দাম 20 ইউএসডি / টাকায় বেড়েছে। এখন আমার অ্যাকাউন্টটিঃ 8 টাকাগুলি, 55 ডলার। Profit = (8 * 20 + 55) - (5 * 10 + 100) = 215 - 150 = 65 এই গণনার পদ্ধতিতে মুনাফা 65 ইউএস ডলার। একইভাবে আমি 15 এর জন্য 3 টি মুদ্রা কিনেছি এবং 20 ইউএস ডলার বিক্রি করেছি। এই মুহুর্তে অ্যাকাউন্টটি হলঃ 5 টি মুদ্রা, 115 টাকা, আবার গণনা করুন। মুনাফা = (5 * 20 + 115) - (5 * 10 + 100) = 215 - 150 = 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]) + "`");
}

imgপ্রথম চিত্রটি দেখায় যে আমরা এই টেবিলের মধ্যে একটি পাতা তৈরি করছি ceshi1। টেবিলের ডেটা ফর্ম্যাট হল var table1 এবং var table2। এই দুটি ভেরিয়েবল ঘোষিত। অবশ্যই table1 টেবিলের সমস্ত বিষয়বস্তু স্থির স্ট্রিং। মনে রাখবেন যে JSON.stringify (([table1,table2]) ফাংশনের আগে এবং পরে ` যুক্ত করতে হবে; অন্যথায় টেবিলটি প্রদর্শিত হবে না। অবশ্যই, আমরা সারণী দিয়ে কিছু ডেটা গতিশীলভাবে প্রদর্শন করতে চাই, এটি সর্বদা স্থির পাঠ্য সামগ্রী হতে পারে না। table2 এই বিভাগে দুটি পরীক্ষার ডেটা রয়েছে, value1, value2 ।imgনতুন শিক্ষার্থীরা কোডটি অনুলিপি করতে পারে, নিজেরাই চেষ্টা করতে পারে, পরিবর্তন করতে পারে।

প্রশ্ন ১০ঃ একজন ব্যবহারকারী একটি রিটার্ন হার চার্ট চান, সম্ভবত বর্তমানে উদ্ভাবক দ্বারা পরিমাণযুক্ত এপিআই ডকুমেন্টেশন বর্ণনা তুলনামূলকভাবে সহজ, চার্ট ব্যবহার করা তুলনামূলকভাবে কঠিন হতে পারে। এখানে আমি খোলা লিখেছি, ক্যারেট ফেলেছি।

সরাসরি পরীক্ষা করা যায়, আমি র্যান্ডম নাম্বার অ্যানালিটিক্স ডায়নামিক পরিবর্তন আয়তন ব্যবহার করি যা আয়তন কার্ভকে চার্টে প্রদর্শন করতে ব্যবহৃত হয়; কোডঃ

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-অক্ষের মান প্রদর্শনের সীমাবদ্ধতা যা একটি ২-অঙ্কের বিট সংরক্ষণ করে। valueSuffix:%' হল টিপ বক্সের শেষে প্রদর্শিত বিষয়বস্তু এবং % এই চিহ্নটি যোগ করা হয়।

আরো

লিউক্সিংহুইছোট্ট ছোট্ট স্বপ্নের শিক্ষক, দয়া করে বলুন, অর্ডার দেওয়ার পরে যদি অর্ডারটি সম্পূর্ণ না হয় তবে তা বাতিল করতে হবে, কিভাবে করব?

লুইসএটা অবশ্যই একটি প্রশংসা!

প্রচণ্ড বৃষ্টিভাল জিনিস... অনেক কিছুই এপিআই ডকুমেন্টেশনে বলা হয় না।

পাতা পড়েছেশেয়ারমুনের সব ভালো জিনিস।

শর্ট লাইন ওয়াং উইন উচ্চমূল্যের কৌশল বিক্রি করেভাল জিনিস!

ছোট্ট স্বপ্নদয়া করে। https://dn-filebox.qbox.me/bf52888dc68aba5326c403f2280994e81fbce2ee.png টিউটোরিয়াল লিঙ্কঃ https://www.botvs.com/bbs-topic/475

ছোট্ট স্বপ্নএটা সহজেই শেখা যায়!