def __init__(self, stock_value, stock_share, traders_init_cash, n_traders):
        self.init_stock_value  = stock_value
        self.stock_share       = stock_share
        self.trade_volume      = 0
        self.n_periods         = 200
        
        file_path  = '/Users/pedrorodriguezflores/Documents/Desarrollo/Data/BMV/AC.MX.csv'
        #self.stock             = stock.File_Stock(file_path, self.n_periods)
        self.stock             = stock.Stock(self.init_stock_value, self.stock_share, self.n_periods)
        
        self.n_traders         = n_traders
        self.market_traders    = []
        self.test_traders      = []
        
        for i in range(self.n_traders):
            perfil = [-random.random(), random.random(), random.randint(1,50)]
            self.market_traders.append(trader.Fish(traders_init_cash, self.n_periods, perfil))
        #for i in range(self.n_traders):
            #self.traders.append(trader.Centered(traders_init_cash,self.init_stock_value))

        perfil = [-0.3, 0.5, random.randint(1,9)]
        self.test_traders.append(trader.Fish(traders_init_cash, self.n_periods, perfil))
        #self.test_traders.append(trader.Whale(traders_init_cash, self.n_periods))
        #self.test_traders.append(trader.Value(traders_init_cash, self.n_periods, self.init_stock_value))

        self.day   = self.n_periods
        self.days  = np.arange(self.day - self.n_periods - 1, self.day, 1)
        return None
Пример #2
0
def test_dongguan_trader(user_name,user_password):
    tmp_trader = Trader(Constant.DONGGUAN_IP,
                        Constant.TRADE_PORT,
                        user_name,
                        user_password,
                        '0',
                        Constant.DONGGUAN_YYB,
                        Constant.DLL_PATH,
                        None,
                        sh_code='',
                        sz_code='',
                        )
    user_code =  tmp_trader.login()
    return user_code
Пример #3
0
def test_changcheng_trader(user_name,user_password):
    tmp_trader = Trader(Constant.CHANGCHENG_IP,
                        Constant.TRADE_PORT,
                        user_name,
                        user_password,
                        '0',
                        Constant.CHANGCHENG_YYB,
                        Constant.DLL_PATH,
                        None,
                        sh_code='',
                        sz_code='',
                        )
    user_code =  tmp_trader.login()
    return user_code
Пример #4
0
def test_hengtai_trader(user_name,user_password):
    tmp_trader = Trader(Constant.HENGTAI_IP,
                        Constant.TRADE_PORT,
                        user_name,
                        user_password,
                        '0',
                        Constant.HENGTAI_YYB,
                        Constant.DLL_PATH,
                        None,
                        sh_code='',
                        sz_code='',
                        )
    user_code =  tmp_trader.login()
    return user_code
Пример #5
0
def test_zhongtou_trader(user_name,user_password):
    tmp_trader = Trader(Constant.ZHONGTOU_IP,
                        Constant.TRADE_PORT,
                        user_name,
                        user_password,
                        '0',
                        Constant.ZHONGTOU_YYB,
                        Constant.DLL_PATH,
                        None,
                        sh_code='',
                        sz_code='',
                        )
    user_code =  tmp_trader.login()
    return user_code
Пример #6
0
class BackTestor:
  def __init__(self, order_path):
    self.r = Reader()
    self.t = Trader()
    self.LoadOrder(order_path)

  def LoadOrder(self, order_path):
    self.r.load_order_file(order_path)
    for i in range(self.r.get_ordersize()):
      o = self.r.read_border(i)
      if o.price > 0:
        self.t.RegisterOneTrade(o.contract, o.size if o.side == 1 else -o.size, o.price)

  def Plot(self):
    self.t.PlotStratPnl()
