[암호화폐] 프로젝트#2 : Telegram Bot을 이용한 매매(3)

in sct •  5 years ago  (edited)

Telegram Bot으로 매매를 하려고 하니 잔고에 대한 정보도 필요하군요. 그래서 잔고를 출력해주는 명령어도 추가합니다.

잔고는 아래 함수 한 줄로 얻을 수 있습니다.

rets = api.find("tokens","balances",{ 'account': account})

명령어는 'BAL'로 정했습니다. 그냥 'BAL'만 입력하면 등록한 토큰 전체에 대한 잔고를 알려줍니다. 반면에 'BAL 토큰이름'을 입력하면 해당 토큰의 잔고만 알려줍니다. 만약 입력한 토큰이 없으면 없다고 알려주고요.

image.png

해당 기능을 하는 코드입니다.

def balances(bot, chat_id, account, interests) :
    data = "```\n== Balance ==\n"
    found = 0
    rets = api.find("tokens","balances",{ 'account': account})
    
    for ret in rets :
        if ( ret['symbol'] in interests ) :
            sstr = format(ret['symbol'],"7s") + " : " + format(float(ret['balance']),"12.5f") + '\n'
            data += sstr
            found = 1
    data += "```"
    if (found == 1) :
        bot.sendMessage(chat_id = chat_id, text=data, parse_mode="Markdown")
    else :
        data = "no such symbols"
        bot.sendMessage(chat_id = chat_id, text=data)

그리고 이 함수를 부르는 부분에서는 BAL 명령어 뒤에 토큰의 유무에 따라 해당하는 토큰 정보를 balances 함수에 전달합니다.

def eco()
    interests = []
    if (len(symbol) == 3) :  # balance
        if (symbol == 'BAL') :
            if (args_exist) : # only one token
                interests.append(args[1])
            else : 
                interests = config_data["interest_symbols"].copy()
            balances(bot, update.message.chat_id, my_account, interests) 
            return

파이썬에서 list 복사를 할 때 주의할 점이 있습니다. 아래와 같이 리스트 a를 b에 assign(=) 한 후 b에 3을 추가하였더니 리스트 a에도 추가되어 있습니다. 즉 리스트 assing(=)은 값을 복사하는 것이 아니라 리스트 a의 주소를 공유하고 있습니다.
image.png

앞에서 만든 balances 함수에 인자로 줄 interests는 당시 필요한 토큰들을 담기 위한 공간입니다. 만약 단순히 assign(=)을 하여 사용하면 관심 토큰을 들고 있는 변수인 config_data["interest_symbols"] 값도 함께 변경됩니다. 따라서 이렇게 일시적으로 리스트 값을 변경하면서 사용할 경우에는 .copy() 함수를 이용하여 실질적으로 값을 복사를 해야 합니다.

interests = config_data["interest_symbols"].copy()

리스트에 있는 값이 많은 경우에 매번 복사를 하면 시간이 많이 걸리다 보니, 파이썬에서는 기본적으로 주소를 공유하는 방식을 사용하고 있는 것 같습니다. 리스트 변수 assign을 하는 경우에는 값을 바꾸는 경우와 그냥 사용하는 경우를 잘 구분하여 .copy()를 사용할지 아니면 단순히 assign을 할지 판단하여야 할 것 같습니다.

현재 봇 상태는 매수 주문을 잘 들어가는데, 이상하게 매도 주문이 들어가지 않아서 디버깅 중입니다. 내일 정도면 정상적으로 돌아가는 거래 봇이 만들어질 것 같습니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

jcar토큰,
8월 구독 보팅입니다.
행복한 8월 되세요. ^^

음... 제 보팅봇이 왜 트아님의 글에 보팅이 안 되고 있었는 줄 이제 알았네요...
제가 1시간 이내의 홍보글만 가지고 오니 홍보를 1시간 이내에 하지 않으면 검색 자체가 안 되었군요...
화이트리스트로 바꿔야겠습니다 ㅎㅎ

화이트리스트 강추. 소각 시점은 대충없어서요.

Posted using Partiko Android

오늘도 안되어 있어서 보니....
trandingideas로 되어 있었네요 ㅜㅜ
오타...이제는 되겠죠 ㅋㅋ

저도 가끔 오타가. 이제는 오겠죠. ㅎ

Posted using Partiko Android

Hi @tradingideas!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.412 which ranks you at #2412 across all Steem accounts.
Your rank has improved 12 places in the last three days (old rank 2424).

In our last Algorithmic Curation Round, consisting of 143 contributions, your post is ranked at #92.

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers like your work!
  • Try to improve on your user engagement! The more interesting interaction in the comments of your post, the better!

Feel free to join our @steem-ua Discord server

^^