洋蔥

贪婪,找不到比这更好的词了,是件好事。

包装类

定义

包装类的作用:基本类型不是类,所以无法获得类的基本特性,无法参与转型、泛型、集合、反射等过程,包装类的出现就是为了弥补这个缺陷。

为了对基本类型的数据进行更多的操作,将 基本数据类型 封装成类,并在类中定义一些功能,这个类就是 包装类(8个)

  byte Byte

  short Short

  int Integer

  long Long

  float Float

  double Double

  char Character

  boolean Boolean

常见的操作之一:用于基本数据类型与字符串之间的转换。

装箱与拆箱

装箱

​ 将 基本数据类型 转换为 包装类类型。

​ 自动装箱 基本类型 – 包装类类型(引用类型)

拆箱

​ 将 包装类类型 转换为 基本数据类型。

​ 自动拆箱 包装类类型(引用类型)– 基本类型

自动装箱与拆箱

从JDK1.5开始可以自动装箱与拆箱。所以下面是正确的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        Integer num1 = 100;
        int num2 = new Integer(100);

      把下面的这个代码理解即可:

        Integer num = 100;
        num += 200;
        System.out.println("num:" + num);

      通过*反编译*后的代码:

        Integer num = Integer.valueOf(100); // 自动装箱
        num = Integer.valueOf(num.intValue() + 200); // 自动拆箱,再自动装箱
        System.out.println((new StringBuilder("num:")).append(num).toString()); // 我们用 + 号做的拼接,其本质是调用append()方法。因为用 + 号做拼接内存占用空间比较大,字符串拼接浪费很多空间,所以在底层自动做了转换。

      需要注意:
        在使用时,Integer num = null;上面的代码就会出现NullPointerException。因为num为空引用无法调用方法。

Integer

  Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。

  此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。

构造方法

1
2
3
4
5
6
7
8
9
10
11
         public Integer(int value)

        Integer i = new Integer(100);

     public Integer(String s)

        Integer i = new Integer("100");

      注意:这里的字符串必须是由数字字符组成

          抛出: NumberFormatException - 如果 String 不包含可解析的整数。

成员方法

1
2
3
4
5
public static final int MAX_VALUE
System.out.println(Integer.MAX_VALUE);// 2147483647

public static final int MIN_VALUE
System.out.println(Integer.MIN_VALUE);// -2147483648

​ A. String、包装类、基本数据类型 的相互转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        public int intValue()
        public static int parseInt(String s)
        public static String toString(int i)
        public static Integer valueOf(int i)
        public static Integer valueOf(String s)

       String – 包装类 //将String转换为包装类,使用包装类的valueOf()
          String s = "100";
          Integer num1 = Integer.valueOf(s);
          Double num2 = Double.valueOf(s);

       String – int //将String转换为基本数据类型,使用对应包装类的parseXXX()即可
          String str = "100";
        1). int num1 = new Integer(str).intValue();
        2). int num2 = Integer.parseInt(str); //推荐,*记住很重要*
        3). double num3 = Double.parseDouble(str)

       int – String
          int value = 100;
        1). String s1 = "" + value;
        2). String s2 = String.valueOf(value); //推荐,它可以将任意类型转换成字符串
        3). String s3 = new Integer(value).toString();
        4). String s4 = Integer.valueOf(value).toString();
        5). String s5 = Integer.toString(value);

​ B. 进制转换(了解)

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
        public static String toBinaryString(int i)
        public static String toOctalString(int i)
        public static String toHexString(int i)
        public static String toString(int i, int radix)
        public static int parseInt(String s, int radix)

       常用的基本进制转换:
        public static String toBinaryString(int i)
          System.out.println(Integer.toBinaryString(100));// 1100100
        public static String toOctalString(int i)
          System.out.println(Integer.toOctalString(100));// 144
        public static String toHexString(int i)
          System.out.println(Integer.toHexString(100));// 64

       十进制转其他进制:
        public static String toString(int i, int radix) :radix的范围(即进制的范围)236
        为什么? 0,...9,a...z 一共36
          System.out.println(Integer.toString(100, 2).toUpperCase());// 1100100
          System.out.println(Integer.toString(100, 8).toUpperCase());// 144
          System.out.println(Integer.toString(100, 16).toUpperCase());// 64
          System.out.println(Integer.toString(100, 1).toUpperCase());// 100
          System.out.println(Integer.toString(100, 37).toUpperCase());// 100

       其他进制转十进制:
        public static int parseInt(String s, int radix)
        System.out.println(Integer.parseInt("1100100", 2));// 100
        System.out.println(Integer.parseInt("144", 8));// 100
        System.out.println(Integer.parseInt("64", 16));// 100

        System.out.println(Integer.parseInt("100", 10));// 100
        System.out.println(Integer.parseInt("100", 2));// 4
        System.out.println(Integer.parseInt("100", 8));// 64
        System.out.println(Integer.parseInt("100", 16));// 256

        System.out.println(Integer.parseInt("123", 2)); //抛出:NumberFormatException - 如果 String 不包含可解析的 int。

