输入/搜索内容
内置函数
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
Threads
threading
Thread
getThread
mainThread
currentThread
Lock
Condition
Event
Dict
pending
Thread
ThreadLock
ThreadEvent
ThreadCondition
ThreadDict
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
结构体
内置变量

用于原始的Socket访问,支持tcpudptlsunix协议。

支持 4 种主流的通信协议:mqttnatsamqpkafka

支持连接数据库,可连接的数据库包括:sqlite3mysqlpostgresclickhouse

Dial(address)
Dial(address, timeout)
Dial(address, options)

示例

  • Dial 函数调用示例:

    javascript
    function main(){ // Dial 支持 tcp://、udp://、tls://、unix:// 协议,可传入一个参数指定超时的秒数 var client = Dial("tls://www.baidu.com:443") if (client) { // write 可再跟一个数字参数指定超时,write 返回成功发送的字节数 client.write("GET / HTTP/1.1\nConnection: Closed\n\n") while (true) { // read 可再跟一个数字参数指定超时,单位:毫秒。返回 null 表示出错、超时或 socket 已关闭 var buf = client.read() if (!buf) { break } Log(buf) } client.close() } }
    python
    def main(): client = Dial("tls://www.baidu.com:443") if client: client.write("GET / HTTP/1.1\nConnection: Closed\n\n") while True: buf = client.read() if not buf: break Log(buf) client.close()
    rust
    fn main() { // Dial 支持 tcp://、udp://、tls://、unix:// 协议,可使用 Dial::new(addr, timeout) 指定超时的秒数 let mut client = Dial("tls://www.baidu.com:443"); if client.Valid() { // write 的第二个数字参数指定超时,write 返回成功发送的字节数 client.write("GET / HTTP/1.1\nConnection: Closed\n\n", 0); loop { // read 的数字参数指定超时,单位:毫秒。返回空字符串表示出错、超时或 socket 已关闭 let buf = client.read(0); if buf == "" { break; } Log!(buf); } client.close(); } }
    c++
    void main() { auto client = Dial("tls://www.baidu.com:443"); if(client.Valid) { client.write("GET / HTTP/1.1\nConnection: Closed\n\n"); while(true) { auto buf = client.read(); if(buf == "") { break; } Log(buf); } client.close(); } }
  • Dial函数连接数据库时返回的连接对象具有2个独有的方法函数:

    - exec(sqlString): 用于执行SQL语句,使用方式与DBExec()函数类似。

    - fd(): fd()函数返回一个句柄(例如:句柄变量为handle),用于在其它线程中重连(即使Dial创建的连接对象已通过close()函数关闭连接),只需将该句柄传入Dial()函数即可重用连接,例如:Dial(handle)

    以下是使用Dial函数连接sqlite3数据库的示例。

    javascript
    var client = null function main() { // client = Dial("sqlite3://:memory:") // 使用内存数据库 client = Dial("sqlite3://test1.db") // 打开/连接托管者所在目录的数据库文件 // 记录句柄 var sqlite3Handle = client.fd() Log("sqlite3Handle:", sqlite3Handle) // 查询数据库中的表 var ret = client.exec("SELECT name FROM sqlite_master WHERE type='table'") Log(ret) } function onexit() { Log("执行client.close()") client.close() }
    python
    // 不支持
    rust
    fn main() { // let mut client = Dial("sqlite3://:memory:"); // 使用内存数据库 let mut client = Dial("sqlite3://test1.db"); // 打开/连接托管者所在目录的数据库文件 // Rust 的连接对象不支持 fd() 方法 // 查询数据库中的表 let ret = client.exec("SELECT name FROM sqlite_master WHERE type='table'"); Log!(format!("{:?}", ret)); Log!("执行client.close()"); client.close(); }
    c++
    // 不支持

返回值

类型描述

object

如果连接超时,Dial()函数返回空值;正常调用时返回一个连接对象,该对象包含三个方法:readwritecloseread方法用于读取数据,write方法用于发送数据,close方法用于关闭连接。read方法支持以下参数:

  • 不传参数时,函数将阻塞等待,直到有消息到达时才返回。例如:ws.read()
  • 传入参数时,参数单位为毫秒,用于指定消息等待的超时时间。例如:ws.read(2000)表示超时时间为两秒(2000毫秒)。
  • 以下两个参数仅对WebSocket有效:
    传入参数-1表示无论是否有消息,函数都立即返回。例如:ws.read(-1)
    传入参数-2表示无论是否有消息,函数都立即返回,但仅返回最新的消息,缓冲区中的其余消息将被丢弃。例如:ws.read(-2)read()函数缓冲区说明:

WebSocket协议推送过来的数据,如果策略中两次read()函数调用之间的时间间隔过长,可能会造成数据累积。这些数据存储在缓冲区中,缓冲区的数据结构为队列,上限为2000个。超出2000个后,最新的数据进入缓冲区,最旧的数据将被清除。

场景无参数参数:-1参数:-2参数:2000,单位是毫秒
缓冲区已有数据立即返回最旧数据立即返回最旧数据立即返回最新数据立即返回最旧数据
缓冲区无数据阻塞到有数据时返回立即返回空值立即返回空值等待2000毫秒,无数据则返回空值,有数据则返回
WebSocket连接断开或者底层重连时当WebSocket连接断开或底层重连时,read()函数返回空字符串(即:""),write()函数返回0,可据此检测到该情况。此时可以使用close()函数关闭连接;如果已设置自动重连,则无需手动关闭,系统底层会自动重连。
---

参数

名称类型必填描述

address

string

请求地址。

timeout

number

超时时间,单位为秒。

options

object

连接配置选项。

备注

address参数的详细说明:在标准地址wss://xxx.xxx.xxx:10441/websocket?compress之后,以|符号进行分隔。如果参数字符串中包含|字符,则使用||作为分隔符。分隔符之后的部分为功能参数设置,各参数之间使用&字符连接。

例如,同时设置ss5代理与压缩参数时,可写作:

Dial("wss://baidu.com/stream|proxy=socks5://xxx:9999&compress=gzip_raw&mode=recv")

Dial函数的address参数支持的功能参数说明
WebSocket协议数据压缩相关的参数:compress=参数值compress用于指定压缩方式,可选值包括gzip_raw、gzip等。如果所用的gzip并非标准gzip,可使用扩展方式:gzip_raw
WebSocket协议数据压缩相关的参数:mode=参数值mode用于指定压缩模式,可选dual、send、recv三种。dual为双向压缩,即发送和接收均使用压缩数据;send为仅发送压缩数据;recv为接收压缩数据并在本地解压缩。
WebSocket协议启用compression设置:enableCompression=true设置enableCompression=false可关闭该功能,默认不启用。
WebSocket协议设置底层自动重连相关的参数:reconnect=参数值reconnect用于设置是否自动重连,reconnect=true表示启用重连。未设置该参数时默认不重连。
WebSocket协议设置底层自动重连相关的参数:interval=参数值interval为重试时间间隔,单位为毫秒。例如interval=10000表示重试间隔为10秒;未设置时默认为1秒,即interval=1000。
WebSocket协议设置底层自动重连相关的参数:payload=参数值payload为WebSocket重连时需要发送的订阅消息,例如:payload=okok。
socks5代理的相关参数:proxy=参数值proxy用于设置ss5代理,参数值格式为:socks5://name:pwd@192.168.0.1:1080,其中name为ss5服务端用户名,pwd为ss5服务端登录密码,1080为ss5服务的端口。

Dial()函数仅支持实盘。

使用Dial函数连接数据库时,连接字符串的编写可参考各数据库的Go语言驱动项目。

支持的数据库驱动项目连接字符串(Connection String)备注

| sqlite3 | github.com/mattn/go-sqlite3 | sqlite3://file:test.db?cache=shared&mode=memory
| sqlite3://前缀表示使用sqlite3数据库,调用示例:Dial("sqlite3://test1.db") |

mysql

| postgres | github.com/lib/pq | postgres://user=postgres dbname=yourdatabase sslmode=disable
password=yourpassword host=localhost port=5432 | -- |

clickhouse

目前仅JavaScript语言支持在Dial函数中使用mqttnatsamqpkafka通信协议。以下以JavaScript语言的策略代码为例,展示mqttnatsamqpkafka四种协议的使用示例:

javascript
// 需要先配置并部署完成各个协议的代理服务器 // 为便于演示,主题test_topic的订阅(read操作)与发布(write操作)均在当前策略中进行 var arrConn = [] var arrName = [] function main() { LogReset(1) conn_nats = Dial("nats://admin@127.0.0.1:4222?topic=test_topic") conn_mqtt = Dial("mqtt://127.0.0.1:1883?topic=test_topic") conn_amqp = Dial("amqp://q:admin@127.0.0.1:5672/?queue=test_Queue") conn_kafka = Dial("kafka://localhost:9092/test_topic") arrConn = [conn_nats, conn_amqp, conn_mqtt, conn_kafka] arrName = ["nats", "amqp", "mqtt", "kafka"] while (true) { for (var i in arrConn) { var conn = arrConn[i] var name = arrName[i] // 写数据 conn.write(name + ", time: " + _D() + ", test msg.") // 读数据 var readMsg = conn.read(1000) Log(name + " readMsg: ", readMsg, "#FF0000") } Sleep(1000) } } function onexit() { for (var i in arrConn) { arrConn[i].close() Log("关闭", arrName[i], "连接") } }

Dial函数在访问Websocket接口时,支持设置wss请求头:

javascript
let options = {"headers": {"Authorization": "Bearer token123"}} let conn = Dial("wss://api.example.com/ws", options)
python
options = {"headers": {"Authorization": "Bearer token123"}} conn = Dial("wss://api.example.com/ws", options)
c++
// 暂不支持