ہینڈ ہیلپ آپ کو ایک K-line syntax کے ساتھ ایک Python ورژن لکھنا سکھاتا ہے

مصنف:چھوٹا سا خواب, تخلیق: 2019-12-21 09:38:26, تازہ کاری: 2023-10-17 21:24:05

img

ہینڈ ہیلپ آپ کو ایک K-line syntax کے ساتھ ایک Python ورژن لکھنا سکھاتا ہے

لکھنے اور استعمال کرنے کی پالیسیوں میں اکثر غیر معمولی K لائن سائیکل ڈیٹا استعمال کیا جاتا ہے۔ تاہم ، تبادلے ، ڈیٹا وسائل ان سائیکلوں کا ڈیٹا فراہم نہیں کرتے ہیں۔ صرف پہلے سے ہی سائیکل شدہ ڈیٹا کا استعمال کرکے ترکیب کی جاسکتی ہے۔ ترکیب کرنے والے الگورتھم میں پہلے سے ہی جاوا اسکرپٹ کا ایک ورژن موجود ہے۔لنکاس کے بعد ہم نے ایک پیتھون ورژن کے لئے ایک K- لائن ترکیب الگورتھم لکھنے کے لئے.

جاوا اسکرپٹ ورژن

  function GetNewCycleRecords (sourceRecords, targetCycle) {    // K线合成函数
      var ret = []
      
      // 首先获取源K线数据的周期
      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++) {
          // 获取 时区偏移数值
          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 
  }

جاوا اسکرپٹ کے الگورتھم کے ساتھ، پیتھون کے لئے اصل میں لائن کی طرف سے ترجمہ کی نقل و حمل ممکن ہے، جاوا اسکرپٹ کے اندرونی افعال، یا متعلقہ طریقوں کا سامنا کرنا پڑتا ہے، جو پیتھون میں متعلقہ تلاش کرنے کا طریقہ ہے، لہذا نقل و حمل نسبتا آسان ہے. الگورتھم کی منطق بالکل ایک جیسی ہے، صرف جاوا اسکرپٹ کے فنکشن کالزvar n = d.getTimezoneOffset()اس کے بعد، ہم نے اس کے بارے میں مزید معلومات حاصل کیں.n = time.altzoneاس کے بجائے ؛ دیگر اختلافات صرف لسانی نحو کے پہلوؤں میں ہیں ((مثال کے طور پر for loop کا استعمال ، بول ویلیو کا فرق ، منطقی اور ، منطقی غیر ، منطقی یا کے استعمال کا فرق وغیرہ...) ۔

پائیتھون کوڈ کا نقل و حمل:

import time

def GetNewCycleRecords(sourceRecords, targetCycle):
    ret = []

    # 首先获取源K线数据的周期
    if not sourceRecords or len(sourceRecords) < 2 : 
        return None

    sourceLen = len(sourceRecords)
    sourceCycle = sourceRecords[-1]["Time"] - sourceRecords[-2]["Time"]

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

    if (1000 * 60 * 60) % targetCycle != 0 and (1000 * 60 * 60 * 24) % targetCycle != 0 : 
        Log("targetCycle:", targetCycle)
        Log("sourceCycle:", sourceCycle)
        Log((1000 * 60 * 60) % targetCycle, (1000 * 60 * 60 * 24) % targetCycle)
        raise "targetCycle cannot complete the cycle."
    
    multiple = targetCycle / sourceCycle

    isBegin = False
    count = 0 
    barHigh = 0 
    barLow = 0 
    barOpen = 0
    barClose = 0 
    barTime = 0 
    barVol = 0 

    for i in range(sourceLen) : 
        # 获取时区偏移数值
        n = time.altzone        

        if ((1000 * 60 * 60 * 24) - (sourceRecords[i]["Time"] * 1000) % (1000 * 60 * 60 * 24) + (n * 1000)) % targetCycle == 0 :
            isBegin = True

        if isBegin : 
            if count == 0 : 
                barHigh = sourceRecords[i]["High"]
                barLow = sourceRecords[i]["Low"]
                barOpen = sourceRecords[i]["Open"]
                barClose = sourceRecords[i]["Close"]
                barTime = sourceRecords[i]["Time"]
                barVol = sourceRecords[i]["Volume"]
                count += 1
            elif count < multiple : 
                barHigh = max(barHigh, sourceRecords[i]["High"])
                barLow = min(barLow, sourceRecords[i]["Low"])
                barClose = sourceRecords[i]["Close"]
                barVol += sourceRecords[i]["Volume"]
                count += 1

            if count == multiple or i == sourceLen - 1 :
                ret.append({
                    "High" : barHigh,
                    "Low" : barLow,
                    "Open" : barOpen,
                    "Close" : barClose,
                    "Time" : barTime,
                    "Volume" : barVol,
                })
                count = 0
    
    return ret 

# 测试
def main():
    while True:
        r = exchange.GetRecords()
        r2 = GetNewCycleRecords(r, 1000 * 60 * 60 * 4)      

        ext.PlotRecords(r2, "r2")                                 
        Sleep(1000)                                             

ٹیسٹ

سکے کی مارکیٹنگ کا گرافimg

چار گھنٹے کے چارٹ کا تجزیہimg

مندرجہ بالا کوڈ صرف سیکھنے کے حوالہ کے طور پر استعمال کیا جاتا ہے، اگر مخصوص حکمت عملی میں استعمال کیا جاتا ہے تو، آپ کی ضروریات کے مطابق ترمیم یا ٹیسٹ کریں. اگر آپ کے پاس کوئی بگ ہے یا آپ کے پاس اس میں بہتری لانے کے لئے کوئی تجویز ہے تو ، براہ کرم ہمیں بتائیں ، بہت بہت شکریہ o^_^o


متعلقہ

مزید

خطبہ/upload/asset/30da6ebb64b8003b1686.jpg ہاہاہا ، ڈرم ڈرم ٹیچر میری نسبت زیادہ تکنیکی ہے۔ اسکرین شاٹ ڈرم ڈرم ٹیچر کو حوالہ دیں۔

خطبہpyresample فنکشن کے ساتھ ایک سطر کو حل کیا گیا ہے۔

چھوٹا سا خوابزین، میں پائیتھون نہیں جانتا، میں صرف ابتدائی ہوں۔

چھوٹا سا خواب666 سیکھ رہا ہے۔