예제 #1
0
 def market_order_wait_till_execution(cls, side, size) -> dict:
     id = cls.order(side, 0, size, 'market', 0)
     i = 0
     print('waiting order execution...')
     flg_activated = False
     time.sleep(1)
     while True:
         status = cls.get_order_status(id)
         if len(status) > 0:
             if status[0]['child_order_state'] == 'COMPLETED':  # order executed
                 print('order has been executed')
                 return status[0]
             elif status[0]['child_order_state'] == 'ACTIVE':
                 flg_activated = True
         else:
             if flg_activated:
                 print('order has been expired')
                 return None
         i += 1
         if i > 50:
             print('market order wait till execution - ')
             print(status[0])
             LogMaster.add_log('market order wait till execution - ', 0, None)
             LineNotification.send_error('market order wait till execution - ')
             return status[0]
         time.sleep(0.3)
예제 #2
0
 def __display_thread(cls):
     while SystemFlg.get_system_flg():
         print('pl=', cls.total_pl, 'num_trade=', cls.num_trade,
               'win_rate=', cls.win_rate, 'pl_per_min=', cls.pl_per_min,
               'total_fee=', cls.total_fee)
         print(cls.get_order_data())
         print('holding_side=', cls.holding_side, 'holding_price',
               cls.holding_price, 'holding_qty=', cls.holding_qty)
         #LineNotification.send_message('holding_side:'+cls.holding_side+', holding_price:'+str(cls.holding_price)+', holding_qty:'+str(cls.holding_qty))
         order_data = cls.get_order_data()
         LineNotification.send_message('pl=' + str(cls.total_pl) +
                                       ', num_trade=' + str(cls.num_trade) +
                                       ', win_rate=' + str(cls.win_rate) +
                                       '\n' + '********Holding********\n' +
                                       cls.holding_side + ' @' +
                                       str(cls.holding_price) + ' x ' +
                                       str(cls.holding_qty) + '\n' +
                                       '********Order********\n' +
                                       str(order_data['side']) + ' @' +
                                       str(order_data['price']) + ' x ' +
                                       str(order_data['leaves_qty']))
         LogMaster.add_account_log(datetime.datetime.now(),
                                   Trade.get_bid_ask()[0], cls.total_pl,
                                   cls.total_fee, cls.num_trade,
                                   cls.win_rate)
         #loop = asyncio.new_event_loop()
         #loop.run_until_complete(cls.__generate_and_send_pl_image())
         if cls.image_sending_flg >= 60:
             cls.__generate_and_send_pl_image()
             cls.image_sending_flg = 0
         else:
             cls.image_sending_flg += 1
         time.sleep(60)
예제 #3
0
 def entry_price_tracing_order(self, side, size):
     ltp = TickData.get_ltp()
     res, order_sizes, price, order_ids, total_executed = Trade.price_tracing_order(
         side, size)  # round(sum(exec_size), 2), ave_p, order_id
     if res == 0:
         print(side + ' entry price tracing order has been executed.' +
               'price=' + str(price) + ', size=' + str(total_executed))
         self.ac.add_orders(order_ids, order_sizes)
         self.ac.add_order_exec_price_gap(price, ltp, side)
         self.ac.calc_pl(side, price, total_executed)
         print(
             'holding_side={},holding_price={},holding_size={},total_pl={},collateral={},collateral_change={},realized_pl={}'
             .format(self.ac.holding_side, self.ac.holding_price,
                     self.ac.holding_size, self.ac.total_pl,
                     self.ac.collateral, self.ac.collateral_change,
                     self.ac.realized_pl))
         LogMaster.add_log(
             'Price tracing order entry has been executed. ' + ' side=' +
             side + ' size=' + str(size) + ' price=' + str(price),
             self.prediction, self.ac)
     else:
         LogMaster.add_log(
             'Limit order has been failed.' + ' side=' + side + ' ' +
             str(total_executed), self.prediction, self.ac)
         print('etnry price tracing order failed!')
