Hoey笔记

和有趣的人做尽有趣的事


  • Home

  • Archives

  • Sitemap

  • Search

量化示意图

Posted on 2025-04-24

image-20250424191440341

image-20250424191506927

image-20250424191534518

image-20250424191549179

image-20250424191601872

架构设计-行情

Posted on 2025-04-14

借鉴LSM-Tree的设计思路,先将数据写入缓存池,在周期性写入到CSV

image-20250414092200176

写入策略:

  1. 当内存满>n时,将内容溢写入磁盘
  2. 当时间满>s时,将内存溢写入磁盘

白漂个大厂商的大模型产品

Posted on 2025-03-12

这里我们以硅基流动为例,演示白漂路径。

Cherry Studio提供统一的API入口,不管你是用DeepSeek,还是用OpenAI,这里提供统一的操作入口。下载地址https://nas.yihao.de/sharing/QqHS6F0nY

获取API密钥

安装好APP,到【模型服务】这里,可以看到【API密钥】下面有一个【点击这里获取密钥】点击

到硅基流动官网注册一个帐号,到API 密钥复制,粘贴到上图空白处

image-20250312150907203

使用

到助手,简单测试一下,能否直接使用,找到Qwen 2.5-7B-Instruct ,发送消息即可。

image-20250312151139469

模型

模型决定了问答的质量,市面上有非常多的模型,HuggingFace是模型开源库,里面提供大量的开源模型https://huggingface.co/

白漂模型

要用就用白漂模型,也是够用了。进入硅基流动官网

在【模型广场】-> 【筛选】-> 【只看免费】,找到对应的模型名称,这里以【deepseek-ai/DeepSeek-R1-Distill-Qwen-7B】为例子

image-20250312151347958

到APP中,模型服务->硅基流动->管理 , 粘贴对应的名称并搜索,点击➕添加

image-20250312151609166

之后到助手中,问答的时候选择添加的模型即可

image-20250312151732672

地铁

Posted on 2025-03-07

dt

Hikyuu量化交易二

Posted on 2025-01-16

续上篇文章,第二个小例子

一、策略分析

原始描述

建仓条件:expma周线exp1跟exp2金叉向上使用使用 B=50% 的资金买入股票,建仓成功后,卖出条件才能起作用

卖出条件S1:expma日线exp1和exp2死叉向下时卖出持仓股 S=50%

买入条件B1:expma日线exp1和exp2金叉向上时买入股票数为S(卖出条件S1卖出股数)

S1和B1就这样循环

清仓条件为:expma周线exp1和exp2死叉时

策略分析

市场环境:无

系统有效性:周线EMA1(快线)和EMA2(慢线)金叉向上直到两者死叉,系统有效时建立初始仓位

信号指示器:

  • 买入:日线EMA1(快线)和EMA2(慢线)金叉向上
  • 卖出:日线EMA1(快线)和EMA2(慢线)死叉向下

止损/止盈:无

资金管理:

  • 初次建仓:使用50%的资金
  • 买入:初次建仓时持股数的50%
  • 卖出:初次建仓时持股数的50%

盈利目标:无

二、实现系统部件

自定义系统有效性策略

In [2]:

1
2
3
4
5
6
7
8
9
def getNextWeekDateList(week):
from datetime import timedelta
py_week = week.datetime()
next_week_start = py_week + timedelta(days = 7 - py_week.weekday())
next_week_end = next_week_start + timedelta(days=5)
return get_date_range(Datetime(next_week_start), Datetime(next_week_end))
#ds = getNextWeekDateList(Datetime(201801010000))
#for d in ds:
# print(d)

In [3]:

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
def DEMO_CN(self):
""" DIF > DEA 时,系统有效
参数:
fast_n:周线dif窗口
slow_n: 周线dea窗口
"""
k = self.to
if (len(k) <= 10):
return

#-----------------------------
# 周线
#-----------------------------
week_q = Query(k[0].datetime, k[-1].datetime, ktype=Query.WEEK)
week_k = k.get_stock().get_kdata(week_q)

n1 = self.get_param("week_macd_n1")
n2 = self.get_param("week_macd_n2")
n3 = self.get_param("week_macd_n3")
m = MACD(CLOSE(week_k), n1, n2, n3)
fast = m.get_result(0)
slow = m.get_result(1)

x = fast > slow
for i in range(x.discard, len(x)-1):
if (x[i] >= 1.0):
#需要被扩展到日线(必须是后一周)
date_list = getNextWeekDateList(week_k[i].datetime)
for d in date_list:
self._add_valid(d)

自定义信号指示器

In [4]:

1
#这个例子不需要,已经有内建的SG_Cross函数可直接使用

自定义资金管理策略

In [5]:

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
38
39
40
41
42
43
class DEMO_MM(MoneyManagerBase):
"""
初次建仓:使用50%的资金
买入:初次建仓时持股数的50%
卖出:初次建仓时持股数的50%
"""
def __init__(self):
super(DEMO_MM, self).__init__("MACD_MM")
self.set_param("init_position", 0.5) #自定义初始仓位参数,占用资金百分比
self.next_buy_num = 0

