Пример #1
0
    def close(self):
        message.info("close start")
        has_position = False
        while True:
            try:
                self.api.cancelallchildorders(
                    product_code=self.PRODUCT_CODE)

                position = self.__get_position()

                has_completed_close = \
                    position["side"] is None or position["size"] < 0.01
                if has_completed_close:
                    message.info("close complete")
                    return has_position
                else:
                    has_position = True

                side = self.__reverse_side(side=position["side"])
                size = position["size"]
                price = self.__get_order_price(side=side)

                assert self.is_valid_side(side=side)
                assert self.is_valid_size(size=size)
                assert self.is_valid_price(price=price)

                self.__send_order(side=side, size=size, price=price)
                time.sleep(1)
            except Exception:
                message.error(traceback.format_exc())
                time.sleep(3)
Пример #2
0
def initialize():
    sql = "select * from ticker"
    ticker = repository.read_sql(database=database, sql=sql)
    if ticker.empty:
        message.info("initialize ticker")
        sql = "insert into ticker values (now(),0,0)"
        repository.execute(database=database, sql=sql, write=False)
Пример #3
0
def has_changed_side(side):
    try:
        sql = "select * from entry"
        entry = \
            repository.read_sql(database=DATABASE, sql=sql)
        if entry.empty:
            message.warning("entry empty")
            return True
        latest_side = entry.at[0, "side"]
        if latest_side != side:
            message.info("change side from", side, "to", latest_side)
            return True
        else:
            return False
    except Exception:
        message.error(traceback.format_exc())
Пример #4
0
    def order(self, side):
        message.info(side, "order start")
        while True:
            try:
                self.api.cancelallchildorders(
                    product_code=self.PRODUCT_CODE)

                position = self.__get_position()

                has_position = position["side"] is not None
                should_close = has_position \
                    and (side != position["side"] and position["size"] >= 0.01)
                if should_close:
                    self.close()
                    continue

                price = self.__get_order_price(side=side)

                size = self.__get_order_size(
                    price=price, position_size=position["size"])

                has_completed_order = size < 0.01 \
                    or self.__has_changed_side(side=side)
                if has_completed_order:
                    message.info(side, "order complete")
                    order_side = side
                    order_size = \
                        self.__get_order_size(price=price, position_size=0)
                    order_size = float(math.round_down(order_size, -2))
                    return order_side, order_size

                assert self.is_valid_side(side=side)
                assert self.is_valid_size(size=size)
                assert self.is_valid_price(price=price)

                self.__send_order(side=side, size=size, price=price)
                time.sleep(1)
            except Exception:
                message.error(traceback.format_exc())
                time.sleep(3)
Пример #5
0
    def __send_order(self, side, size, price, minute_to_expire=1):
        try:
            side, size, price = \
                self.__order_normalize(side=side, size=size, price=price)

            self.api.sendchildorder(
                product_code=self.PRODUCT_CODE,
                child_order_type="LIMIT",
                side=side,
                size=size,
                price=price,
                minute_to_expire=minute_to_expire,
                time_in_force="GTC"
            )

            sendchildorder_content = \
                "side={side}, size={size}, price={price}"\
                .format(side=side, size=size, price=price)
            message.info("sendchildorder", sendchildorder_content)
        except Exception:
            message.error(traceback.format_exc())
            time.sleep(3)
Пример #6
0
def execute(database: str, sql: str, log=True, write=True) -> tuple:
    conn = MySQL(database=database).conn
    cur = conn.cursor()
    try:
        cur.execute(sql)
        sql_lower = sql.lower()
        if "select" in sql_lower and "from" in sql_lower:
            result = cur.fetchall()
            return result
        else:
            conn.commit()
            if write:
                if log:
                    message.info(sql)
                else:
                    print(sql)
    except Exception:
        message.error(traceback.format_exc())
    finally:
        conn.commit()
        conn.close()
        cur.close()
