예제 #1
0
    def testReadScoring(self):
        self.maxDiff = None
        exp_scoring = {'passing_yds': .04,
                       'passing_tds': 4,
                       'passing_int': -2,
                       'passing_twoptm': 2,
                       'rushing_yds': .1,
                       'rushing_tds': 6,
                       'rushing_att': 0,
                       'rushing_twoptm': 2,
                       'receiving_yds': .1,
                       'receiving_tds': 6,
                       'receiving_rec': 0,
                       'receiving_twoptm': 2,
                       "puntret_tds": 6,
                       "kickret_tds": 6,
                       'fumbles_tot': -2,
                       'kicking_fgm': 3,
                       'kicking_fgmissed': -1,
                       'kicking_xpmade': 1,
                       'kicking_xpmissed': -1}
        scoring = STD
        self.assertEqual(scoring, exp_scoring)

        exp_scoring['receiving_rec'] = 0.5
        scoring = Trade.extend_scoring_file(TestData('standard.json'), TestData('halfppr_ext.json'))
        self.assertEqual(scoring, exp_scoring)

        with self.assertRaises(Trade.NotEnoughRulesError):
            Trade.read_scoring_file(TestData('notenoughrules.json'))
예제 #2
0
def make_trade(trade):
    num_teams = len(trade)
    teams = []
    for i in range(0, num_teams):
        team_name = trade[i][0]
        players_out = trade[i][1]
        players_in = trade[i][2]

        team = Team(team_name)
        team.players_out = players_out
        team.players_in = players_in

        teams.append(team)

    trade = Trade(teams)
    for t in trade.teams:
        t.calc_money_in()
        t.calc_money_out()

    decisions = []
    for t in trade.teams:
        decision, msg = trade.check_trade(t)
        decisions.append(decision)

    final_decision = trade.finalize_trade(decisions)
    print(final_decision)
예제 #3
0
    def testAverageLists(self):
        a = [1.0, 2.0, 3.0]
        b = [5.0, 4.0, 3.0]
        c = [3.0, 8.0, 3.0]
        self.assertEqual(Trade.average_lists(a, b, c), [3.0, 4.0, 3.0])

        lists = [[10, 20], [30, 5], [8, 6], [9, 9], [1, 50]]
        self.assertEqual(Trade.average_lists(*lists), [9.0, 11.67])

        a = [2.5, 3.0, 3.5]
        b = [20, 30]
        self.assertEqual(Trade.average_lists(a, b), [11.25, 16.5])
예제 #4
0
    def getSchedule(self, sid, ordersize, alg):
        if hd.updateStock(str(sid)) != 0:
            self.sidNotExsist.emit()
            return

        trade_style = 0  # not implemented yet
        self.schedPrepared.emit(td.tradeStock(sid, int(ordersize), trade_style, alg))
예제 #5
0
def parse_trades(trade_path):
    trade_list = []
    with open(trade_path, 'r') as f:
        # Throw away first 36 lines
        for num in range(1, 37):
            f.readline()

        for line in f:
            open_data = line.split()

            side = open_data[2]

            if open_data[3] == 'Close':
                open_price = float(open_data[9])
            else:
                open_price = float(open_data[6])

            close_data = f.readline().split()

            if len(close_data) < 4:
                break

            if close_data[2] == 'Close':
                close_price = float(close_data[8])
            else:
                close_price = float(close_data[5])

            trade_list.append(
                Trade.Trade(side=side,
                            open_price=open_price,
                            close_price=close_price))
    return trade_list
예제 #6
0
    def run(self):
        self.model_history = np.empty((self.n_periods, ), dtype=Model)
        for i in range(self.n_periods):
            sequence = self.ts[i:i + self.n_train]
            self.__fit_model_to_sequence(
                sequence, None) if i == 0 else self.__fit_model_to_sequence(
                    sequence, self.model_history[i - 1].params.to_array())
            self.model_history[i] = deepcopy(self.model)

            self.trade_logic.update_logic(self.model_history[i], sequence)

            if self._is_trade_open():
                self.trade_history[-1].add_position(
                    i, sequence[-1]
                )  # 'sequence' must be the log_return of the original TS !
                if self.trade_logic.close_trade():
                    self.trade_history[-1].close()
            else:
                if self.trade_logic.open_trade():
                    self.trade_history.append(
                        Trade(i + 1)
                    )  # '+1' since the trade is actually opened the next period
                    # Check if last 'Trade' is empty
        self.__compute_PnL()
        self.PnL_statistics = Statistics(self.PnL)
예제 #7
0
    def setUp(self):
        '''登录followme系统'''
        #生产 十年一剑1688
        self.login = '******'
        self.brokerID = 5
        curr_tiem = datetime.datetime.now() + datetime.timedelta(days=-1)
        self.yesterDay = curr_tiem.strftime('%Y-%m-%d 00:00:00.000')

        mongoDB = FMCommon.mongoDB_operater_data(host=statisticData["mongo_host"], port=statisticData["mongo_port"],)
        for i in mongoDB.fm.mg_test_result_all.find({"login":self.login}):
            self.mongoList = {}
            for key in statisticData["mongoKeyListAll"]:
                try:
                    value = i[key]
                    # print("88888888888888888")
                    # print(i,'>>>>>>>>>>>>>>>>>>',i[key])
                except KeyError:
                    value = statisticData["keyErr"]

                self.mongoList[key]=value
                # print(self.mongoList[key],value)
        params = {"time":7,"pageField":"Score","pageSort":"DESC"}
        self.rankTraders = Trade.getRankTraders(webAPIData['hostName_dev'] + tradeData['getRankTraders_url'],params=params,printLogs=1)
        self.assertEqual(self.rankTraders.status_code, webAPIData['status_code_200']) 
        # key = []
        #遍历items里面所有的数据
        for i in json.loads(self.rankTraders.text)["data"]["items"]:
            # 遍历items里面所有的key,value
            if i["NickName"] =="萬丈豪情":
예제 #8
0
    def setUpClass(cls):
        time = datetime.datetime.strptime("2012-07-02T12:03:22",
                                          "%Y-%m-%dT%H:%M:%S")
        cls.faketrade = Trade.Trade(time, 13.97, 137)

        cls.fakestart = datetime.datetime.strptime("2005-07-02T12:03:22",
                                                   "%Y-%m-%dT%H:%M:%S")
        cls.fakeend = datetime.datetime.strptime("2030-07-02T12:03:22",
                                                 "%Y-%m-%dT%H:%M:%S")

        cls.fakefile = "2017-03-01T13:37:89Z 21.37 100\n" + \
                       "2017-04-25T17:11:55Z 20.18 55\n" + \
                       "2017-05-19T05:49:34Z 23.09 21\n" + \
                       "2017-06-12T09:51:21Z 17.21 80000"

        cls.otherfakefile = "2010-03-01T13:37:12Z 11 19\n" + \
                            "2011-04-25T17:11:55Z 12 47\n" + \
                            "2011-13-25T17:11:55Z 23 89\n" + \
                            "2012-05-19T05:49:34Z 13 56\n" + \
                            "2013-05-19T05:49:34Z 14 65\n" + \
                            "2013-05-19T05:49:63Z 14 65\n" + \
                            "2014-05-19T05:49:34Z 15 47\n" + \
                            "2015-05-19T05:49:34Z 16 36\n" + \
                            "2016-05-19T05:49:34Z 17 20\n" + \
                            "2017-05-19T05:49:34Z 18 10\n" + \
                            "2019-05-19T05:49:34Z 19 10\n" + \
                            "2019-06-12T09:51:21Z 20 6"
예제 #9
0
    def startBacktest(self):
        for index, datapoint in enumerate(self.relevantData):
            self.setDataChunk(index, self.strat_args['period'])
            if self.currTrade:
                indication, study = self.strategy.main(
                    self.relDataChunk, self.currTrade.getIsOpen(),
                    self.currTrade.getIsLong(), self.strat_args)
            else:
                indication, study = self.strategy.main(self.relDataChunk,
                                                       False, None,
                                                       self.strat_args)

            if indication:
                if indication.startswith("enter"):
                    self.studies.append(study)
                    self.currTrade = Trade.Trade(index)
                    self.trade(indication, index)
                else:
                    self.studies.append(study)
                    self.trade(indication, index)

            elif self.currTrade:
                self.studies.append(study)

                if self.currTrade.getIsOpen() and self.hitStopLevel(index):
                    if self.currTrade.getIsLong():
                        self.trade(self.EXIT_LONG, index)
                    else:
                        self.trade(self.EXIT_SHORT, index)

            else:
                self.studies.append(study)
예제 #10
0
    def test_BatchClose(self):
        '''登录->切换到MT4账号->获取交易token->创建多个开仓订单>批量平仓->退出登录'''
        userData['headers'][userData['Authorization']] = userData['Bearer'] + self.token

        # 获取交易员的accountindex
        self.tradeAccountIndex= Account.getSpecialAccountIndex(headers=userData['headers'], brokerID=5)

        # 切换到MT4账号
        switchAccountRes = Account.switchAccount(userData['hostName'] + userDataAccount['switchAccount'],
                                                 userData['headers'], self.tradeAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code, userData['status_code_200'])

        # 获取交易token
        getTokenRes = Trade.getToken(userData['hostName'] + userDataAccount["getToken_url"], userData['headers'])
        FMCommon.printLog('getTokenRes: ' + getTokenRes.text)
        self.assertEqual(getTokenRes.status_code, userData['status_code_200'])
        tradeToken = str(json.loads(getTokenRes.content)["data"]["Token"]).replace("=", "@")

        # 开仓500张单
        openOrderList = []
        count = 0
        while count < 2:
            openParam = {userDataWebSocket['orderParam_code']: userDataWebSocket['ws_code_210'],
                         userDataWebSocket['orderParam_symbol']: "AUDCAD",
                         userDataWebSocket['orderParam_volume']: 1}
            openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
                self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'], {'token': "" + tradeToken}, openParam)
            if(openPositionRes["code"]==userDataWebSocket['ws_code_0']):
                self.assertEqual(openPositionRes["rcmd"], userDataWebSocket['ws_code_210'])
                self.assertEqual(openPositionRes["order"]["volume"], 1)
                self.assertEqual(openPositionRes["order"]["symbol"], "AUDCAD")
                self.orderID = openPositionRes["order"]["order_id"]
                openOrderList.append(self.orderID)
            if (openPositionRes["code"] == 4):
                print("保证金不足!")
            if (openPositionRes["code"] == 10):
                print("市场关闭!")
            if (openPositionRes["code"] == 300):
                print("服务器内部错误!")
            if (openPositionRes["code"] == 3):
                print("客户不存在!")
            if (openPositionRes["code"] == 7):
                print("获取价格失败!")
            if (openPositionRes["code"] == 9):
                print("手数错误!")
            if (openPositionRes["code"] == 18):
                print("此品种不能交易!")
            count = count + 1

        time.sleep(2)
        #批量平仓
        closeOrder = {userDataWebSocket['orderParam_code']: userDataWebSocket['ws_code_219'],
                              userDataWebSocket['orderParam_tickets']: openOrderList}
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'], {'token': "" + tradeToken}, closeOrder)
        self.assertEqual(closeOrderRes["code"], userDataWebSocket['ws_code_0'])
        self.assertEqual(closeOrderRes["rcmd"], userDataWebSocket['ws_code_219'])
        self.assertEqual(closeOrderRes["tickets"], None)