예제 #4
0
 def get_order_status(cls, id) -> []:
     if cls.flg_api_limit == False:
         res = []
         try:
             cls.num_private_access += 1
             res = cls.bf.private_get_getchildorders(
                 params={
                     'product_code': 'FX_BTC_JPY',
                     'child_order_acceptance_id': id
                 })
         except Exception as e:
             if cls.check_exception(e) == 'ok':
                 pass
             print('error in get_order_status ' + str(e))
             LogMaster.add_log(
                 'api_error - Trade-get order status error! ' + str(e),
                 None)
             LineNotification.send_error(
                 'api_error:Trade-get order status error!' + str(e))
         finally:
             return res
     else:
         print(
             'get_order_status is temporary exhibited due to API access limitation!'
         )
         LogMaster.add_log(
             'get_order_status is temporary exhibited due to API access limitation!',
             None)
         return None
예제 #5
0
 def start_flyer_bot(self, num_term, window_term, pl, ls, upper_kijun,
                     lower_kijun):
     self.__bot_initializer(num_term, window_term, pl, ls, upper_kijun,
                            lower_kijun)
     self.start_time = time.time()
     self.fixed_order_size = 0.05
     while SystemFlg.get_system_flg():
         self.__check_system_maintenance(num_term, window_term)
         self.__update_ohlc()
         if self.ac.holding_side == '' and self.ac.pt_side == '' and self.flg_loss_cut == False:  #no position no pt order
             if self.prediction == 1 or self.prediction == -1:
                 self.entry_price_tracing_order(self.pred_side,
                                                self.fixed_order_size)
         elif self.ac.holding_side != '' and self.ac.pt_side == '' and self.flg_loss_cut == False:  #holding position and no order
             self.entry_pt_order()
         elif (self.ac.holding_side == 'buy' and self.prediction
               == 2) or (self.ac.holding_side == 'sell' and self.prediction
                         == 1):  # ポジションが判定と逆の時にexit, もしplがあればキャンセル。。
             self.cancel_pt_order()
             self.exit_order()
             self.entry_price_tracing_order(self.pred_side,
                                            self.fixed_order_size)
         elif self.ac.holding_side == '' and self.ac.pt_side != '':  #unexpected situation, no holding position but pt order exist
             print('no position but pt order exist!')
             LogMaster.add_log('no position but pt order exist!',
                               self.prediction, self.ac)
             LineNotification.send_error('no position but pt order exist!')
             self.cancel_pt_order()
         self.check_and_do_lc()  #check and do loss cut
         if Trade.flg_api_limit:
             time.sleep(60)
             print('Bot sleeping for 60sec due to API access limitation')
         else:
             time.sleep(0.1)
예제 #6
0
 def exit_order(self):
     if self.ac.holding_side != '':
         print('quick exit order')
         side = 'buy' if self.ac.holding_side == 'sell' else 'sell'
         ltp = TickData.get_ltp()
         res, order_sizes, price, order_ids, total_executed = Trade.price_tracing_order(
             side, self.ac.holding_size
         )  #return 0, round(sum(exec_size), 2), ave_p, order_id
         if res == 0:
             print(side + ' exit price tracing order has been executed.' +
                   'price=' + str(price) + ', size=' + str(total_executed))
             self.ac.add_orders(order_ids, order_sizes)
             self.ac.add_order_exec_price_gap(price, ltp, side)
             self.ac.calc_pl(side, price, total_executed)
             LogMaster.add_log('exit order completed!', self.prediction,
                               self.ac)
             return 0
         else:
             print(side + ' exit price tracing order has been failed.' +
                   'price=' + str(price) + ', size=' + str(total_executed))
             self.ac.add_orders(order_ids, order_sizes)
             self.ac.add_order_exec_price_gap(price, ltp, side)
             self.ac.calc_pl(side, price, total_executed)
             LogMaster.add_log('exit order failed!', self.prediction,
                               self.ac)
             return -1