Пример #7
0
    def main(self):
        [dataMat, labelMat
         ] = FeatureGenerator.FeatureParser(self.messageBook, self.limitBook,
                                            self.timeFrame,
                                            self.useCachedFiles).parse()
        print "Generated Features of size: (%d,%d)" % dataMat.shape
        self.labelMat = labelMat

        count = 0

        self.predictMat = numpy.zeros((labelMat.shape))

        for obs in dataMat:  #an observation is a row in the dataMat
            self.cache.add(obs)
            if self.cache.needUpdate():
                print "huh"
                self.model = self.trainer.train(self.cache.getData())
            prediction = self.model.predict(obs)
            self.predictMat[count, 0] = prediction
            count += 1
            if count % 1000 == 0:
                print "On Obs: %d" % count
            self.trader.trade(Trader.DataPt(obs), prediction)

        self.printAnalysis()
Пример #8
0
def realizationCalculatorCSV():
    print("Loading csv file 'sampledata(1).csv data...")
    import_file = open("Data/sampledata(1).csv", "r")
    export_file = open("Data/exportdataCSV.csv", "w")
    t = Trader("badApple")
    for line in import_file:
        import_string = line.rstrip("\n")
        import_list = import_string.split(",")
        # updates export_list data by calling t.trade( ) function
        export_list = t.trade(import_list)
        export_string = ",".join(export_list) + "\n"
        # appends data to export_file csv file
        export_file.write(export_string)

    import_file.close()
    export_file.close()
    print("Data exported to exportdata(1).csv")
Пример #9
0
 def __init__(self):
   self.reader = Reader()
   self.order_file_size = 0
   self.shot_file_size = 0
   self.pos= {}
   self.net_pnl = {}
   self.gross_pnl = {}
   self.ticker_strat_map = {}
   self.avgcost = {}
   self.gross_time_allpnl_map = {}
   self.net_time_allpnl_map = {}
   self.strat_data_map = {}
   self.gross_strat_pnl_map = {}
   self.net_strat_pnl_map = {}
   self.pnl_contract = set([])
   self.Caler = CALER(contract_config_path)
   self.trader = Trader()
Пример #10
0
 def Action_Buy(self):
     print("sell")
     if self.positions_total >= 1:
         return -1
     else:
         self.position_data = trader.Buy_Action(self.mt, self.symbol)
         self.last_action = "long"
         return 0.0005
Пример #11
0
 def Action_Sell(self):
     print("Buy")
     if self.positions_total >= 1:
         return -1
     else:
         self.position_data = trader.Sell_Avtion(self.mt, self.symbol)
         self.last_action = "short"
         return 0.5
Пример #12
0
 def Action_Close(self):
     print("Closing")
     if self.positions_total >= 1:
         trader.Close_Position(self.mt, self.symbol,
                               self.position_data["result"],
                               self.last_action)
         return self.account_profit
     else:
         return -1
Пример #13
0
def Connect():
    '''连接端口'''
    global trader, market
    trader = Trader.Trader()
    market = MarketDataCenter.MarketDataCenter()
    res = True
    if market.Connect() == False or trader.Connect() == False:
        res = False
    if res == False:
        Release()
    return res
Пример #14
0
def invest(stocks):
    totalvalue = 0

    for stock in stocks:
        trader = Trader.Trader(stock)
        print('trading ' + stock)
        trader.run_test()
        totalvalue = round((totalvalue + trader.total_value), 2)

    print('\n\rYou have made £{} in profit'.format(
        round(totalvalue - (len(stocks) * 1000)), 5))
Пример #15
0
def realizationCalculator():
    print("Loading xlsx file 'sampledata.xlsx' data...")
    workbook = openpyxl.load_workbook('Data/sampledata.xlsx')
    worksheet = workbook.active
    export_workbook = openpyxl.Workbook()
    export_worksheet = export_workbook.active
    dest_filename = "Data/exportdataXLSX.xlsx"
    t = Trader("badApple")
    for row in worksheet.iter_rows(min_row=1):
        # parses data from row
        date = row[0].value
        date_and_time = row[1].value
        action = row[2].value
        symbol = row[3].value
        quantity = row[4].value
        price = row[5].value
        data = [date, date_and_time, action, symbol, quantity, price]
        # updates export_list data by calling t.trade( ) function
        export_list = t.trade(data)
        # appends data to export openpyxl worksheet
        export_worksheet.append(export_list)
    # saves export_workbook to 'exportdata.xlsx'
    export_workbook.save(dest_filename)
    print("Saved processed data in ", dest_filename)