예제 #11
0
    def test_DeleteOrdersByFxcm(self):
        '''登录->切换到福汇账号->获取交易token->检查持仓单列表是否有单,如果有单批量平仓>退出登录'''
        userData['headers'][
            userData['Authorization']] = userData['Bearer'] + self.token
        # 获取交易员的accountindex
        self.tradeAccountIndex_fxcm = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=4)
        # 切换到MT4账号
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.tradeAccountIndex_fxcm[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])

        # 获取交易token
        getTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        FMCommon.printLog('getTokenRes: ' + getTokenRes.text)
        self.assertEqual(getTokenRes.status_code, userData['status_code_200'])
        tradeToken = str(json.loads(
            getTokenRes.content)["data"]["Token"]).replace("=", "@")
        '''获取当前用户的所有交易订单,并平掉'''
        params = {
            userData['orderStatus']: userData['orderStatus_open'],
            "view": "TRADER"
        }
        getOrders = Order.getOrders(userData['hostName'] +
                                    orderData['getOrders_url'],
                                    userData['headers'],
                                    params=params)
        # 获取订单成功,返回200 ok
        self.assertEqual(getOrders.status_code, userData['status_code_200'])
        ordersIDList = Order.getOrdersID(getOrders)
        print("ordersIDList:", ordersIDList)

        time.sleep(2)
        # 平掉当前用户所有订单,如果有
        # #web sockets批量平仓
        closeParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_219'],
            userDataWebSocket['orderParam_tickets']: ordersIDList
        }
        closePositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': tradeToken}, closeParam)
        if (closePositionRes["code"] == userDataWebSocket['ws_code_0']):
            # 校验code等于0,为及时单平仓成功
            # 校验rcmd等于210,为及时单开仓
            self.assertEqual(closePositionRes["rcmd"],
                             userDataWebSocket['ws_code_219'])
            # 校验平掉的单号,为本测试及时单开仓的单号
            self.assertEqual(closePositionRes['success_tickets'], ordersIDList)
        if (closePositionRes["code"] == 13):
            print("订单不存在!")
예제 #12
0
 def testCheck(self):
     return
     db = nfldb.connect()
     calc = Trade.Calculator(PURE)
     q = nfldb.Query(db)
     q.game(season_year=2009, season_type='Regular')
     rushers = q.sort('rushing_yds').limit(100).as_aggregate()
     receivers = q.sort('receiving_yds').limit(100).as_aggregate()
     passers = q.sort('passing_yds').limit(35).as_aggregate()
     players = Trade.aggpps_to_players(rushers + receivers + passers)
     for rec,yds in calc.sort_position_more(players, 'TE'):
         print "{} {}".format(rec,yds)
예제 #13
0
    def test_Trade_initialization(self):
        time = datetime.datetime.strptime("2017-04-25T17:11:55",
                                          "%Y-%m-%dT%H:%M:%S")
        price = 27.36
        quantity = 73

        trade = Trade.Trade(time, price, quantity)

        self.assertEqual(
            trade.time,
            datetime.datetime.strptime("2017-04-25T17:11:55",
                                       "%Y-%m-%dT%H:%M:%S"),
            "The date does not match")
        self.assertEqual(trade.price, price, "The price does not match")
        self.assertEqual(trade.quantity, quantity,
                         "The quantity does not match")
예제 #14
0
파일: main.py 프로젝트: eapeyton/tradeaide
def trade():
    resp = flask.request.json
    to_give = resp['give'] if 'give' in resp else []
    they_bench = resp['they_bench'] if 'they_bench' in resp else []
    to_receive = resp['receive'] if 'receive' in resp else []
    i_bench = resp['i_bench'] if 'i_bench' in resp else []

    scoring = resp['scoring']
    for player in to_give + they_bench + to_receive + i_bench:
        player['expected'] = Trade.fast_guess_points(scoring.lower(),
                                                     player['name'].lower(), 
                                                     player['position'].lower())

    resp['my_net'] = round(sum_expected(to_receive) - sum_expected(i_bench), 2)
    resp['their_net'] = round(sum_expected(to_give) - sum_expected(they_bench), 2)
    resp['net'] = resp['my_net'] - resp['their_net']
    return flask.jsonify(**resp)
예제 #15
0
def process_trade(record):
    """ Returns a Trade object from a string of trade data (only accepts UTC 'Z' region code or none)

        Returns None if bad date data
        Also prints bad date to console

        Keyword Arguments:
        record -  A string in the format 2017-04-25T17:11:55Z 20.18 55
    """

    # Takes out the Zulu region code
    tradeline = record.split("Z")

    try:
        time = datetime.datetime.strptime(tradeline[0], "%Y-%m-%dT%H:%M:%S")
    except ValueError:
        print("Cannot format Date/Time from " + record)
        return

    trades = tradeline[1].strip().split(" ")
    trade = Trade.Trade(time, float(trades[0]), int(trades[1]))
    return trade
예제 #16
0
    def test_AnalogAccountTotalvolume(self):
        '''验证模拟账号最大持仓为3手'''
        userData['headers'] = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.token})

        # 获取模拟账户的accountindex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=3, accountType=0)

        #模拟账号切换账户
        Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.tradeAccountIndex[0])

        # 获取模拟账号交易token
        traderTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        self.assertEqual(traderTokenRes.status_code,
                         userData['status_code_200'])
        tradeToken = str(json.loads(
            traderTokenRes.content)["data"]["Token"]).replace("=", "@")

        # 模拟账号开仓
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']:
            userDataWebSocket['broker_EURCAD'],
            userDataWebSocket['orderParam_volume']:
            3100
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        self.assertEqual(openPositionRes["code"], 19)
        print("模拟账号最大持仓为3手!")
예제 #17
0
    def testTest(self):
        return
        db = nfldb.connect()
        q = nfldb.Query(db)

        uplayers = set()
        for year in range(2009, 2015):
            q = nfldb.Query(db)
            q.game(season_year=year, season_type='Regular')
            for stat in ['receiving_yds']:
                aggpps = q.sort(stat).limit(85).as_aggregate()
                for aggpp in aggpps:
                    if str(aggpp.player.position) == 'UNK':
                        uplayers.add(aggpp.player.full_name)

        d = collections.OrderedDict()
        for player in uplayers:
            if not Trade.get_position(player):
                first_name = player.split(' ')[0]
                last_name = player.split(' ')[1]
                print 'http://www.pro-football-reference.com/players/{}/{}{}00.htm'.format(last_name[0], last_name[:4], first_name[:2])
                d[player] = 'WR'

        print json.dumps(d)
    def EveryMarketOpen(self):
        for ticker in self.tickers:
            # Initialize
            model_name = "HMM_" + str(ticker)
            model = self.models[model_name]
            data_point = self.Securities[ticker].Price

            if data_point > 0:
                # HMM Prediction Results
                regime = model.predict_regime(data_point)
                mean = model.get_regime_mean(regime)
                transition_probabilities = model.get_transition_probabilities(
                    regime)

                current_stock_price = data_point
                self.ratio[model_name] = self.predicted_price[
                    model_name] / current_stock_price

                # Prediction
                trading = Trade(regime, mean, current_stock_price,
                                self.cash_amount[model_name],
                                transition_probabilities,
                                self.risk[model_name],
                                self.Portfolio[ticker].Invested)
                self.predicted_price[model_name] = trading.predicted_price

                amount_to_trade = 0
                number_of_shares = 0

                # Buying/Selling
                if trading.should_buy():
                    amount_to_trade = trading.bullish()
                    number_of_shares = amount_to_trade // self.Securities[
                        ticker].Price
                elif trading.should_sell():
                    amount_to_trade = trading.bearish()
                    number_of_shares = -amount_to_trade // self.Securities[
                        ticker].Price
                else:
                    print("For 3 Regime System - Stationary Regime")

                # Order
                self.MarketOrder(ticker, number_of_shares)
예제 #19
0
    # symbol = LTCBTC & type = LIMIT & side = BUY & timeInForce = GTC & quantity = 1 & price = 0.1 & recvWindow = 5000
    response = bApi.testNewOrder(symbol="BTCUSDT",
                                 type="MARKET",
                                 side="BUY",
                                 quantity="0.0002",
                                 recvWindow="5000")
    # response = bApi.accountInformation(recvWindow="5000")
    print(json.loads(response.text))
    # infoList = json.loads(response.text)
    # print(infoList[1])
    # for key in infoList:
    #     print(key)
    #     print(infoList[key])
    #     print("----")
    # print(len(json.loads(response.text)["balances"]))
    # print(len(json.loads(response.text)))

    trade = Trade()

    # curTradeTime = trade.getLatest15Min(time.time())
    # print(curTradeTime)

    # response = bApi.Kline(symbol="BNBUSDT", interval="15m", startTime=str(1618805700) + "000", limit="2")
    # kLineInfoList = json.loads(response.text)
    # print(response)
    # print(json.loads(response.text))

    while (1):
        trade.tradeAsPolicy03("BNB", 20, 0)
    # print(trade.tradeAsPolicy03("BNB", 10))
