Type/to search
Built-in Functions
Global
Version
Sleep
IsVirtual
Mail
Mail_Go
SetErrorFilter
GetPid
GetLastError
GetCommand
GetMeta
Dial
HttpQuery
HttpQuery_Go
Encode
UnixNano
Unix
GetOS
MD5
DBExec
UUID
EventLoop
__Serve
_G
_D
_N
_C
_Cross
JSON.parse
JSON.stringify
SetChannelData
GetChannelData
Log
Market
Trade
Account
Futures
NetSettings
Threads
threading
Thread
getThread
mainThread
currentThread
Lock
Condition
Event
Dict
pending
Thread
ThreadLock
ThreadEvent
ThreadCondition
ThreadDict
Web3
TA
Talib
talib.CDL2CROWS
talib.CDL3BLACKCROWS
talib.CDL3INSIDE
talib.CDL3LINESTRIKE
talib.CDL3OUTSIDE
talib.CDL3STARSINSOUTH
talib.CDL3WHITESOLDIERS
talib.CDLABANDONEDBABY
talib.CDLADVANCEBLOCK
talib.CDLBELTHOLD
talib.CDLBREAKAWAY
talib.CDLCLOSINGMARUBOZU
talib.CDLCONCEALBABYSWALL
talib.CDLCOUNTERATTACK
talib.CDLDARKCLOUDCOVER
talib.CDLDOJI
talib.CDLDOJISTAR
talib.CDLDRAGONFLYDOJI
talib.CDLENGULFING
talib.CDLEVENINGDOJISTAR
talib.CDLEVENINGSTAR
talib.CDLGAPSIDESIDEWHITE
talib.CDLGRAVESTONEDOJI
talib.CDLHAMMER
talib.CDLHANGINGMAN
talib.CDLHARAMI
talib.CDLHARAMICROSS
talib.CDLHIGHWAVE
talib.CDLHIKKAKE
talib.CDLHIKKAKEMOD
talib.CDLHOMINGPIGEON
talib.CDLIDENTICAL3CROWS
talib.CDLINNECK
talib.CDLINVERTEDHAMMER
talib.CDLKICKING
talib.CDLKICKINGBYLENGTH
talib.CDLLADDERBOTTOM
talib.CDLLONGLEGGEDDOJI
talib.CDLLONGLINE
talib.CDLMARUBOZU
talib.CDLMATCHINGLOW
talib.CDLMATHOLD
talib.CDLMORNINGDOJISTAR
talib.CDLMORNINGSTAR
talib.CDLONNECK
talib.CDLPIERCING
talib.CDLRICKSHAWMAN
talib.CDLRISEFALL3METHODS
talib.CDLSEPARATINGLINES
talib.CDLSHOOTINGSTAR
talib.CDLSHORTLINE
talib.CDLSPINNINGTOP
talib.CDLSTALLEDPATTERN
talib.CDLSTICKSANDWICH
talib.CDLTAKURI
talib.CDLTASUKIGAP
talib.CDLTHRUSTING
talib.CDLTRISTAR
talib.CDLUNIQUE3RIVER
talib.CDLUPSIDEGAP2CROWS
talib.CDLXSIDEGAP3METHODS
talib.AD
talib.ADOSC
talib.OBV
talib.ACOS
talib.ASIN
talib.ATAN
talib.CEIL
talib.COS
talib.COSH
talib.EXP
talib.FLOOR
talib.LN
talib.LOG10
talib.SIN
talib.SINH
talib.SQRT
talib.TAN
talib.TANH
talib.MAX
talib.MAXINDEX
talib.MIN
talib.MININDEX
talib.MINMAX
talib.MINMAXINDEX
talib.SUM
talib.HT_DCPERIOD
talib.HT_DCPHASE
talib.HT_PHASOR
talib.HT_SINE
talib.HT_TRENDMODE
talib.ATR
talib.NATR
talib.TRANGE
talib.BBANDS
talib.DEMA
talib.EMA
talib.HT_TRENDLINE
talib.KAMA
talib.MA
talib.MAMA
talib.MIDPOINT
talib.MIDPRICE
talib.SAR
talib.SAREXT
talib.SMA
talib.T3
talib.TEMA
talib.TRIMA
talib.WMA
talib.LINEARREG
talib.LINEARREG_ANGLE
talib.LINEARREG_INTERCEPT
talib.LINEARREG_SLOPE
talib.STDDEV
talib.TSF
talib.VAR
talib.ADX
talib.ADXR
talib.APO
talib.AROON
talib.AROONOSC
talib.BOP
talib.CCI
talib.CMO
talib.DX
talib.MACD
talib.MACDEXT
talib.MACDFIX
talib.MFI
talib.MINUS_DI
talib.MINUS_DM
talib.MOM
talib.PLUS_DI
talib.PLUS_DM
talib.PPO
talib.ROC
talib.ROCP
talib.ROCR
talib.ROCR100
talib.RSI
talib.STOCH
talib.STOCHF
talib.STOCHRSI
talib.TRIX
talib.ULTOSC
talib.WILLR
talib.AVGPRICE
talib.MEDPRICE
talib.TYPPRICE
talib.WCLPRICE
OS
Structures
Built-in Variables