def _reset(self):
self.next_buy_num = 0
#pass

def _clone(self):
mm = DEMO_MM()
mm.next_buy_num = self.next_buy_num
#return DEMO_MM()

def _get_buy_num(self, datetime, stk, price, risk, part_from):
tm = self.tm
cash = tm.current_cash

#如果信号来源于系统有效条件,建立初始仓位
if part_from == System.Part.CONDITION:
#return int((cash * 0.5 // price // stk.atom) * stk.atom) #MoneyManagerBase其实已经保证了买入是最小交易数的整数
self.next_buy_num = 0 #清理掉上一周期建仓期间滚动买卖的股票数
return int(cash * self.get_param("init_position") // price)

#非初次建仓,买入同等数量
return self.next_buy_num

def _getSellNumber(self, datetime, stk, price, risk, part_from):
tm = self.tm
position = tm.get_position(datetime, stk)
current_num = int(position.number * 0.5)

#记录第一次卖出时的股票数,以便下次以同等数量买入
if self.next_buy_num == 0:
self.next_buy_num = current_num

return current_num #返回类型必须是整数

三、构建并运行系统

修改设定公共参数

每个系统部件以及TradeManager都有自己的公共参数会影响系统运行,具体可以查看帮助及试验。

比如:这个例子当前使用系统有效条件进行初始建仓,那么必须设置系统公共参数cn_open_position为True。否则,没有建立初始仓位的话,后续没有卖出,不会有任何交易。

In [6]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#System参数
#delay=True #(bool) : 是否延迟到下一个bar开盘时进行交易
#delay_use_current_price=True #(bool) : 延迟操作的情况下,是使用当前交易时bar的价格计算新的止损价/止赢价/目标价还是使用上次计算的结果
#max_delay_count=3 #(int) : 连续延迟交易请求的限制次数
#tp_monotonic=True #(bool) : 止赢单调递增
#tp_delay_n=3 #(int) : 止盈延迟开始的天数,即止盈策略判断从实际交易几天后开始生效
#ignore_sell_sg=False #(bool) : 忽略卖出信号,只使用止损/止赢等其他方式卖出
#ev_open_position=False #(bool): 是否使用市场环境判定进行初始建仓

cn_open_position=True #(bool): 是否使用系统有效性条件进行初始建仓

#MoneyManager公共参数
#auto-checkin=False #(bool) : 当账户现金不足以买入资金管理策略指示的买入数量时,自动向账户中补充存入(checkin)足够的现金。
#max-stock=20000 #(int) : 最大持有的证券种类数量(即持有几只股票,而非各个股票的持仓数)
#disable_ev_force_clean_position=False #(bool) : 禁用市场环境失效时强制清仓
#disable_cn_force_clean_position=False #(bool) : 禁用系统有效条件失效时强制清仓

设定私有参数及待测试标的

In [7]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#账户参数
init_cash = 500000 #账户初始资金
init_date = '1990-1-1' #账户建立日期

#信号指示器参数
week_n1 = 12
week_n2 = 26
week_n3 = 9

#选定标的,及测试区间
stk = sm['sz000002']

#如果是同一级别K线,可以使用索引号,使用了不同级别的K线数据,建议还是使用日期作为参数
#另外,数据量太大的话,matplotlib绘图会比较慢
start_date = Datetime('2016-01-01')
end_date = Datetime()

构建系统实例

In [8]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#创建模拟交易账户进行回测,初始资金30万
my_tm = crtTM(date=Datetime(init_date), init_cash = init_cash)

#创建系统实例
my_sys = SYS_Simple()

my_sys.set_param("cn_open_position", cn_open_position)

my_sys.tm = my_tm
my_cn = crtCN(DEMO_CN,
{'week_macd_n1': week_n1, 'week_macd_n2': week_n2, 'week_macd_n3': week_n3},
'DEMO_CN')
my_sys.cn = my_cn
my_sys.sg = SG_Cross(EMA(C, n=week_n1), EMA(C, n=week_n2))
my_mm = DEMO_MM()
my_sys.mm = my_mm

运行系统

In [9]:

1
2
3
4
5
6
7
q = Query(start_date, end_date, ktype=Query.DAY)
my_sys.run(stk, q)

#将交易记录及持仓情况,保存在临时目录,可用Excel查看
#临时目录一般设置在数据所在目录下的 tmp 子目录
#如果打开了excel记录,再次运行系统前,记得先关闭excel文件,否则新的结果没法保存
my_tm.tocsv(sm.tmpdir())

四、查看资金曲线及绩效统计

In [10]:

1
2
3
4
#绘制资金收益曲线
x = my_tm.get_profit_curve(stk.get_datetime_list(q), Query.DAY)
#x = my_tm.getFundsCurve(stk.getDatetimeList(q), KQuery.DAY) #资金净值曲线
PRICELIST(x).plot()

image-20250116142158838

In [11]:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#回测统计
per = Performance()
print(per.report(my_tm, Datetime.now()))
帐户初始金额: 500000.00
累计投入本金: 500000.00
累计投入资产: 0.00
累计借入现金: 0.00
累计借入资产: 0.00
累计红利: 35609.57
现金余额: 512542.57
未平仓头寸净值: 0.00
当前总资产: 512542.57
已平仓交易总成本: 0.00
已平仓净利润总额: 12542.57
单笔交易最大占用现金比例%: 49.99
交易平均占用现金比例%: 49.85
已平仓帐户收益率%: 2.51
帐户年复合收益率%: 0.32
帐户平均年收益率%: 0.33
赢利交易赢利总额: 226235.57
亏损交易亏损总额: -213693.00
已平仓交易总数: 14.00
赢利交易数: 7.00
亏损交易数: 7.00
赢利交易比例%: 50.00
赢利期望值: 895.90
赢利交易平均赢利: 32319.37
亏损交易平均亏损: -30527.57
平均赢利/平均亏损比例: 1.06
净赢利/亏损比例: 1.06
最大单笔赢利: 140710.57
最大单笔盈利百分比%: 56.58
最大单笔亏损: -54740.00
最大单笔亏损百分比%: -18.85
赢利交易平均持仓时间: 39.86
赢利交易最大持仓时间: 105.00
亏损交易平均持仓时间: 74.86
亏损交易最大持仓时间: 161.00
空仓总时间: 2012.00
空仓时间/总时间%: 71.00
平均空仓时间: 143.00
最长空仓时间: 431.00
最大连续赢利笔数: 2.00
最大连续亏损笔数: 3.00
最大连续赢利金额: 142426.57
最大连续亏损金额: -105390.00
R乘数期望值: 0.01
交易机会频率/年: 1.82
年度期望R乘数: 0.02
赢利交易平均R乘数: 0.12
亏损交易平均R乘数: -0.10
最大单笔赢利R乘数: 0.57
最大单笔亏损R乘数: -0.19
最大连续赢利R乘数: 0.29
最大连续亏损R乘数: -0.19

五、或许想看下图形

In [12]:

1
my_sys.performance()

image-20250116142141416

六、或许想看看所有股票的情况

In [13]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd
def calTotal(blk, q):
per = Performance()
s_name = []
s_code = []
x = []
for stk in blk:
my_sys.run(stk, q)
per.statistics(my_tm, Datetime.now())
s_name.append(stk.name)
s_code.append(stk.market_code)
x.append(per["当前总资产"])
return pd.DataFrame({'代码': s_code, '股票': s_name, '当前总资产': x})

%time data = calTotal(blocka, q)
CPU times: total: 4.98 s
Wall time: 29.2 s

In [14]:

1
2
3
#保存到CSV文件
#data.to_csv(sm.tmpdir() + '/统计.csv')
data[:10]

Out[14]:

代码 股票 当前总资产
0 SH600605 汇通能源 778089.17
1 SH600606 绿地控股 459330.60
2 SH603272 联翔股份 480224.00
3 SH600354 敦煌种业 575339.00
4 SZ300359 全通教育 441039.85
5 SZ000725 京东方A 465180.59
6 BJ838163 方大新材 519824.00
7 SZ300358 楚天科技 496350.30
8 SH600355 精伦电子 390633.00
9 SH603273 天元智能 543317.00

Hikyuu - Quant Framework

Posted on 2025-01-16

Hikyuu Quant Framework是基于C++/Python的高性能开源量化交易研究框架,用于策略分析及回测(目前用于国内A股市场)。其核心思想基于当前成熟的系统化交易方法,将整个系统化交易抽象为由市场环境判断策略、系统有效条件、信号指示器、止损/止盈策略、资金管理策略、盈利目标策略、移滑价差算法七大组件,你可以分别构建这些组件的策略资产库,在实际研究中对它们自由组合来观察系统的有效性、稳定性以及单一种类策略的效果。

下面用一个小例子进行探索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 如果 python 版本 >3.12 ,请将下行注释掉,否则 matplotlib 不会显示图像
%matplotlib inline
%time from hikyuu.interactive import *
iodog.open()
2024-12-07 00:21:52,164 [INFO] hikyuu version: 2.2.3_202412040035_RELEASE_macosx_arm64 [<module>] (/Users/fasiondog/workspace/hikyuu/hikyuu/__init__.py:97) [hikyuu::hku_info]
2024-12-07 00:21:57,486 [WARNING] Matplotlib is building the font cache; this may take a moment. [matplotlib.font_manager::<lambda>]
2024-12-07 00:21:59.835 [HKU-I] - Using SQLITE3 BaseInfoDriver (BaseInfoDriver.cpp:57)
2024-12-07 00:21:59.838 [HKU-I] - Loading market information... (StockManager.cpp:454)
2024-12-07 00:21:59.838 [HKU-I] - Loading stock type information... (StockManager.cpp:472)
2024-12-07 00:21:59.838 [HKU-I] - Loading stock information... (StockManager.cpp:374)
2024-12-07 00:21:59.899 [HKU-I] - Loading stock weight... (StockManager.cpp:490)
2024-12-07 00:21:59.995 [HKU-I] - Loading block... (StockManager.cpp:113)
2024-12-07 00:22:00.076 [HKU-I] - Loading KData... (StockManager.cpp:117)
2024-12-07 00:22:00.076 [HKU-I] - Preloading all day kdata to buffer ! (StockManager.cpp:153)
2024-12-07 00:22:00.077 [HKU-I] - 0.24s Loaded Data. (StockManager.cpp:125)
CPU times: user 756 ms, sys: 255 ms, total: 1.01 s
Wall time: 8.28 s

一、策略分析

原始描述

买入条件:周线MACD零轴下方底部金叉买入30%

卖出条件:日线级别 跌破 20日线 卖出50%持仓

策略分析

市场环境:无

系统有效性:无

信号指示器:

  • 买入信号:周线MACD零轴下方底部金叉,即周线的DIF>DEA金叉时买入(快线:DIF,慢线DEA)
  • 卖出信号:日线级别 跌破 20日均线

止损/止盈:无

资金管理:

  • 买入:30% (不明确,暂且当做当前现金的30%)
  • 卖出:已持仓股票数的50%

盈利目标:

移滑价差:

二、实现系统部件

定义信号指示器

In [2]:

1
2
3
4
5
6
def getNextWeekDate(week):
"""获取指定日期的下一周周一日期"""
from datetime import timedelta
py_week = week.datetime()
next_week_start = py_week + timedelta(days = 7 - py_week.weekday())
return Datetime(next_week_start)

In [3]:

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
38
39
40
41
42
43
44
45
def DEMO_SG(self, k):
"""
买入信号:周线MACD零轴下方底部金叉,即周线的DIF>DEA金叉时买入
卖出信号:日线级别 跌破 20日均线

参数:
week_macd_n1:周线dif窗口
week_macd_n2: 周线dea窗口
week_macd_n3: 周线macd平滑窗口
day_n: 日均线窗口
"""
if (len(k) == 0):
return

stk = k.get_stock()

#-----------------------------
#计算日线级别的卖出信号
#-----------------------------
day_c = CLOSE(k)
day_ma = MA(day_c, self.get_param("day_n"))
day_x = day_c < day_ma #收盘价小于均线
for i in range(day_x.discard, len(day_x)):
if day_x[i] >= 1.0:
self._add_sell_signal(k[i].datetime)

#-----------------------------
#计算周线级别的买入信号
#-----------------------------
week_q = Query(k[0].datetime, k[-1].datetime.next_day(), ktype=Query.WEEK)
week_k = k.get_stock().get_kdata(week_q)

n1 = self.get_param("week_macd_n1")
n2 = self.get_param("week_macd_n2")
n3 = self.get_param("week_macd_n3")
m = MACD(CLOSE(week_k), n1, n2, n3)
fast = m.get_result(1)
slow = m.get_result(2)

discard = m.discard if m.discard > 1 else 1
for i in range(discard, len(m)):
if (fast[i-1] < slow[i-1] and fast[i] > slow[i]):
#当周计算的结果,只能作为下周一的信号
self._add_buy_signal(week_k[i].datetime.next_week())

定义资金管理策略

In [4]:

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
class DEMO_MM(MoneyManagerBase):
"""
买入:30% (不明确,暂且当做当前现金的30%)
卖出:已持仓股票数的50%
"""
def __init__(self):
super(DEMO_MM, self).__init__("MACD_MM")

def _reset(self):
pass

def _clone(self):
return DEMO_MM()

def _get_buy_num(self, datetime, stk, price, risk, part_from):
tm = self.tm
cash = tm.current_cash

#可以不用考虑最小交易单位的问题,已经自动处理
# return int(cash*0.3/price) #返回类型必须是int
return cash / price

def _get_sell_num(self, datetime, stk, price, risk, part_from):
tm = self.tm
position = tm.get_position(datetime, stk)
total_num = position.number
num = int(total_num * 0.5)
return num if num >= 100 else 0

三、构建并运行系统

设定系统参数

In [5]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#账户参数
init_cash = 100000 #账户初始资金
init_date = Datetime('1990-1-1') #账户建立日期

#信号指示器参数
week_n1 = 12
week_n2 = 26
week_n3 = 9
day_n = 20

#选定标的,及测试区间
stk = sm['sz000001']
start_date = Datetime('2017-01-01') #如果是同一级别K线,可以使用索引号,使用了不同级别的K线数据,建议还是使用日期作为参数
end_date = Datetime()

构建系统实例

In [6]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#创建账户
my_tm = crtTM(date=init_date, init_cash = init_cash, cost_func=TC_FixedA())

#创建系统实例
my_sys = SYS_Simple()

#绑定账户
my_sys.tm = my_tm

#绑定信号指示器
# !注意
# 受限与 pybind11 的限制,这里不能直接使用 my_sys.sg = crtSG( 或 my_sys.mm = DEMO_MM() , 需要先生成 Python 对象的实例再赋值
my_sg = crtSG(DEMO_SG,
{'week_macd_n1': week_n1, 'week_macd_n2': week_n2, 'week_macd_n3': week_n3, 'day_n': day_n},
'DEMO_SG')
my_sys.sg = my_sg
my_sys.sg.set_param('alternate', False)

#绑定资金管理策略
my_mm = DEMO_MM()
my_sys.mm = my_mm

运行系统

In [7]:

1
2
3
4
5
6
7
8
iodog.close()
q = Query(start_date, end_date, ktype=Query.DAY)
my_sys.run(stk, q)

#将交易记录及持仓情况,保存在临时目录,可用Excel查看
#临时目录一般设置在数据所在目录下的 tmp 子目录
#如果打开了excel记录,再次运行系统前,记得先关闭excel文件,否则新的结果没法保存
my_tm.tocsv(sm.tmpdir())

四、查看资金曲线及绩效统计

In [8]:

1
2
3
4
5
#绘制资金收益曲线(净收益)
x = my_tm.get_profit_curve(stk.get_datetime_list(q), Query.DAY)
#x = my_tm.getFundsCurve(stk.getDatetimeList(q), KQuery.DAY) #总资产曲线
x = PRICELIST(x)
x.plot()

image-20250116141650394

In [9]:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#回测统计
per = Performance()
print(per.report(my_tm, Datetime.now()))
帐户初始金额: 100000.00
累计投入本金: 100000.00
累计投入资产: 0.00
累计借入现金: 0.00
累计借入资产: 0.00
累计红利: 3598.40
现金余额: 77807.46
未平仓头寸净值: 1212.64
当前总资产: 79020.10
已平仓交易总成本: 0.00
已平仓净利润总额: 0.00
单笔交易最大占用现金比例%: 99.90
交易平均占用现金比例%: 99.23
已平仓帐户收益率%: 0.00
帐户年复合收益率%: -3.11
帐户平均年收益率%: -2.81
赢利交易赢利总额: 0.00
亏损交易亏损总额: 0.00
已平仓交易总数: 0.00
赢利交易数: 0.00
亏损交易数: 0.00
赢利交易比例%: 0.00
赢利期望值: 0.00
赢利交易平均赢利: 0.00
亏损交易平均亏损: 0.00
平均赢利/平均亏损比例: 0.00
净赢利/亏损比例: 0.00
最大单笔赢利: 0.00
最大单笔盈利百分比%: 0.00
最大单笔亏损: 0.00
最大单笔亏损百分比%: 0.00
赢利交易平均持仓时间: 0.00
赢利交易最大持仓时间: 0.00
亏损交易平均持仓时间: 0.00
亏损交易最大持仓时间: 0.00
空仓总时间: 2721.00
空仓时间/总时间%: 100.00
平均空仓时间: 2721.00
最长空仓时间: 2720.00
最大连续赢利笔数: 0.00
最大连续亏损笔数: 0.00
最大连续赢利金额: 0.00
最大连续亏损金额: 0.00
R乘数期望值: 0.00
交易机会频率/年: 0.00
年度期望R乘数: 0.00
赢利交易平均R乘数: 0.00
亏损交易平均R乘数: 0.00
最大单笔赢利R乘数: 0.00
最大单笔亏损R乘数: 0.00
最大连续赢利R乘数: 0.00
最大连续亏损R乘数: 0.00

In [10]:

1
my_sys.performance()

image-20250116141625079

五、或许想看下图形

In [11]:

1
2
my_sys.plot()
MA(CLOSE(my_sys.to), 20).plot(new=False)

image-20250116141550061

六、或许想看看所有股票的情况

In [12]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd
def calTotal(blk, q):
per = Performance()
s_name = []
s_code = []
x = []
for stk in blk:
my_sys.run(stk, q)
per.statistics(my_tm, Datetime.now())
s_name.append(stk.name)
s_code.append(stk.market_code)
x.append(per["当前总资产"])
return pd.DataFrame({'代码': s_code, '股票': s_name, '当前总资产': x})

%time data = calTotal(blocka, q)
CPU times: user 16.1 s, sys: 1.58 s, total: 17.7 s
Wall time: 16.7 s

In [13]:

1
2
3
#保存到CSV文件
#data.to_csv(sm.tmpdir() + '/统计.csv')
data[:10]

Out[13]:

代码 股票 当前总资产
0 SH601003 柳钢股份 66414.81
1 SH603180 金牌家居 65716.52
2 SZ000548 湖南投资 63616.49
3 SH600159 大龙地产 40364.84
4 SZ002099 海翔药业 53875.08
5 SH600732 爱旭股份 198582.34
6 SH603127 昭衍新药 131866.78
7 SZ002953 日丰股份 69972.42
8 SH603758 秦安股份 72336.15
9 SZ002962 五方光电 54827.43

自建邮局

Posted on 2024-12-17

这个是我自己建好的邮箱mail.yihao.de

下面演示一下如何搭建一个属于自己的邮箱。

1. 安装1panel

1
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh

2. 进入1panel操作页面

按顺序:首页的左侧栏有个“应用商店”,进去搜索:maddy
随后安装,如图所示:
image.png

image.png

记得一定要打开:端口外部访问。如图:

image.png

3. 申请证书并推送至本地目录

按序找:1panel操作页面的左侧栏,从上往下第三个,点开后扩展:证书,进去。
配置好你的acme账户与dns账户
IMG_1623.jpeg

3.1 acme账户

image.png
邮箱随便填一个点确认

3.2NDS账户

我使用的是阿里云
image.png

以上准备工作完成后,点申请证书
主域名填:mail.lancet.icu(举例子)
如图所示填好推送的证书路径
IMG_1625.jpeg

1
/var/lib/docker/volumes/maddydata/_data/tls

4. 以上均完成后,检查容器运行正常,获取DKIM值

当容器正常运行后,在/var/lib/docker/volumes/maddydata/_data/dkim_keys路径下会有个像这样的lancet.icu_default.dns的文件。
打开文件,全选复制里面的所有内容,留作备用

5. DNS解析,用cloudflare举例,按表格填写

名称 类型 内容
default._domainkey TXT 第四步中lancet.icu_default.dns文件中的内容
mail A 服务器IP
@ A 服务器IP
@ MX mail.lancet.icu
mail TXT v=spf1 mx ~all
@ TXT v=spf1 mx ~all
_dmarc TXT v=DMARC1; p=quarantine; ruf=mailto:admin@lancet.icu
_mta-sts TXT v=STSv1; id=1
_smtp._tls TXT v=TLSRPTv1;rua=mailto:admin@lancet.icu

6. 首页左侧栏第五个,点进容器并进入容器终端,连接后按需运行以下命令:

创建登录账户,运行此命令后会让设置密码

1
maddy creds create x@lancet.icu

创建存储账户

1
maddy imap-acct create x@lancet.icu

可以查看账户列表

1
2
3
maddy creds list

maddy imap-acct list

查看账户下的邮箱分类

1
maddy imap-mboxes list x@lancet.icu

查看账户下邮件内容

1
maddy imap-mboxes dump x@lancet.icu 1

7. 测试搭建是否完成

使用谷歌等邮箱向:x@lancet.icu,发送测试邮件。
在容器终端,运行查看收件箱命令,如下:

1
maddy imap-msgs list x@lancet.icu INBOX

会有如图所示的记录:
image.png

8. 绑定到客户端使用

我这里使用的是macos自带的邮箱

image.png
image.png

旁路由Reality富强

Posted on 2024-12-04

之前玩别的协议被叉出去了,换一个试试

image-20241204152509272

这个是结合旁路由后的家庭网络拓扑

落地机安装xray-vless-reality

用的crazypeace/xray-vless-reality

1
2
3
4
bash <(curl -L https://github.com/crazypeace/xray-vless-reality/raw/main/install.sh) 4 443 www.sega.com 1b0bo2kc-05aa-4f9c-8df8-2b89ajc5e123

# 卸载
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ remove --purge

中转机Iptables转发

用的是arloor/iptablesUtils

1
bash <(curl -fsSL https://raw.githubusercontent.com/arloor/iptablesUtils/master/natcfg.sh)

EXS安装OpwnWRT

参考以前的文章[[OpenWRT镜像制作]]

mihomo的一些配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
proxies:
- name: "vless"
type: vless
server: 替换你的服务
port: 替换你的端口
udp: true
uuid: 替换你的UUID
flow: xtls-rprx-vision
packet-encoding: xudp

tls: true
servername: 替换你的SNI
client-fingerprint: chrome
skip-cert-verify: true
reality-opts:
public-key: 替换你的公钥
short-id: 替换你的short-id

network: tcp

OpenWRT镜像制作

Posted on 2024-12-04

前置准备

  • Windows
  • StartWind V2V
  • OpenWRT镜像网站

注册并下载镜像

到上面提到的镜像网站OpenWRT镜像网站下载镜像,可以选择相应的组件,定制镜像时,在页面少选择几个不然需要赞助,里面组件用什么就勾选什么。

image-20241204152704686

VMDK镜像制作

下载镜像并使用StartWind V2V转换成exsi格式的vmdk

基本照着我的图片下一步就好,细心点
image.png

image.png

image.png

image.png

image.png

image.png

image.png

其他

如果你导入EXSI出现错误信息,可以按照这个文章调整[[【报错】请输入大于原始容量的磁盘大小]]

具体操作:

1
2
3
# 登陆SSH执行下面命令
vmkfstools -X 1024M /vmfs/volumes/datastore1/op2/kwrt-12.04.2024-x86-64-generic-squashfs-combined-efi.vmdk
Grow: 100% done.

炒股从入门到放弃-术语大全(一)

Posted on 2024-11-27

牛市: 股票市场上买入者多于卖出者,股市行情看涨称为牛市。

熊市: 熊市与牛市相反。股票市场上卖出者多于买入者,股市行情看跌称为熊市。

开盘价: 是指当日开盘后该股票的第一笔交易成交的价格。如果开市后30分钟内无成交价,则以前日的收盘价作为开盘价。

收盘价: 指每天成交中最后一笔股票的价格,也就是收盘价格。

最高价: 是指当日所成交的价格中的最高价位。有时最高价只有一笔,有时也不止一笔。

最低价: 是指当日所成交的价格中的最低价位。有时最低价只有一笔,有时也不止一笔。

绩优股: 是指那些业绩优良,但增长速度较慢的公司的股票。这类公司有实力抵抗经济衰退,但这类公司并不能给你带来振奋人心的利润。因为这类公司业务较为成熟,不需要花很多钱来扩展业务,所以投资这类公司的目的主要在于拿股息。另外,投资这类股票时,市盈率不要太高,同时要注意股价在历史上经济不景气时波动的记录。

热门股: 是指交易量大、流通性强、股价变动幅度较大的股票。

成长股: 是指这样一些公司所发行的股票,它们的销售额和利润额持续增长,而且其速度快于整个国家和本行业的增长。这些公司通常有宏图伟略,注重科研,留有大量利润作为再投资以促进其扩张。

手: 它是国际上通用的计算成交股数的单位。必须是手的整数倍才能办理交易。目前一般以100股为一手进行交易。即购买股票至少必须购买100股。

成交量: 反映成交的数量多少。一般可用成交股数和成交金额两项指标来衡量。目前深沪股市两项指标均能显示出来

价位: 指喊价的升降单位。价位的高低随股票的每股市价的不同而异。以上海证券交易所为例:每股市价末满100元 价位是0.10元,每股市价100-200元 价位是0.20元 每股市价200-300元 价位是0.30元,每股市价300-400元 价位是0.50元 每股市价400元以上 价位是1.00元

停牌: 股票由于某种消息或进行某种活动引起股价的连续上涨或下跌,由证券交易所暂停其在股票市场上进行交易。待情况澄清或企业恢复正常后,再复牌在交易所挂牌交易。

涨跌: 以每天的收盘价与前一天的收盘价相比较,来决定股票价格是涨还是跌。一般在交易台上方的公告牌上用“ ”“-”号表示。

涨(跌)停板: 交易所规定的股价一天中涨(跌)最大幅度为前一日收盘价的百分数,不能超过此限,否则自动停止交易。

升高盘: 是指开盘价比前一天收盘价高出许多。

开低盘: 是指开盘价比前一天收盘价低出许多。

盘档: 是指投资者不积极买卖,多采取观望态度,使当天股价的变动幅度很小,这种情况称为盘档。

整理: 是指股价经过一段急剧上涨或下跌后,开始小幅度波动,进入稳定变动阶段,这种现象称为整理,整理是下一次大变动的准备阶段。

跳空: 指受强烈利多或利空消息刺激,股价开始大幅度跳动。跳空通常在股价大变动的开始或结束前出现。

市盈率: 市盈率是某种股票每股市价与每股盈利的比率。(市盈率=普通股每股市场价格÷普通股每年每股盈利)上式中的分子是当前的每股市价,分母可用最近一年盈利,也可用未来一年或几年的预测盈利。市盈率是估计普通股价值的最基本、最重要的指标之一。一般认为该比率保持在20-30之间是正常的,过小说明股价低,风险小,值得购买;过大则说明股价高,风险大,购买时应谨慎。但高市盈率股票多为热门股,低市盈率股票可能为冷门股。

回档: 是指股价上升过程中,因上涨过速而暂时回跌的现象。

反弹: 是指在下跌的行情中,股价有时由于下跌速度太快,受到买方支撑暂时回升的现象。反弹幅度较下跌幅度小,反弹后恢复下跌趋势。

多头: 对股票后市看好,先行买进股票,等股价涨至某个价位,卖出股票赚取差价的人。

空头: 是指认为股价已上涨到了最高点,很快便会下跌,或当股票已开始下跌时,认为还会继续下跌,趁高价时卖出的投资者。

多头市场: 也称牛市,就是股票价格普遍上涨的市场。

空头市场: 股价呈长期下降趋势的市场,空头市场中,股价的变动情况是大跌小涨。亦称熊市。

多翻空: 原本看好行情的多头,看法改变,卖出手中的股票,有时还借股票卖出,这种行为称为翻空或多翻空。

空翻多: 原本作空头者,改变看法,把卖出的股票买回,有时还买进更多的股票,这种行为称为空翻多。

买空: 预计股价将上涨,因而买入股票,在实际交割前,再将买入的股票卖掉,实际交割时收取差价或补足差价的一种投机行为。

卖空: 预计股价将下跌,因而卖出股票,在发生实际交割前,将卖出股票如数补进,交割时,只结清差价的投机行为。

利空: 促使股价下跌,对空头有利的因素和消息。

利多: 是刺激股价上涨,对多头有利的因素和消息。

套牢: 是指预期股价上涨,不料买进后,股价路下跌;或是预期股价下跌,卖出股票后,股价却一路上涨,前者称多头套牢,后者是空头套牢。

大户: 就是大额投资人,例如财团、信托公司以及其它拥有庞大资金的集团或个人。

中户: 指投资额较大的投资人。

散户: 就是买卖股票数量很少的小额投资者。

经纪人: 执行客户命令,买卖证券、商品或其他财产,并为此收取佣金者。

抢短线: 预期股价上涨,先低价买进后再在短期内以高价卖出。预期股价下跌,先高价卖出再伺机在短期内以低价再回购。

盘整: 股价经过一段快捷上升或下降后,遭遇阻力或支撑而呈小幅涨跌变动,做换手整理。

抬拉: 抬拉是用非常方法,将股价大幅度抬起。通常大户在抬拉之后便大抛出以牟取暴利。

打压: 是用非常方法,将股价大幅度压低。通常大户在打压之后便大量买进以取暴利。

黑马: 是指股价在一定时间内,上涨一倍或数倍的股票

白马: 是指股价已形成慢慢涨的长升通道,还有一定的上涨空间。

骗线: 大户利用股民们迷信技术分析数据、图表的心理,故意抬拉、打压股指,致使技术图表形成一定线型,引诱股民大量买进或卖出,从而达到他们大发其财的目的。这种期骗性造成的技术图表线型称为骗线。

技术分析: 以供求关系为基础对市场和股票进行的分析研究。技术分析研究价格动向、交易量、交易趋势和形式,并制图表示上述因素,用图预测当前市场行为对未来证券的供求关系和个人持有的证券可能发生的影响。

基本分析: 根据销售额、资产、收益、产品或服务、市场和管理等因素对企业进行分析。亦指对宏观政治、经济、军事动态的分析,以预测它们对股市的影响。

非上市股票: 不在证券交易所注册挂牌的股票。

委托书: 股东委托他人(其他股东)代表自己在股东大会上行使投票权的书面证明。

周转率: 股票交易的股数占交易所上市流通的股票股数的百分比。

认股权证: 股票发行公司增发新股票时,发给公司原股东的以优惠价格购买一定数量股票的证书。认股权证通常都有时间限制,过时无 效。在有效期内持有人可以将其卖出或转让。

除权: 股票除权前一日收盘价减去所含权的差价,即为除权。

派息: 股票前一日收盘价减去上市公司发放的股息称为派息。

含权: 凡是有股票有权未送配的均称含权。

填权: 除权后股价上升,将除权差价补回,称为填权。

增资: 上市公司为业务需求经常会办理增资(有偿配股)或资本公积新增资(无偿配股)。

配股: 公司增发新股时,按股东所有人份数,以特价(低于市价)分配给股东认购。

坐轿子: 预测股价将涨,抢在众人前以低价先行买进,待众多散户跟进、股价节节升高后,卖出获利。

抬轿子: 在别人早已买进后才醒悟,也跟着买进,结果是把股价抬高让他人获利,而自己买进的股价已非低价,无利可图。

下轿子: 坐轿客逢高获利结算为下轿子。

阻力线: 股价上涨到达某一价位附近,如有大量的卖出情形,使股价停止上扬,甚至回跌的价。

支撑线: 股价下跌到在某一价位附近,如有大量买进情形,使股价停止下跌甚至回升的价位。

跳空: 股市受到强烈利多或利空消息的刺激,股价开始大幅跳动,在上涨时,当天的开盘或最低价,高于前一天的收盘价两个申报单位以上,称“跳空而上”;下跌时,当天的天盘或最高价低于前一天的收盘价两个申报单位,而于一天的交易中,上涨或下跌超过一个申报单位,称“跳空而下”。

填空: 指将跳空出现时将没有交易的空价位补回来,也就是股价跳空后,过一段时间将回到跳空前价位,以填补跳空价位。

回档: 上升趋势中,因股价上涨过速而回跌,以调整价位的现象。

天价: 个别股票由多头市场转为空头市场时的最高价。

突破: 指股价经过一段盘档时间后,产生的一种价格波动。

探底: 股价持续跌挫至某价位时便止跌回升,如此一次或数次。

头部: 股价上涨至某价位时便遇阻力而下滑。

挂进: 买进股票的意思。

挂出: 卖出股票的意思

开平盘: 指今日的开盘价与前一营业日的收盘价相同。

近期趋势: 20~30天为近期趋势。

全额交割: 是证券主管机关对重整公司或发生重大问题的上市公司之股票,特别制定的买卖交割力法。

洗盘: 做手为达到炒作目的,必须于途中让低价买进,且意志不坚的轿客下轿,以减轻上档压力,同时让持股者的平均价位升高,以利于施行养、套、杀的手段。

对敲转帐: 转帐交易的一种方式。这是证券经纪商赚取投资利润的一种手段。经纪商们经低价买进股票,并收取客户的佣金,再以高价卖给另一客户,这样就赚取了大量利润。

12…6>

54 posts
© 2025 Hoey