def DBuild():
	global remove_obj_list, obj_list, dead
	obj_list = diff(obj_list, remove_obj_list)
	remove_obj_list = []
	if len(obj_list) > 0:
		for i in obj_list:
			dead = i
			remove_obj_list.append(i)
			stock = Stock(i, 24)
			file_locate = "/Users/Mac/Desktop/Stock Research/DataBase_test/" + i + ".csv"
			stock.out_putfile(file_locate)
			dead = 0
	print "Yeah! F**k you finished!"
def DBuild():
	global remove_obj_list, obj_list, month
	if len(obj_list) > 0:
		for i in obj_list:			
			try:
				stock = Stock(i, month)
				file_locate = "/Users/Mac/Desktop/Stock Research/DataBase_test/" + i + ".csv"
				stock.out_putfile(file_locate)
			except AttributeError:
				print "Error >>", i, "can not fetch month = ", month
			else:
				print "Get stock no.", i, "info for", month, "month"
				remove_obj_list.append(i)
	print "Month = ", month, " : Fetching finished!"
	month = month - 12	#
import grs
from grs import TWSENo
from grs import Stock
twse_no = TWSENo()
for i in twse_no.all_stock_no:
	if len(i) <= 4 :
		stock = Stock(i, 12)
		file_locate = "/Users/Mac/Desktop/Stock Research/DataBase2/" + i + ".csv"
		stock.out_putfile(file_locate)
예제 #4
0
from grs import Stock

stock = Stock('2454')  #get the price for Stock number 2618
print stock.moving_average(5)
print stock.moving_average_value(5)
print stock.moving_average_bias_ratio(5, 10)

stock = Stock('2454', 12)

