-
Notifications
You must be signed in to change notification settings - Fork 0
/
tradesystem3.py
93 lines (69 loc) · 2.97 KB
/
tradesystem3.py
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#Author: QiZhenHua 20190721
import Investment
market=Investment.Marketfund("000962")
market.readfund()
rateave=(max(market.NAVlist)+min(market.NAVlist))/2
ratescope=max(market.NAVlist)/rateave-1
ratesellshort=ratescope*0.2
rateselllong=ratescope*0.6
ratebuy=ratescope*0.05
ratepulldown=ratescope*0.4
print("ratescope: %f, ratesellshort: %f, rateselllong: %f, ratebuy: %f, ratepulldown: %f "\
%(ratescope,ratesellshort,rateselllong,ratebuy,ratepulldown))
ratesell = 0.01
ratebuy = -0.007
ratepulldown = -0.1
datestart="2017-05-01"
market.splitdata(datestart)
investunit=100.0 # Minimum share unit
listprice=market.NAVlist[:1]
listinvest=[investunit]
moneyinbank=-sum(listinvest)*listprice[0]
bonus=0.0
status="Do nothing!"
current=1
pricebase=market.tableNAV[market.Datelist[current]]
while current<len(market.Datelist):
status=""
today=market.Datelist[current]
pricetoday=market.tableNAV[today]
lastday=market.Datelist[current-1]
pricelast=market.tableNAV[lastday]
listrate=list(map(lambda x:pricetoday/x-1,listprice))
print("pricetoday:{},pricelast:{},pricebase:{},moneyinbank:{},bouns:{}".format(\
pricetoday,pricelast,pricebase,round(moneyinbank,2),round(bonus,2)))
print(market.Datelist[current],listprice)
if pricetoday / pricelast - 1 < -0.0: # today worth buying
if len(listprice) < 100 and pricetoday/pricebase-1 <= ratebuy: #control base
listprice.append(pricetoday)
listinvest.append(investunit)
moneyinbank -= investunit * pricetoday
status=status + "-Store!-"
if listprice != []:
for i_rate in enumerate(listrate): #range(len(listratepshort)):
if i_rate[1] <= ratepulldown:
moneyinbank -= pricetoday * listinvest[i_rate[0]]
listinvest[i_rate[0]] = 2 * listinvest[i_rate[0]]
listprice[i_rate[0]] = (pricetoday + listprice[i_rate[0]]) / 2 #just pull down 1/2
status = status + "-pulldown long term price-"
if pricetoday / pricelast - 1 > 0.0: #today worth selling
tempprice = []
tempinvest = []
flag = 1
listrate.reverse()
listprice.reverse()
listinvest.reverse()
for i_rate in enumerate(listrate):
if i_rate[1] >= ratesell and flag:
moneyinbank += pricetoday * listinvest[i_rate[0]]
bonus += listinvest[i_rate[0]] * (pricetoday - listprice[i_rate[0]])
flag = 0
else:
tempprice.append(listprice[i_rate[0]])
tempinvest.append(listinvest[i_rate[0]])
tempprice.reverse()
tempinvest.reverse()
listprice ,listinvest = tempprice , tempinvest
pricebase = pricetoday
current += 1
input()