第一篇文章,就粘一份以前写的监控期权价格的代码吧。

这段代码写了有一段时间了,主要是我上班比较忙,但是需要按照我的简单的策略来监控期权价格,达到我的预期后给我做提醒用的。策略其实很简单,就是看涨期权和看跌期权价格一样的时候提醒我。比如当前期权价格是2800,我会监控3000的看涨期权和2600的看跌价格是否一致,如果一样软件就会提醒我,当然完全一样也是小概率事件,所以我设了阈值,两份期权的价格之差的绝对值如果小于22就提醒。不多说了,贴代码。注:这个策略最后实践是失败的,用这个策略交易了赔钱了我可不负责啊。。。。。。

# -*- coding: UTF-8 -*-
#Author:Avalon
#Time:20190822
import urllib.request
import re
import sys
#from setting import params
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()

                #50etf实时价格,获取月份列表
                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 = '1912'
        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


        #获取当前50etf价值
        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=20)
        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)

    #month是合约月份:2001,price_limit是合约之差的阈值
    state = Qiquan_Jc(month,price_limit)
    state.process()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值