وسائل لوڈ ہو رہے ہیں... لوڈنگ...

مقداری تجارت میں K لائن ڈیٹا پروسیسنگ

مصنف:نیکی, تخلیق: 2019-09-03 11:15:30, تازہ کاری: 2023-11-07 20:43:41

img

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

کیو لائن ڈیٹا کا استعمال کرتے ہوئے مقداری تجارتی حکمت عملی لکھتے وقت ، اکثر ایسے معاملات ہوتے ہیں جہاں غیر معیاری سائیکل کیو لائن ڈیٹا کی ضرورت ہوتی ہے۔ مثال کے طور پر ، 12 منٹ کے سائیکل کیو لائن ڈیٹا اور 4 گھنٹے کے کیو لائن سائیکل ڈیٹا کی ضرورت ہوتی ہے۔ عام طور پر ایسے غیر معیاری سائیکل براہ راست دستیاب نہیں ہوتے ہیں۔ تو ہم ایسی ضروریات سے کیسے نمٹتے ہیں؟

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

جیسا کہ شکل میں دکھایا گیا ہے:

  • سوچا

آئیے ایک مثال کے طور پر بلاکچین اثاثہ BTC_USDT لیتے ہیں اور 1 گھنٹے کو 4 گھنٹوں میں ترکیب کرتے ہیں۔

img img img img

وقت سب سے زیادہ کھولیں سب سے کم بند
2019.8.12 00:00 11447.07 11382.57 11367.2 11406.92
2019.8.12 01:00 11420 11405.65 11366.6 11373.83
2019.8.12 02:00 11419.24 11374.68 11365.51 11398.19
2019.8.12 03:00 11407.88 11398.59 11369.7 11384.71

چار ایک گھنٹے کے سائیکلوں کے اعداد و شمار کو ایک چار گھنٹے کے سائیکل کے اعداد و شمار میں ملایا جاتا ہے۔

افتتاحی قیمت 00:00 وقت پر پہلی K لائن کی افتتاحی قیمت ہے: 11382.57 اختتامی قیمت 03:00: 11384.71 پر آخری K لائن اختتامی قیمت ہے سب سے زیادہ قیمت ان میں سے سب سے زیادہ قیمت تلاش کرنے کے لئے ہے: 11447.07 سب سے کم قیمت ان میں سے سب سے کم قیمت تلاش کرنا ہے: 11365.51

نوٹ: عام تجارتی دن میں چین کی خام مال فیوچر مارکیٹ 15:00 بجے بند ہوئی

4 گھنٹے کے سائیکل کا آغاز کا وقت پہلی 1 گھنٹے کی لائن کا آغاز کا وقت ہے ، یعنی 2019.8.12 00:00

تمام 1 گھنٹے k لائن کے حجم کا مجموعہ اس 4 گھنٹے k لائن حجم کے طور پر استعمال کیا جاتا ہے.

ایک 4 گھنٹے کی لائن تیار کی جاتی ہے:

High: 11447.07
Open: 11382.57
Low: 11365.51
Close: 11384.71
Time: 209.8.12 00:00

img

آپ دیکھ سکتے ہیں کہ اعداد و شمار مستقل ہیں۔

  • کوڈ کا نفاذ

ابتدائی خیالات کو سمجھنے کے بعد، آپ دستی طور پر کوڈ لکھ سکتے ہیں ضروریات کو پورا کرنے کے لئے.

یہ کوڈ صرف حوالہ کے لئے ہیں:

