点 真正从投机交易中得来的利润,都来自那些从一开始就盈利的头寸。(处于亏损状态而长时间被套而的头寸,出于对损失的厌恶,只会想着回本,无法抓住后面的利润) 投机者应当对当初的小额亏损采取止损措施,以确保不会蒙受大额损失 。(投机交易就是要追涨杀跌,如果一笔交易发出后,一直处于亏损状态,说明入场时机不对) 痴迷于日内小幅频繁波动中快进快出的,必将踏空 撒手不管头寸的投资者才是真正的赌徒(不忍割肉,越亏越多) 不要试图抄底,也不要妄想卖在最高点 不要对前一笔已经亏损的交易继续加大投入以摊低成本 危险信号,果断平仓离场(什么是危险信号?如何识别?) 追随各个板块的龙头 不要孤注一掷,要分散风险 分批买进 盈利后要让一部分落袋 识别关键点,即那些标志行情已经启动的点:上升趋势中的高点、下降趋势中的低点、自然回撤和自然回升互相转化的转折点 如果在穿越关键点后,没有出现应有的趋势,就必须密切注意危险信号 关键点交易需要足够的耐心,必须投入时间研究行情、亲手选择数据、记录数据、分析数据 在自然的回撤或回升时期,成交的交易量应远小于之前上升或下降趋势时的交易量 六种趋势的转换 上升趋势 -> 自然回撤:下跌超过 6 点 default:上升趋势 自然回撤 -> 下降趋势:下跌超过下行关键点的 3 点,或超过最低点 自然回升:上涨超过下行关键点的 6 点,且超过上行关键点 次级回升:上涨超过下行关键点的 6 点,但不超过上行关键点 default:自然回撤 下降趋势 -> 自然回升:上涨超过 6 点 default:下降趋势 自然回升 -> 上升趋势:上涨超过上行关键点的 3 点,或超过最高点 自然回撤:下跌超过下行关键点的 6 点,且超过下行关键点 次级回撤:下跌超过下行关键点的 6 点,但不超过下行关键点 default:自然回升 次级回升 -> 自然回升:上涨超过上行关键点 自然回撤:下跌超过 6 点,且超过下行关键点 次级回撤:下跌超过 6 点,但不超过下行关键点 default:次级回升 次级回撤 -> 自然回撤:下跌超过下行关键点 自然回升:上涨超过 6 点,且超过上行关键点 次级回升:上涨超过 6 点,但不超过上行关键点 default:次级回撤 前七章是「道」,对于任何想从投机交易中持续获取利润的人都适用,只要你认同投机就是一个概率游戏,我们能做的就是在识别出趋势时进行对应的操作。后几章是「术」,介绍了一种作者根据自身多年经验总结的判断趋势的方法,任何「术」都只能增加「我们对趋势的判断是正确的」这件事发生的概率,理论上只要这个概率越大,我们获利的可能就越大。
Author published on 2024-02-10 included in 随笔 诚如标题,下面的话没什么中心,想到哪说到哪,七拼八凑。一直以来总想写些什么,每次都是因为苦于此而作罢,索性也不管有没有什么主题了,先写出来再说。
在国人观念里过完除夕才算一年真正过完,这对我来说,就成了在阳历年拖延年终总结的绝好理由,当然这里并不会有什么正儿八经的总结,因为那会会儿马虎对付出来一份。之所以马虎,一来是原本那个总结是打算生日那天做的,这也是第一次有要做这个的念头,我觉得这对每天做和尚敲钟的人来说是有些用的,但是还是种种原因(之一可能是我想把前面好多年的一次都补上,太想一口吃成一个胖子,然后实际寸步难行,我总是这样)一直拖到阳历年,然后在那天草草了事;一来是过去一年里除了上半年每天按部就班学习日语然后过了 N2 之外实在没做什么事,下半年的日子就像一根绷紧了的弦松了一阵子之后再也紧不起来了,浑噩一直到今。啊对,说起来还有一个意料之外的事,因为一次意外接触了虚拟货币交易,确实 Trader 真的考验人性,卖早了或者没上车懊恼低捏断大腿,套久了每天骂垃圾傻币、怎么一直跌,遇上回调整天担心浮盈跌没。有了这个经验之后,我在想我是傻逼才会去买大癌,还是买的场外基金,一直套到现在不能忍痛割肉,而且回本之日遥遥无期。
当然在那个敷衍的年终总结之后也是做了些新年的计划,与鲜少总结比,我却经常做计划,如你所料,这计划罕有实施到底的,要么是刚做完就一阵好像完成了什么壮举一般满足感然后止步于此,要么坚持了几天就动力阑珊。我知道原因是计划太空泛同时有点苛刻,这点在按计划学习日语中切身体会到的,因为与其他所有夭折的计划不同,过 N2 的那个计划量化了自己所需要的时间和需要在哪个时间达到哪个阶段,大大提高了可执行性以及让人每天都能感受到时间的紧迫。是的,我完全知道过去计划没能得到执行的主要问题出在哪里,可是自那之后我还是再没完成一个类似过 N2 那样的目标。就好像我明明知道完成一件看起来会花些时间但实际做起来根本不会而迟迟不愿去做的事之后,会被赏以巨大的满足感,可我依然不愿去做,然后一直摆烂。
我想解决这个问题,所以这些乱七八糟的文字是个开始。嗯,这个世界是一个巨大的草台班子。
我发现写出一些东西之后,脑子里就会经常联想出一些与这个东西关联的其他东西,然后会陷入「沿着发散都写下去就难以收回来从而破坏预想的节奏」和「完全弃之不顾总觉有点可惜」的两难。
好像上面内容隐隐约约就能窥见些关键词来,拖延、执行力。
几个月前,得知了一个学习的方法「卢曼卡片笔记法」,觉的应该会有用。当然,不执行 P 用不顶。
前两天去看了刚出生的那头小牛犊,披个小马甲挺可爱的。看着牛圈里那几头牛的眼神,我想我是断然做不来把自己一手养大的东西送去屠宰场的这类事的,想起许多年前把父亲晚上辛苦打来的几十只用来给我改善伙食的青蛙全被我全拿去放生,我应该个伪善的人,同是待宰,却对养在水桶里的那些泥鳅们无动于衷。
看相先生说我这个龙年立春就开始转运,由过去十三年的倒数第二的灾难运,转为接下来十三年的正数第二的泰运甚至是第一的道运,话说过去十三年除了到一次与死神擦肩而过以及到现在依旧茫然无措以外好像也没什灾厄。
Author published on 2023-10-07 included in 随笔 最早是想去日本,奈何北京大区出签的条件有点苛刻,便作罢。转而想找一处深山老林的地方断掉一切与外面的联系「清修」几天,看了些深山民宿、道观义工相关的,种种原因还是未能实施。我想可能是因为本身对将上面想法付诸实践的欲念并不强烈,所以稍微有点险阻就立马便就坡下驴了。最终在一个由几个稍微有点联系的前同事群里表达了谁有已经定好的出去玩的作业可以借来一抄的想法,得到 A 抛出的「可以去他家玩的」橄榄枝之后就立马定了机票,顺带引诱了同在群里的 B。
去之前回了趟家,中秋前一晚出发,顺搭的高中同学 C 的车,其实也不算很「顺」,因为他家在县城,距离我们村还有 50 分钟的自驾车程,而这 50 分钟的车程换做搭乘班车过高速去我们那边的镇上,然后从镇上打车去我们村里所花的时间和就不止 50 了,况且又是晚上,所以原本是要在 A 家借宿一晚。所幸我们出发的地点离高速不远,不用在市里堵上一阵子,一个半小时后距离县里就剩半个小时的车程了,刚好那时候已经从其他地方回了家的初中起就一直一起玩的同学 D 来了个电话,于是就让他过来接我了,回去之前跟 C 和 D 以及 C 的发小一起在县里吃了点东西。
D 和是同一个地方的,两个村隔得其实并不算近,但像上面他接送我的事已经记不得是第几次了,每次都会劝我搞台车,起初几次时会想「D 是不是在委婉表达不想老是接送我了的不满」并因此觉得受伤,后面渐渐死猪不怕开水烫了。快到家的路上,隔壁村新修的花里胡哨路灯,以我们村口大门为界,与我们那边路上撑了多年的昏暗路灯形成鲜明对比。
中秋节那天去了舅舅家,原本不想去,本来放假回来就是想一个人清净,母亲说「既然回来了,那就该去啊,那么近,过节还不去一下」,我好像不知道怎么回复,只得一起去了。在那里吃了个饭,意外地没有被他们催,可能是每次去的时候都被这样说,知道我也厌烦,也或者是母亲跟他们打好了招呼。以往每次放下碗我都赶紧逃走,一直狭隘地以为他们除了各自儿女之外再没别的可说,这次端着小板凳在旁边,才知道他们大人(啊,我也是大人)在一起也有他们那一代的见闻可聊,比如某个共同认识的人前阵子如何如何,或者最近发生在自己身上的一些事,也会叮嘱彼此照管好各自的身体……,父亲好像确实瘦了很多。
晚上隔壁除了老人其余均已经搬到镇上去的小我几岁的 E 他家回老家吃饭,E 趁这次长假回来结婚,照旧寒暄了几句。
第二天下午的县里的动车票,依旧是找的 D 送。说我住了两个晚上就走,这回来图个什么。我也不知道,总觉得这么长的假,离家又这么近,不回一下的话,有点「不像话」。说起来要知道没有他前一晚的那个电话我还只能住一个晚上,所以当时他问「要不要我去县里把你接回来啊」,我赶紧就好好好,然后他说「真不该打这个电话」。
每次回家都免不了惆怅:未老莫还乡,还乡须断肠。
1 号下午的飞机,到遵义 4 点不到,一出站山风习习,倍感清爽。A 带着他的两个同学接我到他家,A 家十分好客,还是说贵州人都比较好客,一路上 A 的同学操着方言对我说个不停,云贵川的方言好像都挺接近的,只要不是说太快基本能听懂。到 A 家时五点不到,其母早已准备好饭菜,没有一个不带辣,就连在我们那里更多都是当成汤来喝的豆腐青菜肉汤都要蘸辣子。
吃完去附近公园散了会儿步,其中一个同学十分「聒噪」,一度让我想到可爱的湘云,逼得我不得已要经常躲避他一边说话时一边搜寻猎物的目光。他是个群众史观者。回来后 A 父归家时十点多又吃了顿饭,看的出来两个同学与 A 家十分熟络,一直在跟 A 的父母聊天,因为说的快我也没怎么听懂,见他们快 12 点还没有要停下来了的意思,我就先告退洗澡去睡了。
第二天上午去了 A 老家的山里,说是去摸鱼,近乎空军,一路上看到很多辆跟 A 一样型号的车,以及不少结婚的车队,想必 10 月 2 号在农历里是个吉日,朋友圈里以及认识的好几个人都在那天结婚。中午回来后,A 说十一那些景点人必然很多,打算第二天带我和五点多将要到站的 B 做点别的,我不置可否,说等一会儿接到 B 再说,因为我知道 B 大抵是不愿的,他的时间紧,好不容易来一趟必然是想去些地方的。接到 B 后,果然他的想法如我所料,但是 A 说已经张罗好了,无法脱身跟我们一起去 B 想去的地方。好像有时候还是难以表达拒绝,如果 B 也同我一样,3 号我就不情不愿的去做 A 提议的事了,总指望着把决定权托付他人之手,这显然不是一个好习惯。当晚和 B 在附近找了个酒店,睡前通过某 APP 上的众多攻略分享大致敲定了 3 号的行程。
Author published on 2022-11-05 included in 笔记 parser:定义文件的 parser,比如引入 TypeScript 时就要使用特定的 parser parserOptions:定义关键字、语法的解析规则(不定义全局变量) env: 可以看成某组 global 变量组成的 preset globals: 定义全局变量,可读、写 extends:表示应用某些现成的 shareable configs plugins: 创建自定义规则以暴露给 rules 使用 创建自定义环境功 globals 使用 创建多个自定义 config(整个 eslintrc 配置文件就对应一个 config) 供 extends 使用 创建自定义 processors 的以告知 eslint 如何处理 JavaScript 以外的文件,比如 .vue 文件里的 eslint 规则就是通过对应的插件实现 processor:指定由某个 plugin 提供的 processor override:有时可能需要更精细的配置,比如,如果同一个目录下的文件需要有不同的配置。因此,你可以在配置中使用 overrides 键,它只适用于匹配特定的 glob 模式的文件 rules rules 的 Type 定义
type RuleKey = string type RuleItemWarnLevel = 0 | 1 | 2 | 'off' | 'warn' | 'error' type RuleItemValue = string type RuleValue = RuleItemWarnLevel | [RuleItemWarnLevel, RuleItemValue] type Rules = { [index: RuleKey]: RuleValue } 你会发现基本上所有这种通过一系列配置来决定应用行为的「东西」,都会提供扩展某个(或某些)既定的配置的功能以屏蔽繁琐的细节,比如 Babel 配置文件里的 preset 字段、TypeScript 配置文件里的 reference 字段,同时为每个配置项定义一个合并规则以确保最终输出的是一个稳妥可用的配置。
Author published on 2022-10-29 included in 笔记 分三类
为 Node.js 所用的 为 npm 所用 为某些 package 所用的,比如 rollup、babel、webpack、typescript 等(npm 其实也可以归到这类,只不过像 npm 这样的 package 稍特殊些,人家是 package manager) 为 Node.js(v19.0.0) 所用 name:package name main:指定 package 的默认入口 module packageManager:指定包管理器(是 npm、yarn 或是 pnpm),依赖 Corepack type:决定当前 package 的模块类型是 是 esm 还是 cjs exports:优先级高于并且可替代 main field,v12+ 可用 imports:供 package 内部引入自身的 module 时使用,相当于 vue-cli 中的 path alias 为 npm(v8.19.2) 所用 name
version
description
keywords
Author published on 2022-07-31 included in 笔记 本章为一个关于计算机系统的概述,点明了本书的面向读者,以及读完本书所能非读者带去的好处。比如:一些避免由计算机表示数字的方式引起的数字错误的实用技巧、充分利用现代处理器和存储器的系统设计来优化 C 代码的小窍门、了解编译器如何实现过程调用以及利用这些知识来避免缓冲区溢出错误带来的安全漏洞、识别和避免链接时的错误、编写自己的 Unix shell 和动态存储分配包以及 Web 服务器、认识并发等。
1.1 信息就是位 + 上下文 对计算机而言,任何输入、输出都是 0/1 bit 序列,它由人设计并为其所用,这些比特序列以及对 bit 序列的解释方式即构成对人而言的信息。文本文件和二进制文件是以人的角度(即解释的方式)来区分的,若某个文件其对应的 bit 序列可以按某个规则解释为对人有意义的文本,那么这个文件就是文本文件,否则就是二进制文件。
1.2 程序被其他程序翻译成不同的格式 机器能懂的只有指令,C 语言是为了人的方便创造的语言,由 C 语言写就的源程序需要让机器执行则必须先转换为机器所能理解的指令。这中间的过程为:
预处理:处理头文件 编译:源程序转化为汇编程序 汇编:将汇编程序转换为可重定向的目标程序(什么是可重定向?) 链接:汇编程序中可能调用了其他单独编译好的汇编目标文件,需要将被包含的目标文件合并到汇编程序中 1.3 了解编译系统是如何工作的大有益处 益处有:
可以针对性的优化程序的性能:比如在达到统一个目的时,某种条件下使用某种语句会比另外的语句更高效 理解和避免链接时出现的错误:比如各种静态变量和全局变量的区别、静态库和动态库的区别等 避免安全漏洞:理解堆栈的原理和缓冲区益处的错误 1.4 处理器读取并解释存在内存中的指令 计算机的硬件组成部分主要包括:I/O (输入、输出)设备(比如键盘、鼠标、显示器)、主存、CPU;这些设备之间的数据传输注意通过一个叫「总线」的东西。程序运行时待执行的指令必须要(可能是从存储器)加载到主存中,CPU 根据当前的程序计数器存储的地址,执行待执行的指令,每执行一条指令后,程序计数器存储的内容就会更新为下一条待执行的指令的地址。
1.5 高速缓存至关重要 从 CPU 里的寄存器读写的速度和从内存里读写数据的速度是数量级的差别,从内存里读写数据的速度和从外存储器读写的速度也是数量级的差别,如果需要从慢速的存储器里频繁读取速度势必会降低计算机运行的效率,所以可以在快速和慢速存储器中间设置一个介于二者速度之间的存储器,这些存储器就是 cache,有了 cache 计算机存取数据的速率就会有所提升。
1.6 存储设备形成层次结构 CPU 里的寄存器、介于内存和内存中间的 cache、内存、介于内存和外存中间的二级存储器、外存等这一些列具有存储功能的器件就构成了计算机的存储器层次结构。它们存取速度由快到慢、存储空间由小到大,相同存储单位的造价由高到低
1.7 操作系统管理硬件 操作系统是介于应用程序和硬件之间的系统应用,其功能体现为向应用软件提供调用硬件的接口使得应用程序员不必关注与硬件交互的复杂细节,同时防止应用软件对硬件的滥用。主要通过三个抽象来实现:
文件:对 「I/O 设备」 的抽象 虚拟内存:对文件和「主存」的抽象 进程:对虚拟内存和「CPU」的抽象 1.8 系统之间利用网络通信 在此之前都只涉及计算机对只被看做是一个孤立的硬、软件集合体,两台计算机之间同样可以通过网络来进行通信,可以发送数据给其他计算机,也可以从其他计算机接受数据,此种情况下网络亦可以视作是一种 I/O 设备。
Author published on 2022-06-05 included in 笔记 新建一个 ubuntu 虚拟机到可以开始前端开发中间所需的基本步骤:
更换系统镜像源 配置 git 信息,比如 committer 信息和个人常用的 alias(zsh 的 git 插件已经有这个功能,如果使用它的话可以不用自己配置) 安装 zsh 和 oh-my-zsh 以及常用的插件(由于 github 经常连不上,可以考虑 git clone 时更换 github 镜像源,但记得及时改回来) 安装 nvm 以及 nodejs 通过 npm 安装 yarn,配置 yarn 镜像源 通过 yarn 安装 nrm,配置 npm 镜像源 安装 vscode 以及常用插件 所需文件:
source.list,注释懒得删,这里是更换中科大的源
# deb cdrom:[Ubuntu 20.04.4 LTS _Focal Fossa_ - Release amd64 (20220223)]/ focal main restricted # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution.
Author published on 2022-05-28 included in 笔记 git 笔记 一个目录中包含名为 .git 的目录(同时这个目录里需要存在些特定的东西)时,即表示这个目录正被 git 管理,.git 目录包含的所有东西即为对应的 repository。当我们在某个目录下执行 git init 后,命令造成的结果就是为这个目录生成一个空的 repository,之后所有的 commit 都会被记录在 .git 目录中。一个刚刚初始化的 .git 目录包含 HEAD、description、config 三个文件和 objects、refs、hooks、info 四个目录,这里主要需要了解的是 HEAD、objects 和 refs。其中 HEAD 文件是一个文本文件,里面存储的是当前所在的 branch,可以通过 cat .git/HEAD 直接写查看它的内容:ref: refs/heads/master,表示当前正处于 master branch,可以说 HEAD 就是指向当前 branch 的一个 reference。而 refs 目录则是保存 branch 和 tag 等相关信息的地方,其中 branch 的信息保存在 refs/heads 目录下,一个 branch 就对应一个文本文件,文件的内容是一个 40 个字符的 hash 串(git 中生成 hash 的算法是 SHA-1),对应某个 commit,也即这个 branch 当前最新的一次 commit 的 id。比如上面 refs/heads/master 的即代表 master branch,如果新建一个 test branch,那么对应的在 refs/heads 目录下就会生成一个 test 文件。所以,所谓的 Branch 本质上就是一个指向某个 commit 的 reference(这个 reference 的形式是一个 hash)。同样,Tag 也是一个 reference,它的形式也是一个 hash,作为字符串存储在 refs/tag/{tag-name} 文件中,但是这个 hash 或如同 branch 一样指向一个 commit object,或指向一个包含某个 commit object 的 tag object。所以这保存 branch 和 tag 相关信息的目录名为 refs。
Author published on 2022-04-17 included in 笔记 原理:
每个 promise 实例有 value,status,cbs 属性,其中 value 用于存储 resolve 或 reject 时的值,status 保存当前 promise 的状态,初始为 pending,cbs 为一个订阅当前 promise 实例状态的回调数组(初始为空),因为一个 promise 实例可多次调用 then 或 catch 创建一个新的 promise 时,初始化三个属性,以及将 _resolve 和 _reject 传给 new Promise 的参数函数当参数 _resolve 和 _reject 的处理非 promise 和非 thenable 以外的值逻辑大体一致,都是 setTimeout 后将当前的 promise 实例状态和值更新,以及查看是否有后续的 promise 订阅,有则依次执行对应回调,然后将回调队列置为空;_reject 函数多出来的逻辑是如果没有订阅则执行 throw value。回调队列为空的情况是,promise 状态变化时,还未有对之进行 then 或 catch 的调用 then 的逻辑:无论如何都其返回值都是一个新的 promise 实例。查看当前状态,如果不是 pending 则说明 promise 状态已经改变,然后根据对应的状态返回的新的 promise 实例的构造函数中执行 resolve 或 reject this.
Author published on 2022-04-03 included in 笔记 概念 buffer:指的是内存里用于临时存储数据的区域。当数据生产者和消费者处理数据的速率不一致时,便需要 buffer,当然,这只是用途的应用之一。无论如何,其本质就是内存里的一段区域,我们可以对之进行读、写 ArrayBuffer:JavaScript 里的一种对象类型,用于创建固定长度原始数据缓冲区。比如代码 new ArrayBuffer(8) 就创建一个 ArrayBuffer 实例,对应一个长度为 8 byte 的 buffer,但是 ArrayBuffer 实例本身没有提供读、写 buffer 的途径 TypedArray:JavaScript 中一系列的对象类型(比如 Uint8Array、Int16Array 等)的统称,这些对象类型对应的对象内部都关联一个 ArrayBuffer 实例,TypedArray 实例则可以对由它们创建的 buffer 进行读写,直接像操作数组一样,通过下标赋值、取值 DataView: 与 TypedArray 类似,是 JavaScript 的另一个提供读写 buffer 底层接口的对象类型,其对 buffer 的读写不用关注代码所运行的平台的大、小端类型 TypedArray 和 DataView 实例都与一个 ArrayBuffer 实例相关联,每个 ArrayBuffer 实例都对应一个特定字节数的 buffer,但 ArrayBuffer 实例本身没有接口去读写这些 buffer,TypedArray 和 DataView 实例便提供了途径去读写,但针对不同类型的数据(比如操作一个 ASCII 码字符串就可以使用 Uint8Array,而对一些范围在 0 到 65535 的整数就可以用 Uint16Array),开发者可以依据自己的需求使用不同的 TypedArray。
总而言之,在 JavaScript 中只要是读写 buffer 的必定离不开某个 ArrayBuffer 实例。