예제 #7
0
    def market_order_wait_till_execution3(cls, side, total_size):
        size = []
        price = []
        max_wait = 10
        num = 0
        bid = TickData.get_bid_price()
        ask = TickData.get_ask_price()
        try:
            cls.num_private_access += 1
            order_id = cls.bf.create_order(
                symbol='BTC/JPY',
                type='market',
                side=side,
                amount=total_size,
                params={'product_code': 'FX_BTC_JPY'})
        except Exception as e:
            print('market order failed! ' + str(e))
            LogMaster.add_log('market order failed! ' + str(e), None)
            LineNotification.send_error('market order failed! ' + str(e))
            cls.check_exception(e)
            return -1, 0, 0, ''

        order_id = order_id['info']['child_order_acceptance_id']
        print('waiting for market order execution...')
        start = time.time()
        while sum(size) < total_size:
            exe_data = TickData.get_exe_data()[-100:]
            if time.time() - start > max_wait:
                exe_data = cls.get_executions()
            exe_data = TickData.get_exe_data()[-100:]
            for exec in exe_data:
                if exec[side + "_child_order_acceptance_id"] == order_id:
                    size.append(exec["size"])
                    price.append(exec["price"])
            if time.time() - start > max_wait:
                print(
                    'can not complete Trade - check_and_wait_till_all_execution!'
                )
                LogMaster.add_log(
                    'can not complete Trade - check_and_wait_till_all_execution!',
                    None)
                LineNotification.send_error(
                    'can not complete Trade - check_and_wait_till_all_execution!'
                )
                return -1, sum(size), round(
                    sum(price[i] * size[i]
                        for i in range(len(price))) / sum(size)), order_id
            num += 1
        ave_p = round(
            sum(price[i] * size[i] for i in range(len(price))) / sum(size))
        print('market order has been successfully executed.' + 'side=' + side +
              ', ave price=' + str(ave_p) + ', size=' +
              str(round(sum(size), 2)))
        sp = ask - ave_p if side == 'buy' else ave_p - bid
        print('market order spread loss/profit = ' + str(sp))
        cls.spread_loss_profit += sp
        cls.spread_loss_profit_log.append(sp)
        return 0, round(sum(size), 2), ave_p, order_id
예제 #8
0
 def get_orders(cls):
     try:
         cls.num_private_access += 1
         orders = cls.bf.fetch_open_orders(symbol='BTC/JPY', params={"product_code": "FX_BTC_JPY"})
     except Exception as e:
         print('error in get_orders ' + str(e))
         LogMaster.add_log('api_error - Trade-get get_orders error! ' + str(e),0,None)
         cls.check_exception(e)
         time.sleep(3)
         return cls.get_orders()
     return orders
예제 #9
0
파일: Trade.py 프로젝트: alunfes/mex-bot
 def cancel_and_wait_completion(cls, order_id):
     cancel = cls.cancel_order(order_id)
     if len(cancel) > 0:
         if cancel['info']['ordStatus'] == 'Canceled':
             return 0
         else:
             time.sleep(1)
             return cls.cancel_and_wait_completion(order_id)
     print('Trade - cancel_and_wait_completion - unexpected error!')
     LogMaster.add_log({'dt': datetime.now(), 'api_error': 'Trade - cancel_and_wait_completion - unexpected error!'})
     return -1
예제 #10
0
 def get_current_asset(cls):
     try:
         cls.num_private_access += 1
         res = cls.bf.fetch_balance()
     except Exception as e:
         print('error i get_current_asset ' + e)
         LogMaster.add_log('action_message - Trade-get current asset error! ' + str(e),0,None)
         LineNotification.send_error('action_message - Trade-get current asset error! ' + str(e))
         if cls.check_exception(e) == 'ok':
             pass
     finally:
         return res['total']['BTC'] * TickData.get_ltp() + res['total']['JPY']