예제 #20
0
파일: main.py 프로젝트: TechieJ/letsinvent
            "Trade Price": [100, 1000, 150, 299, 478, 3874, 4000, 4100],
            "Trade Time": [datetime.now(), '2019-09-18 00:01:10.790865', datetime.now(), datetime.now(), datetime.now(),
                           datetime.now(), datetime.now(), datetime.now()]
        }

        trade_data_df = pd.DataFrame(trade_data)

        mytrade_list = []  # this will have all of the trade objects class as list.
        object_count = 0  # No of trade class objects. Initializing to 0.

        # Iterating over trade data dataframe. Creating trade objects and adding to object lists.

        # Below loop will dynamically setup trade class objects and add data present in the trade_data_df dataframe to stocks class.

        for index, rows in trade_data_df.iterrows():
            my_trade = Trade.Trade(rows['Stocks'])
            mytrade_list.append(my_trade)

            mytrade_list[object_count].set_quantity(rows['Quantity'])
            mytrade_list[object_count].set_bs_indicator(rows['BS Indicator'])
            mytrade_list[object_count].set_trade_price(rows['Trade Price'])
            mytrade_list[object_count].set_trade_time(rows['Trade Time'])

            object_count += 1

        all_stock_trades = TradingOutputs.TradingOutputs()
        all_stock_trades.record_trades(mytrade_list)
        print('Trades Recorded:\n', all_stock_trades.trade_df)

        stocks_traded = list(all_stock_trades.trade_df['StockSymbol'].unique())
        print('Stocks Traded:', stocks_traded)
예제 #21
0
 def testSuffix(self):
     self.assertEqual(Trade.suffix(1), 'st')
     self.assertEqual(Trade.suffix(8), 'th')
     self.assertEqual(Trade.suffix(22), 'nd')
     self.assertEqual(Trade.suffix(133), 'rd')
     self.assertEqual(Trade.suffix(1891), 'st')
예제 #22
0
    def test_CreateProductToEndProduct(self):
        '''场景步骤:1,交易员登录2,交易员创建产品并验证产品信息3,登录OA4,OA审核产品通过5,获取产品信息,并验证产品状态6,跟随者登录
        7,跟随者参与产品(2个跟随者)8,OA修改产品开始时间 9,交易员开仓10,交易员平仓11,OA结束产品12,获取交易员的订单列表,验证交易员
        的收益和盈亏点数13,获取跟随者的订单列表,验证跟随者的收益和盈亏点数14,验证产品状态为已结束15,验证产品的结算数据16,退出登录 '''
        # 获取今天
        today = datetime.date.today()

        # 获取3天后转为时间戳
        tomorrow = today + datetime.timedelta(days=3)
        timeArray_tomorrow = time.strptime(str(tomorrow), "%Y-%m-%d")
        timeStamp_tomorrow = int(time.mktime(timeArray_tomorrow))

        # 获得6天后转为时间戳
        after_tomorrow = today + datetime.timedelta(days=6)
        timeArray_after_tomorrow = time.strptime(str(after_tomorrow),
                                                 "%Y-%m-%d")
        timeStamp_after_tomorrow = int(time.mktime(timeArray_after_tomorrow))

        userData['headers'][
            userData['Authorization']] = userData['Bearer'] + self.traderToken

        self.followHeaders = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.token})

        # 获取交易员的accountindex
        self.tradekvbminiAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=6, accountType=3)

        # 获取跟随者的accountindex
        self.followerkvbminiAccountIndex = Account.getSpecialAccountIndex(
            headers=self.followHeaders, brokerID=6, accountType=3)

        #交易员创建产品
        datas = {
            "accountIndex": self.tradekvbminiAccountIndex[0],
            "name": "testCI" + str(int(time.time())),
            "description": "testmamonci",
            "profitModeID": 1,
            "retreatModeID": 2,
            "expectROI": 0.3,
            "expectFollowerCount": 2,
            "expectDays": 1,
            "expectStartTime": timeStamp_tomorrow,
            "expectEndTime": timeStamp_after_tomorrow,
            "isShowHistoryOrder": True,
            "signature": "test"
        }

        CreateProductRes = MAM.createProduct(
            userData['hostName'] + userDataMam['createProduct_url'],
            userData['headers'], datas)

        self.assertEqual(CreateProductRes.status_code,
                         userData['status_code_200'])
        #返回产品ID
        self.product_id = json.loads(CreateProductRes.text)['data']['ID']
        #返回创建人的UserID
        self.createrUserId = int(
            json.loads(CreateProductRes.text)['data']['Trader']['UserID'])
        # 返回产品Name
        self.product_name = json.loads(CreateProductRes.text)['data']['Name']

        self.headerOA = {
            'content-type': 'application/json',
            'Accept': 'application/json',
            'Authorization': 'Bearer ' + str(self.tokenOA)
        }

        #查询产品自增长ID
        select_id_sql = 'SELECT id from t_product_propose WHERE product_id=' + str(
            self.product_id)
        idRES = FMCommon.mysql_operater(userData['beta_mysql_host'],
                                        userData['beta_mysql_port'],
                                        userData['beta_mysql_db'],
                                        userData['beta_mysql_user'],
                                        userData['beta_mysql_passwd'],
                                        select_id_sql)
        for mtuple in idRES:
            for item in mtuple:
                id = item
        time.sleep(10)

        #OA审核产品通过
        ProductProposeActiondatas = {
            "Action": 0,
            "ProductProposeID": id,
            "DeclineReason": "",
            "ProposerUserID": self.createrUserId
        }
        ProductProposeActionRes = MAM.ProductProposeAction(
            userData['hostNameOA'] + userDataMam['ProductProposeAction_url'],
            self.headerOA, ProductProposeActiondatas)

        self.assertEqual(ProductProposeActionRes.status_code,
                         userData['status_code_200'])
        time.sleep(5)

        #获取产品信息
        GetProductRES = MAM.GetProduct(
            userData['hostName'] + userDataMam['getProduct_url'] +
            str(self.product_id), userData['headers'])

        self.assertEqual(GetProductRES.status_code,
                         userData['status_code_200'])

        #验证产品状态为"发布中"
        self.product_status = json.loads(GetProductRES.text)['data']['Status']
        self.assertEqual(self.product_status, "Pending")

        #跟随者参与产品(第一个跟随者)
        datas = {
            "accountIndex": self.followerkvbminiAccountIndex[0],
            "signature": "test1"
        }
        joinProductRES = MAM.JoinProduct(
            userData['hostName'] + userDataMam['joinProduct_url'] +
            str(self.product_id) + userDataMam['joinProduct_join_url'],
            self.followHeaders, datas)

        self.assertEqual(joinProductRES.status_code,
                         userData['status_code_200'])

        #跟随者参与产品(第二个跟随者)
        datas = {
            "accountIndex": self.followerkvbminiAccountIndex[1],
            "signature": "test2"
        }
        joinProductRES = MAM.JoinProduct(
            userData['hostName'] + userDataMam['joinProduct_url'] +
            str(self.product_id) + userDataMam['joinProduct_join_url'],
            self.followHeaders, datas)

        self.assertEqual(joinProductRES.status_code,
                         userData['status_code_200'])
        time.sleep(5)

        # 获取一分钟后
        TimeNowAfterOneMinute = (
            datetime.datetime.now() +
            datetime.timedelta(minutes=1)).strftime("%Y-%m-%d %H:%M:%S")

        # 切换到交易员账户
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.tradekvbminiAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])

        # 获取交易token
        getTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        self.assertEqual(getTokenRes.status_code, userData['status_code_200'])
        tradeToken = str(json.loads(
            getTokenRes.content)["data"]["Token"]).replace("=", "@")
        traderMT4Account = str(
            json.loads(getTokenRes.content)["data"]["MT4Account"])

        # 人数达标后,修改产品开始时间
        updatePendingProductdatas = {
            "Account":
            self.traderNickName + traderMT4Account + "#" +
            self.tradekvbminiAccountIndex[0],
            "Description":
            "testmamonci",
            "ExpectDays":
            1,
            "ExpectFollowerCount":
            2,
            "ExpectROI":
            0.3,
            "ExpectStartTime":
            TimeNowAfterOneMinute,
            "IsShowHistoryOrder":
            True,
            "Mt4Account":
            traderMT4Account,
            "Name":
            self.product_name,
            "ProductID":
            self.product_id,
            "Productstatus":
            "1",
            "ProfitModeID":
            1,
            "RetreatModeID":
            2
        }
        updatePendingProductRES = MAM.updatePendingProduct(
            userData['hostNameOA'] + userDataMam['UpdatePendingProduct_url'],
            self.headerOA, updatePendingProductdatas)

        self.assertEqual(updatePendingProductRES.status_code,
                         userData['status_code_200'])

        time.sleep(100)
        openOrderList = []
        count = 0
        while count < 3:
            #交易员开仓
            openParam = {
                userDataWebSocket['orderParam_code']:
                userDataWebSocket['ws_code_210'],
                userDataWebSocket['orderParam_symbol']:
                "AUDCAD",
                userDataWebSocket['orderParam_volume']:
                1
            }
            openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
                self, userDataWebSocket['ws_host'],
                userDataWebSocket['ws_port'], {'token': "" + tradeToken},
                openParam)
            self.assertEqual(openPositionRes["code"],
                             userDataWebSocket['ws_code_0'])
            self.assertEqual(openPositionRes["rcmd"],
                             userDataWebSocket['ws_code_210'])
            self.orderID = openPositionRes["order"]["order_id"]
            openOrderList.append(self.orderID)
            count = count + 1

        time.sleep(15)
        # 批量平仓10张
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_219'],
            userDataWebSocket['orderParam_tickets']: openOrderList
        }
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)
        self.assertEqual(closeOrderRes["code"], userDataWebSocket['ws_code_0'])
        self.assertEqual(closeOrderRes["rcmd"],
                         userDataWebSocket['ws_code_219'])
        time.sleep(15)

        #在OA里结束产品
        ProductEnddatas = {
            "ProductID":
            self.product_id,
            "Name":
            self.product_name,
            "Account":
            self.traderNickName + traderMT4Account + "#" +
            self.tradekvbminiAccountIndex[0],
            "Mt4Account":
            traderMT4Account,
            "BrokerID":
            6,
            "Productstatus":
            2,
            "Remark":
            "end"
        }
        productEndOARES = MAM.productEndOA(
            userData['hostNameOA'] + userDataMam['ProductEnd_url'],
            self.headerOA, ProductEnddatas)

        self.assertEqual(productEndOARES.status_code,
                         userData['status_code_200'])
        time.sleep(3)

        #获取产品的交易员的订单列表
        getTraderProductOrdersRES = MAM.getProductOrders(
            userData['hostName'] + userDataMam['getProductOrders_url'] +
            str(self.product_id) + userDataMam['getProductOrders_orders_url'] +
            "?my=" + "false", userData['headers'])
        #获取交易员的收益和盈亏点数

        self.assertEqual(getTraderProductOrdersRES.status_code,
                         userData['status_code_200'])
        self.traderProfit = json.loads(
            getTraderProductOrdersRES.text)['data']['summary']['Profit']
        self.traderPips = json.loads(
            getTraderProductOrdersRES.text)['data']['summary']['Pips']

        #切换到第一个跟随者,获取跟随者收益
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            self.followHeaders, self.followerkvbminiAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])
        getFollowerProductOrdersRES = MAM.getProductOrders(
            userData['hostName'] + userDataMam['getProductOrders_url'] +
            str(self.product_id) + userDataMam['getProductOrders_orders_url'] +
            "?my=" + "true", self.followHeaders)

        self.assertEqual(getFollowerProductOrdersRES.status_code,
                         userData['status_code_200'])
        self.followerProfit_first = json.loads(
            getFollowerProductOrdersRES.text)['data']['summary']['Profit']
        self.followerPips_first = json.loads(
            getFollowerProductOrdersRES.text)['data']['summary']['Pips']

        #切换到第二个跟随者,获取跟随者的收益
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            self.followHeaders, self.followerkvbminiAccountIndex[1])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])
        getFollowerProductOrdersRES = MAM.getProductOrders(
            userData['hostName'] + userDataMam['getProductOrders_url'] +
            str(self.product_id) + userDataMam['getProductOrders_orders_url'] +
            "?my=" + "true", self.followHeaders)

        self.assertEqual(getFollowerProductOrdersRES.status_code,
                         userData['status_code_200'])
        self.followerProfit_second = json.loads(
            getFollowerProductOrdersRES.text)['data']['summary']['Profit']
        self.followerPips_second = json.loads(
            getFollowerProductOrdersRES.text)['data']['summary']['Pips']

        #如果是亏损的,交易员百分百赔付跟随者
        if self.followerProfit_first <= 0:
            self.traderProfit = self.traderProfit + self.followerProfit_first
            self.followerProfit_first = 0

        if self.followerProfit_second <= 0:
            self.traderProfit = self.traderProfit + self.followerProfit_second
            self.followerProfit_second = 0

        #如果是盈利,交易员二八分成
        if self.followerProfit_first > 0:
            self.traderProfit = self.traderProfit + self.followerProfit_first * 0.8
            self.followerProfit_first = self.followerProfit_first * 0.2

        if self.followerProfit_second > 0:
            self.traderProfit = self.traderProfit + self.followerProfit_second * 0.8
            self.followerProfit_second = self.followerProfit_second * 0.2

        #验证产品状态为已结束getProduct,并验证产品的结算数据
        GetProductRES = MAM.GetProduct(
            userData['hostName'] + userDataMam['getProduct_url'] +
            str(self.product_id), userData['headers'])

        self.assertEqual(GetProductRES.status_code,
                         userData['status_code_200'])
        # 验证产品状态为"已结束"
        self.product_status = json.loads(GetProductRES.text)['data']['Status']
        self.assertEqual(self.product_status, "Settled")
        # 验证参与人数
        self.assertEqual(
            json.loads(GetProductRES.text)['data']['FollowerCount'], 2)
        # 验证发起产品人的身份
        self.assertEqual(
            json.loads(GetProductRES.text)['data']['Trader']['Type'], "Trader")
        # 验证发起产品人的用户ID
        self.assertEqual(
            json.loads(GetProductRES.text)['data']['Trader']['UserID'],
            self.createrUserId)
        # 验证发起产品人的AccountIndex
        self.assertEqual(
            str(
                json.loads(
                    GetProductRES.text)['data']['Trader']['AccountIndex']),
            self.tradekvbminiAccountIndex[0])
        # 验证发起产品人的经纪商ID
        self.assertEqual(
            json.loads(GetProductRES.text)['data']['Trader']['BrokerID'], 6)
        # 验证交易员的分成收益
        self.assertAlmostEqual(json.loads(
            GetProductRES.text)['data']['MyProfit'],
                               self.traderProfit,
                               delta=100)
        # 验证跟随者的分成收益
        self.assertAlmostEqual(json.loads(
            GetProductRES.text)['data']['FollowerProfit'],
                               self.followerProfit_first,
                               delta=100)
        self.assertAlmostEqual(json.loads(
            GetProductRES.text)['data']['FollowerProfit'],
                               self.followerProfit_second,
                               delta=100)