案例

​ -128到127之间的数据缓冲池问题

​ 注意:Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class IntegerDemo {
public static void main(String[] args) {
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); // false
System.out.println(i1.equals(i2)); // true
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4); // false
System.out.println(i3.equals(i4)); // true
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6); // false
System.out.println(i5.equals(i6)); // true
Integer i7 = 127;
Integer i8 = 127;
System.out.println(i7 == i8); // true
System.out.println(i7.equals(i8)); // true
// 通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间
// Integer ii = Integer.valueOf(127);
}
}

Character(了解)

​ Character 类在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。

​ 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然。

​ 字符信息基于 Unicode 标准,版本 4.0。

构造方法

1
2
3
4
public Character(char value)
Character ch = new Character((char) 97);
Character ch = new Character('a');
System.out.println("ch:" + ch);//ch:a -- 说明重写了toString()方法。

成员方法

1
2
3
4
5
A.    public static boolean isUpperCase(char ch):    判断给定的字符是否是大写
B. public static boolean isLowerCase(char ch): 判断给定的字符是否是小写
C. public static boolean isDigit(char ch): 判断给定的字符是否是数字字符
D. public static char toUpperCase(char ch): 把给定的字符转换为大写
E. public static char toLowerCase(char ch): 把给定的字符转换为小写

案例

​ 统计字符串中大写,小写及数字字符出现的次数

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
public class IntegerDemo {
public static void main(String[] args) {
// 定义三个统计变量。
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
// 键盘录入一个字符串。
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
// 把字符串转换为字符数组。
char[] chs = line.toCharArray();
// 历字符数组获取到每一个字符
for (int x = 0; x < chs.length; x++) {
char ch = chs[x];
// 判断该字符
if (Character.isUpperCase(ch)) {
bigCount++;
} else if (Character.isLowerCase(ch)) {
smallCount++;
} else if (Character.isDigit(ch)) {
numberCount++;
}
}
// 输出结果即可
System.out.println("大写字母:" + bigCount + "个");
System.out.println("小写字母:" + smallCount + "个");
System.out.println("数字字符:" + numberCount + "个");
}
}

弊端

包装类的弊端,不断地拆装箱会引发性能问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test {
public static void main(String[] args) {
Integer sum1 = 1;

StopWatch stopWatch = new StopWatch();
stopWatch.start();
for (int i = 0; i < 1000000000; i++) {
sum1 += 1; // Integer.valueOf(sum1.intValue() + i);
}
stopWatch.stop();
System.out.println(stopWatch.getTotal(TimeUnit.MILLISECONDS)); // 当 sum1 为int类型时,只需要1毫秒
System.out.println(sum1);
}
}

重载和自动拆装箱

有更匹配的重载方法时,不自动拆装箱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test {
public static void main(String[] args) {
fun(new Integer(3)); // Param is a Integer!
fun(3); // Param is a int!
}

static void fun(Integer i) {
System.out.println("Param is a Integer!");
}

static void fun(int i) {
System.out.println("Param is a int!");
}
}

常量池

注意:包装类的比较必须使用equals(), ‘==’ 比较的是两个引用是否指向一个对象。

包装类的创建很浪费性能,因此Java对简单的数字(-128~127)对应的包装类进行了缓存,称为常量池。通过直接量赋值的包装类如果在此范围内,会直接使用常量池中的引用。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
public static void main(String[] args) {
Integer i1 = 200;
Integer i2 = 200;
Integer i3 = 100;
Integer i4 = 100;
Integer i5 = new Integer(100);

System.out.println(i1 == i2); // false
System.out.println(i3 == i4); // true
System.out.println(i3 == i5); // false
}
}

Object类

API 的概述:

​ 应用程序接口,包括为开发Java程序而预定义的类和接口。简而言之,就是JDK提供给我们的一些提高编程效率的java类。

阅读全文 »

类与对象

事物: 类:

   属性 成员变量

   行为 成员方法

 类:是一组相关的属性和行为的集合。是一个抽象的概念。  学生:类