예제 #11
0
 def get_order(cls, order_id):
     try:
         cls.num_private_access += 1
         order = cls.bf.fetch_open_orders(symbol='BTC/JPY', params={"product_code": "FX_BTC_JPY", 'child_order_acceptance_id': order_id})
     except Exception as e:
         print('error in get_order ' + str(e))
         LogMaster.add_log('api_error - Trade-get get_order error! ' + str(e), None)
         LineNotification.send_error('api_error - Trade-get get_order error! ' + str(e))
         if cls.check_exception(e) == 'ok':
             pass
         else:
             return cls.get_order(order_id)
     return order
예제 #12
0
 def calc_opt_pl(self):
     if TickData.get_1m_std() > 10000:
         newpl = self.pl_kijun * math.log(
             (TickData.get_1m_std() / 100000)) + 5
         print('changed opt pl kijun to ' + str(newpl))
         LogMaster.add_log(
             'action_message - changed opt pl kijun to ' + str(newpl),
             self.prediction[0], self.ac)
         LineNotification.send_error('changed opt pl kijun to ' +
                                     str(newpl))
         return newpl
     else:
         return self.pl_kijun
예제 #13
0
 def get_positions(cls):  # None
     try:
         cls.num_private_access += 1
         positions = cls.bf.private_get_getpositions(params={"product_code": "FX_BTC_JPY"})
     except Exception as e:
         print('error in get_positions ' + str(e))
         LogMaster.add_log('api_error - Trade-get get_positions error! ' + str(e),0,None)
         LineNotification.send_error('api_error - Trade-get get_positions error! ' + str(e))
         if cls.check_exception(e) == 'ok':
             pass
         else:
             return cls.get_positions()
     return positions
예제 #14
0
 def get_collateral(cls):
     res=''
     try:
         cls.num_private_access += 1
         res = cls.bf.fetch2(path='getcollateral', api='private', method='GET')
     except Exception as e:
         print('error i get_collateral ' + e)
         LogMaster.add_log('api_error - Trade-get get_collateral error! ' + str(e),0,None)
         LineNotification.send_error('api_error - Trade-get get_collateral error! ' + str(e))
         if cls.check_exception(e) == 'ok':
             pass
     finally:
         return res
예제 #15
0
 async def __send_performance_data(cls):
     p = LogMaster.get_latest_performance()
     pred = LogMaster.get_latest_position()
     posi = LogMaster.get_latest_position()
     if len(p) > 0:
         await cls.__send_message('\r\n' + '[' +
                                  str(p['dt'].strftime("%m/%d %H:%M:%S")) +
                                  ']' + '\r\n' + 'p:' + str(p['pnl']) +
                                  ', p-min:' + str(p['total_pnl_per_min']) +
                                  ', num:' + str(p['num_trade']) +
                                  ', rate:' + str(p['win_rate']) + '\r\n' +
                                  str(posi['posi_side']) + ' : ' +
                                  str(pred['prediction']))
예제 #16
0
    def market_order_wait_till_execution2(cls, side, total_size):
        size = []
        price = []
        wait_sec = 0.3
        max_wait = 2.1
        num = 0

        try:
            cls.num_private_access += 1
            order_id = cls.bf.create_order(
                symbol='BTC/JPY',
                type='market',
                side=side,
                amount=total_size,
                params={'product_code': 'FX_BTC_JPY'})
        except Exception as e:
            print('market order failed! ' + str(e))
            LogMaster.add_log('market order failed! ' + str(e), None)
            LineNotification.send_error('market order failed! ' + str(e))
            cls.check_exception(e)
            return -1, 0, 0, ''

        order_id = order_id['info']['child_order_acceptance_id']
        print('waiting for market order execution...')
        while sum(size) < total_size:
            executions = cls.get_executions()
            for exec in executions:
                if exec["child_order_acceptance_id"] == order_id:
                    size.append(exec["size"])
                    price.append(exec["price"])
            time.sleep(wait_sec)
            num += 1
            if num * wait_sec > max_wait:
                print(
                    'can not complete Trade - check_and_wait_till_all_execution!'
                )
                LogMaster.add_log(
                    'can not complete Trade - check_and_wait_till_all_execution!',
                    0, None)
                LineNotification.send_error(
                    'can not complete Trade - check_and_wait_till_all_execution!'
                )
                return -1, sum(size), round(
                    sum(price[i] * size[i]
                        for i in range(len(price))) / sum(size)), order_id
        ave_p = round(
            sum(price[i] * size[i] for i in range(len(price))) / sum(size))
        print('market order has been successfully executed.' + 'side=' + side +
              ', ave price=' + str(ave_p) + ', size=' +
              str(round(sum(size), 2)))
        return 0, round(sum(size), 2), ave_p, order_id
