def doRSITrade(pool, prices, period, up, down): global highest sname = 'RSI_' + str(period) + '_' + str(up) + '_' + str(down) rsis = rsi.calc_rsi(prices, period) t = Trader(sname) for i in range(period, len(prices)): if rsis['rsi'][i] < down and rsis['rsi'][i-1] >= down: notes = 'RSI: ' + str(rsis['rsi'][i]) + ';pre: ' + str(rsis['rsi'][i-1]) + ';down: ' + str(down) t.buy(prices[i]['date'], prices[i]['time'], prices[i]['rmb'], notes) if rsis['rsi'][i] >= down and rsis['rsi'][i - 1] < down: notes = 'RSI: ' + str(rsis['rsi'][i]) + ';pre: ' + str(rsis['rsi'][i-1]) + ';down: ' + str(down) t.sell(prices[i]['date'], prices[i]['time'], prices[i]['rmb'], notes, True) if rsis['rsi'][i] > up and rsis['rsi'][i-1] <= up: notes = 'RSI: ' + str(rsis['rsi'][i]) + ';pre: ' + str(rsis['rsi'][i-1]) + ';up: ' + str(up) t.sell(prices[i]['date'], prices[i]['time'], prices[i]['rmb'], notes) if rsis['rsi'][i] <= up and rsis['rsi'][i-1] > up: notes = 'RSI: ' + str(rsis['rsi'][i]) + ';pre: ' + str(rsis['rsi'][i-1]) + ';up: ' + str(up) t.buy(prices[i]['date'], prices[i]['time'], prices[i]['rmb'], notes, True) t.show(prices[i]['date'], prices[i]['time'], prices[i]['rmb']) pool.estimate(t)
def doTrade(pool, prices, ps, fast, slow, rsiPeriod, rsiGuage): sname = 'L2_' + str(fast) + '_' + str(slow) + '_' + str(rsiPeriod) + '_' + str(rsiGuage) macds = macd.calc_macd(prices, fast, slow, 7) rsis = rsi.calc_rsi(prices, rsiPeriod) front = max(fast, slow, rsiPeriod) t = Trader(sname) direct = odirect = 0 for i in range(front, len(prices)): #print macds['macd'][i], rsis['rsi'][i], odirect , direct price = prices[i] if macds['macd'][i] > 0 and rsis['rsi'][i] > rsiGuage: direct = 1 elif macds['macd'][i] < 0 and rsis['rsi'][i] < rsiGuage: direct = -1 volume = 0 if odirect == -1 and direct == 1: volume = 1 elif odirect == 1 and direct == -1: volume = -1 odirect = direct t.processOrder(price['dt'], price['rmb'], volume * 1000, cntNo=0, notes='') pool.estimate(t) return
def runStrategy(in_prices): global prices, ps, phs, pls, rsis log.debug('beginning s5 strategy ...') prices = in_prices ps = [p['close'] for p in prices] phs = [p['high'] for p in prices] pls = [p['low'] for p in prices] rsis = rsi.calc_rsi(prices, 14) pool = StrategyPool(50) doTrade(pool, 1, 180, 12, 0.5, -0.6) pool.showStrategies() return direction = 1 starttime = time.time() for i in range(30, 150)[::10]: for j in range(2, 30)[::5]: if i < j: continue elapsed = long(time.time() - starttime) log.debug('== ' + str(elapsed) + ', ' + str(i) + ',' + str(j) + ' ==') for kp in [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]: for kl in [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]: doTrade(pool, direction, i, j, kp, -kl) pool.showStrategies() return
def doRSITrade(pool, prices, period, up, down): global highest sname = 'RSI_' + str(period) + '_' + str(up) + '_' + str(down) rsis = rsi.calc_rsi(prices, period) t = Trader(sname) for i in range(period, len(prices)): if rsis['rsi'][i] < down and rsis['rsi'][i - 1] >= down: notes = 'RSI: ' + str(rsis['rsi'][i]) + ';pre: ' + str( rsis['rsi'][i - 1]) + ';down: ' + str(down) t.buy(prices[i]['date'], prices[i]['time'], prices[i]['rmb'], notes) if rsis['rsi'][i] >= down and rsis['rsi'][i - 1] < down: notes = 'RSI: ' + str(rsis['rsi'][i]) + ';pre: ' + str( rsis['rsi'][i - 1]) + ';down: ' + str(down) t.sell(prices[i]['date'], prices[i]['time'], prices[i]['rmb'], notes, True) if rsis['rsi'][i] > up and rsis['rsi'][i - 1] <= up: notes = 'RSI: ' + str(rsis['rsi'][i]) + ';pre: ' + str( rsis['rsi'][i - 1]) + ';up: ' + str(up) t.sell(prices[i]['date'], prices[i]['time'], prices[i]['rmb'], notes) if rsis['rsi'][i] <= up and rsis['rsi'][i - 1] > up: notes = 'RSI: ' + str(rsis['rsi'][i]) + ';pre: ' + str( rsis['rsi'][i - 1]) + ';up: ' + str(up) t.buy(prices[i]['date'], prices[i]['time'], prices[i]['rmb'], notes, True) t.show(prices[i]['date'], prices[i]['time'], prices[i]['rmb']) pool.estimate(t)
def runStrategy(in_prices): global prices, ps, phs, pls, rsis log.debug('beginning s6 strategy ...') prices = in_prices ps = [p['close'] for p in prices] phs = [p['high'] for p in prices] pls = [p['low'] for p in prices] rsis = rsi.calc_rsi(prices, 14) pool = StrategyPool(50) #doTrade(pool, -1, 140, 7, 1.0, -1.0) #pool.showStrategies() #return direction = -1 starttime = time.time() for i in range(50, 200)[::10]: for j in range(2, 20)[::3]: if i < j: continue elapsed = long(time.time() - starttime) log.debug('== ' + str(elapsed) + ', ' + str(i) + ',' + str(j) + ' ==') for kp in [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]: for kl in [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]: doTrade(pool, direction, i, j, kp, -kl) pool.showStrategies() return
def calcTickets(pool, prices, period): vname = 'RSI_' + str(period) rsis = rsi.calc_rsi(prices, period) front = period l = len(prices) ops = [0] * l for i in range(front, l): if rsis['rsi'][i] < 30 and rsis['rsi'][i] > rsis['rsi'][i-1]: ops[i] = 1 elif ops[i-1] == 1 and rsis['rsi'][i] > rsis['rsi'][i-1]: ops[i] = 1 elif rsis['rsi'][i] > 70 and rsis['rsi'][i] < rsis['rsi'][i-1]: ops[i] = -1 elif ops[i-1] == -1 and rsis['rsi'][i] < rsis['rsi'][i-1]: ops[i] = -1 pool.estimate(vname, ops, front)
def calcTickets(pool, prices, ps, fPeriod, sPeriod): vname = 'FAB_' + str(period) rsis = rsi.calc_rsi(prices, period) front = period l = len(prices) ops = [0] * l for i in range(front, l): high = max(ps[i - fPeriod + 1:i + 1]) low = min(ps[i - fPeriod + 1:i + 1]) slope, y = calc_slope(ps[i - sPeriod + 1:i + 1]) if rsis['rsi'][i] < 30 and rsis['rsi'][i] > rsis['rsi'][i - 1]: ops[i] = 1 elif ops[i - 1] == 1 and rsis['rsi'][i] > rsis['rsi'][i - 1]: ops[i] = 1 elif rsis['rsi'][i] > 70 and rsis['rsi'][i] < rsis['rsi'][i - 1]: ops[i] = -1 elif ops[i - 1] == -1 and rsis['rsi'][i] < rsis['rsi'][i - 1]: ops[i] = -1 pool.estimate(vname, ops, front)
def calcTickets(pool, prices, ps, fPeriod, sPeriod): vname = 'FAB_' + str(period) rsis = rsi.calc_rsi(prices, period) front = period l = len(prices) ops = [0] * l for i in range(front, l): high = max(ps[i - fPeriod + 1 : i + 1]) low = min(ps[i - fPeriod + 1 : i + 1]) slope, y = calc_slope(ps[i - sPeriod + 1 : i + 1]) if rsis['rsi'][i] < 30 and rsis['rsi'][i] > rsis['rsi'][i-1]: ops[i] = 1 elif ops[i-1] == 1 and rsis['rsi'][i] > rsis['rsi'][i-1]: ops[i] = 1 elif rsis['rsi'][i] > 70 and rsis['rsi'][i] < rsis['rsi'][i-1]: ops[i] = -1 elif ops[i-1] == -1 and rsis['rsi'][i] < rsis['rsi'][i-1]: ops[i] = -1 pool.estimate(vname, ops, front)
def doTrade(pool, prices, ps, fast, slow, rsiPeriod, rsiGuage): sname = 'L2_' + str(fast) + '_' + str(slow) + '_' + str( rsiPeriod) + '_' + str(rsiGuage) macds = macd.calc_macd(prices, fast, slow, 7) rsis = rsi.calc_rsi(prices, rsiPeriod) front = max(fast, slow, rsiPeriod) t = Trader(sname) direct = odirect = 0 for i in range(front, len(prices)): #print macds['macd'][i], rsis['rsi'][i], odirect , direct price = prices[i] if macds['macd'][i] > 0 and rsis['rsi'][i] > rsiGuage: direct = 1 elif macds['macd'][i] < 0 and rsis['rsi'][i] < rsiGuage: direct = -1 volume = 0 if odirect == -1 and direct == 1: volume = 1 elif odirect == 1 and direct == -1: volume = -1 odirect = direct t.processOrder(price['dt'], price['rmb'], volume * 1000, cntNo=0, notes='') pool.estimate(t) return