Mempermudah logika garis grafik strategi, dapat langsung memanggil fungsi yang sudah terbungkus
Fungsi yang sama dengan versi JS
Dipindahkan ke JS edisi Perpustakaan garis gambar
# 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)
churchillxyHalo, saya sering kehilangan flag yang sudah dicat ketika saya memanggil PlotFlag setelah refresh halaman, apakah ada solusi?
churchillxyApakah Anda bisa mengumpulkan beberapa garis k ke dalam satu grafik? Misalnya: garis K dari BTC + garis K dari ETH
m0606Seperti halnya dengan Python yang kompatibel dengan dua pertiga dari kelas garis gambar.
lwc87Apakah ada petunjuk tentang bagaimana menggunakan fungsi template ini?
HaorenDapatkah Anda menemukan grafik yang disesuaikan? Mengumpulkan beberapa garis k ke dalam satu ikon; misalnya: garis harga btc + garis harga ltc + garis harga eth + garis harga komposit multi mata uang dll, beberapa garis di satu grafik, seperti beberapa garis harga rata-rata di grafik k, semuanya muncul di grafik yang sama
LogaPujilah!
Penemu Kuantitas - Mimpi Kecil"Saya tidak tahu apa yang akan terjadi", katanya.
churchillxyMasalahnya sudah diselesaikan, jumlah judul terbatas, konten teks dapat diperkaya, tidak bisa dibalik, terima kasih.
Penemu Kuantitas - Mimpi KecilTanda-tanda yang telah digambar, yang seharusnya tidak akan hilang, telah digambar, jika Anda tidak mengubahnya, tidak akan berubah, tetap.
Penemu Kuantitas - Mimpi KecilPada grafik di atas, Anda menandai ini hanya pada halaman FMZ, jumlah data yang ditampilkan pada setiap bagian halaman, jika sebuah grafik memiliki 100.000 data, Anda mengatur untuk menampilkan 10.000 data pada setiap bagian halaman, dan 100.000 data ini akan menampilkan 10 halaman terpisah.
churchillxyApa batas data per halaman di sini? Bagaimana data saya akan ditampilkan jika melebihi batas ini? /upload/asset/245f7442dfa3212019b47.png
Penemu Kuantitas - Mimpi KecilKelas baris dapat digambar dengan multi-grafik terbaru. Kelas ini hanya dapat menggambar satuan.
Penemu Kuantitas - Mimpi KecilFungsi utama dalam templat adalah contoh penggunaan, Anda bisa lihat.
Penemu Kuantitas - Mimpi KecilTerima kasih atas dukungannya!