예제 #17
0
 def calc_opt_size(self):
     collateral = Trade.get_collateral()['collateral']
     if TickData.get_1m_std() > 10000:
         multiplier = 0.5
         print('changed opt size multiplier to 0.5')
         LogMaster.add_log(
             'action_message - changed opt size multiplier to 0.5',
             self.prediction[0], self.ac)
         LineNotification.send_error('changed opt size multiplier to 0.5')
     else:
         multiplier = 1.5
     size = round((multiplier * collateral * self.margin_rate) /
                  TickData.get_ltp() * 1.0 / self.leverage, 2)
     return size
예제 #18
0
 def cancel_order(self):
     print('cancel order')
     status = Trade.cancel_and_wait_completion(self.ac.order_id)
     if len(status) > 0:
         print('cancel failed, partially executed')
         oid = Trade.order(status['side'].lower(), 0,
                           status['executed_size'], 'market', 1)
         LogMaster.add_log(
             'action_message - cancel order - cancel failed and partially executed. closed position.',
             self.prediction[0], self.ac)
         self.ac.initialize_order()
     else:
         LogMaster.add_log('action_message - cancelled order',
                           self.prediction[0], self.ac)
         self.ac.initialize_order()
예제 #19
0
 def cancel_order(cls, order_id):
     cancel =''
     try:
         cls.num_private_access += 1
         cancel = cls.bf.cancel_order(id=order_id, symbol='BTC/JPY', params={"product_code": "FX_BTC_JPY"})
     except Exception as e:
         print('error in cancel_order ' + str(e))
         LogMaster.add_log('api_error - Trade-get cancel_order error! ' + str(e),0,None)
         LineNotification.send_error('api_error - Trade-get cancel_order error! ' + str(e))
         cls.check_exception(e)
         if 'Order not found' in str(e):
             print('cancel order not found!')
             LogMaster.add_log('api_error - cancel order not found! ',0,None)
             LineNotification.send_error('api_error - cancel order not found! ')
             cancel = ''
     return cancel
예제 #20
0
 def __init__(self):
     SystemFlg.initialize()
     LineNotification.initialize()
     Trade.initialize()
     LogMaster.initialize()
     while True:
         print('Please select program mode.')
         print('1: OHLCV data update')
         print('2: Mark3etData test')
         print('3: Bot test')
         print('4: Sim')
         print('5: WS Test')
         print('6: Trade Test')
         select = str(input())
         if select == '1':
             print('1: OHLCV data update')
             dmd = DownloadMarketData()
             dmd.download_all_targets_async(2017, 1, 2)
             dmd.update_ohlcv()
             RestAPI.update_onemin_data()
             break
         elif select == '2':
             print('2: MarketData test')
             term_list = list(range(10, 1000, 100))
             MarketData.initialize_for_bot(term_list, True)
             break
         elif select == '3':
             print('3: Bot test')
             term_list = list(range(10, 1000, 100))
             MarketData.initialize_for_bot(term_list, False)
             bot = Bot(100)
             break
         elif select == '4':
             print('4: Sim')
             pass
             break
         elif select == '5':
             print('5: WS Test')
             pass
             break
         elif select == '6':
             print('6: Trade Test')
             Trade.test_trade()
             break
         else:
             pass
