جاوا اسکرپٹ کے ساتھ کھیلنا - خرید و فروخت کرنے کے لئے ایک چھوٹا سا پارٹنر بنانا

مصنف:چھوٹا سا خواب, تخلیق: 2017-03-13 12:53:50, تازہ کاری: 2017-10-11 10:37:32

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

جے ایس کا استعمال کرتے ہوئے کوانٹیمیٹڈ روبوٹ کے لئے ایک سبق:https://www.fmz.com/bbs-topic/705(پہلے مارک کے نیچے)
  • 1، K لائن کے اعداد و شمار کے بنیادی اصولوں کو سمجھنا، اور ان اعداد و شمار کو مقداری لین دین میں استعمال کرنے کے مسائل۔

    • کیا K لائن ڈیٹا ہے:

      K لائن چارٹ کی ابتدا جاپان کے دارالحکومت ٹیکواوا کے دور میں ہوئی تھی اور اس وقت جاپان کے چینی مارکیٹ کے تاجروں کی طرف سے چینی مارکیٹ کے رجحانات اور قیمتوں میں اتار چڑھاؤ کو ریکارڈ کرنے کے لئے استعمال کیا جاتا تھا ، بعد میں اس کی باریک بینی اور منفرد لیبلنگ کے لئے اسٹاک مارکیٹ اور فیوچر مارکیٹ میں متعارف کرایا گیا۔ فی الحال ، اس طرح کے چارٹ تجزیہ کا طریقہ ہمارے ملک میں اور پورے جنوب مشرقی ایشیاء میں خاص طور پر مقبول ہے۔ چونکہ اس طریقہ کار کے ذریعہ تیار کردہ چارٹ کی شکل ایک جھاڑی کی طرح ہے ، جس میں سیاہ اور سفید منفی ہیں ، لہذا اسے سورج کی لائن چارٹ بھی کہا جاتا ہے۔ (بائیوٹا سے تلاش)

      اس کے علاوہ، ہم نے اس کی وضاحت کرنے کے لئے کچھ گرافکس نہیں بنائے ہیں، لیکن ہم K لائن کے اعداد و شمار کی ساخت کو دیکھیں گے جو 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 لائن بار ہے، جس میں اس بار سائیکل میں سب سے زیادہ قیمت، سب سے کم قیمت، کھولنے کی قیمت (یعنی اس K لائن کی ٹائم لائن شروع ہونے کی قیمت) ، بند ہونے کی قیمت (یعنی اس K لائن سائیکل کے وقت ختم ہونے کی قیمت) ، تجارت (سائیکل میں تجارت) ؛ اور یہ سائیکل K لائن سائیکل ہے۔ مثال کے طور پر، مندرجہ بالا صف میں اعداد و شمار کا تعین کس طرح کرتے ہیں کہ کس طرح طویل عرصے سے K لائن ہے؟ آپ کو صرف 2 بار کے وقت کی گھنٹی کے ساتھ غلط حساب کر سکتے ہیں: 1487035800000 - 1487034000000 اس کے نتیجے میں: 1800000، جس کی عددی یونٹ ملی سیکنڈ ہے، لہذا اس کے بدلے میں: 1800000 / 1000 / 60 = 30 (منٹ) ، یہ K لائن کا دورانیہ 30 منٹ ہے۔

      اس کے علاوہ ، آپ کو یہ بھی معلوم ہونا چاہئے کہ آپ کو کیا کرنا چاہئے: جب ہم K لائن کے اعداد و شمار کا استعمال کرتے ہیں تو ، صف کی لمبائی کو نظرانداز کیا جاتا ہے۔ اس کی وجہ سے صف تک رسائی کا بہاؤ ہوتا ہے (اس طرح کے BUG پہلے C پروگرام لکھنے میں عام تھے) ۔ لہذا ہمیں K لائن کا استعمال کرنے سے پہلے اس کا فیصلہ کرنے کی ضرورت ہے۔ مثال کے طور پر K لائن حاصل کریں: exchange.SetContractType ((rb1705); // سوئچنگ سیٹ اپ برائے اسکریچ اسٹیل 1705 معاہدہ۔ var records = exchange.GetRecords ((); // rb1705 نالیدار سٹیل کے معاہدے کے ڈیفالٹ K لائن سائیکل ڈیٹا حاصل کریں۔ کس طرح بہت سے جڑیں بار تک حاصل کیا جا سکتا ہے کے لئے K لائن ڈیٹا مخصوص ہے ۔ تبادلہ کے API کی طرف سے آگے بڑھایا جاتا ہے ؛ لہذا شروع میں اگر زیادہ K لائن بار کی ضرورت ہوتی ہے تو ، پروگرام کو کچھ وقت جمع کرنے کے لئے دینا ضروری ہے ؛ اور پروگرام میں اضافہ کرنے کے لئے فیصلے کو جمع کرنے کے لئے کافی ہے یا نہیں ، یہ اس طرح لکھا جا سکتا ہے:

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

      دوسری آسان بات یہ ہے: K لائن کے آخری بار کے اعداد و شمار کے علاوہ Time، Open اور Close کے علاوہ دیگر خصوصیات میں تبدیلی کا امکان ہے۔ ابتدائیوں کے لئے یہ بہت الجھن کا باعث بن سکتا ہے کیونکہ وہ K لائن کے ساتھ کام کرتے وقت اس بات کو نہیں سمجھتے ہیں۔ مثال کے طور پر ، پچھلے باب میں ، ہموار لائن کراسنگ کے بارے میں بات کی گئی تھی۔ منفی پہلا بار استعمال کریں یا منفی دوسرا بار؟

      تیسرا سوال: K لائن کے دورانیے کے لئے ، ٹائم لائن اس دورانیے کے آغاز کا وقت ہے ، ٹائم لائن ایک ملی سیکنڈ ہے ، جس کی قیمت 0 ہے۔ اس وقت کا نمائندہ 1 جنوری 1970 ہے (مخصوص پروگرام لکھنے کے وقت فیصلہ کرنے کے لئے اس وقت کے زون کو بھی مدنظر رکھنا ضروری ہے) ۔ اس جملے کا استعمال کریں:w3schoolیا BotVS Sandbox سسٹم میں آزمائیں:

      var arr = new Date(0);
      

      یہ دکھایا گیا ہے:

      Thu Jan 01 1970 08:00:00 GMT+0800 (CST) // دکھایا گیا ہے مشرقی آٹھ ٹائم زون یہ قدر 1970 سے اب تک اپنے آپ میں شامل ہے (ہر ایک سیکنڈ میں 1000 اضافہ ہوتا ہے کیونکہ ایک سیکنڈ 1000 ملی سیکنڈ ہے) ، لہذا یہ تعداد کافی بڑی ہے۔ یہاں ایک چھوٹی سی چال ہے: چونکہ ٹائم بیگ K لائن کے ہر بار میں منفرد ہے جس میں K لائن کے دورانیے کا تعین کیا گیا ہے ، لہذا جب ٹائم بیگ میں تبدیلی آتی ہے تو ، یہ یقینی بنایا جاسکتا ہے کہ تازہ ترین K لائن کا ڈیٹا موصول ہوا ہے۔ یہ اصل میں K لائن کے اعداد و شمار کو سنبھالنے میں بھی مفید ہے۔

  • 2، اشارے کی کال کی تفصیلات، اکثر پوچھے گئے سوالات، پورا کرنے کا دورانیہ، واپسی کی قیمت، پیرامیٹرز

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

    اس کے علاوہ، جب وہ پہلی بار انڈیکس بیس کے افعال کا استعمال کرتے تھے تو بہت سی غلطیاں ہوئیں:

    • پہلا ، پیرامیٹرز کا دورانیہ ((انڈیکیٹر پیرامیٹرز ، K لائن کے دورانیے سے مختلف ، K لائن کا دورانیہ کتنا ہے ، حساب لگایا گیا اشارے K لائن کا دورانیہ کتنا ہے ، مثال کے طور پر 30 منٹ کی لائن کا حساب لگایا گیا ہے 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 پر سیٹ کی گئی ہے تو، ہم کالم ڈیٹا ریکارڈز میں داخل ہوتے ہیں جو اشارے کا حساب کرنے کے لئے استعمال کیا جاتا ہے، کوڈ لکھتا ہے:

      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 لائن کے اعداد و شمار کی کمی کی وجہ سے ، حساب کتاب کرنے والے اشارے اگر استعمال کیے جائیں تو BUG پیدا کریں گے ، لہذا ہم نے پروگرام سے پہلے ایک محدود شرط شامل کی:

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

      جب تک آپ کو 50 کلو گرام نہ ملیں، آپ کو لوپ سے باہر نکلنے کی ضرورت ہے۔img

      محتاط قارئین دیکھ سکتے ہیں کہ اس اشارے کے حساب سے اعداد و شمار ایک دو جہتی صف (یعنی ایک صف کے ہر عنصر کے لئے ایک صف ہے) کیوں ہے کیونکہ MACD اشارے کی حساب سے ایک لائن نہیں بلکہ تین لائنیں ہوتی ہیں: diff ،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,数据...]
      ]
      

      کچھ معاملات میں ، بیگ اس وجہ سے بھی ظاہر ہوتا ہے کہ اشارے کی واپسی کی ساخت پر توجہ نہیں دی جاتی ہے۔

    • دوسرا، اشارے کی تقریب کے حساب کے لئے استعمال کیا جاتا ہے کہ ایک مختلف اوسط یا اشارے کے الگورتھم مختلف نتائج کے نتیجے میں مختلف ہے.

      اس کے مقابلے میں زیادہ واضح STOCH RSI اشارے ہے، جو مندرجہ ذیل بیان کرتا ہے:

      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 لائن ڈیٹا کی دی گئی تعداد مختلف ہے تو حساب کتاب کی قیمتوں میں فرق ہوسکتا ہے۔

  • 3، API غلطیوں کو برداشت کرتا ہے

    • Cannot read property length of null یہ BUG سب سے زیادہ کثرت سے آتا ہے، کوئی بھی نہیں۔

      اس کی وجہ یہ ہے کہ اے پی آئی میں بعض اوقات مختلف وجوہات کی بناء پر ڈیٹا حاصل کرنے میں غلطی ہوتی ہے ، یا ڈیٹا حاصل نہیں ہوتا ہے۔ اس وقت کچھ ڈیٹا حاصل کرنے والے اے پی آئیز null ویلیو حاصل کرتے ہیں۔ یہ اعداد و شمار عام طور پر ایک صفاتی ڈھانچہ ہوتے ہیں ، اور اکثر صفوں کی لمبائی تک رسائی کی ضرورت ہوتی ہے۔

      تمام API کالوں کے لیے غلطیوں کا معالجہ کرنے کی ضرورت ہوتی ہے، اور بعض اوقات یہ بھی جانچنے کی ضرورت ہوتی ہے کہ آیا اعداد و شمار درست ہیں (کبھی کبھی غیر معمولی اعداد و شمار ظاہر ہوتے ہیں) ۔ ہمارے پروگرام صرف اپنے کوڈ میں درستگی کی ضمانت دے سکتے ہیں، لیکن نیٹ ورک پر چلنے والے ڈیٹا کی معلومات کے لیے اس کی 100٪ درستگی کی ضمانت نہیں دی جاسکتی ہے (کچھ بھی ضائع ہونا ناگزیر ہے) ، لہذا حاصل کردہ اعداد و شمار کو غلطیوں کا معالجہ کرنے کی ضرورت ہوتی ہے اور تمام غیر معمولی اعداد و شمار کو فلٹر کرنا پڑتا ہے۔

      اس کے علاوہ ، یہ ایک بہت ہی آسان طریقہ ہے کہ آپ کو ایک ہی مرحلے میں ڈیبگنگ ، وقفے وقفے سے ڈیبگنگ ، متغیر کی نگرانی وغیرہ کی ضرورت نہیں ہے۔ میرا عام طریقہ DEBUG کرنے کا سب سے آسان طریقہ ہے لاگ ان! پروگرام کے عمل میں منطقی استعمال کے لئے لاگ آؤٹ پٹ ٹیکسٹ انفارمیشن ، تجزیہ پروگرام کی پیداوار کے لئے لاگ۔ شاید آپ پروگرام کے عمل کو سمجھ سکتے ہیں ، یا کوشش کریں ، پکڑو ، پھینک دو JS کے ساتھ مل کر BUG کو سنبھال سکتے ہیں ، لیکن میرا مشورہ ہے کہ جب آپ کو غیر معمولی گرفتاری کا استعمال کرنا پڑے تو ، اس سے بچنے کی کوشش کریں۔ ((پروگرامنگ کا مطالبہ ہے کہ ہمیں ٹرانزیکشن ، تجزیہ ڈیٹا کے تمام پہلوؤں کو سنبھالنا ہوگا ، اگر ہم کسی بھی طرح سے چلنے کے لئے مجبور نہیں ہوسکتے ہیں تو ، ممکنہ طور پر تباہ کن BUG کسی کونے میں ٹرگر کا انتظار کر رہے ہیں) ۔ DEBUG کے لئے، سب سے زیادہ بنیادی لاگ ان کا استعمال کرتے ہوئے ایک تجربہ کار طریقہ کار ہے، جو DEBUG کی صلاحیتوں کو فروغ دینے کے نقطہ نظر سے بہت مؤثر ہے.

پہلے یہ لکھیں، قارئین کو خوش آمدید مجھے ایک تبصرہ چھوڑنے کے لئے! تجاویز اور تبصرے کے لئے، اگر آپ کو مزہ آ رہا ہے تو آپ کو مزید دوستوں کے ساتھ اشتراک کر سکتے ہیں جو پروگراموں سے محبت کرتے ہیں اور تجارت سے محبت کرتے ہیں.

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

پروگرامر littleDream اصل


مزید