Strategy Framework and API Functions
In the strategies written in JavaScript
, Python
and cpp
, the Sleep()
function needs to be called in the main loop of those strategies. It will be used to control the backtracking speed. In live trading, it is used to control the strategy polling intervals, and also control the requesting frequency of accessing the API interface of the exchange.
function onTick(){
//Write strategy logic here, and it will be called constantly, such as printing ticker information
Log(exchange.GetTicker())
}
function main(){
while(true){
onTick()
// The function "Sleep" is mainly used to control the polling frequency of cryptocurrency strategies to prevent accessing the exchange API interafce too frequently
Sleep(60000)
}
}
def onTick():
Log(exchange.GetTicker())
def main():
while True:
onTick()
Sleep(60000)
void onTick() {
Log(exchange.GetTicker());
}
void main() {
while(true) {
onTick();
Sleep(60000);
}
}
Basic framework examples of cryptocurrency strategies:
function onTick(){
// It is just an example; for all the assets will be used to place orders fast during backtest or in live trading, do not implement the example in live trading
exchange.Buy(100, 1)
}
function main(){
while(true){
onTick()
// The pause period can be customized in millisecond (1 second = 1000 milliseconds)
Sleep(1000)
}
}
def onTick():
exchange.Buy(100, 1)
def main():
while True:
onTick()
Sleep(1000)
void onTick() {
exchange.Buy(100, 1);
}
void main() {
while(true) {
onTick();
Sleep(1000);
}
}
Take the simplest example, if I want to place a buy order with a price of 100 and a quantity of 1 on the exchange every second, I can write it like this:
The following shows the commonly used API functions in strategy development and design. For more detailed API descriptions, please refer to: FMZ Quant Trading Platform API Manual.
Global Function
Function Name |
Brief Introduction |
Version |
Returns the |
current version number of the system |
|
Sleep |
Sleep function, |
parameter is the value of milliseconds to pause |
|
IsVirtual |
Determine the |
execution environment, return a true value to indicate a backtest
environment |
| Mail | Send an email |
| Mail_Go | Asynchronous
version of the Mail
function |
| SetErrorFilter | Filter error
logs, the parameter is a regular expression string, the error logs
matched by this regular expression will not be uploaded to the logging
system |
| GetPid | Get the bot
process Id |
| GetLastError | Get the last
error message |
| GetCommand | Get strategy
interaction commands, strategy interaction control settings can be
queried: [interaction control](/user-guide#interaction control) |
| GetMeta | Get the value of
Meta written when generating the strategy registration code |
| Dial | Used for raw
socket access |
| HttpQuery | Send Http request |
| HttpQuery_Go | Asynchronous
version of the HttpQuery
function |
| Encode | Data encoding
function |
| UnixNano | Get nanosecond
timestamps |
| Unix | Get second-level
timestamps |
| GetOS | Getting system
information |
| MD5 | Calculate MD5 |
| DBExec | Database
functions that can be used to execute SQL statements and perform
database operations |
| UUID | Generate UUID |
| EventLoop | Listen for events
and return after any websocket is readable or concurrent tasks such as
exchange.Go
, HttpQuery_Go
, etc. are completed, this function
is only available for live tradings |
| _G | Persistently saving data,
this function implements a saveable global dictionary function. The data
structure is a KV table, which is stored in the docker’s local database
file permanently |
| _D | Timestamp handler, converts
a millisecond timestamp or Date object to a time string |
| _N | Formatting a floating point
number, e.g. _N(3.1415, 2)
will remove the value of 3.1415 after
two decimal places, and the function returns 3.14 |
| _C | Retry function for
interface fault tolerance. Note that, for example, fault tolerance for
the exchange.GetTicker
function is _C(exchange.GetTicker)
and not _C(exchange.GetTicker())
|
| _Cross | Cross judgment function,
_Cross()
function’s return value is a positive number indicates
the period of the upward penetration, a negative number indicates the
period of the downward penetration, and 0 refers to the current price of
the same |
| JSONParse | Parsing JSON, which can
correctly parse JSON strings containing larger values, will parse larger
values to a string type. The JSONParse()
function is not supported
in the backtesting system. |
Log Functions
Function Name |
Brief Introduction |
Log |
Output logs, support for setting log text color, support for setting push, support for printing images after base64 encoding |
LogProfit |
Output P&L data, print P&L values and plot yield curves based on P&L values |
LogProfitReset |
Empty the LogProfit function outputs all earnings logs, earnings charts |
LogStatus |
Output information in the status bar, support for designing button controls in the status bar, support for outputting forms |
EnableLog |
Turn logging of order information on or off |
Chart |
Charting functions, based on Highcharts/Highstocks charting library |
KLineChart |
Pine language style drawing function, which is used for customized drawing at the strategy runtime using a Pine-like language drawing style |
LogReset |
Clear logs, support to retain a certain number of recent logs through the parameter settings |
LogVacuum |
Reclaim SQLite resources for reclaiming storage space occupied by SQLite when deleting data after clearing the log by calling the LogReset() function |
console.log |
Output debugging information in the “Debug Information” column on the live trading page |
console.error |
Error information is output in the “Debug Information” column of the live trading page |
Ticker Functions
Transaction Functions
Function Name |
Brief Introduction |
exchange.Buy |
Submit a buy order, futures contracts must pay attention to the direction of the transaction is set correctly, if the direction of the transaction and the transaction function does not match, the error will be reported! |
exchange.Sell |
Submit sell orders, futures contracts when placing orders must pay attention to the transaction direction is set correctly, if the transaction direction and the transaction function does not match, it will report an error |
exchange.CreateOrder |
Submit an order and specify the transaction type, transaction direction, price, and quantity through parameters |
exchange.CancelOrder |
Cancel order |
exchange.GetOrder |
Get order information, data structure is Order structure |
exchange.GetOrders |
Get unfilled orders with data structure Order struct array (list) |
exchange.GetHistoryOrders |
Get the historical orders of the current trading pair and contract; support specifying specific trading products |
exchange.SetPrecision |
Set the precision of the price and order quantity of the exchange object, after setting the system will automatically ignore the data redundancy. |
exchange.SetRate |
Set the exchange rate |
exchange.IO |
For other interface calls related to exchange objects |
exchange.Log |
Output, record transaction logs and do not place orders |
exchange.Encode |
signature encryption calculation |
exchange.Go |
Multi-threaded asynchronous support functions |
exchange.GetAccount |
Get account information |
exchange.GetAssets |
Request exchange account asset information |
exchange.GetName |
Get the name of the exchange object |
exchange.GetLabel |
Get the label of the exchange object |
exchange.GetCurrency |
Get the current trading pair |
exchange.SetCurrency |
Switch trading pairs |
exchange.GetQuoteCurrency |
Get the name of the currency of the current trading pair |
Futures Functions
Network Functions
JavaScript Multi-Threading
The FMZ Quant Trading Platform truly supports the multi-threaded function of the JavaScript
language strategy from the bottom of the system, and implements the following objects:
Objects |
Directions |
Remarks |
threading |
Multithreaded global object |
Member functions: Thread , getThread , mainThread , etc. |
Thread |
Thread object |
Member functions: peekMessage , postMessage , join , etc. |
ThreadLock |
Thread lock object |
Member functions: acquire , release . They can be passed into the thread environment as parameters of the thread execution function. |
ThreadEvent |
Event object |
Member functions: set , clear , wait , isSet . They can be passed into the thread environment as a parameter of the thread execution function. |
ThreadCondition |
Condition object |
Member functions: notify , notifyAll , wait , acquire , release . They can be passed into the thread environment as a parameter of the thread execution function. |
ThreadDict |
Dictionary object |
Member functions: get , set . They can be passed into the thread environment as parameters of the thread execution function. |
FMZ Quant Trading Platform Syntax Manual:JavaScript Multi-Threading
Web3
TA Indicator Library
Function Name |
Brief Introduction |
TA.MACD |
Calculate the exponential smoothed divergence average indicator |
TA.KDJ |
Calculation of stochastic indicators |
TA.RSI |
Calculate the strength indicator |
TA.ATR |
Calculate the average true volatility indicator |
TA.OBV |
Calculation of energy tide indicators |
TA.MA |
Calculating moving average indicators |
TA.EMA |
Calculation of indicators of exponential averages |
TA.BOLL |
Calculate the Bollinger Band indicator |
TA.Alligator |
Calculate the Alligator Line Indicator |
TA.CMF |
Calculation of the Chaikin Money Flow indicator |
TA.Highest |
Calculate the period maximum price |
TA.Lowest |
Calculate the period minimum price |
TA.SMA |
Calculate the simple moving average indicators |
talib Indicator Library
The talib indicator library has numerous trading indicators, such as talib.CDL2CROWS. You can jump to the syntax manual for specifics.
Strategy Entry Functions
Template Libraries