Пример #7
0
def save_entry(side):
    message.info(side, "entry")
    sql = "update entry set side='{side}'".format(side=side)
    repository.execute(database=DATABASE, sql=sql, write=False)
Пример #8
0
        sql = "select * from entry"
        entry = repository.read_sql(database=DATABASE, sql=sql)
        if entry.empty:
            continue
        side = entry.at[0, "side"]
    except Exception:
        message.error(traceback.format_exc())
        continue

    if latest_side is None \
            or latest_side != side:
        if side == "CLOSE":
            bitflyer.close()

            if retry_sleep(secs=120, side=side):
                message.info("close retry")
                bitflyer.close()
                message.info("close retry complete")

                latest_side = side

        else:  # side is BUY or SELL
            bitflyer.order(side=side)

            if retry_sleep(secs=120, side=side):
                message.info("order retry")
                bitflyer.order(side=side)
                message.info("order retry complete")

                latest_side = side
Пример #9
0
        high_line --------- |¯|
        low_line  --------- |_|
                             |  <- break
    """
    invalid_trading = break_high_line and break_low_line

    if invalid_trading:
        candlestick_Minute = Date.minute
        while True:
            minute = \
                datetime.datetime.now().minute
            if candlestick_Minute != minute:
                break
            time.sleep(1)

        message.info("invalid trading")
        continue
    else:
        entry_buy = break_high_line and not has_buy
        entry_sell = break_low_line and not has_sell

        if entry_buy:
            save_entry(side="BUY")
            has_buy = True
            has_sell = False

        if entry_sell:
            save_entry(side="SELL")
            has_buy = False
            has_sell = True
Пример #10
0
        'RESOLUTION': '800x600',
        'COMPRESSION': 'gzip',
        'VRAM': '256',
        'ISO': '',
        'DEB': '',
        'HOOK': '',
        'KERNEL': 'default',
        'PURGE_KERNEL': True,
    }
)

if not os.path.isfile('/etc/customizer.conf'):
    message.warning('Configuration file does not exist', '/etc/customizer.conf')

conf.read('/etc/customizer.conf')
message.info('Read Configuration file', '/etc/customizer.conf')
for section in ('preferences', 'saved'):
    if not conf.has_section(section):
        conf.add_section(section)

# Make sure these end up to be strings in both python2 and python3.
WORK_DIR = '{}'.format(conf.get('preferences', 'WORK_DIR'))
LOCALES = '{}'.format(conf.get('preferences', 'LOCALES'))
RESOLUTION = '{}'.format(conf.get('preferences', 'RESOLUTION'))
COMPRESSION = '{}'.format(conf.get('preferences', 'COMPRESSION'))
VRAM = '{}'.format(conf.get('preferences', 'VRAM'))

ISO = '{}'.format(conf.get('saved', 'ISO'))
DEB = '{}'.format(conf.get('saved', 'DEB'))
HOOK = '{}'.format(conf.get('saved', 'HOOK'))
KERNEL = '{}'.format(conf.get('saved', 'KERNEL'))
Пример #11
0
def insert_data():
    message.info("initial entry")
    sql = "insert into entry values('CLOSE')"
    repository.execute(database=DATABASE, sql=sql, write=False)
Пример #12
0
                         api_secret=Bitflyer.Api.value.SECRET.value)
    balance = api.getbalance()
    if "error_message" in balance:
        raise ConfigException()


def truncate_table():
    sql = "truncate entry"
    repository.execute(database=DATABASE, sql=sql)


def insert_data():
    message.info("initial entry")
    sql = "insert into entry values('CLOSE')"
    repository.execute(database=DATABASE, sql=sql, write=False)


if __name__ == "__main__":
    DATABASE = "tradingbot"

    stdout.AA()
    print("tradingbot amateras start !!")

    message.info("initialize start")

    config_test()
    truncate_table()
    insert_data()

    message.info("initialize complete")