예제 #23
0
def write_latest():
    for position in Trade.POSITIONS:
        for name, link in create_all_links(position):
            tsv_str = download_rankings(link)
            Trade.write_resource(get_filepath(name, position), tsv_str)
예제 #24
0
def get_ranking(scoring, player_name, position):
    tsv_str = Trade.get_resource(get_filepath(scoring, position))
    rankings = read_rankings(tsv_str)
    return rankings.index(player_name)
예제 #25
0
 def test_1_getCustomers(self):
     '''获取近一周有交易的跟随大师信息'''
     params = {"time": 7, "pageField": "FollowProfit"}
     customers = Trade.getCustomers(webAPIData['hostName'] +
                                    tradeData['getCustomers_url'],
                                    params=params,
                                    printLogs=1)
     self.assertEqual(customers.status_code, webAPIData['status_code_200'])
     print("Customers_oneWeek:")
     table = PrettyTable([
         "预期/实际", "NickName", "UserID", "mt4Account", "AccountIndex",
         "近一日跟随获利", "近一日盈亏点数", "收益率", "平均获利点数", "交易笔数", "交易周期"
     ])
     try:
         for item in json.loads(customers.text)["data"]["items"]:
             mt4Account = Statistic.getMt4Account(
                 userID=str(item["UserId"]),
                 accountIndex=str(item["AccountCurrentIndex"]))
             moneyFollowCloseDay = Statistic.moneyFollowCloseDay(
                 mt4Account=mt4Account, brokerID=item["BrokerId"])
             pointCloseDay = Statistic.pointCloseDay(
                 mt4Account=mt4Account, brokerID=item["BrokerId"])
             rateProfit = Statistic.rateProfit(mt4Account=mt4Account,
                                               brokerID=item["BrokerId"])
             pointProfitCloseMean = Statistic.pointProfitCloseMean(
                 mt4Account=mt4Account, brokerID=item["BrokerId"])
             ordersCount = Statistic.ordersCount(mt4Account=mt4Account,
                                                 brokerID=item["BrokerId"])
             tradePeriod = Statistic.tradePeriod(mt4Account=mt4Account,
                                                 brokerID=item["BrokerId"])
             table.add_row([
                 "预期结果", item["NickName"], item["UserId"], mt4Account,
                 item["AccountCurrentIndex"], moneyFollowCloseDay,
                 pointCloseDay, rateProfit, pointProfitCloseMean,
                 ordersCount, tradePeriod
             ])
             table.add_row([
                 "实际结果", item["NickName"], item["UserId"], mt4Account,
                 item["AccountCurrentIndex"], item["BizFollowProfit"],
                 item["BizPoint"], item["BizROIex"], item["BizAVGPoint"],
                 item["Orders"], item["Weeks"]
             ])
             table.add_row(["", "", "", "", "", "", "", "", "", "", ""])
             #由于非实时统计数据,实际结果存在误差。预期和实际正负差值小于等于DELTA都算断言通过
             self.assertAlmostEqual(moneyFollowCloseDay,
                                    float(item["BizFollowProfit"]),
                                    delta=1000000)
             self.assertAlmostEqual(pointCloseDay,
                                    float(item["BizPoint"]),
                                    delta=1000000)
             self.assertAlmostEqual(rateProfit,
                                    float(item["BizROIex"]),
                                    delta=1000000)
             self.assertAlmostEqual(pointProfitCloseMean,
                                    float(item["BizAVGPoint"]),
                                    delta=1000000)
             self.assertAlmostEqual(ordersCount,
                                    item["Orders"],
                                    delta=1000000)
             self.assertAlmostEqual(tradePeriod,
                                    item["Weeks"],
                                    delta=1000000)
     finally:
         table.reversesort = True
         print(table)
예제 #26
0
    def test_UpdatePendingOrder(self):
        '''登录->切换到MT4账号->获取交易token->新建一个挂单->修改挂单的止损止盈->退出登录'''
        userData['headers'][
            userData['Authorization']] = userData['Bearer'] + self.token
        # 获取交易员的accountindex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=5)
        # 切换到MT4账号
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.tradeAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])

        # 获取交易token
        getTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        FMCommon.printLog('getTokenRes: ' + getTokenRes.text)
        self.assertEqual(getTokenRes.status_code, userData['status_code_200'])
        tradeToken = str(json.loads(
            getTokenRes.content)["data"]["Token"]).replace("=", "@")

        # 开仓获取开仓价格
        openParam = {
            userDataWebSocket['orderParam_cmd']:
            userDataWebSocket['order_cmd'],
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']: "AUDCAD",
            userDataWebSocket['orderParam_volume']: 1
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        self.assertEqual(openPositionRes["code"],
                         userDataWebSocket['ws_code_0'])
        self.assertEqual(openPositionRes["rcmd"],
                         userDataWebSocket['ws_code_210'])
        self.orderID = openPositionRes["order"]["order_id"]
        self.price = openPositionRes["order"]["price"]

        # 建立挂单
        createPendParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_213'],
            userDataWebSocket['pendingParam_price']:
            self.price + userDataWebSocket['points'],
            userDataWebSocket['orderParam_symbol']:
            "AUDCAD",
            userDataWebSocket['pendingParam_volume']:
            1
        }
        createPendingRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, createPendParam)
        self.assertEqual(createPendingRes["code"],
                         userDataWebSocket['ws_code_0'])
        self.assertEqual(createPendingRes["rcmd"],
                         userDataWebSocket['ws_code_213'])
        self.assertEqual(createPendingRes["order"]["symbol"], "AUDCAD")
        self.assertEqual(createPendingRes["order"]["volume"], 1)
        self.pending = createPendingRes["order"]["order_id"]

        time.sleep(2)
        # 修改挂单(修改止损止盈)
        updatePendingParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_215'],
            userDataWebSocket['orderParam_sl']:
            self.price - userDataWebSocket['points'],
            userDataWebSocket['orderParam_sub_cmd']:
            userDataWebSocket['orderParam_subcmd'],
            userDataWebSocket['orderParam_symbol']:
            "AUDCAD",
            userDataWebSocket['orderParam_ticket']:
            self.pending,
            userDataWebSocket['orderParam_tp']:
            self.price + userDataWebSocket['tp_points'],
            userDataWebSocket['orderParam_volume']:
            userDataWebSocket['pending_volume']
        }
        createPendingRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, updatePendingParam)
        self.assertEqual(createPendingRes["code"],
                         userDataWebSocket['ws_code_0'])
        self.assertEqual(createPendingRes["rcmd"],
                         userDataWebSocket['ws_code_215'])
        self.assertEqual(createPendingRes["order"]["order_id"], self.pending)
        self.assertEqual(createPendingRes["order"]["volume"], 1)
        self.assertEqual(createPendingRes["order"]["symbol"], "AUDCAD")
        self.assertEqual(createPendingRes["order"]["cmd"],
                         userDataWebSocket['pending_cmd'])

        time.sleep(2)
        # 删除挂单
        deletePendParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_214'],
            userDataWebSocket['orderParam_ticket']: self.pending
        }
        deletePendRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, deletePendParam)
        self.assertEqual(deletePendRes["code"], userDataWebSocket['ws_code_0'])
        self.assertEqual(deletePendRes["rcmd"],
                         userDataWebSocket['ws_code_214'])
        self.assertEqual(deletePendRes["order"]["order_id"], self.pending)

        # 平仓
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_211'],
            userDataWebSocket['orderParam_ticket']: self.orderID,
            userDataWebSocket['orderParam_volume']: 1
        }
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)
        self.assertEqual(closeOrderRes["code"], userDataWebSocket['ws_code_0'])
        self.assertEqual(closeOrderRes["rcmd"],
                         userDataWebSocket['ws_code_211'])
        self.assertEqual(closeOrderRes['order']["order_id"], self.orderID)
        self.assertEqual(closeOrderRes["order"]["volume"], 1)
