জ্যাভাস্ক্রিপ্ট খেলতে বড় ভাইয়ের সাথে - একটি ক্রয় বিক্রয় অংশীদার তৈরি করুন (৫)

লেখক:ছোট্ট স্বপ্ন, তৈরিঃ 2017-03-13 12:53:50, আপডেটঃ 2017-10-11 10:37:32

এই ভিডিওতে, আপনি আপনার বন্ধুদের সাথে জাভাস্ক্রিপ্টের সাথে খেলতে পারেন এবং একটি ছোট অংশীদার তৈরি করতে পারেন যা কেনা বেচা করবে।

জেএস ব্যবহার করে কোয়ালিফাইড রোবটের জন্য একটি টিউটোরিয়ালঃhttps://www.fmz.com/bbs-topic/705(মার্ক আগে) ।
  • ১, কে-লাইন ডেটা ফান্ডামেন্টাল, কোয়ালিটি ট্রেডিংয়ে এই ডেটা ব্যবহারের সমস্যা।

    • কে-লাইন ডেটা কিঃ

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

      একটি নির্দিষ্ট চিত্র ব্যাখ্যা করে না, আমরা K-line এর ডেটা স্ট্রাকচার দেখি যা JS ভাষা ব্যবহার করে সংজ্ঞায়িত করা হয়েছেঃ

      {
          Time    :   1487034000000, // 一个时间戳, 精确到毫秒,与Javascript的 new Date().getTime() 得到的结果格式一样
          Open    :   3425,          // 开盘价
          High    :   3446,          // 最高价
          Low     :   3423,          // 最低价
          Close   :   3438,          // 收盘价
          Volume  :   177657.99,     // 交易量
      }
      

      এখন আমরা GetRecords ফাংশন কল করার সময় যে ডেটা সংগ্রহ করি তা দেখিঃ (আগে exchange.SetContractType কল করতে ভুলবেন না ((rb1705); নির্দিষ্ট চুক্তির ধরন যা আপনি পরিচালনা করতে চান)

      [
          {"Time":1487034000000,"Open":3425,"High":3446,"Low":3423,"Close":3438,"Volume":177657.9999999999},
          {"Time":1487035800000,"Open":3438,"High":3448,"Low":3382,"Close":3385,"Volume":494882},
          {"Time":1487037600000,"Open":3385,"High":3398,"Low":3383,"Close":3394,"Volume":83656.00000000015}
      ]
      

      দেখা যায় যে, K-রেখা তথ্য একটি বস্তুর অ্যারে, প্রতিটি বস্তুর একটি K-রেখা বার, যা এই Bar চক্রের মধ্যে সর্বোচ্চ মূল্য, সর্বনিম্ন মূল্য, খোলা মূল্য (যেমন এই K-রেখা টাইমলাইনের শুরুতে মূল্য), বন্ধ মূল্য (যেমন এই K-রেখা চক্রের সময় শেষ হওয়ার মূল্য), সম্পন্ন লেনদেন (যেমন চক্রের মধ্যে লেনদেন) অন্তর্ভুক্ত; এবং এই চক্রটি হল K-রেখা চক্র। উদাহরণস্বরূপ, উপরের অ্যারেতে থাকা তথ্যগুলি কিভাবে নির্ধারণ করে যে K-রেখাটি কত দীর্ঘ? এটি 2 বারের সময়সীমার সাথে গণনা করা যেতে পারেঃ 1487035800000 - 1487034000000 সুতরাং 1800000 / 1000 / 60 = 30 (মিনিট), এই K-রেখা চক্রটি 30 মিনিট।

      প্রথম সহজ প্রশ্নটি হলঃ K-line ডেটা ব্যবহার করার সময়, অ্যারে দৈর্ঘ্য উপেক্ষা করা হয়। এটি অ্যারে অ্যাক্সেস ওভারল্যাপের কারণ হয় ((এই ধরনের BUG পূর্ববর্তী সি প্রোগ্রামগুলি লেখার সময় খুব সাধারণ ছিল) । সুতরাং আমরা K-line ব্যবহার করার আগে এটি সম্পর্কে বিচার করতে হবে। উদাহরণস্বরূপ, কে-লাইনঃ exchange.SetContractType ((rb1705); // সুইচিং সেটিং স্ক্রুড স্টিল 1705 চুক্তির জন্য। var records = exchange.GetRecords ((); // rb1705 স্ক্রুড স্টীল চুক্তির ডিফল্ট কে লাইন চক্রের ডেটা পাওয়া যায়। এক্সচেঞ্জের এপিআইতে কতটি রুট বার পাওয়া যায় তার উপর নির্ভর করে। সুতরাং শুরুতে যদি আরও বেশি কে-লাইন বার প্রয়োজন হয় তবে প্রোগ্রামটিকে কিছু সময় সংগ্রহ করতে হবে। এবং প্রোগ্রামের মধ্যে যথেষ্ট পরিমাণে সংগ্রহ করা হবে কিনা তা বিচার করতে হবে।

      if(records.length < n){    // n 就是我们限定的 n线数量。
          return;                // 当前函数返回。
      }
      

      আমি মনে করি, এটা খুবই গুরুত্বপূর্ণ। K-line এর শেষ Bar-এর ডেটা, Time, Open এবং Close বৈশিষ্ট্যগুলি ছাড়া অন্যান্য বৈশিষ্ট্যগুলি পরিবর্তনের সম্ভাবনা রয়েছে। K-রেখা নিয়ে কাজ করার সময় নবাগতদের অনেক বিভ্রান্তি হতে পারে কারণ তারা বুঝতে পারে না। উদাহরণস্বরূপ, পূর্ববর্তী অধ্যায়টি, গড় রেখার ক্রস সম্পর্কে আলোচনা করেছে।

      তৃতীয় প্রশ্নঃ কে-লাইনের চক্রের সময়সীমা হ'ল এই চক্রের শুরু মুহূর্ত, সময়সীমাটি একটি মিলিসেকেন্ড, যার মান 0। সময়সীমাটি 1 জানুয়ারী, 1970 এর প্রতিনিধিত্ব করে (নির্দিষ্ট প্রোগ্রাম লেখার সময় নির্ধারণ করার জন্য সময় অঞ্চলটি বিবেচনা করা দরকার) । এই বাক্যটি ব্যবহার করেw3schoolঅথবা BotVS Sandbox সিস্টেমে পরীক্ষা করুনঃ

      var arr = new Date(0);
      

      এটি দেখানো হয়েছেঃ

      Thu Jan 01 1970 08:00:00 GMT+0800 (CST) // প্রদর্শিত হচ্ছে পূর্ব আট সময় অঞ্চল এই মানটি ১৯৭০ সাল থেকে এখন পর্যন্ত যোগ করা হয়েছে (প্রতি ১ সেকেন্ডে ১০০০ যোগ করা হচ্ছে, কারণ ১ সেকেন্ড ১০০০ মিলি সেকেন্ড) । এখানে একটি ছোট্ট কৌশল আছেঃ টাইমম্যাপ যেহেতু K-রেখা চক্রের জন্য নির্ধারিত K-রেখার প্রতিটি Bar এর জন্য অনন্য, তাই যদি টাইমম্যাপ পরিবর্তিত হয় তবে আপনি নিশ্চিত হয়ে উঠবেন যে আপনি সর্বশেষতম K-রেখা ডেটা পেয়েছেন। এটি আসলে K-রেখা ডেটা পরিচালনা করার ক্ষেত্রেও দরকারী।

  • ২, সূচক কলের বিবরণ, প্রায়শই দেখা যায় এমন সমস্যাগুলি সন্তুষ্ট চক্র, রিটার্ন মান, পরামিতি

    প্রোগ্রামিং বা কোয়ালিফাইিং কৌশল লেখার সময় অনেকগুলি সূচক ফাংশন ব্যবহার করা হয়। তুলনামূলকভাবে ভাল সূচক সংগ্রহস্থলটি তালিব সংগ্রহস্থল রয়েছে, যার বিভিন্ন সংস্করণ রয়েছে, আমরা এখানে জেএস সংস্করণ ব্যবহার করি।

    লাও বাই প্রথমবারের মতো সূচক সংগ্রহস্থলের ফাংশন ব্যবহার করার সময়ও অনেক ভুল হয়েছিলঃ

    • প্রথমত, প্যারামিটার পিরিয়ড (প্যারামিটার প্যারামিটার, কে লাইন পিরিয়ড থেকে আলাদা, কে লাইন পিরিয়ড কত, গণনা করা হয়েছে যে সূচক কে লাইন পিরিয়ড কত, যেমন 30 মিনিটের K লাইন গণনা করা হয় 30 মিনিটের পিরিয়ডের MACD সূচক, প্যারামিটার প্যারামিটার পিরিয়ড) খুব বড় সেট করা হয়েছে, K লাইন ডেটা দৈর্ঘ্য কমঃ উদাহরণস্বরূপ, MACD সূচকটি বর্ণনা করেঃ

      MACD(Records[Close],Fast Period = 12,Slow Period = 26,Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]
      

      যদি ব্যবহারের সময় প্যারামিটার পিরিয়ড 12,26,9 সেট করা থাকে, তাহলে আমরা পরিমাপের গণনার জন্য ব্যবহৃত K-line datarecords ইনপুট করি, কোডটি এরকম লেখা হবেঃ

      var macd = talib.MACD(records, 12, 26, 9);
      

      যদি রেকর্ডের দৈর্ঘ্য খুব ছোট হয় তবে এটি গণনা করা হয়ঃ

      [
        [null,null,null,null,null,null,null,null,null,null,null,null,null],
        [null,null,null,null,null,null,null,null,null,null,null,null,null],
        [null,null,null,null,null,null,null,null,null,null,null,null,null]
      ]
      

      এটি K-line ডেটার অভাবের কারণে, কারণ গণনা করা সূচকগুলি যদি ব্যবহার করা হয় তবে এটি একটি BUG সৃষ্টি করবে, তাই আমরা প্রোগ্রামের আগে একটি সীমাবদ্ধ শর্ত যুক্ত করেছিঃ

      while(!records || records.length < 50){
          records = exchange.GetRecords();
          Sleep(1000);
      }
      

      লুপ থেকে বেরিয়ে আসুন যতক্ষণ না 50 টি K স্ট্রিং পাওয়া যায়।img

      মনোযোগ সহকারে পাঠক দেখতে পারেন যে কেন এই সূচকটি একটি দ্বি-মাত্রিক অ্যারে গণনা করে (যেমন একটি অ্যারেতে প্রতিটি উপাদান একটি অ্যারে) কারণ MACD সূচকটি একটি লাইন নয়, তবে তিনটি লাইন গণনা করেঃ dif,dea,macd পরিমাণ স্তম্ভ। সুতরাং প্রতিটি সূচকের রিটার্ন মান আলাদা হতে পারে, বা নির্দিষ্টভাবে সূচকের বিবরণটি দেখতে হবে।

      [
        [null,null,null,null,null,null,null,null,数据...],
        [null,null,null,null,null,null,null,null,数据...],
        [null,null,null,null,null,null,null,null,数据...]
      ]
      

      কিছু ক্ষেত্রে, নির্দেশকের রিটার্ন কাঠামোর দিকে নজর না দেওয়ার কারণে বাগ দেখা দেয়।

    • দ্বিতীয়ত, নির্দেশক ফাংশন গণনা করার জন্য ব্যবহৃত গড় রেখা ভিন্ন বা নির্দেশক অ্যালগরিদম ভিন্ন ফলাফল দেয়।

      স্টোক আরএসআই এর তুলনায় এটি আরও স্পষ্ট, যা নিম্নরূপ বর্ণনা করেঃ

      STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]
      

      এই গণনা করা মানটি অন্যান্য অ্যালগরিদমের তুলনায় উল্লেখযোগ্যভাবে আলাদা, যা আমি এই সিরিজের প্রথম অধ্যায়ে আমার নিজস্ব অ্যালগরিদম কোড দিয়েছিলাম। আগ্রহী পাঠকরা নীচে তুলনা করতে পারেন। এর কারণ হতে পারে ব্যবহার করা সমতল পদ্ধতির অসঙ্গতি, কিছু ক্যাটাগরির অ্যালগরিদম MA ব্যবহার করে, কিছু EMA ব্যবহার করে। কিছু সূচক প্রতিদিন পুনরাবৃত্তিভাবে গণনা করা হয়, যদি K-রেখা ডেটা দেওয়া হয় তবে গণনা করা মানগুলি ভিন্ন হতে পারে।

  • ৩। এপিআই ভুল হ্যান্ডলিং

    • Cannot read property length of null এই বাগটি সবচেয়ে বেশি দেখা যায়, এর মধ্যে কোনটিই নেই।

      এর কারণ হল যে, এপিআই কখনও কখনও বিভিন্ন কারণে তথ্য প্রাপ্তির ত্রুটি ঘটে, অথবা তথ্য প্রাপ্ত হয় না। এই ক্ষেত্রে কিছু তথ্য প্রাপ্তি এপিআই একটি null মান পায়। এই তথ্যগুলি সাধারণত অ্যারে কাঠামো, যা প্রায়ই অ্যারে দৈর্ঘ্য অ্যাক্সেস করা প্রয়োজন।

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

      এটি একটি সহজ সরঞ্জাম, কারণ এটিতে কোন একক পদক্ষেপ ডিবাগিং, কোন বিরতি ডিবাগিং, কোন ভেরিয়েবল মান পর্যবেক্ষণ ইত্যাদি নেই। আমি সাধারণত ডিবাগ করার সবচেয়ে সহজ উপায় হল লগ ফর্মুলা! প্রোগ্রাম প্রক্রিয়ার মধ্যে টেক্সট তথ্য আউটপুট লগ যুক্তিসঙ্গতভাবে ব্যবহার করার জন্য, বিশ্লেষণ প্রোগ্রাম আউটপুট লগ; আপনি সম্ভবত প্রোগ্রামের চলমান প্রক্রিয়া বুঝতে পারেন, বা চেষ্টা করুন, ধরা, JS এর বিপর্যয় ক্যাপচার সঙ্গে বরাবর বাগ মোকাবেলা করতে পারেন, কিন্তু আমার পরামর্শ বিপর্যয় ক্যাপচার ব্যবহার করা আবশ্যক যখন না হয়, যতটা সম্ভব ব্যবহার না করা হয়; ((প্রোগ্রামীকরণ প্রয়োজন যে আমরা লেনদেন, বিশ্লেষণ তথ্য সব দিক মোকাবেলা করতে হবে, যদি না কঠোরভাবে চালানো সম্ভব, সম্ভবত বিপর্যয়কর বাগ কোণায় কিছু জন্য অপেক্ষা trigger) ।) । DEBUG-এর জন্য, সবচেয়ে মৌলিক লগ পদ্ধতি ব্যবহার করা সত্যিই একটি অভিজ্ঞতা, যা DEBUG-এর দক্ষতা গড়ে তোলার দৃষ্টিকোণ থেকে কার্যকর।

এই লেখা শুরু করার আগে, পাঠকদের আমাকে একটি মন্তব্য করতে স্বাগত জানাই! পরামর্শ এবং মতামত দিতে, যদি আপনি মজা বোধ করতে পারেন আরো প্রোগ্রাম প্রেমীদের সাথে শেয়ার করুন যারা লেনদেন ভালবাসেন

https://www.fmz.com/bbs-topic/728

প্রোগ্রামার littleDream মূলত


আরো