curl --request GET \
--url http://localhost:8000/executors/performance \
--header 'Authorization: Basic <encoded-value>'import requests
url = "http://localhost:8000/executors/performance"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('http://localhost:8000/executors/performance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8000",
CURLOPT_URL => "http://localhost:8000/executors/performance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://localhost:8000/executors/performance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://localhost:8000/executors/performance")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8000/executors/performance")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"total_executors": 123,
"by_status": {},
"pnl_total_quote": 123,
"unrealized_pnl_quote": 123,
"global_pnl_quote": 123,
"pnl_pct_avg": 123,
"fees_total_quote": 123,
"volume_total_quote": 123,
"win_rate": 123,
"by_type": [
{
"executor_type": "<string>",
"total": 123,
"completed": 123,
"running": 123,
"pnl_quote": 123,
"volume_quote": 123,
"fees_quote": 123
}
],
"active_positions": 123,
"controller_id": "<string>",
"sharpe_ratio": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get Performance Report
Get a performance report for executors.
Aggregates metrics from all completed executors (optionally filtered by controller_id):
- Realized PnL (from completed executors, excluding POSITION_HOLD close type)
- Unrealized PnL (from active executors + position holds)
- Global PnL (realized + unrealized)
- Fees and volume totals
- Win rate and Sharpe ratio
- Breakdown by executor type
- Active position count
Query parameters:
- controller_id: Filter by controller ID (omit for all controllers)
curl --request GET \
--url http://localhost:8000/executors/performance \
--header 'Authorization: Basic <encoded-value>'import requests
url = "http://localhost:8000/executors/performance"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('http://localhost:8000/executors/performance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8000",
CURLOPT_URL => "http://localhost:8000/executors/performance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://localhost:8000/executors/performance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://localhost:8000/executors/performance")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8000/executors/performance")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"total_executors": 123,
"by_status": {},
"pnl_total_quote": 123,
"unrealized_pnl_quote": 123,
"global_pnl_quote": 123,
"pnl_pct_avg": 123,
"fees_total_quote": 123,
"volume_total_quote": 123,
"win_rate": 123,
"by_type": [
{
"executor_type": "<string>",
"total": 123,
"completed": 123,
"running": 123,
"pnl_quote": 123,
"volume_quote": 123,
"fees_quote": 123
}
],
"active_positions": 123,
"controller_id": "<string>",
"sharpe_ratio": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Query Parameters
Response
Successful Response
Performance report for executors, optionally filtered by controller_id.
Total executor count
Executor count by status
Show child attributes
Show child attributes
Realized PnL from completed executors in quote currency
Unrealized PnL from active executors and position holds
Global PnL (realized + unrealized)
Average PnL percentage across completed executors
Total cumulative fees in quote currency
Total volume traded in quote currency. Volume GENERATED, not capital deployed: an LP position's deposit is excluded, and the volume its range actually saw is derived from the fees it earned.
Win rate: fraction of completed executors with positive PnL
Performance breakdown by executor type
Show child attributes
Show child attributes
Number of active position holds
Controller ID filter (None = all)
Sharpe ratio of PnL returns (null if <2 executors)
Was this page helpful?