stock.out_putfile('2454.csv')
예제 #5
0
def main_process(stock_number):
    global PIECE
    global sim_day
    global cdate1
    global cdate2
    global cdate3
    global sdate1
    global sdate2
    global sdate3
    cdate1 = datetime.date.today()
    cdate2 = datetime.date.today()
    cdate3 = datetime.date.today()
    sdate1 = '0'
    sdate2 = '0'
    sdate3 = '0'

    stock_wis = Stock(stock_number)
    #// 3. create folder for save csv data
    mkpath="/home/pi/Hades_project/csv_repository"
    mkdir(mkpath)
    get_date = datetime.date.today()
    get_sdate = str(get_date)
    csv_file = "/home/pi/Hades_project/csv_repository/" + stock_number + '_' + get_sdate + '.csv'
    stock_wis.out_putfile(csv_file)
    #// 3.1 create share of stock folder
    mkpath="/home/pi/Hades_project/share_stock"
    mkdir(mkpath)
    #// 3.2 record share of stock file
    filepath = '/home/pi/Hades_project/share_stock/' + stock_number + '.txt'
    isExists = os.path.exists(filepath)

    if not isExists:
        fd = open(filepath, 'w')
        piece_num = '0'
        fd.write(piece_num)
        fd.close
        PIECE = '0'
        print filepath+' create ok!!'
    else:        #print filepath+' folder already exist!!'
        fd = open(filepath, 'r')
        PIECE = fd.read()
        fd.close
        PIECE = PIECE.rstrip('\n')

    #// 4. filter highest, lower, end, start of value and show thos value
    # http://swaywang.blogspot.tw/2012/05/pythoncsv.html
    # http://www.lfhacks.com/tech/python-read-specific-column-csv
    #//---------------------------------
    #// get time function
    #//---------------------------------
    #sdate1 = strftime("%D")
    #ssdate1 = sdate1[0:5]
    #cdate1 = datetime.date.today() + (datetime.timedelta(days=sim_day))
    #cdate1 = datetime.date.today() + (datetime.timedelta(days=-4))
    #cdate2 = cdate1 + (datetime.timedelta(days=-1))
    #cdate3 = cdate1 + (datetime.timedelta(days=-2))

    #//current date,6/20
    check_done = 0
    delta_day = 0
    while(check_done == 0):
        cdate1 = datetime.date.today() + (datetime.timedelta(days=delta_day))
        sdate1 = str(cdate1)
        sdate1 = sdate1[5:10]
        sdate1 = sdate1.replace('-','/')
        res = test_day_avaliable(sdate1, csv_file)
        if(res == 0):
            #print sdate1
            #print "find a right day1!"
            check_done = 1
            #print "---------------"
        else:
            #print "can't find match day1!"
            delta_day = (delta_day - 1)

    #//yesterday,6/19
    check_done = 0
    delta_day = -1
    while(check_done == 0):
        cdate2 = cdate1 + (datetime.timedelta(days=delta_day))
        sdate2 = str(cdate2)
        sdate2 = sdate2[5:10]
        sdate2 = sdate2.replace('-','/')
        res = test_day_avaliable(sdate2, csv_file)
        if(res == 0):
            #print sdate2
            #print "find a right day2!"
            check_done = 1
            #print "---------------"
        else:
            #print "can't find match day2!"
            delta_day = (delta_day - 1)


    #//the day before yesterday,6/18
    check_done = 0
    delta_day = -1
    while(check_done == 0):
        cdate3 = cdate2 + (datetime.timedelta(days=delta_day))
        sdate3 = str(cdate3)
        sdate3 = sdate3[5:10]
        sdate3 = sdate3.replace('-','/')
        res = test_day_avaliable(sdate3, csv_file)
        if(res == 0):
            #print sdate3
            #print "find a right day3!"
            check_done = 1
            #print "---------------"
        else:
            #print "can't find match day3!"
            delta_day = (delta_day - 1)

    #//---------------------------------
    #//find the specific date data
    #//---------------------------------
    #print sdate1
    res1 = gen_target_file(sdate1, csv_file, '/home/pi/Hades_project/csv_repository/target_sdate1_val.txt')
    if(res1 == 0):
    #//day1,current date
    #//     4.1 hishest value
        day1_h = search_s_e_h_l_fun('highest_val', '/home/pi/Hades_project/csv_repository/target_sdate1_val.txt')
    #//     4.2 lower value
        day1_l = search_s_e_h_l_fun('lowest_val', '/home/pi/Hades_project/csv_repository/target_sdate1_val.txt')
    #//     4.3 end value
        day1_e = search_s_e_h_l_fun('end_val', '/home/pi/Hades_project/csv_repository/target_sdate1_val.txt')
    #//     4.4 start value
        day1_s = search_s_e_h_l_fun('start_val', '/home/pi/Hades_project/csv_repository/target_sdate1_val.txt')
        #print 'h:'+day1_h
        #print 'l:'+day1_l
        #print 'e:'+day1_e
        #print 's:'+day1_s
        clean_garbage_file('/home/pi/Hades_project/csv_repository/target_sdate1_val.txt')
    else:
        print "Error :day1 not avaible~"
        return 1
    #print "---------------"

    #print sdate2
    res2 = gen_target_file(sdate2, csv_file, '/home/pi/Hades_project/csv_repository/target_sdate2_val.txt')
    #//day2,yesterday
    if(res2 == 0):
        day2_h = search_s_e_h_l_fun('highest_val', '/home/pi/Hades_project/csv_repository/target_sdate2_val.txt')
        day2_l = search_s_e_h_l_fun('lowest_val', '/home/pi/Hades_project/csv_repository/target_sdate2_val.txt')
        day2_e = search_s_e_h_l_fun('end_val', '/home/pi/Hades_project/csv_repository/target_sdate2_val.txt')
        day2_s = search_s_e_h_l_fun('start_val', '/home/pi/Hades_project/csv_repository/target_sdate2_val.txt')
        #print 'h:'+day2_h
        #print 'l:'+day2_l
        #print 'e:'+day2_e
        #print 's:'+day2_s
        clean_garbage_file('/home/pi/Hades_project/csv_repository/target_sdate2_val.txt')
    else:
        print "Error :day2 not avaible~"
        return 1
    #print "---------------"

    #print sdate3
    res3 = gen_target_file(sdate3, csv_file, '/home/pi/Hades_project/csv_repository/target_sdate3_val.txt')
    #//day3,the day before yesterday
    if(res3 == 0):
        day3_h = search_s_e_h_l_fun('highest_val', '/home/pi/Hades_project/csv_repository/target_sdate3_val.txt')
        day3_l = search_s_e_h_l_fun('lowest_val', '/home/pi/Hades_project/csv_repository/target_sdate3_val.txt')
        day3_e = search_s_e_h_l_fun('end_val', '/home/pi/Hades_project/csv_repository/target_sdate3_val.txt')
        day3_s = search_s_e_h_l_fun('start_val', '/home/pi/Hades_project/csv_repository/target_sdate3_val.txt')
        #print 'h:'+day3_h
        #print 'l:'+day3_l
        #print 'e:'+day3_e
        #print 's:'+day3_s
        clean_garbage_file('/home/pi/Hades_project/csv_repository/target_sdate3_val.txt')
    else:
        print "Error :day3 not avaible~"
        return 1
    #print "---------------"
    #// 5. algorithm to compare value bigger or lower

    #// 5.3 if you have share of stock, if you have 1 PIECE go to sale session,
    #//     otherwise go to buy session
    if(PIECE == '0'): #// share of stock is none
        #// 5.1 three day detection algorithm, buy in
        #// 5.4 stage = 1 -> buy, 2 -> do not buy
        print "+++++ BUY Session ++++"
        if(day1_h > day3_h):
            print (sdate1+" is high than "+sdate3+", BUY!")
            stage = 1
            print "buy in share of 1000"
            PIECE = 1000
            fd = open(filepath, 'w')
            piece_num = '1000'
            fd.write(piece_num)
            fd.close
            record_trade_price(stock_number, day1_h, 'buy')
        else:
            print (sdate1+" is high than "+sdate3+", DO NOT BUY!")
            stage = 2
    elif(PIECE == '1000'): #// share of stock is 1
        #// 5.2 three day detection algorithm, sale out
        #// 5.4 stage = 3 ->sale out, 4 -> keep
        print "+++++ SALE Session ++++"
        if(day1_e < day3_e):
            print (sdate1+" is lower than "+sdate3+", SALE OUT!")
            stage = 3
            print "sale out share of 1000"
            PIECE = 0
            fd = open(filepath, 'w')
            piece_num = '0'
            fd.write(piece_num)
            fd.close
            record_trade_price(stock_number, day1_e, 'sale')
        else:
            print sdate1+" is higher or equal than "+sdate3+", KEEP!"
            stage = 4
    else:
        print "something wrong about share of stock..."

    #// 9. CPU record
    cpu_tempertrue_value = get_cpu_temp()
    #cpu_tempertrue_value = str(40)
    write_cpu_temp_file(cpu_tempertrue_value)
    cpu_tempertrue_value = "now CPU " + str(cpu_tempertrue_value)

    today_date = datetime.date.today()
    today_date = str(today_date)
    #// 5.5 use a switch to give different msg to "result_message" for mail
    if(stage == 1):
        result_message = today_date+"  "+stock_number+" \nmachine say:  "+" BUY!!\n"+"today final price: "+day1_e+"\n"+cpu_tempertrue_value
    elif(stage == 2):
        result_message = today_date+"  "+stock_number+" \nmachine say:  "+" DO NOT BUY!!\n"+"today final price: "+day1_e+"\n"+cpu_tempertrue_value
    elif(stage == 3):
        result_message = today_date+"  "+stock_number+" \nmachine say:  "+" SALE OUT!!\n"+"today final price: "+day1_e+"\n"+cpu_tempertrue_value
    elif(stage == 4):
        result_message = today_date+"  "+stock_number+" \nmachine say:  "+" KEEP!!\n"+"today final price: "+day1_e+"\n"+cpu_tempertrue_value
    else:
        print "stage going wrong..."

    #// 6. send mail to notice user
    #// issue: cc wouldn't work!
    #// to_addr_list = ['*****@*****.**','*****@*****.**']
    #if(DEBUG == TURN_OFF):
    if(DEBUG_MAIL == TURN_ON):
        #sendemail(from_addr    = '*****@*****.**',
        #          to_addr_list = ['*****@*****.**'],
        #          cc_addr_list = [''],
        #          subject      = 'Make money machine letter',
        #          message      = result_message,
        #          login        = '******',
        #          password     = '******')
        deal_result_message = result_message
        #//read trade record file
        file_name = '/home/pi/Hades_project/trade_record/' + stock_number + '_tr_price.txt'
        tr_file = open(file_name, 'r')
        trade_result_message = tr_file.read()
        result_message = deal_result_message + '\n' +  trade_result_message
        tr_file.close()

        write_mail_msg(result_message)
        between_line = "\n--------------------------------------------------------\n"
        write_mail_msg(between_line)
