Beispiel #1
0
def init(best_coin='', order_money=0):
    init_counter = 0
    print(f"이번시간에 투자할 코인은? {best_coin}")
    # 가장 살만할 것 같은 코인 매수
    response = pyupbit.order_best_coin(best_coin, order_money)
    print(f'주문 결과 ::: {response} / uuid ::: {pyupbit.get_order_bid_uuid(response.json())}')
    # 주문 성공 시 매수 완료 될 때 까지 대기
    if 200 <= response.status_code <= 299:
        # 매수 신청 후 매수 될 때까지 대기
        while pyupbit.get_my_coin_info() is None:
            # 1초에 한번 매수 되었는지 확인
            time.sleep(1)
            init_counter = init_counter + 1
            print('매수 체결 대기 중...')
            if init_counter >= 30:
                print(f'아직 사지지 않았습니다. 30초 후 다시 초기화 작업 시작합니다..')
                # 너무 오래 걸리면 주문 취소, 30초 후 다시 매수 시도
                pyupbit.cancel_order(pyupbit.get_order_bid_uuid(response.json()))
                time.sleep(30)
                init(best_coin, order_money)
    # 주문 실패 시 재 주문 시도(10초 후)
    else:
        print(f'재 주문 시도(10초 후 다시 초기화 작업 시작합니다.)...{response.status_code} / {response.json()}')
        time.sleep(10)
        init(best_coin, order_money)
Beispiel #2
0
def test_init():
    print('init test')
    order_money = 20_000
    my_coin_dict = pyupbit.get_my_coin_info()
    coin_name = ''
    for key, value in my_coin_dict.items():
        coin_name = key
    unit_price = my_coin_dict[coin_name][0]
    quantity = my_coin_dict[coin_name][1]
    coin_value = float(unit_price) * float(quantity)
    print(
        f'코인 단가 : {unit_price}, 수량 : {quantity}, 가치 : {round(float(unit_price) * float(quantity), 2)}'
    )
    # 분단위 캔들
    coin_info = pyupbit.view_candle_min(coin_name)
    # 내가 매수 한 코인 단가
    buy_unit_price = pyupbit.get_my_coin_unit_price(my_coin_dict)
    # 현재 코인 단가
    current_unit_price = pyupbit.get_current_coin_price(coin_info)
    # 수익률(100%가 매수 시점 단가)
    profit_rate = pyupbit.get_profit_rate(current_unit_price, buy_unit_price)
    print(
        f'매수시 코인 단가 : {buy_unit_price}, 현재코인단가 : {current_unit_price}, 수익률 : {profit_rate}'
    )
    if profit_rate > 100:
        print('팔기')
    else:
        print('버티기')
Beispiel #3
0
def sell_all():
    # config.json 자동 매도 기능 허용 여부 확인
    if pyupbit.get_auto_sell() == 'YES':
        myinfo_map = pyupbit.get_my_coin_info()

        if myinfo_map is not None:
            # 코인명
            market = pyupbit.get_my_coin_name(myinfo_map)
            # 내가 구매 한 코인 수
            my_coin_amount = pyupbit.get_my_coin_total_amount(myinfo_map)
            # 분단위 캔들
            coin_info = pyupbit.view_candle_min(market)
            # 코인의 현재 단가(분단위 캔들로 조회)
            current_my_coin_price = pyupbit.get_current_coin_price(coin_info)

            order_price = current_my_coin_price
            order_volume = my_coin_amount
            order_type = 'ask'

            # 전량 매도!
            order_coin(market_name=market,
                       order_money=order_price,
                       order_volume=order_volume,
                       type=order_type)
    else:
        pyupbit.send_message(
            pyupbit.get_slack_channel(),
            '자동 매도 기능을 허용하지 않았습니다. \ninvest_helper에게 요청 하세요.')
Beispiel #4
0
def test_profit_rate():
    print('test start')
    my_investment = pyupbit.get_my_coin_info()
    current_coin = pyupbit.view_candle_min(list(my_investment.keys())[0])
    current_coin_price = pyupbit.get_current_coin_price(current_coin)
    print(
        f'my_investment ::: {my_investment} / current_coin_info ::: {current_coin_price}'
    )