예제 #21
0
 def entry_pt_order(self):
     side = 'buy' if self.ac.holding_side == 'sell' else 'sell'
     price = self.ac.holding_price + self.pl if self.ac.holding_side == 'buy' else self.ac.holding_price - self.pl
     res = Trade.order(side, price, self.ac.holding_size, 'limit', 1440)
     if len(res) > 10:
         self.ac.set_pt_order(res, side, self.ac.holding_size, price)
         print('pl order: side = {}, price = {}, outstanding size = {}'.
               format(self.ac.pt_side, self.ac.pt_price,
                      self.ac.pt_outstanding_size))
         LogMaster.add_log(
             'action_message - pl entry for ' + side + ' @' + str(price) +
             ' x' + str(self.ac.pt_outstanding_size), self.prediction,
             self.ac)
     else:
         LogMaster.add_log('action_message - failed pl entry!',
                           self.prediction, self.ac)
         print('failed pl order!')
예제 #22
0
 def opt_price_wait_till_execution(cls, side, total_size):
     exec_size = []
     exec_price = []
     max_wait = 2.1
     loop_sec = 0.01
     bid = TickData.get_bid_price()
     ask = TickData.get_ask_price()
     try:
         price = TickData.get_bid_price() if side =='buy' else TickData.get_ask_price()
         cls.num_private_access += 1
         order_id = cls.bf.create_order(
             symbol='BTC/JPY',
             type='limit',
             side=side,
             price=price,
             amount=total_size,
             params={'product_code': 'FX_BTC_JPY', 'minute_to_expire': 1}  # 期限切れまでの時間(分)(省略した場合は30日)
         )
     except Exception as e:
         print('opt price order failed! ' + str(e))
         LogMaster.add_log('opt price order failed! ' + str(e), 0, None)
         LineNotification.send_error('opt price order failed! ' + str(e))
         cls.check_exception(e)
         return -1, 0, 0, ''
     order_id = order_id['info']['child_order_acceptance_id']
     print('waiting for opt price order execution...')
     num = 0
     ave_p = 0
     while sum(exec_size) < total_size:
         executions = cls.get_executions()
         for exec in executions:
             if exec["child_order_acceptance_id"] == order_id:
                 exec_size.append(exec["size"])
                 exec_price.append(exec["price"])
         time.sleep(loop_sec)
         num += 1
         if max_wait < loop_sec * num:
             cls.cancel_order(order_id)
             if sum(exec_size) > 0:
                 ave_p = round(sum(exec_price[i] * exec_size[i] for i in range(len(exec_price))) / sum(exec_size))
             print('opt price order has been failed.' + 'side=' + side + ', ave price=' + str(ave_p) + ', size=' + str(round(sum(exec_size), 2)))
             return -1, round(sum(exec_size), 2), ave_p, order_id
     ave_p = round(sum(exec_price[i] * exec_size[i] for i in range(len(exec_price))) / sum(exec_size))
     print('opt price order has been successfully executed.' + 'side=' + side + ', ave price=' + str(ave_p) + ', size=' + str(round(sum(exec_size), 2)))
     return 0, round(sum(exec_size), 2), ave_p, order_id
예제 #23
0
파일: Trade.py 프로젝트: alunfes/mex-bot
 def cancel_order(cls, order_id):
     for i in range(cls.error_trial):
         cls.num_private_access += 1
         cancel = ''
         error_message = ''
         try:
             cancel = cls.bm.cancel_order(id=order_id, symbol='BTC/USD')
         except Exception as e:
             error_message = str(e)
             print('error in cancel_order ' + str(e), cancel)
             LogMaster.add_log({'dt': datetime.now(), 'api_error': 'Trade-get cancel_order error! ' + str(e)})
             LineNotification.send_error('error in cancel order! ' + '\r\n' + cancel + '\r\n' + str(e))
         finally:
             if 'error' not in error_message:
                 return cancel
             else:
                 time.sleep(cls.rest_interval)
     return None