function GetNewCycleRecords (sourceRecords, targetCycle) { // K line synthesis function
      var ret = []
      
      // First get the source K line data cycle
      if (!sourceRecords || sourceRecords.length < 2) {
          Return null
      }
      var sourceLen = sourceRecords.length
      var sourceCycle = sourceRecords[sourceLen - 1].Time - sourceRecords[sourceLen - 2].Time

      if (targetCycle % sourceCycle != 0) {
          Log("targetCycle:", targetCycle)
          Log("sourceCycle:", sourceCycle)
          throw "targetCycle is not an integral multiple of sourceCycle."
      }

      if ((1000 * 60 * 60) % targetCycle != 0 && (1000 * 60 * 60 * 24) % targetCycle != 0) {
          Log("targetCycle:", targetCycle)
          Log("sourceCycle:", sourceCycle)
          Log((1000 * 60 * 60) % targetCycle, (1000 * 60 * 60 * 24) % targetCycle)
          throw "targetCycle cannot complete the cycle."
      }

      var multiple = targetCycle / sourceCycle


      var isBegin = false
      var count = 0
      var high = 0
      var low = 0
      var open = 0
      var close = 0
      var time = 0
      var vol = 0
      for (var i = 0 ; i < sourceLen ; i++) {
          // Get the time zone offset value
          var d = new Date()
          var n = d.getTimezoneOffset()

          if ((1000 * 60 * 60 * 24) - sourceRecords[i].Time % (1000 * 60 * 60 * 24) + (n * 1000 * 60)) % targetCycle == 0) {
              isBegin = true
          }

          if (isBegin) {
              if (count == 0) {
                  High = sourceRecords[i].High
                  Low = sourceRecords[i].Low
                  Open = sourceRecords[i].Open
                  Close = sourceRecords[i].Close
                  Time = sourceRecords[i].Time
                  Vol = sourceRecords[i].Volume

                  count++
              } else if (count < multiple) {
                  High = Math.max(high, sourceRecords[i].High)
                  Low = Math.min(low, sourceRecords[i].Low)
                  Close = sourceRecords[i].Close
                  Vol += sourceRecords[i].Volume

                  count++
              }

              if (count == multiple || i == sourceLen - 1) {
                  Ret.push({
                      High : high,
                      Low : low,
                      Open : open,
                      Close : close,
                      Time : time,
                      Volume : vol,
                  })
                  count = 0
              }
          }
      }

      Return ret
  }

  // test
  function main () {
      while (true) {
          var r = exchange.GetRecords() // Raw data, as the basic K-line data of the synthesize K line. for example, to synthesize a 4-hour K-line, you can use the 1-hour K-line as the raw data.
          var r2 = GetNewCycleRecords(r, 1000 * 60 * 60 * 4) // Pass the original K-line data r through the GetNewCycleRecords function, and the target cycles, 1000 * 60 * 60 * 4, ie the target synthesis cycle is 4 hours K-line data .

          $.PlotRecords(r2, "r2") // The strategy class library bar can be selected by check the line class library, and calling the $.PlotRecords line drawing class library to export the function drawing.
          Sleep(1000) // Each cycle is separated by 1000 milliseconds, preventing access to the K-line interface too much, resulting in transaction restrictions.
      }
  }

دراصل، K لائن کو ترکیب کرنے کے لئے، آپ کو دو چیزوں کی ضرورت ہے۔ پہلا خام مال کا ڈیٹا ہے، یعنی ایک چھوٹا سا سائیکل کا K لائن کا ڈیٹا۔ اس مثال میں یہ ہےvar r = exchange.GetRecords()چھوٹے سائیکل K لائن ڈیٹا حاصل کرنے کے لئے.

دوسرا یہ ہے کہ ہم ترکیب کے دورانیے کا سائز معلوم کریں، ہم اس کے لئے GetNewCycleRecords فنکشن الگورتھم استعمال کرتے ہیں، پھر آپ آخر میں ایک ترکیب شدہ K لائن صف کی ساخت کے اعداد و شمار واپس کر سکتے ہیں.

براہ کرم نوٹ کریں:

  1. ہدف سائیکل K لائن کے سائیکل سے کم نہیں ہوسکتا ہے جسے آپ نے ڈیٹا کے خام مال کے طور پر حاصل نیو سائیکل ریکارڈز فنکشن میں منظور کیا ہے۔ کیونکہ آپ چھوٹے سائیکل ڈیٹا کو بڑے سائیکل سے ترکیب نہیں کرسکتے ہیں۔ صرف اس کے برعکس۔

  2. ہدف سائیکل کو سائیکل بند پر سیٹ کرنا ضروری ہے۔ سائیکل بند کیا ہے؟ آسان الفاظ میں ، ایک گھنٹے یا ایک دن کے اندر ، ہدف سائیکل کے وقت کی حدیں ایک بند لوپ بنانے کے لئے مل جاتی ہیں۔

مثلاً:

12 منٹ کے سائیکل کی K لائن ہر گھنٹے 0: 0 سے شروع ہوتی ہے ، پہلا سائیکل 00:00:00 ~ 00:12: 00 ہے ، اور دوسرا سائیکل 00:12: 00 ~ 00: 24: 00 ہے ، تیسرا سائیکل 00:24: 00 ~ 00:36: 00 ہے ، چوتھا سائیکل 00:36: 00 ~ 00:48: 00 ہے ، پانچویں سائیکل 00:48 ہے: 00 00 ~ 01: 00:00 ، جو بالکل ایک مکمل گھنٹہ ہے۔