对象:是该类事物的具体表现形式。具体存在的个体。     班长:对象

阅读全文 »

关键字、标识符、注释、常量

关键字

  1. 被Java语言赋予特定含义的单词

  2. 特点:组成关键字单词的字母全部小写。

  3. 注意:

    A. goto和const是保留字

    B. 类似于 Notepad++、EditPlus 这样的高级文本编辑器,针对关键字都有特殊的颜色标记。

阅读全文 »

软件、程序、计算机语言

程序

  计算机程序通常称为软件,是发给计算机的指令。程序设计就是创建一个可以让计算机执行并完成所需任务的程序。

  计算机本身的语言:机器语言,指令都是以二进制代码的形式存在。

  汇编语言:低级的程序设计语言。具有机器依赖性,只能在某种特定的机器上执行。

img

阅读全文 »

Linux

1
2
3
4
5
6
7
8
consul
mysql
redis
rabbitmq & erlang

filebrowser
v2rayN
v2ray

Windows

C盘

7-zip 安装版
Notepad++ 安装版
chrome 安装版
office 安装版
Internet Download Manager 安装版
Postman 安装版
apifox 安装版

D盘

Program
	ShadowsocksR 解压版
	Eclipse 解压版
	IntelliJ IDEA 社区安装版(别再瞎折腾了)
	PLSQL Developer 13 解压版/安装版
	Navicat Premium 15 安装版
	Navicat Data Modeler 3 安装版
	Git 解压版
	Dism++ 解压版
	Nodejs 解压版
	Typora 安装版
	PotPlayer 安装版
	PuTTY 安装版
	OBS 解压版
	snipaste 只有解压版 2.10.5
Program Files (x86)
	VMware Workstation Pro 安装版
	Radmin 安装版
	MobaXterm 解压版
	Radmin 解压版
	M3U8 Downloader 解压版
	Bitvise SSH Client 安装版
	Gpg4win 安装版

环境变量

JAVA_HOME=D:\Program\java\jdk-11-openjdk
MAVEN_HOME=X:\Program\apache-maven-3.9.9
NODE_HOME=D:\Program\node-v20.17.0-win-x64
GIT_HOME=D:\Program\Git

Path:
	D:\Program\oracle\instantclient_19_6\
	%JAVA_HOME%\bin\
	%MAVEN_HOME%\bin\
	%NODE_HOME%\
	%GIT_HOME%\bin\
	D:\Program Files (x86)\Gpg4win\..\GnuPG\bin

Windows Server

1
2
# 任务管理器开启磁盘和网络
diskperf -y # 开启性能tab下的磁盘

OBS设置优化

解决OBS录制文件过大问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1、设置-输出-高级-直播/串流
音频编码器:FFmpeg AAC
视频编码器:x264
重新缩放输出:已禁用
码率控制:CBR
码率/比特率:2500Kbps
cpu使用预设:veryfast
2、设置-输出-高级-录制/录像
录像格式:MPEG-4(.mp4)
音频编码器:FFmpeg AAC
视频编码器:x264
重新缩放输出:已禁用
码率控制:VBR(默认CBR,录制文件很大)
码率/比特率:2500Kbps
CRF:23
cpu使用预设 veryfast
3、设置-视频
基础(画布)分辨率:1920*1080
输出(缩放)分辨率:1920*1080
缩小算法:分辨率相符,不需要缩小
常用帧率(FPS):60

winrar激活

下载 WinRAR 英文版无广告。

.exe 所在目录新建 rarreg.key 文件,编辑内容如下:

1
2
3
4
5
6
7
8
9
10
11
RAR registration data
WinRAR
Unlimited Company License
UID=4b914fb772c8376bf571
6412212250f5711ad072cf351cfa39e2851192daf8a362681bbb1d
cd48da1d14d995f0bbf960fce6cb5ffde62890079861be57638717
7131ced835ed65cc743d9777f2ea71a8e32c7e593cf66794343565
b41bcf56929486b8bcdac33d50ecf773996052598f1f556defffbd
982fbe71e93df6b6346c37a3890f3c7edc65d7f5455470d13d1190
6e6fb824bcf25f155547b5fc41901ad58c0992f570be1cf5608ba9
aef69d48c864bcd72d15163897773d314187f6a9af350808719796

策略

入场

MA:趋势确认,出现金叉,黏合后一阳破多线,多头排列。

MACD:金叉,底背离。

BOLL:喇叭口收缩,中轨线支撑。

