/
buildpairsdictionarywithcriteriafromdirectoryofpulledfiles_tc.py
154 lines (134 loc) · 8.13 KB
/
buildpairsdictionarywithcriteriafromdirectoryofpulledfiles_tc.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
# -*- coding: utf-8 -*-
"""
Created on Sun Dec 21 11:35:00 2014
@author: jmalinchak
"""
class build:
def __init__(self,*multi_values,
rootlocalforfilespulled='downloads\\2014-12-21\\11\\30',
maxvalueatrisk = 10.0, # maximum loss 0.2 for $200
#onlyoutofthemoney = 1, # onlyoutofthemoney 1 for yes, 0 for no
maxsellearlyprice = 20.0, # MaxSellEarlyPrice
minbuylaterprice = 0.0, # MinBuyLaterPrice
minspreadpercent = 0.5, # MinimumSpreadPercentage
maxspreadpercent = 1.0, # MinimumSpreadPercentage
earningsdatestring='', #EarlierExpirationIsBefore and LaterExpirationIsAfter
directorylocaloutput='output',
showresults=0):
print('----------------------------------------')
print('initialized class buildpairsdictionarywithcriteriafromdirectoryofpulledfiles')
print('----------------------------------------')
self.execute_results(
rootlocalforfilespulled,
#onlyoutofthemoney, # onlyoutofthemoney 1 for yes, 0 for no
maxvalueatrisk,
maxsellearlyprice, # MaxSellEarlyPrice
minbuylaterprice, # MinBuyLaterPrice
minspreadpercent, # MinimumSpreadPercentage
maxspreadpercent, # MinimumSpreadPercentage
earningsdatestring,
directorylocaloutput,showresults)
def backupinit(self,
rootlocalforfilespulled='downloads\\2014-12-21\\11\\30',
maxvalueatrisk = 10.0, # maximum loss 0.2 for $200
#onlyoutofthemoney = 1, # onlyoutofthemoney 1 for yes, 0 for no
maxsellearlyprice = 20.0, # MaxSellEarlyPrice
minbuylaterprice = 0.0, # MinBuyLaterPrice
minspreadpercent = 0.5, # MinimumSpreadPercentage
maxspreadpercent = 1.0, # MinimumSpreadPercentage
earningsdatestring='', #EarlierExpirationIsBefore and LaterExpirationIsAfter
directorylocaloutput='output',
showresults=0):
print('initialized class buildpairsdictionarywithcriteriafromdirectoryofpulledfiles')
self.execute_results(
rootlocalforfilespulled,
#onlyoutofthemoney, # onlyoutofthemoney 1 for yes, 0 for no
maxvalueatrisk,
maxsellearlyprice, # MaxSellEarlyPrice
minbuylaterprice, # MinBuyLaterPrice
minspreadpercent, # MinimumSpreadPercentage
maxspreadpercent, # MinimumSpreadPercentage
earningsdatestring,
directorylocaloutput,showresults)
#TestValueAndPairTuple
def set_DictionaryOfFilteredCalendarPairs(self,DictionaryOfFilteredCalendarPairs):
self._DictionaryOfFilteredCalendarPairs = DictionaryOfFilteredCalendarPairs
def get_DictionaryOfFilteredCalendarPairs(self):
return self._DictionaryOfFilteredCalendarPairs
DictionaryOfFilteredCalendarPairs = property(get_DictionaryOfFilteredCalendarPairs, set_DictionaryOfFilteredCalendarPairs)
def set_DictionaryOfAllCalendarPairs(self,DictionaryOfAllCalendarPairs):
self._DictionaryOfAllCalendarPairs = DictionaryOfAllCalendarPairs
def get_DictionaryOfAllCalendarPairs(self):
return self._DictionaryOfAllCalendarPairs
DictionaryOfAllCalendarPairs = property(get_DictionaryOfAllCalendarPairs, set_DictionaryOfAllCalendarPairs)
def execute_results(self,
rootlocalforfilespulled,
#onlyoutofthemoney, # onlyoutofthemoney 1 for yes, 0 for no
maxvalueatrisk,
maxsellearlyprice, # MaxSellEarlyPrice
minbuylaterprice, # MinBuyLaterPrice
minspreadpercent, # MinimumSpreadPercentage
maxspreadpercent, # MinimumSpreadPercentage
earningsdatestring,
directorylocaloutput,
showresults):
# import mytools
downloaddirectorylocal = rootlocalforfilespulled #mytools.mystrings.appendnormaldateddirectorybasedoncurrenttime15(rootlocalforfilespulled)
print('downloaddirectorylocal set to ' + downloaddirectorylocal + ' within class buildpairsdictionarywithcriteriafromdirectoryofpulledfiles.py')
import readintomemorybuilddictionaryofpairsdictionariesbysymbol
o = readintomemorybuilddictionaryofpairsdictionariesbysymbol.read(downloaddirectorylocal,showresults)
dDictionaryOfPairsDictionariesBySymbol = o.DictionaryOfPairsDictionariesBySymbol
# dTestValueAndPairTupleSortableByPairSpreadPct = {}
# dPairsValid = {}
dCalendarPairs = {}
dQualifiedPairsBasedOnAllCriteriaProvided = {}
bContinue = 1
for kSymbol,vPairsDictionary in dDictionaryOfPairsDictionariesBySymbol.items():
dPairs = vPairsDictionary
#if showresults == 1:
print('building valid pairs... ' + kSymbol)
bContinue == 1
for k,ls in dPairs.items():
earlier = ls[0]
later = ls[1]
bContinue == 1
#-- Make sure EarlierExpirationIsBefore and LaterExpirationIsAfter
if len(earningsdatestring) > 0:
bContinue == 0
from datetime import datetime
earningsdate = datetime.strptime(earningsdatestring, '%Y-%m-%d')
print('earningsdate= ' + str(earningsdate))
if earlier.expirationdate <= earningsdate and later.expirationdate > earningsdate:
bContinue == 1
if bContinue == 1:
dCalendarPairs[len(dCalendarPairs)] = ls
#-- Make sure onlyoutofthemoney is respected
# if onlyoutofthemoney == 1:
# bContinue == 0
if (earlier.optiontype == 'C'
and float(earlier.stockprice) < float(earlier.strike))
or
(earlier.optiontype == 'P'
and float(earlier.stockprice) > float(earlier.strike)):
#print('passed',earlier.optiontype ,earlier.stockprice,earlier.strike)
# bContinue == 1
# print( bContinue,earlier.optiontype ,earlier.stockprice,earlier.strike)
# if bContinue == 1:
#-- Set your MaxSellEarlyPrice
if earlier.bid.replace('.','',1).isdigit() and float(earlier.bid) <= maxsellearlyprice:
#-- Set your MinBuyLaterPrice
if later.ask.replace('.','',1).isdigit() and float(later.ask) > minbuylaterprice:
#-- Make sure MinimumSpreadPercentage is greater than
if float(earlier.bid)/float(later.ask) > minspreadpercent:
#-- Make sure MaximumSpreadPercentage is less than
if float(earlier.bid)/float(later.ask) <= maxspreadpercent:
if float(maxvalueatrisk) >= -float(earlier.bid)+float(later.ask):
dQualifiedPairsBasedOnAllCriteriaProvided[len(dQualifiedPairsBasedOnAllCriteriaProvided)] = ls
#
self.DictionaryOfAllCalendarPairs = dCalendarPairs
self.DictionaryOfFilteredCalendarPairs = dQualifiedPairsBasedOnAllCriteriaProvided
# for k1,v1 in dDictionaryOfAllCalendarPairs.items():
# #print(k1)
# earlier = v1[1][0]
# later = v1[1][1]
# print(float(earlier.bid)/float(later.ask))