پائیتھون ورژن ڈرائنگ کلاس لائبریری (مطابقت پذیر 2/3)

مصنف:چھوٹا سا خواب، تاریخ: 2017-04-10 17:20:26
ٹیگز:آلہپائیتھونچارٹ

حکمت عملی گراف لائنوں کی منطق کو آسان بنا دیا گیا ہے، اور آپ کو براہ راست پیکڈ افعال کو کال کر سکتے ہیں

  • کثیر لائن پینٹنگ کی حمایت کریں
  • K تھریڈ گراف کی حمایت
  • جھنڈے کے چھوٹے شبیہیں کی حمایت
  • آپ مزید گرافکس کی حمایت بھی کر سکتے ہیں

JS ورژن کے برابر

جے ایس ورژن میں نقل کیا گیا

اگر آپ کو کوئی سوالات ہیں تو، براہ کرم کلک کریں 359706687


# Python 2/3 兼容版本
import time
chart = None
series = []
labelIdx = {}
preBarTime = 0
preFlagTime = 0
preDotTime = {}

cfg = {
    "tooltip" : {
        "xDateFormat" : "%Y-%m-%d %H:%M:%S, %A"
    },
    "legend" : {
        "enabled" : True
    },
    "plotOptions" : {
        "candlestick" : {
            "color" : "#d75442",
            "upColor" : "#6ba583"
        }
    },
    "rangeSelector" : {
        "buttons" : [{
            "type" : "hour",
            "count" : 1,
            "text" : "1h",
        }, {
            "type" : 'hour',
            "count" : 3,
            "text" : "3h"
        }, {
            "type" : "hour",
            "count" : 8,
            "text" : "8h"
        }, {
            "type" : "all",
            "text" : "All"
        }],
        "selected" : 2,
        "inputEnabled" : True
    },
    "series" : series,
}

def GetCfg():
    global cfg
    return cfg

# 画水平线
def PlotHLine(value = None, label = None, color = None, style = None):
    global cfg, chart
    if ("yAxis" in cfg) == False :
        cfg.setdefault("yAxis", {"plotLines" : []})
    elif ("plotLines" in cfg["yAxis"]) == False :
        cfg["yAxis"].setdefault("plotLines", [])
    
    obj = {
        "value" : value,
        "color" : color or "red",
        "width" : 2,
        "dashStyle" : style or "Solid",
        "label" : {
            "text" : label or "",
            "align" : "center"
        }
    }
    found = False
    for i in range(len(cfg["yAxis"]["plotLines"])) : 
        if cfg["yAxis"]["plotLines"][i]["label"]["text"] == label : 
            cfg["yAxis"]["plotLines"][i] = obj
            found = True
    if not found :
        cfg["yAxis"]["plotLines"].append(obj)
    if not chart :
        chart = Chart(cfg)
        chart.update(cfg)    # 更新图表
    else :
        chart.update(cfg)

# 画K线
def PlotRecords(records, title = None):
    global labelIdx, series, preBarTime, chart
    if not chart :
        chart = Chart(cfg)
        chart.reset()
    if ("candlestick" in labelIdx) == False : 
        cfg["__isStock"] = True
        seriesIdx = len(series)
        series.append({
            "type" : "candlestick",
            "name" : "" if title == None else title,
            "id" : "primary",
            "data" : []
            })
        chart.update(cfg)
        labelIdx.setdefault("candlestick", seriesIdx)
    else :
        seriesIdx = labelIdx["candlestick"]
    if isinstance(records, dict) and ("Time" in records) == True :
        Bar = records
        if Bar["Time"] == preBarTime :
            chart.add(seriesIdx, [Bar["Time"], Bar["Open"], Bar["High"], Bar["Low"], Bar["Close"]], -1)
        elif Bar["Time"] > preBarTime : 
            preBarTime = Bar.Time
            chart.add(seriesIdx, [Bar["Time"], Bar["Open"], Bar["High"], Bar["Low"], Bar["Close"]])    
    else :
        for i in range(len(records)) :
            if records[i]["Time"] == preBarTime :
                chart.add(seriesIdx, [records[i]["Time"], records[i]["Open"], records[i]["High"], records[i]["Low"], records[i]["Close"]], -1)
            elif records[i]["Time"] > preBarTime :
                preBarTime = records[i]["Time"]
                chart.add(seriesIdx, [records[i]["Time"], records[i]["Open"], records[i]["High"], records[i]["Low"], records[i]["Close"]])
    return chart

# 画指标线
def PlotLine(label, dot, Ntime = None):
    global labelIdx, chart, series, preDotTime
    if not chart :
        cfg.setdefault("xAxis", {
            "type" : "datetime"
            })
        chart = Chart(cfg)
        chart.reset()
    if (label in labelIdx) == False :
        seriesIdx = len(series)
        preDotTime.setdefault(str(seriesIdx), 0)
        labelIdx[label] = seriesIdx
        series.append({
            "type" : "line",
            "yAxis" : 0,
            "showInLegend" : True,
            "name" : label,
            "data" : [],
            "tooltip" : {"valueDecimals" : 5}
            })
        chart.update(cfg)
    else :
        seriesIdx = labelIdx[label]
    if Ntime == None :
        Ntime = _N(time.time() * 1000, 0)
    if preDotTime[str(seriesIdx)] != Ntime :
        preDotTime[str(seriesIdx)] = Ntime
        chart.add(seriesIdx, [Ntime, dot])
    else :
        chart.add(seriesIdx, [Ntime, dot], -1)
    return chart