RSI:走势背离,或快线穿越慢线。

VOL:缩至前顶20%以内。

结合K线图。

逃顶

涨到一定程度必然出现回调,结合历史涨幅程度、顶顶高趋势线、BOLL判断高点。

MA:趋势确认,出现死叉,黏合后一阴破多线,空头排列。为时已晚

MACD:死叉,顶背离。也许来得及,因为可能先跌后涨再跌

BOLL:喇叭口扩张,穿越上轨线后回落。可参考

RSI:走势背离,或快线穿越慢线。可参考

VOL:量价背离,或高位放量上涨,或高位缩量下跌,注意量的MA。可参考

结合K线图。

回调

VOL:健康的缩量回调

结合 斐波那契回撤 和 BOLL 判断 回调低位。若低位与60/120均线重合,则更可靠。日线BOLL更可靠

结合 斐波那契回撤 和 BOLL 判断 反弹高位。

反弹后及时撤出,待趋势扭转确认后再入场。

二次反弹,要止盈止损,因为此时的BOLL喇叭口已收缩,之后可能迎来暴涨或暴跌。

反弹后及时撤出,待趋势扭转确认后再入场。

网格

三次回调后,BOLL喇叭口趋向收缩,MA趋向黏合,若不是暴跌即是震荡,可做网格,但要止损。

网格区间要合理,最好是当前价格在中央,比如,当前价格6,区间可以是4~8。止损为4。

K线

辨别k线的性质,看位置、看量能、看涨跌时间。注意关键位置的k线类型、组合、形态,需结合其他指标。

K线基本类型

光头光脚阳线

光脚阳线

光头阳线

带上下影线的阳线

光头光脚阴线

光脚阴线

光头阴线

带上下影线的阴线

十字线

T字线

倒T字线

一字线

锤头线(上吊线)

倒锤头线(射击之星)

K线组合

双K线组合

乌云盖顶组合

旭日东升组合

抱线组合

孕线组合

插入线组合

跳空组合

双飞乌鸦组合

多K线组合

黄昏之星

红三兵

多方炮

上升三法

早晨之星

黑三鸦

空方炮

下降三法

K线形态

整理性形态

三角形

旗型

矩形

楔形

反转性形态

头肩顶和头肩底

双重顶和双重底

三重顶和三重底

圆弧顶和圆弧底

岛形

常用指标

MA

Moving Average,移动平均线。

趋势无敌,一根均线走天下。

它是将某一段时间的收盘价除以该周期所得到的平均价,再连接该平均线所得到的一条曲线。均线的特点:追踪趋势、滞后性、稳定性、助涨助跌、支撑阻力。

  • 均线的金叉与死叉
  • 均线的突破与跌破
  • 均线的支撑与阻力
  • 均线之间的黏合与发散
    几条均线黏合在一起,说明市场正在进行震荡。一组均线经过较长时间的黏合后,出现“一阳破多线,一阴破多线”,是上涨下跌趋势的重要信号。
    1、黏合时间越长,趋势行情越大,“横有多长,竖就有多长”。
    2、均线组合。5、10、20、30、60。7、15、30、60。
    3、均线黏合后发散,形成的“多头排列和空头排列”是趋势彻底形成的标志,可以算作买卖点。

均线周期越长,金叉死叉的买卖信号越可靠,但其信号时间也会更滞后

多种均线共同验证:https://blog.csdn.net/richardzhutalk/article/details/124901835

SMA(Sample Moving Average)
简单移动平均线
EMA(Exponential Moving Average)
指数移动平均线
SMMA(Smoothed Moving Average)
平滑移动平均线
优点 趋势线强,规避大多数假信号 短期信号更精准
缺点 信号缓慢,滞后性强 震荡行情假信号更多

MACD

Moving Average Convergence / Divergence,平滑异同移动平均线。

中长期技术指标,指标之王。

MACD指标来源于股价的平滑移动平均线EMA,所以具有均线指标稳定、追踪趋势的特点。MACD = DIFF - DEA

  • (0轴)金叉死叉是重要买卖信号,周期越长信号越强。
  • 两种背离形态:股价与柱线背离,股价与两线背离。
    顶背离:卖出。情况好是波段调整,情况糟是趋势扭转。
    底背离:买入。多数情况会经历长时间吸筹洗盘,才会迎来主升浪。大级别的底背离,拉升也会很给力。

MA和MACD都有滞后性,不适合短线和超短线,不适合盘整行情。可结合K线图和量能进行相互验证,提高信号可靠性。