Пример #16
0
def GenBTReport(bt_file_path, file_name='strat_pnl_hist'):
    r = Reader()
    t = Trader()
    r.load_order_file(bt_file_path)
    for i in range(r.get_ordersize()):
        o = r.read_border(i)
        if o.price > 0 and abs(o.size) > 0:
            t.RegisterOneTrade(o.ticker, o.size if o.side == 1 else -o.size,
                               o.price)
    t.PlotStratPnl(file_name)
    return t.GenDFReport(), t.GenStratReport()
def day_simulations(clf_acc, daytrader, debug=True):
    clf, trainingAcc = clf_acc
    correct = 0
    total = 0
    y_true, y_pred = daytrader.test_ys, clf.predict(daytrader.test_xs)
    accuracy = Trader.reports(y_true, y_pred, debug=debug)

    money = 1.0
    for i in range(len(daytrader.test_xs)):
        gain = daytrader.testingGains[i]
        prediction = clf.predict([daytrader.test_xs[i]])
        if prediction == 1:
            money += gain
        else:
            money -= gain

    # print "money is ", money
    # print "num trials", len(daytrader.testingGains)
    return accuracy, money
Пример #18
0
	def __init__(self):
		"""
		Inicializuje moduly k rozhodnutí
		o nákupu či prodeji, a simulaci,
		či ostré obchodování.
		:return:
		"""
		self.config = Helper.Config()
		self.logger = Logger.TraderLogging()
		self.simmode = self.config.simMode
		self.tradedecisions = ProceedAlgorythms.AllDecisionsAndStrategies()
		self.fetch = FetchDataForDecisions()
		self.tradingpairs = self.fetch.pairsFromDatabase()
		# self.realtimepricepolicy = PricePolicy.RealtimePricePolicy()
		self.boughts = []
		if self.simmode:
			import Simulation
			self.trade = Simulation.Trade()
		else:
			import Trader
			self.trade = Trader.Trade()
Пример #19
0
def TradeReport(date_prefix, trade_path, cancel_path, file_name=''):
    trader = Trader()
    command = 'cat ' + date_prefix + 'log/order.log | grep Filled > ' + trade_path + '; cat ' + date_prefix + 'log/order_night.log | grep Filled >> ' + trade_path
    command_result = subprocess.Popen(command,
                                      shell=True,
                                      stdout=subprocess.PIPE,
                                      stderr=subprocess.STDOUT)
    command = 'cat ' + date_prefix + 'log/order.log | grep Cancelled > ' + cancel_path + '; cat ' + date_prefix + 'log/order_night.log | grep Cancelled >> ' + cancel_path
    command_result = subprocess.Popen(command,
                                      shell=True,
                                      stdout=subprocess.PIPE,
                                      stderr=subprocess.STDOUT)
    time.sleep(3)
    trade_details = []
    with open(trade_path) as f:
        ei = ExchangeInfo()
        for l in f:
            temp = []
            ei.construct(l)
            temp.append(
                datetime.datetime.fromtimestamp(float(
                    ei.time_str)).strftime("%Y-%m-%d %H:%M:%S"))
            temp.append(ei.ticker)
            temp.append("Buy" if ei.side == 0 else "Sell")
            temp.append(ei.trade_price)
            temp.append(ei.trade_size)
            trade_details.append(temp)
            trader.RegisterOneTrade(
                ei.ticker,
                int(ei.trade_size) if ei.side == 0 else -int(ei.trade_size),
                float(ei.trade_price))
    #print('printint')
    df = trader.GenDFReport()
    trader.PlotStratPnl(file_name=file_name)
    #print(df)
    #trader.Summary()
    df.insert(len(df.columns), 'cancelled', 0)
    with open(cancel_path) as f:
        ei = ExchangeInfo()
        for l in f:
            ei.construct(l)
            if ei.ticker not in df.index:
                df.loc[ei.ticker] = 0
            df.loc[ei.ticker, 'cancelled'] = df.loc[ei.ticker, 'cancelled'] + 1
    return df, trader.GenStratReport(), pd.DataFrame(
        trade_details, columns=['time', 'ticker', 'Side', 'price', 'size'])