예제 #24
0
 def entry_pl_order(self):
     side = 'buy' if self.ac.holding_side == 'sell' else 'sell'
     pl_kijun = self.calc_opt_pl()
     price = self.ac.holding_price + pl_kijun if self.ac.holding_side == 'buy' else self.ac.holding_price - pl_kijun
     res = Trade.order(side, price, self.ac.holding_size, 'limit', 1440)
     if len(res) > 10:
         self.ac.update_order(side, price, 0, self.ac.holding_size, res,
                              1440, 'pl order')
         print('pl order: side = {}, price = {}, outstanding size = {}'.
               format(self.ac.order_side, self.ac.order_price,
                      self.ac.order_outstanding_size))
         LogMaster.add_log(
             'action_message - pl entry for ' + side + ' @' + str(price) +
             ' x' + str(self.ac.order_outstanding_size), self.prediction[0],
             self.ac)
     else:
         LogMaster.add_log('action_message - failed pl entry!',
                           self.prediction[0], self.ac)
         print('failed pl order!')
예제 #25
0
 def check_and_do_lc(self):
     if self.ac.holding_side != '':
         if self.ac.holding_side == 'buy' and TickData.get_ltp(
         ) - self.ac.holding_price <= -self.ls:
             print('hit loss cut kijun')
             LogMaster.add_log('hit loss cut kijun', self.prediction,
                               self.ac)
             LineNotification.send_error('hit loss cut kijun')
             self.flg_loss_cut = True
             self.exit_order()
             self.cancel_pt_order()
         elif self.ac.holding_side == 'sell' and self.ac.holding_price - TickData.get_ltp(
         ) <= -self.ls:
             print('hit loss cut kijun')
             LogMaster.add_log('hit loss cut kijun', self.prediction,
                               self.ac)
             LineNotification.send_error('hit loss cut kijun')
             self.flg_loss_cut = True
             self.exit_order()
             self.cancel_pt_order()
예제 #26
0
 def __bot_initializer(self, num_term, window_term, pl, ls, upper_kijun,
                       lower_kijun):
     Trade.cancel_all_orders()
     self.num_term = num_term
     self.window_term = window_term
     self.pl = pl
     self.ls = ls
     self.upper_kijun = upper_kijun
     self.lower_kijun = lower_kijun
     print('bot - updating crypto data..')
     LogMaster.add_log('action_message - bot - updating crypto data..', 0,
                       self.ac)
     CryptowatchDataGetter.get_and_add_to_csv()
     self.last_ohlc_min = datetime.now(self.JST).minute - 1
     print('bot - initializing MarketData..')
     OneMinMarketData.initialize_for_bot(num_term, window_term)
     print('bot - loading lgb model.')
     self.model_buy, self.model_sell = self.lgb.load_model()
     print('bot - started bot loop.')
     LogMaster.add_log('action_message - bot - started bot loop.',
                       self.prediction, self.ac)
예제 #27
0
    def entry_market_order(self, side, size):
        if self.ac.order_side == '':
            self.ac.update_order(side, 0, 0, size, '', 10, '')
            ltp = TickData.get_ltp()
            res, size, price, order_id = Trade.market_order_wait_till_execution3(
                side, size)
            if res == 0:
                print(side + ' entry market order has been executed.' +
                      'price=' + str(price) + ', size=' + str(size))
                self.ac.update_holding(side, price, size, order_id)
                self.ac.sync_position_order()
                self.ac.calc_collateral_change()
                self.ac.calc_pl(TickData.get_ltp())
                self.ac.add_order_exec_price_gap(price, ltp, side)
                print(
                    'holding_side={},holding_price={},holding_size={},total_pl={},collateral={},collateral_change={},realized_pl={}'
                    .format(self.ac.holding_side, self.ac.holding_price,
                            self.ac.holding_size, self.ac.total_pl,
                            self.ac.collateral, self.ac.collateral_change,
                            self.ac.realized_pl))
                LogMaster.add_log(
                    'Market order entry has been executed. ' + ' side=' +
                    side + ' size=' + str(size) + ' price=' + str(price),
                    self.prediction[0], self.ac)

            else:
                LogMaster.add_log(
                    'Market order has been failed.' + ' side=' + side + ' ' +
                    str(size), self.prediction[0], self.ac)
                print('market order failed!')
            self.ac.initialize_order()
        else:
            print('Entry market order - order is already exitst!')
            LogMaster.add_log('Entry market order - order is already exitst!',
                              self.prediction[0], self.ac)
