os
The os library provides a complete file system operation interface for the FMZ Quant Trading Platform.
open
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
| Type | Description |
| The |
Arguments
| Name | Type | Required | Description |
filename | string | Yes | File name. The parameter |
mode | string | No | Specify the file opening mode. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
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).
fgets
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
| Type | Description |
string | Returns the complete content of the file. |
Arguments
| Name | Type | Required | Description |
filename | string | Yes | File path, including the filename to be read. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
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.
fputs
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
| Type | Description |
number | Returns the actual number of bytes written. |
Arguments
| Name | Type | Required | Description |
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
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
Remarks
Convenient file writing method, overwrites file content by default. Set append to true to append to the end of the file.
mmap
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
| Type | Description |
ArrayBuffer | Returns the binary data of the file content. |
Arguments
| Name | Type | Required | Description |
filename | string | Yes | File path. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
Remarks
Suitable for efficient reading and processing of large files, maps the file into memory and returns it as an ArrayBuffer.
getRootDir
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
| Type | Description |
string | Returns the path of the root directory. |
See Also
listFiles
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
| Type | Description |
ListFilesResult object | Returns an object containing - files: Array of matched file names. - dirs: Array of subdirectory names in the current directory. |
Arguments
| Name | Type | Required | Description |
pattern | string | No | Optional matching pattern, supports wildcards (e.g., .txt, data_.json), can specify directory path. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
Remarks
When pattern parameter is not specified, lists all files and subdirectories in the current directory (../files).
exists
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
| Type | Description |
bool | Returns true if the file or directory exists, otherwise returns false. |
Arguments
| Name | Type | Required | Description |
filename | string | Yes | The file or directory path to check. |
See Also
remove
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
| Type | Description |
bool | Returns true on successful deletion, false on failure. |
Arguments
| Name | Type | Required | Description |
filename | string | Yes | The file path to delete. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
Remarks
This function is only for deleting files, not for deleting directories. To delete directories, please use the rmdir() function.
mkdir
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
| Type | Description |
bool | Returns true if creation is successful, otherwise returns false. |
Arguments
| Name | Type | Required | Description |
dirname | string | Yes | The directory path to create. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
Remarks
Supports recursive creation of multi-level directories. If parent directories do not exist, they will be created automatically.
rmdir
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
| Type | Description |
bool | Returns true on successful deletion, false on failure. |
Arguments
| Name | Type | Required | Description |
dirname | string | Yes | The directory path to be removed. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
Remarks
This operation will permanently delete the directory and all its contents, please use with caution.
rename
Rename a file 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")
let retRename = os.rename(oldFileName, newFileName)
Log("retRename:", retRename) // retRename: true
}Returns
| Type | Description |
bool | Returns true when the operation succeeds, otherwise returns false. |
Arguments
| Name | Type | Required | Description |
oldName | string | Yes | The name or path of the original file. |
newName | string | Yes | The name or path of the new file. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
Remarks
This function can be used to rename a file or move a file to another directory. If the directory of the new path does not exist, the operation will fail.
stat
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
| Type | Description |
FileStat object | Returns an object containing file statistics information. |
Arguments
| Name | Type | Required | Description |
filename | string | Yes | File path. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
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
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
| Type | Description |
never | This function does not return a value, the program will terminate execution directly. |
Arguments
| Name | Type | Required | Description |
status | number | No | Optional exit status code, default value is 0. |
See Also
File ListFilesResult FileStat open fgets fputs mmap getRootDir listFiles exists remove mkdir rmdir rename stat exit
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).