حکمت عملی لکھنے اور استعمال کرتے وقت ، ہم اکثر کچھ نایاب استعمال شدہ 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 مارکیٹ گراف
بیک ٹسٹ ترکیب کا 4 گھنٹے کا چارٹ
مندرجہ بالا کوڈ صرف حوالہ کے لئے ہے۔ اگر یہ مخصوص حکمت عملیوں میں استعمال ہوتا ہے تو ، براہ کرم مخصوص تقاضوں کے مطابق ترمیم اور جانچ کریں۔ اگر کوئی بگ یا بہتری کی تجویز ہے تو ، براہ کرم ایک پیغام چھوڑیں۔ بہت شکریہ. o ^ ^ o