예제 #28
0
 def __bot_initializer(self, num_term, window_term, pl_kijun,
                       future_period):
     Trade.cancel_all_orders()
     self.pl_kijun = pl_kijun
     print('bot - updating crypto data..')
     LogMaster.add_log('action_message - bot - updating crypto data..', 0,
                       self.ac)
     CryptowatchDataGetter.get_and_add_to_csv()
     self.last_ohlc_min = datetime.now(self.JST).minute - 1
     print('bot - initializing MarketData..')
     OneMinMarketData.initialize_for_bot(num_term, window_term,
                                         future_period, pl_kijun,
                                         num_term + 1)
     #self.model = CatModel()
     self.model = LgbModel()
     print('bot - generating training data')
     LogMaster.add_log('bot - training xgb model..', self.prediction[0],
                       self.ac)
     print('bot - training model..')
     #self.cbm = self.model.read_dump_model('./Model/cat_model.dat')
     self.bst = self.model.load_model('./Model/lgb_model.dat')
     print('bot - load cat model completed..')
     print('bot - started bot loop.')
     LogMaster.add_log('action_message - bot - started bot loop.',
                       self.prediction[0], self.ac)
예제 #29
0
 def exit_order(self):
     if self.ac.holding_side != '':
         print('quick exit order')
         status = Trade.market_order_wait_till_execution(
             'buy' if self.ac.holding_side == 'sell' else 'sell',
             self.ac.holding_size)
         if status is not None:
             if status['child_order_state'] == 'COMPLETED':
                 self.ac.initialize_holding()
                 print('exit order completed!')
                 LogMaster.add_log('exit order completed!',
                                   self.prediction[0], self.ac)
                 return 0
             else:
                 print('something wrong in exit order! ' + str(status))
                 LogMaster.add_log(
                     'something wrong in exit order! ' + str(status),
                     self.prediction[0], self.ac)
                 return -1
         else:
             print('something wrong in exit order! ' + str(status))
             LogMaster.add_log(
                 'something wrong in exit order! ' + str(status),
                 self.prediction[0], self.ac)
             return -1
예제 #30
0
 def check_exception(cls, exc):
     if 'Connection reset by peer' in str(exc):
         print('detected connection reset by peer error!')
         print('initialize trade class.')
         LineNotification.send_error('detected connection reset by peer error!')
         LogMaster.add_log('api_error - detected connection reset by peer error!',0,None)
         cls.initialize()
         time.sleep(10)
         return 'error'
     if 'Over API limit per minute' in str(exc):
         print('API private access reached limitation!')
         print('initialize trade class and sleep 60sec.')
         LineNotification.send_error('API private access reached limitation!')
         LogMaster.add_log('api_error - API private access reached limitation!',0,None)
         cls.flg_api_limit = True
         time.sleep(60)
         cls.initialize()
         return 'error'
     if 'Connection aborted.' in str(exc):
         print('Connection aborted error occurred!')
         print('initialize trade class and sleep 5sec.')
         LineNotification.send_error('Connection aborted.')
         LogMaster.add_log('api_error - Connection aborted error occurred!',0,None)
         cls.initialize()
         time.sleep(5)
         return 'error'
     return 'ok'