예제 #27
0
# -*- coding: utf-8 -*-
import os, sys, io, time
import pandas
import urllib
import re
import shutil
import numpy
import datetime
from numpy import *

INTERVAL_MINUTE = 5 #this number should be a divisor of 60
INTERVAL_NUM = 240 / INTERVAL_MINUTE
Train_day_num = 10
Read_data_day_num = 40

import HistoricalData
import Trade
import MySQL

if __name__ == '__main__':
    #stockID = raw_input("Enter the stockID you want to buy : ")
    stockID = 'sh601988'
    buy_num = 50
    trading_style = 0 #style: 0:normal 1:aggressive 2:passive
    HistoricalData.updateStock(stockID)
    Trade.tradeStock(stockID, buy_num, trading_style)
    #trainVWAP(stockID)
예제 #28
0
    def test_CheckFullStop(self):
        '''及时价开仓买入带止损止盈'''
        #sl返回时字符编码问题
        userData['headers'][
            userData['Authorization']] = userData['Bearer'] + self.token

        # 获取交易员的accountindex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=5)
        # 切换到MT4账号
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.tradeAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])

        # 获取交易token
        getTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        FMCommon.printLog('getTokenRes: ' + getTokenRes.text)
        self.assertEqual(getTokenRes.status_code, userData['status_code_200'])
        tradeToken = str(json.loads(
            getTokenRes.content)["data"]["Token"]).replace("=", "@")

        # 订单止损止盈 取audcad的l,a,b
        tpspParamRes_sl = TradeOnline.OnlineTradeEvent_sl.tradeEvent_sl(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken})
        l = tpspParamRes_sl['AUDCAD']['l']
        a = tpspParamRes_sl['AUDCAD']['a']
        b = tpspParamRes_sl['AUDCAD']['b']

        # 止盈 止盈值>= bid价格 + stop_level
        setTP = round(b + l * 0.00001, 5)
        setSL = round(b - l * 0.00001, 5)
        print("setTP:", setTP)
        print("setTP:", setSL)

        # 开仓买入,现价带止损止盈
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']: "AUDCAD",
            userDataWebSocket['orderParam_volume']: 1,
            userDataWebSocket['orderParam_cmd']: 0,
            userDataWebSocket['orderParam_sl']: setSL,
            userDataWebSocket['orderParam_tp']: setTP
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        if (openPositionRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(openPositionRes["rcmd"],
                             userDataWebSocket['ws_code_210'])
            self.assertEqual(openPositionRes["order"]["volume"], 1)
            self.assertEqual(openPositionRes["order"]["symbol"], "AUDCAD")
            self.orderID = openPositionRes["order"]["order_id"]
            self.price = openPositionRes["order"]["price"]
            self.tp = openPositionRes["order"]["tp"]
            self.sl = openPositionRes["order"]["sl"]
            self.assertNotEqual(0, self.tp, "止盈设置不成功")
            self.assertNotEqual(0, self.sl, "止损设置不成功")
        if (openPositionRes["code"] == 4):
            print("保证金不足!")
        if (openPositionRes["code"] == 10):
            print("市场关闭!")
        if (openPositionRes["code"] == 300):
            print("服务器内部错误!")
        if (openPositionRes["code"] == 3):
            print("客户不存在!")
        if (openPositionRes["code"] == 7):
            print("获取价格失败!")
        if (openPositionRes["code"] == 9):
            print("手数错误!")
        if (openPositionRes["code"] == 18):
            print("此品种不能交易!")
        if (openPositionRes["code"] == 8):
            print("止损止盈价格错误!")
예제 #29
0
import nfldb
import os
import unittest
import mock
import collections
import Trade
import json

def TestData(path):
    data = ''
    with open(os.path.join('testdata', path), 'r') as f:
        data = f.read()
    return data

STD = Trade.read_scoring_file(TestData('standard.json'))
PURE = Trade.read_scoring_file(TestData('pure.json'))

class PlayerDBTests(unittest.TestCase):
    def setUp(self):
        self.test_player1 = createQB(363, 1, 2, rushing_yds=3, rushing_att=1)
        self.test_player2 = createRB(57, 0, 11, receiving_rec=1, rushing_att=15)
        self.test_aggpps = [createPP('QB'), createPP('RB'), createPP('WR'),
                            createPP('TE'), createPP('RB'), createPP('RB')]


    def testAggPPToPlayer(self):
        playerDB = Trade.PlayerDB()
        db = nfldb.connect()
        q = nfldb.Query(db)
        q.game(gsis_id='2009091000')
예제 #30
0
 def testGetAverage(self):
     averages = Trade.get_averages('Standard', 'RB')
     self.assertEqual(averages[7], 200.2)
예제 #31
0
    def test_StandardVolumeConversion(self):
        '''KVB标准手转换,XAGCNY,XAGUSD,HSI43'''
        userData['headers'] = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.token})

        # 获取accountindex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=5)

        # 切换到MT4账号
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.tradeAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])

        # 获取交易token
        getTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        FMCommon.printLog('getTokenRes: ' + getTokenRes.text)
        self.assertEqual(getTokenRes.status_code, userData['status_code_200'])
        tradeToken = str(json.loads(
            getTokenRes.content)["data"]["Token"]).replace("=", "@")
        print("tradeToken:", tradeToken)

        # 开仓XAGCNY
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']: "XAGCNY",
            userDataWebSocket['orderParam_volume']: 50
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        if (openPositionRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(openPositionRes["code"],
                             userDataWebSocket['ws_code_0'])
            self.assertEqual(openPositionRes["rcmd"],
                             userDataWebSocket['ws_code_210'])
            self.assertEqual(openPositionRes["order"]["volume"], 50)
            self.assertEqual(openPositionRes["order"]["fm_volume"], 7.5)
            self.orderID = openPositionRes["order"]["order_id"]
        elif (openPositionRes["code"] == 4):
            print("保证金不足!")
        elif (openPositionRes["code"] == 10):
            print("市场关闭!")
        elif (openPositionRes["code"] == 300):
            print("服务器内部错误!")
        elif (openPositionRes["code"] == 3):
            print("客户不存在!")
        elif (openPositionRes["code"] == 7):
            print("获取价格失败!")
        elif (openPositionRes["code"] == 9):
            print("手数错误!")
        elif (openPositionRes["code"] == 18):
            print("此品种不能交易!")
        else:
            print("其它错误")

        # 获取当前用户的交易订单
        time.sleep(3)
        params = {userData['orderStatus']: userData['orderStatus_open']}
        getOrders = Order.getOrders(userData['hostName'] +
                                    order['getOrders_url'],
                                    userData['headers'],
                                    params=params)
        self.assertEqual(getOrders.status_code, userData['status_code_200'])
        ordersIDList = Order.getOrdersID(getOrders)
        self.assertIn(self.orderID, ordersIDList)

        # 平仓
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_211'],
            userDataWebSocket['orderParam_ticket']: self.orderID,
            userDataWebSocket['orderParam_volume']: 50
        }
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)
        if (closeOrderRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(closeOrderRes["rcmd"],
                             userDataWebSocket['ws_code_211'])
            self.assertEqual(closeOrderRes['order']["order_id"], self.orderID)
            self.assertEqual(closeOrderRes["order"]["volume"], 50)
            self.assertEqual(closeOrderRes["order"]["fm_volume"], 7.5)
        if (closeOrderRes["code"] == 13):
            print("订单不存在!")

        # 品种:XAGUSD
        # 开仓
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']: "XAGUSD",
            userDataWebSocket['orderParam_volume']: 50
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        if (openPositionRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(openPositionRes["code"],
                             userDataWebSocket['ws_code_0'])
            self.assertEqual(openPositionRes["rcmd"],
                             userDataWebSocket['ws_code_210'])
            self.assertEqual(openPositionRes["order"]["volume"], 50)
            self.assertEqual(openPositionRes["order"]["fm_volume"], 0.01)
            self.orderID = openPositionRes["order"]["order_id"]
        if (openPositionRes["code"] == 4):
            print("保证金不足!")
        if (openPositionRes["code"] == 10):
            print("市场关闭!")
        if (openPositionRes["code"] == 300):
            print("服务器内部错误!")
        if (openPositionRes["code"] == 3):
            print("客户不存在!")
        if (openPositionRes["code"] == 7):
            print("获取价格失败!")
        if (openPositionRes["code"] == 9):
            print("手数错误!")
        if (openPositionRes["code"] == 18):
            print("此品种不能交易!")

        # 获取当前用户的交易订单
        time.sleep(3)
        params = {userData['orderStatus']: userData['orderStatus_open']}
        getOrders = Order.getOrders(userData['hostName'] +
                                    order['getOrders_url'],
                                    userData['headers'],
                                    params=params)
        self.assertEqual(getOrders.status_code, userData['status_code_200'])
        ordersIDList = Order.getOrdersID(getOrders)
        self.assertIn(self.orderID, ordersIDList)

        # 平仓
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_211'],
            userDataWebSocket['orderParam_ticket']: self.orderID,
            userDataWebSocket['orderParam_volume']: 50
        }
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)
        if (closeOrderRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(closeOrderRes["rcmd"],
                             userDataWebSocket['ws_code_211'])
            self.assertEqual(closeOrderRes['order']["order_id"], self.orderID)
            self.assertEqual(closeOrderRes["order"]["volume"], 50)
            self.assertEqual(closeOrderRes["order"]["fm_volume"], 0.01)
        if (closeOrderRes["code"] == 13):
            print("订单不存在!")

        # 品种:HSI43
        # 开仓
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']: "HSI43",
            userDataWebSocket['orderParam_volume']: 100
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        if (openPositionRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(openPositionRes["code"],
                             userDataWebSocket['ws_code_0'])
            self.assertEqual(openPositionRes["rcmd"],
                             userDataWebSocket['ws_code_210'])
            self.assertEqual(openPositionRes["order"]["volume"], 100)
            self.assertEqual(openPositionRes["order"]["fm_volume"], 0.02)
            self.orderID = openPositionRes["order"]["order_id"]
        if (openPositionRes["code"] == 4):
            print("保证金不足!")
        if (openPositionRes["code"] == 10):
            print("市场关闭!")
        if (openPositionRes["code"] == 300):
            print("服务器内部错误!")
        if (openPositionRes["code"] == 3):
            print("客户不存在!")
        if (openPositionRes["code"] == 7):
            print("获取价格失败!")
        if (openPositionRes["code"] == 9):
            print("手数错误!")
        if (openPositionRes["code"] == 18):
            print("此品种不能交易!")

        # 获取当前用户的交易订单
        time.sleep(3)
        params = {userData['orderStatus']: userData['orderStatus_open']}
        getOrders = Order.getOrders(userData['hostName'] +
                                    order['getOrders_url'],
                                    userData['headers'],
                                    params=params)
        self.assertEqual(getOrders.status_code, userData['status_code_200'])
        ordersIDList = Order.getOrdersID(getOrders)

        self.assertIn(self.orderID, ordersIDList, ordersIDList)

        # 平仓
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_211'],
            userDataWebSocket['orderParam_ticket']: self.orderID,
            userDataWebSocket['orderParam_volume']: 100
        }
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)
        if (closeOrderRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(closeOrderRes["rcmd"],
                             userDataWebSocket['ws_code_211'])
            self.assertEqual(closeOrderRes['order']["order_id"], self.orderID)
            self.assertEqual(closeOrderRes["order"]["volume"], 100)
            self.assertEqual(closeOrderRes["order"]["fm_volume"], 0.02)
        if (closeOrderRes["code"] == 13):
            print("订单不存在!")
예제 #32
0
    def test_OpenAndCloseByKVB(self):
        '''切换KVB账户,获取任意交易品种,及时开仓,及时平仓,查询历史订单'''
        userData['headers'][
            userData['Authorization']] = userData['Bearer'] + self.token
        # 获取品种
        # getSymbolsRes = Trade.getAllSymbols(userData['hostName'] + userDataSocial["getAllSymbolsUrl"],userData['headers'],userData['full'])
        # FMCommon.printLog("getSymbolsRes", getSymbolsRes.text)
        # self.assertEqual(getSymbolsRes.status_code, userData['status_code_200'])
        # SymbolsItems = len(json.loads(getSymbolsRes.content)["data"]["items"])
        # self.assertTrue(SymbolsItems > userData['number'])
        # Symbols = json.loads(getSymbolsRes.content)["data"]["items"][userData['number']]["brokerSymbol"]

        # 获取交易员的accountindex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=5)
        # 切换到MT4账号
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.tradeAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])

        # 获取交易token
        getTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        FMCommon.printLog('getTokenRes: ' + getTokenRes.text)
        self.assertEqual(getTokenRes.status_code, userData['status_code_200'])
        tradeToken = str(json.loads(
            getTokenRes.content)["data"]["Token"]).replace("=", "@")

        # 开仓
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']: "AUDCAD",
            userDataWebSocket['orderParam_volume']: 1
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        if (openPositionRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(openPositionRes["rcmd"],
                             userDataWebSocket['ws_code_210'])
            self.assertEqual(openPositionRes["order"]["volume"], 1)
            self.orderID = openPositionRes["order"]["order_id"]
        elif (openPositionRes["code"] == 4):
            print("保证金不足!")
        elif (openPositionRes["code"] == 10):
            print("市场关闭!")
        elif (openPositionRes["code"] == 300):
            print("服务器内部错误!")
        elif (openPositionRes["code"] == 3):
            print("客户不存在!")
        elif (openPositionRes["code"] == 7):
            print("获取价格失败!")
        elif (openPositionRes["code"] == 9):
            print("手数错误!")
        elif (openPositionRes["code"] == 18):
            print("此品种不能交易!")
        else:
            print("其它错误")

        time.sleep(10)
        # 获取当前用户的交易订单
        params = {userData['orderStatus']: userData['orderStatus_open']}
        getOrders = Order.getOrders(userData['hostName'] +
                                    order['getOrders_url'],
                                    userData['headers'],
                                    params=params)
        self.assertEqual(getOrders.status_code, userData['status_code_200'])
        ordersIDList = Order.getOrdersID(getOrders)
        self.assertIn(self.orderID, ordersIDList)

        # 平仓
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_211'],
            userDataWebSocket['orderParam_ticket']: self.orderID,
            userDataWebSocket['orderParam_volume']: 1
        }
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)
        if (closeOrderRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(closeOrderRes["rcmd"],
                             userDataWebSocket['ws_code_211'])
            self.assertEqual(closeOrderRes['order']["order_id"], self.orderID)
            self.assertEqual(closeOrderRes["order"]["volume"], 1)
        if (closeOrderRes["code"] == 13):
            print("订单不存在!")
예제 #33
0
    def tradeForStar(self, myaccount, mypassword, myvolume):

        # 登录
        datas = {
            "account": myaccount,
            "password": mypassword,
            "remember": "false"
        }
        traderLoginRes = Auth.signin(
            userData['hostName'] + userDataAuth['signin_url'],
            userData['headers'], datas)
        token = json.loads(traderLoginRes.text)['data']['token']
        userData['headers'][
            userData['Authorization']] = userData['Bearer'] + token
        time.sleep(1)
        print('Account: ' + myaccount)
        # 切换到交易员账户
        Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], '2')
        time.sleep(1)
        print('switchAccount !!!' + userData['hostName'] +
              userDataAccount['switchAccount'])

        # 获取交易token
        getTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        tradeToken = str(json.loads(
            getTokenRes.content)["data"]["Token"]).replace("=", "@")

        # 开仓
        openPositionRes = ''
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']:
            userDataWebSocket['broker_EURCAD'],
            userDataWebSocket['orderParam_volume']:
            myvolume
        }

        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)

        #time.sleep(20)

        orderID = openPositionRes["order"]["order_id"]

        print('订单号: ' + str(orderID))

        # 平仓
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_211'],
            userDataWebSocket['orderParam_ticket']: orderID,
            userDataWebSocket['orderParam_volume']: myvolume
        }
        closePositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)

        #time.sleep(20)
        # print('xxxxxx',closePositionRes)
        return orderID