예제 #6
0
from grs import Stock

stock = Stock('2002')                   
stock.out_putfile('/2002.csv')
예제 #7
0
                                charset='utf8mb4',
                                cursorclass=pymysql.cursors.DictCursor)
com_list =['1101','1102','1216','1301','1303','1326',
           '1402','1722','2002','2105','2201','2207',
           '2301','2303','2311','2317','2324','2325',
           '2330','2347','2353','2354','2357','2382',
           '2409','2412','2454','2474','2498','2801',
           '2880','2881','2882','2883','2885','2886',
           '2890','2891','2892','2912','3008','3045',
           '3231','3481','3673','4904','4938','5880','6505']
try:
    with connection.cursor() as cursor:
        for com in com_list:
            com = com.split('+')[0]
            stock = Stock(com,30)
            stock.out_putfile(com+'[30-month].csv')
            with open(com+'[30-month].csv', 'rb') as csvfile:
                info = list()
                spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
                for r in spamreader:
                    if len(r[0].split(','))>=9:
                        info.append(r[0].split(','))
                for r2 in info:
                    r2[0] = str(int(r2[0].split('/')[0])+1911) + '-' +r2[0].split('/')[1]+'-'+r2[0].split('/')[2]
                for i in range(len(info)):
                    today_open = float(info[i][3])
                    today_close = float(info[i][6])
                    if i-1 >=0 :
                        pre_close = float(info[i-1][6])
                    else:
                        pre_close = 0
