🐁

(CLI)通貨取引アプリ作ってみた

2024/11/27に公開

概要

通貨取引のようなアプリ。
売買のオーダーができて、先入れ先出しでマッチするような機能があります。

はじめに

自分のアプリを作ってみたくなり、通貨の取引アプリを作ってみました。
まずは機能だけということでCLI(ターミナル上で動作)のアプリになります。
https://github.com/gen-gen33/trading_app_cli/tree/with_trading_function
(branch:with_trading_functionです。)

動作環境

  • windows 11
  • Go 1.23.3
  • CockroachDB v24.1.6
    Build Time: 2024/10/14 17:21:12

使うイメージ

go run main.go
もしくは、build後、実行すると、まずはデータベースとの接続を試みます。
その後、コマンドの説明があり、実際に使っていくことができます。
使用感は以下のようになります。

$ go build -o tradeApp main.go
$ ./tradeApp

Connected to CockroachDB! # データベースへの接続確認
2024/11/27 10:30:16 Tables reset successfully # テーブルをリセット
Tables created successfully! # テーブルを作成

# ここからトレード開始
Welcome to the CLI Trading App! # コマンドヘルプ
Commands:
 - create <user name> <balance>
 - login <user name>
 - buy <amount> <price>
 - sell <amount> <price>
 - orders
 - trades
 - logout
 - help
 - exit

> create gen 1000 # genというユーザーを1000通貨で登録
User created successfully!

> buy 10 100 # buyオーダーを通してみる
You must log in first. # オーダーにはログインが必要
> Invalid command.
> Invalid command. # 余分なインプットが2個入ってる。エラーハンドリングが必要。

> login gen # 作ったユーザーでログイン

> buy 10 100 # buyオーダー
Order added. No match found.
Order added to the open order book. # マッチするオーダーがないのでとりあえずオーダーブックに追記

> sell 100 100 # sell オーダー
Trade executed: gen sell 10.00 units at 100.00 with gen # マッチするオーダーがあったので、希望価格でトレード

> orders # 残っているオーダーを確認する。100通貨のsellのオーダーが数量90で残っているはず
Open Buy Orders:

Open Sell Orders:
User: gen | Amount: 90.00 | Price: 100.00 | Date: 2024-11-27T01:30:39.244091Z

> trades # 執行された取引履歴を確認する
Trades:
Trade ID: 1024329774704033793 | Buyer: gen (Order ID: 1024329765483085825) | Seller: gen (Order ID: 1024329774676869121) | Amount: 10.00 | Price: 100.00 | Date: 2024-11-27T01:30:39.246767Z

> exit # アプリ終了
Goodbye!

おわりに

今、実装できた機能としては、

  • ユーザー登録
  • ログイン
  • オーダーを出す
  • マッチングしたものがあれば取引を実行する
    です。

取引の金額をユーザーに反映させたり、ユーザーの取引量を制限したり、新しく入金したりと、まだまだあったほうが良い機能はありそうですが、一旦、次はUIを作ってみようかなと思います。

Discussion