FMZ Quant Trading Platform supports file read/write operations. The os library provides a complete file system operation interface to help users with data persistence, configuration management, and logging during strategy development.
Note that this feature only supports JavaScript language strategies.

The os library supports: File objects, File list objects, and File information objects.

ObjectDescriptionNotes
File Object: FileProvides file read/write, positioning and other operations.Obtained through os.open(), need to call close() to release resources after use.
File List Object: ListFilesResultUsed to record directory listing information.Supports wildcard matching patterns, returned by os.listFiles() function.
File Information Object: FileStatFile statistics information.Returned by os.stat() function.

Supports live trading and backtesting systems.

  • Live trading environment:
    The default directory for live trading is the files folder at the same level as the live trading database file in the docker directory, i.e.: /logs/storage/xxx/files, where xxx is the live trading ID, and the docker program (robot) is at the same level as logs.
  • Backtesting system environment:
    The backtesting system is a sandbox environment. The system simulates a file directory with the default directory: /logs/storage/1/files.
    When backtesting ends, the created file contents will be cleared.

The os library provides a complete file system operation interface for the FMZ Quant Trading Platform.

Open a file in the specified mode.

open(filename)
open(filename, mode)

Examples

Create a file, write data, then read it.

javascript
function main() { let fileHandle = os.open("output.txt", "w+") if (!fileHandle) { Log("Failed to open file") return } let bytesWritten = fileHandle.write("Hello FMZ!") Log("Bytes written:", bytesWritten) // Bytes written: 10 fileHandle.seek(0, 0) let fileContent = fileHandle.read() Log("File content read:", fileContent) // File content read: Hello FMZ! fileHandle.close() }

Returns

TypeDescription

File object

The open() function returns a File object for file operations.

Arguments

NameTypeRequiredDescription

filename

string

Yes

File name. The parameter filename is a path containing the file name. Since both the docker and backtesting system support os operations, please note that in non-backtesting environments, file operations are restricted to the files folder at the same level as the live trading database file in the docker directory, therefore absolute paths are not supported for operating any files. This note about the parameter filename will not be repeated in subsequent sections.

mode

string

No

Specify the file opening mode.

See Also

Remarks

File opening modes:

  • r : read (read-only, file must exist)

  • w : write (write-only, creates file if it doesn't exist, clears content if it exists)

  • a : append (append write, creates file if it doesn't exist, writes to the end if it exists)

  • + : Adding + after r/w/a means both read and write are allowed (e.g., "r+", "w+", "a+")

  • b : binary (binary mode, commonly used in Windows to distinguish text/binary files, e.g., "rb", "wb")

Files are opened/created in the files folder under the live trading database file directory (xxx.db3, where xxx is the live trading Id).

Read the entire file content at once.

fgets(filename)

Examples

Read the content of a configuration file.

javascript
function main() { // 先创建、写入文件 // let fileHandle = os.open("config.json", "w+") // if (!fileHandle) { // Log("Failed to open file") // return // } // let objJson = {"name": "tom", "age": 18} // fileHandle.write(JSON.stringify(objJson)) // fileHandle.close() let content = os.fgets("config.json") Log("Config content:", content) // Config content: {"name":"tom","age":18} }

Returns

TypeDescription

string

Returns the complete content of the file.

Arguments

NameTypeRequiredDescription

filename

string

Yes

File path, including the filename to be read.

See Also

Remarks

Suitable for quick reading of small files, loading the entire file content into memory at once.

If the file does not exist, the fgets() function will throw an error: InternalError: failed to open file: openat config.json: no such file or directory at main.

Write content to a file.

fputs(filename, content)
fputs(filename, content, append)

Examples

Save strategy configuration to file.

javascript
function main() { let config = '{"strategy": "MA", "period": 20}' let bytesWritten = os.fputs("strategy_config.json", config) Log("Bytes written:", bytesWritten) // Bytes written: 32 Log(`os.fgets("strategy_config.json"):`, os.fgets("strategy_config.json")) // os.fgets("strategy_config.json"): {"strategy": "MA", "period": 20} // 追加日志信息 let logInfo = "\n[" + new Date().toISOString() + "] Config saved" os.fputs("strategy_config.json", logInfo, true) Log(`os.fgets("strategy_config.json"):`, os.fgets("strategy_config.json")) // os.fgets("strategy_config.json"): {"strategy": "MA", "period": 20} [2025-09-08T07:20:30.563Z] Config saved }

Returns

TypeDescription

number

Returns the actual number of bytes written.

Arguments

NameTypeRequiredDescription

filename

string

Yes

File path.

content

string

Yes

Content to write.

append

bool

No

Whether to write in append mode, defaults to false (overwrite mode).

See Also

Remarks

Convenient file writing method, overwrites file content by default. Set append to true to append to the end of the file.

Memory-mapped file, returns the binary data of the file.

mmap(filename)

Examples

Map the binary data of a file.

javascript
function ab2str(buf) { let arr = new Uint8Array(buf) return String.fromCharCode.apply(null, arr) } function main() { let buffer = os.mmap("strategyConfig/testData.txt") Log("File size in bytes:", buffer.byteLength) let arr = Array.from(new Uint8Array(buffer)) Log("arr:", arr) // arr: [72,101,108,108,111,32,70,77,90,33] Log("ab2str(buffer):", ab2str(buffer)) // ab2str(buffer): Hello FMZ! }

Returns

TypeDescription

ArrayBuffer

Returns the binary data of the file content.

Arguments

NameTypeRequiredDescription

filename

string

Yes

File path.

See Also

Remarks

Suitable for efficient reading and processing of large files, maps the file into memory and returns it as an ArrayBuffer.

Get the root directory path for file operations.

getRootDir()

Examples

Get and display the root directory path.

javascript
function main() { let rootDir = os.getRootDir() Log("Root directory:", rootDir) }

Returns

TypeDescription

string

Returns the path of the root directory.

See Also

List files and subdirectories in the specified directory.

listFiles()
listFiles(pattern)

Examples

List matched files and directories.

javascript
function main() { // 列出所有json文件 let result = os.listFiles("*.json") Log("result:", result) // 列出所有内容 let allFiles = os.listFiles() Log("allFiles:", allFiles) }

Returns

TypeDescription

ListFilesResult object

Returns an object containing files and dirs arrays.

- files: Array of matched file names.

- dirs: Array of subdirectory names in the current directory.

Arguments

NameTypeRequiredDescription

pattern

string

No

Optional matching pattern, supports wildcards (e.g., .txt, data_.json), can specify directory path.

See Also

Remarks

When pattern parameter is not specified, lists all files and subdirectories in the current directory (../files).

Check if the specified file or directory exists.

exists(filename)

Examples

Check if a file or path exists.

javascript
function main() { Log(`os.exists("./strategyConfig"):`, os.exists("./strategyConfig")) // os.exists("./strategyConfig"): true Log(`os.exists("./strategyConfig/testData.txt"):`, os.exists("./strategyConfig/testData.txt")) // os.exists("./strategyConfig/testData.txt"): true // Log(`os.exists("/strategyConfig"):`, os.exists("/strategyConfig")) // InternalError: invalid filename: path traversal or absolute path not allowed at main Log(`os.exists("test_1.txt"):`, os.exists("test_1.txt")) // os.exists("test_1.txt"): true Log(`os.exists("test_2.txt"):`, os.exists("test_2.txt")) // os.exists("test_2.txt"): false }

Returns

TypeDescription

bool

Returns true if the file or directory exists, otherwise returns false.

Arguments

NameTypeRequiredDescription

filename

string

Yes

The file or directory path to check.

See Also

Delete the specified file.

remove(filename)

Examples

Example of deleting a file.

javascript
function main() { let tempFile = "test_1.txt" if (os.exists(tempFile)) { let success = os.remove(tempFile) Log("Temp file deleted:", success) } }

Returns

TypeDescription

bool

Returns true on successful deletion, false on failure.

Arguments

NameTypeRequiredDescription

filename

string

Yes

The file path to delete.

See Also

Remarks

This function is only for deleting files, not for deleting directories. To delete directories, please use the rmdir() function.

Create a directory.

mkdir(dirname)

Examples

Create a data storage directory, create a file and write data.

javascript
function main() { let success = os.mkdir("data/backtest/results") Log("Directory created:", success) if (success) { os.fputs("data/backtest/results/summary.txt", "Backtest completed") } }

Returns

TypeDescription

bool

Returns true if creation is successful, otherwise returns false.

Arguments

NameTypeRequiredDescription

dirname

string

Yes

The directory path to create.

See Also

Remarks

Supports recursive creation of multi-level directories. If parent directories do not exist, they will be created automatically.

Remove a directory and all its contents.

rmdir(dirname)

Examples

Remove a directory and all its contents.

javascript
function main() { let tempDir = "data" if (os.exists(tempDir)) { let success = os.rmdir(tempDir) Log("directory removed:", success) } }

Returns

TypeDescription

bool

Returns true on successful deletion, false on failure.

Arguments

NameTypeRequiredDescription

dirname

string

Yes

The directory path to be removed.

See Also

Remarks

This operation will permanently delete the directory and all its contents, please use with caution.

Rename or move a file.

rename(oldName, newName)

Examples

Rename a file and move it to another directory.

javascript
function main() { let oldFileName = "output.txt" let newFileName = "outputFiles/" + new Date().getTime() + "output.txt" // let retRename = os.rename(oldFileName, newFileName) // Log("retRename:", retRename) // InternalError: failed to rename file: renameat output.txt outputFiles/1757322073139output.txt: no such file or directory at main os.mkdir("outputFiles") retRename = os.rename(oldFileName, newFileName) Log("retRename:", retRename) // retRename: true }

Returns

TypeDescription

bool

Returns true on success, false on failure.

Arguments

NameTypeRequiredDescription

oldName

string

Yes

Original file name or path.

newName

string

Yes

New file name or path.

See Also

Remarks

Can be used to rename files or move files to different directories. If the directory of the new path does not exist, the operation will fail.

Get detailed statistics information of a file.

stat(filename)

Examples

Get file information and check file size.

javascript
function main() { if (os.exists("strategyConfig/testData.txt")) { let stat = os.stat("strategyConfig/testData.txt") // stat: {"size":10,"mode":420,"mtime":1757312981796,"atime":1757312981796,"ctime":1757312981796} Log("stat:", stat) } }

Returns

TypeDescription

FileStat object

Returns an object containing file statistics information.

Arguments

NameTypeRequiredDescription

filename

string

Yes

File path.

See Also

Remarks

The returned FileStat object contains the following fields:

  • size: File size.

  • mode: File permissions.

  • mtime: Last modification time.

  • atime: Last access time.

  • ctime: Creation time.

Exit the program.

exit()
exit(status)

Examples

Exit program after checking conditions.

javascript
function main() { if (!os.exists("required_config.json")) { Log("Required configuration file not found!") os.exit(1) // Abnormal exit } Log("Configuration found, continuing...") // Normal strategy logic... }

Returns

TypeDescription

never

This function does not return a value, the program will terminate execution directly.

Arguments

NameTypeRequiredDescription

status

number

No

Optional exit status code, default value is 0.

See Also

Remarks

Immediately terminates program execution. Status code 0 indicates normal exit, non-zero values indicate abnormal exit (will be displayed as error in live trading).

File object that provides file read/write, positioning and other operations.

Close the file and release associated resources.

close()

Examples

Example of proper file operation workflow.

javascript
function main() { let file = os.open("data.txt", "w") file.write("Hello FMZ!") file.close() // 必须关闭文件 }

See Also

Remarks

This method must be called after using the file object to release system resources.

Write one or more strings to a file.

puts(data1, data2, ...dataN)

Examples

Write multiple strings to a file.

javascript
function main() { let file = os.open("output.txt", "w+") let bytes = file.puts("Hello", " ", "World", "!") Log("Bytes written:", bytes) // Bytes written: 12 file.seek(0, 0) let data = file.read() Log("data:", data) // If using os.open("output.txt", "w") may result in data being undefined // data: Hello World! // file.puts() // error: puts requires at least 1 argument at main file.puts(", Hello FMZ!") file.seek(0, 0) data = file.read() Log("data:", data) // data: Hello World!, Hello FMZ! file.close() }

Returns

TypeDescription

number

Returns the actual number of bytes written.

Arguments

NameTypeRequiredDescription

data

string

Yes

String data to be written, multiple parameters can be passed.

See Also

Remarks

Multiple string parameters can be written at once, they will be concatenated in order and then written.

Write formatted data to file.

printf(format)
printf(format, arg1, arg2, ...argN)

Examples

Write formatted trading data.

javascript
function main() { let file = os.open("trade_log.txt", "w+") let price = 100.25 let volume = 1000 let bytes = file.printf("Price: %.2f, Volume: %d\n", price, volume) Log("Formatted bytes written:", bytes) file.seek(0, 0) let data = file.read() Log("data:", data) // data: Price: 100.25, Volume: 1000 // file.printf("| Price: %.2f, Volume: %d\n") // "| Price: %!f(MISSING), Volume: %!d(MISSING)" // file.seek(0, 0) // data = file.read() // Log("data:", data) file.close() }

Returns

TypeDescription

number

Returns the actual number of bytes written.

Arguments

NameTypeRequiredDescription

format

string

Yes

Format string.

args

any (any type supported by the platform)

No

Format arguments.

See Also

Flush the file buffer to ensure data is written to disk.

flush()

Examples

Write important log data in real-time.

javascript
function main() { let logFile = os.open("critical.log", "a") logFile.printf("[%s] Critical event occurred\n", new Date().toISOString()) // [2025-09-09T03:15:43.895Z] Critical event occurred logFile.flush() // Immediately write data to disk // Continue with other operations... logFile.close() }

See Also

Get the current file pointer position.

tell()

Examples

Track position during file operations.

javascript
function main() { let file = os.open("data.txt", "r+") Log("Initial position:", file.tell()) // Initial position: 0 file.write("Hello") Log("After write position:", file.tell()) // After write position: 5 file.close() }

Returns

TypeDescription

number

Returns the current file pointer position (offset in bytes).

See Also

Remarks

Returns the byte offset of the current file pointer relative to the beginning of the file.

Move the file pointer to a specified position.

seek(offset, whence)

Examples

Read characters in reverse order.

javascript
function main() { let str = "Hello FMZ!" let file = os.open("data.txt", "w+") file.write(str) // If i > str.length: will throw InternalError: seek .../xxx/data.txt: invalid argument at main for (let i = 1; i <= str.length; i++) { file.seek(-i, 2) let data = file.read(1) Log("i:", i, ", data:", data) } file.close() }

Returns

TypeDescription

number

Returns the new file pointer position.

Arguments

NameTypeRequiredDescription

offset

number

Yes

Offset (in bytes).

whence

number

Yes

Reference position: 0=beginning of file, 1=current position, 2=end of file.

See Also

Remarks

Used to position the file pointer, the offset parameter can be negative (indicating backward movement).

Check if the file pointer has reached the end of file.

eof()

Examples

Read file line by line until end of file.

javascript
function main() { let file = os.open("data.txt", "r") let lineCount = 0 while (!file.eof()) { let line = file.getline() if (line) { lineCount++ Log("Line", lineCount + ":", line) } } Log("Total lines:", lineCount) file.close() }

Returns

TypeDescription

bool

Returns true if end of file has been reached, otherwise returns false.

See Also

Remarks

Used to determine whether all content has been read when reading a file.

Read data from a file.

read()
read(size)

Examples

Read file content in chunks.

javascript
function main() { let file = os.open("data.txt", "r") // data.txt // This is a test line: Line 1. // This is a test line: Line 2. // ... let chunkSize = 29 let totalBytes = 0 while (!file.eof()) { let chunk = file.read(chunkSize) if (chunk) { totalBytes += chunk.length || chunk.byteLength Log("Read chunk, total bytes so far:", totalBytes, ", chunk:", chunk) } } file.close() }

Returns

TypeDescription

string / ArrayBuffer / undefined

Returns the content read. Returns undefined when the end of file is reached.

Arguments

NameTypeRequiredDescription

size

number

No

Number of bytes to read. If not specified, reads all remaining content in the file.

See Also

Remarks

Can read a specified number of bytes or all remaining content in the file. The return type may be string or ArrayBuffer.

Write string data to a file.

write(data)

Examples

Writing trade records

javascript
function main() { let file = os.open("trades.log", "a") let timestamp = new Date().toISOString() let tradeInfo = `${timestamp},BUY,50000,1\n` let bytes = file.write(tradeInfo) Log("Trade record written, bytes:", bytes) file.close() }

Returns

TypeDescription

number

Returns the actual number of bytes written.

Arguments

NameTypeRequiredDescription

data

string

Yes

The string data to be written.

See Also

Remarks

Writes string data to the current position in the file.

Read the next line from the file.

getline()

Examples

Read file line by line until the end.

javascript
function main() { let file = os.open("data.txt", "r") let lineCount = 0 while (!file.eof()) { let line = file.getline() if (line) { lineCount++ Log("Line", lineCount + ":", line) } } Log("Total lines:", lineCount) file.close() }

Returns

TypeDescription

string / undefined

Returns the next line content, returns undefined when reaching end of file.

See Also

Remarks

Read file content line by line in sequential order.

Get the string representation of the file object.

toString()

Examples

Get the description information of the file object.

javascript
function main() { let file = os.open("data/data.txt", "r") Log("File info:", file.toString()) // File info: File(data/data.txt) file.close() }

Returns

TypeDescription

string

Returns the string description information of the file object.

See Also

Remarks

Returns the description information of the file object.

File list object used to record directory listing information. This object contains two array properties: files (file list) and dirs (directory list).

See Also

Remarks

ListFilesResult object structure:

javascript
{ files: string[], // Array of searched file names dirs: string[] // Array of subdirectory names in the current directory }

This object is returned by the os.listFiles() function.

File statistics information object.

See Also

Remarks

FileStat object structure:

javascript
{ size: number, // File size (bytes) mode: number, // File permission mode mtime: number, // Modification time, millisecond timestamp atime: number, // Access time, millisecond timestamp ctime: number // Creation time, millisecond timestamp }

This object is returned by the os.stat() function.