예제 #34
0
    def test_BatchFollowTrade(self):
        '''建立批量跟随->跟随下单->跟随平仓->查看跟随交易历史订单->取消跟随'''
        account = '500383407'  # 跟随者身份
        brokerID = 106
        symbol = 'AUDCAD'
        cmd = 0
        lots = 0.1

        userData['headers'] = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.token})
        self.traderHeaders = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.traderToken})

        # 获取交易员的accountindex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=self.traderHeaders, accountType=2, brokerID=106)

        # 获取跟随者的accountindex
        self.followerAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], accountType=2, brokerID=106)

        # 建立多个跟随
        createfollowList = []
        for i in self.followerAccountIndex:
            follower = FollowOperation.Operation.createFollow(
                self.traderUserId, self.tradeAccountIndex[0],
                userData['headers'], i)
            createfollowList.append(follower)
        print("创建跟随者:", createfollowList)

        # 交易员切换账户
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            self.traderHeaders, self.tradeAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])

        # 获取交易员MT4Account
        traderTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            self.traderHeaders)
        self.assertEqual(traderTokenRes.status_code,
                         userData['status_code_200'])
        TraderAccount = str(
            json.loads(traderTokenRes.content)["data"]["MT4Account"])

        # 循环开仓
        TradeIDList = []
        for i in range(0, 10):
            openRes = TradeSAM.TradeSAMStream.OpenPosition(stub=self.stub,
                                                           account=account,
                                                           brokerID=brokerID,
                                                           symbol=symbol,
                                                           cmd=cmd,
                                                           lots=lots)
            print(openRes)
            self.assertEqual(openRes.Signal.Symbol, symbol)
            tradeID = openRes.Signal.TradeID
            TradeIDList.append(tradeID)
        print(TradeIDList)

        # 循环平仓
        for i in TradeIDList:
            closeRes = TradeSAM.TradeSAMStream.ClosePosition(stub=self.stub,
                                                             account=account,
                                                             brokerID=brokerID,
                                                             tradeID=i,
                                                             lots=lots)
            print(closeRes)
            self.assertEqual(closeRes.Signal.TradeID, i)
            self.assertEqual(closeRes.Signal.Symbol, symbol)

        #  批量取消跟随者的跟随
        deletefollowList = []
        for j in self.followerAccountIndex:
            follower = FollowOperation.Operation.deleteFollow(
                self.traderUserId, self.tradeAccountIndex[0],
                userData['headers'], j)
            deletefollowList.append(follower)
        print("取消跟随者:", deletefollowList)

        # 验证交易员的跟随者订单
        followTraderid = []
        for i in TradeIDList:
            sql = "SELECT TradeID from t_followorder where TraderAccount=" + TraderAccount + " and TraderTradeID=" + str(
                i)
            row = FollowOperation.Operation.operationCopytradingDB(sql)
            self.assertIsNotNone(row['TradeID'], '跟随者订单号为空')
            followTraderid.append(str(row['TradeID']))
            self.assertTrue(
                len(followTraderid) >= len(self.followerAccountIndex))
예제 #35
0
        print("Passed test trade" + str(i))
    else:
        print("Failed test trade" + str(i))


#TEST 1: TOR [JV, LN] - MIA [GD] = successful
tor = Team("TOR")
mia = Team("MIA")
tor.players_out = [Player(8055, "TOR"), Player(13329, "TOR")]
mia.players_out = [Player(6146, "MIA")]

tor.players_in = mia.players_out
mia.players_in = tor.players_out

trade_teams = [tor, mia]
trade = Trade(trade_teams)
test_trade(1, trade, success)