Пример #20
0
def main():
    """Initializes the application
    """
    run = Trader.run()

    # Load settings and create the config object
    config = Configuration()
    settings = config.settings

    # Set up logger
    logs.configure_logging(settings['log_level'], settings['log_mode'])
    logger = structlog.get_logger()

    # Configure and run configured behaviour.
    exchange_interface = ExchangeInterface(config.exchanges)
    notifier = Notifier(config.notifiers)

    behaviour = Behaviour(config, exchange_interface, notifier)

    while True:
        behaviour.run(settings['market_pairs'], settings['output_mode'])
        logger.info("Sleeping for %s seconds", settings['update_interval'])
        time.sleep(settings['update_interval'])
Пример #21
0
    def __init__(self, messageBook, limitBook, modelType):
        self.messageBook = messageBook
        self.limitBook = limitBook
        self.dataMat = None
        self.labelMat = None  #note this is ground truth, will not be known to the trainer/model until X timesteps ahead
        self.predictMat = None

        self.timeFrame = 4000

        self.neutralQueueSize = 4000
        self.upQueueSize = 4000
        self.downQueueSize = 4000
        self.retrainCount = 1000
        self.price = 1000000
        self.useCachedFiles = False

        self.cache = Cache.Cache(self.neutralQueueSize, self.upQueueSize,
                                 self.downQueueSize, self.timeFrame,
                                 self.retrainCount)
        self.model = Model.Model(None, None, None)
        self.modelType = modelType
        self.trainer = Trainer.Trainer(self.modelType)
        self.trader = Trader.Trader(self.price, self.timeFrame)
        self.start_time = time.time()
Пример #22
0
def login_zhongtou_trader(user_name, user_password, user_id):
    try:
        tmp_trader = Trader(
            Constant.ZHONGTOU_IP,
            Constant.TRADE_PORT,
            user_name,
            user_password,
            '0',
            Constant.ZHONGTOU_YYB,
            Constant.DLL_PATH,
            None,
            sh_code='',
            sz_code='',
        )
        if not tmp_trader.login():
            return 2  #代表错误信息无法登陆
        tmp_trader.query_positions(Constant.QUERY_STOCKS)
        stock_input = tmp_trader.trader_Ree.value.decode('gbk',
                                                         'ignore').split('|')
        tmp_trader.query_positions(Constant.QUERY_PROPERTY)
        property_input = tmp_trader.trader_Ree.value.decode(
            'gbk', 'ignore').split('|')
        tmp_trader.query_positions(Constant.QUERY_BOOK)
        entrust_input = tmp_trader.trader_Ree.value.decode('gbk',
                                                           'ignore').split('|')
        tmp_trader.query_positions(Constant.QUERY_FINISH_BOOK)
        finish_book_input = tmp_trader.trader_Ree.value.decode(
            'gbk', 'ignore').split('|')
        zhongtou_stock_info = ZhongTouStockInfo(stock_input, property_input,
                                                entrust_input,
                                                finish_book_input, user_name,
                                                user_id)
        zhongtou_stock_info.update_stock_info()
        return 1  # 代表执行成功
    except Exception as e:
        return 3  # 代表错误代码块执行
Пример #23
0
from Trader import *

#Custom settings
LOOP_DURATION = 15 * 60 # Time period (in seconds)
MAX_LOOP_TIME = 10 * 24 * 60 * 60 # Max duration to run (in seconds)
QUOTE_CURRENCY = "BCH" # Cryptocurrency of choice
BASE_CURRENCY = "USD" # Fiat currency of choice
CSV_PRICE = "price.csv" # Price CSV name
CSV_TRANSACTIONS = "transactions.csv" # Transaction CSV name
MODE = 2 # Mode of the Bot

