软件模拟股票高抛低吸
约定:
-
本金10000.00元;
-
当前股价10.0元/股;
-
本金的50%用于建仓;
-
股价下降10%,买入当前股票数的10%(低吸);
-
股价上升20%,卖出当前股票数的10%(高抛);
-
股价下降与上升概率同等(或2:1)情况下总价值分析;
-
低吸后持股成本:(第一次买入数量*买入价 + 第二次买入数量*买入价+交易费用)/ (第一次买入数量 + 第二次买入数量);
-
高抛后持股成本:(第一次买入数量*买入价 - 第二次卖出数量*买入价+交易费用)/ (第一次买入数量 - 第二次买入数量);
-
每次交易费用固定为6元 = 5元(交易佣金+印花税)+ 1元(杂费);
-
总共交易20次,并且最后2次为股价上升;
-
其他:参考大神的文章 “高抛低吸”与“追涨杀跌”。
目标:
通过长期高抛低吸,将持有股数增加,将持有股价降低。
编程(股价下降与上升概率2:1):
#include <string.h>
#include <stdio.h>
#include <time.h>int main(){double zongjiazhi = 10000.0;//总价值 = 现金+股值double xianjin = 10000.0;//本金1万double chiguchengben = 0.0;//持股成本double gujia_junzhi = 10.0;//初始股价均值10元1股double dangqian_gujia = 10.0;//当前股价int gupiaoshu = 0;//股票数int suijishu = 0;//假设下降概率与上升概率比为2:1srand((unsigned int)time(NULL));int i = 1;for(i = 1; i <= 20; i++){if(1 == i){//首次建仓chiguchengben = xianjin/2;//建仓使用一半本金xianjin = xianjin - chiguchengben;gupiaoshu = chiguchengben/gujia_junzhi;gujia_junzhi = gujia_junzhi*1.0;printf("\n--------------------------------------------------------------------------------------------------------------------------\n");printf("\n第 %d 次建仓 : 总价值=%.2lf, 剩余现金=%.2lf, 持股成本=%.2lf, 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, zongjiazhi, xianjin, chiguchengben, gupiaoshu, gujia_junzhi, gujia_junzhi);}else{suijishu = rand() % 100 + 1;//产生随机数[1,100]printf("\n\n随机数 = %d, ", suijishu);if((suijishu < 66) && (i < 18)){//下跌10%,补仓10%printf("补仓\n");double bucang_gujia = dangqian_gujia*0.9;//补仓股价int bucang_gupiaoshu = (int)gupiaoshu*0.1;//补仓股票数double bucang_jine = bucang_gujia*bucang_gupiaoshu;//补仓金额dangqian_gujia = bucang_gujia;//当前股价xianjin = xianjin - bucang_jine;//当前本金chiguchengben = chiguchengben + bucang_jine;gupiaoshu = gupiaoshu + bucang_gupiaoshu;//当前股票总数gujia_junzhi = (chiguchengben + 6 + 1)*1.0/gupiaoshu;zongjiazhi = xianjin + gupiaoshu*dangqian_gujia;printf("第 %d 次操作前 : 补仓股价=%.2lf, 补仓股票数=%d, 补仓金额=%.2lf\n", i, bucang_gujia, bucang_gupiaoshu, bucang_jine);printf("第 %d 次操作后 : 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, gupiaoshu, gujia_junzhi, dangqian_gujia);printf("第 %d 次操作后 : 总价值=%.2lf, 持股成本=%.2lf, 剩余现金=%.2lf \n", i, zongjiazhi, chiguchengben, xianjin);}else{//上升20%,抛仓10%printf("抛仓\n");double pocang_gujia = dangqian_gujia*1.2;//抛仓股价int pocang_gupiaoshu = (int)gupiaoshu*0.1;//抛仓股票数double pocang_jine = pocang_gujia*pocang_gupiaoshu;//抛仓金额dangqian_gujia = pocang_gujia;//当前股价xianjin = xianjin + pocang_jine;//当前现金chiguchengben = chiguchengben - pocang_jine;if(chiguchengben < 0){printf("!!!!!!持股成本已最低!!!!!!\n");break;}gupiaoshu = gupiaoshu - pocang_gupiaoshu;//当前股票总数gujia_junzhi = (chiguchengben + 6 + 1)*1.0/gupiaoshu;zongjiazhi = xianjin + gupiaoshu*dangqian_gujia;printf("第 %d 次操作前 : 抛仓股价=%.2lf, 抛仓股票数=%d, 抛仓金额=%.2lf\n", i, pocang_gujia, pocang_gupiaoshu, pocang_jine);printf("第 %d 次操作后 : 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, gupiaoshu, gujia_junzhi, dangqian_gujia);printf("第 %d 次操作后 : 总价值=%.2lf, 持股成本=%.2lf, 剩余现金=%.2lf \n", i, zongjiazhi, chiguchengben, xianjin);}}}return 0;
}
测试结果:
第 1 次建仓 : 总价值=10000.00, 剩余现金=5000.00, 持股成本=5000.00, 持有股票数=500, 持有股票均价=10.00, 当前股价=10.00 随机数 = 52, 补仓
第 2 次操作前 : 补仓股价=9.00, 补仓股票数=50, 补仓金额=450.00
第 2 次操作后 : 持有股票数=550, 持有股票均价=9.92, 当前股价=9.00
第 2 次操作后 : 总价值=9500.00, 持股成本=5450.00, 剩余现金=4550.00 随机数 = 57, 补仓
第 3 次操作前 : 补仓股价=8.10, 补仓股票数=55, 补仓金额=445.50
第 3 次操作后 : 持有股票数=605, 持有股票均价=9.76, 当前股价=8.10
第 3 次操作后 : 总价值=9005.00, 持股成本=5895.50, 剩余现金=4104.50 随机数 = 50, 补仓
第 4 次操作前 : 补仓股价=7.29, 补仓股票数=60, 补仓金额=437.40
第 4 次操作后 : 持有股票数=665, 持有股票均价=9.53, 当前股价=7.29
第 4 次操作后 : 总价值=8514.95, 持股成本=6332.90, 剩余现金=3667.10 随机数 = 1, 补仓
第 5 次操作前 : 补仓股价=6.56, 补仓股票数=66, 补仓金额=433.03
第 5 次操作后 : 持有股票数=731, 持有股票均价=9.27, 当前股价=6.56
第 5 次操作后 : 总价值=8030.16, 持股成本=6765.93, 剩余现金=3234.07 随机数 = 57, 补仓
第 6 次操作前 : 补仓股价=5.90, 补仓股票数=73, 补仓金额=431.06
第 6 次操作后 : 持有股票数=804, 持有股票均价=8.96, 当前股价=5.90
第 6 次操作后 : 总价值=7550.56, 持股成本=7196.98, 剩余现金=2803.02 随机数 = 71, 抛仓
第 7 次操作前 : 抛仓股价=7.09, 抛仓股票数=80, 抛仓金额=566.87
第 7 次操作后 : 持有股票数=724, 持有股票均价=9.17, 当前股价=7.09
第 7 次操作后 : 总价值=8500.06, 持股成本=6630.11, 剩余现金=3369.89 随机数 = 16, 补仓
第 8 次操作前 : 补仓股价=6.38, 补仓股票数=72, 补仓金额=459.17
第 8 次操作后 : 持有股票数=796, 持有股票均价=8.91, 当前股价=6.38
第 8 次操作后 : 总价值=7987.05, 持股成本=7089.28, 剩余现金=2910.72 随机数 = 75, 抛仓
第 9 次操作前 : 抛仓股价=7.65, 抛仓股票数=79, 抛仓金额=604.57
第 9 次操作后 : 持有股票数=717, 持有股票均价=9.05, 当前股价=7.65
第 9 次操作后 : 总价值=9002.31, 持股成本=6484.71, 剩余现金=3515.29 随机数 = 67, 抛仓
第 10 次操作前 : 抛仓股价=9.18, 抛仓股票数=71, 抛仓金额=652.01
第 10 次操作后 : 持有股票数=646, 持有股票均价=9.04, 当前股价=9.18
第 10 次操作后 : 总价值=10099.72, 持股成本=5832.70, 剩余现金=4167.30 随机数 = 86, 抛仓
第 11 次操作前 : 抛仓股价=11.02, 抛仓股票数=64, 抛仓金额=705.28
第 11 次操作后 : 持有股票数=582, 持有股票均价=8.82, 当前股价=11.02
第 11 次操作后 : 总价值=11286.20, 持股成本=5127.42, 剩余现金=4872.58 随机数 = 20, 补仓
第 12 次操作前 : 补仓股价=9.92, 补仓股票数=58, 补仓金额=575.24
第 12 次操作后 : 持有股票数=640, 持有股票均价=8.92, 当前股价=9.92
第 12 次操作后 : 总价值=10644.84, 持股成本=5702.66, 剩余现金=4297.34 随机数 = 16, 补仓
第 13 次操作前 : 补仓股价=8.93, 补仓股票数=64, 补仓金额=571.27
第 13 次操作后 : 持有股票数=704, 持有股票均价=8.92, 当前股价=8.93
第 13 次操作后 : 总价值=10010.09, 持股成本=6273.94, 剩余现金=3726.06 随机数 = 59, 补仓
第 14 次操作前 : 补仓股价=8.03, 补仓股票数=70, 补仓金额=562.35
第 14 次操作后 : 持有股票数=774, 持有股票均价=8.84, 当前股价=8.03
第 14 次操作后 : 总价值=9381.68, 持股成本=6836.28, 剩余现金=3163.72 随机数 = 37, 补仓
第 15 次操作前 : 补仓股价=7.23, 补仓股票数=77, 补仓金额=556.73
第 15 次操作后 : 持有股票数=851, 持有股票均价=8.70, 当前股价=7.23
第 15 次操作后 : 总价值=8759.89, 持股成本=7393.01, 剩余现金=2606.99 随机数 = 32, 补仓
第 16 次操作前 : 补仓股价=6.51, 补仓股票数=85, 补仓金额=553.11
第 16 次操作后 : 持有股票数=936, 持有股票均价=8.50, 当前股价=6.51
第 16 次操作后 : 总价值=8144.60, 持股成本=7946.12, 剩余现金=2053.88 随机数 = 90, 抛仓
第 17 次操作前 : 抛仓股价=7.81, 抛仓股票数=93, 抛仓金额=726.20
第 17 次操作后 : 持有股票数=843, 持有股票均价=8.57, 当前股价=7.81
第 17 次操作后 : 总价值=9362.74, 持股成本=7219.92, 剩余现金=2780.08 随机数 = 87, 抛仓
第 18 次操作前 : 抛仓股价=9.37, 抛仓股票数=84, 抛仓金额=787.11
第 18 次操作后 : 持有股票数=759, 持有股票均价=8.48, 当前股价=9.37
第 18 次操作后 : 总价值=10679.27, 持股成本=6432.81, 剩余现金=3567.19 随机数 = 87, 抛仓
第 19 次操作前 : 抛仓股价=11.24, 抛仓股票数=75, 抛仓金额=843.33
第 19 次操作后 : 持有股票数=684, 持有股票均价=8.18, 当前股价=11.24
第 19 次操作后 : 总价值=12101.69, 持股成本=5589.48, 剩余现金=4410.52 随机数 = 100, 抛仓
第 20 次操作前 : 抛仓股价=13.49, 抛仓股票数=68, 抛仓金额=917.54
第 20 次操作后 : 持有股票数=616, 持有股票均价=7.60, 当前股价=13.49
第 20 次操作后 : 总价值=13639.92, 持股成本=4671.94, 剩余现金=5328.06
结论:
即使前期股价再怎么跌,每跌10%,则补仓后,持有股票的均价一直在降低,只要等到股价上升时,手中低价的股票就能实现盈利,当然这个时间成本是无法估计的,可能一年,可能三年,但对于价值投资来看,这个时间并不算长。
编程(股价下降与上升概率1:1):
#include <string.h>
#include <stdio.h>
#include <time.h>int main(){double zongjiazhi = 10000.0;//总价值 = 现金+股值double xianjin = 10000.0;//本金1万double chiguchengben = 0.0;//持股成本double gujia_junzhi = 10.0;//初始股价均值10元1股double dangqian_gujia = 10.0;//当前股价int gupiaoshu = 0;//股票数int suijishu = 0;//假设下降概率与上升概率比为2:1srand((unsigned int)time(NULL));int i = 1;for(i = 1; i <= 20; i++){if(1 == i){//首次建仓chiguchengben = xianjin/2;//建仓使用一半本金xianjin = xianjin - chiguchengben;gupiaoshu = chiguchengben/gujia_junzhi;gujia_junzhi = gujia_junzhi*1.0;printf("\n--------------------------------------------------------------------------------------------------------------------------\n");printf("\n第 %d 次建仓 : 总价值=%.2lf, 剩余现金=%.2lf, 持股成本=%.2lf, 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, zongjiazhi, xianjin, chiguchengben, gupiaoshu, gujia_junzhi, gujia_junzhi);}else{suijishu = rand() % 100 + 1;//产生随机数[1,100]printf("\n\n随机数 = %d, ", suijishu);if((suijishu < 50) && (i < 18)){//下跌10%,补仓10%printf("补仓\n");double bucang_gujia = dangqian_gujia*0.9;//补仓股价int bucang_gupiaoshu = (int)gupiaoshu*0.1;//补仓股票数double bucang_jine = bucang_gujia*bucang_gupiaoshu;//补仓金额dangqian_gujia = bucang_gujia;//当前股价xianjin = xianjin - bucang_jine;//当前本金chiguchengben = chiguchengben + bucang_jine;gupiaoshu = gupiaoshu + bucang_gupiaoshu;//当前股票总数gujia_junzhi = (chiguchengben + 6 + 1)*1.0/gupiaoshu;zongjiazhi = xianjin + gupiaoshu*dangqian_gujia;printf("第 %d 次操作前 : 补仓股价=%.2lf, 补仓股票数=%d, 补仓金额=%.2lf\n", i, bucang_gujia, bucang_gupiaoshu, bucang_jine);printf("第 %d 次操作后 : 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, gupiaoshu, gujia_junzhi, dangqian_gujia);printf("第 %d 次操作后 : 总价值=%.2lf, 持股成本=%.2lf, 剩余现金=%.2lf \n", i, zongjiazhi, chiguchengben, xianjin);}else{//上升20%,抛仓10%printf("抛仓\n");double pocang_gujia = dangqian_gujia*1.2;//抛仓股价int pocang_gupiaoshu = (int)gupiaoshu*0.1;//抛仓股票数double pocang_jine = pocang_gujia*pocang_gupiaoshu;//抛仓金额dangqian_gujia = pocang_gujia;//当前股价xianjin = xianjin + pocang_jine;//当前现金chiguchengben = chiguchengben - pocang_jine;if(chiguchengben < 0){printf("!!!!!!持股成本已最低!!!!!!\n");break;}gupiaoshu = gupiaoshu - pocang_gupiaoshu;//当前股票总数gujia_junzhi = (chiguchengben + 6 + 1)*1.0/gupiaoshu;zongjiazhi = xianjin + gupiaoshu*dangqian_gujia;printf("第 %d 次操作前 : 抛仓股价=%.2lf, 抛仓股票数=%d, 抛仓金额=%.2lf\n", i, pocang_gujia, pocang_gupiaoshu, pocang_jine);printf("第 %d 次操作后 : 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, gupiaoshu, gujia_junzhi, dangqian_gujia);printf("第 %d 次操作后 : 总价值=%.2lf, 持股成本=%.2lf, 剩余现金=%.2lf \n", i, zongjiazhi, chiguchengben, xianjin);}}}return 0;
}
测试结果:
第 1 次建仓 : 总价值=10000.00, 剩余现金=5000.00, 持股成本=5000.00, 持有股票数=500, 持有股票均价=10.00, 当前股价=10.00 随机数 = 35, 补仓
第 2 次操作前 : 补仓股价=9.00, 补仓股票数=50, 补仓金额=450.00
第 2 次操作后 : 持有股票数=550, 持有股票均价=9.92, 当前股价=9.00
第 2 次操作后 : 总价值=9500.00, 持股成本=5450.00, 剩余现金=4550.00 随机数 = 10, 补仓
第 3 次操作前 : 补仓股价=8.10, 补仓股票数=55, 补仓金额=445.50
第 3 次操作后 : 持有股票数=605, 持有股票均价=9.76, 当前股价=8.10
第 3 次操作后 : 总价值=9005.00, 持股成本=5895.50, 剩余现金=4104.50 随机数 = 23, 补仓
第 4 次操作前 : 补仓股价=7.29, 补仓股票数=60, 补仓金额=437.40
第 4 次操作后 : 持有股票数=665, 持有股票均价=9.53, 当前股价=7.29
第 4 次操作后 : 总价值=8514.95, 持股成本=6332.90, 剩余现金=3667.10 随机数 = 74, 抛仓
第 5 次操作前 : 抛仓股价=8.75, 抛仓股票数=66, 抛仓金额=577.37
第 5 次操作后 : 持有股票数=599, 持有股票均价=9.62, 当前股价=8.75
第 5 次操作后 : 总价值=9484.52, 持股成本=5755.53, 剩余现金=4244.47 随机数 = 9, 补仓
第 6 次操作前 : 补仓股价=7.87, 补仓股票数=59, 补仓金额=464.52
第 6 次操作后 : 持有股票数=658, 持有股票均价=9.46, 当前股价=7.87
第 6 次操作后 : 总价值=8960.51, 持股成本=6220.05, 剩余现金=3779.95 随机数 = 7, 补仓
第 7 次操作前 : 补仓股价=7.09, 补仓股票数=65, 补仓金额=460.58
第 7 次操作后 : 持有股票数=723, 持有股票均价=9.25, 当前股价=7.09
第 7 次操作后 : 总价值=8442.46, 持股成本=6680.63, 剩余现金=3319.37 随机数 = 79, 抛仓
第 8 次操作前 : 抛仓股价=8.50, 抛仓股票数=72, 抛仓金额=612.22
第 8 次操作后 : 持有股票数=651, 持有股票均价=9.33, 当前股价=8.50
第 8 次操作后 : 总价值=9467.08, 持股成本=6068.41, 剩余现金=3931.59 随机数 = 85, 抛仓
第 9 次操作前 : 抛仓股价=10.20, 抛仓股票数=65, 抛仓金额=663.24
第 9 次操作后 : 持有股票数=586, 持有股票均价=9.24, 当前股价=10.20
第 9 次操作后 : 总价值=10574.17, 持股成本=5405.17, 剩余现金=4594.83 随机数 = 90, 抛仓
第 10 次操作前 : 抛仓股价=12.24, 抛仓股票数=58, 抛仓金额=710.18
第 10 次操作后 : 持有股票数=528, 持有股票均价=8.91, 当前股价=12.24
第 10 次操作后 : 总价值=11770.04, 持股成本=4695.00, 剩余现金=5305.00 随机数 = 63, 抛仓
第 11 次操作前 : 抛仓股价=14.69, 抛仓股票数=52, 抛仓金额=764.05
第 11 次操作后 : 持有股票数=476, 持有股票均价=8.27, 当前股价=14.69
第 11 次操作后 : 总价值=13063.05, 持股成本=3930.95, 剩余现金=6069.05 随机数 = 51, 抛仓
第 12 次操作前 : 抛仓股价=17.63, 抛仓股票数=47, 抛仓金额=828.70
第 12 次操作后 : 持有股票数=429, 持有股票均价=7.25, 当前股价=17.63
第 12 次操作后 : 总价值=14461.85, 持股成本=3102.25, 剩余现金=6897.75 随机数 = 83, 抛仓
第 13 次操作前 : 抛仓股价=21.16, 抛仓股票数=42, 抛仓金额=888.65
第 13 次操作后 : 持有股票数=387, 持有股票均价=5.74, 当前股价=21.16
第 13 次操作后 : 总价值=15974.67, 持股成本=2213.60, 剩余现金=7786.40 随机数 = 38, 补仓
第 14 次操作前 : 补仓股价=19.04, 补仓股票数=38, 补仓金额=723.61
第 14 次操作后 : 持有股票数=425, 持有股票均价=6.93, 当前股价=19.04
第 14 次操作后 : 总价值=15155.85, 持股成本=2937.21, 剩余现金=7062.79 随机数 = 25, 补仓
第 15 次操作前 : 补仓股价=17.14, 补仓股票数=42, 补仓金额=719.81
第 15 次操作后 : 持有股票数=467, 持有股票均价=7.85, 当前股价=17.14
第 15 次操作后 : 总价值=14346.54, 持股成本=3657.02, 剩余现金=6342.98 随机数 = 53, 抛仓
第 16 次操作前 : 抛仓股价=20.57, 抛仓股票数=46, 抛仓金额=946.03
第 16 次操作后 : 持有股票数=421, 持有股票均价=6.46, 当前股价=20.57
第 16 次操作后 : 总价值=15947.25, 持股成本=2710.99, 剩余现金=7289.01 随机数 = 5, 补仓
第 17 次操作前 : 补仓股价=18.51, 补仓股票数=42, 补仓金额=777.39
第 17 次操作后 : 持有股票数=463, 持有股票均价=7.55, 当前股价=18.51
第 17 次操作后 : 总价值=15081.43, 持股成本=3488.38, 剩余现金=6511.62 随机数 = 91, 抛仓
第 18 次操作前 : 抛仓股价=22.21, 抛仓股票数=46, 抛仓金额=1021.71
第 18 次操作后 : 持有股票数=417, 持有股票均价=5.93, 当前股价=22.21
第 18 次操作后 : 总价值=16795.39, 持股成本=2466.67, 剩余现金=7533.33 随机数 = 42, 抛仓
第 19 次操作前 : 抛仓股价=26.65, 抛仓股票数=41, 抛仓金额=1092.79
第 19 次操作后 : 持有股票数=376, 持有股票均价=3.67, 当前股价=26.65
第 19 次操作后 : 总价值=18647.80, 持股成本=1373.88, 剩余现金=8626.12 随机数 = 34, 抛仓
第 20 次操作前 : 抛仓股价=31.98, 抛仓股票数=37, 抛仓金额=1183.41
第 20 次操作后 : 持有股票数=339, 持有股票均价=0.58, 当前股价=31.98
第 20 次操作后 : 总价值=20652.14, 持股成本=190.47, 剩余现金=9809.53
结论:
当股价下降与上升概率均等时,得出类似上面的结论,并且此时的收益将更大。
当你打算长期持有某一只股票时,当然可以按照上述步骤操作,但是大多数短期操作的朋友往往心中有个预期的盈利点位(比如1000.00元),赚到我就跑路,那就需要在股指达到某个点时,全仓抛售。
编程(股价下降与上升概率2:1):
#include <string.h>
#include <stdio.h>
#include <time.h>#define YUQI_YINGLI 3000.00int main(){double zongjiazhi = 10000.0;//总价值 = 现金+股值double benjin = 10000.0;//本金1万double xianjin = 10000.0;//现金1万double chiguchengben = 0.0;//持股成本double gujia_junzhi = 10.0;//初始股价均值10元1股double dangqian_gujia = 10.0;//当前股价int gupiaoshu = 0;//股票数int suijishu = 0;//假设下降概率与上升概率比为2:1srand((unsigned int)time(NULL));int i = 1;for(i = 1; i <= 20; i++){if(1 == i){//首次建仓chiguchengben = xianjin/2;//建仓使用一半本金xianjin = xianjin - chiguchengben;gupiaoshu = chiguchengben/gujia_junzhi;gujia_junzhi = gujia_junzhi*1.0;printf("\n--------------------------------------------------------------------------------------------------------------------------\n");printf("\n第 %d 次建仓 : 总价值=%.2lf, 剩余现金=%.2lf, 持股成本=%.2lf, 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, zongjiazhi, xianjin, chiguchengben, gupiaoshu, gujia_junzhi, gujia_junzhi);}else{suijishu = rand() % 100 + 1;//产生随机数[1,100]printf("\n\n随机数 = %d, ", suijishu);if((suijishu < 66) && (i < 18)){//下跌10%,补仓10%printf("补仓\n");double bucang_gujia = dangqian_gujia*0.9;//补仓股价int bucang_gupiaoshu = (int)gupiaoshu*0.1;//补仓股票数double bucang_jine = bucang_gujia*bucang_gupiaoshu;//补仓金额dangqian_gujia = bucang_gujia;//当前股价xianjin = xianjin - bucang_jine;//当前本金chiguchengben = chiguchengben + bucang_jine;gupiaoshu = gupiaoshu + bucang_gupiaoshu;//当前股票总数gujia_junzhi = (chiguchengben + 6 + 1)*1.0/gupiaoshu;zongjiazhi = xianjin + gupiaoshu*dangqian_gujia;printf("第 %d 次操作前 : 补仓股价=%.2lf, 补仓股票数=%d, 补仓金额=%.2lf\n", i, bucang_gujia, bucang_gupiaoshu, bucang_jine);printf("第 %d 次操作后 : 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, gupiaoshu, gujia_junzhi, dangqian_gujia);printf("第 %d 次操作后 : 总价值=%.2lf, 持股成本=%.2lf, 剩余现金=%.2lf \n", i, zongjiazhi, chiguchengben, xianjin);if(zongjiazhi-benjin > YUQI_YINGLI){printf("\n盈利达到预期,盈利额为%.2lf, 全仓抛售!\n", (zongjiazhi-benjin));break;}}else{//上升20%,抛仓10%printf("抛仓\n");double pocang_gujia = dangqian_gujia*1.2;//抛仓股价int pocang_gupiaoshu = (int)gupiaoshu*0.1;//抛仓股票数double pocang_jine = pocang_gujia*pocang_gupiaoshu;//抛仓金额dangqian_gujia = pocang_gujia;//当前股价xianjin = xianjin + pocang_jine;//当前现金chiguchengben = chiguchengben - pocang_jine;if(chiguchengben < 0){printf("!!!!!!持股成本已最低!!!!!!\n");break;}gupiaoshu = gupiaoshu - pocang_gupiaoshu;//当前股票总数gujia_junzhi = (chiguchengben + 6 + 1)*1.0/gupiaoshu;zongjiazhi = xianjin + gupiaoshu*dangqian_gujia;printf("第 %d 次操作前 : 抛仓股价=%.2lf, 抛仓股票数=%d, 抛仓金额=%.2lf\n", i, pocang_gujia, pocang_gupiaoshu, pocang_jine);printf("第 %d 次操作后 : 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, gupiaoshu, gujia_junzhi, dangqian_gujia);printf("第 %d 次操作后 : 总价值=%.2lf, 持股成本=%.2lf, 剩余现金=%.2lf \n", i, zongjiazhi, chiguchengben, xianjin);if(zongjiazhi-benjin > YUQI_YINGLI){printf("\n盈利达到预期,盈利额为%.2lf, 全仓抛售!\n", (zongjiazhi-benjin));break;}}}}return 0;
}
测试结果:
第 1 次建仓 : 总价值=10000.00, 剩余现金=5000.00, 持股成本=5000.00, 持有股票数=500, 持有股票均价=10.00, 当前股价=10.00 随机数 = 88, 抛仓
第 2 次操作前 : 抛仓股价=12.00, 抛仓股票数=50, 抛仓金额=600.00
第 2 次操作后 : 持有股票数=450, 持有股票均价=9.79, 当前股价=12.00
第 2 次操作后 : 总价值=11000.00, 持股成本=4400.00, 剩余现金=5600.00 随机数 = 16, 补仓
第 3 次操作前 : 补仓股价=10.80, 补仓股票数=45, 补仓金额=486.00
第 3 次操作后 : 持有股票数=495, 持有股票均价=9.88, 当前股价=10.80
第 3 次操作后 : 总价值=10460.00, 持股成本=4886.00, 剩余现金=5114.00 随机数 = 26, 补仓
第 4 次操作前 : 补仓股价=9.72, 补仓股票数=49, 补仓金额=476.28
第 4 次操作后 : 持有股票数=544, 持有股票均价=9.87, 当前股价=9.72
第 4 次操作后 : 总价值=9925.40, 持股成本=5362.28, 剩余现金=4637.72 随机数 = 27, 补仓
第 5 次操作前 : 补仓股价=8.75, 补仓股票数=54, 补仓金额=472.39
第 5 次操作后 : 持有股票数=598, 持有股票均价=9.77, 当前股价=8.75
第 5 次操作后 : 总价值=9396.63, 持股成本=5834.67, 剩余现金=4165.33 随机数 = 14, 补仓
第 6 次操作前 : 补仓股价=7.87, 补仓股票数=59, 补仓金额=464.52
第 6 次操作后 : 持有股票数=657, 持有股票均价=9.60, 当前股价=7.87
第 6 次操作后 : 总价值=8873.50, 持股成本=6299.19, 剩余现金=3700.81 随机数 = 85, 抛仓
第 7 次操作前 : 抛仓股价=9.45, 抛仓股票数=65, 抛仓金额=614.11
第 7 次操作后 : 持有股票数=592, 持有股票均价=9.62, 当前股价=9.45
第 7 次操作后 : 总价值=9908.04, 持股成本=5685.08, 剩余现金=4314.92 随机数 = 93, 抛仓
第 8 次操作前 : 抛仓股价=11.34, 抛仓股票数=59, 抛仓金额=668.91
第 8 次操作后 : 持有股票数=533, 持有股票均价=9.42, 当前股价=11.34
第 8 次操作后 : 总价值=11026.66, 持股成本=5016.17, 剩余现金=4983.83 随机数 = 11, 补仓
第 9 次操作前 : 补仓股价=10.20, 补仓股票数=53, 补仓金额=540.79
第 9 次操作后 : 持有股票数=586, 持有股票均价=9.49, 当前股价=10.20
第 9 次操作后 : 总价值=10422.38, 持股成本=5556.97, 剩余现金=4443.03 随机数 = 84, 抛仓
第 10 次操作前 : 抛仓股价=12.24, 抛仓股票数=58, 抛仓金额=710.18
第 10 次操作后 : 持有股票数=528, 持有股票均价=9.19, 当前股价=12.24
第 10 次操作后 : 总价值=11618.25, 持股成本=4846.79, 剩余现金=5153.21 随机数 = 100, 抛仓
第 11 次操作前 : 抛仓股价=14.69, 抛仓股票数=52, 抛仓金额=764.05
第 11 次操作后 : 持有股票数=476, 持有股票均价=8.59, 当前股价=14.69
第 11 次操作后 : 总价值=12911.26, 持股成本=4082.74, 剩余现金=5917.26 随机数 = 15, 补仓
第 12 次操作前 : 补仓股价=13.22, 补仓股票数=47, 补仓金额=621.53
第 12 次操作后 : 持有股票数=523, 持有股票均价=9.01, 当前股价=13.22
第 12 次操作后 : 总价值=12211.86, 持股成本=4704.27, 剩余现金=5295.73 随机数 = 23, 补仓
第 13 次操作前 : 补仓股价=11.90, 补仓股票数=52, 补仓金额=618.88
第 13 次操作后 : 持有股票数=575, 持有股票均价=9.27, 当前股价=11.90
第 13 次操作后 : 总价值=11520.25, 持股成本=5323.15, 剩余现金=4676.85 随机数 = 25, 补仓
第 14 次操作前 : 补仓股价=10.71, 补仓股票数=57, 补仓金额=610.55
第 14 次操作后 : 持有股票数=632, 持有股票均价=9.40, 当前股价=10.71
第 14 次操作后 : 总价值=10835.91, 持股成本=5933.70, 剩余现金=4066.30 随机数 = 89, 抛仓
第 15 次操作前 : 抛仓股价=12.85, 抛仓股票数=63, 抛仓金额=809.78
第 15 次操作后 : 持有股票数=569, 持有股票均价=9.02, 当前股价=12.85
第 15 次操作后 : 总价值=12189.83, 持股成本=5123.92, 剩余现金=4876.08 随机数 = 92, 抛仓
第 16 次操作前 : 抛仓股价=15.42, 抛仓股票数=56, 抛仓金额=863.77
第 16 次操作后 : 持有股票数=513, 持有股票均价=8.32, 当前股价=15.42
第 16 次操作后 : 总价值=13652.58, 持股成本=4260.15, 剩余现金=5739.85 盈利达到预期,盈利额为3652.58, 全仓抛售!
结论:
达到第16轮操作时,达到盈利目标,全仓抛售,盈利出局。
编程(股价下降与上升概率1:1):
#include <string.h>
#include <stdio.h>
#include <time.h>#define YUQI_YINGLI 3000.00int main(){double zongjiazhi = 10000.0;//总价值 = 现金+股值double benjin = 10000.0;//本金1万double xianjin = 10000.0;//现金1万double chiguchengben = 0.0;//持股成本double gujia_junzhi = 10.0;//初始股价均值10元1股double dangqian_gujia = 10.0;//当前股价int gupiaoshu = 0;//股票数int suijishu = 0;//假设下降概率与上升概率比为2:1srand((unsigned int)time(NULL));int i = 1;for(i = 1; i <= 20; i++){if(1 == i){//首次建仓chiguchengben = xianjin/2;//建仓使用一半本金xianjin = xianjin - chiguchengben;gupiaoshu = chiguchengben/gujia_junzhi;gujia_junzhi = gujia_junzhi*1.0;printf("\n--------------------------------------------------------------------------------------------------------------------------\n");printf("\n第 %d 次建仓 : 总价值=%.2lf, 剩余现金=%.2lf, 持股成本=%.2lf, 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, zongjiazhi, xianjin, chiguchengben, gupiaoshu, gujia_junzhi, gujia_junzhi);}else{suijishu = rand() % 100 + 1;//产生随机数[1,100]printf("\n\n随机数 = %d, ", suijishu);if((suijishu < 50) && (i < 18)){//下跌10%,补仓10%printf("补仓\n");double bucang_gujia = dangqian_gujia*0.9;//补仓股价int bucang_gupiaoshu = (int)gupiaoshu*0.1;//补仓股票数double bucang_jine = bucang_gujia*bucang_gupiaoshu;//补仓金额dangqian_gujia = bucang_gujia;//当前股价xianjin = xianjin - bucang_jine;//当前本金chiguchengben = chiguchengben + bucang_jine;gupiaoshu = gupiaoshu + bucang_gupiaoshu;//当前股票总数gujia_junzhi = (chiguchengben + 6 + 1)*1.0/gupiaoshu;zongjiazhi = xianjin + gupiaoshu*dangqian_gujia;printf("第 %d 次操作前 : 补仓股价=%.2lf, 补仓股票数=%d, 补仓金额=%.2lf\n", i, bucang_gujia, bucang_gupiaoshu, bucang_jine);printf("第 %d 次操作后 : 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, gupiaoshu, gujia_junzhi, dangqian_gujia);printf("第 %d 次操作后 : 总价值=%.2lf, 持股成本=%.2lf, 剩余现金=%.2lf \n", i, zongjiazhi, chiguchengben, xianjin);if(zongjiazhi-benjin > YUQI_YINGLI){printf("\n盈利达到预期,盈利额为%.2lf, 全仓抛售!\n", (zongjiazhi-benjin));break;}}else{//上升20%,抛仓10%printf("抛仓\n");double pocang_gujia = dangqian_gujia*1.2;//抛仓股价int pocang_gupiaoshu = (int)gupiaoshu*0.1;//抛仓股票数double pocang_jine = pocang_gujia*pocang_gupiaoshu;//抛仓金额dangqian_gujia = pocang_gujia;//当前股价xianjin = xianjin + pocang_jine;//当前现金chiguchengben = chiguchengben - pocang_jine;if(chiguchengben < 0){printf("!!!!!!持股成本已最低!!!!!!\n");break;}gupiaoshu = gupiaoshu - pocang_gupiaoshu;//当前股票总数gujia_junzhi = (chiguchengben + 6 + 1)*1.0/gupiaoshu;zongjiazhi = xianjin + gupiaoshu*dangqian_gujia;printf("第 %d 次操作前 : 抛仓股价=%.2lf, 抛仓股票数=%d, 抛仓金额=%.2lf\n", i, pocang_gujia, pocang_gupiaoshu, pocang_jine);printf("第 %d 次操作后 : 持有股票数=%d, 持有股票均价=%.2lf, 当前股价=%.2lf \n", i, gupiaoshu, gujia_junzhi, dangqian_gujia);printf("第 %d 次操作后 : 总价值=%.2lf, 持股成本=%.2lf, 剩余现金=%.2lf \n", i, zongjiazhi, chiguchengben, xianjin);if(zongjiazhi-benjin > YUQI_YINGLI){printf("\n盈利达到预期,盈利额为%.2lf, 全仓抛售!\n", (zongjiazhi-benjin));break;}}}}return 0;
}
测试结果:
第 1 次建仓 : 总价值=10000.00, 剩余现金=5000.00, 持股成本=5000.00, 持有股票数=500, 持有股票均价=10.00, 当前股价=10.00 随机数 = 73, 抛仓
第 2 次操作前 : 抛仓股价=12.00, 抛仓股票数=50, 抛仓金额=600.00
第 2 次操作后 : 持有股票数=450, 持有股票均价=9.79, 当前股价=12.00
第 2 次操作后 : 总价值=11000.00, 持股成本=4400.00, 剩余现金=5600.00 随机数 = 7, 补仓
第 3 次操作前 : 补仓股价=10.80, 补仓股票数=45, 补仓金额=486.00
第 3 次操作后 : 持有股票数=495, 持有股票均价=9.88, 当前股价=10.80
第 3 次操作后 : 总价值=10460.00, 持股成本=4886.00, 剩余现金=5114.00 随机数 = 33, 补仓
第 4 次操作前 : 补仓股价=9.72, 补仓股票数=49, 补仓金额=476.28
第 4 次操作后 : 持有股票数=544, 持有股票均价=9.87, 当前股价=9.72
第 4 次操作后 : 总价值=9925.40, 持股成本=5362.28, 剩余现金=4637.72 随机数 = 45, 补仓
第 5 次操作前 : 补仓股价=8.75, 补仓股票数=54, 补仓金额=472.39
第 5 次操作后 : 持有股票数=598, 持有股票均价=9.77, 当前股价=8.75
第 5 次操作后 : 总价值=9396.63, 持股成本=5834.67, 剩余现金=4165.33 随机数 = 27, 补仓
第 6 次操作前 : 补仓股价=7.87, 补仓股票数=59, 补仓金额=464.52
第 6 次操作后 : 持有股票数=657, 持有股票均价=9.60, 当前股价=7.87
第 6 次操作后 : 总价值=8873.50, 持股成本=6299.19, 剩余现金=3700.81 随机数 = 62, 抛仓
第 7 次操作前 : 抛仓股价=9.45, 抛仓股票数=65, 抛仓金额=614.11
第 7 次操作后 : 持有股票数=592, 持有股票均价=9.62, 当前股价=9.45
第 7 次操作后 : 总价值=9908.04, 持股成本=5685.08, 剩余现金=4314.92 随机数 = 28, 补仓
第 8 次操作前 : 补仓股价=8.50, 补仓股票数=59, 补仓金额=501.68
第 8 次操作后 : 持有股票数=651, 持有股票均价=9.51, 当前股价=8.50
第 8 次操作后 : 总价值=9348.73, 持股成本=6186.76, 剩余现金=3813.24 随机数 = 83, 抛仓
第 9 次操作前 : 抛仓股价=10.20, 抛仓股票数=65, 抛仓金额=663.24
第 9 次操作后 : 持有股票数=586, 持有股票均价=9.44, 当前股价=10.20
第 9 次操作后 : 总价值=10455.83, 持股成本=5523.52, 剩余现金=4476.48 随机数 = 82, 抛仓
第 10 次操作前 : 抛仓股价=12.24, 抛仓股票数=58, 抛仓金额=710.18
第 10 次操作后 : 持有股票数=528, 持有股票均价=9.13, 当前股价=12.24
第 10 次操作后 : 总价值=11651.70, 持股成本=4813.35, 剩余现金=5186.65 随机数 = 50, 抛仓
第 11 次操作前 : 抛仓股价=14.69, 抛仓股票数=52, 抛仓金额=764.05
第 11 次操作后 : 持有股票数=476, 持有股票均价=8.52, 当前股价=14.69
第 11 次操作后 : 总价值=12944.70, 持股成本=4049.30, 剩余现金=5950.70 随机数 = 41, 补仓
第 12 次操作前 : 补仓股价=13.22, 补仓股票数=47, 补仓金额=621.53
第 12 次操作后 : 持有股票数=523, 持有股票均价=8.94, 当前股价=13.22
第 12 次操作后 : 总价值=12245.30, 持股成本=4670.82, 剩余现金=5329.18 随机数 = 75, 抛仓
第 13 次操作前 : 抛仓股价=15.87, 抛仓股票数=52, 抛仓金额=825.17
第 13 次操作后 : 持有股票数=471, 持有股票均价=8.18, 当前股价=15.87
第 13 次操作后 : 总价值=13628.53, 持股成本=3845.65, 剩余现金=6154.35 盈利达到预期,盈利额为3628.53, 全仓抛售!
结论:
结果和上轮测试结果大致相同,但大量测试时会发现,此次收敛速度,也即操作轮数要小于上轮测试。