这段代码写了有一段时间了,主要是我上班比较忙,但是需要按照我的简单的策略来监控期权价格,达到我的预期后给我做提醒用的。策略其实很简单,就是看涨期权和看跌期权价格一样的时候提醒我。比如当前期权价格是2800,我会监控3000的看涨期权和2600的看跌价格是否一致,如果一样软件就会提醒我,当然完全一样也是小概率事件,所以我设了阈值,两份期权的价格之差的绝对值如果小于22就提醒。不多说了,贴代码。注:这个策略最后实践是失败的,用这个策略交易了赔钱了我可不负责啊。。。。。。
import urllib.request
import re
import sys
import subprocess
import os
import datetime
import time
class Qiquan_Jc():
def __init__(self,month,price_limit):
self.month = month
self.price_limit = price_limit
def process(self):
while(1):
try:
print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
starttime = datetime.datetime.now()
n_50etf,yuelist = self.init()
low_month,up_month = self.get_ul(n_50etf,yuelist)
print(n_50etf,low_month,up_month)
self.compare(low_month,up_month)
endtime = datetime.datetime.now()
print('花费时间:', (endtime - starttime).seconds)
time.sleep(22)
except Exception as e:
print('网络异常:',e)
def victory_sing(self):
audio_file = "E:\project_liu\stock_download\starsky.mp3"
os.system(audio_file)
time.sleep(1000000)
def compare(self,low,up):
print('compare')
basepath = 'http://hq.sinajs.cn/list='
lowpath = basepath + self.down_hydata[low]
uppath = basepath + self.up_hydata[up]
temp = self.getdatafrominternet(lowpath)
temp = temp.split('"')
tmp = temp[1].split(',')
down_price = int(float(tmp[3]) * 10000)
temp = self.getdatafrominternet(uppath)
temp = temp.split('"')
tmp = temp[1].split(',')
up_price = int(float(tmp[3]) * 10000)
print(down_price, up_price)
print('\n')
if abs(up_price - down_price) < self.price_limit:
print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
print(low, up)
print(self.down_hydata[low], self.up_hydata[up])
print(down_price,up_price )
print('\n')
self.victory_sing()
'''
if temp.find('404') == -1:
temp = temp.split('"')
tmp = temp[1].split(',')
#down_price = int(tmp[3])*10000
print(tmp)
temp = self.getdatafrominternet(uppath)
if temp.find('404') == -1:
temp = temp.split('"')
tmp = temp[1].split(',')
up_price = int(tmp[3]) * 10000
print(low, up)
print(self.down_hydata[low], self.up_hydata[up])
print(up_price, down_price)
if abs(up_price - down_price) < 50:
print(low, up)
print(self.down_hydata[low], self.up_hydata[up])
print(up_price, down_price)
'''
def init(self):
print('init')
date = self.month
heyue_up_path = 'http://hq.sinajs.cn/list=OP_UP_510050'+date
heyue_down_path = 'http://hq.sinajs.cn/list=OP_DOWN_510050'+date
temp_up = self.getdatafrominternet(heyue_up_path)
temp_down = self.getdatafrominternet(heyue_down_path)
temp_up = temp_up.split('"')
up_flag = temp_up[1].split(',')
del up_flag[-1]
temp_down = temp_down.split('"')
down_flag = temp_down[1].split(',')
del down_flag[-1]
updata = []
downdata = []
self.up_hydata = {}
self.down_hydata = {}
for i in down_flag:
tmp_down_path = 'http://hq.sinajs.cn/list=' + i
temp_down = self.getdatafrominternet(tmp_down_path)
temp_down = temp_down.split('"')
temp_down = temp_down[1].split(',')
temp_down = temp_down[37][-4:]
downdata.append(int(temp_down))
self.down_hydata[int(temp_down)] = i
for i in up_flag:
tmp_up_path = 'http://hq.sinajs.cn/list=' + i
temp_up = self.getdatafrominternet(tmp_up_path)
temp_up = temp_up.split('"')
temp_up = temp_up[1].split(',')
temp_up = temp_up[37][-4:]
updata.append(int(temp_up))
self.up_hydata[int(temp_up)] = i
if len(updata) != len(downdata):
print('数据获取异常')
quit()
else:
pass
n_50etf_path = 'http://hq.sinajs.cn/list=sh510050'
tmp_50 = self.getdatafrominternet(n_50etf_path)
temp50 = tmp_50.split('"')
tmp = temp50[1].split(',')
n_50etf = int(float(tmp[6])*1000)
return n_50etf,updata
def getdatafrominternet(self,path):
stdout = urllib.request.urlopen(path, data=None, timeout=6)
stdoutstr = stdout.read()
stdoutstr = stdoutstr.decode('gbk')
stdoutInfo = str(stdoutstr)
stdout.close()
return stdoutInfo
def get_ul(self,price_50,data_list):
print('get_ul')
n_50etf = price_50
low_data = 0
updata = 0
middata = 0
for i in range(0, len(data_list) - 1):
if n_50etf > data_list[i] and n_50etf <= data_list[i + 1]:
if n_50etf - data_list[i] <= 12:
middata = data_list[i]
elif data_list[i + 1] - n_50etf <= 12:
middata = data_list[i + 1]
if middata == 0:
updata = data_list[i + 1] + 200
low_data = data_list[i] - 200
else:
updata = middata + 50 + 200
low_data = middata - 50 - 200
if updata not in data_list or low_data not in data_list:
updata += 50
low_data -= 50
if updata not in data_list or low_data not in data_list:
print('data error')
quit()
break
return low_data,updata
if __name__ == '__main__':
month = sys.argv[1]
month = str(month)
price_limit = sys.argv[2]
price_limit = int(price_limit)
state = Qiquan_Jc(month,price_limit)
state.process()