-
Notifications
You must be signed in to change notification settings - Fork 0
/
MARKET_VISUALIZER.py
155 lines (128 loc) · 5.11 KB
/
MARKET_VISUALIZER.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 21 22:36:56 2020
@author: alexx
"""
import numpy as np
import random as rm
import time, threading
#starile posibile in piata forex
states = ["consolidation", "uptrend", "downtrend"]
#definim variabile cu numele starilor pentru a evita typos
#evitam accesarea vectorului de fiecare data
consolidation = "consolidation"
uptrend = "uptrend"
downtrend = "downtrend"
#numele tranzitiilor si secventele in care pot aparea
tName = [["CC", "CD", "CU"], ["DC", "DD", "DU"], ["UC", "UD", "UU"]]
#matricea de tranzitii
tMatrix = [
[0.344006453704011,0.5266567943788216,0.12933675191716737],
[0.12933675191716737,0.344006453704011,0.5266567943788216],
[0.344006453704011, 0.5266567943788216, 0.12933675191716737]
]
consolidation = "consolidation"
uptrend = "uptrend"
downtrend = "downtrend"
def verifyTMatrix():
if(sum(tMatrix[0]) + sum(tMatrix[1]) + sum(tMatrix[2])) != 3:
print ("Transition Matrix not does not have correct data as an input!")
return 0
else:
print ("Transition Matrix has a corect data input format")
return 1
def forecast_State(timeframe, curr_state):
print("The current state of the system is: " + curr_state)
state_list = [curr_state]
ti = 0
probability = 1
while ti != timeframe:
if curr_state == "consolidation":
change_state = np.random.choice(tName[0], replace = True, p = tMatrix[0])
#change hard cooded tName state
if change_state == "CC":
probability = probability * tMatrix[0][0]
state_list.append(curr_state)
pass
elif change_state == "CD":
probability = probability * tMatrix[0][1]
curr_state = "downtrend"
state_list.append(curr_state)
pass
elif change_state == "CU":
probability = probability * tMatrix[0][2]
curr_state = "uptrend"
state_list.append(curr_state)
elif curr_state == "downtrend":
change_state = np.random.choice(tName[1], replace = True, p = tMatrix[1])
if change_state == "DC":
probability = probability * tMatrix[1][0]
curr_state = "consolidation"
state_list.append(curr_state)
pass
elif change_state == "DD":
probability = probability * tMatrix[1][1]
curr_state = "downtrend"
state_list.append(curr_state)
pass
elif change_state == "DU":
probability = probability * tMatrix[1][2]
curr_state = "uptrend"
state_list.append(curr_state)
elif curr_state == "uptrend":
chenge_state = np.random.choice(tName[2], replace = True, p = tMatrix[2])
if change_state == "UC":
probability = probability * tMatrix[2][0]
curr_state = "consolidation"
state_list.append(curr_state)
pass
elif change_state == "UD":
probability = probability * tMatrix[2][1]
curr_state = "downtrend"
state_list.append(curr_state)
pass
elif change_state == "UU":
probability = probability * tMatrix[2][2]
curr_state = "uptrend"
state_list.append(curr_state)
ti += 1
print("Possible states: " + str(state_list))
print("End state after "+ str(timeframe) + " days: " + curr_state)
print("Probability of the possible sequence of states: " + str(probability))
return state_list
#calculeaza probabilitatea pentru fiecare ending state
#pentru un numar de "tries" ori
def runTestEndingState(tries, start_state):
trial_list = []
p_consolidation = 0
p_uptrend = 0
p_downtrend = 0
curr_final_state = []
for it in range(1, tries):
trial_list.append(forecast_State(2, start_state))
print(forecast_State(2, start_state))
for itp in trial_list:
curr_final_state = itp.pop()
if curr_final_state == consolidation:
p_consolidation += 1
elif curr_final_state == uptrend:
p_uptrend += 1
elif curr_final_state == downtrend:
p_downtrend += 1
perc_consolidation = p_consolidation/tries * 100
perc_uptrend = p_uptrend/tries * 100
perc_downtrend = p_downtrend/tries * 100
print("The probability of the following states to appear as an end state is: ")
print("Consolidation: " + str(perc_consolidation) + "%")
print("Uptrend: " + str(perc_uptrend) + "%")
print("Downtrend: " + str(perc_downtrend) + "%")
def main():
print("The state of the tMatrix is the following: ")
verifyTMatrix()
start_state = consolidation
forecast_State(4, start_state)
tries = 1000
print("When starting from the " + start_state + " state is: ")
runTestEndingState(tries, start_state)
if __name__ == "__main__":
main()