Mempermudah logik garis grafik strategi untuk memanggil fungsi yang telah dibungkus secara langsung
Fungsi sama dengan versi JS
Dipindahkan ke JS edisi
# 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)
churchillxyHai, saya sering kehilangan bendera yang telah dicat ketika saya memanggil PlotFlag selepas menyegarkan halaman, adakah ada penyelesaian untuk ini?
churchillxyBolehkah anda mengumpul beberapa garis k ke dalam satu carta? Contohnya: garis K dari BTC + garis K dari ETH
m0606Ia kelihatan seperti perpustakaan baris gambar yang serasi dengan dua pertiga Python.
lwc87Adakah anda ada panduan untuk menggunakan fungsi templat ini?
haorenBolehkah anda membuat carta pergerakan yang disesuaikan? Kumpulkan beberapa garisan k ke dalam satu ikon; contohnya: garisan harga btc + garisan harga ltc + garisan harga eth + garisan harga komposit mata wang pelbagai dan sebagainya, beberapa garisan di dalam satu carta, sama seperti beberapa garisan harga rata di dalam carta k, semuanya ditunjukkan pada carta yang sama
LogaPujian!
Pencipta Kuantiti - Impian KecilOh, beberapa parameter tidak boleh dihantar dengan salah.
churchillxyMasalah telah diselesaikan, jumlah tajuk adalah terhad, teks boleh kaya, tidak boleh diputar balik, terima kasih
Pencipta Kuantiti - Impian KecilTanda-tanda yang telah digambar, yang dikatakan tidak boleh hilang, telah digambar, anda tidak mengubahnya, tidak akan berubah, tetap.
Pencipta Kuantiti - Impian KecilPada grafik di atas, anda menandai ini hanya pada halaman FMZ, jumlah data yang dipaparkan pada setiap bahagian halaman, jika satu carta mempunyai 100,000 data, anda menetapkan setiap bahagian halaman untuk memaparkan 10,000 data, 100,000 data akan dipaparkan secara berasingan pada 10 halaman.
churchillxyApakah had data setiap halaman di sini? Bagaimana data saya akan dipaparkan jika melebihi had ini? /upload/asset/245f7442dfa3212019b47.png
Pencipta Kuantiti - Impian KecilKelas baris boleh digambarkan dengan pelbagai grafik terkini. Kelas ini hanya boleh digambarkan secara individu.
Pencipta Kuantiti - Impian KecilFungsi utama dalam templat adalah contoh penggunaan, boleh lihat.
Pencipta Kuantiti - Impian KecilTerima kasih atas sokongan anda!