اگر یہ 13 منٹ کا سائیکل ہے تو ، یہ ایک ایسا سائیکل ہوگا جو بند نہیں ہوگا۔ اس طرح کے سائیکل کے ذریعہ شمار کردہ اعداد و شمار منفرد نہیں ہیں کیونکہ مرتب کردہ اعداد و شمار مرتب کردہ اعداد و شمار کے آغاز کے نقطہ پر منحصر ہے۔

اسے حقیقی مارکیٹ میں چلائیں:

img

برعکس تبادلہ چارٹ

img

  • K لائن ڈیٹا کا استعمال کرتے ہوئے مطلوبہ ڈیٹا کی ساخت کی تعمیر

میں تمام K لکیروں کے لئے سب سے زیادہ قیمت کا اوسط حساب کرنا چاہتا ہوں۔ مجھے کیا کرنا چاہئے؟

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

ان اضافی مطالبات کے لئے ، ایکسچینج.گیٹ ریکارڈز (()) فنکشن کے ذریعہ واپس آنے والے K لائن ڈیٹا کو براہ راست اشارے کے حساب کے فنکشن میں منتقل نہیں کیا جاسکتا ہے۔

مثلاً: کےtalib.MAچلتی اوسط اشارے کے حساب کی تقریب میں دو پیرامیٹرز ہیں، پہلا ڈیٹا ہے جو منتقل کرنے کی ضرورت ہے، اور دوسرا اشارے سائیکل پیرامیٹر ہے.

مثال کے طور پر، ہم ذیل میں دکھایا گیا ہے کے طور پر اشارے کا حساب کرنے کی ضرورت.

img

K لائن سائیکل 4 گھنٹے ہے.

ایکسچینج مارکیٹ کے کوٹیشن چارٹ پر، 9 کے سائیکل پیرامیٹر کے ساتھ ایک اوسط لائن مقرر کی گئی ہے.

اعداد و شمار کا حساب لگایا گیا ذریعہ فی بار سب سے زیادہ قیمت کا استعمال کر رہا ہے.

img

یعنی یہ حرکت پذیر اوسط لائن نو 4 گھنٹے کے سائیکل K لائن بار کی سب سے زیادہ اوسط قیمت کے اوسط پر مشتمل ہے۔

آئیے ایک ڈیٹا خود بناتے ہیں تاکہ دیکھیں کہ کیا یہ تبادلے کے ڈیٹا کے ساتھ بھی ایسا ہی ہے۔

var highs = []
for (var i = 0 ; i < r2.length ; i++) {
    highs.push(r2[i].High)
}

چونکہ ہمیں حرکت پذیر اوسط اشارے کی قدر حاصل کرنے کے لئے ہر بار کی سب سے زیادہ قیمت کا حساب لگانے کی ضرورت ہے ، لہذا ہمیں ایک صف بنانے کی ضرورت ہے جس میں ہر ڈیٹا عنصر میں ہر بار کے لئے سب سے زیادہ قیمت ہے۔

آپ دیکھ سکتے ہیں کہhighsمتغیر ابتدائی طور پر ایک خالی صف ہے، پھر ہم r2 k-لائن ڈیٹا متغیر (r2 یاد نہیں ہے؟ یاد رکھیں؟ اوپر 4 گھنٹے K-لائن کی ترکیب کرتا ہے کہ اہم تقریب میں کوڈ کو دیکھو).

r2 کے ہر بار کی سب سے زیادہ قیمت پڑھیں (یعنی r2 [i].High، i 0 سے r2 تک ہوتی ہے.length - 1) ، پھر میں دھکاhighsاس طرح ہم صرف ایک ڈیٹا کی ساخت کی تعمیر ہے کہ K لائن ڈیٹا بار کے ساتھ ایک سے ایک کے مطابق.

اس وقت،highsپاس کر سکتے ہیںtalib.MAچلتی اوسط کا حساب کرنے کے لئے تقریب.

مکمل مثال:

