Skip to content

Commit

Permalink
Merge branch 'release/v1.0.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
takkin-takilog committed Aug 20, 2023
2 parents 7c6074c + a55f419 commit f9492ac
Show file tree
Hide file tree
Showing 25 changed files with 513 additions and 137 deletions.
2 changes: 1 addition & 1 deletion api_server_msgs/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>api_server_msgs</name>
<version>0.1.0</version>
<version>1.0.0</version>
<description>The api_server_msgs package</description>
<maintainer email="takkin.takilog@gmail.com">takkin</maintainer>
<license>MIT</license>
Expand Down
164 changes: 164 additions & 0 deletions api_server_oanda/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
# api_server_oanda

`api_server_oanda`はOANDA社が提供する[REST API](https://developer.oanda.com/docs/jp/)の機能をROSメッセージ通信で抽象化したラッパー・パッケージです。

# Node

- [pricing_publisher Node](https://github.com/takkin-takilog/namake-trader/tree/develop/api_server_oanda#pricing_publisher-node)
- [api_server Node](https://github.com/takkin-takilog/namake-trader/tree/develop/api_server_oanda#api_server-node)

## pricing_publisher Node
[pricing_publisher](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_oanda/api_server_oanda/pricing_publisher.py)ノードは特定の通貨ペアに対するリアルタイム為替レートをトピック配信します。
OANDA REST APIサーバーとのストリーミング接続がアクティブであるかを判別するための死活監視シグナルも定周期でトピック配信します。

### Published Topics

- **pricing_### ([api_server_msgs/Pricing](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/msg/Pricing.msg))**

特定の通貨ペアに対するリアルタイム為替レート。
Parametersの`use_instrument.###``true`が設定された通貨ペアのみ有効となります。
`###`で指定可能な通貨ペアは以下となります。
- usdjpy, eurjpy, eurusd, gbpjpy, audjpy, nzdjpy, cadjpy, chfjpy

- **heart_beat ([std_msgs/String](https://docs.ros2.org/foxy/api/std_msgs/msg/String.html))**

死活監視シグナル。アクティブ時は5秒毎に送信されます。

### Parameters

- **use_env_live (bool, default=`false`)**

`true`の場合は本番口座環境を使用し、`false`の場合はデモ口座環境を使用します。

- **env_practice.account_number (string, default=None)**

デモ口座のアカウントID

- **env_practice.access_token (string, default=None)**

デモ口座のAPIトークン

- **env_live.account_number (string, default=None)**

本番口座のアカウントID

- **env_live.access_token (string, default=None)**

本番口座のAPIトークン

- **connection_timeout (int, default=10)**

API接続アイムアウト時間[]

- **use_instrument.### (bool, default=`false`)**

`true`の場合、指定通貨ペアのpublishが有効になります。
`###`で指定可能な通貨ペアはPublished Topicsの`pricing_###`を参照。)

#### Example:
```
pricing_publisher:
ros__parameters:
use_env_live: false
env_practice:
account_number: "***-***-*******-***" # Replace your account_number (Demo account)
access_token: "********************************-********************************" # Replace your access_token (Demo account)
env_live:
account_number: "***-***-*******-***" # Replace your account_number (Live account)
access_token: "********************************-********************************" # Replace your access_token (Live account)
use_instrument:
usdjpy: true
eurjpy: true
eurusd: true
gbpjpy: false
audjpy: false
nzdjpy: false
cadjpy: false
chfjpy: false
connection_timeout: 10 # [sec]
```

## api_server Node
[api_server](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_oanda/api_server_oanda/api_server.py)ノードは新規注文の生成やキャンセル、決済注文のほか、ローソク足情報、口座情報、リアルタイム為替レートなどを取得するサービスを提供します。

### Services

- **order_create([api_server_msgs/OrderCreateSrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/OrderCreateSrv.srv))**

新規注文を生成します。
注文が約定した場合は注文の種類に応じて下記のIDが返されます。
- 成り行き注文:トレードID
- 指値/逆指値注文:注文ID

- **trade_details([api_server_msgs/TradeDetailsSrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/TradeDetailsSrv.srv))**

指定されたトレードIDに紐づくトレード情報詳細を取得します。

- **trade_crcdo([api_server_msgs/TradeCRCDOSrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/TradeCRCDOSrv.srv))**

指定されたトレードIDに紐づくトレード内容を変更します。

- **trade_close([api_server_msgs/TradeCloseSrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/TradeCloseSrv.srv))**

指定されたトレードIDに紐づくトレードを決済します。
決済が約定した場合は決済情報が返されます。

- **order_details([api_server_msgs/OrderDetailsSrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/OrderDetailsSrv.srv))**

指定された注文IDに紐づく注文情報詳細を取得します。

- **order_cancel([api_server_msgs/OrderCancelSrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/OrderCancelSrv.srv))**

指定された注文IDに紐づく注文を取り消します。
注文が未約定状態でないと、取り消しは失敗します。

- **candles_query([api_server_msgs/CandlesQuerySrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/CandlesQuerySrv.srv))**

指定された通貨ペア、時間足のローソク足(OHLC)情報を取得します。

- **account_query([api_server_msgs/AccountQuerySrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/AccountQuerySrv.srv))**

口座情報を取得します。

- **pricing_query([api_server_msgs/PricingQuerySrv](https://github.com/takkin-takilog/namake-trader/blob/develop/api_server_msgs/srv/PricingQuerySrv.srv))**

指定された通貨ペアのリアルタイム為替レートを取得します。

### Parameters
- **use_env_live (bool, default=`false`)**

`true`の場合は本番口座環境を使用し、`false`の場合はデモ口座環境を使用します。

- **env_practice.account_number (string, default=None)**

デモ口座のアカウントID

- **env_practice.access_token (string, default=None)**

デモ口座のAPIトークン

- **env_live.account_number (string, default=None)**

本番口座のアカウントID

- **env_live.access_token (string, default=None)**

本番口座のAPIトークン

- **connection_timeout (int, default=10)**

API接続アイムアウト時間[]

#### Example:
```
api_server:
ros__parameters:
use_env_live: false
env_practice:
account_number: "***-***-*******-***" # Replace your account_number (Demo account)
access_token: "********************************-********************************" # Replace your access_token (Demo account)
env_live:
account_number: "***-***-*******-***" # Replace your account_number (Live account)
access_token: "********************************-********************************" # Replace your access_token (Live account)
connection_timeout: 10 # [sec]
```
12 changes: 0 additions & 12 deletions api_server_oanda/api_server_oanda/api_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,6 @@ def __init__(self) -> None:
def _on_recv_order_create(
self, req: SrvTypeRequest, rsp: SrvTypeResponse
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[order_create]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - ordertype_msg.type:[{}]".format(req.ordertype_msg.type))
Expand Down Expand Up @@ -287,7 +286,6 @@ def _on_recv_order_create(
def _on_recv_trade_details(
self, req: SrvTypeRequest, rsp: SrvTypeResponse
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[trade_details]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - trade_id:[{}]".format(req.trade_id))
Expand Down Expand Up @@ -389,7 +387,6 @@ def _on_recv_trade_details(
def _on_recv_trade_crcdo(
self, req: SrvTypeRequest, rsp: SrvTypeResponse
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[trade_crcdo]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - trade_id:[{}]".format(req.trade_id))
Expand Down Expand Up @@ -461,7 +458,6 @@ def _on_recv_trade_crcdo(
def _on_recv_trade_close(
self, req: SrvTypeRequest, rsp: SrvTypeResponse
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[trade_close]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - trade_id:[{}]".format(req.trade_id))
Expand Down Expand Up @@ -548,7 +544,6 @@ def _on_recv_trade_close(
def _on_recv_order_details(
self, req: SrvTypeRequest, rsp: SrvTypeResponse
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[order_details]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - order_id:[{}]".format(req.order_id))
Expand Down Expand Up @@ -637,7 +632,6 @@ def _on_recv_order_details(
def _on_recv_order_cancel(
self, req: SrvTypeRequest, rsp: SrvTypeResponse
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[order_cancel]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - order_id:[{}]".format(req.order_id))
Expand Down Expand Up @@ -709,7 +703,6 @@ def _on_recv_order_cancel(
def _on_recv_candles_query(
self, req: SrvTypeRequest, rsp: SrvTypeResponse
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[candles_query]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - gran_msg.gran_id:[{}]".format(req.gran_msg.gran_id))
Expand Down Expand Up @@ -869,7 +862,6 @@ def _on_recv_candles_query(
def _on_recv_account_query(
self, req: SrvTypeRequest, rsp: SrvTypeResponse # pylint: disable=W0613
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[account_query]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - None")
Expand Down Expand Up @@ -960,7 +952,6 @@ def _on_recv_account_query(
def _on_recv_pricing_query(
self, req: SrvTypeRequest, rsp: SrvTypeResponse
) -> SrvTypeResponse:

self.logger.debug("{:=^50}".format(" Service[pricing_query]:Start "))
self.logger.debug("<Request>")
self.logger.debug(" - inst_msg.inst_id:[{}]".format(req.inst_msg.inst_id))
Expand Down Expand Up @@ -1062,7 +1053,6 @@ def _generate_order_create_data(
if (req.ordertype_msg.type == OrderType.TYP_LIMIT) or (
req.ordertype_msg.type == OrderType.TYP_STOP
):

tmp = {
"price": self._fit_unit(req.price, one_pip_str),
"timeInForce": "GTC",
Expand Down Expand Up @@ -1090,7 +1080,6 @@ def _generate_trade_crcdo_data(
self,
req: SrvTypeRequest,
) -> dict[str, dict[str, str]]:

inst_param = InstParam.get_member_by_msgid(req.inst_msg.inst_id)
one_pip_str = inst_param.one_pip_str

Expand All @@ -1114,7 +1103,6 @@ def _fit_unit(self, value: float, one_pip_str: str) -> str:


def main(args: list[str] | None = None) -> None:

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ADD_CIPHERS

rclpy.init(args=args)
Expand Down
Loading

0 comments on commit f9492ac

Please sign in to comment.