Bring your strategy. Change ~2 lines. Your source code never leaves our server.
Your bot doesn't talk to an exchange directly and never holds API keys. Instead it submits orders to our SDK, and our broker executes them at the real price on the correct account โ your account for your live track record, and each customer's account for their copy. That's what lets us give every bot a verified record (independently recorded by us) while keeping your code private.
Keep all your strategy logic. Just route execution through vault:
import vault
ex = vault.ccxt() # drop-in ccxt-style client โ no API keys needed
price = get_price("BTC/USDT") # your own logic
if my_signal_is_buy:
ex.create_order("BTC/USDT", "market", "buy", vault.size(price)) # sized to the runner's capital
Already using ccxt? Replace ccxt.binance({...keys...}) with vault.ccxt() and delete your keys โ your existing create_order(...) calls keep working.
vault.capital() โ the capital of whoever is running this copy (the customer, or you for live proof).vault.size(price, risk_pct=2) โ quantity sized to that capital (e.g. 2% per trade). Use this instead of a fixed amount so your bot scales to every customer automatically.vault.ccxt(venue="coinbase") โ a ccxt-compatible client whose create_order(symbol, "market", side, amount) routes safely through the broker.vault.place_order(market, side, qty, venue) โ lower-level order submit (returns the fill).vault.record_trade(...) โ optional self-reported trade (marked unverified; prefer real orders).Supported venues: any major exchange (coinbase, binance, kraken, bybit, okx, kucoin, โฆ). Pass the venue to vault.ccxt("binance").
When you list, you choose how your public record is built:
Either way the record is verified by our broker and can't be faked. Live simply carries more weight.
main.py at the top level (or a Dockerfile for any language).requirements.txt โ we build your dependencies automatically.import time, vault
MARKET, VENUE = "BTC-USD", "coinbase"
ex = vault.ccxt(VENUE)
def price():
# your data/indicator logic here
...
while True:
p = price()
if buy_signal(p):
ex.create_order(MARKET, "market", "buy", vault.size(p, risk_pct=2))
elif sell_signal(p):
ex.create_order(MARKET, "market", "sell", vault.size(p, risk_pct=2))
time.sleep(60)