#Start thread
stopFlag = Event()
thread = Trader(stopFlag, LOOP_DURATION, QUOTE_CURRENCY, BASE_CURRENCY, CSV_PRICE, CSV_TRANSACTIONS, MODE)
thread.daemon = True
thread.start()

#Set max time to run
time.sleep(MAX_LOOP_TIME)
stopFlag.set()
Пример #24
0
 def __init__(self, order_path):
   self.r = Reader()
   self.t = Trader()
   self.LoadOrder(order_path)
Пример #25
0
	#plt.ylabel('NT')
	#plt.show()

	plt.hist(ENV.STATS['DUR'])
	plt.ylabel('Duration')
	plt.show()

# 
# Main
# -------------------------------------------------------------------------------------------------
if __name__ == "__main__":

	
	data_obj = data_loader("save_file")
	SPACE = core.Space(data_obj)
	BROKER = Trader.Trade()
	ENV = core.Env(SPACE, BROKER)
	ENV_NAME = 'Trade_rl-v1'

	# action space
	nb_actions = len(ENV.action_space)
	dataset_len = data_obj.length
	features = SPACE.features
	obs_length = ENV.look_ahead
	print("nb_actions", nb_actions)
	print("obs shape:", ENV.observation_space.shape[0])

	# keras memory

	# DDPG
	memory = SequentialMemory(limit=500000, window_length=1)
def swing_simulation_for_2018(clf=None, past_days=5, candles=None):
    """
    How much money would the swing classifier make in 2018, trained only on 1950-2017?

    I'll buy at the close and sell at open on what i think are GREEN days,
    and short at close on what I think will be RED days.

    returns (accuracy, money)
    """
    money = 1  # 1 dollar
    candles2018 = candles
    if clf == None:
        s = SwingTrader(past_days=past_days,
                        excluding_last=252)  # doesnt include last year at all
        candles2018 = s.last_remaining()
        clf = s.boost()[0]
        print "************************no clf!!!!!!"
    correct = 0
    total = 0

    y_true = []
    y_pred = []

    for candleIndex in range(past_days - 1, len(candles2018) - 1):

        past_X_candles = candles2018[candleIndex - past_days + 1:candleIndex +
                                     1]

        # THIS IS JUST CLOSE
        past_X_days = [[candle.close for candle in past_X_candles]]
        # THIS IS OPEN, CLOSE, HIGH, LOW only for GSPC!!!!!!!
        # past_X_days = [[candle.open, candle.high, candle.low, candle.close] for candle in past_X_candles]

        first_day = float(past_X_days[0][0])  # for normalization
        normalized_xs = [[x / first_day for x in y] for y in past_X_days]

        # print past_X_days
        # print first_day
        # print normalized_xs
        # print "candles2018[0:10]", [x.close for x in candles2018[:10]]
        #
        # print "candleIndex", candleIndex
        #
        #
        #
        # print "pastXDays", past_X_days
        print normalized_xs
        prediction = int(
            clf.predict(normalized_xs)[0])  # 1 is predicting Green, -1 is Red
        tmmrw_open = candles2018[candleIndex + 1].open
        today_close = candles2018[candleIndex].close
        actual = 1 if tmmrw_open > today_close else -1
        y_pred.append(prediction)
        y_true.append(actual)
        diff = abs(tmmrw_open - today_close) / first_day

        # ONLY LONG STRATEGY
        if prediction == 1 and actual == 1:
            money += diff
        elif prediction == 1 and actual == 0:
            money -= diff

        if actual == prediction: correct += 1
        # LONG AND SHORT STRATEGY
        # if actual == prediction:
        #     money += diff
        #     correct += 1
        # else:
        #     money -= diff

        total += 1

    _ = Trader.reports(y_true, y_pred)

    if total > 0:
        accuracy = correct / float(total)
        print "Accuracy was {}".format(accuracy)
        print "money went from 1.00 to ", money

        return accuracy, money
    else:
        print "less than zero"
        return 0, 0
