Scripted Driver

Custom Scripted Driver

HaasOnline Trade Server provides the ability to create and maintain your own custom exchange driver.


  • Only 1 driver per instance

  • Spot & Leverage supported

  • No simulated accounts supported

  • .NET Framework v4.5

  • Use RestSharp v105.2.3 for API calls.

  • Place the file in "HTS/ScriptDriver" and rename it to ExchangeDriver.cs



public interface IScriptApi
void Connect();
void Disconnect();
int PollingSpeed { get; }
ScriptedExchangeType PlatformType { get; }
bool HasTickerBatchCalls { get; }
bool HasOrderbookBatchCalls { get; }
bool HasLastTradesBatchCalls { get; }
bool HasPrivateKey { get; set; }
bool HasExtraPrivateKey { get; set; }
string PingAddress { get; set; }
void SetCredentials(string publicKey, string privateKey, string extra);
event EventHandler<string> Error;
event EventHandler<IScriptTick> PriceUpdate;
event EventHandler<IScriptOrderbook> OrderbookUpdate;
event EventHandler<IScriptOrderbook> OrderbookCorrection;
event EventHandler<IScriptLastTrades> LastTradesUpdate;
event EventHandler<Dictionary<string, decimal>> WalletUpdate;
event EventHandler<Dictionary<string, decimal>> WalletCorrection;
event EventHandler<List<IScriptPosition>> PositionListUpdate;
event EventHandler<List<IScriptPosition>> PositionCorrection;
event EventHandler<List<IScriptOrder>> OpenOrderListUpdate;
event EventHandler<List<IScriptOrder>> OpenOrderCorrection;
IScriptTick GetTicker(IScriptMarket market);
List<IScriptTick> GetAllTickers();
IScriptOrderbook GetOrderbook(IScriptMarket market);
List<IScriptOrderbook> GetAllOrderbooks();
IScriptLastTrades GetLastTrades(IScriptMarket market);
List<IScriptLastTrades> GetAllLastTrades();
Dictionary<string, decimal> GetWallet();
IScriptMarginWallet GetMarginWallet();
List<IScriptOrder> GetOpenOrders();
List<IScriptPosition> GetPositions();
List<IScriptOrder> GetTradeHistory();
string PlaceOrder(IScriptMarket market, ScriptedOrderType direction, decimal price, decimal amount, bool isMarketOrder, string template = "", bool hiddenOrder = false);
string PlaceOrder(IScriptMarket market, ScriptedLeverageOrderType direction, decimal price, decimal amount, decimal leverage, bool isMarketOrder, string template = "", bool isHiddenOrder = false);
bool CancelOrder(IScriptMarket market, string orderId, bool isBuyOrder);
decimal GetContractValue(IScriptMarket pair, decimal price);
IScriptOrder GetOrderDetails(string orderId, IScriptMarket market, decimal price, decimal amount, bool isBuyOrder);
ScriptedOrderStatus GetOrderStatus(string orderId, IScriptMarket scriptMarket, decimal price, decimal amount, bool isBuyOrder);
List<IScriptMarket> GetMarkets();
List<IScriptMarket> GetMarginMarkets();
decimal GetMaxPositionAmount(IScriptMarket pair, decimal tickClose, Dictionary<string, decimal> wallet, decimal leverage, ScriptedLeverageSide scriptedLeverageSide);