#TEST 2: TOR[KL] - BOS[AH] = not successful (lowry resign restriction *as of 2017-09-08*)
tor = Team("TOR")
bos = Team("BOS")
tor.players_out = [Player(2536, "TOR")]
bos.players_out = [Player(2199, "BOS")]

tor.players_in = bos.players_out
bos.players_in = tor.players_out

trade_teams = [tor, bos]
trade = Trade(trade_teams)
test_trade(2, trade, fail)
예제 #36
0
    def test_1_getCustomers(self):
        '''获取近一周有交易的跟随大师信息'''
        params = {"time": 7, "pageField": "FollowProfit"}
        customers = Trade.getCustomers(webAPIData['hostName'] +
                                       followData['getRankFollowers_url'],
                                       params=params,
                                       printLogs=0)
        print(customers)
        self.assertEqual(customers.status_code, webAPIData['status_code_200'])
        # print("Customers_oneWeek:")
        table = PrettyTable([
            "预期/实际", "NickName", "UserID", "mt4Account", "AccountIndex",
            "近一周跟随获利", "近一周盈亏点数", "收益率", "平均获利点数", "交易笔数", "交易周期"
        ])
        try:
            for item in json.loads(customers.text)["data"]["items"]:
                print(item["UserID"], item["AccountIndex"])
                mt4Account = Statistic.getMt4Account(
                    userID=str(item["UserID"]),
                    accountIndex=str(item["AccountIndex"]))
                print("mt4Account", mt4Account)

                for mongoList in self.mongoDB.datastatistic.mg_result_all.find(
                    {"login": mt4Account}):
                    key = []
                    for j in self.mongoDB.datastatistic.mg_result_sorted_all.find(
                        {
                            "login": mt4Account,
                            "statName": "money_cf_week"
                        }):
                        print("7777777777777")
                        key.append(j["statValue"])

                    table.add_row([
                        "预期结果", item["NickName"], item["UserID"], mt4Account,
                        item["AccountIndex"], j["statValue"],
                        mongoList["point_close_week"],
                        mongoList["rate_ss_profit_balance_close"],
                        mongoList["point_close_avg"],
                        mongoList["deal_close_week"], mongoList["period_trade"]
                    ])
                    table.add_row([
                        "实际结果", item["NickName"], item["UserID"], mt4Account,
                        item["AccountIndex"], item["FollowMoney"],
                        item["Pips"], item["Roi"], item["AveragePips"],
                        item["Orders"], item["Weeks"]
                    ])
                    table.add_row(["", "", "", "", "", "", "", "", "", "", ""])
                    # #由于非实时统计数据,实际结果存在误差。预期和实际正负差值小于等于DELTA都算断言通过
                    self.assertAlmostEqual(j["statValue"],
                                           float(item["FollowMoney"]),
                                           delta=0.01)
                    self.assertAlmostEqual(mongoList["point_close_week"],
                                           float(item["Pips"]),
                                           delta=0.01)
                    self.assertAlmostEqual(
                        mongoList["rate_ss_profit_balance_close"],
                        float(item["Roi"]),
                        delta=0.01)
                    self.assertAlmostEqual(mongoList["point_close_avg"],
                                           float(item["AveragePips"]),
                                           delta=0.01)
                    self.assertAlmostEqual(mongoList["deal_close_week"],
                                           float(item["Orders"]),
                                           delta=0)
                    self.assertAlmostEqual(mongoList["period_trade"],
                                           float(item["Weeks"]),
                                           delta=1)
        finally:
            table.reversesort = True
            print(table)
예제 #37
0
resultfm5 =  dm.cr_df(bvalues,t_codes)

for each in resultfm30.sort(columns='bvalues', ascending=False).head(300).index:
    print each
    if each in resultfm20.sort(columns='bvalues', ascending=False).head(300).index:
        if each in resultfm10.sort(columns='bvalues', ascending=False).head(300).index:
            if each in resultfm5.sort(columns='bvalues', ascending=False).head(300).index:
                final[each] = [resultfm5['bvalues'].loc[each], resultfm10['bvalues'].loc[each], resultfm20['bvalues'].loc[each], resultfm30['bvalues'].loc[each]]
                print 'get'


finfm = pd.DataFrame(final)
finfm1=finfm.T
finfm1.to_csv('fin_0504.csv')

fm = td.get_i_ma(20.0, '20160303','2016-05-04', 300)

# 取两融数据
df = ts.sh_margins(start='2015-01-01',end='2016-05-04')
df = ts.sh_margin_details(start='2016-01-01',end='2016-05-04')
df = ts.sh_margin_details(start='2015-01-01', end='2015-04-19', symbol='601989')
df = ts.sz_margins(start='2015-06-01',end='2016-05-04')
# 只能一天天取
df = ts.sz_margin_details('2015-04-20')
# 取 沪深 日,周,分钟
df = ts.get_hist_data('sh', ktype='W')
df = ts.get_hist_data('sz', ktype='60')
df = ts.get_hist_data('cyb')
df = ts.get_hist_data('zxb')

# 龙虎榜
예제 #38
0
    def test_KVBFollowSam(self):
        '''Sam账户跟随福汇交易员'''
        userData['headers'] = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.token})
        self.traderHeaders = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.traderToken})

        # 获取交易员账户的AccountIndex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=self.traderHeaders, brokerID=5)
        # 获取sam账户的AccountIndex
        self.followerSamAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], accountType=2, brokerID=106)

        # 新建一个跟随,固定手数跟随
        params = {
            "accountIndex": int(self.followerSamAccountIndex[0]),
            "strategy": "fixed",
            "setting": 1.5,
            "direction": "positive"
        }
        getFollowsRes = Follow.createFollow(
            userData['hostName'] + userDataFollow["Follow_Url"] +
            str(self.traderUserId) + "_" + self.tradeAccountIndex[0],
            headers=userData['headers'],
            datas=params)
        FMCommon.printLog('getFollowsRes: ' + getFollowsRes.text)
        self.assertEqual(getFollowsRes.status_code,
                         userData['status_code_200'])

        #交易员切换账户
        Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            self.traderHeaders, self.tradeAccountIndex[0])

        # 获取交易员交易token
        traderTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            self.traderHeaders)
        self.assertEqual(traderTokenRes.status_code,
                         userData['status_code_200'])
        tradeToken = str(json.loads(
            traderTokenRes.content)["data"]["Token"]).replace("=", "@")

        # 交易员开仓
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']: "EURCAD",
            userDataWebSocket['orderParam_volume']: 1000
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        FMCommon.printLog(openPositionRes)
        self.assertEqual(openPositionRes["code"],
                         userDataWebSocket['ws_code_0'])
        self.assertEqual(openPositionRes["rcmd"],
                         userDataWebSocket['ws_code_210'])
        self.assertEqual(openPositionRes["order"]["volume"], 1000)
        self.orderID = openPositionRes["order"]["order_id"]

        # 交易员平仓
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_211'],
            userDataWebSocket['orderParam_ticket']: self.orderID,
            userDataWebSocket['orderParam_volume']: 1000
        }
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)
        FMCommon.printLog(closeOrderRes)
        self.assertEqual(closeOrderRes["code"], userDataWebSocket['ws_code_0'])
        self.assertEqual(closeOrderRes["rcmd"],
                         userDataWebSocket['ws_code_211'])
        self.assertEqual(closeOrderRes['order']["order_id"], self.orderID)
        self.assertEqual(closeOrderRes["order"]["volume"], 1000)

        # 查询交易员的历史订单
        time.sleep(userDataWebSocket['waitTime'])
        historyOrdersRes = Trade.getOrders(
            userData['hostName'] + userDataTrade["getOrders"],
            self.traderHeaders, userData['orderStatus_close'])
        self.assertEqual(historyOrdersRes.status_code,
                         userData['status_code_200'])
        self.assertIn(
            str(self.orderID),
            str(json.loads(historyOrdersRes.content)["data"]["items"]))
        FMCommon.printLog('historyOrdersRes: ' + historyOrdersRes.text)

        # 跟随者切换账户
        Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.followerSamAccountIndex[0])

        # 获取跟随者交易token
        followertokenRES = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        self.assertEqual(followertokenRES.status_code,
                         userData['status_code_200'])
        MT4Account = str(
            json.loads(followertokenRES.content)["data"]["MT4Account"])

        #  验证跟随者跟单成功
        sql = "SELECT TradeID from t_followorder where Account=" + MT4Account + " and TraderTradeID=" + str(
            self.orderID)
        row = FollowOperation.Operation.operationCopytradingDB(sql)

        # 查询跟随者的历史订单
        followerHistoryOrdersRes = Trade.getOrders(
            userData['hostName'] + userDataTrade["getOrders"],
            userData['headers'], userData['orderStatus_close'])
        self.assertEqual(followerHistoryOrdersRes.status_code,
                         userData['status_code_200'])
        self.assertIn(
            str(row['TradeID']),
            str(json.loads(followerHistoryOrdersRes.content)["data"]["items"]))

        # 取消跟随
        cancelFollowRes = Follow.DeleteFollow(
            userData['hostName'] + userDataFollow["Follow_Url"] +
            str(self.traderUserId) + "_" + self.tradeAccountIndex[0] +
            "?accountIndex=" + self.followerSamAccountIndex[0],
            userData['headers'])
        FMCommon.printLog('cancelFollowRes: ' + cancelFollowRes.text)
        self.assertEqual(cancelFollowRes.status_code,
                         userData['status_code_200'])
