Here is a simple python script that can be built further for algorithmic trading. You will need to get an API key from Alpha Advantage or similar service to get the quotes.
To make the trades, you will need to link the script to a trading API from TDAmeritrade or your favorite broker who has an API. This part of the script is not included here.
The algorithm shown is a very simple one. Basically, buy the stock and then wait till the price is [1]% more than the purchase price. and then sell. Wait of [nn] minutes. Repeat.
You can program more complex strategies by building upon this mechanism.
def stock_price(stk='QQQ',end_hr=16, end_min=00, after_sell_minutes=0): import urllib import urllib2 import time import re import json import os import sys import datetime import random # Get API key from Alpha Vantage st_sym = stk st_ind = 'nyse' run_time_min = 30 run_time_int = 1 # default wait time in seconds for next check cash_bal = 10000.0 wig = 5.0 url_prefix = "https://www.alphavantage.co/query?function=BATCH_STOCK_QUOTES&symbols=" url_symbols = st_sym.upper() url_postfix = "&apikey=__YOUR API KEY__" url_to_query = url_prefix + url_symbols + url_postfix print '' + 'Query made: ' + url_to_query + '' response = urllib2.urlopen(url_to_query) headers = response.info() data = response.read() # do a loop for nnn minutes run_loops = int(run_time_min * 60 / run_time_int) t_h = datetime.datetime.now().hour t_m = datetime.datetime.now().minute min_price = 0. max_price = 0. loopcount = 0 print "Run till %d:%d"%(end_hr,end_min) print 'Run | SYM | Time | Price | Act | Shares | Cash | Portfolio' print '--------------------------------------------------------------' while (t_h <= end_hr) & (t_m <= end_min): urlreq = urllib2.Request(url_to_query) try: response = urllib2.urlopen(urlreq) #open the link to get the data data = response.read() response.close() #this closes the open URL link # convert the data to dict. decoded_data = json.loads(data) # for k,v in decoded_data.items(): print k,v sq1 = decoded_data['Stock Quotes'] sq2 = sq1[0] sq2s = sq2['1. symbol'] sq2t = sq2['4. timestamp'][11:] sq2v = int(sq2['3. volume']) sq2p = float(sq2['2. price']) all_well = True except: all_well = False if all_well: # see if this is a buy opport or sell. act_now = "HOLD" random_wait = 0 show_res = False if cash_bal > 5000: buy_shr = int((cash_bal - wig) / sq2p) - 1 cash_bal = cash_bal - (buy_shr * sq2p + wig) buy_price = sq2p shr_owned = buy_shr act_now = "BUY" # FUNCTION BUY_STOCK() --- not included in this script show_res = True else: # see if this is sell situation if sq2p > buy_price * 1.01: sell_shr = shr_owned sell_price = sq2p cash_bal = cash_bal + (sell_price * sell_shr - wig) shr_owned = shr_owned - sell_shr act_now = "SELL" # FUNCTION SELL_STOCK() --- not included in this script show_res = True # estimate the random wait time for next trade. r1 = int(after_sell_minutes * 60 * 0.9) r2 = int(after_sell_minutes * 60 * 1.1) random_wait = random.randrange(r1,r2) else: pass port_val = cash_bal + shr_owned * sq2p # update the min and max price if min_price == 0.: min_price = sq2p if max_price == 0.: max_price = sq2p if sq2p < min_price: min_price = sq2p if sq2p > max_price: max_price = sq2p t_s = datetime.datetime.now().second if t_s % 10 == 0: show_res = True # only show results every 10 secs or when there is buy or sell if show_res: print "%4d | %4s | %s | %7.3f | %4s | %.1f | %.1f | %.1f" %(loopcount, sq2s, sq2t, sq2p, act_now, shr_owned, cash_bal, port_val) sys.stdout.flush() #make sure that the data is written out before sleep else: pass # ----- now to sleep ------ t_h = datetime.datetime.now().hour t_m = datetime.datetime.now().minute loopcount = loopcount + 1 #now go to sleep - use a random element # that is prespefied based on whether there was a sale or not. time.sleep(run_time_int + random_wait) # write summary. print 'Process end: %s'%time.ctime() print 'Min price: %.2f'%min_price print 'Max price: %.2f'%max_price print 'Min Max Range: %.1f%%'%((max_price/min_price-1)*100) print 'End Portfolio Value: %.1f'%port_val