rust trading project: telegram api 연동

wangki·2025년 5월 30일

trading-algorithm

목록 보기
9/9

https://velog.io/@wang_ki/rust-binance-project-algorithm
이전 포스팅에서 알고리즘을 통해 얻은 가격 데이터를 터미널에 출력을 했었다.
원격으로도 받으면 좋을 것 같아 telegram api를 활용하여 봇에게 메시지를 보내는 방식을 구현하였다.

Bot 추가하기

Telegram에서 BotFather를 활용하여 알리미를 추가하는 방법은 여러가지 포스팅이 있으니 구글을 참조하면 될 것 같다.

Bot Token & Chat ID

telegram api를 활용하기 위해서는 Chat id가 필요하다. 즉, 봇의 id를 알아야한다. 이 부분도 구글에 검색하면 자세히 나와있다.
필요한 것은 bot tokenchat id이다.

telegram alert api 구현

간단한 telegram alert api를 만들었다.

#[derive(Clone)]
pub struct Telegram {
    bot_token: String,
    chat_id: String,
}

Telegram구조체에 bot_tokenchat_id필드를 가지고 있다.

 pub async fn send_alert(&self, msg: &str) -> anyhow::Result<()> {
        let url = format!("https://api.telegram.org/bot{}/sendMessage", self.bot_token);
        let client = Client::new();

        let value = json!({
            "name": "ChatGpt",
            "age": 3,
            "skills": ["Rust", "c++", "python"]
        });

        let _ = client.post(url)
            .json(&serde_json::json!({
                "chat_id": self.chat_id,
                "text": msg,
            }))
            .send()
            .await?;

        Ok(())
    }

매개변수로 bot에게 받을 메시지를 넘겨주면 끝이다.
아주 EZ하게 사용할 수 있도록 만들었다.
사용해보고 싶다면 아래 깃헙 링크에 접속하면 된다.
조만간 정리하여 crates.io에 올릴 예정이다.
https://github.com/wangki-kyu/telegram_alert_api

telegram api crate 사용

let futures = res.into_iter()
        .filter_map(|item| item.ok())
        .filter_map(|item| item)
        .flat_map(|t| {
            let telegram_clone = Arc::clone(&telegram);
            t.into_iter().map(move |algo| {
                let telegram_clone2 = Arc::clone(&telegram_clone);
                async move {
                    let json = serde_json::to_string_pretty(&algo).unwrap();
                    let result = format!("====== symbol: [{}], interval: [{}] ======\n{}", algo.get_symbol(), algo.get_interval(), json);
                    println!("{:?}", algo);
                    telegram_clone2.send_alert(result.as_str()).await.unwrap();
                }
            })
        });
        
    for t in futures {
        t.await;
    }

개발 중인 봇의 일부 코드이다. 세팅한 algorithm을 통과한 res값을 순회하며 async block 안에 telegram api를 호출 해준다.

최종적으로 futures를 돌면서 동기적으로 호출하게 된다. 정확히 telgram api가 어느 정도로 빠르게 호출이 되는지 확인해 봐야 할 것 같다. 확인 후 비동기적으로 빠르게 호출하도록 변경할 예정이다.

결과


위 사진처럼 설정한 데이터가 봇 알리미를 통해서 오는 것을 확인할 수 있다.

진전이 많이 있는 것 같다. 최종적으로 매수 매도 신호까지 가야한다. 그리고 알고리즘에 100%라는 것은 없다고 생각한다. 지속적으로 알고리즘을 블록단위로 만들어서 빠르게 원하는 전략을 세울 수 있도록 해야겠다.

0개의 댓글