예제 #39
0
    def test_PartClosePositionByPico(self):
        '''验证部分平仓,交易员开仓,部分平仓,检查持仓单,检查历史订单'''
        userData['headers'] = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.token})

        # 获取交易员的accountindex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=6)

        # 切换到MT4账号
        switchAccountRes = Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.tradeAccountIndex[0])
        self.assertEqual(switchAccountRes.status_code,
                         userData['status_code_200'])

        # 获取交易token
        getTokenRes = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        FMCommon.printLog('getTokenRes: ' + getTokenRes.text)
        self.assertEqual(getTokenRes.status_code, userData['status_code_200'])
        tradeToken = str(json.loads(
            getTokenRes.content)["data"]["Token"]).replace("=", "@")
        MT4Account = str(json.loads(getTokenRes.content)["data"]["MT4Account"])

        # 开仓
        openParam = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_210'],
            userDataWebSocket['orderParam_symbol']: "AUDCAD",
            userDataWebSocket['orderParam_volume']: 2
        }
        openPositionRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, openParam)
        if (openPositionRes["code"] == userDataWebSocket['ws_code_0']):
            self.assertEqual(openPositionRes["rcmd"],
                             userDataWebSocket['ws_code_210'])
            self.assertEqual(openPositionRes["order"]["volume"], 2)
            self.assertEqual(openPositionRes["order"]["symbol"], "AUDCAD")
            self.orderID = openPositionRes["order"]["order_id"]
        elif (openPositionRes["code"] == 4):
            print("保证金不足!")
        elif (openPositionRes["code"] == 10):
            print("市场关闭!")
        elif (openPositionRes["code"] == 300):
            print("服务器内部错误!")
        elif (openPositionRes["code"] == 3):
            print("客户不存在!")
        elif (openPositionRes["code"] == 7):
            print("获取价格失败!")
        elif (openPositionRes["code"] == 9):
            print("手数错误!")
        elif (openPositionRes["code"] == 18):
            print("此品种不能交易!")
        else:
            print("其它错误")

        time.sleep(5)
        # 获取开仓单
        params = {userData['orderStatus']: userData['orderStatus_open']}
        getOrders = Order.getOrders(userData['hostName'] +
                                    order['getOrders_url'],
                                    userData['headers'],
                                    params=params)
        self.assertEqual(getOrders.status_code, userData['status_code_200'])
        self.assertIn(str(self.orderID),
                      str(json.loads(getOrders.content)["data"]["items"]),
                      "持仓列表中没有包含此订单")

        # 部分平仓
        closeOrder = {
            userDataWebSocket['orderParam_code']:
            userDataWebSocket['ws_code_211'],
            userDataWebSocket['orderParam_ticket']: self.orderID,
            userDataWebSocket['orderParam_volume']: 1
        }
        closeOrderRes = TradeOnline.OnlineTradeEvent.tradeEvent(
            self, userDataWebSocket['ws_host'], userDataWebSocket['ws_port'],
            {'token': "" + tradeToken}, closeOrder)
        self.assertEqual(closeOrderRes["code"], userDataWebSocket['ws_code_0'])
        self.assertEqual(closeOrderRes["rcmd"],
                         userDataWebSocket['ws_code_223'])
        self.assertEqual(closeOrderRes['order']["order_id"], self.orderID)
        self.assertEqual(closeOrderRes["order"]["volume"], 1)
        self.assertEqual(openPositionRes["order"]["symbol"], "AUDCAD")

        # 查询历史订单
        time.sleep(5)
        getHistoryOrderRes = Trade.getOrders(
            userData['hostName'] + userDataTrade["getOrders"],
            userData['headers'], userData['orderStatus_close'])
        FMCommon.printLog('getHistoryOrderRes: ' + getHistoryOrderRes.text)
        self.assertEqual(getHistoryOrderRes.status_code,
                         userData['status_code_200'])
        self.assertIn(
            str(self.orderID),
            str(json.loads(getHistoryOrderRes.content)["data"]["items"]),
            "历史订单列表中不包含此订单")
        #验证此历史订单的手数是否与部分平仓手数一致
        sql = 'SELECT StandardLots,BrokerLots from t_trades WHERE TradeID=' + str(
            self.orderID) + 'and Account=' + MT4Account
        row = FollowOperation.Operation.operationCopytradingDB(sql)
        self.assertEqual(1, int(row['StandardLots']), "部分平仓手数错误")
        self.assertEqual(1, int(row['BrokerLots']), "部分平仓手数错误")
예제 #40
0
    def test_Follows(self):
        '''登录->新建一个跟随->获取指定交易员存在的跟随关系->修改一个跟随->取消跟随'''
        userData['headers'] = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.token})
        self.traderHeaders = dict(
            userData['headers'],
            **{'Authorization': userData['Bearer'] + self.traderToken})

        # 获取交易员的accountindex
        self.tradeAccountIndex = Account.getSpecialAccountIndex(
            headers=self.traderHeaders, brokerID=5)

        # 获取跟随者的accountindex
        self.followerAccountIndex = Account.getSpecialAccountIndex(
            headers=userData['headers'], brokerID=5)

        # 新建一个跟随,固定手数跟随
        params = {
            "accountIndex": int(self.followerAccountIndex[0]),
            "strategy": "fixed",
            "setting": 1.5,
            "direction": "positive"
        }
        getFollowsRes = Follow.createFollow(
            userData['hostName'] + userDataFollow["Follow_Url"] +
            str(self.traderUserId) + "_" + self.tradeAccountIndex[0],
            headers=userData['headers'],
            datas=params)
        FMCommon.printLog('getFollowsRes: ' + getFollowsRes.text)
        self.assertEqual(getFollowsRes.status_code,
                         userData['status_code_200'])

        # 跟随者切换账户
        Account.switchAccount(
            userData['hostName'] + userDataAccount['switchAccount'],
            userData['headers'], self.followerAccountIndex[0])

        # 获取跟随者交易token
        demotoken = Trade.getToken(
            userData['hostName'] + userDataAccount["getToken_url"],
            userData['headers'])
        self.assertEqual(demotoken.status_code, userData['status_code_200'])
        followerMT4Account = str(
            json.loads(demotoken.content)["data"]["MT4Account"])

        # 获取指定交易员存在的跟随关系
        getTraderFollowRes = Follow.getFollow(
            userData['hostName'] + userDataFollow["Follow_Url"],
            str(self.traderUserId) + "_" + self.tradeAccountIndex[0],
            self.followerAccountIndex[0], userData['headers'])
        FMCommon.printLog('getTraderFollowRes: ' + getTraderFollowRes.text)
        self.assertEqual(getTraderFollowRes.status_code,
                         userData['status_code_200'])
        FollowAccount = json.loads(
            getTraderFollowRes.text)['data']['follow']['FollowAccount']
        self.assertEqual(FollowAccount, followerMT4Account, "没有包含此跟随者")

        # 修改一个跟随(修改跟随策略)
        params = {
            "accountIndex": int(self.followerAccountIndex[0]),
            "strategy": "ratio",
            "setting": 2,
            "direction": "positive"
        }
        updateFollowRes = Follow.updateFollow(
            userData['hostName'] + userDataFollow["Follow_Url"] +
            str(self.traderUserId) + "_" + self.tradeAccountIndex[0],
            userData['headers'],
            datas=params)
        FMCommon.printLog('updateFollowRes: ' + updateFollowRes.text)
        self.assertEqual(updateFollowRes.status_code,
                         userData['status_code_200'])

        # 取消跟随
        cancelFollowRes = Follow.DeleteFollow(
            userData['hostName'] + userDataFollow["Follow_Url"] +
            str(self.traderUserId) + "_" + self.tradeAccountIndex[0] +
            "?accountIndex=" + self.followerAccountIndex[0],
            userData['headers'])
        FMCommon.printLog('cancelFollowRes: ' + cancelFollowRes.text)
        self.assertEqual(cancelFollowRes.status_code,
                         userData['status_code_200'])
예제 #41
0
def create_trade():

    team1_abbr = raw_input("Team 1: ")
    team1 = Team(team1_abbr)
    while team1.get_salary() is None:
        print("Unable to find team " + team1_abbr + ". Try again")
        team1_abbr = raw_input("Team 1: ")
        team1 = Team(team1_abbr)

    team1_players = team1.get_players()

    team2_abbr = raw_input("Team 2: ")
    team2 = Team(team2_abbr)
    while team2.get_salary() is None:
        print("Unable to find team " + team2_abbr + ". Try again")
        team2_abbr = raw_input("Team 2: ")
        team2 = Team(team2_abbr)
    team2_players = team2.get_players()

    teams = [team1, team2]
    while 1:
        ans = raw_input(
            "Would you like to include more teams? Include them now, or type 'no' if you are done adding teams: "
        )
        if ans == "no":
            break
        new_team = Team(ans)
        while new_team.get_salary() is None:
            print("Unable to find team " + ans + ". Try again")
            ans = raw_input("Team: ")
            if ans == "no":
                break
            new_team = Team(ans)

        teams.append(Team(ans))

    print("")
    console_print.print_players_together(
        team1_players, team2_players,
        max(len(team1_players), len(team2_players)))
    print(
        "----------------------------------------------------------------------------------------------------------------------------------------------"
    )
    print("TEAM SALARY: \t\t\t\t\t" + str(currency(team1.salary)) + "\t\t|\t" +
          "TEAM SALARY: \t\t\t\t\t" + str(currency(team2.salary)))
    print(
        "----------------------------------------------------------------------------------------------------------------------------------------------"
    )

    tpes1 = team1.get_trade_exceptions()
    tpes2 = team2.get_trade_exceptions()
    console_print.print_exceptions_together(tpes1, tpes2,
                                            max(len(tpes1), len(tpes2)))
    print("")

    for i in range(2, len(teams)):
        print(teams[i].get_players())
        print("TEAM SALARY: " + currency.currency(teams[i].salary))
        if teams[i].get_trade_exceptions() != []:
            print("Trade Exceptions: ")
            print(teams[i].get_trade_exceptions())

    for i in range(0, len(teams)):
        finished = False
        while not finished:
            player_id = raw_input(
                "Type the Player ID of a player you wish to trade from " +
                teams[i].name + ". Type done when you have finished: ")
            if player_id == "Done" or player_id == "done":
                finished = True
                break
            player = Player(player_id, teams[i].name)
            if player.name is not None:
                teams[i].players_out.append(player)
                if len(teams) == 2:
                    if i == 0:
                        teams[1].players_in.append(player)
                    else:
                        teams[0].players_in.append(player)
                else:
                    match = False
                    while not match:
                        destination = raw_input(
                            "What team would you like to trade " +
                            player.name + " to? ").upper()

                        for q in range(0, len(teams)):
                            if destination == teams[
                                    q].name and destination != player.team.name:
                                match = True
                                print("You are trading " + player.name +
                                      " to " + destination)
                                teams[q].players_in.append(player)

    print(
        "**************************************************************************************************"
    )
    for i in range(0, len(teams)):
        print(teams[i].name + " OUT:", end=' ')
        for p in teams[i].players_out:
            print(p.name, end=', ', flush=True)

        print("")

        print(teams[i].name + " IN:", end=' ')
        for p in teams[i].players_in:
            print(p.name, end=', ', flush=True)

        print("")

    trade = Trade(teams)

    for i in teams:
        i.calc_money_in()
        i.calc_money_out()

    trade.summary()
    decisions = []
    for team in teams:
        decision, msg = trade.check_trade(team)
        print(msg)
        decisions.append(decision)
        if not decision:
            break

    print(trade.finalize_trade(decisions))