python 读取csv 简单策略

#!/usr/bin/env python
# coding: utf-8
import datetime

import csv
import sys
#from datetime import datetime
#from datetime import timedelta

global stocks
global k_ri
global list_code
global conn_list, conn_k

quotes = []


def read_file(name, quotes):
    try:
        csvfile = file(name, 'rb')
        reader = csv.reader(csvfile)

        for line in reader:
            try:
                # 忽略第一行
                if reader.line_num == 1:
                    continue
                # list_code.append(line[0])
                # print(' said: ', '')
                i = 0
                #print line[i], line[i + 1], line[i + 2], line[i + 3], line[i + 4]
                #deal_data(line[i], line[i + 1], line[i + 2], line[i + 3], line[i + 4])
                quotes.append((line[i], line[i + 1], line[i + 2], line[i + 3], line[i + 4]))
            except ValueError:
                pass
        #print "name --", name, locals()
        # csvfile.close()
    except IOError as err:  # 使用as将异常对象,并将其赋值给一个标识符
        print('File Error:' + str(err))  # ‘+’用于字符串直接的连接

    finally:
        if 'csvfile' in locals():
            csvfile.close()
            print "close"


def judge_rise(price):
    #print price
    if (0 == price):
        return 0.00
    price *= 1.1
    price += 0.005
    return float('{:.2f}'.format(price))

def plot_buy3(open, high, low, close, close_old, date):
    global g_flg_rise, g_high_max, g_flg_buy, g_days, g_buy

    if (g_high_max <= high):
        g_high_max = high


    if (0.7 > close / g_high_max):

        g_buy = open + 0.1
        g_flg_rise = 0
        print "buy", date
        return 1


    return 0

def plot_buy2(open, high, low, close, close_old, date):
    global g_flg_rise, g_high_max, g_flg_buy, g_days, g_buy

    rise = judge_rise(close_old)
    if (close == rise):
        g_flg_rise += 1
        g_high_max = high
    else:
        if (2 < g_flg_rise):
            if (g_high_max <= high):
                g_high_max = high
            g_buy = open + 0.1
            g_flg_rise = 0
            #print "buy"
            return 1
        else:
            g_flg_rise = 0

    return 0


def plot_buy(open, high, low, close, close_old, date):
    global g_flg_rise, g_high_max, g_flg_buy, g_days, g_buy

    if (0 == g_flg_buy):
        rise = judge_rise(close_old)
        if (close == rise):
            g_flg_rise += 1
            g_high_max = high
        else:
            if (2 < g_flg_rise):
                if (g_high_max <= high):
                    g_high_max = high
                    #print "read buy"
                else:
                    g_flg_buy = 1
                    g_days = 10
            else:
                g_flg_rise = 0
        #print g_flg_buy, g_days
    else:
        if (0 >= g_days):
            #print "g_days die"
            g_flg_rise, g_flg_buy, = 0, 0
        if (g_high_max < high):
            g_buy = g_high_max
            g_flg_rise, g_flg_buy, = 0, 0
            #print "buy"
            return 1
        g_days -= 1
        #print g_flg_buy, g_days,"g_buy"

    return 0


def plot_sale(open, high, low, close, close_old, date):
    global g_high_max, g_cnt_win, g_cnt_lost, g_buy
    global g_total

    if (high == low):
        return 1

    if (g_high_max <= high):
        g_high_max = high
    if (0.9 >= close / g_buy):
        total_old = g_total
        g_total = total_old * close / g_buy
        print g_buy, g_high_max, close, total_old, g_total, date, "lost----------------------------------------------------------"
        g_cnt_lost += 1
        return 2
    else:
        gain = g_buy / close
        if (1.3 > gain):
            line = 0.8
        elif (1.2 > gain):
            line = 0.85
        else:
            line = 0.9
        if (line >= close / g_high_max or 1.05 > gain or 2 > close - g_buy):
            total_old = g_total
            g_total = total_old * close / g_buy
            print g_buy, g_high_max, close, total_old, g_total, date, "win ++++++++++++++++++++++++++++++++++++++++++++++++++++++"
            g_cnt_win += 1
            return 2

    return 1

def plot_sale2(open, high, low, close, close_old, date):
    global g_high_max, g_cnt_win, g_cnt_lost, g_buy
    global g_total

    if (1.2 < high / g_buy):
        total_old = g_total
        g_total = total_old * close /g_buy
        print g_buy, g_high_max, close, total_old, g_total, date, "win ++++++++++++++++++++++++++++++++++++++++++++++++++++++"
        g_cnt_win += 1
        return 2

    return 1
dict_g_buy_sale_plot = {"plot_buy":plot_buy, "plot_buy2":plot_buy2, "plot_sale":plot_sale, "plot_buy3":plot_buy3, "plot_sale2":plot_sale2}


def calculate_g_buy_sale(open, high, low, close, close_old, date, symbol):
    return dict_g_buy_sale_plot.get(symbol)(open, high, low, close, close_old, date)
    
global g_flg_rise, g_high_max, g_flg_buy, g_days, g_cnt_win, g_cnt_lost, g_buy
global g_total
def plot(quotes):
    global g_flg_rise, g_high_max, g_flg_buy, g_days, g_cnt_win, g_cnt_lost, g_buy
    g_flg_rise, g_high_max, g_flg_buy, g_days, g_cnt_win, g_cnt_lost, g_buy= 0, 0, 0, 0, 0, 0, 0
    global g_total
    g_total = 100
    date_old, open_old, high_old, low_old, close_old = 0, 0, 0, 0, 0
    flg_buy = 0

    for q in quotes:
        date, open, high, low, close = q[0], float(q[1]), float(q[2]), float(q[3]), float(q[4])
        #print flg_buy
        if (0 == flg_buy):
            flg_buy = calculate_g_buy_sale(open, high, low, close, close_old, date, "plot_buy3")
        elif (1 == flg_buy):
            flg_buy = calculate_g_buy_sale(open, high, low, close, close_old, date, "plot_sale2")
        if (2 == flg_buy):
            g_flg_rise, g_flg_buy, = 0, 0
            flg_buy = 0
        date_old, open_old, high_old, low_old, close_old = date, open, high, low, close

    print g_total, g_cnt_win, g_cnt_lost

    return g_total


def plot2(quotes):
    print "222"


calculateDict = {"plot":plot, "plot2":plot2}


def calculate(x, symbol):
    calculateDict.get(symbol)(x)

def main(argv=None):
    read_file('csv_test600149.csv', quotes)
    if (0 == len(quotes)):
        return
    calculate(quotes, "plot")


if __name__ == '__main__':
    sys.exit(main())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值