Live Note

Remain optimistic

开盘受挫

  • 开盘后,标普 500 指数跌幅扩大至 7%,触发本周第二次熔断,美股暂停交易 15 分钟。而加拿大多伦多证交所暂停股票交易,股指跌 9.17%,触发一级市场熔断。
  • 恢复交易后,三大指数进一步下跌,道指一度下挫 2100 点。波音下跌 15.4%,仅仅一个月时间,市值腰斩。巴里克黄金 10.2%,特斯拉跌 9.4%。美股邮轮股大跌,挪威邮轮跌超 30%,皇家加勒比邮轮跌超 25%。
  • 今天,美股期货连续出现熔断,早间,纳斯达克指数期货就跌至 7600 点触发熔断,跌幅超 5%。下午标普 500 指数期货跌超 5%,也触发交易限制。
  • 今日,标普 500 期货、道指期货、纳指期货均跌超 5%,再度触发熔断。据不完全统计,除了美股期指外,日内还有泰国股市、菲律宾股市、韩国股市、巴基斯坦股市、印尼股市、巴西股市,加拿大股市 8 个国家股市发生熔断。巴西股市触发二级熔断

欧洲央行维持三大关键利率不变

欧洲央行公布 3 月会议的利率决议,其中,欧洲央行是否会追随美联储和英国央行的步伐进行降息成为最大看点,今日,欧洲央行宣布,维持三大关键利率不变,其中,维持基准利率在 0.000%不变,将存款利率维持在-0.500%不变。此前市场预期降息 10 个基点。

比特币跌破 5000,24h 涨幅-40%

北京时间 13/03/2020 7:30am,BTC 跌破 5000 美元。短线来看 BTC 的避险属性几乎为零。

比特币跌破 4000,24h 涨幅-47%

北京时间 13/03/2020 10:15am

股市停止跳动

美国股市有熔断制度:

  1. 当大盘跌幅达到-7%的时候,触发 1 级熔断,美国证券市场停止交易 15 分钟。
  2. 当大盘跌幅达到-13%的时候,触发 2 级熔断,美国证券市场再停止交易 15 分钟。
  3. 当大盘跌幅达到-20%的时候,触发 3 级熔断,当天直接停盘,不再交易。

这是自颁布以来,继 1997/10/27 之后的第二次熔断。主要的原因很有可能是石油大国之间的价格战争。

石油减产协议

  1. 2020/3/6,欧佩克和俄罗斯谈崩,无法达成减产 150 万/日的协议。
  2. 2020/3/7,沙特发出增产公告,并大幅度调整官方油价,俄罗斯也应战,增加石油产量。
  3. 周一开盘,国际油价暴跌 30%,危机情绪加大,引发各国股市大幅震荡。

  • background: 背景的可爱萌妹子, 当然可以自定义背景
  • beautify: 代码格式化
  • Dracula Official: 颜色主题
  • Haskell Syntax Highlighting: Haskell 语法高亮
  • HTML Snippets: HTML 自动补全
  • HTML CSS Support
  • JavaScript (ES6) code snippets: JS 自动补全
  • Markdown PDF: 神器, 但是默认会装一个 Chromium
  • npm Intellisense: 自动导入模块
  • Path Intellisense: 自动补全文件名
  • Quokka.js: 方便 debug
  • Vetur
  • vscode-icons: vscode 文件图标
  • Vue 2 Snippets
  • yddict(npm): 查词, 非常方便, 安装:sudo npm i yddict -g, 用法: yd hello
  • http-server(npm)

装饰器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* 为dom元素添加事件
* @param {} dom
* @param {*} type
* @param {*} fn
*/
function addEvent(dom, type, fn) {
if (dom.addEventListener) {
dom.addEventListener(type, fn, false)
} else if (dom.attachEvent) {
dom.attachEvent("on" + type, fn)
} else {
dom["on" + type] = fn
}
}

/**
* 装饰已有对象
* @param {*} id
* @param {*} fn
*/
function decorator(id, fn) {
let obj = document.querySelector(id)
if (typeof id.onclick === "function") {
let oldFn = id.onclick
id.onclick = function () {
oldFn()
fn()
}
} else {
obj.onclick = fn
}
}

观察者模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
let Observer = (() => {
let _message = {}
return {
regist: function (type, fn) {
if (typeof _message[type] === "undefined") {
_message[type] = [fn]
} else {
_message[type].push(fn)
}
},
fire: function (type, args) {
if (!_message[type]) {
return
}
let events = {
type,
args: args || {},
}
for (let i = 0, len = _message[type].length; i < len; i++) {
_message[type][i].call(this, events)
}
},
remove: function (type, fn) {
if (_message[type] instanceof Array) {
for (let i = _message[type].length - 1; i >= 0; i--) {
_message[type][i] === fn && _message[type].splice(i, 1)
}
}
},
}
})()

Observer.regist("test", function (e) {
// register
console.log(e.type, e.args.msg)
})
Observer.fire("test", { msg: "this is some test message" }) // send

基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let [a, b, c] = [1, 2, 3]
let [foo, [[bar], baz]] = [1, [[2], 3]]

let [, , third] = ["foo", "bar", "baz"]
third //'baz'
let [x, , y] = [1, 2, 3]
x, y //1, 3

let [head, ...tail] = [1, 2, 3, 4]
head //1
tail //[2, 3, 4]

let [x, y, ...z] = ["a"]
x //a
y //undefined
z //[]

let [x, y, z] = new Set(["a", "b", "c"])
x //'a'
Read more »