在股票交易中,如何让自己的投资策略不随市场的情绪而波动
唯一的办法,就是
- 建立自己的投资计划
- 并坚持投资纪律
- 耐心等待
今天我们就如何构建投资计划,开始一段用python程序来代替人来做决策,
从而控制自己的手
import pandas as pd
# 自定义函数,针对单个标的的投资计划
def plan(name,price_init,rate_init,shares_init,data):
df = pd.DataFrame(data=data)
df['加仓批次'] = list(range(1,len(df)+1))
df['名称'] = name
df['价格'] = df['价格系数'] * price_init
df['shares'] = ''
df['money'] = ''
print(df)
df.loc[df['加仓批次']==1, 'shares'] = shares_init
print(df)
df.loc[df['加仓批次']==1, 'money'] = df.loc[df['加仓批次']==1, '价格'] * df.loc[df['加仓批次']==1, 'shares']
money_init = df.loc[df['加仓批次']==1, 'money'].values[0]
for i in range(len(df)-1):
n = i+2
df.loc[df['加仓批次']==n, 'shares'] = round(money_init*df.loc[df['加仓批次']==n, '加仓比例']/\
(rate_init * df.loc[df['加仓批次']==n, '价格']*100),0)*100
df.loc[df['加仓批次']==n, 'money'] = df.loc[df['加仓批次']==n, '价格'] * df.loc[df['加仓批次']==n, 'shares']
df['累计仓位'] = df['加仓比例'].cumsum()
df['累计份额'] = df['shares'].cumsum()
df['累计金额'] = df['money'].cumsum()
df['成本'] = df['累计金额']/df['累计份额']
df['下跌幅度'] = 1- df['价格系数']
df['下跌幅度'] = df['下跌幅度'].apply(lambda x:f'下跌{int(round(x*100,0))}%')
df.loc[df['加仓批次']==1, '下跌幅度'] = '首次'
df = df[['名称','加仓批次', '下跌幅度', '价格系数','价格', '加仓比例', '累计仓位',
'shares', 'money','累计份额', '累计金额','成本']]
return df
# 标的名称
name = '中概互联-513050'
# 首次购入价格
price_init = 2.0
# 首次加仓比例
rate_init = 0.01
# 首次购入份额数量
shares_init = 2000
data = {
'价格系数':[1,0.95,0.9,0.85,0.8,0.75,0.7,0.65],
'加仓比例':[rate_init,0.02,0.03,0.04,0.05,0.05,0.05,0.05],
}
df = plan(name,price_init,rate_init,shares_init,data)
format_dict = {'money': '¥{0:.0f}',
'累计金额': '¥{0:.0f}',
'价格': '{0:.3f}',
'成本': '{0:.3f}',
'shares': '{0:.0f}',
'累计份额': '{0:.0f}',
'价格系数': '{0:.0%}',
'加仓比例': '{0:.2%}',
'累计仓位': '{0:.2%}',
}
# print(name)
df.style.hide_index().format(format_dict)
<style type="text/css">
</style>
名称 |
加仓批次 |
下跌幅度 |
价格系数 |
价格 |
加仓比例 |
累计仓位 |
shares |
money |
累计份额 |
累计金额 |
成本 |
中概互联-513050 |
1 |
首次 |
100% |
2.000 |
1.00% |
1.00% |
2000 |
¥4000 |
2000 |
¥4000 |
2.000 |
中概互联-513050 |
2 |
下跌5% |
95% |
1.900 |
2.00% |
3.00% |
4200 |
¥7980 |
6200 |
¥11980 |
1.932 |
中概互联-513050 |
3 |
下跌10% |
90% |
1.800 |
3.00% |
6.00% |
6700 |
¥12060 |
12900 |
¥24040 |
1.864 |
中概互联-513050 |
4 |
下跌15% |
85% |
1.700 |
4.00% |
10.00% |
9400 |
¥15980 |
22300 |
¥40020 |
1.795 |
中概互联-513050 |
5 |
下跌20% |
80% |
1.600 |
5.00% |
15.00% |
12500 |
¥20000 |
34800 |
¥60020 |
1.725 |
中概互联-513050 |
6 |
下跌25% |
75% |
1.500 |
5.00% |
20.00% |
13300 |
¥19950 |
48100 |
¥79970 |
1.663 |
中概互联-513050 |
7 |
下跌30% |
70% |
1.400 |
5.00% |
25.00% |
14300 |
¥20020 |
62400 |
¥99990 |
1.602 |
中概互联-513050 |
8 |
下跌35% |
65% |
1.300 |
5.00% |
30.00% |
15400 |
¥20020 |
77800 |
¥120010 |
1.543 |
# 标的名称
name = '万科'
# 首次购入价格
price_init = 22
# 首次加仓比例
rate_init = 0.01
# 首次购入份额数量
shares_init = 300
data = {
'价格系数':[1,0.95,0.9,0.85,0.8,0.75,0.7,0.65],
'加仓比例':[rate_init,0.02,0.03,0.04,0.05,0.05,0.05,0.05],
}
df = plan(name,price_init,rate_init,shares_init,data)
format_dict = {'money': '¥{0:.0f}',
'累计金额': '¥{0:.0f}',
'价格': '{0:.3f}',
'成本': '{0:.3f}',
'shares': '{0:.0f}',
'累计份额': '{0:.0f}',
'价格系数': '{0:.0%}',
'加仓比例': '{0:.2%}',
'累计仓位': '{0:.2%}',
}
df.style.hide_index().format(format_dict)
价格系数 加仓比例 加仓批次 名称 价格 shares money
0 1.00 0.01 1 万科 22.0
1 0.95 0.02 2 万科 20.9
2 0.90 0.03 3 万科 19.8
3 0.85 0.04 4 万科 18.7
4 0.80 0.05 5 万科 17.6
5 0.75 0.05 6 万科 16.5
6 0.70 0.05 7 万科 15.4
7 0.65 0.05 8 万科 14.3
价格系数 加仓比例 加仓批次 名称 价格 shares money
0 1.00 0.01 1 万科 22.0 300
1 0.95 0.02 2 万科 20.9
2 0.90 0.03 3 万科 19.8
3 0.85 0.04 4 万科 18.7
4 0.80 0.05 5 万科 17.6
5 0.75 0.05 6 万科 16.5
6 0.70 0.05 7 万科 15.4
7 0.65 0.05 8 万科 14.3
<style type="text/css">
</style>
名称 |
加仓批次 |
下跌幅度 |
价格系数 |
价格 |
加仓比例 |
累计仓位 |
shares |
money |
累计份额 |
累计金额 |
成本 |
万科 |
1 |
首次 |
100% |
22.000 |
1.00% |
1.00% |
300 |
¥6600 |
300 |
¥6600 |
22.000 |
万科 |
2 |
下跌5% |
95% |
20.900 |
2.00% |
3.00% |
600 |
¥12540 |
900 |
¥19140 |
21.267 |
万科 |
3 |
下跌10% |
90% |
19.800 |
3.00% |
6.00% |
1000 |
¥19800 |
1900 |
¥38940 |
20.495 |
万科 |
4 |
下跌15% |
85% |
18.700 |
4.00% |
10.00% |
1400 |
¥26180 |
3300 |
¥65120 |
19.733 |
万科 |
5 |
下跌20% |
80% |
17.600 |
5.00% |
15.00% |
1900 |
¥33440 |
5200 |
¥98560 |
18.954 |
万科 |
6 |
下跌25% |
75% |
16.500 |
5.00% |
20.00% |
2000 |
¥33000 |
7200 |
¥131560 |
18.272 |
万科 |
7 |
下跌30% |
70% |
15.400 |
5.00% |
25.00% |
2100 |
¥32340 |
9300 |
¥163900 |
17.624 |
万科 |
8 |
下跌35% |
65% |
14.300 |
5.00% |
30.00% |
2300 |
¥32890 |
11600 |
¥196790 |
16.965 |
# 标的名称
name = '万科'
# 首次购入价格
price_init = 19
# 首次加仓比例
rate_init = 0.3
# 首次购入份额数量
shares_init = 300
data = {
'价格系数': [1, 0.95, 0.9, 0.85, 0.8, 0.75, 0.7, 0.65],
'加仓比例': [rate_init, 0.02, 0.03, 0.04, 0.05, 0.05, 0.05, 0.05],
}
df = plan(name, price_init, rate_init, shares_init, data)
format_dict = {'money': '¥{0:.0f}',
'累计金额': '¥{0:.0f}',
'价格': '{0:.3f}',
'成本': '{0:.3f}',
'shares': '{0:.0f}',
'累计份额': '{0:.0f}',
'价格系数': '{0:.0%}',
'加仓比例': '{0:.2%}',
'累计仓位': '{0:.2%}',
}
df.style.hide_index().format(format_dict)
价格系数 加仓比例 加仓批次 名称 价格 shares money
0 1.00 0.30 1 万科 19.00
1 0.95 0.02 2 万科 18.05
2 0.90 0.03 3 万科 17.10
3 0.85 0.04 4 万科 16.15
4 0.80 0.05 5 万科 15.20
5 0.75 0.05 6 万科 14.25
6 0.70 0.05 7 万科 13.30
7 0.65 0.05 8 万科 12.35
价格系数 加仓比例 加仓批次 名称 价格 shares money
0 1.00 0.30 1 万科 19.00 300
1 0.95 0.02 2 万科 18.05
2 0.90 0.03 3 万科 17.10
3 0.85 0.04 4 万科 16.15
4 0.80 0.05 5 万科 15.20
5 0.75 0.05 6 万科 14.25
6 0.70 0.05 7 万科 13.30
7 0.65 0.05 8 万科 12.35
<style type="text/css">
</style>
名称 |
加仓批次 |
下跌幅度 |
价格系数 |
价格 |
加仓比例 |
累计仓位 |
shares |
money |
累计份额 |
累计金额 |
成本 |
万科 |
1 |
首次 |
100% |
19.000 |
30.00% |
30.00% |
300 |
¥5700 |
300 |
¥5700 |
19.000 |
万科 |
2 |
下跌5% |
95% |
18.050 |
2.00% |
32.00% |
0 |
¥0 |
300 |
¥5700 |
19.000 |
万科 |
3 |
下跌10% |
90% |
17.100 |
3.00% |
35.00% |
0 |
¥0 |
300 |
¥5700 |
19.000 |
万科 |
4 |
下跌15% |
85% |
16.150 |
4.00% |
39.00% |
0 |
¥0 |
300 |
¥5700 |
19.000 |
万科 |
5 |
下跌20% |
80% |
15.200 |
5.00% |
44.00% |
100 |
¥1520 |
400 |
¥7220 |
18.050 |
万科 |
6 |
下跌25% |
75% |
14.250 |
5.00% |
49.00% |
100 |
¥1425 |
500 |
¥8645 |
17.290 |
万科 |
7 |
下跌30% |
70% |
13.300 |
5.00% |
54.00% |
100 |
¥1330 |
600 |
¥9975 |
16.625 |
万科 |
8 |
下跌35% |
65% |
12.350 |
5.00% |
59.00% |
100 |
¥1235 |
700 |
¥11210 |
16.014 |
min_price = 14
max_price = 33
price = 19
money = 100000
bili = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]