Пример #27
0
 def __init__(self):
     self.agent = Agent(hist_ws=hist_ws, forward_ws=forward_ws)
     self.trader = Trader(record=True)
     self.fee_rate = 0.0001
Пример #28
0
 def __init__(self):
     self.f_value = []
     self.tr = Trader()
Пример #29
0
class BaseFactor:
    def __init__(self):
        self.f_value = []
        self.tr = Trader()

    def run(self, start_date, end_date, ticker):
        self.m = self.LoadData(start_date, end_date, ticker)
        self.CalFactor()
        self.PlotFactor()
        self.TestPnl()
        self.PlotSignal()

    def PlotSignal(self):
        df_list = [i[1] for i in sorted(self.m.items(), key=lambda x: x[0])]
        if len(df_list) < 1:
            print('empty df')
            return
        df = df_list[0]
        start = time.time()
        for i in range(1, len(df_list)):
            df = pd.merge(df, df_list[i], how='outer')
        print('finished merge used %lfs' % (time.time() - start))
        plt.plot(df['mid'], label='mid', alpha=0.3)
        buy_x = df[df['money'] < 0].index.tolist()
        buy = df[df['money'] < -0.1]
        plt.scatter(x=buy.index.tolist(),
                    y=buy['mid'].tolist(),
                    marker='.',
                    s=[4] * len(buy),
                    c='red',
                    label='buy')
        sell = df[df['money'] > 0.1]
        plt.scatter(x=sell.index.tolist(),
                    y=sell['mid'].tolist(),
                    marker='.',
                    s=[4] * len(sell),
                    c='green',
                    label='sell')
        plt.title('factor percentile signal')
        plt.legend()
        plt.grid()
        plt.show()

    def TestPnl(self):
        for k in self.m:
            df = self.m[k]
            up = df['factor'].quantile(0.999)
            down = df['factor'].quantile(0.001)
            df['money'] = np.where(df['factor'] > up, df['mid'], 0.0)
            df['money'] = np.where(df['factor'] < down, -df['mid'],
                                   df['money'])
            for i in df['money'].tolist():
                if abs(i) > 1:
                    self.tr.RegisterOneTrade('ni8888', 1 if i > 0 else -1,
                                             abs(i))
        self.tr.Summary()
        self.tr.PlotStratRawPnl(show=True)
        self.tr.PlotStratPnl(show=True)

    def PlotFactor(self):
        plt.plot(self.f_value, label='factor value')
        plt.title('factor value curve')
        plt.legend()
        plt.grid()
        plt.show()

    def CalFactor(self):
        for k in sorted(self.m.keys()):
            df = self.m[k]
            df['factor'] = self.cal(df)
            self.f_value += df['factor'].tolist()

    @abstractmethod
    def cal(self, df):
        pass

    def LoadData(self, start_date, end_date, ticker):
        dl = dateRange(start_date, end_date)
        m = {}
        for date in dl:
            path = '/root/' + date + '/' + ticker + '.csv'
            if os.path.exists(path):
                m[date] = self.ReadData(date, ticker)
            else:
                print("%s not existed!" % (path))
        return m

    def ReadData(self, date, ticker):
        path = '/root/' + date + '/' + ticker + '.csv'
        df = pd.read_csv(path, header=None)
        df.columns = shot.get_columns()
        df['mid'] = (df['asks[0]'] + df['bids[0]']) / 2
        df['return1'] = df['mid'].diff(1).fillna(0.0) / df['mid']
        return df
Пример #30
0
import DataRetriever as dr
import Trader as tr

if __name__ == '__main__':
    # api token 股票代码 起始日期 结束日期 数据存储名
    data_retriever = dr.DataRetriever(
        token='efb2687234ab87799580e022f544e5f28da8c17be5152b8c6819784a',
        code='600519.SH',
        start='20180101',
        end='20210403',
        file_name='MaoTai.json')
    data_retriever.create_json_file()

    # 读取json文件名 初始资本 股票名称
    trader = tr.Trader('MaoTai.json', 10000000.0, '贵州茅台')
    trader.trade()