예제 #8
0

def WorkerJob(stock_index, days):
    print('# index {}'.format(stock_index))
    stock = Stock(stock_index, days)
    #stock.out_putfile('data/{}.csv'.format(stock_index))


"""
with ThreadPoolExecutor(max_workers=10) as executor:
    for i in sorted(stock_no_list):
        if len(i) != 4:
            continue
        #stock = Stock(i, 12 * 30)
        #stock = Stock(i, 3 * 1)
        #stock.out_putfile('data/{}.csv'.format(i))
        print(type(i))
        a = executor.submit(WorkerJob, i, 3)

        #threading.Thread(target = WorkerJob, args = (i, 3)).start()
    print(a.result())
"""
for i in sorted(stock_no_list):
    if len(i) != 4:
        continue
    print('[compute] adgroup {}'.format(i))
    #stock = Stock(i, 12 * 30)
    stock = Stock(i, 1)
    stock.out_putfile(
        '/Users/coha/git/time-series-predictor/data/{}.csv'.format(i))
예제 #9
0
import sys

if len(sys.argv) != 3:
  print "usage: python fuckGRS.py [from_id] [to_id(not_include)]"
  sys.exit(1)

initial_idx = int(sys.argv[1])
initial_month = 240
record_csv_name = 'record.csv'

record = open(record_csv_name, "ab")
writer = csv.writer(record, delimiter=',')

i = initial_idx
month = initial_month
while i < int(sys.argv[2]):
  print "fetch id = ", i, ", month = ", month
  try:
    stock = Stock(str(i), month)# may cause not exist error
    if month > 0: stock.out_putfile(str(i)+'.csv')# may cause index out of range error
    writer.writerow([i, month])
  except AttributeError:# index out of range
    print " >> id = ", i, "out of range! month = ", month
    month -= 12
  except: # no such id
    print " >> id = ", i, " not exist"
    i += 1
    month = initial_month
  else:
    i += 1
    month = initial_month
예제 #10
0
def main():

    PATH_OF_DATA = 'data'

    index_lists = []

    ### 從 stocknumber 中讀出看要抓哪幾隻股票的資料
    f = open('stocknumber.csv', 'rb')
    cr = csv.reader(f, delimiter=',')
    for row in cr:
        index_lists.append(row[0])

    skipFlag = True if len(sys.argv) > 1 else False
    tillFlag = True if len(sys.argv) > 2 else False
    for stock_index in index_lists:
        if skipFlag:
            if stock_index != sys.argv[1]:
                continue
            else:
                skipFlag = False
        if tillFlag:
            if stock_index == sys.argv[2]:
                break

        filename = join(PATH_OF_DATA, stock_index+'.csv')
        if isfile(filename):# 如果已經有檔案,就讀出最後一行然後插入在後面
            print stock_index, 'exist!'
            lastline = get_last_row(filename)
            try:
                st = Stock(stock_index)
            except grs.error.StockNoError:
                print stock_index, "not found!"
                continue
            
            try:
                if len(st.raw) == 0:# 近三個月無資料
                    print "近一個月無資料"
                    continue
            except:# len(st.raw) 沒資料可能會 error
                continue

            # 預設不會超過三個月沒有抓資料
            i = 0
            print lastline
            for i in xrange(len(st.raw)):# 從尾巴開始找看差幾筆
                if lastline[0] == st.raw[-(i+1)][0]:
                    break
            print "st.raw[-1]", st.raw[-1]
            print "缺", i, "筆資料"
            fo = open(filename, 'ab')
            cw = csv.writer(fo, delimiter=',')
            for j in range(0, i):# 把後來的都補上
                cw.writerow(st.raw[-i+j])
        else: # 如果沒有檔案,就從頭開始抓
            print stock_index, ' not exist!'
            # 二分搜尋月分, 最大預設 480 個月 (40 年)
            top_month = 481
            bot_month = 0
            
            while top_month != bot_month:
                month = (top_month + bot_month)/2
                print "top: ", top_month, "bottom: ", bot_month, "now:", month
                st = Stock(stock_index, month)
                try:
                    len(st.raw)# 如果 list index out of range 就會 AttributeError
                    bot_month = month
                    if top_month - bot_month == 1:
                        break
                except AttributeError:
                    top_month = month
            st = Stock(stock_index, bot_month)
            st.out_putfile(filename)