Spaces:
Running
Running
intraday time axis; baselines seeded at season open
Browse files- app/anchors.py +103 -84
- app/ledger.py +15 -0
- app/main.py +2 -1
- app/static/index.html +9 -2
app/anchors.py
CHANGED
|
@@ -1,84 +1,103 @@
|
|
| 1 |
-
# -*- coding: utf-8 -*-
|
| 2 |
-
"""๊ธฐ์ค์ ๋ด โ ์ฐธ๊ฐ์์ ๊ฐ์ ํ์ ๋์ผ ์ฒ๋.
|
| 3 |
-
|
| 4 |
-
ODC๊ฐ ์น์ธ์ฝ๊ณผ ๋ถํ์ฑ ํํฉ๋ฌผ์ ๊ฐ์ ํ์ ๋ฃ์ด ์ฒ๋๋ฅผ ๋ณด์ฌ์ฃผ๋ฏ,
|
| 5 |
-
๋ฆฌ๋๋ณด๋์ ๊ธฐ์ค ์ ๋ต์ ํจ๊ป ์ฌ๋ฆฐ๋ค. ์ฒ๋๊ฐ ์๋ ์์ํ๋ ์ฝ์ ์ ์๋ค.
|
| 6 |
-
|
| 7 |
-
๐ด ์ฃผ์ต์ธก ๋ชจ๋ธ์ ๋ฃ์ง ์๋๋ค.
|
| 8 |
-
์ด ์ฑ๋ฆฐ์ง์ ๋ช
๋ถ์ "๋๊ฐ ๋ ๋์ ์์ธก ๋ชจ๋ธ์ ๋ง๋๋๊ฐ"์ด์ง
|
| 9 |
-
"์ฃผ์ต์๊ฐ ์ ์ผ ์ํ๋ค"๊ฐ ์๋๋ค. ์ฃผ์ต์๊ฐ ์๊ธฐ ๋ชจ๋ธ์ ์ฐธ๊ฐ์ ํ์ ์ฌ๋ฆฌ๋ฉด
|
| 10 |
-
๊ทธ ๋ช
๋ถ์ด ํ๋ ค์ง๋ค. ๊ธฐ์ค์ ์ ์ฒ๋์ด์ง ๊ฒฝ์์๊ฐ ์๋๋ค.
|
| 11 |
-
|
| 12 |
-
๊ธฐ์ค์ ์
โ ์ ๋ถ ๊ณต๊ฐ๋ ๊ต๊ณผ์ ๊ธฐ๋ฒ์ด๋ค
|
| 13 |
-
BUYHOLD ํญ์ +1. ์ด๊ฑธ ๋ชป ์ด๊ธฐ๋ฉด ์๋ฌด ์๋ฏธ ์๋ค
|
| 14 |
-
VOLTARGET ์ง์๊ฐ์ค ๋ณ๋์ฑ์ผ๋ก ํฌ๊ธฐ๋ง ์กฐ์ . ๋ฐฉํฅ์ ๋กฑ ๊ณ ์
|
| 15 |
-
RANDOM ๋งค์ผ -1/0/+1 ๋ฌด์์. ๋ฐ๋ฅ
|
| 16 |
-
|
| 17 |
-
๐ VOLTARGET ์ ๋ฐฉํฅ์ ์์ธกํ์ง ์๋๋ค.
|
| 18 |
-
๋ฐฉํฅ ์์ธก์ 60๊ฐ ๋ณ์๋ก ๋ค์ฏ ๋จ๊ณ์ ๊ฑธ์ณ ์ํํ๊ณ ์ ๋ถ ์์ธก๋ ฅ์ด ์์๋ค.
|
| 19 |
-
๊ธฐ์ค์ ์ด ๋ฐฉํฅ์ ๋งํ๋ ์ฒํ๋ฉด, ๊ธฐ๊ฐํ ๊ฒ์ ๊ณต๊ฐ๋ฉด์ ์ฌ๋ฆฌ๋ ์
์ด ๋๋ค.
|
| 20 |
-
๊ทธ๋์ ์ด ๊ธฐ์ค์ ์ '์ผ๋ง๋ ํฌ๊ฒ ๋ค ๊ฒ์ธ๊ฐ'๋ง ์ ํ๋ค.
|
| 21 |
-
"""
|
| 22 |
-
import os, sys
|
| 23 |
-
import numpy as np, pandas as pd
|
| 24 |
-
|
| 25 |
-
HERE = os.path.dirname(os.path.abspath(__file__))
|
| 26 |
-
sys.path[:0] = [HERE, os.path.dirname(HERE)]
|
| 27 |
-
import ledger as L
|
| 28 |
-
|
| 29 |
-
ANCHORS = {
|
| 30 |
-
"BUYHOLD": "๋จ์ ๋ณด์ ",
|
| 31 |
-
"VOLTARGET": "๋ณ๋์ฑ ํ๊ฒํ
",
|
| 32 |
-
"RANDOM": "๋ฌด์์",
|
| 33 |
-
}
|
| 34 |
-
SPAN = 60
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
def position(kind, px, seed=0):
|
| 38 |
-
"""์ค๋ ์ก์ ํฌ์ง์
. -1 ~ +1."""
|
| 39 |
-
if kind == "BUYHOLD":
|
| 40 |
-
return 1.0
|
| 41 |
-
|
| 42 |
-
if kind == "RANDOM":
|
| 43 |
-
# ๋ ์ง๋ฅผ ์๋์ ๋ฃ์ด ๊ฐ์ ๋ ๊ฐ์ ๊ฐ โ ์ฑ์ ์ด ์ฌํ ๊ฐ๋ฅํด์ผ ํ๋ค
|
| 44 |
-
g = np.random.default_rng(
|
| 45 |
-
int(pd.Timestamp.utcnow().strftime("%Y%m%d")) * 97 + seed)
|
| 46 |
-
return float(g.choice([-1.0, 0.0, 1.0]))
|
| 47 |
-
|
| 48 |
-
s = np.log(px).diff().ewm(span=SPAN).std().dropna()
|
| 49 |
-
if len(s) < SPAN * 2:
|
| 50 |
-
return 0.0
|
| 51 |
-
# ๋ชฉํ ๋ณ๋์ฑ = ๊ทธ ์ข
๋ชฉ ๊ณผ๊ฑฐ ์ค์๊ฐ. ๋ณ๋์ฑ์ด ๋ฎ์ผ๋ฉด ํฌ๊ฒ, ๋์ผ๋ฉด ์๊ฒ ๋ ๋ค.
|
| 52 |
-
target = float(s.iloc[:len(s) // 2].median())
|
| 53 |
-
return float(max(0.0, min(1.0, target / float(s.iloc[-1]))))
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
def run(assets, prices_fn, dry=False):
|
| 57 |
-
"""๊ธฐ์ค์ ์
์ ์ค๋ ํฌ์ง์
์ ๊ณ์ฐํด ์์ฅ์ ๋ฃ๋๋ค.
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""๊ธฐ์ค์ ๋ด โ ์ฐธ๊ฐ์์ ๊ฐ์ ํ์ ๋์ผ ์ฒ๋.
|
| 3 |
+
|
| 4 |
+
ODC๊ฐ ์น์ธ์ฝ๊ณผ ๋ถํ์ฑ ํํฉ๋ฌผ์ ๊ฐ์ ํ์ ๋ฃ์ด ์ฒ๋๋ฅผ ๋ณด์ฌ์ฃผ๋ฏ,
|
| 5 |
+
๋ฆฌ๋๋ณด๋์ ๊ธฐ์ค ์ ๋ต์ ํจ๊ป ์ฌ๋ฆฐ๋ค. ์ฒ๋๊ฐ ์๋ ์์ํ๋ ์ฝ์ ์ ์๋ค.
|
| 6 |
+
|
| 7 |
+
๐ด ์ฃผ์ต์ธก ๋ชจ๋ธ์ ๋ฃ์ง ์๋๋ค.
|
| 8 |
+
์ด ์ฑ๋ฆฐ์ง์ ๋ช
๋ถ์ "๋๊ฐ ๋ ๋์ ์์ธก ๋ชจ๋ธ์ ๋ง๋๋๊ฐ"์ด์ง
|
| 9 |
+
"์ฃผ์ต์๊ฐ ์ ์ผ ์ํ๋ค"๊ฐ ์๋๋ค. ์ฃผ์ต์๊ฐ ์๊ธฐ ๋ชจ๋ธ์ ์ฐธ๊ฐ์ ํ์ ์ฌ๋ฆฌ๋ฉด
|
| 10 |
+
๊ทธ ๋ช
๋ถ์ด ํ๋ ค์ง๋ค. ๊ธฐ์ค์ ์ ์ฒ๋์ด์ง ๊ฒฝ์์๊ฐ ์๋๋ค.
|
| 11 |
+
|
| 12 |
+
๊ธฐ์ค์ ์
โ ์ ๋ถ ๊ณต๊ฐ๋ ๊ต๊ณผ์ ๊ธฐ๋ฒ์ด๋ค
|
| 13 |
+
BUYHOLD ํญ์ +1. ์ด๊ฑธ ๋ชป ์ด๊ธฐ๋ฉด ์๋ฌด ์๋ฏธ ์๋ค
|
| 14 |
+
VOLTARGET ์ง์๊ฐ์ค ๋ณ๋์ฑ์ผ๋ก ํฌ๊ธฐ๋ง ์กฐ์ . ๋ฐฉํฅ์ ๋กฑ ๊ณ ์
|
| 15 |
+
RANDOM ๋งค์ผ -1/0/+1 ๋ฌด์์. ๋ฐ๋ฅ
|
| 16 |
+
|
| 17 |
+
๐ VOLTARGET ์ ๋ฐฉํฅ์ ์์ธกํ์ง ์๋๋ค.
|
| 18 |
+
๋ฐฉํฅ ์์ธก์ 60๊ฐ ๋ณ์๋ก ๋ค์ฏ ๋จ๊ณ์ ๊ฑธ์ณ ์ํํ๊ณ ์ ๋ถ ์์ธก๋ ฅ์ด ์์๋ค.
|
| 19 |
+
๊ธฐ์ค์ ์ด ๋ฐฉํฅ์ ๋งํ๋ ์ฒํ๋ฉด, ๊ธฐ๊ฐํ ๊ฒ์ ๊ณต๊ฐ๋ฉด์ ์ฌ๋ฆฌ๋ ์
์ด ๋๋ค.
|
| 20 |
+
๊ทธ๋์ ์ด ๊ธฐ์ค์ ์ '์ผ๋ง๋ ํฌ๊ฒ ๋ค ๊ฒ์ธ๊ฐ'๋ง ์ ํ๋ค.
|
| 21 |
+
"""
|
| 22 |
+
import os, sys
|
| 23 |
+
import numpy as np, pandas as pd
|
| 24 |
+
|
| 25 |
+
HERE = os.path.dirname(os.path.abspath(__file__))
|
| 26 |
+
sys.path[:0] = [HERE, os.path.dirname(HERE)]
|
| 27 |
+
import ledger as L
|
| 28 |
+
|
| 29 |
+
ANCHORS = {
|
| 30 |
+
"BUYHOLD": "๋จ์ ๋ณด์ ",
|
| 31 |
+
"VOLTARGET": "๋ณ๋์ฑ ํ๊ฒํ
",
|
| 32 |
+
"RANDOM": "๋ฌด์์",
|
| 33 |
+
}
|
| 34 |
+
SPAN = 60
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def position(kind, px, seed=0):
|
| 38 |
+
"""์ค๋ ์ก์ ํฌ์ง์
. -1 ~ +1."""
|
| 39 |
+
if kind == "BUYHOLD":
|
| 40 |
+
return 1.0
|
| 41 |
+
|
| 42 |
+
if kind == "RANDOM":
|
| 43 |
+
# ๋ ์ง๋ฅผ ์๋์ ๋ฃ์ด ๊ฐ์ ๋ ๊ฐ์ ๊ฐ โ ์ฑ์ ์ด ์ฌํ ๊ฐ๋ฅํด์ผ ํ๋ค
|
| 44 |
+
g = np.random.default_rng(
|
| 45 |
+
int(pd.Timestamp.utcnow().strftime("%Y%m%d")) * 97 + seed)
|
| 46 |
+
return float(g.choice([-1.0, 0.0, 1.0]))
|
| 47 |
+
|
| 48 |
+
s = np.log(px).diff().ewm(span=SPAN).std().dropna()
|
| 49 |
+
if len(s) < SPAN * 2:
|
| 50 |
+
return 0.0
|
| 51 |
+
# ๋ชฉํ ๋ณ๋์ฑ = ๊ทธ ์ข
๋ชฉ ๊ณผ๊ฑฐ ์ค์๊ฐ. ๋ณ๋์ฑ์ด ๋ฎ์ผ๋ฉด ํฌ๊ฒ, ๋์ผ๋ฉด ์๊ฒ ๋ ๋ค.
|
| 52 |
+
target = float(s.iloc[:len(s) // 2].median())
|
| 53 |
+
return float(max(0.0, min(1.0, target / float(s.iloc[-1]))))
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
def run(assets, prices_fn, dry=False, opens=None):
|
| 57 |
+
"""๊ธฐ์ค์ ์
์ ์ค๋ ํฌ์ง์
์ ๊ณ์ฐํด ์์ฅ์ ๋ฃ๋๋ค.
|
| 58 |
+
|
| 59 |
+
๐ด ๊ธฐ์ค์ ์ **์์ฆ ๊ฐ๋ง ์์ ๋ถํฐ** ์กด์ฌํด์ผ ํ๋ค. ์๋ฒ๊ฐ ์ฒ์ ๋ฌ ์๊ฐ์
|
| 60 |
+
๋ฃ์ผ๋ฉด ๊ทธ ์ ๊ตฌ๊ฐ์ด ๋น์ด, ๋จ์ ๋ณด์ ๊ฐ ์์ฅ์ ๊ทธ๋๋ก ๋ฐ๋ผ๊ฐ์ง ์๋๋ค.
|
| 61 |
+
์ค์ ๋ก ๊ฐ๋ง์ผ์ ์์ฅ โ0.82% ์ธ๋ฐ ๋จ์ ๋ณด์ ๊ฐ +0.12% ๋ก ๋์๋ค โ
|
| 62 |
+
๊ธฐ์ค์ ์ด ํ๋ฝ ๊ตฌ๊ฐ์ ํต์งธ๋ก ๋น์ผ๊ฐ ๊ฒ์ด๋ผ ์ฒ๋ ๊ตฌ์ค์ ๋ชป ํ๋ค.
|
| 63 |
+
|
| 64 |
+
๐ ๊ฐ์ด ๊ทธ๋๋ก๋ฉด ๋ค์ ์ฐ์ง ์๋๋ค. ์๋ฒ๊ฐ ์ฌ์์ํ ๋๋ง๋ค ๊ฐ์ ํฌ์ง์
์
|
| 65 |
+
์์ผ๋ฉด ์์ฅ์ด ๋ถํ๊ณ , ๋ฌด์์ด ์ค์ ํ๋จ ๋ณ๊ฒฝ์ธ์ง ์ฝ์ ์ ์๊ฒ ๋๋ค.
|
| 66 |
+
"""
|
| 67 |
+
if not dry:
|
| 68 |
+
for name in ANCHORS:
|
| 69 |
+
L.register(name, ANCHORS[name], "anchor", list(assets))
|
| 70 |
+
out = []
|
| 71 |
+
for i, a in enumerate(assets):
|
| 72 |
+
px = prices_fn(a)
|
| 73 |
+
if px is None or len(px) < SPAN * 2:
|
| 74 |
+
continue
|
| 75 |
+
for name in ANCHORS:
|
| 76 |
+
p = round(position(name, px, seed=i), 4)
|
| 77 |
+
note = ""
|
| 78 |
+
if not dry:
|
| 79 |
+
if opens and not L.positions(a, name):
|
| 80 |
+
# ๊ฐ๋ง ์์ ์ ๋จผ์ ์ฌ๋๋ค. ๊ทธ๋์ผ ์ฒ๋๊ฐ ์ ๊ตฌ๊ฐ์ ๋ฎ๋๋ค.
|
| 81 |
+
L.seed(name, a, p, opens, "anchor-open")
|
| 82 |
+
note = "๊ฐ๋ง ์์ ๊ธฐ๋ก"
|
| 83 |
+
last = L.latest(a, name)
|
| 84 |
+
if last is None or abs(last["p"] - p) > 1e-9:
|
| 85 |
+
L.submit(name, a, p, "anchor")
|
| 86 |
+
note = note or "๊ฐฑ์ "
|
| 87 |
+
else:
|
| 88 |
+
note = note or "๋ณ๋ ์์"
|
| 89 |
+
out.append({"anchor": name, "asset": a, "position": p, "note": note})
|
| 90 |
+
return out
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
if __name__ == "__main__":
|
| 94 |
+
import main as M
|
| 95 |
+
dry = "--dry" in sys.argv
|
| 96 |
+
rows = run(list(M.ASSETS), lambda a: M.prices(a, "1d", 1500), dry=dry)
|
| 97 |
+
print("๊ธฐ์ค์ ํฌ์ง์
%s\n" % ("(๋ชจ์)" if dry else "์ ์ถ ์๋ฃ"))
|
| 98 |
+
by = {}
|
| 99 |
+
for r in rows:
|
| 100 |
+
by.setdefault(r["asset"], {})[r["anchor"]] = r["position"]
|
| 101 |
+
print(" %-6s" % "์ข
๋ชฉ" + "".join("%12s" % k for k in ANCHORS))
|
| 102 |
+
for a, v in by.items():
|
| 103 |
+
print(" %-6s" % a + "".join("%12.3f" % v.get(k, 0) for k in ANCHORS))
|
app/ledger.py
CHANGED
|
@@ -233,6 +233,21 @@ def submit(user_id, asset, position, source="api"):
|
|
| 233 |
return rec
|
| 234 |
|
| 235 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 236 |
def positions(asset, user_id=None):
|
| 237 |
out = []
|
| 238 |
p = _p("positions", "%s.jsonl" % asset)
|
|
|
|
| 233 |
return rec
|
| 234 |
|
| 235 |
|
| 236 |
+
def seed(user_id, asset, position, at, source="seed"):
|
| 237 |
+
"""์ง์ ํ ์๊ฐ์ผ๋ก ํฌ์ง์
์ ๊ธฐ๋กํ๋ค. ๊ธฐ์ค์ ์ ์์ฆ ๊ฐ๋ง ์์ ์ ์ฌ์ ๋๋ง ์ด๋ค.
|
| 238 |
+
|
| 239 |
+
๐ด ์ฐธ๊ฐ์์๊ฒ๋ ์ ๋ ์ด์ด ์ฃผ์ง ์๋๋ค. ๊ณผ๊ฑฐ ์๊ฐ์ผ๋ก ํฌ์ง์
์ ๋ฃ์ ์ ์์ผ๋ฉด
|
| 240 |
+
๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๋์ ์ ๋ฆฌํ ์์ ์ ์ง์
ํ ๊ฒ์ผ๋ก ๊พธ๋ฐ ์ ์๋ค.
|
| 241 |
+
"""
|
| 242 |
+
pos = max(-1.0, min(1.0, float(position)))
|
| 243 |
+
rec = {"t": str(at), "u": user_id, "a": asset, "p": pos, "src": source}
|
| 244 |
+
with LOCK:
|
| 245 |
+
with open(_p("positions", "%s.jsonl" % asset), "a", encoding="utf-8") as f:
|
| 246 |
+
f.write(json.dumps(rec, ensure_ascii=False) + "\n")
|
| 247 |
+
_MIR["dirty"] = True
|
| 248 |
+
return rec
|
| 249 |
+
|
| 250 |
+
|
| 251 |
def positions(asset, user_id=None):
|
| 252 |
out = []
|
| 253 |
p = _p("positions", "%s.jsonl" % asset)
|
app/main.py
CHANGED
|
@@ -644,7 +644,8 @@ def _anchor_loop():
|
|
| 644 |
import anchors as A
|
| 645 |
while True:
|
| 646 |
try:
|
| 647 |
-
A.run(list(ASSETS), lambda a: prices(a, "1d", 1500)
|
|
|
|
| 648 |
_SC.clear()
|
| 649 |
except Exception:
|
| 650 |
traceback.print_exc()
|
|
|
|
| 644 |
import anchors as A
|
| 645 |
while True:
|
| 646 |
try:
|
| 647 |
+
A.run(list(ASSETS), lambda a: prices(a, "1d", 1500),
|
| 648 |
+
opens=S1["opens"] + "T00:00:00+00:00")
|
| 649 |
_SC.clear()
|
| 650 |
except Exception:
|
| 651 |
traceback.print_exc()
|
app/static/index.html
CHANGED
|
@@ -739,7 +739,14 @@ async function drawChart(a){
|
|
| 739 |
rightPriceScale:{borderColor:C.line},
|
| 740 |
timeScale:{borderColor:C.line, timeVisible:false},
|
| 741 |
crosshair:{mode:1}, height:el.clientHeight});
|
| 742 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 743 |
var mk = function(vals, color, dash){
|
| 744 |
var ss = chart.addLineSeries({color:color, lineWidth:2, lineStyle:dash ? 2 : 0,
|
| 745 |
priceLineVisible:false, lastValueVisible:false});
|
|
@@ -794,7 +801,7 @@ async function drawBaselines(a){
|
|
| 794 |
rightPriceScale:{borderColor:C.line},
|
| 795 |
timeScale:{borderColor:C.line, timeVisible:false},
|
| 796 |
crosshair:{mode:1}, height:el.clientHeight});
|
| 797 |
-
var t = d.t.map(function(x){ return x.slice(0, 10); });
|
| 798 |
var add = function(vals, color, w, dash){
|
| 799 |
var ss = chart.addLineSeries({color:color, lineWidth:w, lineStyle:dash ? 2 : 0,
|
| 800 |
priceLineVisible:false, lastValueVisible:false});
|
|
|
|
| 739 |
rightPriceScale:{borderColor:C.line},
|
| 740 |
timeScale:{borderColor:C.line, timeVisible:false},
|
| 741 |
crosshair:{mode:1}, height:el.clientHeight});
|
| 742 |
+
/* ๐ด ์๊ฐ์ ๋ ์ง๋ก ์๋ฅด๋ฉด ํ๋ฃจ ์์ ์๊ฐ๋ด์ด ์ ๋ถ ๊ฐ์ ํค๊ฐ ๋์ด ํ ์ ์ผ๋ก
|
| 743 |
+
๋ญ์น๋ค โ ๊ฐ๋ง์ผ BTC ์ฐจํธ๊ฐ ์ธ๋ก์ ํ๋๋ก ๋ณด์ธ ์์ธ์ด๋ค. ํ๋ฃจ๋ฅผ ๋์ง ์๋
|
| 744 |
+
๊ฒฉ์๋ฉด ์ด ๋จ์ ์ ์ ์๊ฐ์ ์ฐ๊ณ ์๊ฐ ์ถ์ ์ผ ๋ค. */
|
| 745 |
+
var intraday = d.t.length > 1 && d.t[0].slice(0,10) === d.t[d.t.length-1].slice(0,10);
|
| 746 |
+
var t = d.t.map(function(x){
|
| 747 |
+
return intraday ? Math.floor(Date.parse(x + "Z") / 1000) : x.slice(0, 10);
|
| 748 |
+
});
|
| 749 |
+
if (intraday) chart.applyOptions({timeScale:{timeVisible:true, secondsVisible:false}});
|
| 750 |
var mk = function(vals, color, dash){
|
| 751 |
var ss = chart.addLineSeries({color:color, lineWidth:2, lineStyle:dash ? 2 : 0,
|
| 752 |
priceLineVisible:false, lastValueVisible:false});
|
|
|
|
| 801 |
rightPriceScale:{borderColor:C.line},
|
| 802 |
timeScale:{borderColor:C.line, timeVisible:false},
|
| 803 |
crosshair:{mode:1}, height:el.clientHeight});
|
| 804 |
+
var t = d.t.map(function(x){ return x.slice(0, 10); }); /* ์ฐธ๊ณ ์ ๋ต์ ํญ์ ์ผ๋ด */
|
| 805 |
var add = function(vals, color, w, dash){
|
| 806 |
var ss = chart.addLineSeries({color:color, lineWidth:w, lineStyle:dash ? 2 : 0,
|
| 807 |
priceLineVisible:false, lastValueVisible:false});
|