آپ کو پیتھون ورژن میں ایک K لائن ترکیب تقریب لکھنے کے لئے سکھانے کے

مصنف:لیدیہ, تخلیق: 2022-12-26 09:28:58, تازہ کاری: 2023-09-20 09:48:46

img

آپ کو پیتھون ورژن میں ایک K لائن ترکیب تقریب لکھنے کے لئے سکھانے کے

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

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

  function GetNewCycleRecords (sourceRecords, targetCycle) {    // K-line synthesis function
      var ret = []
      
      // Obtain the period of the source K-line data first
      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 
  }

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

مائیگریٹڈ پائیتھون کوڈ:

import time

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

    # Obtain the period of the source K-line data first
    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) : 
        # Get the time zone offset value
        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 

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

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

ٹیسٹ

Huobi مارکیٹ گراف

img

بیک ٹسٹ ترکیب کا 4 گھنٹے کا چارٹ

img

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


متعلقہ

مزید