def check_my_investment():
    profit_rate = 0
    myinfo_map = pyupbit.get_my_coin_info()

    if myinfo_map is not None:
        # 코인명
        market = pyupbit.get_my_coin_name(myinfo_map)
        # 내가 매수 한 코인 단가
        buy_unit_price = pyupbit.get_my_coin_unit_price(myinfo_map)
        # 분단위 캔들
        coin_info = pyupbit.view_candle_min(market)
        # 코인의 현재 단가(분단위 캔들로 조회)
        current_my_coin_price = pyupbit.get_current_coin_price(coin_info)
        # 현재 수익률
        profit_rate = pyupbit.get_profit_rate(current_my_coin_price, buy_unit_price)
    return profit_rate <= 100
Beispiel #6
0
def profit_check_and_order():
    # config.json에 있는 투자금액 만큼만 투자
    order_money = float(pyupbit.get_my_order_price())
    # 한시간마다 투자 재시작 시키기 위한 카운터
    counter = 0
    # 직전 수익률
    prev_profit_rate = 100
    # 비교용 수익률
    recoding_profit_rate = 100
    # 수익률스코어
    score = 0
    # 마이너스 체험 여부
    has_minus_exp = False
    # 전체 코인 코드
    all_market_codes = pyupbit.all_market_names.view_market_codes()
    # 전체 코인 이름
    all_market_names = pyupbit.all_market_names.view_market_names()
    # 투자 가능한 코인 맵
    investable_coins_map = {}

    # 프로그램 시작
    while True:
        # 처음 시작 / 1일 동안 별 소득 없으면 투자 초기화 동작
        if counter % 17280 == 0:
            # 수익률 먼저 체크(수익률이 100% 이하인지 확인)
            keep_going = pyupbit.check_my_investment()
            print('Finding the best coin to invest...(It runs once in a day.)')
            # 수익률이 100% 초과면 매도 하고 시작
            if not keep_going:
                if pyupbit.get_my_coin_info() is not None:
                    # 전 시간에 투자 한 코인 전량 매도
                    pyupbit.sell_all()
                if pyupbit.get_my_coin_info() is None:
                    # 코인 찾아서 매수
                    pyupbit.init_prepairing(investable_coins_map, all_market_codes, all_market_names, order_money)
            else:
                slack_message = ':meow_party: 수익률이 100% 이하라서 매도 없이 초기화 시작함.'
                print(slack_message)
                pyupbit.send_message(pyupbit.get_slack_channel(), slack_message)
            # 스코어 초기화
            score = 0

        # 매수 한 투자 정보 조회
        my_investment = pyupbit.get_my_coin_info()
        if my_investment is not None:
            for market in my_investment.keys():
                # 코인의 현재 수익률을 확인하면서 매도 여부 판단 -> 자동 매도 처리 함(auto_sell 옵션에 따라 동작 - YES/NO)
                strategy_report_arr = pyupbit.new_working(market, my_investment, prev_profit_rate, score, has_minus_exp)
                prev_profit_rate = strategy_report_arr[0]
                score = strategy_report_arr[1]
                has_minus_exp = strategy_report_arr[2]
                # 수익률이 애매할 때 슬랙으로 메시지 보내기(30초에 1회)
                if prev_profit_rate > 100 and counter % 30 == 0:
                    notice_message = f':quad_parrot: 코인 : {market}, \n수익률 : {prev_profit_rate}%, \n수익률 변동폭 : {round(prev_profit_rate - recoding_profit_rate, 2)}%, \n마이너스 다녀온적? : {has_minus_exp}'
                    print(f'send message! / {notice_message} / {counter}')
                    pyupbit.send_message(pyupbit.get_slack_channel(), notice_message)
                    recoding_profit_rate = prev_profit_rate
        else:
            # 내 계좌에 코인이 없으면 다시 주문금액 만큼 매수
            pyupbit.init_prepairing(investable_coins_map, all_market_codes, all_market_names, order_money)
            # 스코어 초기화
            score = 0
            # 재시작 카운터 초기화(매도 했으니 초기화)
            counter = 0
        counter = counter + 1
        # 위의 프로세스는 5초에 1회 동작
        time.sleep(5)