# 画标记
def PlotFlag(time, text, title, shape = "", color = ""):
    global chart, cfg, labelIdx, preFlagTime
    if not chart :
        chart = Chart(cfg)
        chart.reset()
    label = "flag"
    if (label in labelIdx) == False : 
        seriesIdx = len(series)
        labelIdx[label] = seriesIdx
        series.append({
            "type" : "flags",
            "onSeries" : "primary",
            "data" : []
            })
        chart.update(cfg)
    else :
        seriesIdx = labelIdx[label]
    obj = {
        "x" : time,
        "color" : color,
        "shape" : shape,
        "title" : title,
        "text" : text
    }
    if preFlagTime != time : 
        preFlagTime = time
        chart.add(seriesIdx, obj)
    else :
        chart.add(seriesIdx, obj, -1)
    return chart

# 设置图表标题
def PlotTitle(title, chartTitle = None):
    global cfg
    if ("subtitle" in cfg) == True : 
        cfg["subtitle"] = {"text" : title}
    else :
        cfg.setdefault("subtitle", {"text" : title})
    if chartTitle != None :
        if (title in cfg) == True :
            cfg["title"] = {"text" : chartTitle}
        else :
            cfg.setdefault("title", {"text" : chartTitle})
    if chart :
        chart.update(cfg)

# 导出函数
ext.GetCfg = GetCfg
ext.PlotHLine = PlotHLine
ext.PlotRecords = PlotRecords
ext.PlotLine = PlotLine
ext.PlotFlag = PlotFlag
ext.PlotTitle = PlotTitle

# 测试代码
def main():
    isFirst = True
    while True:
        records = exchange.GetRecords()
        if records and len(records) > 0 :
            ext.PlotRecords(records, "BTC")
            if isFirst :
                ext.PlotFlag(records[-1]["Time"], "Start", "S")
                isFirst = False
                ext.PlotHLine(records[-1]["Close"], "Close")
        ticker = exchange.GetTicker()
        if ticker :
            ext.PlotLine("Last", ticker.Last)
            ext.PlotLine("buy", ticker.Buy + 10)
            ext.PlotTitle("Last" + str(ticker.Last))
        Sleep(60000)



متعلقہ

مزید

چرچلسیہیلو، میں پلاٹ فلیگ کو کال کر رہا ہوں، اور صفحہ کو تازہ کرنے کے بعد، میں اکثر ایک پینٹ فلیگ کھو دیتا ہوں، کیا اس کا کوئی حل ہے؟

چرچلسیبراہ کرم، کیا آپ ایک گراف میں کئی کٹر لائنیں جمع کر سکتے ہیں؟ مثال کے طور پر: بی ٹی سی کی کٹر لائن + ای ٹی ایچ کی کٹر لائن

m0606یہ ایک دو تہائی پیتھون کے ساتھ ہم آہنگ ڈرائنگ لائن کلاس لائبریری کی طرح لگتا ہے۔

lwc87استاد، کیا آپ کے پاس اس ٹیمپلیٹ فنکشن کا استعمال کرنے کا کوئی طریقہ ہے؟

ہورینکیا آپ کو اپنی مرضی کے مطابق ٹریڈنگ گراف مل سکتا ہے؟ کئی لائنوں کو ایک آئکن میں جمع کریں۔ مثال کے طور پر: بی ٹی سی قیمت لائن + ایل ٹی سی قیمت لائن + ایتھ قیمت لائن + کثیر کرنسیوں کی جامع قیمت لائن وغیرہ ، صرف کچھ لائنیں ایک ہی گراف پر دکھائی دیتی ہیں ، جیسے کہ کئی قیمت لائنیں ایک ہی گراف پر دکھائی دیتی ہیں۔

لوگاجی ہاں!

چھوٹا سا خواباوہ ، کچھ پیرامیٹرز غلط نہیں ہوسکتے ہیں۔

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

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

چھوٹا سا خوابآپ نے اوپر دیئے گئے گراف میں صرف ایف ایم زیڈ کے صفحے پر اعداد و شمار کی تعداد کو نشان زد کیا ہے۔ اگر آپ کے پاس 100،000 اعداد و شمار ہیں تو ، آپ یہاں ہر صفحے پر 10،000 اعداد و شمار دکھانے کے لئے مقرر کرتے ہیں ، اور یہ 100،000 اعداد و شمار 10 صفحات دکھائے جائیں گے۔ یہ ترتیب آپ کے کوڈ ڈیزائن سے کوئی تعلق نہیں رکھتی ہے۔ یہ صرف ایف ایم زیڈ کے صفحے کی نمائش کا کنٹرول ہے۔

چرچلسیبراہ کرم یہاں فی صفحہ ڈیٹا کی حد کیا ہے؟ اگر میرا ڈیٹا اس حد سے زیادہ ہے تو میں اسے کیسے دکھاؤں؟ /upload/asset/245f7442dfa3212019b47.png

چھوٹا سا خوابتازہ ترین کثیر چارٹ لائنوں کی کلاسوں کو ڈرائنگ کر سکتے ہیں۔ یہ کلاسیں صرف ایک ہی ڈرائنگ کر سکتی ہیں۔

چھوٹا سا خوابٹیمپلیٹ میں اہم فنکشن مثال کے طور پر استعمال کیا جاتا ہے، آپ دیکھ سکتے ہیں.

چھوٹا سا خوابشکریہ آپ کی حمایت کے لئے۔ اگر آپ کے پاس کوئی سوال ہے تو تبصرہ کریں