Live Note

Remain optimistic

《纽约时报》美国当地时间 1 月 2 日报道说,美国官员确认,在美军对巴格达的一次空袭中,伊朗伊斯兰革命卫队特种部队“圣城旅”部队指挥官卡西姆·苏莱曼尼将军死亡。

《纽约时报》报道,伊朗官方媒体确认了,伊拉克当地时间 3 日,伊朗将军卡西姆·苏莱曼尼在美军对巴格达国际机场一处目标的空袭中死亡。苏莱曼尼是伊朗革命卫队中的重要官员。美国国防部声明表示,美国发动了空袭。

“苏莱曼尼将军积极筹划了对美国在伊拉克及地区的外交官和服务人员的攻击。苏莱曼尼将军和‘圣城旅’需要为美军和联军数百人死亡、数千人受伤负起责任。”

伊朗誓言为苏莱曼尼将军之死报复美国

伊朗伊斯兰革命卫队(伊朗武装力量组成部分)前总司令、伊朗确定国家利益委员会秘书长穆赫辛·雷扎伊称,伊朗将为在巴格达死于火箭弹袭击的伊斯兰革命卫队圣城旅指挥官卡西姆·苏莱曼尼将军复仇。

雷扎伊在推特上写道:

“殉难的卡西姆·苏莱曼尼去找他的兄弟们了。我们会狠狠报复美国。”

伊斯兰革命卫队圣城旅指挥官卡西姆·苏莱曼尼将军 2 日晚上在巴格达的火箭弹袭击中被炸死,伊拉克什叶派民兵武装“人民动员组织”(Al-Hashd al-Shaabi)的几位高级别成员也一同丧生,12 名伊拉克士兵受伤。

五角大楼称系按照美国总统川普的命令开展对苏莱曼尼的行动。五角大楼称,此次打击旨在预防伊朗方面的袭击,而苏莱曼尼本人涉嫌参与袭击联盟基地和美国驻伊拉克大使馆。

股市停止跳动

美国股市有熔断制度:

  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%,危机情绪加大,引发各国股市大幅震荡。

开盘受挫

  • 开盘后,标普 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

  • 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