function main () {
     while (true) {
         var r = exchange.GetRecords()
         var r2 = GetNewCycleRecords(r, 1000 * 60 * 60 * 4)
         if (!r2) {
             Continue
         }
        
         $.PlotRecords(r2, "r2") // Draw the K line
        
         var highs = []
         for (var i = 0 ; i < r2.length ; i++) {
             Highs.push(r2[i].High)
         }
        
         var ma = talib.MA(highs, 9) // use the moving average function "talib.MA" to calculate the moving average indicator
         $.PlotLine("high_MA9", ma[ma.length - 2], r2[r2.length - 2].Time) // Use the line drawing library to draw the moving average indicator on the chart
        
         Sleep(1000)
     }
}

بیک ٹسٹ:

img

آپ دیکھ سکتے ہیں کہ ماؤس پوائنٹ کی پوزیشن کی اوسط اشارے کی قیمت ہے 11466.9289

مندرجہ بالا کوڈ کو ٹیسٹ چلانے کے لئے حکمت عملی میں کاپی کیا جا سکتا ہے، ڈرائنگ لائن لائبریری چیک کرنے کے لئے یاد رکھیں اور اسے محفوظ کریں!

  • کریپٹوکرنسی مارکیٹ کے لئے K لائن ڈیٹا اکٹھا کرنے کا طریقہ

ایف ایم زیڈ کوانٹ پلیٹ فارم میں پہلے سے ہی ایک پیکڈ انٹرفیس ہے ، یعنیexchange.GetRecordsفنکشن، K لائن کے اعداد و شمار حاصل کرنے کے لئے.

مندرجہ ذیل ڈیٹا حاصل کرنے کے لئے تبادلہ کی K لائن ڈیٹا انٹرفیس تک براہ راست رسائی پر مرکوز ہے، کیونکہ کبھی کبھی آپ کو زیادہ K لائنز حاصل کرنے کے لئے پیرامیٹرز کی وضاحت کرنے کی ضرورت ہے، پیکجGetRecordsانٹرفیس عام طور پر 100K لائنوں کو واپس کرتا ہے۔ اگر آپ کو ایسی حکمت عملی کا سامنا کرنا پڑتا ہے جس میں ابتدائی طور پر 100K لائنوں سے زیادہ کی ضرورت ہوتی ہے تو ، آپ کو جمع کرنے کے عمل کا انتظار کرنے کی ضرورت ہے۔

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

مثال کے طور پر ہوبی ایکسچینج پر BTC_USDT ٹریڈنگ جوڑی کا استعمال کرتے ہوئے ، ہم اس شرط کو نافذ کرتے ہیں:

ایکسچینج API دستاویزات تلاش کریں اور K لائن انٹرفیس کی وضاحت دیکھیں:

img

https://huobiapi.github.io/docs/spot/v1/en/#get-klines-candles

پیرامیٹرز:

نام قسم کیا یہ ضروری ہے تفصیل قدر
علامت سٹرنگ سچ ٹریڈنگ جوڑی Btcusdt، ethbtc...
مدت سٹرنگ سچ اعداد و شمار کی وقت کی گرانولرٹی لوٹاتا ہے، جو ہر کلو لائن کا وقت وقفہ ہے 1 منٹ، 5 منٹ، 15 منٹ، 30 منٹ، 60 منٹ، 1 دن، 1 ماہ، 1 ہفتے، 1 سال
سائز عدد غلط اعداد و شمار کی K لائنوں کی تعداد لوٹاتا ہے [1, 2000]

ٹیسٹ کا کوڈ:

function GetRecords_Huobi (period, size, symbol) {
    var url = "https://api.huobi.pro/market/history/kline?" + "period=" + period + "&size=" + size + "&symbol=" + symbol
    var ret = HttpQuery(url)
    
    try {
        var jsonData = JSON.parse(ret)
        var records = []
        for (var i = jsonData.data.length - 1; i >= 0 ; i--) {
            records.push({
                Time : jsonData.data[i].id * 1000,
                High : jsonData.data[i].high,
                Open : jsonData.data[i].open,
                Low : jsonData.data[i].low,
                Close : jsonData.data[i].close,
                Volume : jsonData.data[i].vol,
            })
        }
        return records
    } catch (e) {
        Log(e)
    }
}  


function main() {
    var records = GetRecords_Huobi("1day", "300", "btcusdt")
    Log(records.length)
    $.PlotRecords(records, "K")
}

img img

آپ کو یہ لاگ ان پر دیکھ سکتے ہیں، پرنٹrecords.lengthہے 300، یعنی، کی تعدادrecordsK لائن ڈیٹا بار 300 ہے.img


متعلقہ

مزید