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)
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('버티기')
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에게 요청 하세요.')
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
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)