BOLL

Bollinger Bands,布林线。

股价会围绕某个中轴在一定范围内(带状区间)波动。下轨线有支撑,上轨线有阻力,中轨线既有支撑也有阻力

带状区极度收缩后,往往是极度扩张,后市将迎来单边的暴涨或暴跌。

喇叭口的收缩与扩张,预示后市的波动幅度可能变大,但不能作为后市涨跌根据。当处于收缩状态时,需通过其他分析手段判断后市涨跌。或者采取跟随策略,待趋势明确后操作。

RSI

Relative Strength Index,相对强弱指标。

中长期技术指标,需配合其他技术指标共同分析,提高准确率。中长期投资者可多参考。

通过分析市场买卖盘的意向和实力,从而确认未来市场走势的一种指标。

三个指数,RSI6表示6日相对强弱、RSI12表示12日相对强弱、RSI24表示24日相对强弱。

  • 多空值
    大于50多头行情。
    小于50空头行情。
  • 超买超卖
    大于80为超买,注意风险,当K线呈M头或头肩顶形态时,即卖出信号。
    小于20为超卖,择机买入,当K线呈W底或头肩底形态时,即买入信号。
  • 走势背离
    价格上升,RSI指标变弱,卖出。
    价格下跌,RSI指标变强,买入。
  • 快慢RSI指标线
    当快速RSI指标线向上穿越慢速RSI指标线,买入。
    当快速RSI指标线向下穿越慢速RSI指标线,卖出。

注意,单边行情中,该指标在高档或低档时会有钝化现象,容易发出错误的操作信号。

VOL

成交量与价格配合有两种状况:量价同步、量价背离。

  • 上涨的成交量变化情况
    1、放量上涨。低位庄家放量是为了吸金入场,若并非巨量,后市可观,若有控盘程度较高的庄家,未来走势难超大盘。高位平整后放量上涨…
    2、缩量上涨。低位时,说明空头消耗殆尽,多方略胜一筹,上涨的持续性值得期待。高位时,说明追高意愿不强,最好观望。
    3、缩量回调。涨到一定程度必然出现回调,最健康的回调就是缩量回调。回调时成交量的萎缩限制了主力出货,因为主力无法在越来越小的成交量中完成大规模出货行为。意味着筹码稳定,通常是主力拉抬股价洗盘使用的股价打压方式,后续上涨概率较大。缩量的程度越高,回调越充分,重回升势的条件越成熟。
  • 下跌的成交量变化情况
    1、缩量下跌。当处于阶段性高位,表明多空双方集体看跌。当处于阶段性低位,表示主力找不到人接盘,主力唯一目的就是出货。
    2、放量下跌。当处于阶段性低位,说明空头发力卖出,强于多头买入实力,当买方能量彻底消灭,往往会趋势扭转。当处于阶段性高位,说明主力开始出货,暴跌后很可能转入熊市。
    3、无量空跌。多出现在一些跳水的庄股或有重大利空消息的个股中,不计成本的出逃。另外,高位持续横盘的长庄股,一单资金链断裂或出现利空消息,就会崩盘,连续跌停,成交量极度萎缩。

成交量是最没有欺骗性、最有价值的指标。

下跌是否见底的标准:底部成交量要缩至顶部最高成交量的20%以内,否则仍有下跌空间。

Trading View

均线颜色

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
indicator(title="EMA", overlay=true)

// Inputs for EMA periods
input_5 = input.int(5, title="5 EMA Period")
input_10 = input.int(10, title="10 EMA Period")
input_20 = input.int(20, title="20 EMA Period")
input_30 = input.int(30, title="30 EMA Period")
input_60 = input.int(60, title="60 EMA Period")
input_120 = input.int(120, title="120 EMA Period")

// Calculate EMAs
EMA5 = ta.ema(close, input_5)
EMA10 = ta.ema(close, input_10)
EMA20 = ta.ema(close, input_20)
EMA30 = ta.ema(close, input_30)
EMA60 = ta.ema(close, input_60)
EMA120 = ta.ema(close, input_120)

// Plot EMAs 同花顺均线5种颜色顺序:白、黄、紫、绿、蓝(5、10、20、30、60)
plot(EMA5, color=#FFD700) // 金色
plot(EMA10, color=#FF00FF) // 品红色
plot(EMA20, color=#9370DB) // 中紫色
plot(EMA30, color=color.green) // 绿色
plot(EMA60, color=#8B2252) // 紫红色
plot(EMA120, color=color.blue) // 蓝色
0%