43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import requests
|
|
|
|
TRALGO_URL = "https://tralgo.app/wp-json/trade-api/v1/add-trade"
|
|
|
|
_DIRECTION = {"Long": "B", "Short": "S", "B": "B", "S": "S"}
|
|
|
|
|
|
def _trade_payload(trade):
|
|
return {
|
|
"tradingaccount": trade["account"],
|
|
"instrument": trade["instrument"],
|
|
"type": _DIRECTION.get(trade["direction"], trade["direction"]),
|
|
"lots": abs(trade["lots"]),
|
|
"entry_price": trade["entry_price"],
|
|
"exit_price": trade["exit_price"],
|
|
"entry_datetime": trade["entry_datetime"],
|
|
"exit_datetime": trade["exit_datetime"],
|
|
"fees": 0,
|
|
"transfer_token": trade["trade_id"],
|
|
}
|
|
|
|
|
|
def send_trade(api_key, trade):
|
|
"""POST a single trade. Raises on HTTP error."""
|
|
return send_trades_bulk(api_key, [trade])
|
|
|
|
|
|
def send_trades_bulk(api_key, trades):
|
|
"""POST one or more trades in a single request. Raises on HTTP error."""
|
|
if not trades:
|
|
return
|
|
headers = {"API-Key": api_key, "Content-Type": "application/json"}
|
|
if len(trades) == 1:
|
|
body = _trade_payload(trades[0])
|
|
else:
|
|
body = {"trades": [_trade_payload(t) for t in trades]}
|
|
resp = requests.post(TRALGO_URL, json=body, headers=headers, timeout=15)
|
|
resp.raise_for_status()
|
|
try:
|
|
return resp.json()
|
|
except Exception:
|
|
return resp.text
|