Sumber dimuat naik... memuat...

Fungsi terbina dalam

Global

Versi

Mengembalikan nombor versi semasa sistem.

Nombor versi sistem semasa, seperti:3.6. senar

Versi ((()

function main() {
    Log("version:", Version())
}
def main():
    Log("version:", Version())
void main() {
    Log("version:", Version());
}

Nombor versi sistem adalah nombor versi program docker.

Tidur

Fungsi tidur, menyebabkan program berhenti untuk tempoh masa.

Tidur (millisecond)

PeraturanmillisecondParameter digunakan untuk menetapkan tempoh tidur dan bilangan milidetik. Milisaat betul nombor

function main() {
    Sleep(1000 * 10)   // Wait for 10 seconds
    Log("Waited for 10 seconds")
}
def main():
    Sleep(1000 * 10)
    Log("Waited for 10 seconds")
void main() {
    Sleep(1000 * 10);
    Log("Waited for 10 seconds");
}

Sebagai contoh, apabila melaksanakanSleep(1000)Ia menyokong operasi dengan waktu tidur kurang daripada 1 milisaat, contohnya menetapkanSleep(0.1). Ia menyokong parameter minimum0.000001, iaitu hibernasi nanosegund, di mana 1 nanosegund sama dengan1e-6Milisaat. Apabila menulis strategi dalamPythonBahasa,Sleep(millisecond)fungsi harus digunakan untuk pengundian selang, masa-ke-menunggu operasi.time.sleep(second)fungsiPython...timePerpustakaan. Ini kerana menggunakantime.sleep(second)fungsi dalam strategi membuat program strategi menunggu untuk tempoh masa sebenarnya apabila backtesting (tidak melangkau pada siri masa sistem backtesting), jadi ia menyebabkan strategi untuk backtesting sangat perlahan.

IsVirtual

Tentukan sama ada persekitaran menjalankan strategi adalah sistem backtesting.

Strategi mengembalikan nilai sebenar, contohnya:trueapabila dijalankan dalam persekitaran sistem backtesting. Strategi mengembalikan nilai palsu, contohnya:falseapabila dijalankan dalam persekitaran perdagangan langsung. bool

IsVirtual ((()

function main() {
    if (IsVirtual()) {
        Log("The current backtest system environment.")
    } else {
        Log("The current live trading environment.")
    }
}
def main():
    if IsVirtual():
        Log("The current backtest system environment.")
    else:
        Log("The current live trading environment.")
void main() {
    if (IsVirtual()) {
        Log("The current backtest system environment.");
    } else {
        Log("The current live trading environment.");
    }
}

Tentukan sama ada persekitaran semasa adalah sistem backtesting, yang digunakan untuk serasi dengan perbezaan antara backtesting dan perdagangan langsung.

Surat

Hantar e-mel.

Penghantaran e-mel yang berjaya mengembalikan nilai sebenar, contohnya,true, dan penghantaran gagal mengembalikan nilai palsu, contohnya,false. bool

Mail ((smtpServer, smtpUsername, smtpPassword, mailTo, tajuk, badan)

Digunakan untuk menentukanSMTPalamat perkhidmatan penghantar e-mel. smtpServer betul senar Digunakan untuk menentukan alamat e-mel penghantar e-mel. smtpNama pengguna betul senar PeraturanSMTPkata laluan untuk peti mel penghantar e-mel. smtpPassword betul senar Digunakan untuk menentukan alamat e-mel penerima e-mel. mailTo betul senar Alamat e-mel. tajuk betul senar Email badan. badan betul senar

function main(){
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
}
def main():
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
void main() {
    Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body");
}

PeraturansmtpPasswordparameter menetapkan kata laluan untukSMTPPerkhidmatan, bukan kata laluan kotak mel. Apabila menetapkansmtpServerparameter, jika anda perlu menukar port, anda boleh menambah nombor port terus dalam parametersmtpServerContohnya: QQ mailsmtp.qq.com:587, yang tersedia untuk ujian. Jika kesalahan dilaporkan:unencryped connection, anda perlu mengubahsuaismtpServerdaripadaMailFormat parameter adalah:ssl://xxx.com:xxx, contohnya,sslkaedahSMTPuntuk surat QQ:ssl://smtp.qq.com:465atausmtp://xxx.com:xxx. Ia tidak berfungsi dalam sistem backtesting.

{@fun/Global/Mail_Go Mail_Go}

Mail_Go

Versi asinkronMail function.

PeraturanMail_Gofungsi mengembalikan objek serentak dengan serta-merta, dan anda boleh menggunakanwaitkaedah objek serentak itu untuk mendapatkan hasil penghantaran mel. Penghantaran mel yang berjaya mengembalikan nilai yang benar, contohnya,true, dan penghantaran gagal mengembalikan nilai palsu, contohnya,false. objek

Mail_Go ((smtpServer, smtpUsername, smtpPassword, mailTo, tajuk, badan)

Ia digunakan untuk menentukanSMTPalamat perkhidmatan penghantar e-mel. smtpServer betul senar Ia digunakan untuk menentukan alamat e-mel penghantar e-mel. smtpNama pengguna betul senar PerkhidmatanSMTPkata laluan untuk peti mel penghantar e-mel. smtpPassword betul senar Ia digunakan untuk menentukan alamat e-mel penerima e-mel. mailTo betul senar Alamat e-mel. tajuk betul senar E-mel badan. badan betul senar

function main() {
    var r1 = Mail_Go("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
    var r2 = Mail_Go("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
    
    var ret1 = r1.wait()
    var ret2 = r2.wait()
    
    Log("ret1:", ret1)
    Log("ret2:", ret2)
}
# Not supported.
// Not supported.

Ia tidak berfungsi dalam sistem backtesting.

{@fun/Global/Mail Mail}

SetErrorFilter

Log ralat penapis.

SetErrorFilter ((filter)

Senar ungkapan biasa. penapis betul senar

function main() {
    SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused")
}
def main():
    SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused")
void main() {
    SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused");
}

Menyaring kesilapan biasa.

function main() {
    // A random query for a non-existent order with an id of 123, allowing the interface to report an error deliberately
    var order = exchange.GetOrder("123")
    Log(order)
    // Filter http502 errors, GetOrder interface errors, after setting the error filter, the second call to GetOrder will no longer report errors
    SetErrorFilter("502:|GetOrder")
    order = exchange.GetOrder("123")
    Log(order)
}
def main():
    order = exchange.GetOrder("123")
    Log(order)
    SetErrorFilter("502:|GetOrder")
    order = exchange.GetOrder("123")
    Log(order)
void main() {
    TId orderId;
    Order order = exchange.GetOrder(orderId);
    Log(order);
    SetErrorFilter("502:|GetOrder");
    order = exchange.GetOrder(orderId);
    Log(order);
}

Menapis mesej ralat antara muka.

Log ralat yang sepadan dengan ungkapan biasa ini tidak akan dimuat naik ke sistem log. Anda boleh memanggilnya beberapa kali (tidak ada had pada bilangan kali) untuk menetapkan pelbagai syarat penapis. Ungkapan biasa yang ditetapkan beberapa kali akan terkumpul dan berkuat kuasa pada masa yang sama. Anda boleh menetapkan rentetan kosong untuk menetapkan semula ungkapan biasa yang digunakan untuk menapis log ralat:SetErrorFilter(""). log disaring tidak lagi ditulis ke fail pangkalan data yang sepadan dengan ID perdagangan hidup dalam direktori docker untuk mengelakkan laporan ralat yang kerap dari membengkak fail pangkalan data.

GetPid

Dapatkan ID proses dagangan secara langsung.

Kembalikan ID proses dagangan secara langsung. senar

GetPid ((()

function main(){
    var id = GetPid()
    Log(id)
}
def main():
    id = GetPid()
    Log(id)
void main() {
    auto id = GetPid();
    Log(id);
}

GetLastError

Dapatkan mesej ralat terakhir.

Mesej ralat terakhir. senar

GetLastError()

function main(){
    // Because the order number 123 does not exist, so there will be an error.
    exchange.GetOrder("123")
    var error = GetLastError()
    Log(error)
}
def main():
    exchange.GetOrder("123")
    error = GetLastError()
    Log(error)
void main() {
    // Order ID type: TId, so you can't pass in a string, we place an order that doesn't meet the exchange specification to trigger
    exchange.GetOrder(exchange.Buy(1, 1));
    auto error = GetLastError();
    Log(error);
}

Ia tidak berfungsi dalam sistem backtesting.

GetCommand

Dapatkan arahan strategi interaksi.

Format arahan yang dikembalikan adalahControlName:Data. ControlNameadalah nama kawalan, danDataadalah data yang dimasukkan ke dalam kawalan. Jika kawalan interaktif tidak mempunyai kotak input, kotak drop-down dan komponen lain (contohnya kawalan butang tanpa kotak input) maka format arahan yang dikembalikan adalahControlName, yang mengembalikan nama kawalan sahaja. senar

DapatkanCommand()

function main(){
    while(true) { 
        var cmd = GetCommand()
        if (cmd) { 
            Log(cmd)
        }
        Sleep(1000) 
    }
}
def main():
    while True:
        cmd = GetCommand()
        if cmd:
            Log(cmd)
        Sleep(1000)
void main() {
    while(true) {
        auto cmd = GetCommand();
        if(cmd != "") {
            Log(cmd);
        }
        Sleep(1000);
    }
}

Mengesan arahan interaksi dan menggunakanLogfungsi untuk mengeluarkan arahan interaksi apabila dikesan.

function main() {
    while (true) {
        LogStatus(_D())
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd:", cmd)    
            var arr = cmd.split(":")
            if (arr[0] == "buy") {
                Log("Buy, the control without number")
            } else if (arr[0] == "sell") {
                Log("Sell, the control with the number of:", arr[1])
            } else {
                Log("Other controls trigger:", arr)
            }
        }
        Sleep(1000)
    } 
}
def main():
    while True:
        LogStatus(_D())
        cmd = GetCommand()
        if cmd:
            Log("cmd:", cmd)
            arr = cmd.split(":")
            if arr[0] == "buy":
                Log("Buy, the control without number")
            elif arr[0] == "sell":
                Log("Sell, the control with the number of:", arr[1])
            else:
                Log("Other controls trigger:", arr)
        Sleep(1000)
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
void split(const string& s,vector<string>& sv,const char flag = ' ') {
    sv.clear();
    istringstream iss(s);
    string temp;            

    while (getline(iss, temp, flag)) {
        sv.push_back(temp);
    }
    return;
}            

void main() {
    while(true) {
        LogStatus(_D());
        auto cmd = GetCommand();
        if (cmd != "") {
            vector<string> arr;
            split(cmd, arr, ':');
            if(arr[0] == "buy") {
                Log("Buy, the control without number");
            } else if (arr[0] == "sell") {
                Log("Sell, the control with the number of:", arr[1]);
            } else {
                Log("Other controls trigger:", arr);
            }
        }
        Sleep(1000);
    }
}

Sebagai contoh, kawalan interaktif strategi menambah kawalan tanpa kotak input, kawalan interaktif dinamakan:buy, maklumat deskripsi kawalan adalah:buy, yang merupakan kawalan butang. Lanjutkan dengan menambah kawalan dengan kotak input. Kawalan interaktif dinamakan:selldan mesej penerangan kawalan adalah:sell, yang merupakan kawalan interaktif yang merupakan gabungan butang dan kotak input. Kod interaksi direka dalam strategi untuk bertindak balas terhadap kawalan interaksi yang berbeza:

Ia tidak berfungsi dalam sistem backtesting.

GetMeta

Dapatkan nilai Meta ditulis apabila menjana kod pendaftaran strategi.

Metadata. senar

DapatkanMeta

function main() {
    // The maximum asset value of the denominated currency allowed by the strategy.
    var maxBaseCurrency = null
    
    // Get the metadata when creating the registration code.
    var level = GetMeta()
    
    // Detecting the conditions corresponding to Meta.
    if (level == "level1") {
        // -1 for unrestricted
        maxBaseCurrency = -1       
    } else if (level == "level2") {
        maxBaseCurrency = 10     
    } else if (level == "level3") {
        maxBaseCurrency = 1
    } else {
        maxBaseCurrency = 0.5
    }
    
    while(1) {
        Sleep(1000)
        var ticker = exchange.GetTicker()
        
        // Detect asset values
        var acc = exchange.GetAccount()
        if (maxBaseCurrency != -1 && maxBaseCurrency < acc.Stocks + acc.FrozenStocks) {
            // Stop executing strategy trading logic
            LogStatus(_D(), "level:", level, "Positions exceeding the usage limit of the registration code will no longer execute the strategy trading logic!")
            continue
        }
        
        // Other trading logic
        
        // Normal output of status bar information
        LogStatus(_D(), "level:", level, "The strategy is working properly! ticker data: \n", ticker)
    }
}
def main():
    maxBaseCurrency = null
    level = GetMeta()
    
    if level == "level1":
        maxBaseCurrency = -1       
    elif level == "level2":
        maxBaseCurrency = 10     
    elif level == "level3":
        maxBaseCurrency = 1
    else:
        maxBaseCurrency = 0.5
    
    while True:
        Sleep(1000)
        ticker = exchange.GetTicker()        
        acc = exchange.GetAccount()
        if maxBaseCurrency != -1 and maxBaseCurrency < acc["Stocks"] + acc["FrozenStocks"]:
            LogStatus(_D(), "level:", level, "Positions exceeding the usage limit of the registration code will no longer execute the strategy trading logic!")
            continue        
        
        # Other trading logic
        
        # Normal output of status bar information
        LogStatus(_D(), "level:", level, "The strategy is working properly! ticker data: \n", ticker)
void main() {
    auto maxBaseCurrency = 0.0;
    auto level = GetMeta();
    
    if (level == "level1") {
        maxBaseCurrency = -1;  
    } else if (level == "level2") {
        maxBaseCurrency = 10;
    } else if (level == "level3") {
        maxBaseCurrency = 1;
    } else {
        maxBaseCurrency = 0.5;
    }
    
    while(1) {
        Sleep(1000);
        auto ticker = exchange.GetTicker();  
        auto acc = exchange.GetAccount();
        if (maxBaseCurrency != -1 && maxBaseCurrency < acc.Stocks + acc.FrozenStocks) {
            // Stop execution strategy trading logic.
            LogStatus(_D(), "level:", level, "Positions exceeding the usage limit of the registration code will no longer execute the strategy trading logic!");
            continue;
        }
        
        // Other trading logic
        
        // Normal output of status bar information
        LogStatus(_D(), "level:", level, "The strategy is working properly! ticker data: \n", ticker);
    }
}

Contoh senario aplikasi: PenggunaanMetauntuk mengehadkan jumlah aset yang dikendalikan oleh strategi.

Senario permohonan: perlu melakukan had modal untuk penyewa strategi yang berbeza.Metanilai yang ditetapkan apabila menjana kod pendaftaran tidak boleh melebihi 190 aksara danGetMeta()Jika tiada metadata (Meta) ditetapkan semasa menjana kod pendaftaran strategi,GetMeta()fungsi mengembalikan null. Ia tidak berfungsi dalam sistem backtesting.

Pilih

Untuk primitifSocketakses, menyokongtcp, udp, tls, unixSokong 4 protokol komunikasi popular:mqtt, nats, amqp, kafka. Sokongan untuk menyambung ke pangkalan data:sqlite3, mysql, postgres, clickhouse.

PeraturanDial()fungsi mengembalikan null jika ia masa keluar. panggilan biasa mengembalikan objek sambungan yang mempunyai tiga kaedah:read, writedanclose.readkaedah digunakan untuk membaca data,writekaedah digunakan untuk menghantar data danclosekaedah digunakan untuk menutup sambungan. Peraturanreadkaedah menyokong parameter berikut:

  • Apabila tiada parameter yang diteruskan, ia menyekat sehingga mesej tersedia dan kembali, sepertiws.read().
  • Apabila diteruskan sebagai parameter, unit adalah milidetik, menentukan tempoh masa tunggu mesej.ws.read(2000)menentukan masa lapang dua saat (2000 milidetik).
  • Kedua parameter berikut adalah sah hanya untuk WebSocket: Memindahkan parameter-1bermaksud bahawa fungsi mengembalikan dengan serta-merta, tanpa mengira kehadiran atau ketiadaan mesej, contohnya:ws.read(-1). Memindahkan parameter-2bermaksud bahawa fungsi kembali dengan atau tanpa mesej, tetapi hanya mesej terkini yang dikembalikan, dan mesej yang dipaparkan dibuang.ws.read(-2).

read()Penerangan penyangga fungsi: Data masuk yang didorong oleh protokol WebSocket boleh menyebabkan pengumpulan data jika selang masa antara strategiread()Panggilan fungsi terlalu lama. Data ini disimpan dalam penyangga, yang mempunyai struktur data antrian dengan maksimum 2000. Selepas 2000 melebihi, data terbaru dimasukkan ke dalam penyangga dan data tertua dibersihkan.

Senario Tiada parameter Parameter: -1 Parameter: -2 Parameter: 2000, dalam milidetik
Data yang sudah dalam penyangga Kembalikan data tertua dengan segera Kembalikan data tertua dengan segera Kembalikan data terkini dengan segera Kembalikan data tertua dengan segera
Tiada data dalam buffer Kembali apabila disekat ke data Kembalikan null dengan segera Kembalikan null dengan segera Tunggu 2000 ms, pulangkan null jika tiada data, pulangkan null jika ada data
Sambungan WebSocket diputuskan atau disambungkan semula oleh asas read() fungsi mengembalikan rentetan kosong, iaitu: , dan write() fungsi mengembalikan 0. Situasi dikesan. Anda boleh menutup sambungan menggunakan close() fungsi, atau jika anda telah menetapkan sambungan semula automatik, anda tidak perlu menutupnya, sistem yang mendasari akan menyambungkan semula secara automatik.

objek

Panggil (alamat) Panggil (alamat, masa lapang)

Alamat permintaan. alamat betul senar detik masa henti, masa lapang palsu nombor

function main(){
    // Dial supports tcp://,udp://,tls://,unix://protocol, you can add a parameter to specify the number of seconds for the timeout
    var client = Dial("tls://www.baidu.com:443")  
    if (client) {
        // write can be followed by a numeric parameter to specify the timeout, write returns the number of bytes successfully sent
        client.write("GET / HTTP/1.1\nConnection: Closed\n\n")
        while (true) {
            // read can be followed by a numeric parameter specifying the timeout in milliseconds. Returning null indicates an error or timeout or that the socket has been closed
            var buf = client.read()
            if (!buf) {
                 break
            }
            Log(buf)
        }
        client.close()
    }
}
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()
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();
    }
}

Contoh panggilan fungsi Dial:

function main() {
    LogStatus("Connecting...")
    // Accessing WebSocket interface of Binance
    var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
    if (!client) {
        Log("Connection failed, program exited")
        return
    }
    
    while (true) {
        // read returns only the data retrieved after the read call
        var buf = client.read()      
        if (!buf) {
            break
        }
        var table = {
            type: 'table',
            title: 'Ticker Chart',
            cols: ['Currency', 'Highest', 'Lowest', 'Buy 1', 'Sell 1', 'Last traded price', 'Volume', 'Update time'],
            rows: []
        }
        var obj = JSON.parse(buf)
        _.each(obj, function(ticker) {
            table.rows.push([ticker.s, ticker.h, ticker.l, ticker.b, ticker.a, ticker.c, ticker.q, _D(ticker.E)])
        })
        LogStatus('`' + JSON.stringify(table) + '`')
    }
    client.close()
}
import json
def main():
    LogStatus("Connecting...")
    client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
    if not client:
        Log("Connection failed, program exited")
        return 
    
    while True:
        buf = client.read()
        if not buf:
            break
        table = {
            "type" : "table", 
            "title" : "Ticker Chart", 
            "cols" : ['Currency', 'Highest', 'Lowest', 'Buy 1', 'Sell 1', 'Last traded price', 'Volume', 'Update time'], 
            "rows" : [] 
        }
        obj = json.loads(buf)
        for i in range(len(obj)):
            table["rows"].append([obj[i]["s"], obj[i]["h"], obj[i]["l"], obj[i]["b"], obj[i]["a"], obj[i]["c"], obj[i]["q"], _D(int(obj[i]["E"]))])
        LogStatus('`' + json.dumps(table) + '`')
    client.close()
void main() {
    LogStatus("Connecting...");
    auto client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr");
    if(!client.Valid) {
        Log("Connection failed, program exited");
        return;
    }
    
    while(true) {
        auto buf = client.read();
        if(buf == "") {
            break;
        }
        json table = R"({
            "type" : "table", 
            "title" : "Ticker Chart", 
            "cols" : ["Currency", "Highest", "Lowest", "Buy 1", "Sell 1", "Last traded price", "Volume", "Update time"], 
            "rows" : []
        })"_json;
        json obj = json::parse(buf);
        for(auto& ele : obj.items()) {
            table["rows"].push_back({ele.value()["s"], ele.value()["h"], ele.value()["l"], ele.value()["b"], ele.value()["a"], ele.value()["c"], 
                ele.value()["q"], _D(ele.value()["E"])});
        }
        LogStatus("`" + table.dump() + "`");
    }
    client.close();
}

Untuk mengakses antara muka ticker WebSocket Binance:

var ws = null 
function main(){
    var param = {
        "op": "subscribe",
        "args": [{
            "channel": "tickers",
            "instId": "BTC-USDT"
        }]
    }
    // When calling Dial function, specify reconnect=true to set reconnection mode and payload to be the message sent when reconnecting. When the WebSocket connection is disconnected, it will reconnect and send messages automatically.
    ws = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true&payload="+ JSON.stringify(param))
    if(ws){
        var pingCyc = 1000 * 20
        var lastPingTime = new Date().getTime()
        while(true){
            var nowTime = new Date().getTime()
            var ret = ws.read()
            Log("ret:", ret)
            if(nowTime - lastPingTime > pingCyc){
                var retPing = ws.write("ping")
                lastPingTime = nowTime
                Log("Send : ping", "#FF0000")
            }
            LogStatus("Current time:", _D())
            Sleep(1000)
        }
    }
}              

function onexit() {
    ws.close() 
    Log("exit")
}
import json
import time              

ws = None
def main():
    global ws 
    param = {
        "op": "subscribe",
        "args": [{
            "channel": "tickers",
            "instId": "BTC-USDT"
        }]
    }
    ws = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true&payload=" + json.dumps(param))
    if ws:
        pingCyc = 1000 * 20
        lastPingTime = time.time() * 1000
        while True:
            nowTime = time.time() * 1000
            ret = ws.read()
            Log("ret:", ret)
            if nowTime - lastPingTime > pingCyc:
                retPing = ws.write("ping")
                lastPingTime = nowTime
                Log("Send: ping", "#FF0000")
            LogStatus("Current time:", _D())
            Sleep(1000)              

def onexit():
    ws.close()
    Log("exit")
auto objWS = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true");              

void main() {
    json param = R"({
        "op": "subscribe",
        "args": [{
            "channel": "tickers",
            "instId": "BTC-USDT"
        }]
    })"_json;
    
    objWS.write(param.dump());
    if(objWS.Valid) {
        uint64_t pingCyc = 1000 * 20;
        uint64_t lastPingTime = Unix() * 1000;
        while(true) {
            uint64_t nowTime = Unix() * 1000;
            auto ret = objWS.read();
            Log("ret:", ret);
            if(nowTime - lastPingTime > pingCyc) {
                auto retPing = objWS.write("ping");
                lastPingTime = nowTime;
                Log("Send: ping", "#FF0000");
            }
            LogStatus("Current time:", _D());
            Sleep(1000);
        }
    }
}              

void onexit() {
    objWS.close();
    Log("exit");
}

Akses kepada OKXs WebSocket ticker antara muka:

var ws = null               

function main(){
    var param = {"sub": "market.btcusdt.detail", "id": "id1"}
    ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload="+ JSON.stringify(param))
    if(ws){
        while(1){
            var ret = ws.read()
            Log("ret:", ret)
            // Respond to heartbeat packet operations
            try {
                var jsonRet = JSON.parse(ret)
                if(typeof(jsonRet.ping) == "number") {
                    var strPong = JSON.stringify({"pong" : jsonRet.ping})
                    ws.write(strPong)
                    Log("Respond to ping, send pong:", strPong, "#FF0000")
                }
            } catch(e) {
                Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
            }
            
            LogStatus("Current time:", _D())
            Sleep(1000)
        }
    }
}              

function onexit() {
    ws.close() 
    Log("Execute the ws.close() function")
}
import json
ws = None              

def main():
    global ws
    param = {"sub" : "market.btcusdt.detail", "id" : "id1"}
    ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload=" + json.dumps(param))
    if ws:
        while True:
            ret = ws.read()
            Log("ret:", ret)              
            # Respond to heartbeat packet operations
            try:
                jsonRet = json.loads(ret)
                if "ping" in jsonRet and type(jsonRet["ping"]) == int:
                    strPong = json.dumps({"pong" : jsonRet["ping"]})
                    ws.write(strPong)
                    Log("Respond to ping, send pong:", strPong, "#FF0000")
            except Exception as e:
                Log("e:", e)
                
            LogStatus("Current time:", _D())
            Sleep(1000)
    
def onexit():
    ws.close()
    Log("Execute the ws.close() function")  
using namespace std;
void main() {
    json param = R"({"sub" : "market.btcusdt.detail", "id" : "id1"})"_json;
    auto ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload=" + param.dump());
    if(ws.Valid) {
        while(true) {
            auto ret = ws.read();
            Log("ret:", ret);              
            // Respond to heartbeat packet operations
            try 
            {
                auto jsonRet = json::parse(ret);
                if(jsonRet["ping"].is_number()) {
                    json pong = R"({"pong" : 0})"_json;
                    pong["pong"] = jsonRet["ping"];
                    auto strPong = pong.dump();
                    ws.write(strPong);
                    Log("Respond to ping, send pong:", strPong, "#FF0000");
                }
            } catch(exception &e) 
            {
                Log("e:", e.what());
            }
            
            LogStatus("Current time:", _D());
            Sleep(1000);
        }
    }
}              

void onexit() {
    // ws.close();
    Log("Execute the ws.close() function");
}

Akses kepada Huobi WebSocket ticker antara muka:

function getLogin(pAccessKey, pSecretKey, pPassphrase) {
    // Signature function for login
    var ts = (new Date().getTime() / 1000).toString()
    var login = {
        "op": "login",
        "args":[{
            "apiKey"    : pAccessKey,
            "passphrase" : pPassphrase,
            "timestamp" : ts,
            "sign" : exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey)   // exchange.HMAC has been deprecated and is temporarily supported. Please use the latest exchange.Encode function instead.
        }]
    }    
    return login
}                

var client_private = null 
function main() {
    // Because the read function uses a timeout setting, filtering the timeout reports errors that would otherwise be output with redundant errors
    SetErrorFilter("timeout")
    
    // Position channel subscription information
    var posSubscribe = {
        "op": "subscribe",
        "args": [{
            "channel": "positions",
            "instType": "ANY"
        }]
    }                

    var accessKey = "xxx"
    var secretKey = "xxx"
    var passphrase = "xxx"            

    client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
    client_private.write(JSON.stringify(getLogin(accessKey, secretKey, passphrase)))
    Sleep(3000)  // When logging in, you cannot subscribe to private channels immediately, you need to wait for server response
    client_private.write(JSON.stringify(posSubscribe))
    if (client_private) {
        var lastPingTS = new Date().getTime()
        while (true) {
            var buf = client_private.read(-1)
            if (buf) {
                Log(buf)
            }
            
            // Detect disconnection, reconnect
            if (buf == "" && client_private.write(JSON.stringify(posSubscribe)) == 0) {
                Log("Disconnection detected, close connection, reconnect")
                client_private.close()
                client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
                client_private.write(JSON.stringify(getLogin(accessKey, secretKey, passphrase)))
                Sleep(3000)
                client_private.write(JSON.stringify(posSubscribe))
            }
            
            // Send heartbeat packets
            var nowPingTS = new Date().getTime()
            if (nowPingTS - lastPingTS > 10 * 1000) {
                client_private.write("ping")
                lastPingTS = nowPingTS
            }            
        }        
    }
}                

function onexit() {    
    var ret = client_private.close()
    Log("Close the connection!", ret)
}
import json
import time
  
def getLogin(pAccessKey, pSecretKey, pPassphrase):
    ts = str(time.time())
    login = {
        "op": "login",
        "args":[{
            "apiKey"    : pAccessKey,
            "passphrase" : pPassphrase,
            "timestamp" : ts,
            "sign" : exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey)
        }]
    }
    return login                 

client_private = None 
def main():
    global client_private
    SetErrorFilter("timeout")
    
    posSubscribe = {
        "op": "subscribe",
        "args": [{
            "channel": "positions",
            "instType": "ANY"
        }]
    }                  

    accessKey = "xxx"
    secretKey = "xxx"
    passphrase = "xxx"
    
    client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
    client_private.write(json.dumps(getLogin(accessKey, secretKey, passphrase)))
    Sleep(3000)
    client_private.write(json.dumps(posSubscribe))
    if client_private:
        lastPingTS = time.time() * 1000
        while True:
            buf = client_private.read(-1)
            if buf:
                Log(buf)
            
            if buf == "" and client_private.write(json.dumps(posSubscribe)) == 0:
                Log("Disconnection detected, close connection, reconnect")
                ret = client_private.close()
                client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
                client_private.write(json.dumps(getLogin(accessKey, secretKey, passphrase)))
                Sleep(3000)
                client_private.write(json.dumps(posSubscribe))
            
            nowPingTS = time.time() * 1000
            if nowPingTS - lastPingTS > 10 * 1000:
                client_private.write("ping")
                lastPingTS = nowPingTS                

def onexit():
    ret = client_private.close()
    Log("Close the connection!", ret)
auto client_private = Dial("wss://ws.okx.com:8443/ws/v5/private");                  

json getLogin(string pAccessKey, string pSecretKey, string pPassphrase) {
    auto ts = std::to_string(Unix());
    json login = R"({
        "op": "login",
        "args": [{
            "apiKey": "",
            "passphrase": "",
            "timestamp": "",
            "sign": ""
        }]
    })"_json;
    login["args"][0]["apiKey"] = pAccessKey;
    login["args"][0]["passphrase"] = pPassphrase;
    login["args"][0]["timestamp"] = ts;
    login["args"][0]["sign"] = exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey);
    return login;
}                  

void main() {
    SetErrorFilter("timeout");
    json posSubscribe = R"({
        "op": "subscribe",
        "args": [{
            "channel": "positions",
            "instType": "ANY"
        }]
    })"_json;
    
    auto accessKey = "xxx";
    auto secretKey = "xxx";
    auto passphrase = "xxx";
    
    client_private.write(getLogin(accessKey, secretKey, passphrase).dump());
    Sleep(3000);
    client_private.write(posSubscribe.dump());                

    if (client_private.Valid) {
        uint64_t lastPingTS = Unix() * 1000;                  

        while (true) {
            auto buf = client_private.read(-1);
            if (buf != "") {
                Log(buf);
            }
            if (buf == "") {
                if (client_private.write(posSubscribe.dump()) == 0) {
                    Log("Disconnection detected, close connection, reconnect");
                    client_private.close();
                    client_private = Dial("wss://ws.okx.com:8443/ws/v5/private");
                    client_private.write(getLogin(accessKey, secretKey, passphrase).dump());
                    Sleep(3000);
                    client_private.write(posSubscribe.dump());
                }
            }
            
            uint64_t nowPingTS = Unix() * 1000;
            if (nowPingTS - lastPingTS > 10 * 1000) {
                client_private.write("ping");
                lastPingTS = nowPingTS;
            }
        }
    }
}                  

void onexit() {
    client_private.close();
    Log("exit");
}

Untuk mengakses OKXs antara muka pengesahan WebSocket:

var client = null 
function main() {
    // client = Dial("sqlite3://:memory:")   // Using an in-memory database
    client = Dial("sqlite3://test1.db")      // Open/connect to the database file in the docker's directory
    
    // record handle
    var sqlite3Handle = client.fd()
    Log("sqlite3Handle:", sqlite3Handle)
    
    // Querying tables in the database
    var ret = client.exec("SELECT name FROM sqlite_master WHERE type='table'")
    Log(ret)
}

function onexit() {
    Log("Execute client.close()")
    client.close()
}
// Not supported
// Not supported

Objek sambungan yang dikembalikan oleh fungsi Dial apabila menyambung ke pangkalan data mempunyai dua fungsi kaedah yang unik kepadanya:

  • exec(sqlString): Digunakan untuk melaksanakan pernyataan SQL dengan cara yang sama denganDBExec() function.
  • fd(): Pertubuhanfd()fungsi mengembalikan pegangan (contohnya, pembolehubah pegangan adalah pegangan) untuk digunakan oleh utas lain untuk menyambung semula (walaupun objek yang dicipta oleh Dial telah ditutup dengan pelaksanaanclose()fungsi untuk menutup sambungan) dengan melewati pemegang ke dalamDial()fungsi, sebagai contoh,Dial(handle)Sambungan penggunaan semula. Berikut adalah contoh fungsi Dial yang menyambung kesqlite3 database.

Perincianaddressparameter, dipisahkan oleh|simbol selepas alamat biasa:wss://ws.okx.com:8443/ws/v5/publicJika ada.|aksara dalam rentetan parameter, kemudian||digunakan sebagai tanda pemisah. Bahagian selepas itu adalah beberapa tetapan parameter fungsi, dan setiap parameter disambungkan dengan&contohnya,ss5Parameter proxy dan mampatan boleh ditetapkan bersama-sama seperti berikut:Dial("wss://ws.okx.com:8443/ws/v5/public|proxy=socks5://xxx:9999&compress=gzip_raw&mode=recv")

Fungsi yang disokong oleh parameter alamat fungsi Dial Penerangan parameter
Parameter yang berkaitan dengan pemampatan data protokol WebSocket: compress=parameter value memampatkan adalah kaedah mampatan, pilihan parameter mampatan adalah: gzip_raw, gzip, dan lain-lain Jika kaedah gzip bukan gzip standard, anda boleh menggunakan kaedah lanjutan: gzip_raw
Parameter yang berkaitan dengan pemampatan data protokol WebSocket: mod=nilai parameter mod adalah mod mampatan, parameter mod boleh menjadi dua, menghantar, recv. dual adalah mampatan dua hala, menghantar data mampat, menerima data mampat. menghantar adalah menghantar data mampat. recv adalah menerima data mampat, dekompresi tempatan.
Protokol WebSocket menetapkan parameter yang berkaitan dengan sambungan semula automatik yang mendasari: reconnect=nilai parameter reconnect adalah sama ada untuk menetapkan reconnect, reconnect=true adalah untuk membolehkan reconnect. lalai adalah tidak reconnect apabila parameter ini tidak ditetapkan.
Protokol WebSocket menetapkan parameter yang berkaitan dengan auto-reconnect yang mendasari: interval=nilai parameter interval adalah selang percubaan semula, dalam milidetik, interval=10000 adalah selang percubaan semula 10 saat, lalai adalah 1 saat apabila ia tidak ditetapkan, iaitu interval=1000.
Protokol WebSocket menetapkan parameter yang berkaitan dengan auto-reconnect yang mendasari: payload=nilai parameter payload adalah mesej langganan yang perlu dihantar apabila WebSocket disambungkan semula, contohnya: payload=okokok.
Parameter yang berkaitan dengan stoking5 proxy: proxy=nilai parameter proxy adalah persediaan proxy ss5, format nilai parameter: socks5://name:pwd@192.168.0.1:1080, nama adalah nama pengguna pelayan ss5, pwd adalah kata laluan masuk pelayan ss5, 1080 adalah port perkhidmatan ss5.

PeraturanDial()Fungsi hanya disokong untuk perdagangan langsung. Apabila menyambung ke pangkalan data menggunakan fungsi Dial, rentetan sambungan ditulis dengan merujuk kepada projek pemandu bahasa go untuk setiap pangkalan data.

Pangkalan data disokong Projek Pemacu Tali sambungan Catatan
Sqlite3 github.com/mattn/go-sqlite3 sqlite3://file:test.db?cache=shared&mode=memory Peraturansqlite3://awalan menunjukkan bahawa pangkalan data sqlite3 sedang digunakan, contoh panggilan:Dial("sqlite3://test1.db")
MySQL github.com/go-sql-driver/mysql mysql://username:yourpassword@tcp(localhost:3306)/database anda?charset=utf8mb4
Pelancongan github.com/lib/pq postgres://user=postgres dbname=yourdatabase sslmode=disable password=yourpassword host=localhost port=5432
rumah klik github.com/ClickHouse/clickhouse-go klikhouse://tcp://host:9000?username=username&password=yourpassword&database=youdatabase

Sila ambil perhatian bahawa apabilapayloadkandungan yang ditetapkan dalamaddressparameter mengandungi aksara=atau ciri khas lain, ia boleh menjejaskan analisisaddressparameterDialfungsi, seperti contoh berikut.

contoh panggilan antara muka peribadi websocket backPack Exchange:

var client = null

function main() {
    // Base64-encoded public key of the key pair, i.e. the access key configured on FMZ
    var base64ApiKey = "xxx"

    var ts = String(new Date().getTime())
    var data = "instruction=subscribe&timestamp=" + ts + "&window=5000"

    // Since signEd25519 returns a base64 encoding, it contains the character "="
    var signature = signEd25519(data)
    
    // The payload may contain the character "=" after being encoded by JSON
    payload = {
        "method": "SUBSCRIBE",
        "params": ["account.orderUpdate"],
        "signature": [base64ApiKey, signature, ts, "5000"]
    }

    client = Dial("wss://ws.backpack.exchange")
    client.write(JSON.stringify(payload))
    if (!client) {
        Log("Connection failed, program exited")
        return
    }
    
    while (true) {
        var buf = client.read()      
        Log(buf)
    }    
}

function onexit() {
    client.close()
}

function signEd25519(data) {
    return exchange.Encode("ed25519.seed", "raw", "base64", data, "base64", "{{secretkey}}")
}

Panggilan berikut dalam kod berfungsi dengan baik:

client = Dial("wss://ws.backpack.exchange")
client.write(JSON.stringify(payload))

Jika anda menulisnya terus ke dalampayload, ia tidak akan berfungsi dengan baik, sebagai contoh:

client = Dial("wss://ws.backpack.exchange|payload=" + JSON.stringify(payload))

Pada masa ini, hanya JavaScript menyokong penggunaanmqtt, nats, amqp, dankafkaKod strategi bahasa JavaScript digunakan sebagai contoh untuk menunjukkan penggunaan empat protokol:mqtt, nats, amqp, dankafka:

// We need to configure and deploy proxy servers for each protocol first.
// For the sake of demonstration, the subscription (read operation) and publishing (write operation) of the topic test_topic are all performed in the current strategy.
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]

            // Write data
            conn.write(name + ", time: " + _D() + ", test msg.")
            
            // Read data
            var readMsg = conn.read(1000)
            Log(name + " readMsg: ", readMsg, "#FF0000")
        }

        Sleep(1000)
    }
}

function onexit() {
    for (var i in arrConn) {
        arrConn[i].close()
        Log("close", arrName[i], "connect")
    }
}

Rujukan dokumentasi terperinci:Menjelajah FMZ: Amalan Protokol Komunikasi Antara Strategi Dagangan Langsung

HttpQuery

Kirim permintaan HTTP.

Mengembalikan data tindak balas permintaan.JSONstring, ia boleh dianalisis olehJSON.parse()fungsi dalamJavaScriptstrategi bahasa, dan olehjson::parse()fungsi dalamC++Jika debug ditetapkan kepada benar dalam struktur pilihan, nilai pulangan adalah objek (JSON); jika debug ditetapkan kepada palsu, nilai pulangan adalah rentetan. senar, objek

HttpQuery ((url) HttpQuery ((url, pilihan)

URL permintaan HTTP. url betul senar Seting yang berkaitan dengan permintaan HTTP, misalnya, boleh disusun seperti berikut:

{
    method: "POST",
    body: "a=10&b=20&c=30",
    charset: "UTF-8",
    cookie: "session_id=12345; lang=en",
    profile: "chrome_103",
    debug: false,
    headers: {"TEST-HTTP-QUERY": "123"},
    timeout: 1000
}
  • profil: Digunakan untuk mensimulasikan pelayartlscap jari. Tetapan yang disokong termasuk pilihan berikut: chrome_:"chrome_103", "chrome_104", "chrome_105", "chrome_106", "chrome_107", "chrome_108", "chrome_109", "chrome_110", "chrome_111", "chrome_112", "chrome_117"... Safari_:"safari_15_6_1", "safari_16_0", "safari_ipad_15_6", "safari_ios_15_5", "safari_ios_15_6", "safari_ios_16_0"... Firefox_:"firefox_102", "firefox_104", "firefox_105", "firefox_106", "firefox_108", "firefox_110", "firefox_117"... Opera_:"opera_89", "opera_90", "opera_91"... Zalando:"zalando_android_mobile", "zalando_ios_mobile"... Nike_:"nike_ios_mobile", "nike_android_mobile"... pencakar awan:"cloudscraper"... mms_:"mms_ios"... mesh_:"mesh_ios", "mesh_ios_1", "mesh_ios_2", "mesh_android", "mesh_android_1", "mesh_android_2"... Diperakui:"confirmed_ios", "confirmed_android"... ok."okhttp4_android_7", "okhttp4_android_8", "okhttp4_android_9", "okhttp4_android_10", "okhttp4_android_11", "okhttp4_android_12", "okhttp4_android_13",
  • debug: Apabila ia ditetapkan untuktrue, yangHttpQuerypanggilan fungsi mengembalikan mesej jawapan penuh.false, hanya data dalamBodydaripada mesej jawapan dikembalikan.
  • timeout: tetapan timeout, set 1000 bermaksud 1 detik timeout.
  • Charset: Ia menyokong transcoding data tindak balas yang diminta, seperti GB18030. Semua medan dalam struktur ini adalah pilihan, contohnya,profilemedan boleh ditinggalkan.

pilihan palsu objek

function main(){
    // An example of GET access without parameters
    var info = JSON.parse(HttpQuery("https://www.okx.com/api/v5/public/time"))
    Log(info)
    // An example of GET access with parameters
    var ticker = JSON.parse(HttpQuery("https://www.okx.com/api/v5/market/books?instId=BTC-USDT"))
    Log(ticker)
}
import json
import urllib.request
def main():
    # HttpQuery does not support Python, you can use the urllib/urllib2 library instead
    info = json.loads(urllib.request.urlopen("https://www.okx.com/api/v5/public/time").read().decode('utf-8'))
    Log(info)
    ticker = json.loads(urllib.request.urlopen("https://www.okx.com/api/v5/market/books?instId=BTC-USDT").read().decode('utf-8'))
    Log(ticker)
void main() {
    auto info = json::parse(HttpQuery("https://www.okx.com/api/v5/public/time"));
    Log(info);
    auto ticker = json::parse(HttpQuery("https://www.okx.com/api/v5/market/books?instId=BTC-USDT"));
    Log(ticker);
}

Contoh mengakses antara muka API ticker awam OKX.

function main() {
    // Setting proxy and sending an http request for this time, no username, no password, this http request will be sent through the proxy
    HttpQuery("socks5://127.0.0.1:8889/http://www.baidu.com/")            

    // Setting proxy and sending an http request for this time, enter the user name and password, only the current call to HttpQuery takes effect, and then call HttpQuery again ("http://www.baidu.com") so that the proxy will not be used.
    HttpQuery("socks5://username:password@127.0.0.1:8889/http://www.baidu.com/")
}
# HttpQuery does not support Python, you can use the urllib/urllib2 library instead
void main() {
    HttpQuery("socks5://127.0.0.1:8889/http://www.baidu.com/");
    HttpQuery("socks5://username:password@127.0.0.1:8889/http://www.baidu.com/");
}

Fungsi HttpQuery menggunakan tetapan proksi.

PeraturanHttpQuery()fungsi hanya menyokongJavaScript, C++bahasa,Pythonbahasa boleh menggunakanurllibperpustakaan untuk menghantar permintaan Http secara langsung.HttpQuery()digunakan terutamanya untuk mengakses antara muka pertukaran yang tidak memerlukan tandatangan, seperti antara muka awam seperti maklumat ticker.HttpQuery()boleh digunakan dalam sistem backtesting untuk menghantar permintaan (hanyaGETPercubaan belakang terhad kepada menggunakan 20 lawatan keURLs, danHttpQuery()kunjungan akan cache data.URLdiperolehi untuk kali kedua,HttpQuery()fungsi mengembalikan data yang disimpan dan tiada lagi permintaan rangkaian sebenar berlaku.

{@fun/Global/HttpQuery_Go HttpQuery_Go}

HttpQuery_Go

Menghantar permintaan HTTP, versi asynchronousHttpQuery function.

PeraturanHttpQuery_Go()fungsi segera mengembalikan objek serentak yang boleh digunakan untuk mendapatkan hasil permintaan Http menggunakanwaitkaedahJSON.parse()fungsi boleh digunakan untuk menganalisisJSON.parse()fungsi dalamJavaScriptstrategi bahasa.
objek

HttpQuery_Go (url) HttpQuery_Go ((url, pilihan)

URL permintaan HTTP. url betul senar Seting yang berkaitan dengan permintaan HTTP, misalnya, boleh disusun seperti berikut:

{
    method: "POST",
    body: "a=10&b=20&c=30",
    charset: "UTF-8",
    cookie: "session_id=12345; lang=en",
    // profile: "",
    debug: false,
    headers: {"TEST-HTTP-QUERY": "123"},
    timeout: 1000
}
  • profil: Digunakan untuk mensimulasikan pelayartls fingerprints.
  • debug: Apabila ia ditetapkan untuktrue, iniHttpQuery_Gopanggilan fungsi mengembalikan mesej jawapan penuh.false, hanya data dalamBodydaripada mesej jawapan dikembalikan.
  • timeout: tetapan timeout, set 1000 bermaksud 1 detik timeout. Semua medan dalam struktur ini adalah pilihan, contohnya,profilemedan boleh ditinggalkan.

pilihan palsu objek

function main() {
    // Create the first asynchronous thread
    var r1 = HttpQuery_Go("https://www.okx.com/api/v5/market/tickers?instType=SPOT")
    // Create the second asynchronous thread
    var r2 = HttpQuery_Go("https://api.huobi.pro/market/tickers")
    
    // Get the return value of the first asynchronous thread call
    var tickers1 = r1.wait()
    // Get the return value of the second asynchronous thread call
    var tickers2 = r2.wait()
    
    // Print results
    Log("tickers1:", tickers1)
    Log("tickers2:", tickers2)
}
# Not supported
// Not supported

Akses asynchronous ke antara muka awam pertukaran untuk data ticker agregat.

PeraturanHttpQuery_Go()fungsi hanya menyokongJavaScript, yangPythonbahasa boleh digunakan denganurllibperpustakaan untuk menghantar permintaan Http secara langsung.HttpQuery_Go()digunakan terutamanya untuk mengakses antara muka yang tidak memerlukan tandatangan di bursa, seperti antara muka awam seperti maklumat ticker.HttpQuery_Gofungsi tidak disokong dalam sistem backtesting.

{@fun/Global/HttpQuery HttpQuery}

Enkod

Fungsi ini mengkodkan data mengikut parameter yang dihantar.

PeraturanEncodefungsi mengembalikan data selepas pengekodan dan penyulitan. senar

Encode ((algo, inputFormat, outputFormat, data) Encode ((algo, inputFormat, outputFormat, data, kunciFormat, kunci)

Parameteralgoadalah algoritma yang digunakan dalam pengiraan pengekodan. Tetapan sokongan adalah:raw(tidak ada algoritma yang digunakan), "tanda", tandaTx, md4, md5, sha256, sha512, sha1, keccak256, sha3.224, sha3.256, sha3.384, sha3.512, sha3.keccak256, sha3.keccak512, sha512.384, sha512.256, sha512.224, ripemd160, blake2b.256, 2b.512, blake2s.128, blake2s.256 Parameter.algojuga menyokong: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk, enkod dan dekod rentetan. Parameteralgojuga menyokong: ed25519 algoritma. Menyokong penggunaan algoritma hash yang berbeza, contohnya parameteralgoboleh ditulis sebagai ed25519.md5, ed25519.sha512, dll. Ia menyokonged25519.seedpengiraan. sesuatu betul senar Digunakan untuk menentukan format datadataparameter.inputFormatparameter boleh ditetapkan sebagai salah satu daripada berikut:raw, hex, base64, string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. inputFormat betul senar Digunakan untuk menentukan format data output.outputFormatparameter boleh ditetapkan sebagai salah satu daripada berikut:raw, hex, base64, string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. outputFormat betul senar Parameterdataadalah data yang akan diproses. data betul senar Digunakan untuk menentukan format datakeyparameter.keyparameter boleh ditetapkan sebagai salah satu daripada berikut:raw, hex, base64, string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. keyFormat palsu senar Parameterkeyadalah kunci rahsia yang digunakan untukHMACParameterkeydiperlukan apabila parameteralgoditetapkan kepadasignatausignTx.keyparameter tidak digunakan untukHMACpenyulitan apabilaalgoparameter ditetapkan kepada raw (kerana algoritma mesti ditentukan untuk penyulitan HMAC). kunci palsu senar

function main() {
    Log(Encode("raw", "raw", "hex", "example", "raw", "123"))            // 6578616d706c65
    Log(Encode("raw", "raw", "hex", "example"))                          // 6578616d706c65
    Log(Encode("sha256", "raw", "hex", "example", "raw", "123"))         // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
    Log(Encode("sha256", "raw", "hex", "example", "", "123"))            // 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c
    Log(Encode("sha256", "raw", "hex", "example", null, "123"))          // 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c
    Log(Encode("sha256", "raw", "hex", "example", "string", "123"))      // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
    
    Log(Encode("raw", "raw", "hex", "123"))           // 313233
    Log(Encode("raw", "raw", "base64", "123"))        // MTIz
    
    Log(Encode("sha256", "raw", "hex", "example", "hex", "313233"))      // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
    Log(Encode("sha256", "raw", "hex", "example", "base64", "MTIz"))     // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
}
def main():
    Log(Encode("raw", "raw", "hex", "example", "raw", "123"))            # 6578616d706c65
    Log(Encode("raw", "raw", "hex", "example", "", ""))                  # 6578616d706c65
    Log(Encode("sha256", "raw", "hex", "example", "raw", "123"))         # 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
    Log(Encode("sha256", "raw", "hex", "example", "", "123"))            # 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c            

    Log(Encode("sha256", "raw", "hex", "example", "string", "123"))      # 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
    
    Log(Encode("raw", "raw", "hex", "123", "", ""))           # 313233
    Log(Encode("raw", "raw", "base64", "123", "", ""))        # MTIz
    
    Log(Encode("sha256", "raw", "hex", "example", "hex", "313233"))      # 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
    Log(Encode("sha256", "raw", "hex", "example", "base64", "MTIz"))     # 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
void main() {
    Log(Encode("raw", "raw", "hex", "example", "raw", "123"));            // 6578616d706c65
    Log(Encode("raw", "raw", "hex", "example"));                          // 6578616d706c65
    Log(Encode("sha256", "raw", "hex", "example", "raw", "123"));         // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
    Log(Encode("sha256", "raw", "hex", "example", "", "123"));            // 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c            

    Log(Encode("sha256", "raw", "hex", "example", "string", "123"));      // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
                
    Log(Encode("raw", "raw", "hex", "123"));           // 313233
    Log(Encode("raw", "raw", "base64", "123"));        // MTIz
                
    Log(Encode("sha256", "raw", "hex", "example", "hex", "313233"));      // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
    Log(Encode("sha256", "raw", "hex", "example", "base64", "MTIz"));     // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
}

Contoh panggilan fungsi Encode.

function main(){
    var ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello")     // e4bda0e5a5bd
    Log(ret1)    
    var ret2 = Encode("text.decoder.utf8", "hex", "string", ret1)   
    Log(ret2)            

    var ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello")      // c4e3bac3
    Log(ret3)
    var ret4 = Encode("text.decoder.gbk", "hex", "string", ret3)
    Log(ret4)
}
def main():
    ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello", "", "")     # e4bda0e5a5bd
    Log(ret1)    
    ret2 = Encode("text.decoder.utf8", "hex", "string", ret1, "", "")   
    Log(ret2)            

    ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello", "", "")      # c4e3bac3
    Log(ret3)
    ret4 = Encode("text.decoder.gbk", "hex", "string", ret3, "", "")
    Log(ret4)
void main(){
    auto ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello");     // e4bda0e5a5bd
    Log(ret1);    
    auto ret2 = Encode("text.decoder.utf8", "hex", "string", ret1);   
    Log(ret2);            

    auto ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello");      // c4e3bac3
    Log(ret3);
    auto ret4 = Encode("text.decoder.gbk", "hex", "string", ret3);
    Log(ret4);
}

Parameteralgojuga menyokong: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk untuk mengkod dan mendekodkan rentetan.

PeraturanEncode()fungsi hanya disokong untuk perdagangan langsung.keydankeyFormatparameter tidak lulus, makakeypenyulitan tidak digunakan.

UnixNano

Dapatkan cap masa nanodetik saat ini.

PeraturanUnixNano()Fungsi mengembalikan cap masa nanodetik. nombor

UnixNano ((()

function main() {
    var time = UnixNano() / 1000000
    Log(_N(time, 0))
}
def main():
    time = UnixNano()
    Log(time)
void main() {
    auto time = UnixNano();
    Log(time);
}

Jika anda perlu mendapatkan stempel masa milidetik, anda boleh menggunakan kod berikut:

{@fun/Global/Unix Unix}

Unix

Dapatkan cap masa saat ini di peringkat kedua.

Mengembalikan cap masa peringkat kedua. nombor

Unix ((()

function main() {
    var t = Unix()
    Log(t)
}
def main():
    t = Unix()
    Log(t)
void main() {
    auto t = Unix();
    Log(t);
}

{@fun/Global/UnixNano UnixNano}

GetOS

Dapatkan maklumat sistem peranti di mana docker terletak.

Maklumat sistem. senar

GetOS()

function main() {
    Log("GetOS:", GetOS())
}
def main():
    Log("GetOS:", GetOS())
void main() {
    Log("GetOS:", GetOS());
}

Sebagai contoh, panggilan kepadaGetOS()fungsi untuk pelabuhan yang berjalan padaMac OSsistem operasi mungkin kembali:darwin/amd64Kerana komputer Apple mempunyai pelbagai seni bina perkakasan.darwinadalah namaMac OS system.

MD5

Mengira hash MD5 parameterdata.

Nilai hash MD5. senar

MD5 (data)

Data yang memerlukan pengiraan MD5. data betul senar

function main() {
    Log("MD5", MD5("hello world"))
}
def main():
    Log("MD5", MD5("hello world"))
void main() {
    Log("MD5", MD5("hello world"));
}

MenghubungiMD5("hello world")fungsi, nilai pulangan adalah:5eb63bbbe01eeed093cb22bb8f5acdc3.

{@fun/Global/Encode Encode}

DBExec

Fungsi antara muka pangkalan data.

Objek yang mengandungi hasil pelaksanaansqlpernyataan, contohnya:


{"columns":["TS","HIGH","OPEN","LOW","CLOSE","VOLUME"],"values":[[1518970320000,100,99.1,90,100,12345.6]]}

objek

DBExec ((sql)

sqlString arahan. sql betul senar

function main() {
    var strSql = [
        ":CREATE TABLE TEST_TABLE(", 
        "TS INT PRIMARY KEY NOT NULL,",
        "HIGH REAL NOT NULL,", 
        "OPEN REAL NOT NULL,", 
        "LOW REAL NOT NULL,", 
        "CLOSE REAL NOT NULL,", 
        "VOLUME REAL NOT NULL)"
    ].join("")
    var ret = DBExec(strSql)
    Log(ret)
    
    // Add a piece of data
    Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
    
    // Query data
    Log(DBExec(":SELECT * FROM TEST_TABLE;"))
}
def main():
    arr = [
        ":CREATE TABLE TEST_TABLE(", 
        "TS INT PRIMARY KEY NOT NULL,",
        "HIGH REAL NOT NULL,", 
        "OPEN REAL NOT NULL,", 
        "LOW REAL NOT NULL,", 
        "CLOSE REAL NOT NULL,", 
        "VOLUME REAL NOT NULL)"
    ]
    strSql = ""
    for i in range(len(arr)):
        strSql += arr[i]
    ret = DBExec(strSql)
    Log(ret)
    
    # Add a piece of data
    Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
    
    # Query data
    Log(DBExec(":SELECT * FROM TEST_TABLE;"))
void main() {
    string strSql = ":CREATE TABLE TEST_TABLE(\
        TS INT PRIMARY KEY NOT NULL,\
        HIGH REAL NOT NULL,\
        OPEN REAL NOT NULL,\
        LOW REAL NOT NULL,\
        CLOSE REAL NOT NULL,\
        VOLUME REAL NOT NULL)";
    auto ret = DBExec(strSql);
    Log(ret);
    
    // Add a piece of data
    Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"));
    
    // Query data
    Log(DBExec(":SELECT * FROM TEST_TABLE;"));
}

Sokongan pangkalan data dalam memori, untukDBExecparameter fungsi, jikasqlpernyataan bermula dengan:Ia sesuai untuk operasi pangkalan data yang tidak memerlukan simpanan berterusan, contohnya:

function main() {
    var strSql = [
        "CREATE TABLE TEST_TABLE(", 
        "TS INT PRIMARY KEY NOT NULL,",
        "HIGH REAL NOT NULL,", 
        "OPEN REAL NOT NULL,", 
        "LOW REAL NOT NULL,", 
        "CLOSE REAL NOT NULL,", 
        "VOLUME REAL NOT NULL)"
    ].join("")
    var ret = DBExec(strSql)
    Log(ret)
}
def main():
    arr = [
        "CREATE TABLE TEST_TABLE(", 
        "TS INT PRIMARY KEY NOT NULL,",
        "HIGH REAL NOT NULL,", 
        "OPEN REAL NOT NULL,", 
        "LOW REAL NOT NULL,", 
        "CLOSE REAL NOT NULL,", 
        "VOLUME REAL NOT NULL)"
    ]
    strSql = ""
    for i in range(len(arr)):
        strSql += arr[i]
    ret = DBExec(strSql)
    Log(ret)
void main() {
    string strSql = "CREATE TABLE TEST_TABLE(\
        TS INT PRIMARY KEY NOT NULL,\
        HIGH REAL NOT NULL,\
        OPEN REAL NOT NULL,\
        LOW REAL NOT NULL,\
        CLOSE REAL NOT NULL,\
        VOLUME REAL NOT NULL)";
    auto ret = DBExec(strSql);
    Log(ret);
}

Buat meja.

function main() {
    var strSql = [
        "CREATE TABLE TEST_TABLE(", 
        "TS INT PRIMARY KEY NOT NULL,",
        "HIGH REAL NOT NULL,", 
        "OPEN REAL NOT NULL,", 
        "LOW REAL NOT NULL,", 
        "CLOSE REAL NOT NULL,", 
        "VOLUME REAL NOT NULL)"
    ].join("")
    Log(DBExec(strSql))
    
    // Add a piece of data
    Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
    
    // Query data
    Log(DBExec("SELECT * FROM TEST_TABLE;"))
    
    // Modify data
    Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000))    
    
    // Delete data
    Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110))
}
def main():
    arr = [
        "CREATE TABLE TEST_TABLE(", 
        "TS INT PRIMARY KEY NOT NULL,",
        "HIGH REAL NOT NULL,", 
        "OPEN REAL NOT NULL,", 
        "LOW REAL NOT NULL,", 
        "CLOSE REAL NOT NULL,", 
        "VOLUME REAL NOT NULL)"
    ]
    strSql = ""
    for i in range(len(arr)):
        strSql += arr[i]
    Log(DBExec(strSql))
    
    # Add a piece of data
    Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
    
    # Query data
    Log(DBExec("SELECT * FROM TEST_TABLE;"))
    
    # Modify data
    Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000))
    
    # Delete data
    Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110))
void main() {
    string strSql = "CREATE TABLE TEST_TABLE(\
        TS INT PRIMARY KEY NOT NULL,\
        HIGH REAL NOT NULL,\
        OPEN REAL NOT NULL,\
        LOW REAL NOT NULL,\
        CLOSE REAL NOT NULL,\
        VOLUME REAL NOT NULL)";
    Log(DBExec(strSql));            

    // Add a piece of data
    Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"));
    
    // Query data
    Log(DBExec("SELECT * FROM TEST_TABLE;"));
    
    // Modify data
    Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000));
    
    // Delete data
    Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110));
}

Tambah, hapuskan, periksa dan ubah rekod dalam jadual.

FungsiDBExec()dapat mengendalikan pangkalan data perdagangan langsung (pangkalan data SQLite) dengan menyampaikan parameter.SQLiteSistem disediakan jadual dalam pangkalan data perdagangan langsung:kvdb, cfg, log, profit, chart, jangan beroperasi di atas meja ini.Transaksitidak disokong dan tidak disyorkan untuk melakukan operasi tersebut, yang boleh menyebabkan konflik dalam sistem.DBExec()Fungsi hanya disokong untuk perdagangan langsung.

{@fun/Global/_G _G}

UUID

Buat UUID.

UUID 32-bit. senar

UUID (()

function main() {
    var uuid1 = UUID()
    var uuid2 = UUID()
    Log(uuid1, uuid2)
}
def main():
    uuid1 = UUID()
    uuid2 = UUID()
    Log(uuid1, uuid2)
void main() {
    auto uuid1 = UUID();
    auto uuid2 = UUID();
    Log(uuid1, uuid2);
}

PeraturanUUID()Fungsi ini hanya menyokong perdagangan langsung.

EventLoop

Dengarkan untuk peristiwa, ia kembali apabila ada apa-apaWebSocketdata yang boleh dibaca atau tugas serentak, seperti:exchange.Go(), HttpQuery_Go(), dan lain-lain telah selesai.

Jika objek yang dikembalikan bukan nilai sifar,Eventyang terkandung dalam kandungan pulangan adalah jenis pemicu peristiwa. Sebagai contoh, struktur nilai pulangan berikut:

{"Seq":1,"Event":"Exchange_GetTrades","ThreadId":0,"Index":3,"Nano":1682068771309583400}

objek

EventLoop ((() EventLoop (timeout)

Parametertimeoutadalah tetapan masa lapang, dalam mili saat.timeoutmenanti sesuatu peristiwa berlaku sebelum kembali jika ia ditetapkan kepada 0. Jika ia lebih besar daripada 0, ia menetapkan peristiwa untuk menunggu masa lapang, dan mengembalikan peristiwa yang paling baru dengan serta-merta jika ia kurang daripada 0. masa lapang palsu nombor

function main() {
    var routine_getTicker = exchange.Go("GetTicker")
    var routine_getDepth = exchange.Go("GetDepth")
    var routine_getTrades = exchange.Go("GetTrades")
    
    // Sleep(2000), if the Sleep statement is used here, it will cause the subsequent EventLoop function to miss the previous events, because after waiting for 2 seconds, the concurrent function has received the data, and the subsequent EventLoop listening mechanism started, it misses these events.
    // These events will not be missed unless EventLoop(-1) is called at the beginning of the first line of code to first initialize the EventLoop's listening mechanism.            

    // Log("GetDepth:", routine_getDepth.wait()) If the wait function is called in advance to retrieve the result of a concurrent call to the GetDepth function, the event that the GetDepth function receives the result of the request will not be returned in the EventLoop function.
    var ts1 = new Date().getTime()
    var ret1 = EventLoop(0)
    
    var ts2 = new Date().getTime()
    var ret2 = EventLoop(0)
    
    var ts3 = new Date().getTime()
    var ret3 = EventLoop(0)
    
    Log("The first concurrent task completed was:", _D(ts1), ret1)
    Log("The second concurrent task completed was:", _D(ts2), ret2)
    Log("The third concurrent task completed was:", _D(ts3), ret3)
    
    Log("GetTicker:", routine_getTicker.wait())
    Log("GetDepth:", routine_getDepth.wait())
    Log("GetTrades:", routine_getTrades.wait())
}
import time
def main():
    routine_getTicker = exchange.Go("GetTicker")
    routine_getDepth = exchange.Go("GetDepth")
    routine_getTrades = exchange.Go("GetTrades")
    
    ts1 = time.time()
    ret1 = EventLoop(0)
    
    ts2 = time.time()
    ret2 = EventLoop(0)
    
    ts3 = time.time()
    ret3 = EventLoop(0)
    
    Log("The first concurrent task completed was:", _D(ts1), ret1)
    Log("The second concurrent task completed was:", _D(ts2), ret2)
    Log("The third concurrent task completed was:", _D(ts3), ret3)
    
    Log("GetTicker:", routine_getTicker.wait())
    Log("GetDepth:", routine_getDepth.wait())
    Log("GetTrades:", routine_getTrades.wait())
void main() {
    auto routine_getTicker = exchange.Go("GetTicker");
    auto routine_getDepth = exchange.Go("GetDepth");
    auto routine_getTrades = exchange.Go("GetTrades");
    
    auto ts1 = Unix() * 1000;
    auto ret1 = EventLoop(0);
    
    auto ts2 = Unix() * 1000;
    auto ret2 = EventLoop(0);
    
    auto ts3 = Unix() * 1000;
    auto ret3 = EventLoop(0);
    
    Log("The first concurrent task completed was:", _D(ts1), ret1);
    Log("The second concurrent task completed was:", _D(ts2), ret2);
    Log("The third concurrent task completed was:", _D(ts3), ret3);
    
    Ticker ticker;
    Depth depth;
    Trades trades;
    routine_getTicker.wait(ticker);
    routine_getDepth.wait(depth);
    routine_getTrades.wait(trades);
    
    Log("GetTicker:", ticker);
    Log("GetDepth:", depth);
    Log("GetTrades:", trades);
}

Panggilan pertama kepadaEventLoop()Fungsi dalam kod menghidupkan mekanisme untuk peristiwa yang didengar, dan jika yang pertamaEventLoop()panggilan bermula selepas callback peristiwa, ia akan terlepas peristiwa sebelumnya. sistem yang mendasari membungkus struktur antrian yang menyimpan maksimum 500 callback peristiwa.EventLoop()fungsi tidak dipanggil pada masa untuk mengambil mereka keluar semasa pelaksanaan program, kemudian panggilan balik acara di luar 500 cache akan hilang.EventLoop()fungsi tidak mempengaruhi barisan cache sistem asas WebSocket atau cache fungsi serentak sepertiexchange.Go(). Untuk cache ini, ia masih perlu menggunakan kaedah masing-masing untuk mendapatkan data.EventLoop()fungsi untuk data yang telah diambil sebelumEventLoop()fungsi kembali.EventLoop()fungsi adalah untuk memaklumkan lapisan strategi bahawa data rangkaian baru telah diterima oleh sistem yang mendasari. keseluruhan strategi didorong oleh peristiwa.EventLoop()fungsi mengembalikan peristiwa, hanya melintasi semua sumber data.exchange.Go()cuba untuk mendapatkan data.EventLoop()Fungsi ini hanya menyokong perdagangan langsung. Dengarkan peristiwa dalam benang utama apabila dipanggil dari fungsi utamamain(). Dalam strategi yang ditulis dalamJavaScriptBahasa,threading.Thread()fungsi mencipta thread, yang juga boleh dipanggil dalam fungsi pelaksanaan threads, untuk mendengar peristiwa dalam thread semasa.

{@fun/Global/Dial Dial}, {@fun/Trade/exchange.Go exchange.Go}, {@fun/Global/HttpQuery_Go HttpQuery_Go}

__ Berkhidmat

Peraturan__Servefungsi digunakan untuk membuat perkhidmatan Http, perkhidmatan TCP, dan perkhidmatan Websocket (berdasarkan protokol Http).

Mengembalikan rentetan yang merekodkan alamat IP dan pelabuhan perkhidmatan yang dicipta.127.0.0.1:8088, [::]:8089.

senar

__Serve (serveURI, pengendali) __Serve ((serveURI, pengendali,...args)

PeraturanserveURIparameter digunakan untuk mengkonfigurasi protokol, alamat IP, pelabuhan dan tetapan lain yang mengikat perkhidmatan, sepertihttp://0.0.0.0:8088?gzip=true, iaitu,http://:8088?gzip=true.

  • Protokol TCPserveURItetapan parameter, sepertitcp://127.0.0.1:6666?tls=true; anda boleh menambah sijil dan kunci peribadi, sepertitls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Protokol HTTPserveURItetapan parameter, sepertihttp://127.0.0.1:6666?gzip=true; anda boleh menetapkan tetapan mampatan:gzip=true. PeraturanserveURIparameter digunakan untuk Https, sepertihttps://127.0.0.1:6666?tls=true&gzip=true; anda boleh menambahcert_pemdancert_key_pemparameter untuk memuat sijil.

berkhidmatURI betul senar PeraturanhandlerParameter digunakan untuk lulus dalam fungsi pemprosesan laluan (protokol HTTP), fungsi pemprosesan mesej (protokol TCP), dan fungsi pemprosesan aliran (Websocket). Fungsi panggilan balik yang dihantar oleh parameterhandlerboleh menentukan beberapa parameter, parameter pertama adalah objek ctx (objek konteks).

pengendali betul fungsi Parameter sebenar fungsi callback yang dihantar sebagai parameterhandlerMungkin ada pelbagai parameter.argContohnya:

__Serve("http://:8088", function(ctx, a, b, c) {
    Log(`ctx.host():`, ctx.host(), ", a=", a, ", b=", b, ", c=", c)
}, 1, 2, 3)

Parameter1, 2, 3telah berlalu dalam apabila memanggil__Serve()fungsi sepadan dengan parametera, b, cdilewatkan dalam fungsi panggilan balik.

arg palsu rentetan, nombor, bool, objek, susunan, fungsi, nilai sifar dan jenis lain yang disokong oleh sistem

function main() {
    let httpServer = __Serve("http://:8088?gzip=true", function (ctx) {
        Log("http connect from: ", ctx.remoteAddr(), "->", ctx.localAddr())
        let path = ctx.path()
        if (path == "/") {
            ctx.write(JSON.stringify({
                path: ctx.path(),
                method: ctx.method(),
                headers: ctx.headers(),
                cookie: ctx.header("Cookie"),
                remote: ctx.remoteAddr(),
                query: ctx.rawQuery()
            }))
        } else if (path == "/tickers") {
            let ret = exchange.GetTickers()
            if (!ret) {
                ctx.setStatus(500)
                ctx.write(GetLastError())
            } else {
                ctx.write(JSON.stringify(ret))
            }
        } else if (path == "/wss") {
            if (ctx.upgrade("websocket")) { // upgrade to websocket
                while (true) {
                    let r = ctx.read(10)
                    if (r == "") {
                        break
                    } else if (r) {
                        if (r == "ticker") {
                            ctx.write(JSON.stringify(exchange.GetTicker()))
                        } else {
                            ctx.write("not support")
                        }
                    }
                }
                Log("websocket closed", ctx.remoteAddr())
            }
        } else {
            ctx.setStatus(404)
        }
    })
    let echoServer = __Serve("tcp://:8089", function (ctx) {
        Log("tcp connect from: ", ctx.remoteAddr(), "->", ctx.localAddr())
        while (true) {
            let d = ctx.read()
            if (!d) {
                break
            }
            ctx.write(d)
        }
        Log("connect closed")
    })
    Log("http serve on", httpServer, "tcp serve on", echoServer)
    
    for (var i = 0; i < 5; i++) {
        if (i == 2) {
            // test Http
            var retHttp = HttpQuery("http://127.0.0.1:8088?num=123&limit=100", {"debug": true})
            Log("retHttp:", retHttp)
        } else if (i == 3) {
            // test TCP
            var tcpConn = Dial("tcp://127.0.0.1:8089")
            tcpConn.write("Hello TCP Server")
            var retTCP = tcpConn.read()
            Log("retTCP:", retTCP)
        } else if (i == 4) {
            // test Websocket
            var wsConn = Dial("ws://127.0.0.1:8088/wss|compress=gzip")
            wsConn.write("ticker")
            var retWS = wsConn.read(1000)
            Log("retWS:", retWS)
            // no depth
            wsConn.write("depth")
            retWS = wsConn.read(1000)
            Log("retWS:", retWS)
        }
        Sleep(1000)
    }
}
# Unsupported
// Unsupported
  • Fungsi ini menyokong strategi bahasa JavaScript sahaja.
  • Benang perkhidmatan terpencil dari skop global, jadi ia tidak menyokong penutupan atau rujukan kepada pembolehubah luaran, fungsi tersuai, dan lain-lain; Walau bagaimanapun, ia boleh memanggil semua fungsi API platform.
  • PeraturanWebsocketPerkhidmatan ini dilaksanakan berdasarkan protokol Http. Anda boleh menetapkan cawangan penghala dalam laluan dan merancang kod pelaksanaan untukWebsocketAnda boleh merujuk kepada contoh kod di bahagian ini.

Fungsi callback yang dihantar oleh parameterhandlermenerimactxparameter.ctxparameter adalah objek konteks yang digunakan untuk mendapatkan dan menulis data, dengan kaedah berikut:

  • ctx.proto (() Digunakan untuk protokol Http/TCP, mengembalikan nama protokol apabila dipanggil.HTTP/1.1, tcp.
  • ctx.host() Digunakan untuk protokol Http, ia mengembalikan maklumat hos apabila dipanggil alamat IP dan port.
  • ctx.path ((() Digunakan pada protokol Http, mengembalikan laluan permintaan apabila dipanggil.
  • ctx.query (kunci) Digunakan untuk protokol Http, mengembalikan nilai yang sepadan dengan kunci dalam pertanyaan dalam permintaan apabila dipanggil.http://127.0.0.1:8088?num=123, dan fungsi pemprosesan panggilan balik yang dihantar oleh parameterhandlerpengembalian"123"bila?ctx.query("num")dipanggil.
  • ctx.rawQuery() Digunakan untuk protokol Http, apabila dipanggil, mengembalikan pertanyaan asal dalam permintaan (soalan permintaan Http).
  • ctx.headers ((() Digunakan untuk protokol HTTP, dan mengembalikan maklumat tajuk permintaan dalam permintaan apabila dipanggil.
  • Ctx.header (kunci) Digunakan untuk protokol Http, ia mengembalikan nilai kunci dalam tajuk permintaan yang ditentukan apabila dipanggil.User-AgentDalam tajuk permintaan semasa:ctx.header("User-Agent").
  • ctx.metod ()) Digunakan untuk protokol Http, mengembalikan kaedah permintaan apabila dipanggil, sepertiGET, POST, dan lain-lain
  • ctx.body ((() Digunakan untuk permintaan POST protokol HTTP, dan mengembalikan badan permintaan apabila dipanggil.
  • ctx.setHeader (kunci, nilai) Digunakan untuk protokol HTTP untuk menetapkan maklumat tajuk permintaan mesej tindak balas.
  • ctx.setStatus (kode) digunakan untuk protokol Http, menetapkan kod status mesej Http. Biasanya, kod status Http ditetapkan di akhir cawangan penghalaan. Nilai lalai adalah 200.
  • ctx.remoteAddr() Digunakan untuk protokol Http / TCP, mengembalikan alamat klien jauh dan port dalam permintaan apabila dipanggil.
  • ctx.localAddr() Digunakan untuk protokol HTTP / TCP, mengembalikan alamat tempatan dan pelabuhan perkhidmatan apabila dipanggil.
  • ctx.upgrade ((websocket) Digunakan untuk pelaksanaan protokol Websocket berdasarkan protokol Http, menukarctxobjek konteks kepada protokol Websocket; mengembalikan nilai Boolean (benar) jika suis berjaya, dan nilai Boolean (salah) jika gagal.
  • ctx.read ((timeout_ms) Digunakan untuk pelaksanaan protokol Websocket / protokol TCP berdasarkan protokol Http, membaca data sambungan Websocket dan sambungan TCP.readanda boleh menentukan parameter timeouttimeout_msdalam milidetik.
  • ctx.write (s) Digunakan untuk protokol HTTP/TCP, digunakan untuk menulis data rentetan.JSON.stringify()untuk mengkod objek JSON ke dalam rentetan dan kemudian menulisnya.WebSocketProtokol, anda boleh menggunakan kaedah ini untuk lulus rentetan dikodkan kepada pelanggan.

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}

_G

Secara berterusan menyimpan data, fungsi ini melaksanakan fungsi kamus global yang boleh disimpan. Struktur data adalah jadual KV yang disimpan secara kekal dalam fail pangkalan data tempatan docker.

Data nilai kunci yang disimpan secara berterusan dalamk-vpasangan kunci-nilai. rentetan, nombor, bool, objek, array, nilai sifar

_G() _G(k) _G(k, v)

Parameterkadalah nama kunci dalam pasangan kunci-nilai yang disimpan, dan tidak sensitif huruf besar. k palsu rentetan, nilai sifar Parametervadalah nilai kunci dalam pasangan kunci-nilai yang disimpan, yang boleh menjadi sebarang data yang bolehJSONDikirim secara seriali. v palsu rentetan, nombor, bool, objek, array, nilai sifar

function main(){
    // Set a global variable num with a value of 1
    _G("num", 1)     
    // Change a global variable num to the value of the string ok
    _G("num", "ok")    
    // Delete the global variable num
    _G("num", null)
    // Returns the value of the global variable num
    Log(_G("num"))
    // Delete all global variables
    _G(null)
    // Return to live trading ID
    var robotId = _G()
}
def main():
    _G("num", 1)     
    _G("num", "ok")    
    _G("num", None)
    Log(_G("num"))
    _G(None)
    robotId = _G()
void main() {
    _G("num", 1);
    _G("num", "ok");
    _G("num", NULL);
    Log(_G("num"));
    _G(NULL);
    // Not support auto robotId = _G();
}

Sebuah pangkalan data yang berasingan untuk setiap dagangan langsung, data yang disimpan oleh_G()fungsi akan sentiasa ada jika strategi dimulakan semula atau docker berhenti berjalan. Jika backtesting selesai, data yang disimpan dalam sistem backtesting oleh_G()Apabila menggunakan_G()fungsi untuk mengekalkan data yang disimpan, ia harus digunakan dengan munasabah mengikut memori dan ruang cakera keras peranti perkakasan, dan tidak boleh disalahgunakan. Apabila memanggil_G()fungsi dalam perdagangan langsung dan tiada parameter yang lulus,_G()fungsi mengembalikanIdPerdagangan langsung semasa._G()fungsi, parametervdilewatkan sebagai null untuk menunjukkan penghapusank-vApabila memanggil_G()fungsi, hanya parameterkadalah diluluskan dalam rentetan, dan_G()fungsi mengembalikan nilai kunci yang sepadan dengan parameter yang disimpank. Apabila memanggil_G()fungsi, hanya parameterkadalah dihantar dalam nilai sifar, menunjukkan bahawa semua rekodk-vPasangan kunci-nilai dipadamkan.k-vpasangan kunci-nilai telah disimpan berterusan,_G()fungsi dipanggil lagi, lulus dalam nama kunci yang telah disimpan secara berterusan sebagai parameterk. Menerbitkan nilai kunci baru sebagai parametervakan mengemas kini bahawak-vPasangan kunci-nilai.

{@fun/Global/DBExec DBExec}

_D

Mengubah timestamp milidetik atauDateobjek untuk senar masa.

String masa. senar

_D() _ D (timestamp) _D ((timestamp, fmt)

Stempel masa milidetik atauDateobjek. Stempel masa palsu Nombor, objek Format rentetan,JavaScriptFormat lalai bahasa:yyyy-MM-dd hh:mm:ss; PythonFormat lalai bahasa:%Y-%m-%d %H:%M:%S; C++Format lalai bahasa:%Y-%m-%d %H:%M:%S. fmt palsu senar

function main(){
    var time = _D()
    Log(time)
}
def main():
    strTime = _D()
    Log(strTime)
void main() {
    auto strTime = _D();
    Log(strTime);
}

Dapatkan dan cetak rentetan masa semasa:

function main() {
    Log(_D(1574993606000))
}
def main():
    # Running this code on a server in Beijing time: 2019-11-29 10:13:26 , a docker on another server in another region results in: 2019-11-29 02:13:26
    Log(_D(1574993606))
void main() {
    Log(_D(1574993606000));
}

Stempel masa adalah 1574993606000, menggunakan penukaran kod:

function main() {
    Log(_D(1574993606000, "yyyy--MM--dd hh--mm--ss"))   // 2019--11--29 10--13--26
}
def main():
    # 1574993606 is timestamped in seconds.
    Log(_D(1574993606, "%Y--%m--%d %H--%M--%S"))        #  2019--11--29 10--13--26
void main() {
    Log(_D(1574993606000, "%Y--%m--%d %H--%M--%S"));    // 2019--11--29 10--13--26
}

Format dengan parameterfmtadalah berbeza untukJavaScript, Python, danC++bahasa, seperti yang ditunjukkan dalam contoh berikut:

Mengembalikan rentetan masa semasa tanpa lulus mana-mana parameter._D()fungsi dalamPythonstrategi, anda perlu sedar bahawa parameter yang diteruskan adalah timestamps peringkat kedua (timestamps tahap milidetik dalam strategi JavaScript dan C ++, di mana 1 saat sama dengan 1000 milidetik)._D()fungsi untuk menganalisis rentetan masa dengan cap masa yang boleh dibaca dalam perdagangan langsung, anda perlu memberi perhatian kepada zon waktu dan tetapan masa sistem operasi di mana program docker terletak._D()fungsi menganalisis stempel masa ke dalam rentetan masa yang boleh dibaca bergantung pada masa sistem dockers.

{@fun/Global/UnixNano UnixNano}, {@fun/Global/Unix Unix}

_N

Formatkan nombor koma terapung.

Nombor koma terapung yang diformat mengikut tetapan ketepatan. nombor

_N() _ N (n) _N (num, ketepatan)

Nombor koma terapung yang perlu diformat. nombor betul nombor Tetapan ketepatan untuk pemformatan, parameterprecisionadalah bilangan bulat, dan parameterprecisionlalai kepada 4. ketepatan palsu nombor

function main(){
    var i = 3.1415
    Log(i)
    var ii = _N(i, 2)
    Log(ii)
}
def main():
    i = 3.1415
    Log(i)
    ii = _N(i, 2)
    Log(ii)
void main() {
    auto i = 3.1415;
    Log(i);
    auto ii = _N(i, 2);
    Log(ii);
}

Sebagai contoh,_N(3.1415, 2)akan memadamkan nilai selepas3.1415dua tempat perpuluhan dan fungsi kembali3.14.

function main(){
    var i = 1300
    Log(i)
    var ii = _N(i, -3)
    // Check the logs and see that it is 1000
    Log(ii)
}
def main():
    i = 1300
    Log(i)
    ii = _N(i, -3)
    Log(ii)
void main() {
    auto i = 1300;
    Log(i);
    auto ii = _N(i, -3);
    Log(ii);
}

Jika anda perlu menukar semua N digit di sebelah kiri titik perpuluhan kepada 0, anda boleh menulisnya seperti ini:

Parameterprecisionboleh menjadi bilangan bulat positif, bilangan bulat negatif.

{@fun/Trade/exchange.SetPrecision exchange.SetPrecision}

_C

Cuba semula fungsi untuk toleransi ralat antara muka.

Nilai pulangan fungsi panggilan balik apabila dilaksanakan. Semua jenis disokong oleh sistem kecualinilai logik palsudannilai null.

_C (((pfn) _C ((pfn,...args)

Parameterpfnadalah rujukan fungsi, yang merupakanFungsi callback. pfn betul fungsi Parameter kepadaFungsi panggilan balik, mungkin terdapat lebih daripada satu parameterarg. Jenis dan bilangan parameterargbergantung kepada parameterFungsi callback. arg palsu string, nombor, bool, objek, susunan, fungsi, semua jenis disokong oleh sistem, seperti nilai sifar

function main(){
    var ticker = _C(exchange.GetTicker)
    // Adjust _C() function retry interval to 2 seconds
    _CDelay(2000)
    var depth = _C(exchange.GetDepth)
    Log(ticker)
    Log(depth)
}
def main():
    ticker = _C(exchange.GetTicker)
    _CDelay(2000)
    depth = _C(exchange.GetDepth)
    Log(ticker)
    Log(depth)
void main() {
    auto ticker = _C(exchange.GetTicker);
    _CDelay(2000);
    auto depth = _C(exchange.GetDepth);
    Log(ticker);
    Log(depth);
}

Untuk fungsi toleransi ralat tanpa parameter:

function main(){
    var records = _C(exchange.GetRecords, PERIOD_D1)
    Log(records)
}
def main():
    records = _C(exchange.GetRecords, PERIOD_D1)
    Log(records)
void main() {
    auto records = _C(exchange.GetRecords, PERIOD_D1);
    Log(records);
}

Untuk fungsi dengan parameter yang toleransi ralat:

var test = function(a, b){
    var time = new Date().getTime() / 1000
    if(time % b == 3){
        Log("Eligible!", "#FF0000")
        return true
    }
    Log("Retry!", "#FF0000")
    return false
}            

function main(){
    var ret = _C(test, 1, 5)
    Log(ret)
}
import time
def test(a, b):
    ts = time.time()
    if ts % b == 3:
        Log("Eligible!", "#FF0000")
        return True
    Log("Retry!", "#FF0000")
    return False            

def main():
    ret = _C(test, 1, 5)
    Log(ret)
// C++ does not support fault tolerance for custom functions in this way

Ia juga boleh digunakan untuk toleransi ralat fungsi tersuai:

Peraturan_C()fungsi akan terus memanggil fungsi yang ditentukan sehingga ia kembali dengan berjaya (fungsi dirujuk oleh parameterpfnpengembaliantiadaataupalsuApabila dipanggil akan cuba memanggil semulapfnSebagai contoh:_C(exchange.GetTicker). Jangkaan cubaan semula lalai adalah 3 saat, anda boleh memanggil_CDelay()fungsi untuk menetapkan selang cubaan semula._CDelay(1000)bermaksud untuk mengubah selang percubaan semula_C()fungsi ke 1 saat. Toleransi ralat boleh dilakukan untuk, tetapi tidak terhad kepada, fungsi berikut:

  • exchange.GetTicker()
  • exchange.GetDepth()
  • exchange.GetTrades()
  • exchange.GetRecords()
  • exchange.GetAccount()
  • exchange.GetOrders()
  • exchange.GetOrder()
  • exchange.GetPositions()Semua boleh dipanggil oleh_C()fungsi untuk toleransi ralat._C()fungsi tidak terhad kepada toleransi kesalahan fungsi yang disenaraikan di atas, parameterpfnadalah rujukan fungsi dan bukannya panggilan fungsi. Perhatikan bahawa ia adalah_C(exchange.GetTicker), tidak_C(exchange.GetTicker()).

_Silang

Mengembalikan bilangan tempoh persimpangan arrayarr1dan susunanarr2.

Bilangan tempoh silang arrayarr1dan susunanarr2. nombor

_Silang ((arr1, arr2)

Elemen adalah pelbagai jenisnumber. arr1 betul Array Elemen adalah pelbagai jenisnumber. arr2 betul Array

// Fast line indicator
var arr1 = [1,2,3,4,5,6,8,8,9]
// Slow line indicator
var arr2 = [2,3,4,5,6,7,7,7,7]
function main(){
    Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2))
    Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1))
}
arr1 = [1,2,3,4,5,6,8,8,9]     
arr2 = [2,3,4,5,6,7,7,7,7]
def main():
    Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2))
    Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1))
void main() {
    vector<double> arr1 = {1,2,3,4,5,6,8,8,9};
    vector<double> arr2 = {2,3,4,5,6,7,7,7,7};
    Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2));
    Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1));
}

Satu set data boleh disimulasikan untuk menguji fungsi _Cross ((Arr1, Arr2):

Jika nilai pulangan_Cross()fungsi adalah nombor positif, ia menunjukkan tempoh penembusan ke atas, jika ia adalah nombor negatif, ia menunjukkan tempoh penembusan ke bawah, 0 bermaksud sama dengan harga semasa.Analisis dan arahan penggunaan mengenai fungsi terbina dalam _Cross.

JSONParse

FungsiJSONParse()digunakan untuk menganalisisJSON strings.

JSONobjek. objek

JSONParse (s)

JSONtali. s betul senar

function main() {
    let s1 = '{"num": 8754613216564987646512354656874651651358}'
    Log("JSON.parse:", JSON.parse(s1))    // JSON.parse: {"num":8.754613216564988e+39}
    Log("JSONParse:", JSONParse(s1))      // JSONParse:  {"num":"8754613216564987646512354656874651651358"}
    
    let s2 = '{"num": 123}'
    Log("JSON.parse:", JSON.parse(s2))    // JSON.parse: {"num":123}
    Log("JSONParse:", JSONParse(s2))      // JSONParse:  {"num":123}
}
import json

def main():
    s1 = '{"num": 8754613216564987646512354656874651651358}'
    Log("json.loads:", json.loads(s1))    # json.loads: map[num:8.754613216564987e+39]
    Log("JSONParse:", JSONParse(s1))      # JSONParse:  map[num:8754613216564987646512354656874651651358]
    
    s2 = '{"num": 123}'
    Log("json.loads:", json.loads(s2))    # json.loads: map[num:123]
    Log("JSONParse:", JSONParse(s2))      # JSONParse:  map[num:123]
void main() {
    auto s1 = "{\"num\":8754613216564987646512354656874651651358}";
    Log("json::parse:", json::parse(s1));
    // Log("JSONParse:", JSONParse(s1));   // The function is not supported.
    
    auto s2 = "{\"num\":123}";
    Log("json::parse:", json::parse(s2));
    // Log("JSONParse:", JSONParse(s2));   // The function is not supported.
}

JSON rentetan dengan nilai besar boleh dianalisis dengan betul, dan ia akan dianalisis nilai besar sebagai jenis rentetan.JSONParse()fungsi tidak disokong dalam sistem backtest.

Log

Log

Log output.

Log ((...msgs)

Parametermsgadalah kandungan output, dan parametermsgboleh lulus lebih daripada satu. msg palsu string, nombor, bool, objek, array, mana-mana jenis yang disokong oleh sistem seperti null.

function main() {
    Log("msg1", "msg2", "msg3")
}
def main():
    Log("msg1", "msg2", "msg3")
void main() {
    Log("msg1", "msg2", "msg3");
}

Pelbagaimsgparameter boleh lulus:

function main() {
    Log("Hello, FMZ Quant!@")
    Sleep(1000 * 5)
    // Add #ff0000 to the string to print the log in red and push the message
    Log("Hello, #ff0000@")
}
def main():
    Log("Hello, FMZ Quant!@")
    Sleep(1000 * 5)
    Log("Hello, #ff0000@")
void main() {
    Log("Hello, FMZ Quant!@");
    Sleep(1000 * 5);
    Log("Hello, #ff0000@");
}

Ia menyokong menetapkan warna output mesej, jika kita menggunakan warna dan tekan pada masa yang sama, kita perlu menetapkan warna pertama dan menggunakan@Karakter untuk menetapkan dorongan terakhir.

function main() {
    Log("`data:image/png;base64,AAAA`")
}
def main():
    Log("`data:image/png;base64,AAAA`")
void main() {
    Log("`data:image/png;base64,AAAA`");
}

PeraturanLog()fungsi menyokong percetakanbase64imej berkod, bermula dengan`dan berakhir dengan`Contohnya:

import matplotlib.pyplot as plt 
def main(): 
    plt.plot([3,6,2,4,7,1]) 
    Log(plt)

PeraturanLog()fungsi menyokong percetakan langsungPython...matplotlib.pyplotobjek. Selagi objek mengandungisavefigkaedah, ia boleh dicetak secara langsung menggunakanLogfungsi, contohnya:

function main() {
    Log("[trans]中文|abc[/trans]")
}
def main():
    Log("[trans]中文|abc[/trans]")
void main() {
    Log("[trans]中文|abc[/trans]");
}

PeraturanLog()fungsi menyokong pertukaran bahasa.Log()fungsi output teks yang akan beralih ke bahasa yang sepadan secara automatik berdasarkan tetapan bahasa pada halaman platform, contohnya:

PeraturanLog()fungsi output mesej log di kawasan log perdagangan langsung atau sistem backtesting, dan log disimpan dalam pangkalan data perdagangan langsung apabila perdagangan langsung berjalan.Log()fungsi output mesej log yang berakhir dengan@Push ke alamat e-mel, alamat WebHook, dan lain-lain yang dikonfigurasikan dalamTekan TetapanPushing mesej tidak disokong olehAlat PenyempurnaanTerdapat had kekerapan untuk push mesej. Peraturan sekatan khusus adalah seperti berikut: dalam kitaran 20 saat perdagangan langsung, hanya mesej push terakhir yang akan dikekalkan dan ditekan, dan mesej lain akan disaring dan tidak ditekan (keluaran log push oleh fungsi Log akan dicetak dan dipaparkan secara normal di kawasan log). UntukWebHookpush, anda boleh menggunakan program perkhidmatan yang ditulis olehGolang:

package main
import (
    "fmt"
    "net/http"
)            

func Handle (w http.ResponseWriter, r *http.Request) {
    defer func() {
        fmt.Println("req:", *r)
    }()
}            

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

SetWebHookdalamTekan Tetapan: http://XXX.XX.XXX.XX:9090/data?data=Hello_FMZ. Selepas menjalankan yang ditulisGolangprogram perkhidmatan, kita mula menjalankan strategi perdagangan hidup, berikut adalah strategi yang ditulis dalamJavaScriptbahasa, strategi ini dijalankan dengan melaksanakanLog()fungsi dan menolak mesej:

function main() {
    Log("msg", "@")
}

Program perkhidmatan yang ditulis dalamGolangbahasa menerima dorongan dan program perkhidmatan mencetak mesej:

listen http://localhost:9090
req: {GET /data?data=Hello_FMZ HTTP/1.1 1 1 map[User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xx.x.xxxx.xxx Safari/537.36] Accept-Encoding:[gzip]] {} <nil> 0 [] false 1XX.XX.X.XX:9090 map[] map[] <nil> map[] XXX.XX.XXX.XX:4xxx2 /data?data=Hello_FMZ <nil> <nil> <nil> 0xc420056300

{@fun/Log/LogReset LogReset}, {@fun/Log/LogVacuum LogVacuum}

LogProfit

Mencatatkan nilai P&L, cetak nilai P&L dan merangka kurva pulangan berdasarkan nilai P&L.

LogProfit (keuntungan) LogProfit ((laba,... args)

Parameterprofitadalah data pendapatan, yang diberikan oleh algoritma reka bentuk dan pengiraan dalam strategi. keuntungan betul nombor Parameter yang diperluaskan untuk mengeluarkan maklumat kebetulan ke log pendapatan,argparameter boleh lulus lebih daripada satu. arg palsu string, nombor, bool, objek, array, mana-mana jenis yang disokong oleh sistem seperti null.

function main() {
    // Print 30 points on the earnings chart
    for(var i = 0; i < 30; i++) {
        LogProfit(i, '&')
        Sleep(500)
    }
}
def main():
    for i in range(30):
        LogProfit(i, '&')
        Sleep(500)
void main() {
    for(int i = 0; i < 30; i++) {
        LogProfit(i, '&');
        Sleep(500);
    }
}

PeraturanLogProfitfungsi, jika ia berakhir dengan watak&, hanya membuat carta pendapatan dan tidak mencetak log pendapatan.

{@fun/Log/LogProfitReset LogProfitReset}

LogProfitReset

Hapuskan semua log pendapatan, carta pendapatan.

LogProfitReset (() LogProfitReset (bertahan)

PeraturanremainParameter digunakan untuk menentukan bilangan entri log (nilai bilangan bulat) untuk disimpan. kekal palsu nombor

function main() {
    // Print 30 points on the revenue chart, then reset and keep only the last 10 points
    for(var i = 0; i < 30; i++) {
        LogProfit(i)
        Sleep(500)
    }
    LogProfitReset(10)
}
def main():
    for i in range(30):
        LogProfit(i)
        Sleep(500)
    LogProfitReset(10)
void main() {
    for(int i = 0; i < 30; i++) {
        LogProfit(i);
        Sleep(500);
    }
    LogProfitReset(10);
}

{@fun/Log/LogProfit LogProfit}

LogStatus

Maklumat output dalam bar status sistem backtesting atau halaman perdagangan langsung.

LogStatus ((...msgs)

Parametermsgadalah kandungan output, dan parametermsgboleh lulus lebih daripada satu. msg palsu string, nombor, bool, objek, array, mana-mana jenis yang disokong oleh sistem seperti null.

function main() {
    LogStatus('This is a general status alert')
    LogStatus('This is a status alert in red font #ff0000')
    LogStatus('This is a multi-line status message \n I am the second line')
}
def main():
    LogStatus('This is a general status alert')
    LogStatus('This is a status alert in red font #ff0000')
    LogStatus('This is a multi-line status message \n I am the second line')
void main() {
    LogStatus("This is a general status alert");
    LogStatus("This is a status alert in red font #ff0000");
    LogStatus("This is a multi-line status message \n I am the second line");
}

Ia menyokong menetapkan warna kandungan output:

function main() {
    var table = {type: 'table', title: 'Position information', cols: ['Column 1', 'Column 2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
    // JSON serialization with the ` character on both sides, as a complex message format (support tables currently)
    LogStatus('`' + JSON.stringify(table) + '`')                    
    // Table information can also appear in multiple rows
    LogStatus('First line of message\n`' + JSON.stringify(table) + '`\n third line of message')
    // It supports multiple tables at the same time, will be displayed in a group with TAB
    LogStatus('`' + JSON.stringify([table, table]) + '`')
    
    // You can also construct a button in the form, and use the GetCommand strategy to receive the contents of the cmd attribute                                
    var table = { 
        type: 'table', 
        title: 'Position operations', 
        cols: ['Column 1', 'Column 2', 'Action'], 
        rows: [ 
            ['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'Close out positions'}]
        ]
    }
    LogStatus('`' + JSON.stringify(table) + '`') 
    // Or construct a separate button
    LogStatus('`' + JSON.stringify({'type':'button', 'cmd': 'coverAll', 'name': 'Close out positions'}) + '`') 
    // Customizable button style (bootstrap's button attribute)
    LogStatus('`' + JSON.stringify({'type':'button', 'class': 'btn btn-xs btn-danger', 'cmd': 'coverAll', 'name': 'Close out positions'}) + '`')
}
import json
def main():
    table = {"type": "table", "title": "Position information", "cols": ["Column 1", "Column 2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]}
    LogStatus('`' + json.dumps(table) + '`')
    LogStatus('First line of message\n`' + json.dumps(table) + '`\n third line of message')
    LogStatus('`' + json.dumps([table, table]) + '`')            

    table = {
        "type" : "table", 
        "title" : "Position operations", 
        "cols" : ["Column 1", "Column 2", "Action"], 
        "rows" : [
            ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "Close out positions"}]
        ] 
    }
    LogStatus('`' + json.dumps(table) + '`')
    LogStatus('`' + json.dumps({"type": "button", "cmd": "coverAll", "name": "Close out positions"}) + '`')
    LogStatus('`' + json.dumps({"type": "button", "class": "btn btn-xs btn-danger", "cmd": "coverAll", "name": "Close out positions"}) + '`')
void main() {
    json table = R"({"type": "table", "title": "Position information", "cols": ["Column 1", "Column 2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
    LogStatus("`" + table.dump() + "`");
    LogStatus("First line of message\n`" + table.dump() + "`\n third line of message");
    json arr = R"([])"_json;
    arr.push_back(table);
    arr.push_back(table);
    LogStatus("`" + arr.dump() + "`");            

    table = R"({
        "type" : "table", 
        "title" : "Position operations", 
        "cols" : ["Column 1", "Column 2", "Action"], 
        "rows" : [
            ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "Close out positions"}]
        ] 
    })"_json;
    LogStatus("`" + table.dump() + "`");
    LogStatus("`" + R"({"type": "button", "cmd": "coverAll", "name": "Close out positions"})"_json.dump() + "`");
    LogStatus("`" + R"({"type": "button", "class": "btn btn-xs btn-danger", "cmd": "coverAll", "name": "Close out positions"})"_json.dump() + "`");
}

Contoh output data dalam bar status:

function main() {
    var table = {
        type: "table",
        title: "status bar button style",
        cols: ["default", "original", "success", "info", "warning", "danger"], 
        rows: [
            [
                {"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
                {"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
                {"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
                {"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
                {"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
                {"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
            ]
        ]
    }
    LogStatus("`" + JSON.stringify(table) + "`")
}
import json
def main():
    table = {
        "type": "table",
        "title": "status bar button style",
        "cols": ["default", "original", "success", "info", "warning", "danger"], 
        "rows": [
            [
                {"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
                {"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
                {"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
                {"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
                {"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
                {"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
            ]
        ]
    }
    LogStatus("`" + json.dumps(table) + "`")
void main() {
    json table = R"({
        "type": "table",
        "title": "status bar button style",
        "cols": ["default", "original", "success", "info", "warning", "danger"], 
        "rows": [
            [
                {"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
                {"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
                {"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
                {"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
                {"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
                {"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
            ]
        ]
    })"_json;
    LogStatus("`" + table.dump() + "`");
}

Ia menyokong untuk merancang kawalan butang dalam bar status (struktur butang lama):

function main() {
    var table = {
        type: "table",
        title: "Status bar button disable, description function test",
        cols: ["Column 1", "Column 2", "Column 3"], 
        rows: []
    }
    var button1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"}
    var button2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": true}
    var button3 = {"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": false}
    table.rows.push([button1, button2, button3])
    LogStatus("`" + JSON.stringify(table) + "`")
}
import json
def main():
    table = {
        "type": "table",
        "title": "Status bar button disable, description function test",
        "cols": ["Column 1", "Column 2", "Column 3"], 
        "rows": []
    }
    button1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"}
    button2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": True}
    button3 = {"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": False}
    table["rows"].append([button1, button2, button3])
    LogStatus("`" + json.dumps(table) + "`")
void main() {
    json table = R"({
        "type": "table",
        "title": "Status bar button disable, description function test",
        "cols": ["Column 1", "Column 2", "Column 3"], 
        "rows": []
    })"_json;
    json button1 = R"({"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"})"_json;
    json button2 = R"({"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": true})"_json;
    json button3 = R"({"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": false})"_json;
    json arr = R"([])"_json;
    arr.push_back(button1);
    arr.push_back(button2);
    arr.push_back(button3);
    table["rows"].push_back(arr);
    LogStatus("`" + table.dump() + "`");
}

Tetapkan tidak aktif, fungsi penerangan butang bar status (struktur butang lama):

function test1() {
    Log("Calling custom functions")
}            

function main() {
    while (true) {
        var table = {
            type: 'table',
            title: 'operation',
            cols: ['column1', 'column2', 'Action'],
            rows: [
                ['a', '1', {
                    'type': 'button',                       
                    'cmd': "CoverAll",                      
                    'name': 'Close out positions'                           
                }],
                ['b', '1', {
                    'type': 'button',
                    'cmd': 10,                              
                    'name': 'Send values'
                }],
                ['c', '1', {
                    'type': 'button',
                    'cmd': _D(),                          
                    'name': 'Calling functions'
                }],
                ['d', '1', {
                    'type': 'button',
                    'cmd': 'test1',       
                    'name': 'Calling custom functions'
                }]
            ]
        }
        LogStatus(_D(), "\n", '`' + JSON.stringify(table) + '`')            

        var str_cmd = GetCommand()
        if (str_cmd) {
            Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd)
            if(str_cmd == "test1") {
                test1()
            }
        }            

        Sleep(500)
    }
}
import json
def test1():
    Log("Calling custom functions")            

def main():
    while True:
        table = {
            "type": "table", 
            "title": "operation", 
            "cols": ["column1", "column2", "Action"],
            "rows": [
                ["a", "1", {
                    "type": "button", 
                    "cmd": "CoverAll",
                    "name": "Close out positions"
                }],
                ["b", "1", {
                    "type": "button",
                    "cmd": 10,
                    "name": "Send values" 
                }], 
                ["c", "1", {
                    "type": "button",
                    "cmd": _D(),
                    "name": "Calling functions" 
                }],
                ["d", "1", {
                    "type": "button",
                    "cmd": "test1",
                    "name": "Calling custom functions" 
                }]
            ]
        }            

        LogStatus(_D(), "\n", "`" + json.dumps(table) + "`")
        str_cmd = GetCommand()
        if str_cmd:
            Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd)
            if str_cmd == "test1":
                test1()
        Sleep(500)
void test1() {
    Log("Calling custom functions");
}            

void main() {
    while(true) {
        json table = R"({
            "type": "table", 
            "title": "operation", 
            "cols": ["column1", "column2", "Action"],
            "rows": [
                ["a", "1", {
                    "type": "button", 
                    "cmd": "CoverAll",
                    "name": "Close out positions"
                }],
                ["b", "1", {
                    "type": "button",
                    "cmd": 10,
                    "name": "Send values" 
                }], 
                ["c", "1", {
                    "type": "button",
                    "cmd": "",
                    "name": "Calling functions" 
                }],
                ["d", "1", {
                    "type": "button",
                    "cmd": "test1",
                    "name": "Calling custom functions" 
                }]
            ]
        })"_json;
        table["rows"][2][2]["cmd"] = _D();
        LogStatus(_D(), "\n", "`" + table.dump() + "`");
        auto str_cmd = GetCommand();
        if(str_cmd != "") {
            Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd);
            if(str_cmd == "test1") {
                test1();
            }
        }
        Sleep(500);
    }
}

Dalam kombinasi denganGetCommand()fungsi, membina fungsi interaksi butang bar status (struktur butang lama):

function main() {
    var tbl = {
        type: "table",
        title: "operation",
        cols: ["column1", "column2"],
        rows: [
            ["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
            ["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
        ] 
    }            

    LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
    while (true) {
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd:", cmd)
        }
        Sleep(1000)
    }
}
import json            

def main():
    tbl = {
        "type": "table", 
        "title": "operation", 
        "cols": ["column1", "column2"],
        "rows": [
            ["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
            ["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
        ]
    }            

    LogStatus(_D(), "\n", "`" + json.dumps(tbl) + "`")
    while True:
        cmd = GetCommand()
        if cmd:
            Log("cmd:", cmd)
        Sleep(1000)
void main() {
    json tbl = R"({
        "type": "table", 
        "title": "operation", 
        "cols": ["column1", "column2"],
        "rows": [
            ["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
            ["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
        ]
    })"_json;            

    LogStatus(_D(), "\n", "`" + tbl.dump() + "`");
    while(true) {
        auto cmd = GetCommand();
        if(cmd != "") {
            Log("cmd:", cmd);
        }
        Sleep(1000);
    }
}

Data input juga disokong apabila membina butang bar status untuk interaksi, dan arahan interaksi ditangkap olehGetCommand()fungsi akhirnya. Tambahinputitem (struktur butang lama) kepada struktur data kawalan butang dalam bar status, sebagai contoh, menambah"input": {"name": "number of open positions", "type": "number", "defValue": 1}kepada{"type": "button", "cmd": "open", "name": "open position"}akan menyebabkan popup dengan kawalan kotak input muncul apabila butang diklik (nilai lalai dalam kotak input adalah 1, yang merupakan data yang ditetapkan olehdefValueAnda boleh memasukkan data yang akan dihantar bersama dengan perintah butang. Sebagai contoh, apabila kod ujian berikut dijalankan, selepas mengklik butang "open position, tetingkap popup dengan kotak input muncul. Masukkan 111 dalam kotak input dan klik OK.GetCommand()fungsi akan kemudian menangkap mesej:open:111.

function main() {
    var tbl = {
        type: "table",
        title: "Demonstrate grouping button control",
        cols: ["operation"],
        rows: []
    }

    // Creating a grouping button control structure
    var groupBtn = {
        type: "button",
        cmd: "open",
        name: "open positions",
        group: [
            {"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
            {"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
            {"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
            {"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": true}
        ]
    }

    // test button 1
    var testBtn1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."}
    var testBtn2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}}

    // Add groupBtn to tbl
    tbl.rows.push([groupBtn])
    // It supports multiple buttons in a cell of a status bar table, i.e. the data in a cell is an array of button structures: [testBtn1, testBtn2].
    tbl.rows.push([[testBtn1, testBtn2]])

    while (true) {
        LogStatus("`" + JSON.stringify(tbl) + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + JSON.stringify(groupBtn) + "`")
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd:", cmd)
        }
        Sleep(5000)
    }
}
import json

def main():
    tbl = {
        "type": "table",
        "title": "Demonstrate grouping button control",
        "cols": ["operation"],
        "rows": []
    }

    groupBtn = {
        "type": "button",
        "cmd": "open",
        "name": "open positions",
        "group": [
            {"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
            {"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
            {"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
            {"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": True}
        ]
    }

    testBtn1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."}
    testBtn2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}}

    tbl["rows"].append([groupBtn])
    tbl["rows"].append([[testBtn1, testBtn2]])

    while True:
        LogStatus("`" + json.dumps(tbl) + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + json.dumps(groupBtn) + "`")
        cmd = GetCommand()
        if cmd:
            Log("cmd:", cmd)
        Sleep(5000)
void main() {
    json tbl = R"({
        "type": "table", 
        "title": "Demonstrate grouping button control", 
        "cols": ["operation"],
        "rows": []
    })"_json;

    json groupBtn = R"({
        "type": "button", 
        "name": "open positions", 
        "cmd": "open", 
        "group": [
            {"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
            {"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
            {"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
            {"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": true}
    ]})"_json;

    json testBtn1 = R"({"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."})"_json;
    json testBtn2 = R"({"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}})"_json;
    
    tbl["rows"].push_back({groupBtn});
    tbl["rows"].push_back({{testBtn1, testBtn2}});
    
    while(true) {
        LogStatus("`" + tbl.dump() + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + groupBtn.dump() + "`");
        auto cmd = GetCommand();
        if(cmd != "") {
            Log("cmd:", cmd);
        }
        Sleep(5000);
    }
}

Ia menyokong untuk kawalan butang yang dikelompokkan (struktur butang lama), secara berfungsi konsisten denganbutang bar status yang menyokong kemasukan dataPerintah interaktif akhirnya ditangkap olehGetCommand()Perbezaan adalah bahawa dengan"group"tetapan medan, apabila butang diklik untuk mencetuskan interaksi, dialog yang muncul pada halaman mengandungi satu setkumpulankawalan input yang ditubuhkan untuk memasukkan sekumpulan data sekaligus. Beberapa perkara yang perlu diperhatikan mengenai"group"medan dalam struktur kawalan butang bar status dan kawalan butang kumpulan:

  • Peraturantypeharta dalam kumpulan hanya menyokong empat jenis berikut, dandefValueproperty adalah nilai lalai. selected: Pengendalian kotak dropdown yang menggunakan|simbol untuk memisahkan setiap pilihan dalam kotak dropdown seperti yang ditetapkan. nomor: Kawalan kotak input berangka. string: kawalan kotak input string. boolean: Kawalan kotak semak, diperiksa untuk (Boolean) benar, tidak diperiksa untuk (Boolean) salah.
  • Kawalan pada tetapan pergantungan sokongan input interaktif: Sebagai contoh, dalam contoh berikut:"name": "tradePrice@orderType==1"tetapan, yang menjadikanharga perdagangankawalan input hanya tersedia apabilaorderJeniskawalan drop-down dipilih sebagaiPerintah Terhad.
  • Sokongan nama kawalan dwibahasa untuk input interaktif For example, in the following example: description : mengikut satu cara order type setting, use|simbol untuk memisahkan kandungan penerangan dalam bahasa Cina dan Inggeris.
  • name, descriptiondalam kumpulan danname, descriptiondalam struktur butang tidak mempunyai definisi yang sama walaupun mereka mempunyai nama medan yang sama. Definisinamedalam kumpulan juga berbeza dari definisinamedalam input.
  • Apabila kawalan butang kumpulan dicetuskan, kandungan interaksi dihantar dalam format nilai medan cmd butang dan data yang berkaitan dengan medan kumpulan, seperti outputLog("cmd:", cmd)pernyataan dalam ujian contoh berikut:cmd: open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}, iaitu, apa yang dikembalikan olehGetCommand()fungsi apabila interaksi berlaku:open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}.
  • Peraturantypesifat kawalan butang hanya menyokong:"button". Pengendali butang yang menyokong data input, iaitu kawalan denganinputset harta,typeharta dalam maklumat konfigurasiinputmedan menyokong pelbagai jenis kawalan. Rujuk kepada contoh berikut:
function main() {
    // Status bar button control (set input field to implement) testBtn1 button triggered by the page in the drop-down box control using the options field to set options, using the defValue field to set the default options. This is different from the other examples in this chapter, which use defValue to set the options directly.
    var testBtn1 = {
        type: "button",
        name: "testBtn1",
        cmd: "cmdTestBtn1",
        input: {name: "testBtn1ComboBox", type: "selected", options: ["A", "B"], defValue: 1}
    }

    /* 
      Status bar button control (set input field implementation) testBtn2 button triggered by the page in the drop-down box control using the options field to set the options, options field in the options field not only supports the string,
      the use of the ```{text: "description", value: "value"}``` structure is also supported. Use the defValue field to set the default option, which can be multiple choice (multiple choice via array structure). Multiple choice requires setting the additional field multiple to a true value.
    */
    var testBtn2 = {
        type: "button", 
        name: "testBtn2",
        cmd: "cmdTestBtn2",
        input: {
            name: "testBtn2MultiComboBox", 
            type: "selected", 
            description: "Implementing dropdown box multi-selection", 
            options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}],
            defValue: ["A", "C"],
            multiple: true
        }
    }

    // Status bar grouping button control (set group field implementation) testBtn3 button triggered by the page in the drop-down box control using the options field to set options, also supports the direct use of defValue set options.
    var testBtn3 = {
        type: "button",                     
        name: "testBtn3",
        cmd: "cmdTestBtn3", 
        group: [
            {name: "comboBox1", label: "labelComboBox1", description: "Dropdown box 1", type: "selected", defValue: 1, options: ["A", "B"]}, 
            {name: "comboBox2", label: "labelComboBox2", description: "Dropdown box 2", type: "selected", defValue: "A|B"}, 
            {name: "comboBox3", label: "labelComboBox3", description: "Dropdown box 3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]}, 
            {
                name: "comboBox4", 
                label: "labelComboBox4", 
                description: "Dropdown box 4", 
                type: "selected", 
                defValue: ["A", "C"], 
                multiple: true, 
                options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}, {text: "Option D", value: "D"}]
            }
        ]
    }
    while (true) {
        LogStatus("`" + JSON.stringify(testBtn1) + "`\n", "`" + JSON.stringify(testBtn2) + "`\n", "`" + JSON.stringify(testBtn3) + "`\n")
        var cmd = GetCommand()
        if (cmd) {
            Log(cmd)
        }
        Sleep(5000)
    }
}
import json

def main():
    testBtn1 = {
        "type": "button",
        "name": "testBtn1",
        "cmd": "cmdTestBtn1",
        "input": {"name": "testBtn1ComboBox", "type": "selected", "options": ["A", "B"], "defValue": 1}
    }

    testBtn2 = {
        "type": "button", 
        "name": "testBtn2",
        "cmd": "cmdTestBtn2",
        "input": {
            "name": "testBtn2MultiComboBox", 
            "type": "selected", 
            "description": "Implementing dropdown box multi-selection", 
            "options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}],
            "defValue": ["A", "C"],
            "multiple": True
        }
    }

    testBtn3 = {
        "type": "button",                     
        "name": "testBtn3",
        "cmd": "cmdTestBtn3", 
        "group": [
            {"name": "comboBox1", "label": "labelComboBox1", "description": "Dropdown box 1", "type": "selected", "defValue": 1, "options": ["A", "B"]}, 
            {"name": "comboBox2", "label": "labelComboBox2", "description": "Dropdown box 2", "type": "selected", "defValue": "A|B"}, 
            {"name": "comboBox3", "label": "labelComboBox3", "description": "Dropdown box 3", "type": "selected", "defValue": [0, 2], "multiple": True, "options": ["A", "B", "C"]}, 
            {
                "name": "comboBox4", 
                "label": "labelComboBox4", 
                "description": "Dropdown box 4", 
                "type": "selected", 
                "defValue": ["A", "C"], 
                "multiple": True, 
                "options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}, {"text": "Option D", "value": "D"}]
            }
        ]
    }

    while True:
        LogStatus("`" + json.dumps(testBtn1) + "`\n", "`" + json.dumps(testBtn2) + "`\n", "`" + json.dumps(testBtn3) + "`\n")
        cmd = GetCommand()
        if cmd:
            Log(cmd)
        Sleep(5000)
void main() {
    json testBtn1 = R"({
        "type": "button",
        "name": "testBtn1",
        "cmd": "cmdTestBtn1",
        "input": {"name": "testBtn1ComboBox", "type": "selected", "options": ["A", "B"], "defValue": 1}
    })"_json;
    
    json testBtn2 = R"({
        "type": "button", 
        "name": "testBtn2",
        "cmd": "cmdTestBtn2",
        "input": {
            "name": "testBtn2MultiComboBox", 
            "type": "selected", 
            "description": "Implementing dropdown box multi-selection", 
            "options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}],
            "defValue": ["A", "C"],
            "multiple": true
        }
    })"_json;
    
    json testBtn3 = R"({
        "type": "button",                     
        "name": "testBtn3",
        "cmd": "cmdTestBtn3", 
        "group": [
            {"name": "comboBox1", "label": "labelComboBox1", "description": "Dropdown box 1", "type": "selected", "defValue": 1, "options": ["A", "B"]}, 
            {"name": "comboBox2", "label": "labelComboBox2", "description": "Dropdown box 2", "type": "selected", "defValue": "A|B"}, 
            {"name": "comboBox3", "label": "labelComboBox3", "description": "Dropdown box 3", "type": "selected", "defValue": [0, 2], "multiple": true, "options": ["A", "B", "C"]}, 
            {
                "name": "comboBox4", 
                "label": "labelComboBox4", 
                "description": "Dropdown box 4", 
                "type": "selected", 
                "defValue": ["A", "C"], 
                "multiple": true, 
                "options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}, {"text": "Option D", "value": "D"}]
            }
        ]
    })"_json;
    
    while (true) {
        LogStatus("`" + testBtn1.dump() + "`\n", "`" + testBtn2.dump() + "`\n", "`" + testBtn3.dump() + "`\n");
        auto cmd = GetCommand();
        if (cmd != "") {
            Log(cmd);
        }
        Sleep(5000);
    }
}

Apabila butang bar status kumpulan kawalan (dilaksanakannya dengan menetapkangroupmedan) dan kawalan butang bar status (diwujudkan dengan menetapkaninputmedan) diklik untuk mencetuskan interaksi (struktur butang lama), kawalan kotak drop-down dalam kotak dialog yang muncul di halaman juga menyokong pelbagai pilihan. Contoh berikut menunjukkan cara merancang kawalan kotak drop-down dengan pelbagai pilihan pilihan:

var symbols = ["BTC_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "BNB_USDT.swap", "SOL_USDT.swap"]

function createBtn(tmp, group) {
    var btn = JSON.parse(JSON.stringify(tmp))

    _.each(group, function(eleByGroup) {
        btn["group"].unshift(eleByGroup)
    })

    return btn
}

function main() {
    var arrManager = []

    _.each(symbols, function(symbol) {
        arrManager.push({
            "symbol": symbol,
        })
    })

    // Btn
    var tmpBtnOpen = {
        "type": "button",
        "cmd": "open",
        "name": "Open a position and place an order",
        "group": [{
            "type": "selected",
            "name": "tradeType",
            "label": "Order type",
            "description": "Market order, limit order",
            "default": 0,
            "group": "Trading setup",
            "settings": {
                "options": ["Market order", "Limit order"],
                "required": true,
            }
        }, {
            "type": "selected",
            "name": "direction",
            "label": "Trading direction",
            "description": "Buy, sell",
            "default": "buy",
            "group": "Trading setup",
            "settings": {
                "render": "segment",
                "required": true,
                "options": [{"name": "buy", "value": "buy"}, {"name": "sell", "value": "sell"}],
            }
        }, {
            "type": "number",
            "name": "price",
            "label": "price",
            "description": "The price of the order",
            "group": "Trading setup",
            "filter": "tradeType==1",
            "settings": {
                "required": true,
            }
        }, {
            "type": "number",
            "name": "amount",
            "label": "Order quantity",
            "description": "Order quantity",
            "group": "Trading setup",
            "settings": {
                "required": true,
            }
        }],
    }

    while (true) {
        var tbl = {"type": "table", "title": "dashboard", "cols": ["symbol", "actionOpen"], "rows": []}

        _.each(arrManager, function(m) {
            var btnOpen = createBtn(tmpBtnOpen, [{"type": "string", "name": "symbol", "label": "Trading instruments", "default": m["symbol"], "settings": {"required": true}}])
            tbl["rows"].push([m["symbol"], btnOpen])
        })

        var cmd = GetCommand()
        if (cmd) {
            Log("Receive interaction:", cmd)

            // Parsing interaction messages: open:{"symbol":"LTC_USDT.swap","tradeType":0,"direction":"buy","amount":111}
            // According to the first colon: the previous instruction determines which button template triggers the message
            var arrCmd = cmd.split(":", 2)
            if (arrCmd[0] == "open") {
                var msg = JSON.parse(cmd.slice(5))
                Log("Trading instruments:", msg["symbol"], ", Trading direction:", msg["direction"], ", Order type:", msg["tradeType"] == 0 ? "Market order" : "Limit order", msg["tradeType"] == 0 ? ", Order price: current market price" : ", Order price:" + msg["price"], ", Order quantity:", msg["amount"])
            }
        }

        LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
        Sleep(1000)
    }
}
import json

symbols = ["BTC_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "BNB_USDT.swap", "SOL_USDT.swap"]

def createBtn(tmp, group):
    btn = json.loads(json.dumps(tmp))
    for eleByGroup in group:
        btn["group"].insert(0, eleByGroup)
    return btn

def main():
    arrManager = []

    for symbol in symbols:
        arrManager.append({"symbol": symbol})

    # Btn
    tmpBtnOpen = {
        "type": "button",
        "cmd": "open",
        "name": "Open a position and place an order",
        "group": [{
            "type": "selected",
            "name": "tradeType",
            "label": "Order type",
            "description": "Market order, limit order",
            "default": 0,
            "group": "Trading setup",
            "settings": {
                "options": ["Market order", "Limit order"],
                "required": True,
            }
        }, {
            "type": "selected",
            "name": "direction",
            "label": "Trading direction",
            "description": "Buy, sell",
            "default": "buy",
            "group": "Trading Setup",
            "settings": {
                "render": "segment",
                "required": True,
                "options": [{"name": "买入", "value": "buy"}, {"name": "卖出", "value": "sell"}],
            }
        }, {
            "type": "number",
            "name": "price",
            "label": "price",
            "description": "The price of the order",
            "group": "Trading Setup",
            "filter": "tradeType==1",
            "settings": {
                "required": True,
            }
        }, {
            "type": "number",
            "name": "amount",
            "label": "Order quantity",
            "description": "Order quantity",
            "group": "Trading Setup",
            "settings": {
                "required": True,
            }
        }],
    }

    while True:
        tbl = {"type": "table", "title": "dashboard", "cols": ["symbol", "actionOpen"], "rows": []}
        for m in arrManager:
            btnOpen = createBtn(tmpBtnOpen, [{"type": "string", "name": "symbol", "label": "交易品种", "default": m["symbol"], "settings": {"required": True}}])
            tbl["rows"].append([m["symbol"], btnOpen])

        cmd = GetCommand()

        if cmd != "" and cmd != None:
            Log("Receive interaction:", cmd) 

            # Parsing interaction messages: open:{"symbol":"LTC_USDT.swap","tradeType":0,"direction":"buy","amount":111}
            # According to the first colon: the previous instruction determines which button template triggers the message
            arrCmd = cmd.split(":")
            if arrCmd[0] == "open":
                msg = json.loads(cmd[5:])
                Log("Trading instruments:", msg["symbol"], ", Trading direction:", msg["direction"], ", Order type:", "Market order" if msg["tradeType"] == 0 else "Limit order", ", Order price: current market price" if msg["tradeType"] == 0 else ", Order price:" + str(msg["price"]), ", Order quantity:", msg["amount"])
        
        # Output status bar information
        LogStatus(_D(), "\n", "`" + json.dumps(tbl) + "`")
        Sleep(1000)
// Omit...

Gunakan struktur butang terkini untuk membina butang dalam jadual bar status. Apabila mengklik butang untuk mencetuskan interaksi, tetingkap pop-up pelbagai kawalan akan muncul. Untuk butiran lanjut, sila rujuk:Panduan Pengguna - Kawalan Interaktif dalam Bar Status.

function main() {
    var table = { 
        type: 'table', 
        title: 'position operation', 
        cols: ['column1', 'column2', 'Action'], 
        rows: [ 
            ['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'close positions'}]
        ]
    } 
    var ticker = exchange.GetTicker()
    // Add a row of data, merge the first and second cells, and output the ticker variable in the merged cell
    table.rows.push([{body : JSON.stringify(ticker), colspan : 2}, "abc"])    
    LogStatus('`' + JSON.stringify(table) + '`')
}
import json
def main():
    table = {
        "type" : "table",
        "title" : "position operation",
        "cols" : ["column1", "column2", "Action"],
        "rows" : [
            ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close positions"}]
        ]
    }
    ticker = exchange.GetTicker()
    table["rows"].append([{"body": json.dumps(ticker), "colspan": 2}, "abc"])
    LogStatus("`" + json.dumps(table) + "`")
void main() {
    json table = R"({
        "type" : "table",
        "title" : "position operation",
        "cols" : ["column1", "column2", "Action"],
        "rows" : [
            ["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close positions"}]
        ]
    })"_json;            

    auto ticker = exchange.GetTicker();
    json jsonTicker = R"({"Buy": 0, "Sell": 0, "High": 0, "Low": 0, "Volume": 0, "Last": 0, "Time": 0})"_json;
    jsonTicker["Buy"] = ticker.Buy;
    jsonTicker["Sell"] = ticker.Sell;
    jsonTicker["Last"] = ticker.Last;
    jsonTicker["Volume"] = ticker.Volume;
    jsonTicker["Time"] = ticker.Time;
    jsonTicker["High"] = ticker.High;
    jsonTicker["Low"] = ticker.Low;            

    json arr = R"([{"body": {}, "colspan": 2}, "abc"])"_json;
    arr[0]["body"] = jsonTicker;
    table["rows"].push_back(arr);
    LogStatus("`" + table.dump() + "`");
}

Gabungan mendatar sel dalam jadual yang dibuat olehLogStatus()fungsi:

function main() {
    var table = { 
        type: 'table', 
        title: 'table demo', 
        cols: ['columnA', 'columnB', 'columnC'], 
        rows: [ 
            ['A1', 'B1', {'type':'button', 'cmd': 'coverAll', 'name': 'C1'}]
        ]
    }             

    var ticker = exchange.GetTicker()
    var name = exchange.GetName()            

    table.rows.push([{body : "A2 + B2:" + JSON.stringify(ticker), colspan : 2}, "C2"])
    table.rows.push([{body : "A3 + A4 + A5:" + name, rowspan : 3}, "B3", "C3"])
    // A3 is merged by the first cell in the previous row
    table.rows.push(["B4", "C4"])
    // A2 is merged by the first cell of the previous row
    table.rows.push(["B5", "C5"])                                            
    table.rows.push(["A6", "B6", "C6"])
    LogStatus('`' + JSON.stringify(table) + '`')
}
import json
def main():
    table = {
        "type" : "table", 
        "title" : "table demo", 
        "cols" : ["columnA", "columnB", "columnC"], 
        "rows" : [
            ["A1", "B1", {"type": "button", "cmd": "coverAll", "name": "C1"}]
        ]
    }
    
    ticker = exchange.GetTicker()
    name = exchange.GetName()
    
    table["rows"].append([{"body": "A2 + B2:" + json.dumps(ticker), "colspan": 2}, "C2"])
    table["rows"].append([{"body": "A3 + A4 + A5:" + name, "rowspan": 3}, "B3", "C3"])
    table["rows"].append(["B4", "C4"])
    table["rows"].append(["B5", "C5"])
    table["rows"].append(["A6", "B6", "C6"])
    LogStatus("`" + json.dumps(table) + "`")
void main() {
    json table = R"({
        "type" : "table", 
        "title" : "table demo", 
        "cols" : ["columnA", "columnB", "columnC"], 
        "rows" : [
            ["A1", "B1", {"type": "button", "cmd": "coverAll", "name": "C1"}]
        ]
    })"_json;
    // For testing purposes, the code is short and easy to read, and the constructed data is used here
    json jsonTicker = R"({"High": 0, "Low": 0, "Buy": 0, "Sell": 0, "Last": 0, "Time": 0, "Volume": 0})"_json;
    auto name = exchange.GetName();
    json arr1 = R"([{"body": "", "colspan": 2}, "C2"])"_json;
    arr1[0]["body"] = "A2 + B2:" + jsonTicker.dump();
    json arr2 = R"([{"body": "", "rowspan": 3}, "B3", "C3"])"_json;
    arr2[0]["body"] = "A3 + A4 + A5:" + name;
    table["rows"].push_back(arr1);
    table["rows"].push_back(arr2);
    table["rows"].push_back(R"(["B4", "C4"])"_json);
    table["rows"].push_back(R"(["B5", "C5"])"_json);
    table["rows"].push_back(R"(["A6", "B6", "C6"])"_json);
    LogStatus("`" + table.dump() + "`");
}

Secara menegak menggabungkan sel-sel dalam jadual yang digambar olehLogStatus()fungsi:

function main() {
    var table1 = {type: 'table', title: 'table1', cols: ['column1', 'column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
    var table2 = {type: 'table', title: 'table2', cols: ['column1', 'column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
    LogStatus('`' + JSON.stringify([table1, table2]) + '`')
}
import json
def main():
    table1 = {"type": "table", "title": "table1", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]}
    table2 = {"type": "table", "title": "table2", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]}
    LogStatus("`" + json.dumps([table1, table2]) + "`")
void main() {
    json table1 = R"({"type": "table", "title": "table1", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
    json table2 = R"({"type": "table", "title": "table2", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
    json arr = R"([])"_json;
    arr.push_back(table1);
    arr.push_back(table2);
    LogStatus("`" + arr.dump() + "`");
}

Tampilan halaman jadual bar status:

function main(){
    var tab1 = {
        type : "table",
        title : "table1",
        cols : ["1", "2"],
        rows : []
    }
    var tab2 = {
        type : "table",
        title : "table2",
        cols : ["1", "2", "3"],
        rows : []
    }
    var tab3 = {
        type : "table",
        title : "table3",
        cols : ["A", "B", "C"],
        rows : []
    }            

    tab1.rows.push(["jack", "lucy"])
    tab2.rows.push(["A", "B", "C"])
    tab3.rows.push(["A", "B", "C"])            

    LogStatus('`' + JSON.stringify(tab1) + '`\n' + 
        '`' + JSON.stringify(tab2) + '`\n' +
        '`' + JSON.stringify(tab3) + '`')
  
    Log("exit")
}
import json
def main():
    tab1 = {
        "type": "table", 
        "title": "table1", 
        "cols": ["1", "2"], 
        "rows": []
    }
    tab2 = {
        "type": "table", 
        "title": "table2", 
        "cols": ["1", "2", "3"], 
        "rows": []
    }
    tab3 = {
        "type": "table", 
        "title": "table3", 
        "cols": ["A", "B", "C"], 
        "rows": []
    }            

    tab1["rows"].append(["jack", "lucy"])
    tab2["rows"].append(["A", "B", "C"])
    tab3["rows"].append(["A", "B", "C"])
    LogStatus("`" + json.dumps(tab1) + "`\n" + 
        "`" + json.dumps(tab2) + "`\n" + 
        "`" + json.dumps(tab3) + "`")
void main() {
    json tab1 = R"({
        "type": "table", 
        "title": "table1", 
        "cols": ["1", "2"], 
        "rows": []
    })"_json;
    json tab2 = R"({
        "type": "table", 
        "title": "table2", 
        "cols": ["1", "2", "3"], 
        "rows": []
    })"_json;
    json tab3 = R"({
        "type": "table", 
        "title": "table3", 
        "cols": ["A", "B", "C"], 
        "rows": []
    })"_json;
    tab1["rows"].push_back(R"(["jack", "lucy"])"_json);
    tab2["rows"].push_back(R"(["A", "B", "C"])"_json);
    tab3["rows"].push_back(R"(["A", "B", "C"])"_json);
    LogStatus("`" + tab1.dump() + "`\n" + 
        "`" + tab2.dump() + "`\n" +
        "`" + tab3.dump() + "`");
}

Selain memaparkan jadual dalam halaman, pelbagai jadual juga boleh dipaparkan dalam susunan dari atas ke bawah:

function main() {
    var tbl = {
        type : "table",
        title : "test scroll",
        scroll : "auto",
        cols : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10", 
            "col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
        rows : []
    }

    for (var i = 1 ; i < 100 ; i++) {
        tbl.rows.push([i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i, 
            "11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i])
    }
    
    LogStatus("`" + JSON.stringify(tbl) + "`")
}
import json

def main():
    tbl = {
        "type" : "table",
        "title" : "test scroll",
        "scroll" : "auto",
        "cols" : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10", 
            "col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
        "rows" : []
    }

    for index in range(1, 100):
        i = str(index)
        tbl["rows"].append([i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i, 
            "11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i])
    
    LogStatus("`" + json.dumps(tbl) + "`")
void main() {
    json table = R"({
        "type" : "table",
        "title" : "test scroll",
        "scroll" : "auto",
        "cols" : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10", 
            "col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
        "rows" : []
    })"_json;

    for (int index = 1; index < 100; ++index) {
        std::string i = std::to_string(index);
        table["rows"].push_back({i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i,
            "11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i});
    }

    LogStatus("`" + table.dump() + "`");
}

Sokongan untuk menetapkan mod gulungan mendatar dan menegak jadual bar status.scrollatribut kepada"auto", apabila bilangan baris menegak jadual bar status melebihi 20 baris, kandungan akan digulung.scrollatribut boleh digunakan untuk mengurangkan masalah keterlambatan menulis sejumlah besar data dalam bar status semasa perdagangan langsung.

Keluaran maklumat dariLogStatus()fungsi apabila perdagangan langsung berjalan tidak disimpan ke pangkalan data perdagangan langsung, tetapi ia mengemas kini bar status perdagangan langsung semasa sahaja. PerkhidmatanLogStatus()fungsi menyokong percetakanbase64imej berkod, bermula dengan`dan berakhir dengan`Contohnya:LogStatus("`data:image/png;base64,AAAA`"). PeraturanLogStatus()fungsi menyokong lulusmatplotlib.pyplotobjek terus ke dalamPython, selagi objek itu mengandungisavefigkaedah, ia boleh dihantar sebagai parameter kepadaLogStatus()fungsi, contohnya:

import matplotlib.pyplot as plt 
def main():
    plt.plot([3,6,2,4,7,1])
    LogStatus(plt) 

Apabila strategi berjalan perdagangan langsung, jika anda pergi melalui sejarah pada halaman perdagangan langsung, bar status akan tidur dan berhenti mengemas kini. Hanya data bar status akan disegerakan apabila log berada di halaman pertama. Ia menyokong outputbase64gambar dikodkan dalam bar status, dan ia juga menyokong outputbase64Gambar yang dikodkan dalam jadual yang dipaparkan dalam bar status. Oleh kerana data rentetan gambar yang dikodkan biasanya sangat panjang, kod sampel tidak ditunjukkan.

{@fun/Global/GetCommand GetCommand}

EnableLog

Menghidupkan atau mematikan pendaftaran maklumat pesanan.

EnableLog ((aktifkan)

Jikaenableparameter ditetapkan kepada nilai palsu, contohnyafalse, log pesanan (iaitu log yang dihasilkan oleh fungsi sepertiexchange.Buy()) tidak dicetak dan tidak ditulis ke pangkalan data perdagangan langsung. membolehkan betul bool

function main() {
    EnableLog(false)
}
def main():
    EnableLog(False)
void main() {
    EnableLog(false);
}

{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Trade/exchange.CancelOrder exchange.CancelOrder}

Jadual

Sesuaikan fungsi lukisan carta.

Objek carta. objek

Jadual (pilihan)

Peraturanoptionsparameter adalah konfigurasi carta.Chart()parameter fungsioptionsadalahJSONboleh diserialisasikanHighStocksparameter untukHighcharts.StockChart. Satu tambahan__isStockatribut ditambah di atas parameter asli, dan jika__isStock:falseJika grafik yang ditetapkan, ia dipaparkan sebagai carta biasa.__isStockatribut ditetapkan kepada nilai palsu e.g.false, iaitu carta yang digunakan adalahHighchartsJika__isStockatribut ditetapkan kepada nilai benar e.g.true, iaitu carta yang digunakan adalahHighstockscarta (secara lalai__isStockadalah benar contohnyatrue) Anda boleh menyoalPerpustakaan carta HighStocks. pilihan betul objek, barisan objek

function main() {
    var cfgA = {
        extension: {
            layout: 'single', // No grouping, display separately, default to group 'group'
            height: 300, // Specify the height
        },
        title: {
            text: 'handicap chart'
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'buy one',
            data: [],
        }, {
            name: 'sell one',
            data: [],
        }]
    }
    var cfgB = {
        title: {
            text: 'spread chart'
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'spread',
            type: 'column',
            data: [],
        }]
    }            

    var cfgC = {
        __isStock: false,
        title: {
            text: 'pie chart'
        },
        series: [{
            type: 'pie',
            name: 'one',
            data: [
                ["A", 25],
                ["B", 25],
                ["C", 25],
                ["D", 25],
            ]  // Instead of updating the initial data with the add function, the sequence can be updated by changing the chart configuration directly.
        }]
    };
    var cfgD = {
        extension: {
            layout: 'single',
            col: 8, // Specify the cell value for the width, the total value is 12
            height: '300px',
        },
        title: {
            text: 'handicap chart'
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'buy one',
            data: [],
        }, {
            name: 'sell one',
            data: [],
        }]
    }
    var cfgE = {
        __isStock: false,
        extension: {
            layout: 'single',
            col: 4,
            height: '300px',
        },
        title: {
            text: 'pie chart2'
        },
        series: [{
            type: 'pie',
            name: 'one',
            data: [
                ["A", 25],
                ["B", 25],
                ["C", 25],
                ["D", 25],
            ]
        }]
    };            

    var chart = Chart([cfgA, cfgB, cfgC, cfgD, cfgE]);
    chart.reset()
        // Add a number of points to the pie chart, add can only update the data points added by add, built-in data points cannot be updated later.
    chart.add(3, {
        name: "ZZ",
        y: Math.random() * 100
    });
    while (true) {
        Sleep(1000)
        var ticker = exchange.GetTicker()
        if (!ticker) {
            continue;
        }
        var diff = ticker.Sell - ticker.Buy
        cfgA.subtitle = {
            text: 'buy one ' + ticker.Buy + ', sell one ' + ticker.Sell,
        };
        cfgB.subtitle = {
            text: 'spread ' + diff,
        };            

        chart.add([0, [new Date().getTime(), ticker.Buy]]);
        chart.add([1, [new Date().getTime(), ticker.Sell]]);
        // Equivalent to updating the first data series of the second chart
        chart.add([2, [new Date().getTime(), diff]]);
        chart.add(4, [new Date().getTime(), ticker.Buy]);
        chart.add(5, [new Date().getTime(), ticker.Buy]);
        cfgC.series[0].data[0][1] = Math.random() * 100;
        cfgE.series[0].data[0][1] = Math.random() * 100;
        // update is actually the same as resetting the chart's configuration
        chart.update([cfgA, cfgB, cfgC, cfgD, cfgE]);
    }
}            
import random
import time
def main():
    cfgA = {
        "extension" : {
            "layout" : "single", 
            "height" : 300,
            "col" : 8
        }, 
        "title" : {
            "text" : "handicap chart"
        },
        "xAxis" : {
            "type" : "datetime" 
        }, 
        "series" : [{
            "name" : "buy one",
            "data" : []
        }, {
            "name" : "sell one", 
            "data" : []
        }]
    }                

    cfgB = {
        "title" : {
            "text" : "spread chart"
        }, 
        "xAxis" : {
            "type" : "datetime",
        }, 
        "series" : [{
            "name" : "spread", 
            "type" : "column", 
            "data" : []
        }]
    }                

    cfgC = {
        "__isStock" : False,
        "title" : {
            "text" : "pie chart"
        }, 
        "series" : [{
            "type" : "pie", 
            "name" : "one", 
            "data" : [
                ["A", 25],
                ["B", 25],
                ["C", 25],
                ["D", 25],
            ]
        }]
    }                

    cfgD = {
        "extension" : {
            "layout" : "single",
            "col" : 8,
            "height" : "300px"
        }, 
        "title" : {
            "text" : "handicap chart"
        }, 
        "series" : [{
            "name" : "buy one", 
            "data" : []
        }, {
            "name" : "sell one",
            "data" : []
        }]
    }                

    cfgE = {
        "__isStock" : False, 
        "extension" : {
            "layout" : "single", 
            "col" : 4,
            "height" : "300px"
        }, 
        "title" : {
            "text" : "pie chart2"
        },
        "series" : [{
            "type" : "pie",
            "name" : "one", 
            "data" : [
                ["A", 25], 
                ["B", 25], 
                ["C", 25], 
                ["D", 25]
            ]
        }]
    }
    
    chart = Chart([cfgA, cfgB, cfgC, cfgD, cfgE])
    chart.reset()
    chart.add(3, {
        "name" : "ZZ",
        "y" : random.random() * 100
    })
    
    while True:
        Sleep(1000)
        ticker = exchange.GetTicker()
        if not ticker :
            continue
        diff = ticker["Sell"] - ticker["Buy"]
        cfgA["subtitle"] = {
            "text" : "buy one" + str(ticker["Buy"]) + "sell one" + str(ticker["Sell"])
        }
        cfgB["subtitle"] = {
            "text" : "spread " + str(diff)
        }
        
        chart.add(0, [time.time() * 1000, ticker["Buy"]])
        chart.add(1, [time.time() * 1000, ticker["Sell"]])
        chart.add(2, [time.time() * 1000, diff])
        chart.add(4, [time.time() * 1000, ticker["Buy"]])
        chart.add(5, [time.time() * 1000, ticker["Buy"]])
        cfgC["series"][0]["data"][0][1] = random.random() * 100
        cfgE["series"][0]["data"][0][1] = random.random() * 100
void main() {
    json cfgA = R"({
        "extension" : {
            "layout" : "single", 
            "height" : 300,
            "col" : 8
        }, 
        "title" : {
            "text" : "handicap chart"
        },
        "xAxis" : {
            "type" : "datetime" 
        }, 
        "series" : [{
            "name" : "buy one",
            "data" : []
        }, {
            "name" : "sell one", 
            "data" : []
        }]
    })"_json;                

    json cfgB = R"({
        "title" : {
            "text" : "spread chart"
        }, 
        "xAxis" : {
            "type" : "datetime"
        }, 
        "series" : [{
            "name" : "spread", 
            "type" : "column", 
            "data" : []
        }]
    })"_json;    
    
    json cfgC = R"({
        "__isStock" : false,
        "title" : {
            "text" : "pie chart"
        }, 
        "series" : [{
            "type" : "pie", 
            "name" : "one", 
            "data" : [
                ["A", 25],
                ["B", 25],
                ["C", 25],
                ["D", 25]
            ]
        }]
    })"_json;    
    
    json cfgD = R"({
        "extension" : {
            "layout" : "single",
            "col" : 8,
            "height" : "300px"
        }, 
        "title" : {
            "text" : "handicap chart"
        }, 
        "series" : [{
            "name" : "buy one", 
            "data" : []
        }, {
            "name" : "sell one",
            "data" : []
        }]
    })"_json;    
    
    json cfgE = R"({
        "__isStock" : false, 
        "extension" : {
            "layout" : "single", 
            "col" : 4,
            "height" : "300px"
        }, 
        "title" : {
            "text" : "pie chart2"
        },
        "series" : [{
            "type" : "pie",
            "name" : "one", 
            "data" : [
                ["A", 25], 
                ["B", 25], 
                ["C", 25], 
                ["D", 25]
            ]
        }]
    })"_json;            

    auto chart = Chart({cfgA, cfgB, cfgC, cfgD, cfgE});
    chart.reset();
    json zz = R"({
        "name" : "ZZ", 
        "y" : 0
    })"_json;
    zz["y"] = rand() % 100;
    chart.add(3, zz);
    
    while(true) {
        Sleep(1000);
        auto ticker = exchange.GetTicker();
        if(!ticker.Valid) {
            continue;
        }
        auto diff = ticker.Sell - ticker.Buy;
        json cfgASubTitle = R"({"text" : ""})"_json;
        cfgASubTitle["text"] = format("buy one %f , sell one %f", ticker.Buy, ticker.Sell);
        cfgA["subtitle"] = cfgASubTitle;
        
        json cfgBSubTitle = R"({"text" : ""})"_json;
        cfgBSubTitle["text"] = format("spread %f", diff);
        cfgB["subtitle"] = cfgBSubTitle;            

        chart.add(0, {Unix() * 1000, ticker.Buy});
        chart.add(1, {Unix() * 1000, ticker.Sell});
        chart.add(2, {Unix() * 1000, diff});
        chart.add(4, {Unix() * 1000, ticker.Buy});
        chart.add(5, {Unix() * 1000, ticker.Buy});
        cfgC["series"][0]["data"][0][1] = rand() % 100;
        cfgE["series"][0]["data"][0][1] = rand() % 100;
        chart.update({cfgA, cfgB, cfgC, cfgD, cfgE});
    }
}

Konfigurasi lukisan pelbagai carta:

  • extension.layoutatribut Jika atribut ditetapkan dengan nilai single, carta tidak akan ditumpuk (tidak dipaparkan sebagai tab), tetapi akan dipaparkan secara berasingan (dipasangkan).
  • extension.heightatribut Atribut ini digunakan untuk menetapkan ketinggian carta, sama ada sebagai nilai numerik, atau sebagai 300px.
  • extension.colatribut Atribut ini digunakan untuk menetapkan lebar carta, lebar halaman dibahagikan kepada 12 sel, set 8, iaitu, carta menduduki lebar 8 sel.
// This chart is an object in the JavaScript language, and before using the Chart function, we need to declare an object variable chart to configure the chart. var chart = {                                           
    // This field marks whether the chart is a general chart or not, if you are interested, you can change it to false and run it.
    __isStock: true,                                    
    // Scaling tool
    tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},    
    // title
    title : { text : 'spread analysis chart'},                       
    // selection range
    rangeSelector: {                                    
        buttons:  [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
        selected: 0,
        inputEnabled: false
    },
    // Coordinate axis horizontal axis that is: x-axis, the current setting type is: time
    xAxis: { type: 'datetime'},                         
    // Coordinate axis vertical axis that is: y-axis, default value adjusted with the size of the data
    yAxis : {                                           
        // title
        title: {text: 'spread'},                           
        // Whether to enable the right vertical axis
        opposite: false                                 
    },
    // Data series, this sttribute holds the individual data series (lines, K-charts, labels, etc...)
    series : [                                          
        // The index is 0, and the data array holds the data of the index series
        {name : "line1", id : "line1,buy1Price", data : []},                          
        // Index is 1, set dashStyle:'shortdash' i.e.: set the dashed line
        {name : "line2", id : "line2,lastPrice", dashStyle : 'shortdash', data : []}  
    ]
} function main(){
    // Call the Chart function to initialize the chart
    var ObjChart = Chart(chart)         
    // Clear out
    ObjChart.reset()                      
    while(true){
        // Gets the timestamp of this poll, i.e. a millisecond timestamp. It's used to determine the position of the X-axis written to the chart.
        var nowTime = new Date().getTime()
        // Get the ticker data
        var ticker = _C(exchange.GetTicker)
        // Get buy one price from the return value of the ticker data
        var buy1Price = ticker.Buy    
        // To obtain the final transaction price, we add 1 in order not to overlap the 2 lines
        var lastPrice = ticker.Last + 1
        // Data sequence with timestamp as X-value and buy one price as Y-value passed into index 0
        ObjChart.add(0, [nowTime, buy1Price])
        // ditto
        ObjChart.add(1, [nowTime, lastPrice])
        Sleep(2000)
    }
}```
```python
import time
chart = {
    "__isStock" : True,
    "tooltip" : {"xDateFormat" : "%Y-%m-%d %H:%M:%S, %A"},  
    "title" : {"text" : "spread analysis chart"}, 
    "rangeSelector" : {
        "buttons" : [{"type": "count", "count": 1, "text": "1h"}, {"type": "hour", "count": 3, "text": "3h"}, {"type": "hour", "count": 8, "text": "8h"}, {"type": "all", "text": "All"}], 
        "selected": 0,
        "inputEnabled": False 
    }, 
    "xAxis": {"type": "datetime"}, 
    "yAxis": {
        "title": {"text": "spread"},
        "opposite": False
    },
    "series": [{
        "name": "line1", "id": "line1,buy1Price", "data": []
    }, {
        "name": "line2", "id": "line2,lastPrice", "dashStyle": "shortdash", "data": []
    }]
}
def main():
    ObjChart = Chart(chart)
    ObjChart.reset()
    while True:
        nowTime = time.time() * 1000
        ticker = exchange.GetTicker()
        buy1Price = ticker["Buy"]
        lastPrice = ticker["Last"] + 1
        ObjChart.add(0, [nowTime, buy1Price])
        ObjChart.add(1, [nowTime, lastPrice])
        Sleep(2000)
void main() {
    // When writing strategies in C++, try not to declare global variables that are not of the base type, so the chart configuration object is declared inside the main function.
    json chart = R"({
        "__isStock" : true,
        "tooltip" : {"xDateFormat" : "%Y-%m-%d %H:%M:%S, %A"},  
        "title" : {"text" : "spread analysis chart"}, 
        "rangeSelector" : {
            "buttons" : [{"type": "count", "count": 1, "text": "1h"}, {"type": "hour", "count": 3, "text": "3h"}, {"type": "hour", "count": 8, "text": "8h"}, {"type": "all", "text": "All"}], 
            "selected": 0,
            "inputEnabled": false 
        }, 
        "xAxis": {"type": "datetime"}, 
        "yAxis": {
            "title": {"text": "spread"},
            "opposite": false
        },
        "series": [{
            "name": "line1", "id": "line1,buy1Price", "data": []
        }, {
            "name": "line2", "id": "line2,lastPrice", "dashStyle": "shortdash", "data": []
        }]
    })"_json;
    auto ObjChart = Chart(chart);
    ObjChart.reset();
    while(true) {
        auto nowTime = Unix() * 1000;
        auto ticker = exchange.GetTicker();
        auto buy1Price = ticker.Buy;
        auto lastPrice = ticker.Last + 1.0;
        ObjChart.add(0, {nowTime, buy1Price});
        ObjChart.add(1, {nowTime, lastPrice});
        Sleep(2000);
    }
}

Contoh lukisan mudah:

// Objects used to initialize the chart
var chart = {                                   
    // Chart title
    title: {text: "line value triggers the plotLines value"},   
    // Y-axis related settings
    yAxis: {                                    
        // A horizontal line perpendicular to the Y-axis, used as a trigger line, is a structural array that can set multiple trigger lines
        plotLines: [{                           
            // The value of the trigger line, how much it set, this line will be displayed in the corresponding value position
            value: 0,                           
            // Set the color of the trigger line
            color: 'red',                       
            // Width
            width: 2,                           
            // Displaying labels
            label: {                            
                // Label text
                text: 'Trigger value',                  
                // Centered label position
                align: 'center'                 
            }
        }]
    },
    // X-axis related settings, here the setting type is time axis
    xAxis: {type: "datetime"},                  
    series: [
        {name: "sin", type: "spline", data: []},
        // This is an important data series, you can set multiple data series, according to the array index control
        {name: "cos", type: "spline", data: []}
    ]  
}
function main(){
    // Circumference
    var pi = 3.1415926535897
    // Variables for recording timestamps
    var time = 0                   
    // Angle
    var angle = 0                        
    // Coordinate y values for receiving sine and cosine values
    var y = 0          
    // Call the API interface to initialize the chart with the chart object
    var objChart = Chart(chart)        
    // Initially, clear the chart
    objChart.reset()
    // Set the value of the trigger line to 1
    chart.yAxis.plotLines[0].value = 1
    // Loop
    while(true){                          
        // Get the timestamp of the current moment
        time = new Date().getTime() 
        // Angle increases by 5 degrees every 500ms and calculates the sine value
        y = Math.sin(angle * 2 * pi / 360)
        // Write the calculated y value to the data series of the corresponding index of the chart, the first parameter of the add function is the specified data series index
        objChart.add(0, [time, y])
        // Calculate the cosine value
        y = Math.cos(angle * 2 * pi / 360)
        objChart.add(1, [time, y])
        // Increase by 5 degrees
        angle += 5
        // Pause for 5 seconds to avoid drawing too often and growing data too fast
        Sleep(5000)     
    }
}
import math
import time
chart = {
    "title": {"text": "line value triggers the plotLines value"}, 
    "yAxis": {
        "plotLines": [{
            "value": 0,
            "color": "red",
            "width": 2,
            "label": {
                "text": "trigger value", 
                "align": "center"
            }
        }]
    },
    "xAxis": {"type": "datetime"},
    "series": [{"name": "sin", "type": "spline", "data": []},
               {"name": "cos", "type": "spline", "data": []}]
}
def main():
    pi = 3.1415926535897
    ts = 0
    angle = 0
    y = 0
    objChart = Chart(chart)
    objChart.reset()
    chart["yAxis"]["plotLines"][0]["value"] = 1
    while True:
        ts = time.time() * 1000
        y = math.sin(angle * 2 * pi / 360)
        objChart.add(0, [ts, y])
        y = math.cos(angle * 2 * pi / 360)
        objChart.add(1, [ts, y])
        angle += 5
        Sleep(5000)
void main() {
    json chart = R"({
        "title": {"text": "line value triggers the plotLines value"}, 
        "yAxis": {
            "plotLines": [{
                "value": 0,
                "color": "red",
                "width": 2,
                "label": {
                    "text": "trigger value", 
                    "align": "center"
                }
            }]
        },
        "xAxis": {"type": "datetime"},
        "series": [{"name": "sin", "type": "spline", "data": []},
                   {"name": "cos", "type": "spline", "data": []}]     
    })"_json;            

    auto pi = 3.1415926535897;
    auto ts = 0;
    auto angle = 0.0;
    auto y = 0.0;
    auto objChart = Chart(chart);
    objChart.reset();
    chart["yAxis"]["plotLines"][0]["value"] = 1;
    while(true) {
        ts = Unix() * 1000;
        y = sin(angle * 2 * pi / 360);
        objChart.add(0, {ts, y});
        y = cos(angle * 2 * pi / 360);
        objChart.add(1, {ts, y});
        angle += 5;
        Sleep(5000);
    }
}

Contoh lukisan lengkung trigonometri:

/*backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/            

var chartCfg = {
    subtitle: {
        text: "subtitle",
    },
    yAxis: [{
        height: "40%",
        lineWidth: 2,
        title: {
            text: 'PnL',
        },
        tickPixelInterval: 20,
        minorGridLineWidth: 1,
        minorTickWidth: 0,
        opposite: true,
        labels: {
            align: "right",
            x: -3,
        }
    }, {
        title: {
            text: 'Profit',
        },
        top: "42%",
        height: "18%",
        offset: 0,
        lineWidth: 2
    }, {
        title: {
            text: 'Vol',
        },
        top: '62%',
        height: '18%',
        offset: 0,
        lineWidth: 2
    }, {
        title: {
            text: 'Asset',
        },
        top: '82%',
        height: '18%',
        offset: 0,
        lineWidth: 2
    }],
    series: [{
        name: 'PnL',
        data: [],
        id: 'primary',
        tooltip: {
            xDateFormat: '%Y-%m-%d %H:%M:%S'
        },
        yAxis: 0
    }, {
        type: 'column',
        lineWidth: 2,
        name: 'Profit',
        data: [],
        yAxis: 1,
    }, {
        type: 'column',
        name: 'Trade',
        data: [],
        yAxis: 2
    }, {
        type: 'area',
        step: true,
        lineWidth: 0,
        name: 'Long',
        data: [],
        yAxis: 2
    }, {
        type: 'area',
        step: true,
        lineWidth: 0,
        name: 'Short',
        data: [],
        yAxis: 2
    }, {
        type: 'line',
        step: true,
        color: '#5b4b00',
        name: 'Asset',
        data: [],
        yAxis: 3
    }, {
        type: 'pie',
        innerSize: '70%',
        name: 'Random',
        data: [],
        center: ['3%', '6%'],
        size: '15%',
        dataLabels: {
            enabled: false
        },
        startAngle: -90,
        endAngle: 90,
    }],
};            

function main() {
    let c = Chart(chartCfg);
    let preTicker = null;
    while (true) {
        let t = exchange.GetTicker();
        
        c.add(0, [t.Time, t.Last]); // PnL
        c.add(1, [t.Time, preTicker ? t.Last - preTicker.Last : 0]); // profit
        let r = Math.random();
        var pos = parseInt(t.Time/86400);
        c.add(2, [t.Time, pos/2]); // Vol
        c.add(3, [t.Time, r > 0.8 ? pos : null]); // Long
        c.add(4, [t.Time, r < 0.8 ? -pos : null]); // Short
        c.add(5, [t.Time, Math.random() * 100]); // Asset
        // update pie
        chartCfg.series[chartCfg.series.length-1].data = [
            ["A", Math.random()*100],
            ["B", Math.random()*100],
         ];
        c.update(chartCfg)
        preTicker = t;
    }
}
'''backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''            

import random            

chartCfg = {
    "subtitle": {
        "text": "subtitle"
    },
    "yAxis": [{
        "height": "40%",
        "lineWidth": 2,
        "title": {
            "text": 'PnL'
        },
        "tickPixelInterval": 20,
        "minorGridLineWidth": 1,
        "minorTickWidth": 0,
        "opposite": True,
        "labels": {
            "align": "right",
            "x": -3
        }
    }, {
        "title": {
            "text": 'Profit'
        },
        "top": "42%",
        "height": "18%",
        "offset": 0,
        "lineWidth": 2
    }, {
        "title": {
            "text": 'Vol'
        },
        "top": '62%',
        "height": '18%',
        "offset": 0,
        "lineWidth": 2
    }, {
        "title": {
            "text": 'Asset'
        },
        "top": '82%',
        "height": '18%',
        "offset": 0,
        "lineWidth": 2
    }],
    "series": [{
        "name": 'PnL',
        "data": [],
        "id": 'primary',
        "tooltip": {
            "xDateFormat": '%Y-%m-%d %H:%M:%S'
        },
        "yAxis": 0
    }, {
        "type": 'column',
        "lineWidth": 2,
        "name": 'Profit',
        "data": [],
        "yAxis": 1
    }, {
        "type": 'column',
        "name": 'Trade',
        "data": [],
        "yAxis": 2
    }, {
        "type": 'area',
        "step": True,
        "lineWidth": 0,
        "name": 'Long',
        "data": [],
        "yAxis": 2
    }, {
        "type": 'area',
        "step": True,
        "lineWidth": 0,
        "name": 'Short',
        "data": [],
        "yAxis": 2
    }, {
        "type": 'line',
        "step": True,
        "color": '#5b4b00',
        "name": 'Asset',
        "data": [],
        "yAxis": 3
    }, {
        "type": 'pie',
        "innerSize": '70%',
        "name": 'Random',
        "data": [],
        "center": ['3%', '6%'],
        "size": '15%',
        "dataLabels": {
            "enabled": False
        },
        "startAngle": -90,
        "endAngle": 90
    }]
}            

def main():
    c = Chart(chartCfg)
    preTicker = None
    while True:
        t = exchange.GetTicker()
        c.add(0, [t["Time"], t["Last"]])
        profit = t["Last"] - preTicker["Last"] if preTicker else 0
        c.add(1, [t["Time"], profit])
        r = random.random()
        pos = t["Time"] / 86400
        c.add(2, [t["Time"], pos / 2])
        long = pos if r > 0.8 else None
        c.add(3, [t["Time"], long])
        short = -pos if r < 0.8 else None
        c.add(4, [t["Time"], short])
        c.add(5, [t["Time"], random.random() * 100])            

        # update pie
        chartCfg["series"][len(chartCfg["series"]) - 1]["data"] = [
            ["A", random.random() * 100], 
            ["B", random.random() * 100]
        ]
        c.update(chartCfg)
        preTicker = t
/*backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/            

void main() {
    json chartCfg = R"({
        "subtitle": {
            "text": "subtitle"
        },
        "yAxis": [{
            "height": "40%",
            "lineWidth": 2,
            "title": {
                "text": "PnL"
            },
            "tickPixelInterval": 20,
            "minorGridLineWidth": 1,
            "minorTickWidth": 0,
            "opposite": true,
            "labels": {
                "align": "right",
                "x": -3
            }
        }, {
            "title": {
                "text": "Profit"
            },
            "top": "42%",
            "height": "18%",
            "offset": 0,
            "lineWidth": 2
        }, {
            "title": {
                "text": "Vol"
            },
            "top": "62%",
            "height": "18%",
            "offset": 0,
            "lineWidth": 2
        }, {
            "title": {
                "text": "Asset"
            },
            "top": "82%",
            "height": "18%",
            "offset": 0,
            "lineWidth": 2
        }],
        "series": [{
            "name": "PnL",
            "data": [],
            "id": "primary",
            "tooltip": {
                "xDateFormat": "%Y-%m-%d %H:%M:%S"
            },
            "yAxis": 0
        }, {
            "type": "column",
            "lineWidth": 2,
            "name": "Profit",
            "data": [],
            "yAxis": 1
        }, {
            "type": "column",
            "name": "Trade",
            "data": [],
            "yAxis": 2
        }, {
            "type": "area",
            "step": true,
            "lineWidth": 0,
            "name": "Long",
            "data": [],
            "yAxis": 2
        }, {
            "type": "area",
            "step": true,
            "lineWidth": 0,
            "name": "Short",
            "data": [],
            "yAxis": 2
        }, {
            "type": "line",
            "step": true,
            "color": "#5b4b00",
            "name": "Asset",
            "data": [],
            "yAxis": 3
        }, {
            "type": "pie",
            "innerSize": "70%",
            "name": "Random",
            "data": [],
            "center": ["3%", "6%"],
            "size": "15%",
            "dataLabels": {
                "enabled": false
            },
            "startAngle": -90,
            "endAngle": 90
        }]
    })"_json;
    
    Chart c = Chart(chartCfg);
    Ticker preTicker;
    while(true) {
        auto t = exchange.GetTicker();
        c.add(0, {t.Time, t.Last});
        auto profit = preTicker.Valid ? t.Last - preTicker.Last : 0;
        c.add(1, {t.Time, profit});    
        auto r = rand() % 100;
        auto pos = t.Time / 86400.0;
        c.add(2, {t.Time, pos / 2.0});
        auto longPos = r > 0.8 ? pos : NULL;
        c.add(3, {t.Time, longPos});
        auto shortPos = r < 0.8 ? -pos : NULL;
        c.add(4, {t.Time, shortPos});
        c.add(5, {t.Time, rand() % 100});
        
        // update pie 
        json pie = R"([["A", 0], ["B", 0]])"_json;
        pie[0][1] = rand() % 100;
        pie[1][1] = rand() % 100;
        chartCfg["series"][chartCfg["series"].size() - 1]["data"] = pie;
        
        c.update(chartCfg);
        preTicker = t;
    }
}            

Contoh kompleks penggunaan carta hibrid:

// update pie
chartCfg.series[chartCfg.series.length-1].data = [
    ["A", Math.random()*100],
    ["B", Math.random()*100],
];
c.update(chartCfg)
# update pie
chartCfg["series"][len(chartCfg["series"]) - 1]["data"] = [
    ["A", random.random() * 100], 
    ["B", random.random() * 100]
]
c.update(chartCfg)
// update pie 
json pie = R"([["A", 0], ["B", 0]])"_json;
pie[0][1] = rand() % 100;
pie[1][1] = rand() % 100;
chartCfg["series"][chartCfg["series"].size() - 1]["data"] = pie;
c.update(chartCfg);

Carta jenispieadalah carta tanpa garis masa, dan anda perlu mengemas kini konfigurasi carta terus apabila mengemas kini data.c.update(chartCfg)selepas mengemas kini data, seperti berikut:

PeraturanChart()fungsi mengembalikan objek carta yang mempunyai 4 kaedah:add(), reset(), update(), del().

    1. Peraturanupdate()kaedah: Peraturanupdate()Metod ini boleh mengemas kini maklumat konfigurasi carta. Parameter kaedah ini adalah objek konfigurasi carta (JSON).
    1. Peraturandel()kaedah: Peraturandel()kaedah boleh memadam siri data indeks yang ditentukan berdasarkan parameter siri yang dilewatkan.
    1. Peraturanadd()kaedah: Peraturanadd()kaedah boleh menulis data ke carta, dengan parameter berikut dalam urutan:
    • series: digunakan untuk menetapkan indeks siri data, yang merupakan bilangan bulat.
    • data: digunakan untuk menetapkan data tertentu untuk ditulis, ia adalah array.
    • index(pilihan): digunakan untuk menetapkan indeks data, ia adalah bilangan bulat.-1merujuk kepada data terakhir dalam set data. Sebagai contoh, apabila melukis garis, ubah data pada titik terakhir garis:chart.add(0, [1574993606000, 13.5], -1), iaitu, menukar data pada titik pertama penultimate cartaseries[0].data. Peraturanindexparameter tidak ditetapkan, yang bermaksud bahawa data ditambahkan ke titik terakhir siri data semasa.
    1. Peraturanreset()kaedah: Peraturanreset()Kaedah ini digunakan untuk mengosongkan data carta.reset()kaedah boleh mengambil parameterremainuntuk menentukan bilangan entri untuk menyimpan. Tiada parameterremaintelah diteruskan untuk membersihkan semua data.

{@fun/Log/KLineChart KLineChart}

KLineChart

Fungsi ini digunakan untuk lukisan tersuai pada strategi runtime menggunakan kaedah lukisan yang serupa denganPine language.

Objek carta.KLineChart()fungsi mengembalikan objek carta dengan beberapa kaedah, di antaranya anda perlu memberi perhatian kepadabegin()danclose()Operasi lukisan mesti bermula denganbegin()panggilan fungsi dan berakhir denganclose()panggilan fungsi apabila melintasi data KLine untuk melakukan operasi lukisan. objek

KLineChart (pilihan)

Peraturanoptionsparameter adalah konfigurasi carta. pilihan betul objek, barisan objek

function main() {
    // Call the KLineChart function to create a chart control object c
    let c = KLineChart({
        overlay: true
    })            

    // Use the Spot Exchange object test to get K-line data. If you use the futures exchange object test, you need to set up the contract first.
    let bars = exchange.GetRecords()
    if (!bars) {
        return
    }            
    
    // Execute the drawing operation by traversing over the K-line data. The drawing operation must start with the ```c.begin(bar)``` function call and end with the ```c.close()``` function call.
    bars.forEach(function(bar, index) {
        c.begin(bar)
        c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)')
        if (bar.Close > bar.Open) {
            c.bgcolor('rgba(0, 255, 0, 0.5)')
        }
        let h = c.plot(bar.High, 'high')
        let l = c.plot(bar.Low, 'low')            

        c.fill(h, l, {
            color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'
        })
        c.hline(bar.High)
        c.plotarrow(bar.Close - bar.Open)
        c.plotshape(bar.Low, {
            style: 'diamond'
        })
        c.plotchar(bar.Close, {
            char: 'X'
        })
        c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
        if (bar.Close > bar.Open) {
            // long/short/closelong/closeshort
            c.signal("long", bar.High, 1.5)
        } else if (bar.Close < bar.Open) {
            c.signal("closelong", bar.Low, 1.5)
        }
        c.close()
    })
}
def main():
    # Call the KLineChart function to create a chart control object c
    c = KLineChart({
        "overlay": True
    })            

    # Use the Spot Exchange object test to get K-line data. If you use the futures exchange object test, you need to set up the contract first.
    bars = exchange.GetRecords()
    if not bars:
        return            

    for bar in bars:
        c.begin(bar)
        c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')
        if bar.Close > bar.Open:
            c.bgcolor('rgba(0, 255, 0, 0.5)')            

        h = c.plot(bar.High, 'high')
        l = c.plot(bar.Low, 'low')            

        c.fill(h, l, 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)')
        c.hline(bar.High)
        c.plotarrow(bar.Close - bar.Open)        
        c.plotshape(bar.Low, style = 'diamond')
        c.plotchar(bar.Close, char = 'X')
        c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
        if bar.Close > bar.Open:
            # long/short/closelong/closeshort
            c.signal("long", bar.High, 1.5)
        elif bar.Close < bar.Open:
            c.signal("closelong", bar.Low, 1.5)            

        c.close()
// Not supported for now

Jika objek kawalan carta diperlukan untuk menarik di kawasan lukisan adat strategi, gunakanKLineChart()fungsi untuk mencipta objek. Parameter kepadaKLineChart()fungsi adalah struktur konfigurasi carta, yang digunakan dalam kod rujukan adalah mudah:{overlay: true}. Struktur konfigurasi carta ini hanya menetapkan kandungan lukisan untuk output pada carta utama.overlayditetapkan kepada nilai palsu, contohnyafalseJika anda perlu menentukan fungsi lukisan untuk menarik pada carta utama, anda juga boleh menentukan parameteroverlaysebagai nilai sebenar dalam panggilan fungsi tertentu, contohnya:true.

c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)')   // Use the example illustrated in the reference code in this example, without further ado
c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')
//  Not supported for now

Fungsi antara muka lukisanPineBahasa yang disokong dalam operasi penggambaran adalah:barcolor, yang menetapkan warna K-garis.

barcolor ((warna, offset, boleh diedit, show_last, tajuk, paparan) Parameter paparan adalah pilihan: tidak ada, semua

c.bgcolor('rgba(0, 255, 0, 0.5)')
c.bgcolor('rgba(0, 255, 0, 0.5)')
// Not supported for now

bgcolor, mengisi latar belakang K-garis dengan warna yang ditentukan.

bgcolor ((warna, offset, boleh diedit, show_last, tajuk, paparan, overlay) Parameter paparan adalah pilihan: tidak ada, semua

c.plot(bar.High, 'high')
c.plot(bar.Open < bar.Close ? NaN : bar.Close, "Close", {style: "linebr"})  // Support for drawing discontinuous data lines
h = c.plot(bar.High, 'high')
h = c.plot(None if bar.Open < bar.Close else bar.Close, "Close", style = "linebr")  # Support for drawing discontinuous data lines
// Not supported for now

plot, merangka siri data pada carta.

plot ((seri, tajuk, warna, lebar baris, gaya, trackprice, histbase, offset, join, boleh diedit, show_last, display) parameter gaya adalah pilihan: stepline_diamond, stepline, cross, areabr, area, circles, columns, histogram, linebr, line Parameter paparan adalah pilihan: tidak ada, semua

let h = c.plot(bar.High, 'high')
let l = c.plot(bar.Low, 'low')

c.fill(h, l, {color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'})
h = c.plot(bar.High, 'high')
l = c.plot(bar.Low, 'low')

c.fill(h, l, color = 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)'})
// Not supported for now

fill, mengisi latar belakang di antara dua plot atauhlinedengan warna yang disediakan.

isi ((haline1, hline2, warna, tajuk, boleh diedit, mengisi kekosongan, paparan) Parameter paparan adalah pilihan: tidak ada, semua

SejakJavaScriptbahasa tidak boleh menentukan parameter masuk berdasarkan nama parameter formal fungsi, untuk menyelesaikan masalah ini, anda boleh menggunakan{key: value}struktur untuk menentukan parameter yang akan diteruskan kepada nama parameter rasmi tertentu. Sebagai contoh, kod rujukan menggunakan{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)'}Menentukancolorparameterfillfungsi. Jika anda perlu menentukan beberapa parameter dengan nama parameter bentuk berturut-turut, anda boleh menggunakan{key1: value1, key2: value2, key3: value3}. Sebagai contoh, dalam contoh ini, tambahantitleparameter ditentukan:{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)', title: 'fill'}. Untuk nilai warna, anda boleh menetapkannya dengan'rgba(255, 0, 0, 0, 0.2)'atau dengan'#FF0000'.

c.hline(bar.High)
c.hline(bar.High)
// Not supported for now

hline, garis mendatar ditunjukkan pada tahap harga tetap yang diberikan.

hline ((harga, tajuk, warna, gaya baris, lebar baris, boleh diedit, paparan) Parameter gaya garis adalah pilihan: berdaun, bertitik, padat Parameter paparan adalah pilihan: tidak ada, semua

c.plotarrow(bar.Close - bar.Open)
c.plotarrow(bar.Close - bar.Open)
// Not supported for now

plotarrow, merangkumi anak panah ke atas dan ke bawah pada carta.

Plotarrow ((seri, tajuk, colorup, colorordown, offset, minheight, maxheight, boleh diedit, show_last, display) Parameter paparan adalah pilihan: tidak ada, semua

c.plotshape(bar.Low, {style: 'diamond'})
c.plotshape(bar.Low, style = 'diamond')
// Not supported for now

plotshape, lukis bentuk visual pada carta.

plotshape ((seri, tajuk, gaya, lokasi, warna, offset, teks, textcolor, boleh diedit, saiz, show_last, paparan) parameter gaya adalah pilihan: diamond, square, label_down, label_up, arrow_down, arrow_up, circle, flag, triangle_down, triangle_up, cross, xcross Parameter lokasi adalah pilihan: bar atas, bar bawah, top, bottom, absolute parameter saiz adalah pilihan: 10px, 14px, 20px, 40px, 80px, membandingkan saiz.kecil, saiz.kecil, saiz.normal, saiz.besar, saiz.besar dalam bahasa Pine.size.autoadalah saiz kecil. Parameter paparan adalah pilihan: tidak ada, semua

c.plotchar(bar.Close, {char: 'X'})
c.plotchar(bar.Close, char = 'X')
// Not supported for now

plotchar, lukis bentuk visual pada carta menggunakan mana-mana watak Unicode yang diberikan.

plotchar ((seri, tajuk, char, lokasi, warna, offset, teks, warna teks, boleh diedit, saiz, show_last, paparan) parameter lokasi adalah pilihan: abovebar, belowbar, top, bottom, absolute parameter saiz adalah pilihan: 10px, 14px, 20px, 40px, 80px, membandingkan saiz.kecil, saiz.kecil, saiz.normal, saiz.besar, saiz.besar dalam bahasa Pine.size.autoadalah saiz kecil. Parameter paparan adalah pilihan: tidak ada, semua

c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
// Not supported for now

plotcandle, merangka carta garis K pada carta.

plotcandle ((buka, tinggi, rendah, dekat, tajuk, warna, wickcolor, boleh diedit, show_last, bordercolor, paparan) Parameter paparan adalah pilihan: tidak ada, semua

c.signal("long", bar.High, 1.5)
c.signal("long", bar.High, 1.5)
// Not supported for now

signal, fungsi yang tidak tersedia pada bahasa Pine, digunakan untuk menarik isyarat beli dan jual di sini.

isyarat ((arah, harga, qty, id) Parameter long dihantar untuk menunjukkan arah transaksi, anda boleh memilih long, closelong, short, closeshort.bar.Highadalah kedudukan paksi Y isyarat penanda. Parameter 1.5 yang dilewatkan menunjukkan bilangan transaksi isyarat. Parameter keempat boleh dilewatkan untuk menggantikan kandungan teks lalai yang digambar, dan teks lalai penanda isyarat yang digambar adalah arah transaksi, contohnya closelong.

c.reset()
c.reset()
// Not supported for now

reset, fungsi yang tidak tersedia pada bahasa Pine, digunakan untuk mengosongkan data carta.

Tetapkan semula (tetap) Peraturanreset()kaedah boleh mengambil satu parameter,remain, untuk menentukan jumlah data yang perlu disimpan.remainbermakna membasmi semua data.

Strategy imej tersuai hanya boleh menggunakan salah satu caraKLineChart()fungsi atauChart()Untuk beberapa warna dan gaya tetapan yang digunakan dalamKLineChart()panggilan fungsi, sila rujuk kepadaGunakan fungsi KLineChart untuk membuat reka bentuk lukisan strategi lebih mudah.

{@fun/Log/Chart Chart}

LogReset

Hapuskan log.

LogReset ((bertahan)

PeraturanremainParameter digunakan untuk menetapkan bilangan entri log baru-baru ini untuk disimpan. kekal palsu nombor

function main() {
    // Keep the last 10 logs and clear the rest
    LogReset(10)     
}
def main():
    LogReset(10)
void main() {
    LogReset(10);
}

Log permulaan untuk setiap permulaan strategi perdagangan langsung dikira sebagai satu, jadi jika tidak ada parameter yang diteruskan dan tidak ada output log pada permulaan strategi, tidak ada log akan dipaparkan sama sekali, menunggu log docker dikembalikan (bukan pengecualian).

{@fun/Log Log}, {@fun/Log/LogVacuum LogVacuum}

LogVacuum

Digunakan untuk memulihkan ruang simpanan yang diduduki olehSQLiteapabila memadam data selepas memanggilLogReset()Fungsi untuk membersihkan log.

LogVacuum ((()

function main() {
    LogReset()
    LogVacuum()
}
def main():
    LogReset()
    LogVacuum()
void main() {
    LogReset()
    LogVacuum()
}

Sebabnya ialahSQLitetidak mengambil semula ruang yang diduduki apabila memadam data, dan ia perlu menjalankanVACUUMuntuk membersihkan jadual dan membebaskan ruang. operasi pemindahan fail berlaku apabila fungsi ini dipanggil, dan kelewatan adalah besar, jadi ia adalah disyorkan untuk memanggil pada selang masa yang sesuai.

{@fun/Log/LogReset LogReset}

console.log

Ia digunakan untuk mengeluarkan maklumat debugging dalam lajur debug information dalam halaman perdagangan langsung.123456, yangconsole.logoutput fungsi debugging maklumat pada halaman perdagangan hidup, dan pada masa yang sama, membuat fail log dengan sambungan.logdan menulis maklumat debugging dalam/logs/storage/123456/dalam direktori pelabuhan yang mana perdagangan hidup milik, dengan awalan nama failstdout_.

Console.log ((...msgs)

Parametermsgadalah kandungan output, dan parametermsgboleh lulus lebih daripada satu. msg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong oleh sistem.

function main() {
    console.log("test console.log")
}
# Not supported
// Not supported
  • HanyaJavaScriptBahasa menyokong fungsi ini.
  • Fungsi ini hanya disokong oleh perdagangan langsung, tetapi tidak oleh Debugging Tools atau Backtesting System.
  • Output objek ditukar kepada rentetan[object Object], jadi cuba output sebanyak mungkin maklumat yang boleh dibaca.

{@fun/Log/console.errorconsole.error}

console.error

Digunakan untuk output ralat dalam medan Debug message pada halaman dagangan langsung.123456, yangconsole.errorfungsi mencipta fail log dengan sambungan.logdalam/logs/storage/123456/direktori docker di mana perdagangan hidup milik, dan menulis output ralat dengan awalanstderr_.

Console.error ((...msgs)

Parametermsgadalah kandungan output, dan parametermsgboleh lulus lebih daripada satu. msg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong oleh sistem.

function main() {
    console.error("test console.error")
}
# Not supported
// Not supported
  • HanyaJavaScriptBahasa menyokong fungsi ini.
  • Fungsi ini hanya disokong oleh perdagangan langsung, tetapi tidak oleh Debugging Tools atau Backtesting System.
  • Output objek ditukar kepada rentetan[object Object], jadi cuba output sebanyak mungkin maklumat yang boleh dibaca.

{@fun/Log/console.log konsol.log}

Pasaran

exchange.GetTicker

Dapatkan struktur {@struct/Ticker Ticker} tempat atau kontrak yang sepadan dengan pasangan dagangan yang ditetapkan semasa, kod kontrak, iaitu data ticker.GetTicker ()fungsi adalah fungsi ahli objek pertukaran {@var/EXCHANGE pertukaran}, penggunaanexchangefungsi anggota objek (metod) hanya berkaitan denganexchange, dan ia tidak akan diulangi dalam dokumen.

Peraturanexchange.GetTicker()fungsi mengembalikan struktur {@struct/Ticker Ticker} apabila permintaan data berjaya, dan mengembalikan nilai null apabila permintaan data gagal. {@struct/Ticker Ticker}, nilai sifar

pertukaran.GetTicker() pertukaran.GetTicker ((simbol)

Parametersymboldigunakan untuk menentukan pasangan dagangan dan kod kontrak tertentu yang sepadan dengan data {@struct/Ticker Ticker} yang diminta. Jika parameter ini tidak diteruskan, data pasaran pasangan dagangan dan kod kontrak yang ditetapkan pada masa ini akan diminta secara lalai. Apabila memanggilexchange.GetTicker(symbol)fungsi,exchangeadalah objek pertukaran segera. Jika anda perlu meminta data pasaran dengan mata wang denominasi sebagai USDT dan mata wang perdagangan sebagai BTC, parametersymbolialah:"BTC_USDT", dan formatnya adalah format pasangan dagangan yang ditakrifkan oleh platform FMZ. Apabila memanggilexchange.GetTicker(symbol)fungsi,exchangeadalah objek pertukaran niaga hadapan. Jika anda perlu meminta data pasaran kontrak kekal standard U BTC, parametersymbolialah:"BTC_USDT.swap", dan formatnya adalah gabunganPasangan dagangandanKod kontrakyang ditakrifkan oleh platform FMZ, dipisahkan oleh watak .. Apabila memanggilexchange.GetTicker(symbol)fungsi,exchangeadalah objek pertukaran niaga hadapan. Jika anda perlu meminta data pasaran kontrak pilihan standard U BTC, parametersymbolialah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), format adalah gabunganPasangan daganganyang ditakrifkan oleh platform FMZ dan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, dipisahkan oleh watak ..

simbol palsu senar

function main(){
    // If it is a futures exchange object, set the contract code first, e.g. set it as a perpetual contract
    // exchange.SetContractType("swap")

    var ticker = exchange.GetTicker()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, the ticker is null, and it will cause an error when accessing ticker.High, so when testing this code, make sure that the exchange interface can be accessed.
    */
    Log("Symbol:", ticker.Symbol, "High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Open:", ticker.Open, "Volume:", ticker.Volume)
}
def main():
    ticker = exchange.GetTicker()
    Log("Symbol:", ticker["Symbol"], "High:", ticker["High"], "Low:", ticker["Low"], "Sell:", ticker["Sell"], "Buy:", ticker["Buy"], "Last:", ticker["Last"], "Open:", ticker.Open, "Volume:", ticker["Volume"])
void main() {
    auto ticker = exchange.GetTicker();
    Log("Symbol:", ticker.Symbol, "High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Open:", ticker.Open, "Volume:", ticker.Volume);
}

Untuk objek pertukaran niaga hadapan (iaitu,exchangeatauexchanges[0]), anda perlu menetapkan kod kontrak menggunakanexchange.SetContractType()fungsi sebelum memanggil fungsi ticker, yang tidak akan diulangi.

function main() {
    var ticker = exchange.GetTicker("BTC_USDT")
    Log(ticker)
}
def main():
    ticker = exchange.GetTicker("BTC_USDT")
    Log(ticker)
void main() {
    auto ticker = exchange.GetTicker("BTC_USDT");
    Log(ticker);
}

Gunakansymbolparameter untuk meminta data pasaran untuk simbol tertentu (simbol spot).

PeraturanTickerdata yang dikembalikan olehexchange.GetTicker()fungsi dalam sistem backtesting.HighdanLowadalah nilai simulasi, diambil daripada satu jual dan membeli satu pasaran pada masa itu.Tickerdata yang dikembalikan olehexchange.GetTicker()di mana mereka tidak mempunyai fungsi dalam pasaran sebenar.HighdanLownilai adalah berdasarkan data yang dikembalikan oleh pertukaran terkapasTickantara muka, yang merangkumi harga tertinggi dan terendah dalam tempoh tertentu (biasanya tempoh 24 jam). Bursa yang tidak menyokongexchange.GetTicker()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetTicker Futures_Aevo

{@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.GetRecords exchange.GetRecords}, {@fun/Market/exchange.GetTickers exchange.GetTickers}

exchange.GetDepth

Dapatkan struktur {@struct/Depth Depth} tempat atau kontrak yang sepadan dengan pasangan dagangan yang ditetapkan pada masa ini, kod kontrak, iaitu data buku pesanan.

Peraturanexchange.GetDepth()fungsi mengembalikan struktur {@struct/Depth Depth} jika permintaan data berjaya, dan ia mengembalikan null jika permintaan data gagal. {@struct/Depth Depth}, nilai sifar

pertukaran.GetDepth() pertukaran.GetDepth ((simbol)

Parametersymboldigunakan untuk menentukan pasangan dagangan tertentu dan kod kontrak yang sepadan dengan data {@struct/Depth Depth} yang diminta. Jika parameter ini tidak diteruskan, data buku pesanan pasangan dagangan yang ditetapkan dan kod kontrak akan diminta secara lalai.exchange.GetDepth(symbol)fungsi,exchangeadalah objek pertukaran spot. Jika anda perlu meminta untuk mendapatkan data buku pesanan dengan mata wang yang diisytiharkan sebagai USDT dan mata wang transaksi sebagai BTC, parametersymbolialah:"BTC_USDT", dan format adalah format pasangan dagangan yang ditakrifkan oleh platform FMZ.exchange.GetDepth(symbol)fungsi,exchangeadalah objek pertukaran niaga hadapan. Jika anda perlu meminta data buku pesanan kontrak kekal standard U BTC, parametersymbolialah:"BTC_USDT.swap", dan formatnya adalah gabunganPasangan dagangandanKod kontrakditakrifkan oleh platform FMZ, dipisahkan oleh watak ..exchange.GetDepth(symbol)fungsi,exchangeadalah objek pertukaran niaga hadapan. Jika anda perlu meminta data buku pesanan kontrak pilihan standard U BTC, parametersymbolialah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), format adalah gabunganPasangan daganganyang ditakrifkan oleh platform FMZ dan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, dipisahkan oleh watak .. lambang palsu senar

function main(){
    var depth = exchange.GetDepth()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, the depth is null, which will cause an error when accessing depth.Asks[1].Price, so make sure you can access the exchange interface when testing the code.
    */
    var price = depth.Asks[1].Price
    Log("Sell 2 price is:", price)
}
def main():
    depth = exchange.GetDepth()
    price = depth["Asks"][1]["Price"]
    Log("Sell 2 price is:", price)
void main() {
    auto depth = exchange.GetDepth();
    auto price = depth.Asks[1].Price;
    Log("Sell 2 price is:", price);
}

Ujianexchange.GetDepth()fungsi:

function main() {
    // BTC U-based perpetual contract
    var depth = exchange.GetDepth("BTC_USDT.swap")
    Log(depth)
}
def main():
    depth = exchange.GetDepth("BTC_USDT.swap")
    Log(depth)
void main() {
    auto depth = exchange.GetDepth("BTC_USDT.swap");
    Log(depth);
}

Apabila konfigurasiexchangeobjek adalah objek pertukaran niaga hadapan, menggunakansymbolparameter untuk meminta data buku pesanan simbol tertentu (simbol masa hadapan).

Dalam sistem backtesting, data untuk setiap gred dikembalikan olehexchange.GetDepth()fungsi apabila menggunakanMeniru Tickdalam sistem backtesting, data yang dikembalikan olehexchange.GetDepth()fungsi apabila menggunakanTick sebenarUjian balik adalah gambar mendalam peringkat kedua.

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.GetRecords exchange.GetRecords}

exchange.GetTrades

Dapatkan array struktur {@struct/Trade Trade} tempat atau kontrak yang sepadan dengan pasangan dagangan yang ditetapkan pada masa ini, kod kontrak, iaitu data urus niaga pasaran.

Peraturanexchange.GetTrades()fungsi mengembalikan pelbagai struktur {@struct/Trade Trade} jika permintaan data berjaya, dan ia mengembalikan nilai sifar jika permintaan data gagal. {@struct/Trade Trade} array, nilai sifar

pertukaran.GetTrades() pertukaran.GetTrades ((simbol)

Parametersymboldigunakan untuk menentukan pasangan dagangan dan kod kontrak tertentu yang sepadan dengan data array {@struct/Trade Trade} yang diminta. Jika parameter ini tidak diteruskan, data rekod transaksi terkini pasangan dagangan dan kod kontrak yang ditetapkan pada masa ini akan diminta secara lalai.exchange.GetTrades(symbol)fungsi,exchangeJika anda perlu meminta untuk mendapatkan data buku pesanan dengan mata wang yang diisytiharkan sebagai USDT dan mata wang dagangan sebagai BTC, parametersymbolialah:"BTC_USDT", dan format adalah format pasangan dagangan yang ditakrifkan oleh platform FMZ.exchange.GetTrades(symbol)fungsi,exchangeadalah objek pertukaran niaga hadapan. Jika anda perlu meminta data buku pesanan kontrak kekal standard U BTC, parametersymbolialah:"BTC_USDT.swap", dan formatnya adalah gabunganPasangan dagangandanKod kontrakditakrifkan oleh platform FMZ, dipisahkan oleh watak ..exchange.GetTrades(symbol)fungsi,exchangeadalah objek pertukaran niaga hadapan. Jika anda perlu meminta data buku pesanan kontrak pilihan standard U BTC, parametersymbolialah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), format adalah gabunganPasangan daganganyang ditakrifkan oleh platform FMZ dan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, dipisahkan oleh watak .. lambang palsu senar

function main(){
    var trades = exchange.GetTrades()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, trade is null. When accessing trade[0].Id, it will cause an error. Therefore, when testing this code, ensure that you can access the exchange interface.
    */
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type)
}
def main():
    trades = exchange.GetTrades()
    Log("id:", trades[0]["Id"], "time:", trades[0]["Time"], "Price:", trades[0]["Price"], "Amount:", trades[0]["Amount"], "type:", trades[0]["Type"])
void main() {
    auto trades = exchange.GetTrades();
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type);
}

Ujiexchange.GetTrades()fungsi:

function main() {
    // BTC's U-based perpetual contract
    var trades = exchange.GetTrades("BTC_USDT.swap")
    Log(trades)
}
def main():
    trades = exchange.GetTrades("BTC_USDT.swap")
    Log(trades)
void main() {
    auto trades = exchange.GetTrades("BTC_USDT.swap");
    Log(trades);
}

Apabila konfigurasiexchangeobjek adalah objek pertukaran niaga hadapan, menggunakansymbolparameter untuk meminta data rekod transaksi pasaran untuk simbol tertentu (simbol niaga hadapan).

exchange.GetTrades()fungsi untuk mendapatkan pasangan dagangan semasa, sejarah transaksi pasaran (bukan mereka sendiri) yang sepadan dengan kontrak. Sesetengah pertukaran tidak menyokong fungsi ini, dan data tertentu yang dikembalikan adalah berapa banyak daripada julat rekod transaksi bergantung pada pertukaran dan perlu ditangani mengikut keadaan tertentu.exchange.GetRecords ()fungsi mengembalikan urutan data yang sama, iaitu, elemen terakhir array adalah data yang paling dekat dengan masa semasa. Perkhidmatanexchange.GetTrades()fungsi mengembalikan array kosong apabila menggunakanMeniru Tickdata yang dikembalikan oleh sistemexchange.GetTrades()fungsi apabila digunakanTick sebenarbacktesting dalam sistem backtesting adalah data snapshot aliran pesanan, iaitu array struktur {@struct/Trade Trade}. Bursa yang tidak menyokongexchange.GetTrades()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetTrades Futures_BitMart / Futures_Bibox

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetRecords exchange.GetRecords}

exchange.GetRecords

Dapatkan array struktur {@struct/Record Record} tempat atau kontrak yang sepadan dengan pasangan dagangan yang ditetapkan pada masa ini, kod kontrak, iaitu data K-line.

Peraturanexchange.GetRecords()fungsi mengembalikan pelbagai struktur {@struct/Record Record} apabila permintaan data berjaya, dan ia mengembalikan nilai sifar apabila permintaan data gagal. {@struct/Record Record} array, nilai sifar

pertukaran.GetRecords() pertukaran.GetRecords ((simbol) pertukaran.GetRecords ((simbol, titik) pertukaran.GetRecords ((simbol, tempoh, had) pertukaran.GetRecords ((periode) pertukaran.GetRecords ((periode, had)

Parametersymboldigunakan untuk menentukan pasangan dagangan dan kod kontrak tertentu yang sepadan dengan data array {@struct/Record Record} yang diminta. Jika parameter ini tidak diteruskan, data K-line pasangan dagangan dan kod kontrak yang ditetapkan pada masa ini akan diminta secara lalai.exchange.GetRecords(symbol)fungsi,exchangeadalah objek pertukaran segera. Jika anda perlu meminta untuk mendapatkan data dengan mata wang yang diisytiharkan sebagai USDT dan mata wang transaksi sebagai BTC, parametersymbolialah:"BTC_USDT", dan format adalah format pasangan dagangan yang ditakrifkan oleh platform FMZ.exchange.GetRecords(symbol)fungsi,exchangeadalah objek pertukaran niaga hadapan. Jika anda perlu meminta data buku pesanan kontrak kekal standard U BTC, parametersymbolialah:"BTC_USDT.swap", dan formatnya adalah gabunganPasangan dagangandanKod kontrakditakrifkan oleh platform FMZ, dipisahkan oleh watak ..exchange.GetRecords(symbol)fungsi,exchangeadalah objek pertukaran niaga hadapan. Jika anda perlu meminta data buku pesanan kontrak pilihan standard U BTC, parametersymbolialah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), format adalah gabunganPasangan daganganyang ditakrifkan oleh platform FMZ dan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, dipisahkan oleh watak .. lambang palsu senar Parameterperiodmenentukan tempoh data garis K yang diminta, contohnya: {@var/PERIOD/PERIOD_M1 PERIOD_M1}, {@var/PERIOD/PERIOD_M5 PERIOD_M5}, {@var/PERIOD/PERIOD_M15 PERIOD_M15}, dan lain-lain. Nilai parameterperiodboleh dilalui bukan sahaja tempoh standard yang ditakrifkan, tetapi juga nilai bulat dalam saat. Jika parameter ini tidak dilalui, tempoh data K-garis yang diminta secara lalai adalah tempoh K-garis lalai konfigurasi masa nyata / backtest strategi semasa. tempoh palsu nombor Parameterlimitdigunakan untuk menentukan panjang data K-line yang diminta. Jika parameter ini tidak dilewatkan, panjang permintaan lalai adalah bilangan bar K-line maksimum yang diminta pada satu masa antara muka pertukaran K-line. Parameter ini boleh menyebabkan paging untuk menyoal data pertukaran K-line, dan penggunaan masa panggilan fungsi akan meningkat semasa pertanyaan paging. had palsu nombor

function main() {
    // Print K-line data with a K-line period of 120 seconds (2 minutes)
    Log(exchange.GetRecords(60 * 2))         
    // Print K-line data with a K-line period of 5 minutes
    Log(exchange.GetRecords(PERIOD_M5))      
}
def main():
    Log(exchange.GetRecords(60 * 2))
    Log(exchange.GetRecords(PERIOD_M5))
void main() {
    Log(exchange.GetRecords(60 * 2)[0]);
    Log(exchange.GetRecords(PERIOD_M5)[0]);
}

Dapatkan data K-line untuk tempoh khusus.

function main() {
    var records = exchange.GetRecords(PERIOD_H1)
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, records is null. When accessing records[0].Time, it will cause an error. Therefore, when testing this code, ensure that you can access the exchange interface.
    */
    Log("The first k-line data is Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High)
    Log("The second k-line data is Time:", records[1].Time ,"Close:", records[1].Close)
    Log("Current K-line (latest)", records[records.length-1], "Previous K-line", records[records.length-2])
}
def main():
    records = exchange.GetRecords(PERIOD_H1)
    Log("The first k-line data is Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"])
    Log("The second k-line data Time:", records[1]["Time"], "Close:", records[1]["Close"])
    Log("Current K-line (latest)", records[-1], "Previous K-line", records[-2])
void main() {
    auto records = exchange.GetRecords(PERIOD_H1);
    Log("The first k-line data is Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High);
    Log("The second k-line data Time:", records[1].Time, "Close:", records[1].Close);
    Log("Current K-line (latest)", records[records.size() - 1], "Previous K-line", records[records.size() - 2]);
}

Data bar K-line output:

function main() {
    var records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
    Log(records)
}
def main():
    records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
    Log(records)
void main() {
    auto records = exchange.GetRecords("BTC_USDT.swap", 60, 100);
    Log(records);
}

Apabila konfigurasiexchangeobjek adalah objek pertukaran niaga hadapan, menggunakansymbol, period, danlimitparameter untuk meminta data K-line produk tertentu (produk masa depan).

Tempoh K-garis lalai boleh ditetapkan di halaman backtest dan perdagangan sebenar.exchange.GetRecords()Jika tiada parameter ditentukan apabila fungsi dipanggil, data K-line yang sepadan akan dikembalikan mengikut tempoh K-line yang ditetapkan dalam backtest dan parameter pasaran sebenar. Nilai pulangan adalah pelbagaiRecordstruktur, data K-garis yang dikembalikan akan terkumpul dari masa ke masa, had atas bar K-garis terkumpul dipengaruhi olehexchange.SetMaxBarLen()Peraturan fungsi. had lalai adalah 5000 bar apabila ia tidak ditetapkan. Apabila data K-line mencapai had pengumpulan bar K-line, ia akan dikemas kini dengan menambah bar K-line dan memadam bar K-line terdahulu (contohnya antrian masuk/keluar).Tradearray terstruktur) dalam masa nyata untuk menjana K-garis. Jika antara muka K-line pertukaran menyokong pertanyaan paging, pelbagai permintaan API akan dibuat apabila memanggilexchange.SetMaxBarLen()fungsi untuk menetapkan panjang garis K yang lebih besar. Apabilaexchange.GetRecords()fungsi dipanggil pada mulanya, bilangan bar K-garis yang diperoleh berbeza antara backtesting dan perdagangan sebenar: - Sistem backtesting akan memperoleh sejumlah bar K-garis sebelum permulaan julat masa backtesting terlebih dahulu (patuhan adalah 5000, tetapan sistem backtesting dan jumlah data akan mempengaruhi nombor akhir yang dikembalikan), sebagai data K-garis awal. - Bilangan bar K-garis yang diperoleh semasa perdagangan sebenar adalah berdasarkan jumlah maksimum data yang boleh diperoleh dari antara muka K-garis bursa. Perkhidmatanperiodparameter ditetapkan kepada 5, yang merupakan permintaan untuk mendapatkan data K-garis dengan tempoh 5 saat.periodParameter tidak boleh dibahagikan dengan 60 (iaitu, tempoh yang diwakili tidak boleh dibahagikan dengan minit).exchange.GetTrades()untuk mendapatkan data rekod transaksi dan meringkas data K-line yang diperlukan.periodparameter boleh dibahagikan dengan 60, maka data garis K yang diperlukan disintesis menggunakan data garis K sekurang-kurangnya 1 minit (jika mungkin, data garis K yang diperlukan disintesis menggunakan tempoh yang lebih besar). Pengujian balik tahap simulasi dalam sistem pengujian balik memerlukan tetapan tempoh K-garis asas (apabila sistem pengujian balik mensimulasikan pengujian balik tahap, data K-garis yang sesuai digunakan untuk menjana data Tick mengikut tempoh K-garis asas yang ditetapkan). Perlu diperhatikan bahawa tempoh data K-garis yang diperoleh dalam strategi tidak boleh lebih kecil daripada tempoh K-garis asas. Kerana dalam pengujian balik tahap simulasi, data K-garis setiap tempoh dalam sistem pengujian balik disintesis dari data K-garis tempoh K-garis asas. PerkhidmatanC++bahasa mempunyai contoh kod berikut jika anda perlu membina data K-garis anda sendiri:

#include <sstream>
void main() { 
    Records r;
    r.Valid = true;
    for (auto i = 0; i < 10; i++) {
        Record ele;
        ele.Time = i * 100000;
        ele.High = i * 10000;
        ele.Low = i * 1000;
        ele.Close = i * 100;
        ele.Open = i * 10;
        ele.Volume = i * 1;
        r.push_back(ele);
    }
    // Output display: Records[10]
    Log(r);                      
    auto ma = TA.MA(r,10);       
    // Output display: [nan,nan,nan,nan,nan,nan,nan,nan,nan,450]
    Log(ma);                     
}

Bursa yang tidak menyokongexchange.GetRecords()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetRecords Zaif / Coincheck / BitFlyer Futures_Aevo

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.SetMaxBarLen exchange.SetMaxBarLen}

exchange.GetPeriod

Dapatkan tempoh K-garis ditetapkan pada halaman laman web platform FMZ Quant Trading apabila backtesting dan menjalankan strategi dalam perdagangan langsung, iaitu tempoh K-garis lalai yang digunakan apabila memanggilexchange.GetRecords()berfungsi tanpa lulus parameter.

Tempoh garis K dalam saat, nilai bulat dalam saat. nombor

pertukaran.GetPeriod()

function main() {
    // For example, the K-line period set on the website page of the FMZ Quant Trading platform during backtesting and live trading is 1 hour.
    var period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hours")
}
def main():
    period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hours")
void main() {
    auto period = exchange.GetPeriod();
    Log("K-line period:", period / (60 * 60.0), "hours");
}

{@fun/Market/exchange.GetRecords pertukaran.GetRecords}

exchange.SetMaxBarLen

Tetapkan panjang maksimum K-garis.

pertukaran.SetMaxBarLen ((n)

Parameterndigunakan untuk menentukan panjang garis K maksimum. n betul nombor

function main() {
    exchange.SetMaxBarLen(50)
    var records = exchange.GetRecords()
    Log(records.length, records)
}
def main():
    exchange.SetMaxBarLen(50)
    r = exchange.GetRecords()
    Log(len(r), r)
void main() {
    exchange.SetMaxBarLen(50);
    auto r = exchange.GetRecords();
    Log(r.size(), r[0]);
}

Peraturanexchange.SetMaxBarLen()fungsi mempengaruhi dua aspek untuk strategi cryptocurrency runtime:

  • Mempengaruhi bilangan bar K-line (Bars) yang diperoleh pada panggilan pertama.
  • Mempengaruhi bilangan bar K-line maksimum (Bars).

{@fun/Market/exchange.GetRecords pertukaran.GetRecords}

exchange.GetRawJSON

Dapatkan kandungan asal dikembalikan oleh yang terakhirrestpermintaan untuk objek pertukaran semasa ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).

Data tindak balas untukrestpermintaan. senar

pertukaran.GetRawJSON()

function main(){
    exchange.GetAccount(); 
    var obj = JSON.parse(exchange.GetRawJSON());
    Log(obj);
}
import json
def main():
    exchange.GetAccount()
    obj = json.loads(exchange.GetRawJSON())
    Log(obj)
void main() {
    auto obj = exchange.GetAccount();
    // C++ does not support the GetRawJSON function
    Log(obj);
}

Peraturanexchange.GetRawJSON()fungsi hanya disokong untuk perdagangan sebenar. fungsi ini tidak disokong oleh strategi dalamC++ language.

{@var/EXCHANGE pertukaran}

exchange.GetRate

Dapatkan kadar pertukaran yang kini ditetapkan untuk objek pertukaran.

Nilai semasa kadar pertukaran objek pertukaran. nombor

pertukaran.GetRate()

function main(){
    Log(exchange.GetTicker())
    // Set up exchange rate conversion
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    Log("Current exchange rate:", exchange.GetRate())
}
def main():
    Log(exchange.GetTicker())
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    Log("Current exchange rate:", exchange.GetRate())
void main() {
    Log(exchange.GetTicker());
    exchange.SetRate(7);
    Log(exchange.GetTicker());
    Log("Current exchange rate:", exchange.GetRate());
}

Jikaexchange.SetRate()tidak dipanggil untuk menetapkan kadar penukaran,exchange.GetRate()fungsi mengembalikan nilai kadar lalai 1. iaitu, data yang berkaitan dengan mata wang yang dipaparkan pada masa ini (quoteCurrency) tidak ditukar. Jika nilai kadar pertukaran telah ditetapkan menggunakanexchange.SetRate(), contohnya,exchange.SetRate(7)Kemudian semua maklumat harga, seperti sebut harga, kedalaman, dan harga pesanan yang diperoleh melaluiexchangeobjek pertukaran akan ditukar dengan mengalikan dengan kadar pertukaran yang ditetapkan7. Jikaexchangesama dengan pertukaran dengan USD sebagai mata wang denominasi, selepas memanggilexchange.SetRate(7), semua harga di pasaran langsung akan ditukar kepada harga yang dekat dengan CNY dengan mengalikan7Pada ketika ini, nilai kadar pertukaran yang diperoleh menggunakanexchange.GetRate()adalah7.

{@fun/Trade/exchange.SetRate exchange.SetRate}

exchange.SetData

Peraturanexchange.SetData()fungsi digunakan untuk menetapkan data dimuatkan apabila strategi berjalan.

Panjang rentetan selepas parametervaluePengekodan JSON. nombor

pertukaran.SetData ((kunci, nilai)

Nama pengumpulan data. kunci betul senar Data yang akan dimuatkan olehexchange.SetData()Struktur data adalah sama dengan format data yang diminta olehexchange.GetData()fungsi apabila meminta data luaran, iaitu:"schema": ["time", "data"]. nilai betul Array

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    var data = [
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
    exchange.SetData("test", data)
    while(true) {
        Log(exchange.GetData("test"))
        Sleep(1000)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''              

def main():
    data = [
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
    exchange.SetData("test", data)
    while True:
        Log(exchange.GetData("test"))
        Sleep(1000)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/              

void main() {
    json data = R"([
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ])"_json;
    
    exchange.SetData("test", data);
    while(true) {
        Log(exchange.GetData("test"));
        Sleep(1000);
    }
}

Ia memerlukan bahawa data untuk parametervaluemempunyai format yang sama dengandataAnda boleh melihat bahawa stempel masa1579622400000sepadan dengan masa2020-01-22 00:00:00, dan bahawa apabila program strategi dijalankan selepas masa ini, memanggilexchange.GetData()fungsi untuk mendapatkan data sebelum data timestamp seterusnya1579708800000, iaitu, masa2020-01-23 00:00:00Apa yang anda dapat adalah[1579622400000, 123]kandungan data itu, sebagai program terus berjalan, perubahan masa, dan sebagainya untuk mendapatkan item data oleh item. dalam contoh berikut, pada masa berjalan (backtesting atau perdagangan langsung), masa semasa mencapai atau melebihi timestamp1579795200000, yangexchange.GetData()fungsi dipanggil dan nilai pulangan adalah:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}. "Time":1579795200000sama dengan1579795200000dalam data[1579795200000, ["abc", 123, {"price": 123}]]. "Data":["abc", 123, {"price": 123}]sepadan dengan data["abc", 123, {"price": 123}]]dalam[1579795200000, ["abc", 123, {"price": 123}]].

Data yang dimuatkan boleh menjadi mana-mana penunjuk ekonomi, data industri, penunjuk yang relevan, dan lain-lain, yang digunakan untuk penilaian kuantitatif strategi semua maklumat yang boleh diukur.

{@fun/Market/exchange.GetData exchange.GetData}

exchange.GetData

Peraturanexchange.GetData()fungsi digunakan untuk mendapatkan data dimuatkan olehexchange.SetData()fungsi atau disediakan oleh pautan luaran.

Rekod dalam pengumpulan data. objek

pertukaran.GetData ((kunci) pertukaran.GetData (kunci, masa lapang)

Nama pengumpulan data. kunci betul senar Digunakan untuk menetapkan cache timeout dalam milidetik. masa lapang palsu nombor

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]])
    while(true) {
        Log(exchange.GetData("test"))
        Sleep(1000 * 60 * 60 * 24)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''  
def main():
    exchange.SetData("test", [[1579536000000, _D(1579536000000/1000)], [1579622400000, _D(1579622400000/1000)], [1579708800000, _D(1579708800000/1000)]])
    while True:
        Log(exchange.GetData("test"))
        Sleep(1000 * 60 * 60 * 24)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/    
void main() {
    json arr = R"([[1579536000000, ""], [1579622400000, ""], [1579708800000, ""]])"_json;
    arr[0][1] = _D(1579536000000);
    arr[1][1] = _D(1579622400000);
    arr[2][1] = _D(1579708800000);
    exchange.SetData("test", arr);
    while(true) {
        Log(exchange.GetData("test"));
        Sleep(1000 * 60 * 60 * 24);
    }
}

Panggilan untuk mendapatkan data yang ditulis secara langsung.

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    while(true) {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Sleep(1000)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''              

def main():
    while True:
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Sleep(1000)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/              

void main() {
    while(true) {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
        Sleep(1000);
    }
}

Ia menyokong untuk meminta data melalui pautan luaran, format data yang diminta untuk:

{
    "schema":["time","data"],
    "data":[
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
}

Di mana?schemaadalah format data untuk setiap rekod dalam badan data yang dimuatkan, yang ditetapkan kepada["time", "data"]yang sepadan dengan format data entri-oleh-masuk dalamdataatribut. Apa yang disimpan dalamdataatribut adalah badan data, dengan setiap entri yang terdiri daripada timestamp tahap milidetik dan kandungan data (yang boleh menjadi mana-mana data yang boleh dikodkan JSON). Program perkhidmatan untuk ujian, ditulis dalam Go:

package main
import (
    "fmt"
    "net/http"
    "encoding/json"
)                

func Handle (w http.ResponseWriter, r *http.Request) {
    defer func() {
        fmt.Println("req:", *r)
        ret := map[string]interface{}{
            "schema": []string{"time","data"},
            "data": []interface{}{
                []interface{}{1579536000000, "abc"},
                []interface{}{1579622400000, 123},
                []interface{}{1579708800000, map[string]interface{}{"price":123}},
                []interface{}{1579795200000, []interface{}{"abc", 123, map[string]interface{}{"price":123}}},
            },
        }
        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}                

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

Data tindak balas program apabila menerima permintaan:

{
    "schema":["time","data"],
    "data":[
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
}

Kod strategi ujian:

function main() {
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
}
def main():
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
void main() {
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"));
}

Kaedah panggilan untuk mendapatkan data pautan luaran.

function main() {
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))   // The xxx part of the link is the code of the query data, here xxx is an example.
}
def main():
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))
void main() {
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"));
}

Minta data untuk pertanyaan yang dibuat di platformdata data, meminta bahawa format data jawapan adalah (harus mempunyai masa, medan data yang diterangkan dalam skim):

{
    "data": [],
    "schema": ["time", "data"]
}

medan data adalah kandungan data yang diperlukan, dan data dalam medan data perlu sama dengan apa yang dipersetujui dalam skema.exchange.GetData()fungsi dipanggil, objek JSON dikembalikan, contohnya:{"Time":1579795200000, "Data":"..."}.

Dapatkan data sekaligus untuk backtesting dan cache satu minit data untuk perdagangan langsung.from(berstempel masa dalam saat),to(timestamped dalam saat) kepada permintaan, parameter sepertiperiod(periode garis K yang mendasari, bertanda masa dalam mili saat) digunakan untuk menentukan jangka masa di mana data akan diperoleh.

{@fun/Market/exchange.SetData exchange.SetData}

exchange.GetMarkets

Peraturanexchange.GetMarkets()fungsi digunakan untuk mendapatkan maklumat pasaran pertukaran.

Kamus yang mengandungi struktur {@struct/Market Market}. objek

pertukaran.GetMarkets()

function main() {
    var markets = exchange.GetMarkets()
    var currency = exchange.GetCurrency()

    // Get the current contract code can also use exchange.GetContractType() function
    var ct = "swap"

    var key = currency + "." + ct
    Log(key, ":", markets[key])
}
def main():
    markets = exchange.GetMarkets()
    currency = exchange.GetCurrency()
    ct = "swap"

    key = currency + "." + ct
    Log(key, ":", markets[key])
void main() {
    auto markets = exchange.GetMarkets();
    auto currency = exchange.GetCurrency();

    auto ct = "swap";
    auto key = currency + "." + ct;
    Log(key, ":", markets[key]);
}

Contoh panggilan kepada objek pertukaran niaga hadapan:

/*backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    var tbl1 = {
        type: "table",
        title: "markets1",
        cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        rows: []
    }

    var markets1 = exchange.GetMarkets()
    for (var key in markets1) {
        var market = markets1[key]
        tbl1.rows.push([key, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal])
    }

    for (var symbol of arrSymbol) {
        exchange.GetTicker(symbol)
    }

    var tbl2 = {
        type: "table",
        title: "markets2",
        cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        rows: []
    }

    var markets2 = exchange.GetMarkets()
    for (var key in markets2) {
        var market = markets2[key]
        tbl2.rows.push([key, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal])
    }

    LogStatus("`" + JSON.stringify([tbl1, tbl2]) + "`")
}
'''backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    tbl1 = {
        "type": "table",
        "title": "markets1",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    }

    markets1 = exchange.GetMarkets()
    for key in markets1:
        market = markets1[key]
        tbl1["rows"].append([key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]])

    for symbol in arrSymbol:
        exchange.GetTicker(symbol)

    tbl2 = {
        "type": "table",
        "title": "markets2",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    }

    markets2 = exchange.GetMarkets()
    for key in markets2:
        market = markets2[key]
        tbl2["rows"].append([key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]])

    LogStatus("`" + json.dumps([tbl1, tbl2]) + "`")
/*backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};

    json tbl1 = R"({
        "type": "table",
        "title": "markets1",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    })"_json;

    auto markets1 = exchange.GetMarkets();
    for (auto& [key, market] : markets1.items()) {
        json arrJson = {key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]};
        tbl1["rows"].push_back(arrJson);
    }

    for (const auto& symbol : arrSymbol) {
        exchange.GetTicker(symbol);
    }

    json tbl2 = R"({
        "type": "table",
        "title": "markets2",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    })"_json;

    auto markets2 = exchange.GetMarkets();
    for (auto& [key, market] : markets2.items()) {
        json arrJson = {key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]};
        tbl2["rows"].push_back(arrJson);
    }

    json tbls = R"([])"_json;
    tbls.push_back(tbl1);
    tbls.push_back(tbl2);
    LogStatus("`" + tbls.dump() + "`");
}

Gunakan objek pertukaran niaga hadapan untuk memanggilexchange.GetMarkets()fungsi dalam sistem backtesting. Sebelum memanggil mana-mana fungsi pasaran, GetMarkets hanya mengembalikan data pasaran pasangan dagangan lalai semasa. Selepas memanggil fungsi pasaran, ia mengembalikan data pasaran semua jenis yang diminta. Anda boleh merujuk kepada contoh ujian berikut:

Peraturanexchange.GetMarkets()fungsi mengembalikan kamus dengan kunci yang dinamakan nama jenis perdagangan, dan untuk pembaikan spot yang diformat sebagai pasangan perdagangan, contohnya:

{
    "BTC_USDT" : {...},  // The key value is the Market structure
    "LTC_USDT" : {...},  
    ...
}

Untuk pertukaran kontrak niaga hadapan, kerana mungkin terdapat beberapa kontrak untuk satu jenis, contohnyaBTC_USDTPasangan perdagangan, terdapat kontrak kekal, kontrak suku tahunan, dan sebagainya.exchange.GetMarkets()fungsi mengembalikan kamus dengan nama kunci pasangan digabungkan dengan kod kontrak, contohnya:

{
    "BTC_USDT.swap" : {...},     // The key value is the Market structure
    "BTC_USDT.quarter" : {...}, 
    "LTC_USDT.swap" : {...},
    ...
}
  • Peraturanexchange.GetMarkets()Fungsi menyokong perdagangan langsung, sistem backtesting.
  • Peraturanexchange.GetMarkets()fungsi mengembalikan maklumat pasaran hanya untuk varieti yang didagangkan dalam talian di bursa.
  • Peraturanexchange.GetMarkets()fungsi tidak menyokong kontrak opsyen.

Bursa yang tidak menyokongexchange.GetMarkets()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetMarkets Coincheck / Bithumb / BitFlyer

{@struct/Pasar Pasaran}

exchange.GetTickers

Peraturanexchange.GetTickers()fungsi digunakan untuk mendapatkan data ticker pertukaran agregat (saringan struktur {@struct/Ticker Ticker}).exchangeMengembalikan data ticker untuk semua pasangan dagangan apabila ia adalah objek pertukaran spot;exchangemengembalikan data ticker untuk semua kontrak apabila ia adalah objek pertukaran niaga hadapan.

Peraturanexchange.GetTickers()fungsi mengembalikan pelbagai struktur {@struct/Ticker Ticker} apabila berjaya meminta data, dan null apabila gagal. {@struct/Ticker Ticker} array, nilai sifar

pertukaran.GetTickers()

function main() {
    var tickers = exchange.GetTickers()
    if (tickers && tickers.length > 0) {
        Log("Number of tradable items on the exchange:", tickers.length)
    }
}
def main():
    tickers = exchange.GetTickers()
    if tickers and len(tickers) > 0:
        Log("Number of tradable items on the exchange:", len(tickers))
void main() {
    auto tickers = exchange.GetTickers();
    if (tickers.Valid && tickers.size() > 0) {
        Log("Number of tradable items on the exchange:", tickers.size());
    }
}

Panggilexchange.GetTickers()fungsi untuk mendapatkan data pasaran agregat.

/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"]
    
    // Before requesting other trading pair market data, call Get Tickers
    var tickers1 = exchange.GetTickers()
    var tbl1 = {type: "table", title: "tickers1", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of tickers1) {
        tbl1.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }
    
    // Request market data for other trading pairs
    for (var symbol of arrSymbol) {
        exchange.GetTicker(symbol)
    }

    // Call GetTickers again
    var tickers2 = exchange.GetTickers()
    var tbl2 = {type: "table", title: "tickers2", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of tickers2) {
        tbl2.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify([tbl1, tbl2]) +  "`")
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"]
        
    tickers1 = exchange.GetTickers()
    tbl1 = {"type": "table", "title": "tickers1", "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], "rows": []}
    for ticker in tickers1:
        tbl1["rows"].append([ticker["Symbol"], ticker["High"], ticker["Open"], ticker["Low"], ticker["Last"], ticker["Buy"], ticker["Sell"], ticker["Time"], ticker["Volume"]])
    
    for symbol in arrSymbol:
        exchange.GetTicker(symbol)
    
    tickers2 = exchange.GetTickers()
    tbl2 = {"type": "table", "title": "tickers2", "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], "rows": []}
    for ticker in tickers2:
        tbl2["rows"].append([ticker["Symbol"], ticker["High"], ticker["Open"], ticker["Low"], ticker["Last"], ticker["Buy"], ticker["Sell"], ticker["Time"], ticker["Volume"]])
    
    LogStatus("`" + json.dumps([tbl1, tbl2]) +  "`")
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

json tickerToJson(const Ticker& ticker) {
    json arrJson;

    arrJson.push_back(ticker.Symbol);
    arrJson.push_back(ticker.High);
    arrJson.push_back(ticker.Open);
    arrJson.push_back(ticker.Low);
    arrJson.push_back(ticker.Last);
    arrJson.push_back(ticker.Buy);
    arrJson.push_back(ticker.Sell);
    arrJson.push_back(ticker.Time);
    arrJson.push_back(ticker.Volume);

    return arrJson;
}

void main() {
    std::string arrSymbol[] = {"ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"};
    
    auto tickers1 = exchange.GetTickers();
    json tbl1 = R"({
        "type": "table", 
        "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"],
        "rows": []
    })"_json;
    tbl1["title"] = "tickers1";
    
    for (const auto& ticker : tickers1) {
        json arrJson = tickerToJson(ticker);
        tbl1["rows"].push_back(arrJson);
    }
    
    for (const std::string& symbol : arrSymbol) {
        exchange.GetTicker(symbol);
    }
    
    auto tickers2 = exchange.GetTickers();
    json tbl2 = R"({
        "type": "table", 
        "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"],
        "rows": []
    })"_json;
    tbl2["title"] = "tickers2";
    
    for (const auto& ticker : tickers2) {
        json arrJson = tickerToJson(ticker);
        tbl2["rows"].push_back(arrJson);
    }
    
    json tbls = R"([])"_json;
    tbls.push_back(tbl1);
    tbls.push_back(tbl2);
    LogStatus("`" + tbls.dump() + "`");
}

Gunakan objek pertukaran spot dan memanggilexchange.GetTickers()fungsi dalam sistem backtest. Sebelum memanggil mana-mana fungsi pasaran, GetTickers hanya mengembalikan data ticker pasangan dagangan lalai semasa. Selepas memanggil fungsi pasaran, ia mengembalikan data ticker semua jenis yang diminta. Anda boleh merujuk kepada contoh ujian berikut:

  • Fungsi ini meminta pertukaran untuk mengumpul ticker antara muka, tidak perlu untuk menyediakan pasangan dagangan, kod kontrak sebelum memanggil. Ia hanya mengembalikan ticker jenis perdagangan dalam talian di bursa.
  • Sistem backtesting menyokong fungsi ini.
  • Objek pertukaran yang tidak menyediakan antara muka ticker agregat tidak menyokong fungsi ini.
  • Fungsi ini tidak menyokong kontrak opsyen.

Bursa yang tidak menyokongexchange.GetTickers()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetTickers Zaif / WOO / Gemini / Coincheck / BitFlyer / Bibox Futures_WOO / Futures_dYdX / Futures_Deribit / Futures_Bibox / Futures_Aevo

{@struct/Ticker Ticker}, {@fun/Market/exchange.GetTicker pertukaran.GetTicker}

Perdagangan

exchange.Buy

Peraturanexchange.Buy()Fungsi ini digunakan untuk meletakkan pesanan beli.Buy()fungsi adalah fungsi ahli objek pertukaran {@var/EXCHANGE exchange}.Buy()fungsi beroperasi pada akaun pertukaran yang terikat kepada objek pertukaranexchange. Tujuan fungsi (metode) ahliexchangeobjek hanya berkaitan denganexchange, dan ia tidak akan diulangi selepas dokumentasi.

Perintah yang berjaya mengembalikan ID pesanan, perintah yang gagal mengembalikan nilai sifar. AtributIdstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pasangan dagangan spotETH_USDTurutan pertukaran OKX adalah:ETH-USDT,1547130415509278720. Apabila memanggilexchange.Buy()fungsi untuk meletakkan pesanan, pesanan nilai pulanganIdadalah konsisten denganIdatribut struktur order {@struct/Order Order}.

rentetan, nilai sifar

pertukaran.Beli ((harga, jumlah) pertukaran.Beli ((harga, jumlah,... args)

Peraturanpriceparameter digunakan untuk menetapkan harga pesanan. harga betul nombor Peraturanamountparameter digunakan untuk menetapkan jumlah pesanan. jumlah betul nombor Parameter yang diperluaskan yang boleh mengeluarkan maklumat yang disertakan ke log pesanan ini,argparameter boleh lulus lebih daripada satu. arg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong oleh sistem

function main() {
    var id = exchange.Buy(100, 1);
    Log("id:", id);
}
def main():
    id = exchange.Buy(100, 1)
    Log("id:", id)
void main() {
    auto id = exchange.Buy(100, 1);
    Log("id:", id);
}

Nombor siri yang dikembalikan olehexchange.Buy()boleh digunakan untuk menyoal maklumat pesanan dan membatalkan pesanan.

// The following is an error call
function main() {
    exchange.SetContractType("quarter")
  
    // Set the shorting direction
    exchange.SetDirection("sell")     
    // If you place a buy order, an error will be reported, and shorting can only be sold
    var id = exchange.Buy(50, 1)

    // Set the long direction
    exchange.SetDirection("buy")      
    // If you place a sell order, it will report an error, go long, only buy
    var id2 = exchange.Sell(60, 1)    
  
    // Set direction to close long positions
    exchange.SetDirection("closebuy")    
    // If you place a buy order, it will report an error, close long, only sell
    var id3 = exchange.Buy(-1, 1)        
  
    // Set direction to close short positions
    exchange.SetDirection("closesell")   
    // If you place a sell order, it will report an error, close short, only buy
    var id4 = exchange.Sell(-1, 1)       
}
# The following is an error call
def main():
    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    id = exchange.Buy(50, 1)
    exchange.SetDirection("buy")
    id2 = exchange.Sell(60, 1)
    exchange.SetDirection("closebuy")
    id3 = exchange.Buy(-1, 1)
    exchange.SetDirection("closesell")
    id4 = exchange.Sell(-1, 1)
// The following is an error call
void main() {
    exchange.SetContractType("quarter");
    exchange.SetDirection("sell");
    auto id = exchange.Buy(50, 1);
    exchange.SetDirection("buy");
    auto id2 = exchange.Sell(60, 1);
    exchange.SetDirection("closebuy");
    auto id3 = exchange.Buy(-1, 1);
    exchange.SetDirection("closesell");
    auto id4 = exchange.Sell(-1, 1);
}

Apabila meletakkan pesanan untuk kontrak niaga hadapan cryptocurrency, perlu berhati-hati untuk memastikan bahawa arah perdagangan ditetapkan dengan betul, kerana ketidakcocokan antara arah perdagangan dan fungsi perdagangan akan mengakibatkan ralat:

direction is sell, invalid order type Buy
direction is buy, invalid order type Sell
direction is closebuy, invalid order type Buy
direction is closesell, invalid order type Sell
// For example, the trading pair: ETH_BTC, place a buy order at the market price
function main() {
    // Place a buy order at the market price and buy ETH coins with a value of 0.1 BTC (denominated currency)
    exchange.Buy(-1, 0.1)    
}
def main():
    exchange.Buy(-1, 0.1)
void main() {
    exchange.Buy(-1, 0.1);
}

Perintah pasaran spot.

Apabila meletakkan pesanan untuk kontrak niaga hadapan, anda mesti memberi perhatian kepada sama ada arah perdagangan ditetapkan dengan betul, kerana kesilapan akan dilaporkan jika arah perdagangan dan fungsi perdagangan tidak sesuai. Saiz pesanan untuk kontrak niaga hadapan cryptocurrency adalah jumlah kontrak jika tidak ditentukan. Parameterpriceditetapkan kepada-1untuk meletakkan pesanan pasaran, yang memerlukan antarmuka penempatan pesanan bursa untuk menyokong pesanan pasaran.amountadalah jumlah wang dalam mata wang pesanan. Apabila meletakkan pesanan pasaran untuk kontrak niaga hadapan cryptocurrency, parameter jumlahamountadalah bilangan kontrak. Terdapat beberapa bursa cryptocurrency yang tidak menyokong antara muka pesanan pasaran semasa perdagangan langsung. Jumlah pesanan untuk pesanan beli pasaran pada beberapa bursa spot adalah bilangan syiling perdagangan. Sila rujukArahan Khas untuk PertukaranPanduan Pengguna untuk butiran lanjut. Jika anda menggunakan versi lama dari docker, nilai pulangan perintahIddaripadaexchange.Buy()fungsi mungkin berbeza daripada nilai pulangan pesananIdyang diterangkan dalam dokumen semasa.

{@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@fun/Futures/exchange.SetDirection exchange.SetDirection}

exchange.Sell

Peraturanexchange.Sell()Fungsi digunakan untuk meletakkan pesanan jual.

Perintah yang berjaya mengembalikan ID pesanan, perintah yang gagal mengembalikan nilai sifar.Idstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pasangan dagangan spotETH_USDTurutan pertukaran OKX adalah:ETH-USDT,1547130415509278720. Apabila memanggilexchange.Sell()fungsi untuk meletakkan pesanan, pesanan nilai pulanganIdadalah konsisten denganIdatribut struktur order {@struct/Order Order}. rentetan, nilai sifar

pertukaran.Menjual ((harga, jumlah) pertukaran.Menjual ((harga, jumlah,... args)

Peraturanpriceparameter digunakan untuk menetapkan harga pesanan. harga betul nombor Peraturanamountparameter digunakan untuk menetapkan jumlah pesanan. jumlah betul nombor Parameter yang diperluaskan yang boleh mengeluarkan maklumat yang disertakan ke log pesanan ini,argparameter boleh lulus lebih daripada satu. arg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong oleh sistem

function main(){
    var id = exchange.Sell(100, 1)
    Log("id:", id)
}
def main():
    id = exchange.Sell(100, 1)
    Log("id:", id)
void main() {
    auto id = exchange.Sell(100, 1);
    Log("id:", id);
}

Nombor siri yang dikembalikan olehexchange.Sell()boleh digunakan untuk menyoal maklumat pesanan dan membatalkan pesanan.

// The following is an error call
function main() {
    exchange.SetContractType("quarter")
  
    // Set the shorting direction
    exchange.SetDirection("sell")     
    // If you place a buy order, an error will be reported, and shorting can only be sold
    var id = exchange.Buy(50, 1)                  

    // Set the long direction
    exchange.SetDirection("buy")      
    // If you place a sell order, it will report an error, go long, only buy
    var id2 = exchange.Sell(60, 1)    
  
    // Set direction to close long positions
    exchange.SetDirection("closebuy")    
    // If you place a buy order, it will report an error, close long, only sell
    var id3 = exchange.Buy(-1, 1)        
  
    // Set direction to close short positions
    exchange.SetDirection("closesell")   
    // If you place a sell order, it will report an error, close short, only buy
    var id4 = exchange.Sell(-1, 1)       
}
# The following is an error call
def main():
    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    id = exchange.Buy(50, 1)
    exchange.SetDirection("buy")
    id2 = exchange.Sell(60, 1)
    exchange.SetDirection("closebuy")
    id3 = exchange.Buy(-1, 1)
    exchange.SetDirection("closesell")
    id4 = exchange.Sell(-1, 1)
// The following is an error call
void main() {
    exchange.SetContractType("quarter");
    exchange.SetDirection("sell");
    auto id = exchange.Buy(50, 1);
    exchange.SetDirection("buy");
    auto id2 = exchange.Sell(60, 1);
    exchange.SetDirection("closebuy");
    auto id3 = exchange.Buy(-1, 1);
    exchange.SetDirection("closesell");
    auto id4 = exchange.Sell(-1, 1);
}

Apabila meletakkan pesanan untuk kontrak niaga hadapan cryptocurrency, perlu berhati-hati untuk memastikan bahawa arah perdagangan ditetapkan dengan betul, kerana ketidakcocokan antara arah perdagangan dan fungsi perdagangan akan mengakibatkan ralat:

direction is sell, invalid order type Buy
direction is buy, invalid order type Sell
direction is closebuy, invalid order type Buy
direction is closesell, invalid order type Sell
// For example, the trading pair: ETH_BTC, place a sell order at the market price
function main() {
    // Note: place a market order to sell, sell 0.2 ETH
    exchange.Sell(-1, 0.2)   
}
def main():
    exchange.Sell(-1, 0.2)
void main() {
    exchange.Sell(-1, 0.2);
}

Perintah pasaran spot.

Apabila meletakkan pesanan untuk kontrak niaga hadapan, anda mesti memberi perhatian kepada sama ada arah perdagangan ditetapkan dengan betul, kerana kesilapan akan dilaporkan jika arah perdagangan dan fungsi perdagangan tidak sepadan. Parameterpriceditetapkan kepada-1untuk meletakkan pesanan pasaran, yang memerlukan antara muka penempatan pesanan bursa untuk menyokong pesanan pasaran.amountadalah jumlah dalam mata wang dagangan. Apabila meletakkan pesanan pasaran untuk kontrak niaga hadapan cryptocurrency, parameter jumlahamountTerdapat beberapa pertukaran cryptocurrency yang tidak menyokong antarmuka pesanan pasaran semasa perdagangan langsung. Jika anda menggunakan versi lama dari docker, nilai pulangan perintahIddaripadaexchange.Sell()fungsi mungkin berbeza daripada nilai pulangan pesananIdyang diterangkan dalam dokumen semasa.

{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@fun/Futures/exchange.SetDirection exchange.SetDirection}

exchange.CreateOrder

Peraturanexchange.CreateOrder()fungsi digunakan untuk meletakkan pesanan.

Jika pesanan berjaya diletakkan, ID pesanan dikembalikan; jika pesanan gagal, nilai sifar dikembalikan.Idstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pesanan pasangan dagangan spotETH_USDTdaripada bursa OKX ialah:ETH-USDT,1547130415509278720. Apabila memanggilexchange.CreateOrder(symbol, side, price, amount)fungsi untuk meletakkan pesanan, nilai pulangan pesananIdadalah konsisten denganIdsifat struktur order {@struct/Order Order}. rentetan, nilai sifar

pertukaran.CreateOrder ((simbol, sisi, harga, jumlah) pertukaran.CreateOrder ((simbol, sisi, harga, jumlah,... args)

Parametersymboldigunakan untuk menentukan pasangan dagangan tertentu dan kod kontrak pesanan.exchange.CreateOrder(symbol, side, price, amount)fungsi untuk meletakkan pesanan,exchangeadalah objek pertukaran spot. Jika mata wang pesanan adalah USDT dan mata wang perdagangan adalah BTC, parametersymbolialah:"BTC_USDT", dalam format pasangan dagangan yang ditakrifkan oleh platform FMZ.exchange.CreateOrder(symbol, side, price, amount)fungsi untuk meletakkan pesanan,exchangeadalah objek pertukaran niaga hadapan. Jika pesanan adalah pesanan kontrak kekal standard U BTCs, parametersymbolialah:"BTC_USDT.swap", dan formatnya adalah gabunganPasangan dagangandanKod kontrakditakrifkan oleh platform FMZ, dipisahkan oleh watak ..exchange.CreateOrder(symbol, side, price, amount)fungsi untuk meletakkan pesanan,exchangeadalah objek pertukaran niaga hadapan. Jika pesanan adalah pesanan kontrak opsyen standard U BTCs, parametersymbolialah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Pilihan BTC-240108-40000-C sebagai contoh), dan format adalah gabunganPasangan daganganyang ditakrifkan oleh platform FMZ dan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, dipisahkan oleh watak .. lambang betul senar PerkhidmatansideParameter digunakan untuk menentukan arah dagangan pesanan. Untuk objek pertukaran spot, nilai pilihansideparameter adalah:buy, sell. buybermaksud membeli, dansellBermakna menjual. Untuk objek pertukaran niaga hadapan, nilai pilihansideparameter adalah:buy, closebuy, sell, closesell. buybermaksud membuka kedudukan panjang,closebuybermaksud menutup kedudukan panjang,sellbermaksud membuka kedudukan pendek, danclosesellbermaksud menutup kedudukan pendek.

sisi betul senar Parameterpricedigunakan untuk menetapkan harga pesanan. Harga -1 menunjukkan bahawa pesanan adalah pesanan pasaran. harga betul nombor Parameteramountdigunakan untuk menetapkan kuantiti pesanan. Sila ambil perhatian bahawa apabila pesanan adalah pesanan beli pasaran, kuantiti pesanan adalah jumlah pembelian; kuantiti pesanan pesanan beli pasaran beberapa bursa spot adalah bilangan syiling perdagangan. Untuk butiran, sila rujukArahan Khas untuk Pertukarandalam Panduan Pengguna. jumlah betul nombor Parameter dilanjutkan boleh output maklumat tambahan untuk log pesanan ini.argparameter boleh diteruskan. arg palsu Sebarang jenis yang disokong oleh sistem, seperti rentetan, nombor, bool, objek, array, nilai sifar, dan lain-lain.

function main() {
    var id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01)           // Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
    // var id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01)   // Futures exchange objects place orders for BTC's U-standard perpetual contracts
    Log("Order Id:", id)
}
def main():
    id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01)          # Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
    # id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01)   # Futures exchange objects place orders for BTC's U-standard perpetual contracts
    Log("Order Id:", id)
void main() {
    auto id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01);           // Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
    // auto id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01);   // Futures exchange objects place orders for BTC's U-standard perpetual contracts
    Log("Order Id:", id);
}

Objek pertukaran spot dan objek pertukaran niaga hadapan dipanggilexchange.CreateOrder()fungsi untuk meletakkan pesanan.

{@fun/Trade/exchange.Buy pertukaran.Buy}, {@fun/Trade/exchange.Sell pertukaran.Sell}

exchange.CancelOrder

Peraturanexchange.CancelOrder()Fungsi digunakan untuk membatalkan pesanan. AtributIdstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pesanan pasangan dagangan spotETH_USDTdaripada bursa OKX ialah:ETH-USDT,1547130415509278720. ParameterorderIdtelah berlalu dalam apabila memanggilexchange.CancelOrder()fungsi untuk membatalkan pesanan adalah konsisten denganIdsifat struktur order {@struct/Order Order}.

Peraturanexchange.CancelOrder()fungsi mengembalikan nilai yang benar, contohnyatruebermakna permintaan pesanan dibatalkan telah dihantar dengan berjaya. Jika ia mengembalikan nilai palsu, sepertifalse, bermakna permintaan pesanan membatalkan gagal dihantar. Nilai yang dikembalikan hanya mewakili kejayaan atau kegagalan permintaan yang dihantar untuk menentukan sama ada pertukaran membatalkan pesanan.exchange.GetOrders()untuk menentukan sama ada perintah itu dibatalkan. bool

Pertukaran. Batalkan Perintah Pertukaran. Batalkan Perintah ((PesanId,... args)

PeraturanorderIdParameter digunakan untuk menentukan pesanan yang akan dibatalkan. Perintah betul nombor, rentetan Parameter yang diperluaskan, anda boleh mengeluarkan maklumat yang dilampirkan ke log pengeluaran ini,argparameter boleh lulus lebih daripada satu. arg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong oleh sistem

function main(){
    var id = exchange.Sell(99999, 1)
    exchange.CancelOrder(id)
}
def main():
    id = exchange.Sell(99999, 1)
    exchange.CancelOrder(id)
void main() {
    auto id = exchange.Sell(99999, 1);
    exchange.CancelOrder(id);
}

Batalkan pesanan.

function main() {
    if (exchange.GetName().includes("Futures_")) {
        Log("Set the contract as: perpetual contract, set the trade direction as: open long position.")
        exchange.SetContractType("swap")
        exchange.SetDirection("buy")
    }
    
    var ticker = exchange.GetTicker()
    exchange.Buy(ticker.Last * 0.5, 0.1)
    
    var orders = exchange.GetOrders()
    for (var i = 0 ; i < orders.length ; i++) {
        exchange.CancelOrder(orders[i].Id, "Cancelled orders:", orders[i])
        Sleep(500)
    }
}
def main():
    if exchange.GetName().find("Futures_") != -1:
        Log("Set the contract as: perpetual contract, set the trade direction as: open long position.")
        exchange.SetContractType("swap")
        exchange.SetDirection("buy")
    
    ticker = exchange.GetTicker()
    exchange.Buy(ticker["Last"] * 0.5, 0.1)            

    orders = exchange.GetOrders()
    for i in range(len(orders)):
        exchange.CancelOrder(orders[i]["Id"], "Cancelled orders:", orders[i])
        Sleep(500)
void main() {
    if (exchange.GetName().find("Futures_") != std::string::npos) {
        Log("Set the contract as: perpetual contract, set the trade direction as: open long position.");
        exchange.SetContractType("swap");
        exchange.SetDirection("buy");
    }            

    auto ticker = exchange.GetTicker();
    exchange.Buy(ticker.Last * 0.5, 0.1);            

    auto orders = exchange.GetOrders();
    for (int i = 0 ; i < orders.size() ; i++) {
        exchange.CancelOrder(orders[i].Id, "Cancelled orders:", orders[i]);
        Sleep(500);
    }
}

Fungsi API FMZ yang boleh menghasilkan fungsi output log seperti:Log(), exchange.Buy(), exchange.CancelOrder()boleh diikuti oleh beberapa parameter output yang disertakan selepas parameter yang diperlukan.exchange.CancelOrder(orders[i].Id, orders[i]), supaya apabila membatalkan pesanan yang id adalahorders[i].Id, maklumat orders output dengan ia. iaitu, struktur {@struct/Order Order}orders[i].

Jika anda menggunakan versi yang lebih lama dari docker, parameter orderId fungsi exchange.CancelOrder( mungkin berbeza dari orderId yang diterangkan dalam dokumen semasa.

{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}

exchange.GetOrder

Peraturanexchange.GetOrder()fungsi digunakan untuk mendapatkan maklumat pesanan.

Mencari butiran pesanan mengikut nombor pesanan, dan mengembalikan struktur {@struct/Order Order} jika pertanyaan berjaya, atau mengembalikan null jika pertanyaan gagal. {@struct/Order Order}, nilai sifar

pertukaran.GetOrder ((orderId)

PeraturanorderIdParameter digunakan untuk menentukan urutan yang akan ditanyakan. AtributIdstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pesanan pasangan dagangan spotETH_USDTdaripada bursa OKX ialah:ETH-USDT,1547130415509278720. ParameterorderIdtelah berlalu dalam apabila memanggilexchange.GetOrder()fungsi untuk menyoal perintah adalah konsisten denganIdsifat struktur order {@struct/Order Order}.

Perintah betul senar

function main(){
    var id = exchange.Sell(1000, 1)
    // Parameter id is the order number, you need to fill in the number of the order you want to query
    var order = exchange.GetOrder(id)      
    Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:",
        order.DealAmount, "Status:", order.Status, "Type:", order.Type)
}
def main():
    id = exchange.Sell(1000, 1)
    order = exchange.GetOrder(id)
    Log("Id:", order["Id"], "Price:", order["Price"], "Amount:", order["Amount"], "DealAmount:", 
        order["DealAmount"], "Status:", order["Status"], "Type:", order["Type"])
void main() {
    auto id = exchange.Sell(1000, 1);
    auto order = exchange.GetOrder(id);
    Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:", 
        order.DealAmount, "Status:", order.Status, "Type:", order.Type);
}

Peraturanexchange.GetOrder()fungsi tidak disokong oleh beberapa pertukaran.AvgPriceAtribut dalam struktur {@struct/Order Order} nilai pulangan adalah harga purata transaksi. Sesetengah bursa tidak menyokong medan ini, dan jika mereka tidak, ia ditetapkan kepada 0. Jika anda menggunakan versi lama dari docker,orderIdparameterexchange.GetOrder()fungsi boleh berbeza dariorderIdyang diterangkan dalam dokumentasi semasa. Bursa yang tidak menyokongexchange.GetOrder()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetOrder Zaif / Coincheck / Bitstamp

{@struct/Order Order}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}

exchange.GetOrders

Peraturanexchange.GetOrders()Fungsi digunakan untuk mendapatkan pesanan yang belum selesai.

Peraturanexchange.GetOrders()fungsi mengembalikan pelbagai struktur {@struct/Order Order} jika permintaan data berjaya, dan ia mengembalikan nilai sifar jika permintaan data gagal. {@struct/Order Order} array, nilai sifar

pertukaran.GetOrders() pertukaran.GetOrders (simbol)

Parametersymboldigunakan untuk menetapkansimbol transaksiatauJulat simbol transaksiuntuk ditanyakan. Untuk objek pertukaran spot, jikasymbolparameter tidak diteruskan, data pesanan yang tidak lengkap untuk semua produk spot akan diminta. Bagi objek pertukaran niaga hadapan, jikasymbolJika parameter tidak diteruskan, lalai adalah untuk meminta data pesanan yang belum selesai dari semua jenis dalam julat dimensi pasangan dagangan semasa dan kod kontrak.

simbol palsu senar

/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"]

    for (var symbol of arrSymbol) {
        var t = exchange.GetTicker(symbol)
        exchange.CreateOrder(symbol, "buy", t.Last / 2, 0.01)
    }

    var spotOrders = exchange.GetOrders()

    var tbls = []
    for (var orders of [spotOrders]) {
        var tbl = {type: "table", title: "test GetOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")

    // Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
    return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"]

    for symbol in arrSymbol:
        t = exchange.GetTicker(symbol)
        exchange.CreateOrder(symbol, "buy", t["Last"] / 2, 0.01)

    spotOrders = exchange.GetOrders()

    tbls = []
    for orders in [spotOrders]:
        tbl = {"type": "table", "title": "test GetOrders", "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], "rows": []}
        for order in orders:
            tbl["rows"].append([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        tbls.append(tbl)

    LogStatus("`" + json.dumps(tbls) +  "`")

    return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"};
    
    for (const auto& symbol : arrSymbol) {
        auto t = exchange.GetTicker(symbol);
        exchange.CreateOrder(symbol, "buy", t.Last / 2, 0.01);
    }

    auto spotOrders = exchange.GetOrders();

    json tbls = R"([])"_json;
    std::vector<std::vector<Order>> arr = {spotOrders};
    for (const auto& orders : arr) {
        json tbl = R"({
            "type": "table", 
            "title": "test GetOrders", 
            "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"],
            "rows": []
        })"_json;

        for (const auto& order : orders) {
            json arrJson = R"([])"_json;

            arrJson.push_back("Symbol");
            arrJson.push_back("Id");
            arrJson.push_back(order.Price);
            arrJson.push_back(order.Amount);
            arrJson.push_back(order.DealAmount);
            arrJson.push_back(order.AvgPrice);
            arrJson.push_back(order.Status);
            arrJson.push_back(order.Type);
            arrJson.push_back(order.Offset);
            arrJson.push_back(order.ContractType);

            tbl["rows"].push_back(arrJson);
        }

        tbls.push_back(tbl);
    }
    
    LogStatus(_D(), "\n", "`" + tbls.dump() + "`");

    return;
}

Gunakan objek pertukaran spot untuk meletakkan pesanan beli untuk beberapa pasangan dagangan yang berbeza pada separuh harga semasa, dan kemudian menyoal maklumat pesanan yang belum selesai.

/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    for (var symbol of arrSymbol) {
        var t = exchange.GetTicker(symbol)
        exchange.CreateOrder(symbol, "buy", t.Last / 2, 1)
        exchange.CreateOrder(symbol, "sell", t.Last * 2, 1)
    }

    var defaultOrders = exchange.GetOrders()
    var swapOrders = exchange.GetOrders("USDT.swap")
    var futuresOrders = exchange.GetOrders("USDT.futures")
    var btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap")

    var tbls = []
    var arr = [defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders]
    var tblDesc = ["defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"]
    for (var index in arr) {
        var orders = arr[index]
        var tbl = {type: "table", title: tblDesc[index], cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")

    // Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
    return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    for symbol in arrSymbol:
        t = exchange.GetTicker(symbol)
        exchange.CreateOrder(symbol, "buy", t["Last"] / 2, 1)
        exchange.CreateOrder(symbol, "sell", t["Last"] * 2, 1)

    defaultOrders = exchange.GetOrders()
    swapOrders = exchange.GetOrders("USDT.swap")
    futuresOrders = exchange.GetOrders("USDT.futures")
    btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap")

    tbls = []
    arr = [defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders]
    tblDesc = ["defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"]
    for index in range(len(arr)):
        orders = arr[index]
        tbl = {"type": "table", "title": tblDesc[index], "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], "rows": []}
        for order in orders:
            tbl["rows"].append([order["Symbol"], order["Id"], order["Price"], order["Amount"], order["DealAmount"], order["AvgPrice"], order["Status"], order["Type"], order["Offset"], order["ContractType"]])
        tbls.append(tbl)

    LogStatus("`" + json.dumps(tbls) +  "`")

    return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};
    
    for (const auto& symbol : arrSymbol) {
        auto t = exchange.GetTicker(symbol);
        exchange.CreateOrder(symbol, "buy", t.Last / 2, 1);
        exchange.CreateOrder(symbol, "sell", t.Last * 2, 1);
    }
    
    auto defaultOrders = exchange.GetOrders();
    auto swapOrders = exchange.GetOrders("USDT.swap");
    auto futuresOrders = exchange.GetOrders("USDT.futures");
    auto btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap");
    
    json tbls = R"([])"_json;
    std::vector<std::vector<Order>> arr = {defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders};
    std::string tblDesc[] = {"defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"};
    for (int index = 0; index < arr.size(); index++) {
        auto orders = arr[index];
        json tbl = R"({
            "type": "table", 
            "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"],
            "rows": []
        })"_json;
        tbl["title"] = tblDesc[index];
    
        for (const auto& order : orders) {
            json arrJson = R"([])"_json;

            arrJson.push_back(order.Symbol);
            arrJson.push_back(to_string(order.Id));    // The Id attribute type in the Order structure is TId, which is encoded using a C++ function to_string built into the FMZ platform.
            arrJson.push_back(order.Price);
            arrJson.push_back(order.Amount);
            arrJson.push_back(order.DealAmount);
            arrJson.push_back(order.AvgPrice);
            arrJson.push_back(order.Status);
            arrJson.push_back(order.Type);
            arrJson.push_back(order.Offset);
            arrJson.push_back(order.ContractType);
    
            tbl["rows"].push_back(arrJson);
        }
    
        tbls.push_back(tbl);
    }
    
    LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
    
    return;
}

Menggunakan objek pertukaran niaga hadapan untuk meletakkan pesanan untuk beberapa pasangan dagangan yang berbeza dan kod kontrak. Letakkan pesanan pada harga yang jauh dari harga rakan kongsi, simpan pesanan dalam keadaan yang tidak dipenuhi, dan permintaan pesanan dengan pelbagai cara.

function main() {
    var orders = exchange.GetOrders("BTC_USDT")           // Examples of spot products
    // var orders = exchange.GetOrders("BTC_USDT.swap")   // Examples of futures products
    Log("orders:", orders)
}
def main():
    orders = exchange.GetOrders("BTC_USDT")          # Examples of spot products
    # orders = exchange.GetOrders("BTC_USDT.swap")   # Examples of futures products
    Log("orders:", orders)
void main() {
    auto orders = exchange.GetOrders("BTC_USDT");           // Examples of spot products
    // auto orders = exchange.GetOrders("BTC_USDT.swap");   // Examples of futures products
    Log("orders:", orders);
}

Apabila memanggilexchange.GetOrders()fungsi, lulus dalamSymbolparameter untuk meminta data pesanan untuk pasangan dagangan tertentu dan kod kontrak.

DalamGetOrdersfungsi, senario penggunaan parameter simbol diringkaskan seperti berikut:

Klasifikasi Objek Pertukaran simbol Parameter Lingkup pertanyaan Perhatikan
Spot Jangan lulus parameter simbol Bertanya semua pasangan dagangan spot Untuk semua senario panggilan, jika antara muka pertukaran tidak menyokongnya, satu ralat akan dilaporkan dan nilai sifar akan dikembalikan.
Spot Tentukan jenis dagangan, parameter simbol adalah: BTC_USDT Mencari pasangan dagangan BTC_USDT yang ditentukan Untuk objek pertukaran spot, format parameter simbol adalah: BTC_USDT
Masa hadapan Jangan lulus parameter simbol Mencari semua produk dagangan dalam julat dimensi pasangan dagangan semasa dan kod kontrak Jika pasangan dagangan semasa adalah BTC_USDT dan kod kontrak adalah swap, semua kontrak kekal dengan margin USDT akan ditanyakan.GetOrders("USDT.swap")
Masa hadapan Tentukan jenis dagangan, parameter simbol adalah: BTC_USDT.swap Mencari kontrak kekal berasaskan USDT untuk BTC tertentu Untuk objek pertukaran niaga hadapan, format simbol parameter adalah: gabunganPasangan dagangandanKod kontrakditakrifkan oleh platform FMZ, dipisahkan dengan aksara"..
Masa hadapan Tentukan julat produk dagangan, parameter simbol adalah: USDT.swap Mencari semua kontrak kekal berasaskan USDT -
Bursa niaga hadapan yang menyokong opsyen Jangan lulus parameter simbol Mencari semua kontrak opsyen dalam julat dimensi pasangan dagangan semasa Jika pasangan dagangan semasa adalah BTC_USDT, kontrak ditetapkan kepada kontrak opsyen, contohnya, kontrak opsyen Binance: BTC-240108-40000-C
Bursa niaga hadapan yang menyokong opsyen Menentukan produk perdagangan tertentu Mencari kontrak opsyen yang ditentukan Sebagai contoh, untuk Bursa niaga hadapan Binance, parameter simbol adalah: BTC_USDT.BTC-240108-40000-C
Bursa niaga hadapan yang menyokong opsyen Tentukan julat produk dagangan, parameter simbol adalah: USDT.option Mencari semua kontrak opsyen berasaskan USDT -

DalamGetOrdersfungsi, permintaan objek pertukaran niaga hadapan Julat dimensi diringkaskan seperti berikut:

simbol Parameter Penentuan Julat Permintaan Perhatikan
USDT.swap Julat kontrak kekal berasaskan USDT. Untuk

dimensi yang tidak disokong oleh antara muka API pertukaran, Kesilapan akan dilaporkan dan nilai null akan dikembalikan apabila memanggil. USDT.futures. USDT berasaskan kontrak penghantaran. USD.swap. Rentang mata wang berasaskan kekal kontrak. USD.futures. Rentang penghantaran berasaskan mata wang kontrak. USDT.option.Rentang kontrak pilihan berasaskan USDT. USD.option. Rentang kontrak pilihan berasaskan mata wang. USDT.futures_combo. Pelbagai kombinasi CFD. Futures_Deribit Exchange USD.futures_ff. Pelbagai kontrak penghantaran margin bercampur. Futures_Kraken Exchange. $USD.swap_pf. $USD.swap_pf. ∙ ∙ Futures_Kraken Exchange ∙

Apabila akaun yang diwakili oleh objek pertukaranexchangetidak mempunyai pesanan yang menunggu dalamJulat pertanyaanatauInstrumen dagangan tertentu(perintah aktif dalam keadaan yang tidak dipenuhi), memanggil fungsi ini mengembalikan array kosong, iaitu:[]. Pertukaran berikut memerlukan instrumen untuk lulus dalam parameter instrumen ketika menyoal pesanan yang tidak selesai pada masa ini. Apabila memanggil fungsi GetOrders dengan pertukaran ini, jika parameter instrumen tidak diteruskan, hanya pesanan yang tidak selesai dari instrumen semasa yang diminta, bukan pesanan yang tidak selesai dari semua instrumen (kerana antara muka pertukaran tidak menyokong ini). Zaif, MEXC, LBank, Korbit, Coinw, BitMart, Bithumb, BitFlyer, BigONE.

Bursa yang tidak menyokongexchange.GetOrders()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetOrders Futures_Bibox

{@struct/Order Order}, {@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}

exchange.GetHistoryOrders

Peraturanexchange.GetHistoryOrders()fungsi digunakan untuk mendapatkan pasangan dagangan semasa, pesanan sejarah untuk kontrak; ia menyokong spesifikasi jenis dagangan tertentu.

Peraturanexchange.GetHistoryOrders()fungsi mengembalikan array struktur {@struct/Order Order} jika permintaan data berjaya, dan null jika permintaan gagal. {@struct/Order Order} array, nilai sifar

pertukaran.GetHistoryOrders() pertukaran.GetHistoryOrders (simbol) pertukaran.GetHistoryOrders ((simbol, sejak) exchange.GetHistoryOrders ((simbol, sejak, had) pertukaran.GetHistoryOrders ((sejak) pertukaran.GetHistoryOrders ((sejak, had)

PeraturansymbolParameter digunakan untuk menentukan simbol perdagangan.BTC_USDTpasangan dagangan, contohnya, apabilaexchangeadalah objek pertukaran spot, format parameter untuksymboladalahBTC_USDTJika ia adalah objek pertukaran niaga hadapan, mengambil kontrak kekal sebagai contoh, format parameter untuksymbolialah:BTC_USDT.swap. Jika anda sedang menyoal data pesanan kontrak opsyen, menetapkan parametersymbolkepada"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh).Pasangan daganganyang ditakrifkan oleh platform FMZ dan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, dipisahkan oleh watak .. Jika parameter ini tidak diteruskan, data pesanan pasangan dagangan dan kod kontrak yang ditetapkan pada masa ini akan diminta secara lalai.

simbol palsu senar PeraturansinceParameter digunakan untuk menentukan timestamp permulaan pertanyaan dalam mili saat. sejak palsu nombor PerkhidmatanlimitParameter digunakan untuk menentukan bilangan perintah untuk pertanyaan. had palsu nombor

function main() {
    var historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
}
def main():
    historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
void main() {
    auto historyOrders = exchange.GetHistoryOrders();
    Log(historyOrders);
}
  • Bilakahsymbol, since, limitJika parameter tidak ditentukan, pertanyaan lalai adalah pasangan dagangan semasa, pesanan sejarah kontrak. Menyoal pesanan sejarah dalam julat tertentu yang terdekat dengan masa semasa, julat pertanyaan bergantung pada julat pertanyaan tunggal antara muka pertukaran.
  • Apabilasymbolparameter ditentukan, query sejarah pesanan untuk jenis perdagangan yang ditetapkan.
  • Apabilasinceparameter ditentukan, pertanyaan dalam arah masa semasa menggunakansincecap waktu sebagai masa permulaan.
  • Jikalimitparameter ditentukan, pertanyaan dikembalikan selepas jumlah yang mencukupi entri.
  • Fungsi ini hanya disokong untuk pertukaran yang menyediakan antara muka pertanyaan pesanan sejarah.

Bursa yang tidak menyokongexchange.GetHistoryOrders()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetHistoryOrders Zaif / Upbit / Coincheck / Bitstamp / Bithumb / BitFlyer / BigONE Futures_dYdX / Futures_Bibox / Futures_ApolloX

{@struct/Order Order}, {@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}

exchange.SetPrecision

exchange.SetPrecision()fungsi digunakan untuk menetapkan ketepatanexchangeobjek pertukaranhargadanJumlah pesanan, selepas ditetapkan, sistem akan mengabaikan data yang berlebihan secara automatik.

pertukaran.SetPrecision ((hargaPrecision, jumlahPrecision)

PeraturanpricePrecisionparameter digunakan untuk mengawal ketepatan data harga. hargaKetepatan betul nombor PeraturanamountPrecisionparameter digunakan untuk mengawal ketepatan jumlah data yang akan dipesan. JumlahKeterangan betul nombor

function main(){
    // Set the decimal precision of price to 2 bits, and the decimal precision of variety order amount to 3 bits
    exchange.SetPrecision(2, 3)
}
def main():
    exchange.SetPrecision(2, 3)
void main() {
    exchange.SetPrecision(2, 3);
}

Sistem backtesting tidak menyokong fungsi ini, dan ketepatan numerik sistem backtesting dikendalikan secara automatik.

{@fun/Trade/exchange.Buy pertukaran.Buy}, {@fun/Trade/exchange.Sell pertukaran.Sell}

exchange.SetRate

Tetapkan kadar pertukaran semasa objek pertukaran.

pertukaran.SetRate ((rate))

PeraturanrateParameter digunakan untuk menentukan kadar pertukaran penukaran. kadar betul nombor

function main(){
    Log(exchange.GetTicker())
    // Set exchange rate conversion
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    // Set to 1, no conversion
    exchange.SetRate(1)
}
def main():
    Log(exchange.GetTicker())
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    exchange.SetRate(1)
void main() {
    Log(exchange.GetTicker());
    exchange.SetRate(7);
    Log(exchange.GetTicker());
    exchange.SetRate(1);
}

Jika nilai kadar pertukaran telah ditetapkan menggunakanexchange.SetRate()Kemudian semua maklumat harga seperti tickers, kedalaman, harga pesanan, dan lain-lain untuk pertukaran yang diwakili oleh semasaexchangeobjek pertukaran akan ditukar dengan mengalikannya dengan kadar pertukaran yang ditetapkan 7.exchangeadalah pertukaran dengan dolar AS sebagai mata wang denominasi.exchange.SetRate(7), semua harga di pasaran langsung akan ditukar kepada harga yang hampirCNYnama dengan mengalikan dengan 7.

{@fun/Market/exchange.GetRate pertukaran.GetRate}

exchange.IO

Peraturanexchange.IO()fungsi digunakan untuk panggilan antara muka lain yang berkaitan dengan objek pertukaran.

Peraturanexchange.IO()fungsi memanggil antara muka lain yang berkaitan dengan objek pertukaran, mengembalikan data tindak balas yang diminta pada panggilan yang berjaya dan ia mengembalikan null pada panggilan yang gagal. string, nombor, bool, objek, array, null, dan mana-mana jenis lain yang disokong oleh sistem

exchange.IO(k,... args)

PeraturankParameter digunakan untuk menetapkan jenis panggilan, dengan nilai pilihan"api", "currency", "base", "trade_margin", "trade_normal", "public_base", "mbase", selfTradePreventionMode, simulate, cross, dual, unifieddan seterusnya. k betul senar Parameter yang diperluaskan, lulus mengikut senario panggilan tertentu,argOleh kerana mekanisme polimorfik dariexchange.IO()fungsi, tetapan parameter yang berbeza sepadan dengan fungsi yang berbeza.exchange.IO()Fungsi tidak pasti. arg betul rentetan, nombor, bool, objek, susunan, sifar dan mana-mana jenis lain yang disokong oleh sistem

function main() {
    var arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    
    // Call exchange.IO to access the exchange's bulk order interface directly
    var ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", JSON.stringify(arrOrders))
    Log(ret)
}
import json
def main():
    arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}, 
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", json.dumps(arrOrders))
    Log(ret)
void main() {
    json arrOrders = R"([
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ])"_json;
    auto ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", arrOrders.dump());
    Log(ret);
}

Menggunakanexchange.IO("api", httpMethod, resource, params, raw)Borang panggilanexchange.IO()fungsi, adalah perlu untuk memahami antara muka API pertukaran dan memeriksa dokumentasi yang berkaitan terlebih dahulu. ini akan membolehkan anda untuk memperluaskan fungsi yang tidak ditambah kepada platform FMZ.POSTpermintaan tidak memerlukan anda untuk bimbang tentang penyulitan, menandatangani, atau mengesahkan parameter, yang sudah dikendalikan oleh FMZ di bahagian bawah, selagi anda mengisi parameter yang sepadan.OKX Exchangekontrak niaga hadapan, dan menggunakan parameterrawuntuk lulus parameter perintah:

var amount = 1
var price = 10
var basecurrency = "ltc"
function main () {
    // Note that both amount.toString() and price.toString() have a ' character on the left and right side
    var message = "symbol=" + basecurrency + "&amount='" + amount.toString() + "'&price='" + price.toString() + "'&side=buy" + "&type=limit"
    var id = exchange.IO("api", "POST", "/v1/order/new", message)
}
amount = 1
price = 10
basecurrency = "ltc"
def main():
    message = "symbol=" + basecurrency + "&amount='" + str(amount) + "'&price='" + str(price) + "'&side=buy" + "&type=limit"
    id = exchange.IO("api", "POST", "/v1/order/new", message)
void main() {
    auto amount = 1.0;
    auto price = 10.0;
    auto basecurrency = "ltc";
    string message = format("symbol=%s&amount=\"%.1f\"&price=\"%.1f\"&side=buy&type=limit", basecurrency, amount, price);
    auto id = exchange.IO("api", "POST", "/v1/order/new", message);
}

Jika nilai kunci dalamparamsparameter (iaitu, parameter permintaan HTTP) adalah rentetan, ia perlu ditulis dalam tanda petik tunggal (iaitu, simbol ') di sekitar nilai parameter untuk membungkus nilai parameter.

function main() {
    var ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
    Log(ret)
}
def main():
    ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
    Log(ret)
void main() {
    auto ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC");
    Log(ret);
}

Ia menyokong lulus dalam parameter url lengkap yang boleh mengabaikan operasi menukar alamat pangkalan (menyebutexchange.SetBase()fungsi).

function main(){
    var ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
}
def main():
    ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
void main() {
    auto ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT");
    Log(ret);
}

Contoh panggilan tanpa parameterraw:

function main() {
    // For example, if you set the current trading pair of the exchange object to BTC_USDT at the beginning of the live trading, print the current trading pair tickers
    Log(exchange.GetTicker())
    // Switch the trading pair to LTC_BTC      
    exchange.IO("currency", "LTC_BTC")
    Log(exchange.GetTicker())
}
def main():
    Log(exchange.GetTicker())
    exchange.IO("currency", "LTC_BTC")
    Log(exchange.GetTicker())
void main() {
    Log(exchange.GetTicker());
    exchange.IO("currency", "LTC_BTC");
    Log(exchange.GetTicker());
}

Bertukar pasangan dagangan bursa semasa, supaya ia akan menukar pasangan dagangan yang dikonfigurasi oleh kodpada penciptaan perdagangan langsungataupada backtest.

function main () {
    // exchanges[0] is the first exchange object added when the live trading is created 
    exchanges[0].IO("base", "https://api.huobi.pro")
}
def main():
    exchanges[0].IO("base", "https://api.huobi.pro")
void main() {
    exchanges[0].IO("base", "https://api.huobi.pro");
}```
For example, the default base address when the exchange object is wrapped is ```https://api.huobipro.com```, and when you need to switch to ```https://api.huobi.pro```, use the following code to switch:
```javascript
function main() {
    exchange.SetBase("https://api.bitfinex.com")
    exchange.IO("mbase", "https://api-pub.bitfinex.com")
}
def main():
    exchange.SetBase("https://api.bitfinex.com")
    exchange.IO("mbase", "https://api-pub.bitfinex.com")
void main() {
    exchange.SetBase("https://api.bitfinex.com");
    exchange.IO("mbase", "https://api-pub.bitfinex.com");
}

Untuk pertukaran dengan alamat asas yang berbeza untuk antara muka ticker dan antara muka perdagangan, misalnya, Bitfinex Futures mempunyai dua alamat, satu untuk antara muka ticker dan yang lain untuk antara muka perdagangan.exchange.SetBase("xxx"). Bitfinex niaga hadapan menukar alamat asas antara muka awam menggunakanexchange.IO("mbase", "xxx").

I. Untuk pertukaran berpusat pada mata wang kripto panggilan antara muka API lain yang tidak disatukan secara seragam, dengan parameterkditetapkan kepada"api":

exchange.IO("api", httpMethod, resource, params, raw)
  • httpMethod : Parameter adalah jenis rentetan, isi jenis permintaanPOST, GET, dan lain-lain
  • sumber: Parameter adalah jenis rentetan dan mengisi laluan permintaan; Ia menyokong penggunaan laluan permintaan lengkap, lihat contoh rujukan untuk butiran.
  • Parameter adalah jenis rentetan, diisi dengan parameter permintaan, dikodkan denganURL.
  • raw: Parameter adalah parameter rentetan mentah dan boleh ditinggalkan.

Peraturanexchange.IO("api", httpMethod, resource, params, raw)panggilan fungsi akan mengakses antara muka pertukaran dan mengembalikan null jika panggilan gagal dan ralat berlaku. Hanya perdagangan sebenar menyokong memanggilexchange.IO("api", httpMethod, resource, params, raw) function.

Untuk menukar pasangan dagangan, parameterkditetapkan kepada"currency":

exchange.IO("currency", currency)
  • mata wang: Parameter adalah jenis rentetan dengan format huruf besar seragam, menggunakan garis bawah untuk memisahkanbaseCurrencydaripadaquoteCurrency, sepertiBTC_USDT.

    1. Backtesting sistem kini menyokong menukar pasangan dagangan (hanya untuk mata wang digital spot pertukaran objek), apabila backtesting, anda perlu memberi perhatian bahawa anda hanya boleh beralih ke pasangan dagangan dengan mata wang yang sama, sebagai contoh, pasangan dagangan semasa adalahETH_BTChanya boleh beralih keLTC_BTC, bukan untukLTC_USDT.
    2. Untuk kontrak niaga hadapan cryptocurrency, objek pertukaran menukar pasangan dagangan dan kod kontrak perlu ditetapkan semula untuk menentukan kontrak mana yang akan didagangkan.
    3. Menggunakan fungsi {@fun/Account/exchange.SetCurrency exchange.SetCurrency} untuk menukar pasangan dagangan adalah sama seperti menggunakanexchange.IO("currency", currency)untuk menukar pasangan dagangan.

III. Digunakan untuk menukar mod akaun leveraged objek pertukaran mata wang kripto spot:

  • Parameterkditetapkan kepada"trade_margin"untuk beralih ke mod akaun leverage spot. meletakkan pesanan dan mendapatkan aset akaun akan mengakses antara muka leveraged spot bursa. Jika bursa membezakan antara margin penuh dan margin terpencil dalam leverage spot, gunakan:exchange.IO("trade_super_margin")untuk beralih kepada margin penuh untuk akaun leveraged, danexchange.IO("trade_margin")untuk beralih kepada margin terpencil untuk akaun leveraged.
  • Parameterkditetapkan kepada"trade_normal"untuk beralih semula ke mod akaun spot biasa.

Bursa spot yang menyokong beralih antara model akaun leveraged:

Pertukaran Nota khas
OKX Pasangan perdagangan dalam mod akaun leveraged berbeza dari yang biasa, beberapa pasangan perdagangan mungkin tidak memilikinya.exchange.IO("trade_super_margin")untuk beralih kepada kedudukan penuh untuk akaun leveraged dan penggunaanexchange.IO("trade_margin")untuk beralih ke kedudukan oleh kedudukan.trade_normaluntuk beralih ke mod spot biasa.exchange.IO("tdMode", "cross")untuk menentukan secara langsung mod leverage.
Huobi Pasangan dagangan mod akaun leveraged berbeza dari yang biasa, beberapa pasangan dagangan mungkin tidak memilikinya.trade_marginuntuk beralih ke kedudukan akaun leverage mengikut kedudukan, menggunakantrade_super_marginuntuk beralih ke kedudukan penuh akaun leverage.trade_normaluntuk beralih ke mod mata wang-mata wang biasa.
Binance Mod akaun leveraged dibahagikan kepada kedudukan mengikut kedudukan dan kedudukan penuh, penggunaantrade_marginuntuk beralih ke kedudukan oleh kedudukan, menggunakantrade_super_marginuntuk beralih ke kedudukan penuh, gunakantrade_normaluntuk beralih ke mod mata wang-mata wang biasa.
GateIO Mod akaun leveraged dibahagikan kepada kedudukan mengikut kedudukan dan kedudukan penuh, penggunaantrade_marginuntuk beralih ke kedudukan oleh kedudukan, menggunakantrade_super_marginuntuk beralih ke kedudukan penuh, gunakantrade_normaluntuk beralih ke mod mata wang-mata wang biasa.
AscendEx Penggunaanexchange.IO("trade_margin")untuk beralih ke mod akaun leverage danexchange.IO("trade_normal")untuk beralih semula ke mod akaun biasa.
WOO Penggunaanexchange.IO("trade_margin")untuk beralih ke mod akaun leverage danexchange.IO("trade_normal")untuk beralih semula ke mod akaun biasa.
CoinEx Penggunaanexchange.IO("trade_margin")untuk beralih ke mod akaun leveraged danexchange.IO("trade_normal")untuk beralih semula ke mod akaun biasa.

IV. Fungsi suis lain:Lihatlahexchange.IO()fungsi untukFungsi suis laindalam Panduan Pengguna.

{@fun/NetSettings/exchange.SetBase exchange.SetBase}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@var EXCHANGE_OP_IO_CONTROL}

exchange.Log

Peraturanexchange.Log()fungsi digunakan untuk mengeluarkan log penempatan pesanan dan pengeluaran di kawasan lajur log. Apabila dipanggil, tiada pesanan diletakkan, hanya log transaksi yang dikeluarkan dan direkodkan.

pertukaran.Log ((pesananJenis, harga, jumlah) pertukaran.Log ((pesananJenis, harga, jumlah,... args)

PeraturanorderTypeparameter digunakan untuk menetapkan jenis log output, nilai pilihan adalah {@var/LOG_TYPE/LOG_TYPE_BUY LOG_TYPE_BUY}, {@var/LOG_TYPE/LOG_TYPE_SELL LOG_TYPE_SELL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}. orderJenis betul nombor Perkhidmatanpriceparameter digunakan untuk menetapkan harga yang dipaparkan dalam log output. harga betul nombor PerkhidmatanamountParameter digunakan untuk menetapkan jumlah pesanan yang diletakkan yang dipaparkan dalam log output. jumlah betul nombor Parameter yang diperluaskan yang boleh mengeluarkan maklumat yang disertakan ke log ini,argparameter boleh lulus lebih daripada satu. arg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong oleh sistem

var id = 123
function main() {
    // Order type buy, price 999, amount 0.1
    exchange.Log(LOG_TYPE_BUY, 999, 0.1)      
    // Cancel the order
    exchange.Log(LOG_TYPE_CANCEL, id)         
}
id = 123
def main():
    exchange.Log(LOG_TYPE_BUY, 999, 0.1)
    exchange.Log(LOG_TYPE_CANCEL, id)
void main() {
    auto id = 123;
    exchange.Log(LOG_TYPE_BUY, 999, 0.1);
    exchange.Log(LOG_TYPE_CANCEL, id);
}

Menggunakanexchange.Log(orderType, price, amount)boleh digunakan untuk pesanan dagangan langsung mengikuti ujian, simulasi penempatan pesanan, dan ia boleh membantu dalam penempatan pesanan log.exchange.IO} berfungsi untuk mengakses antara muka pertukaran untuk membuat pesanan bersyarat, tetapi menggunakanexchange.IO()fungsi tidak output maklumat log urus niaga dalam rekod log dagangan hidup.exchange.Log()fungsi boleh digunakan untuk melengkapkan log output untuk merekod maklumat penempatan pesanan, dan yang sama berlaku untuk operasi pengeluaran pesanan.

ApabilaorderTypeparameter ialahLOG_TYPE_CANCEL, yangpriceParameter adalah urutan Id pesanan ditarik balik yang digunakan untuk mencetak log pengeluaran apabila pesanan ditarik balik secara langsung menggunakanexchange.IO()fungsi.exchange.Log()fungsi adalah fungsi ahli objek pertukaran {@var/EXCHANGE exchange}, berbeza dengan fungsi global {@fun/Log Log}.

{@fun/Log Log}, {@var/EXCHANGE exchange}, {@var/LOG_TYPE/LOG_TYPE_BUY LOG_TYPE_BUY}, {@var/LOG_TYPE/LOG_TYPE_SELL LOG_TYPE_SELL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}

exchange.Encode

Peraturanexchange.Encode()fungsi digunakan untuk pengiraan penyulitan tandatangan.

Peraturanexchange.Encode()fungsi mengembalikan pengekodan nilai hash yang dikira. senar

exchange.Encode ((algo, inputFormat, outputFormat, data) exchange.Encode ((algo, inputFormat, outputFormat, data, kunciFormat, kunci)

Parameteralgoadalah algoritma yang digunakan untuk pengiraan pengekodan. tetapan yang disokong adalah: raw (tidak menggunakan algoritma), sign, signTx, md4, md5, sha256, sha512, sha1, keccak256, sha3.224, sha3.256, sha3.384, sha3.512, sha3.keccak256, sha3.keccak512, sha512.384, sha512.256, sha512.224, emd160, ripke2b.256, blake2b.512, blake2s.128, blake2s.256 parameter.algojuga menyokong: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk, untuk pengekodan dan penyahkodan rentetan. Parameteralgojuga menyokong: ed25519 algoritma. Ia menyokong penggunaan algoritma hash yang berbeza, contohnya parameteralgoboleh ditulis sebagai ed25519.md5, ed25519.sha512, dll. Sokonganed25519.seedpengiraan. sesuatu betul senar Digunakan untuk menentukan format datadataparameter.inputFormatparameter boleh ditetapkan kepada salah satu daripada: raw, hex, base64, dan string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. inputFormat betul senar Digunakan untuk menentukan format output data.outputFormatparameter menyokong tetapan berikut: raw, hex, base64, string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. outputFormat betul senar Parameterdataadalah data yang akan diproses. data betul senar Digunakan untuk menentukan format datakeyparameter.keyparameter boleh ditetapkan kepada salah satu daripada: raw, hex, base64, dan string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. keyFormat palsu senar Perkhidmatankeyparameter digunakan untuk menentukan kunci yang digunakan dalam pengiraan tandatangan, dan ia boleh digunakan sebagai rentetan plaintext."{{accesskey}}", "{{secretkey}}"untuk merujuk kepadaaccessKeydansecretKeyyang dikonfigurasi dalam objek pertukaran {@var/EXCHANGE exchange}. kunci palsu senar

function main() {
    var APIKEY = "your Access Key(Bitmex API ID)"
    var expires = parseInt(Date.now() / 1000) + 10
    var signature = exchange.Encode("sha256", "string", "hex", "GET/realtime" + expires, "hex", "{{secretkey}}")
    var client = Dial("wss://www.bitmex.com/realtime", 60)
    var auth = JSON.stringify({args: [APIKEY, expires, signature], op: "authKeyExpires"})
    var pos = 0
    client.write(auth)
    client.write('{"op": "subscribe", "args": "position"}')
    while (true) {
        bitmexData = client.read()
        if(bitmexData.table == 'position' && pos != parseInt(bitmexData.data[0].currentQty)){
            Log('position change', pos, parseInt(bitmexData.data[0].currentQty), '@')
            pos = parseInt(bitmexData.data[0].currentQty)
        }
    }
}
import time
def main():
    APIKEY = "your Access Key(Bitmex API ID)"
    expires = int(time.time() + 10)
    signature = exchange.Encode("sha256", "string", "hex", "GET/realtime" + expires, "hex", "{{secretkey}}")
    client = Dial("wss://www.bitmex.com/realtime", 60)
    auth = json.dumps({"args": [APIKEY, expires, signature], "op": "authKeyExpires"})
    pos = 0
    client.write(auth)
    client.write('{"op": "subscribe", "args": "position"}')
    while True:
        bitmexData = json.loads(client.read())
        if "table" in bitmexData and bitmexData["table"] == "position" and len(bitmexData["data"]) != 0 and pos != bitmexData["data"][0]["currentQty"]:   
            Log("position change", pos, bitmexData["data"][0]["currentQty"], "@")
            pos = bitmexData["data"][0]["currentQty"]
void main() {
    auto APIKEY = "your Access Key(Bitmex API ID)";
    auto expires = Unix() + 10;
    auto signature = exchange.Encode("sha256", "string", "hex", format("GET/realtime%d", expires), "hex", "{{secretkey}}");
    
    auto client = Dial("wss://www.bitmex.com/realtime", 60);
    json auth = R"({"args": [], "op": "authKeyExpires"})"_json;            

    auth["args"].push_back(APIKEY);
    auth["args"].push_back(expires);
    auth["args"].push_back(signature);
    auto pos = 0;
    client.write(auth.dump());
    client.write("{\"op\": \"subscribe\", \"args\": \"position\"}");
    while(true) {
        auto bitmexData = json::parse(client.read());
        if(bitmexData["table"] == "position" && bitmexData["data"][0].find("currentQty") != bitmexData["data"][0].end() && pos != bitmexData["data"][0]["currentQty"]) {
            Log("test");
            Log("position change", pos, bitmexData["data"][0]["currentQty"], "@");
            pos = bitmexData["data"][0]["currentQty"];
        }
    }
}

Contoh push perubahan kedudukan BitMEX (wss protokol):

Hanya perdagangan sebenar menyokong memanggilexchange.Encode()fungsi."{{accesskey}}", "{{secretkey}}"rujukan hanya sah apabilaexchange.Encode()fungsi digunakan.

{@var/EXCHANGE exchange}, {@fun/Global/Encode Encode}

exchange.Go

Fungsi sokongan asynchronous pelbagai benang boleh mengubah operasi semua fungsi yang disokong menjadi pelaksanaan serentak asynchronous.

Peraturanexchange.Go()fungsi mengembalikan objek serentak dengan serta-merta, dan anda boleh menggunakanwait()kaedah objek serentak itu untuk mendapatkan hasil permintaan serentak. objek

pertukaran.Go (cara) pertukaran.Go ((metode,... args)

Peraturanmethodparameter digunakan untuk menentukan nama fungsi serentak. Perhatikan bahawa parameter adalah rentetan nama fungsi, bukan rujukan fungsi. kaedah betul senar Parameter untukmelaksanakan fungsi secara serentak, mungkin terdapat lebih daripada satu parameterarg. Jenis dan nombor parameterargbergantung kepada parameterfungsi pelaksanaan serentak. arg palsu string, nombor, bool, objek, array, fungsi, null, dan semua jenis lain yang disokong oleh sistem

function main(){
    // The following four operations are concurrently executed asynchronously by multiple threads and do not take time and return immediately
    var a = exchange.Go("GetTicker")
    var b = exchange.Go("GetDepth") 
    var c = exchange.Go("Buy", 1000, 0.1)
    var d = exchange.Go("GetRecords", PERIOD_H1)
           
    // Call the wait method to wait for the return of the ticker results asynchronously 
    var ticker = a.wait()            
    // Returns the depth, or null if it fails 
    var depth = b.wait()             
    // return order number, limited to 1 second timeout, if timeout, returns undefined, the object can continue to call wait if the last wait timeout 
    var orderId = c.wait(1000)
    if(typeof(orderId) == "undefined") {
        // Timeout, reacquire
        orderId = c.wait()
    }
    var records = d.wait()
}
def main():
    a = exchange.Go("GetTicker")
    b = exchange.Go("GetDepth")
    c = exchange.Go("Buy", 1000, 0.1)
    d = exchange.Go("GetRecords", PERIOD_H1)            

    ticker, ok = a.wait()
    depth, ok = b.wait()
    orderId, ok = c.wait(1000)
    if ok == False:
        orderId, ok = c.wait()
    records, ok = d.wait()
void main() {
    auto a = exchange.Go("GetTicker");
    auto b = exchange.Go("GetDepth");
    auto c = exchange.Go("Buy", 1000, 0.1);
    auto d = exchange.Go("GetRecords", PERIOD_H1);            

    Ticker ticker;
    Depth depth;
    Records records;
    TId orderId;
    a.wait(ticker);
    b.wait(depth);
    if(!c.wait(orderId, 300)) {
        c.wait(orderId);
    }
    d.wait(records);
}

Exchange.Go()contoh penggunaan fungsi, untuk menentukanundefineduntuk digunakantypeof(xx) === "undefined", kerananull == undefinedadalah sah dalam JavaScript.

function main() {
    var d = exchange.Go("GetRecords", PERIOD_H1)
    // Waiting for K-line results
    var records = d.wait()
    // Here waits an asynchronous operation that has been waited and finished, it will return null, and log the error message
    var ret = d.wait()
}
def main():
    d = exchange.Go("GetRecords", PERIOD_H1)
    records, ok = d.wait()
    ret, ok = d.wait()
void main() {
    auto d = exchange.Go("GetRecords", PERIOD_H1);
    Records records;
    d.wait(records);
    Records ret;
    d.wait(ret);
}

Menghubungiwait()kaedah pada objek serentak yang telah dilepaskan akan melaporkan ralat:

function main() {
    while(true) {
        var beginTS = new Date().getTime()
        var arrRoutine = []
        var arrTicker = []
        var arrName = []
        for(var i = 0; i < exchanges.length; i++) {
            arrRoutine.push(exchanges[i].Go("GetTicker"))
            arrName.push(exchanges[i].GetName())
        }            

        for(var i = 0; i < arrRoutine.length; i++) {
            arrTicker.push(arrRoutine[i].wait())
        }
        var endTS = new Date().getTime()            

        var tbl = {
            type: "table", 
            title: "ticker", 
            cols: ["index", "name", "latest-deal-price"], 
            rows: []
        }
        
        for(var i = 0; i < arrTicker.length; i++) {
            tbl.rows.push([i, arrName[i], arrTicker[i].Last])
        }            

        LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", endTS - beginTS, "millisecond", "\n", "`" + JSON.stringify(tbl) + "`")
        Sleep(500)
    }
}
import time 
import json
def main():
    while True:
        beginTS = time.time()
        arrRoutine = []
        arrTicker = []
        arrName = []
        for i in range(len(exchanges)):
            arrRoutine.append(exchanges[i].Go("GetTicker"))
            arrName.append(exchanges[i].GetName())            

        for i in range(len(exchanges)):
            ticker, ok = arrRoutine[i].wait()
            arrTicker.append(ticker)            

        endTS = time.time()
        tbl = {
            "type": "table", 
            "title": "ticker", 
            "cols": ["index", "name", "latest-deal-price"], 
            "rows": [] 
        }            

        for i in range(len(arrTicker)):
            tbl["rows"].append([i, arrName[i], arrTicker[i]["Last"]])            

        LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", endTS - beginTS, "second", "\n", "`" + json.dumps(tbl) + "`")
        Sleep(500)
void main() {
    while(true) {
        int length = exchanges.size();
        auto beginTS = UnixNano() / 1000000;
        Ticker arrTicker[length] = {};
        string arrName[length] = {};
        
        // Note that to add several exchange objects, several exchanges[n].Go functions have to be executed here, this example is to add four exchange objects, the details can be modified
        auto r0 = exchanges[0].Go("GetTicker");
        auto r1 = exchanges[1].Go("GetTicker");
        auto r2 = exchanges[2].Go("GetTicker");
        auto r3 = exchanges[3].Go("GetTicker");
        GoObj *arrRoutine[length] = {&r0, &r1, &r2, &r3};
        
        for(int i = 0; i < length; i++) {
            arrName[i] = exchanges[i].GetName();
        }            

        for(int i = 0; i < length; i++) {
            Ticker ticker;
            arrRoutine[i]->wait(ticker);
            arrTicker[i] = ticker;
        }        
        auto endTS = UnixNano() / 1000000;            

        json tbl = R"({
            "type": "table", 
            "title": "ticker", 
            "cols": ["index", "name", "latest-deal-price"], 
            "rows": [] 
        })"_json;            

        for(int i = 0; i < length; i++) {
            json arr = R"(["", "", ""])"_json;
            arr[0] = format("%d", i);
            arr[1] = arrName[i];
            arr[2] = format("%f", arrTicker[i].Last);
            tbl["rows"].push_back(arr);
        }            

        LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", format("%d", endTS - beginTS), "millisecond", "\n", "`" + tbl.dump() + "`");
        Sleep(500);
    }
}

Akses serentak kepada pelbagai pertukaran ticker:

function main() {
    /*  
        Testing with OKX futures order interface
        POST /api/v5/trade/order        
    */
    
    var beginTS = new Date().getTime()
    var param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
    var ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    var ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    var ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    
    var id1 = ret1.wait()
    var id2 = ret2.wait()
    var id3 = ret3.wait()
    var endTS = new Date().getTime()                

    Log("id1:", id1)
    Log("id2:", id2)
    Log("id3:", id3)
    Log("Concurrent order placement time consumption:", endTS - beginTS, "millisecond")
}
import time
import json
def main():
    beginTS = time.time()
    param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
    ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
    ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
    ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))            

    id1, ok1 = ret1.wait()
    id2, ok2 = ret2.wait()
    id3, ok3 = ret3.wait()
    endTS = time.time()            

    Log("id1:", id1)
    Log("id2:", id2)
    Log("id3:", id3)
    Log("Concurrent order placement time consumption:", endTS - beginTS, "second")
void main() {
    auto beginTS = UnixNano() / 1000000;
    json param = R"({"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"})"_json;
    auto ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
    auto ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
    auto ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());            

    json id1 = R"({})"_json;
    json id2 = R"({})"_json;
    json id3 = R"({})"_json;            

    ret1.wait(id1);
    ret2.wait(id2);
    ret3.wait(id3);
    auto endTS = UnixNano() / 1000000;            

    Log("id1:", id1);
    Log("id2:", id2);
    Log("id3:", id3);
    Log("Concurrent order placement time consumption:", endTS - beginTS, "millisecond");
}

Permintaan serentak untukexchange.IO("api", ...)fungsi:

Fungsi ini hanya mewujudkan tugas pelaksanaan berbilang benang apabila dijalankan dalam perdagangan sebenar, backtesting tidak menyokong pelaksanaan tugas serentak berbilang benang (backtesting tersedia, tetapi masih dijalankan secara berurutan). Selepasexchange.Go()fungsi mengembalikan objek,wait()fungsi dipanggil melalui objek itu untuk mendapatkan data yang dikembalikan oleh benang.wait()fungsi mesti dipanggil untuk mendapatkan data sebelum benang akan dibebaskan secara automatik.wait()fungsi ditentukan, utas tidak akan dibebaskan secara automatik walaupun masa tamat berlaku. Hasil utas mesti diperoleh sebelum ia akan dibebaskan secara automatik (tidak kira kejayaan atau kegagalan panggilan antara muka untuk akses serentak).wait()fungsi tanpa mengira sama ada pelaksanaan berjaya atau gagal, dan sumber benang yang diminta olehexchange.Go()fungsi mesti dibebaskan secara automatik oleh pelabuhan. Peraturanwait()kaedah menyokong parameter timeout: Tanpa parameter timeout, iaitu,wait(), atau dengan parameter timeout 0, iaitu,wait(0).wait()blok fungsi dan menunggu sehingga thread serentak selesai berjalan, mengembalikan hasil pelaksanaan thread serentak. Tetapkan parameter waktu henti -1, iaituwait(-1).wait()fungsi kembali dengan segera, dengan nilai pulangan yang berbeza untuk bahasa pengaturcaraan yang berbeza, lihat subbahagian ini untuk panggilan contoh. Tetapkan parameter masa lapang tertentu,wait(300), danwait()Fungsi akan menunggu maksimum 300 milisaat sebelum kembali.

Jika hasil pulangan akhirwait()fungsi tidak diperolehi, sumber thread tidak akan dibebaskan secara automatik, yang akan membawa kepada pengumpulan utas yang diminta, dan lebih daripada 2000 akan melaporkan ralat:"too many routine wait, max is 2000". Fungsi yang disokong:GetTicker, GetDepth, GetTrades, GetRecords, GetAccount, GetOrders, GetOrder, CancelOrder, Buy, Sell, GetPositions, IO. Semua fungsi ini dilaksanakan berdasarkan objek pertukaran semasa {@var/EXCHANGE exchange} apabila dipanggil secara serentak. Perbezaan antara bahasa Python dan bahasa JavaScript adalah bahawawait()fungsi objek serentak dalam bahasa Python mengembalikan dua parameter. Parameter pertama adalah hasil yang dikembalikan oleh panggilan API asynchronous, dan parameter kedua menunjukkan sama ada panggilan asynchronous selesai.


def main():
    d = exchange.Go("GetRecords", PERIOD_D1)
    # ok will return True definitely, unless the strategy is stopped
    ret, ok = d.wait()          
    # If the wait times out, or if it waits for an instance that has already ended, ok returns False
    ret, ok = d.wait(100)  

{@fun/Global/Mail_Go Mail_Go}, {@fun/Global/HttpQuery_Go HttpQuery_Go}, {@fun/Global/EventLoop EventLoop}

Akaun

exchange.GetAccount

Peraturanexchange.GetAccount()fungsi digunakan untuk meminta maklumat akaun pertukaran.GetAccount()fungsi adalah fungsi ahli objek pertukaran {@var/EXCHANGE exchange}.exchangeobjek hanya berkaitan denganexchange, dan ia tidak akan diulangi selepas dokumentasi.

Bertanya maklumat aset akaun dan kembali struktur {@struct/Akaun Akaun} jika pertanyaan berjaya atau tidak sah jika gagal. {@struct/Akaun Akaun}, nilai sifar

pertukaran.GetAccount ((()

function main(){
    // Switching trading pairs
    exchange.IO("currency", "BTC_USDT")     
    // Take OKX futures as an example, set the contract as the current week's contract, the current trading pair is BTC_USDT, so the current contract is BTC's U-nominal current week contract
    exchange.SetContractType("this_week")   
    // Get current account asset data
    var account = exchange.GetAccount()
    // Available balance of USDT as margin
    Log(account.Balance)
    // USDT freeze amount as margin
    Log(account.FrozenBalance)
    // Current asset equity
    Log(account.Equity)
    // The unrealized profit and loss of all positions held with the current asset as margin
    Log(account.UPnL)
}
def main():
    exchange.IO("currency", "BTC_USDT")
    exchange.SetContractType("this_week")    
    account = exchange.GetAccount()
    Log(account["Balance"])
    Log(account["FrozenBalance"])
    Log(account["Equity"])
    Log(account["UPnL"])
void main() {
    exchange.IO("currency", "BTC_USDT");
    exchange.SetContractType("this_week");    
    auto account = exchange.GetAccount();
    Log(account.Balance);
    Log(account.FrozenBalance);
    Log(account["Equity"])
    Log(account["UPnL"])
}

Buat pasangan dagangan, kod kontrak, dan dapatkan maklumat akaun semasa.

Jika objek pertukaran ditetapkan untuk pertukaran kontrak niaga hadapan cryptocurrency, dan beralih ke kontrak denganUSDTsebagai margin (lihat {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType} fungsi untuk cara menukar).USDTsebagai margin, yang dicatatkan dalamBalance, FrozenBalanceatribut struktur {@struct/Akaun Akaun}. Jika objek pertukaran ditetapkan untuk pertukaran kontrak niaga hadapan cryptocurrency, dan beralih ke kontrak berasaskan mata wang, aset itu dalam mata wang sebagai margin dan dicatatkan dalamStocks, FrozenStocksatribut struktur {@struct/Akaun Akaun}. Apabila menggunakan akaun gabungan Binance Futures, apabila memanggilexchange.GetAccount()fungsi untuk meminta maklumat akaun, data yang dikemas kini adalah jumlah semua aset ditukar kepadaUSD. Ia dipaparkan dalamBalanceJika anda perlu mengira jumlah penukaran aset lain, anda boleh menggunakan jumlah penukaran USD dibahagikan dengan harga indeks (aset yang akan ditukaran) dan kemudian dibahagikan dengan kadar gadai (aset yang akan ditukaran) untuk mengira.

{@struct/Account Account}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}

exchange.GetAssets

Peraturanexchange.GetAssetsfungsi digunakan untuk meminta maklumat aset akaun pertukaran.

Peraturanexchange.GetAssets()fungsi mengembalikan array struktur {@struct/Asset Asset} jika permintaan data berjaya, atau null jika permintaan gagal. {@struct/Asset Asset} array, nilai sifar

pertukaran.GetAssets()

function main() {
    // exchange.SetCurrency("BTC_USDT")  // You can set up trading pairs
    // exchange.SetContractType("swap")  // You can set up contracts
    var assets = exchange.GetAssets()
    Log(assets)
}
def main():
    # exchange.SetCurrency("BTC_USDT")  # You can set up trading pairs
    # exchange.SetContractType("swap")  # You can set up contracts
    assets = exchange.GetAssets()
    Log(assets)
void main() {
    // exchange.SetCurrency("BTC_USDT");  // You can set up trading pairs
    // exchange.SetContractType("swap");  // You can set up contracts
    auto assets = exchange.GetAssets();
    Log(assets);
}

Dapatkan maklumat mengenai aset akaun pertukaran,exchange.GetAssets()Mengembalikan array dengan elemen struktur Aset.

PeraturanGetAssets()fungsi objek Bursa Berjangka mengembalikan aset margin di bawah pasangan dagangan semasa (berasaskan mata wang, berasaskan USDT, berasaskan USDC, dan lain-lain).

{@struct/Asset Asset}

exchange.GetName

Peraturanexchange.GetName()fungsi digunakan untuk mendapatkan nama pertukaran yang objek pertukaran semasa terikat.

Peraturanexchange.GetName()fungsi mengembalikan nama bursa yang ditakrifkan oleh platform FMZ Quant Trading. senar

pertukaran.GetName()

function main() {
    Log("The exchange object exchange is judged to be Binance spot, and the result is judged to be:", exchange.GetName() == "Binance")
}
def main():
    Log("The exchange object exchange is judged to be Binance spot, and the result is judged to be:", exchange.GetName() == "Binance")
void main() {
    Log("The exchange object exchange is judged to be Binance spot, and the result is judged to be:", exchange.GetName() == "Binance");
}

Peraturanexchange.GetName()fungsi biasanya digunakan untuk mengenal pasti objek pertukaran, sepertiexchangeatauexchanges[1], exchanges[2]Nama bursa kontrak niaga hadapan cryptocurrency mempunyai awalan tetapFutures_.

{@fun/Account/exchange.GetLabel pertukaran.GetLabel}

exchange.GetLabel

Peraturanexchange.GetLabel()fungsi digunakan untuk mendapatkan label tersuai yang ditetapkan apabila objek pertukaran dikonfigurasi.

Peraturanexchange.GetLabel()fungsi mengembalikan label tersuai yang ditetapkan apabila objek pertukaran dikonfigurasikan. senar

pertukaran.GetLabel()

function main() {
    Log("exchange label:", exchange.GetLabel())
}
def main():
    Log("exchange label:", exchange.GetLabel())
void main() {
    Log("exchange label:", exchange.GetLabel());
}

Pertukaran objek sepertiexchangeatauexchanges[1], exchanges[2]dalam kod strategi dikenal pasti dengan tag set.

{@var/EXCHANGE pertukaran}

exchange.GetCurrency

Peraturanexchange.GetCurrency()fungsi digunakan untuk mendapatkan pasangan dagangan yang ditetapkan pada masa ini.

Peraturanexchange.GetCurrency()fungsi mengembalikan pasangan dagangan yang ditetapkan oleh objek pertukaran semasa {@var/EXCHANGE exchange}. senar

pertukaran.GetCurrency()

function main() {
    Log("the current trading pair of exchange is:", exchange.GetCurrency())
}
def main():
    Log("the current trading pair of exchange is:", exchange.GetCurrency())
void main() {
    Log("the current trading pair of exchange is:", exchange.GetCurrency());
}

Format pasangan dagangan adalah huruf besar seragam, menggunakan tanda bawah untuk memisahkanbaseCurrencydanquoteCurrency, sepertiBTC_USDT.

{@fun/Account/exchange.SetCurrency exchange.SetCurrency}

exchange.SetCurrency

Peraturanexchange.SetCurrency()fungsi digunakan untuk menukar pasangan dagangan semasa objek pertukaran {@var/EXCHANGE exchange}.

pertukaran.Set Mata wang ((mata wang)

PeraturancurrencyParameter digunakan untuk menetapkan pasangan dagangan untuk ditukar. format pasangan dagangan adalah huruf besar seragam, menggunakan garis bawah untuk memisahkanbaseCurrencydaripadaquoteCurrency, sepertiBTC_USDT. Mata wang betul senar

function main() {
    var ticker = exchange.GetTicker() 
    Log(ticker)
    Log(exchange.GetAccount())    
    // Switching trading pairs, pay attention to the changes of ticker data and account information after switching
    exchange.SetCurrency("LTC_USDT")
    Log("Switch to LTC_USDT")
    ticker = exchange.GetTicker()
    Log(ticker)
    Log(exchange.GetAccount())
}
def main():
    ticker = exchange.GetTicker()
    Log(ticker)
    Log(exchange.GetAccount())
    exchange.SetCurrency("LTC_USDT")
    Log("Switch to LTC_USDT")
    ticker = exchange.GetTicker()
    Log(ticker)
    Log(exchange.GetAccount())
void main() {
    auto ticker = exchange.GetTicker();
    Log(ticker);
    Log(exchange.GetAccount());
    exchange.SetCurrency("LTC_USDT");
    Log("Switch to LTC_USDT");
    ticker = exchange.GetTicker();
    Log(ticker);
    Log(exchange.GetAccount());
}
  1. Serasi denganexchange.IO("currency", "BTC_USDT")kaedah menukar, sila rujuk kepada {@funexcahnge.IO}.
  2. Sokongan menukar pasangan dagangan dalam sistem backtesting, nama mata wang yang diisytiharkan tidak boleh diubah apabila menukar pasangan dagangan dalam sistem backtesting.BTC_USDTboleh ditukar kepadaLTC_USDT, bukan untukLTC_BTC.
  3. Bilangan mata wang dagangan adalah 0 selepas beralih ke pasangan dagangan yang pada mulanya ditetapkan pada halaman bukan backtest.BTC_USDT, bilanganBTCadalah 3, bilanganUSDTPada masa ini, beralih keLTC_USDTsegera, bilangan mata wang dagangan adalah 0 selepas beralih, iaitu bilanganLTC_USDTdalam akaun adalah 0. Iaitu, bilanganLTCdalam akaun adalah 0, dan pasangan dagangan yang ditukar berkongsi bilanganUSDT, iaitu 10 000.

{@fun/Account/exchange.GetCurrency exchange.GetCurrency}

exchange.GetQuoteCurrency

Peraturanexchange.GetQuoteCurrency()Fungsi digunakan untuk mendapatkan nama mata wang yang diisytiharkan pasangan dagangan semasa, iaituquoteCurrency.

Peraturanexchange.GetQuoteCurrency()fungsi mengembalikan nama mata wang yang diisytiharkan pasangan dagangan semasa. senar

pertukaran.GetQuoteCurrency()

function main() {
    exchange.SetCurrency("BTC_USDT")
    Log("BTC_USDT denominated currency name:", exchange.GetQuoteCurrency())
    // exchange.SetCurrency("ETH_BTC")
    // Log("ETH_BTC denominated currency name:", exchange.GetQuoteCurrency())
}
def main():
    exchange.SetCurrency("BTC_USDT")
    Log("BTC_USDT denominated currency name:", exchange.GetQuoteCurrency())
    # exchange.SetCurrency("ETH_BTC")
    # Log("ETH_BTC denominated currency name:", exchange.GetQuoteCurrency())
void main() {
    exchange.SetCurrency("BTC_USDT");
    Log("BTC_USDT denominated currency name:", exchange.GetQuoteCurrency());
    // exchange.SetCurrency("ETH_BTC")
    // Log("ETH_BTC denominated currency name:", exchange.GetQuoteCurrency())
}

Sebagai contoh: {@var/EXCHANGE pertukaran} pertukaran objeks pasangan urus niaga semasa adalahBTC_USDT, yangexchange.GetQuoteCurrency()fungsi pulanganUSDT. Jika pasangan dagangan semasa adalahETH_BTC, yangexchange.GetQuoteCurrency()fungsi pulanganBTC.

{@fun/Account/exchange.GetCurrency exchange.GetCurrency}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}

Masa hadapan

exchange.GetPositions

Peraturanexchange.GetPositions()fungsi digunakan untuk mendapatkan maklumat kedudukan;GetPositions()fungsi adalah fungsi ahli objek pertukaran {@var/EXCHANGE exchange}.GetPositions()fungsi mendapat maklumat kedudukan akaun pertukaran terikat kepada objek pertukaranexchange. Tujuan fungsi (metode) ahliexchangeobjek hanya berkaitan denganexchangedan tidak akan diulang di sini.

Peraturanexchange.GetPositions()fungsi mengembalikan pelbagai struktur {@struct/Position Position} jika permintaan data berjaya, dan ia mengembalikan nilai null jika permintaan data gagal. {@struct/Position Position} array, nilai sifar

pertukaran.GetPositions ((() pertukaran.GetPositions (simbol)

Parametersymboldigunakan untuk menetapkansimbol perdaganganatauJulat simbol daganganuntuk ditanyakan. JikasymbolJika parameter tidak diteruskan, lalai adalah untuk meminta data kedudukan semua simbol dalam julat dimensi pasangan dagangan semasa dan kod kontrak.

simbol palsu senar

/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    for (var symbol of arrSymbol) {
        exchange.CreateOrder(symbol, "buy", -1, 1)
        exchange.CreateOrder(symbol, "sell", -1, 1)
    }

    var defaultPositions = exchange.GetPositions()
    var swapPositions = exchange.GetPositions("USDT.swap")
    var futuresPositions = exchange.GetPositions("USDT.futures")
    var btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap")

    var tbls = []
    var arr = [defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions]
    var tblDesc = ["defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"]
    for (var index in arr) {
        var positions = arr[index]
        var tbl = {type: "table", title: tblDesc[index], cols: ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"], rows: [] }
        for (var pos of positions) {
            tbl.rows.push([pos.Symbol, pos.MarginLevel, pos.Amount, pos.FrozenAmount, pos.Price, pos.Profit, pos.Type, pos.ContractType, pos.Margin])
        }
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) + "`")

    // Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
    return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    for symbol in arrSymbol:
        exchange.CreateOrder(symbol, "buy", -1, 1)
        exchange.CreateOrder(symbol, "sell", -1, 1)

    defaultPositions = exchange.GetPositions()
    swapPositions = exchange.GetPositions("USDT.swap")
    futuresPositions = exchange.GetPositions("USDT.futures")
    btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap")

    tbls = []
    arr = [defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions]
    tblDesc = ["defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"]
    for index in range(len(arr)):
        positions = arr[index]
        tbl = {"type": "table", "title": tblDesc[index], "cols": ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"], "rows": []}
        for pos in positions:
            tbl["rows"].append([pos["Symbol"], pos["MarginLevel"], pos["Amount"], pos["FrozenAmount"], pos["Price"], pos["Profit"], pos["Type"], pos["ContractType"], pos["Margin"]])

        tbls.append(tbl)

    LogStatus("`" + json.dumps(tbls) + "`")

    return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};
    
    for (const auto& symbol : arrSymbol) {
        exchange.CreateOrder(symbol, "buy", -1, 1);
        exchange.CreateOrder(symbol, "sell", -1, 1);
    }
    
    auto defaultPositions = exchange.GetPositions();
    auto swapPositions = exchange.GetPositions("USDT.swap");
    auto futuresPositions = exchange.GetPositions("USDT.futures");
    auto btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap");
    
    json tbls = R"([])"_json;
    std::vector<std::vector<Position>> arr = {defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions};
    std::string tblDesc[] = {"defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"};
    for (int index = 0; index < arr.size(); index++) {
        auto positions = arr[index];
        json tbl = R"({
            "type": "table", 
            "cols": ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"],
            "rows": []
        })"_json;
        tbl["title"] = tblDesc[index];
    
        for (const auto& pos : positions) {
            json arrJson = R"([])"_json;
    
            arrJson.push_back(pos.Symbol);
            arrJson.push_back(pos.MarginLevel);
            arrJson.push_back(pos.Amount);
            arrJson.push_back(pos.FrozenAmount);
            arrJson.push_back(pos.Price);
            arrJson.push_back(pos.Profit);
            arrJson.push_back(pos.Type);
            arrJson.push_back(pos.ContractType);
            arrJson.push_back(pos.Margin);
    
            tbl["rows"].push_back(arrJson);
        }
    
        tbls.push_back(tbl);
    }
    
    LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
    
    return; 
}

Menggunakan objek pertukaran niaga hadapan untuk meletakkan pesanan pasaran untuk pelbagai pasangan dagangan yang berbeza dan kod kontrak.

Kontrak niaga hadapan mata wang kripto berbeza dengan spot mata wang kripto, yang hanya mempunyai konsep kedudukan yang logik.Pasangan dagangan, Kod kontrakSila rujuk {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType} fungsi. DalamGetPositionsfungsi, senario penggunaan parameter simbol diringkaskan seperti berikut:

Klasifikasi Objek Pertukaran simbol Parameter Lingkup pertanyaan Perhatikan
Masa hadapan Jangan lulus parameter simbol Mencari semua produk dagangan dalam julat dimensi pasangan dagangan semasa dan kod kontrak Jika pasangan dagangan semasa adalah BTC_USDT dan kod kontrak adalah swap, semua kontrak kekal berasaskan USDT akan ditanyakan.GetPositions("USDT.swap")
Masa hadapan Tentukan produk dagangan, parameter simbol adalah: BTC_USDT.swap Mencari kontrak kekal berasaskan USDT BTC tertentu Untuk objek pertukaran niaga hadapan, format simbol parameter adalah: gabunganPasangan dagangandanKod kontrakditakrifkan oleh platform FMZ, dipisahkan dengan aksara"..
Masa hadapan Tentukan julat produk dagangan, parameter simbol adalah: USDT.swap Mencari semua kontrak kekal berasaskan USDT -
Bursa niaga hadapan yang menyokong opsyen Jangan lulus parameter simbol Mencari semua kontrak opsyen dalam julat dimensi pasangan dagangan semasa Jika pasangan dagangan semasa adalah BTC_USDT, kontrak ditetapkan kepada kontrak opsyen, contohnya, kontrak opsyen Binance: BTC-240108-40000-C
Bursa niaga hadapan yang menyokong opsyen Menentukan produk perdagangan tertentu Mencari kontrak opsyen yang ditentukan Sebagai contoh, untuk Bursa niaga hadapan Binance, parameter simbol adalah: BTC_USDT.BTC-240108-40000-C
Bursa niaga hadapan yang menyokong opsyen Tentukan julat produk dagangan, parameter simbol adalah: USDT.option Mencari semua kontrak opsyen berasaskan USDT -

DalamGetPositionsfungsi, objek pertukaran niaga hadapan Julat dimensi pertanyaan diringkaskan seperti berikut:

simbol Parameter Penentuan skop permintaan Perhatikan
USDT.swap Julat kontrak kekal berasaskan USDT. Untuk

dimensi yang tidak disokong oleh antara muka API pertukaran, Kesilapan akan dilaporkan dan nilai null akan dikembalikan apabila memanggil.

USDT.futures. USDT berasaskan kontrak penghantaran.

USD.swap. kontrak.

USD.futures.Skop penghantaran berasaskan mata wang kontrak.

USDT.option.Rentang kontrak pilihan berasaskan USDT.

USD.option. Rentang kontrak pilihan berasaskan mata wang.

  • |

USDT.futures_combo. Pelbagai kombinasi CFD. Futures_Deribit Exchange

USD.futures_ff. Jangkauan kontrak penghantaran margin bercampur. Futures_Kraken Exchange.

USD.swap_pf Rentang kontrak kekal margin campuran. Futures_Kraken Exchange.

Serasi denganexchange.GetPosition()panggilan,GetPositionadalah sama denganGetPositions.

Apabila akaun yang diwakili oleh objek pertukaranexchangetidak mempunyai kedudukan dalamJulat pertanyaanatauInstrumen dagangan tertentu, yangexchange.GetPositions()fungsi mengembalikan array kosong, contohnya:[].

{@struct/Position Position}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}

exchange.SetMarginLevel

Peraturanexchange.SetMarginLevel()Fungsi ini digunakan untuk menetapkan nilai leverage pasangan dagangan atau kontrak yang ditentukan olehsymbolParameter. Serasi dengan hanya lulus dalam parametermarginLeveluntuk menetapkan nilai leverage pasangan dagangan semasa atau kontrak objek pertukaran {@var/EXCHANGE exchange}.

pertukaran.SetMarginLevel ((simbol, marginLevel) pertukaran.SetMarginLevel ((marginLevel)

Peraturansymbolparameter digunakan untuk menentukan pasangan dagangan atau kontrak yang mana nilai leverage perlu diselaraskan.symbolparameterSetMarginLevel()fungsi adalah selaras dengan formatsymbolparameterGetTicker()fungsi. simbol palsu senar PeraturanmarginLevelparameter digunakan untuk menetapkan nilai leverage, yang biasanya bilangan bulat untuk pertukaran dan ia juga menyokong tetapan nilai leverage titik terapung untuk beberapa pertukaran. marginLevel betul nombor

function main() {
    exchange.SetMarginLevel(10)
    // Set the leverage of BTC’s USDT-margined perpetual contract to 15
    exchange.SetMarginLevel("BTC_USDT.swap", 15)
}
def main():
    exchange.SetMarginLevel(10)
    exchange.SetMarginLevel("BTC_USDT.swap", 15)
void main() {
    exchange.SetMarginLevel(10);
    exchange.SetMarginLevel("BTC_USDT.swap", 15); 
}

Peraturanexchange.SetMarginLevel()fungsi menyokong cryptocurrency kontrak niaga hadapan objek pertukaran sahaja. sistem backtesting menyokong memanggilexchange.SetMarginLevel()fungsi untuk menetapkan nilai leverage. Untuk kontrak niaga hadapan mata wang kripto, mekanisme leverage tidak seragam kerana bursa kontrak niaga hadapan mata wang kripto.exchange.SetMarginLevel()fungsi tidak menjana permintaan rangkaian, tetapi hanya menetapkan pembolehubah leverage dalam sistem FMZ yang mendasari (digunakan untuk lulus parameter dalam antara muka penempatan pesanan). Nilai leverage beberapa kontrak niaga hadapan bursa adalah tetapan bursa, yang perlu ditetapkan di halaman laman web bursa atau menggunakan antara muka API.exchange.SetMarginLevel()fungsi akan menjana permintaan rangkaian dan mungkin gagal menetapkan leverage. boleh ada banyak sebab untuk ini, sebagai contoh: terdapat kedudukan semasa atau pesanan menunggu, yang membuat mustahil untuk menetapkan nilai leverage baru untuk pasangan perdagangan atau kontrak ini. Bursa yang tidak menyokongexchange.SetMarginLevel()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
SetMarginLevel Futures_dYdX / Futures_Deribit

{@var/EXCHANGE pertukaran}

exchange.SetDirection

Peraturanexchange.SetDirection()fungsi digunakan untuk menetapkan arah pesanan fungsi {@fun/Trade/exchange.Buy exchange.Buy}, fungsi {@fun/Trade/exchange.Sell exchange.Sell} apabila meletakkan pesanan untuk kontrak niaga hadapan.

pertukaran.SetDirection ((arah)

Peraturandirectionparameter digunakan untuk menetapkan arah kontrak niaga hadapan apabila pesanan diletakkan."buy", "closesell", "sell", "closebuy". Arah betul senar

function main(){
    // For example, set to OKX futures contract of this week
    exchange.SetContractType("this_week")    
    // Set leverage to 5 times
    exchange.SetMarginLevel(5)
    // Set the order type to long
    exchange.SetDirection("buy")
    // Place an order for 2 contracts at 10,000
    exchange.Buy(10000, 2)              
    exchange.SetMarginLevel(5)
    exchange.SetDirection("closebuy")
    exchange.Sell(1000, 2)
}
def main():
    exchange.SetContractType("this_week")
    exchange.SetMarginLevel(5)
    exchange.SetDirection("buy")
    exchange.Buy(10000, 2)
    exchange.SetMarginLevel(5)
    exchange.SetDirection("closebuy")
    exchange.Sell(1000, 2)
void main() {
    exchange.SetContractType("this_week");
    exchange.SetMarginLevel(5);
    exchange.SetDirection("buy");
    exchange.Buy(10000, 2);
    exchange.SetMarginLevel(5);
    exchange.SetDirection("closebuy");
    exchange.Sell(1000, 2);
}

Peraturanexchange.SetDirection()Fungsi menetapkan persamaan antara arah urus niaga kontrak niaga hadapan dan fungsi penempatan pesanan:

Fungsi penempatan pesanan Arah yang ditetapkan oleh parameter fungsi SetDirection Catatan
exchange.Buy beli Beli dan buka kedudukan panjang
exchange.Buy jual tutup Beli dan tutup kedudukan pendek
exchange.Sell menjual Jual dan buka kedudukan pendek
exchange.Sell closebuy Jual dan tutup kedudukan panjang

{@fun/Trade/exchange.Buy pertukaran.Buy}, {@fun/Trade/exchange.Sell pertukaran.Sell}

exchange.SetContractType

Peraturanexchange.SetContractType()fungsi digunakan untuk menetapkan kod kontrak semasa objek pertukaran {@var/EXCHANGE exchange}.

Peraturanexchange.SetContractType()fungsi mengembalikan struktur yang mengandungi kod kontrak pertukaran yang sepadan dengan kod kontrak semasa.quarter, dan struktur nilai pulangan fungsi ini ialah:{"InstrumentID": "BTCUSD_230630", "instrument": "BTCUSD_230630"}. objek

pertukaran.SetContractType ((simbol)

Peraturansymbolparameter digunakan untuk menetapkan kod kontrak, nilai pilihan adalah:"this_week", "next_week", "quarter", "next_quarter", "swap", dan lain-lain Kontrak niaga hadapan mata wang kriptokontrak penghantaranKod, jika tidak ditentukan, biasanya mempunyai:

  • this_week: kontrak minggu semasa.
  • next_week: kontrak minggu depan.
  • quarter: kontrak suku tahun.
  • next_quarter: kontrak suku tahun seterusnya.Kontrak tetapKod dalam kontrak niaga hadapan mata wang kripto, jika tidak ditentukan, umumnya mempunyai:
  • swapKontrak kekal.

simbol betul senar

function main() {
    // Set to this week contract
    exchange.SetContractType("this_week") 
}
def main():
    exchange.SetContractType("this_week")
void main() {
    exchange.SetContractType("this_week");
}

Tetapkan kontrak semasa sebagai kontrak minggu semasa:

function main() {
    // The default trading pair is BTC_USD, set the contract for this week, and the contract is a currency standard contract
    exchange.SetContractType("this_week")
    Log("ticker:", exchange.GetTicker())
    
    // Switching trading pairs, then setting up contracts, switching to USDT as margin contracts, as opposed to currency standard contracts
    exchange.IO("currency", "BTC_USDT")   
    exchange.SetContractType("swap")
    Log("ticker:", exchange.GetTicker())
}
def main():
    exchange.SetContractType("this_week")
    Log("ticker:", exchange.GetTicker())
    exchange.IO("currency", "BTC_USDT")
    exchange.SetContractType("swap")
    Log("ticker:", exchange.GetTicker())
void main() {
    exchange.SetContractType("this_week");
    Log("ticker:", exchange.GetTicker());
    exchange.IO("currency", "BTC_USDT");
    exchange.SetContractType("swap");
    Log("ticker:", exchange.GetTicker());
}

Apabila membuat kontrak denganUSDTsebagai margin, anda perlu menukar pasangan dagangan dalam kod (anda juga boleh menetapkan pasangan dagangan secara langsung apabila menambah objek pertukaran):

function main(){
    // Set the contract for this week
    var ret = exchange.SetContractType("this_week")     
    // Return information about the current week's contracts
    Log(ret)
}
def main():
    ret = exchange.SetContractType("this_week")
    Log(ret)
void main() {
    auto ret = exchange.SetContractType("this_week");
    Log(ret);
}

Mencetak nilai pulanganexchange.SetContractType()fungsi:

Dalam strategi kontrak niaga hadapan cryptocurrency, mengambil contoh beralih keBTC_USDTPasangan dagangan: Apabila menukar pasangan dagangan menggunakanexchange.SetCurrency("BTC_USDT")atauexchange.IO("currency", "BTC_USDT")fungsi, selepas beralih, anda perlu menggunakanexchange.SetContractType()Sistem ini menentukan sama ada ia adalah satu pasangan dagangan baru atau tidak.kontrak standard mata wangatau aKontrak standard USDTSebagai contoh, jika pasangan dagangan ditetapkan untukBTC_USDT, gunakanexchange.SetContractType("swap")fungsi untuk menetapkan kod kontrak untukswap. Pada ketika ini, ia ditetapkan untukBTCuntukStandard USDTkontrak kekal. Jika pasangan daganganBTC_USD, gunakanexchange.SetContractType("swap")fungsi untuk menetapkan kod kontrak untukswap. Pada ketika ini, ia ditetapkan untukBTC...standard mata wangkontrak kekal. Maklumat mengenai pertukaran kontrak niaga hadapan cryptocurrency yang disokong, dengan nama kontrak untuk setiap pertukaran seperti berikut:

  • Futures_OKCoin (OKX) Tetapkan kontrak kekal:exchange.SetContractType("swap")Set untuk kontrak minggu ini:exchange.SetContractType("this_week")Set untuk kontrak minggu depan:exchange.SetContractType("next_week")Tetapkan kontrak bulanan:exchange.SetContractType("month")Tetapkan kontrak bulan depan:exchange.SetContractType("next_month")Set kepada kontrak suku tahunan:exchange.SetContractType("quarter")Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter")

    OKX mempunyai kontrak perdagangan pra pasaran: tarikh penghantaran kontrak adalah masa tetap. Kod kontrak yang ditakrifkan oleh bursa adalah, sebagai contoh:HMSTR-USDT-250207. Tetapkan pasangan dagangan kepadaHMSTR_USDTpada platform FMZ, dan kemudian menggunakanexchange.SetContractType("HMSTR-USDT-250207")untuk menetapkan kontrak. Untuk fungsi yang menyokongsymbolparameter, seperti:exchange.GetTicker(), exchange.CreateOrder(), dan lain-lain.symbolparameter sebagai:HMSTR_USDT.HMSTR-USDT-250207untuk mendapatkan data pasaran kontrak ini atau membuat pesanan.

  • Futures_HuobiDM (Futures Huobi) Set untuk kontrak minggu ini:exchange.SetContractType("this_week"). Set untuk kontrak minggu depan:exchange.SetContractType("next_week"). Set kepada kontrak suku tahunan:exchange.SetContractType("quarter"). Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter"). Tetapkan kontrak kekal:exchange.SetContractType("swap"). Ia menyokong kontrak denganUSDTsebagai margin, ambilBTCkontrak sebagai contoh: penggunaanexchange.IO("currency", "BTC_USDT")untuk beralih kepada kontrak yang menggunakanUSDTsebagai margin. Atau tetapkan pasangan dagangan semasa kepadaBTC_USDTlangsung semasa mengkonfigurasi parameter perdagangan langsung dan menambah objek pertukaran.exchange.SetContractType()fungsi lagi untuk menetapkan kontrak.

  • Futures_BitMEX (BitMEX) Tetapkan kontrak kekal:exchange.SetContractType("swap"). Kontrak penghantaran bursa Futures_BitMEX adalah kontrak bulanan dengan kod kontrak berikut (dari Januari hingga Disember):

    "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
    

    Menetapkan kontrak penghantaran:exchange.SetContractType("December"). Sebagai contoh, apabila pasangan dagangan ditetapkan untukXBT_USDT, yangexchange.SetContractType("December")fungsi dipanggil untuk menetapkan kontrak untuk penghantaran Disember dalam USDT berasaskan BTC (mengikut kod kontrak sebenarXBTUSDTZ23).

    Ringkasan Maklumat Kontrak Futures_BitMEX

    Kod kontrak yang ditakrifkan oleh Futures_BitMEX Pasangan dagangan yang sepadan dalam FMZ Kod kontrak yang sepadan dalam FMZ Perhatikan
    DOGEUSD DOGE_USD Pertukaran USD, XBT diselesaikan. XBT adalah BTC.
    DOGEUSDT DOGE_USDT Pertukaran Dilambangkan dalam USDT, diselesaikan dalam USDT.
    XBTETH XBT_ETH Pertukaran ETH dilambangkan, XBT diselesaikan.
    XBTEUR XBT_EUR Pertukaran Diminomi dalam EUR, diselesaikan dalam XBT.
    USDTUSDC USDT_USDC Pertukaran USDC dilambangkan, XBT diselesaikan.
    ETHUSD_ETH ETH_USD_ETH Pertukaran Dimenomi USD, ETH diselesaikan.
    XBTH24 XBT_USD Mac Tarikh tamat tempoh: 24 Mac, kod bulan adalah: H; dalam mata wang USD, diselesaikan dalam XBT.
    ETHUSDZ23 ETH_USD Disember Tarikh tamat tempoh: 23 Disember, kod bulan ialah: Z; dalam mata wang USD, diselesaikan dalam XBT.
    XBTUSDTZ23 XBT_USDT Disember Tarikh tamat tempoh: 23 Disember, kod bulan adalah: Z ; dilambangkan dalam USDT, diselesaikan dalam USDT.
    ADAZ23 ADA_XBT Disember Tarikh tamat tempoh: 23 Disember, kod bulan adalah: Z ; penagihan XBT, penyelesaian XBT.
    P_XBTETFX23 USDT_XXX P_XBTETFX23 Tempoh tamat tempoh: 11/23/23; dinyatakan sebagai peratusan dan diselesaikan dalam USDT.
  • Futures_GateIO Set untuk kontrak minggu ini:exchange.SetContractType("this_week"). Set untuk kontrak minggu depan:exchange.SetContractType("next_week"). Set kepada kontrak suku tahunan:exchange.SetContractType("quarter"). Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter"). Tetapkan kontrak kekal:exchange.SetContractType("swap"). Ia menyokong kontrak denganUSDTsebagai margin, ambilBTCkontrak sebagai contoh: penggunaanexchange.IO("currency", "BTC_USDT")untuk beralih kepada kontrak yang menggunakanUSDTsebagai margin. Atau tetapkan pasangan dagangan semasa kepadaBTC_USDTlangsung semasa mengkonfigurasi parameter perdagangan langsung dan menambah objek pertukaran.exchange.SetContractType()fungsi lagi untuk menetapkan kontrak.

  • Futures_Deribit Tetapkan kontrak kekal:exchange.SetContractType("swap"). Ia menyokong DeribitUSDCkontrak. Kontrak penghantaran adalah:"this_week", "next_week", "month", "quarter", "next_quarter", "third_quarter", "fourth_quarter". CFD (future_combo):"this_week,swap", "next_week,swap", "next_quarter,this_week", "third_quarter,this_week", "month,next_week", terdapat banyak kombinasi. Untuk kontrak opsyen, anda perlu memasukkan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, lihat laman web Deribit untuk butiran.

  • Futures_KuCoin Sebagai contoh, jika pasangan dagangan ditetapkan untukBTC_USDdan kod kontrak ditetapkan, ia adalah kontrak berasaskan mata wang: Tetapkan kontrak kekal:exchange.SetContractType("swap"). Set kepada kontrak suku tahunan:exchange.SetContractType("quarter"). Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter").

    USDT sebagai kontrak margin: Sebagai contoh, jika pasangan dagangan ditetapkan untukBTC_USDT, dan kemudian menetapkan kod kontrak, ia adalah kontrak dengan USDT sebagai margin. Tetapkan kontrak kekal:exchange.SetContractType("swap").

  • Futures_Binance Binance Futures Exchange lalai untuk kontrak kekal pasangan dagangan semasa, kod kontrak:swap. Tetapkan kontrak kekal:exchange.SetContractType("swap"), kontrak kekal Binance mempunyai kontrak yang menggunakanUSDTSebagai contoh,USDTkontrak kekal standardBTCboleh digunakan sebagai kontrak margin, dan pasangan dagangan ditetapkan untukBTC_USDT. Binance juga menyokong kontrak kekal yang menggunakan syiling sebagai margin, sebagai contoh,BTCBinance standard kontrak kekal, dengan pasangan perdagangan ditetapkan untukBTC_USD. Set kepada kontrak suku tahunan:exchange.SetContractType("quarter"), kontrak penghantaran mempunyai kontrak standard mata wang (iaitu, menggunakan mata wang sebagai margin), sebagai contoh,BTCkontrak suku tahunan, pasangan dagangan ditetapkan untuk:BTC_USDdan kemudian menetapkan kontrakexchange.SetContractType("quarter"), ia ditetapkan untukBTCkontrak suku tahunan dengan kontrak standard mata wang. Set untuk kontrak suku berikutnya:exchange.SetContractType("next_quarter"), contohnya,BTCdaripada kontrak suku tahunan standard mata wang, pasangan dagangan ditetapkan untuk:BTC_USD, dan kemudian menetapkan kontrakexchange.SetContractType("next_quarter"). Binance menyokong sebahagianUSDTsebagai kontrak penghantaran margin, mengambilBTCsebagai contoh, menetapkan pasangan dagangan untukBTC_USDT, kemudian letakkan kod kontrak.

    Sokongan untuk kontrak Pilihan Binance: Format kod kontrak opsyen adalah berdasarkan kod kontrak opsyen yang ditakrifkan oleh bursa:BTC-241227-15000-C, XRP-240112-0.5-C, BTC-241227-15000-PAmbil kod kontrak pilihan BinanceBTC-241227-15000-Psebagai contoh: BTC adalah kod mata wang pilihan, 241227 adalah tarikh pelaksanaan, 15000 adalah harga pelaksanaan, P mewakili pilihan jual, dan C mewakili pilihan beli. Untuk butiran mengenai jenis opsyen, sama ada ia adalah opsyen Eropah atau opsyen Amerika, sila rujuk maklumat yang berkaitan dengan kontrak opsyen bursa. Bursa mungkin menyekat penjual opsyen dan mengharuskan mereka memohon kelayakan secara berasingan.

  • Futures_Bibox Kod kontrak untuk kontrak kekal Bibox:swap. Tetapkan kontrak kekal:exchange.SetContractType("swap").

  • Futures_Bybit Pendapatan yang ditetapkan adalah kontrak kekal untuk pasangan dagangan semasa, kod kontrak:swap. Kod kontrak minggu ini:this_week. Kod kontrak minggu depan:next_week. Kod kontrak minggu ketiga:third_week. Kod kontrak bulanan:month. Kod kontrak bulan depan:next_month. Kod kontrak suku tahunan:quarter. Kod kontrak suku berikutnya:next_quarter. Kod kontrak suku ketiga:third_quarter.

  • Masa hadapan_Kraken Default adalah kontrak kekal pasangan dagangan semasa, kod kontrak:swap. swapKontrak kekal.month: kontrak bulan semasa.quarter: kontrak suku tahun.next_quarterKontrak suku berikutnya.swap_pf: Kontrak kekal margin campuran.quarter_ff: Kontrak suku tahunan dengan margin bercampur.month_ff: Kontrak margin campuran bulan semasa.next_quarter_ff: Margin campuran kontrak suku berikutnya.

  • Futures_Bitfinex Default adalah kontrak kekal untuk pasangan dagangan semasa, kod kontrak:swap.

  • Futures_Bitget Default adalah kontrak kekal untuk pasangan dagangan semasa, kod kontrak:swap. Pasangan dagangan ditetapkan untukBTC_USDuntuk kontrak standard mata wang, dan pasangan dagangan ditetapkan kepadaBTC_USDTuntuk kontrak yang diselesaikan olehUSDT. Kontrak demo boleh ditubuhkan dengan pasangan dagangan sebagaiSBTC_USD, BTC_SUSDT.

  • Futures_dYdX Kod kontrak untuk kontrak kekal dYdX:swap. Tetapkan kontrak kekal:exchange.SetContractType("swap"), dYdX mempunyai kontrak standard USDT sahaja.

  • Futures_MEXC Kod kontrak untuk kontrak kekal MEXC:swap. Tetapkan kontrak kekal:exchange.SetContractType("swap"). Tetapkan pasangan dagangan kepadaBTC_USD, yang merupakan kontrak standard mata wang, dan menetapkan pasangan dagangan untukBTC_USDT, yang merupakanUSDT- Kontrak diselesaikan.

  • Futures_Crypto Token dalam akaun dicrypto.compertukaran boleh ditukar kepada kredit dalam dolar AS untuk digunakan sebagai margin untuk perdagangan kontrak. Tetapkan kontrak kekal:exchange.SetContractType("swap"). Contoh memanggilexchange.SetContractType("swap")fungsi untuk menetapkan kontrak kekal untuk BTC apabila pasangan dagangan ditetapkan untukBTC_USD. Peraturancrypto.comKontrak penghantaran pertukaran adalah kontrak bulanan dengan kod kontrak berikut (dari Januari hingga Disember):

    "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
    

    Tetapkan kontrak penghantaran:exchange.SetContractType("October"). Sebagai contoh, apabila pasangan dagangan ditetapkan untukBTC_USD, panggil fungsiexchange.SetContractType("October")untuk menetapkan kontrak penghantaran Oktober untuk BTC. Kod kontrak yang sepadan pada masa ini adalah:BTCUSD-231027.

  • Futures_WOO Futures_WOO sokongan pertukaranUSDTberdasarkan kontrak dengan kod kontrak kekalswap. Sebagai contoh, apabila pasangan dagangan ditetapkan untukBTC_USDT, fungsiexchange.SetContractType("swap")dipanggil untuk menetapkan kontrak semasa untuk menjadi kontrak kekal berasaskan USDT untuk BTC.

{@fun/Futures/exchange.GetContractType exchange.GetContractType}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}

exchange.GetContractType

Peraturanexchange.GetContractType()fungsi digunakan untuk mendapatkan kod kontrak untuk tetapan semasa objek pertukaran {@var/EXCHANGE exchange}.

Peraturanexchange.GetContractType()fungsi mengembalikan kod kontrak yang ditakrifkan oleh platform FMZ, contohnya:this_week, swap, dan lain-lain senar

pertukaran.GetContractType()

function main () {
    Log(exchange.SetContractType("this_week")) 
    Log(exchange.GetContractType())
}
def main():
    Log(exchange.SetContractType("this_week"))
    Log(exchange.GetContractType())
void main() {
    Log(exchange.SetContractType("this_week"));
    Log(exchange.GetContractType());
}

{@fun/Futures/exchange.SetContractType pertukaran.SetContractType}

exchange.GetFundings

Peraturanexchange.GetFundings()fungsi digunakan untuk mendapatkan data kadar pembiayaan untuk tempoh semasa.

Peraturanexchange.GetFundings()fungsi mengembalikan pelbagai struktur {@struct/Funding Funding} apabila permintaan data berjaya, dan mengembalikan nilai sifar apabila permintaan data gagal. {@struct/Funding Funding} array, nilai sifar

pertukaran.GetFundings() pertukaran.GetFundings ((simbol)

Parametersymboldigunakan untuk menetapkansimbol transaksiatauJulat simbol transaksiyang akan ditanya.symbolJika parameter ini tidak diteruskan, data kadar pembiayaan semasa semua instrumen akan diminta secara lalai dalam julat dimensi pasangan dagangan semasa dan kod kontrak.

simbol palsu senar

/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
*/

function main() {
    // LPT_USDT.swap 4-hour period
    var symbols = ["SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"]
    for (var symbol of symbols) {
        exchange.GetTicker(symbol)
    }
    
    var arr = []
    var arrParams = ["no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"]
    for (p of arrParams) {
        if (p == "no param") {
            arr.push(exchange.GetFundings())
        } else {
            arr.push(exchange.GetFundings(p))
        }
    }
    
    var tbls = []
    var index = 0
    for (var fundings of arr) {
        var tbl = {
            "type": "table",
            "title": arrParams[index],
            "cols": ["Symbol", "Interval", "Time", "Rate"],
            "rows": [],
        }
    
        for (var f of fundings) {
            tbl["rows"].push([f.Symbol, f.Interval / 3600000, _D(f.Time), f.Rate * 100 + " %"])
        }
        tbls.push(tbl)
        index++
    }
    
    LogStatus(_D(), "\n Requested market types:", symbols, "\n`" + JSON.stringify(tbls) + "`")
}
'''backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
'''
    
import json
    
def main():
    # LPT_USDT.swap 4-hour period
    symbols = ["SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"]
    for symbol in symbols:
        exchange.GetTicker(symbol)
    
    arr = []
    arrParams = ["no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"]
    for p in arrParams:
        if p == "no param":
            arr.append(exchange.GetFundings())
        else:
            arr.append(exchange.GetFundings(p))
    
    tbls = []
    index = 0
    for fundings in arr:
        tbl = {
            "type": "table",
            "title": arrParams[index],
            "cols": ["Symbol", "Interval", "Time", "Rate"],
            "rows": [],
        }
    
        for f in fundings:
            tbl["rows"].append([f["Symbol"], f["Interval"] / 3600000, _D(f["Time"]), str(f["Rate"] * 100) + " %"])
    
        tbls.append(tbl)
        index += 1
    
    LogStatus(_D(), "\n Requested market types:", symbols, "\n`" + json.dumps(tbls) + "`")
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
*/
    
void main() {
    // LPT_USDT.swap 4-hour period
    json arrSymbol = R"([])"_json;
    std::string symbols[] = {"SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"};
    for (const std::string& symbol : symbols) {
        exchange.GetTicker(symbol);
        arrSymbol.push_back(symbol);
    }
    
    std::vector<std::vector<Funding>> arr = {};
    std::string arrParams[] = {"no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"};
    for (const std::string& p : arrParams) {
        if (p == "no param") {
            arr.push_back(exchange.GetFundings());
        } else {
            arr.push_back(exchange.GetFundings(p));
        }
    }
    
    json tbls = R"([])"_json;
    int index = 0;
    for (int i = 0; i < arr.size(); i++) {
        auto fundings = arr[i];
    
        json tbl = R"({
            "type": "table", 
            "cols": ["Symbol", "Interval", "Time", "Rate"],
            "rows": []
        })"_json;
        tbl["title"] = arrParams[index];
    
        for (int j = 0; j < fundings.size(); j++) {
            auto f = fundings[j];
            // json arrJson = {f.Symbol, f.Interval / 3600000, _D(f.Time), string(f.Rate * 100) + " %"};
            json arrJson = {f.Symbol, f.Interval / 3600000, _D(f.Time), f.Rate};
            tbl["rows"].push_back(arrJson);
        }
        tbls.push_back(tbl);
        index++;
    }
    
    LogStatus(_D(), "\n Requested market types:", arrSymbol.dump(), "\n`" + tbls.dump() + "`");
}

Gunakan objek pertukaran niaga hadapan untuk memanggilexchange.GetFundings()fungsi dalam sistem backtesting. Sebelum memanggil mana-mana fungsi pasaran, GetFundings hanya mengembalikan data Pembiayaan pasangan dagangan lalai semasa. Selepas memanggil fungsi pasaran, ia mengembalikan data Pembiayaan semua jenis yang diminta. Anda boleh merujuk kepada contoh ujian berikut:

Untuk bursa niaga hadapan yang tidak menyokong pertanyaan kumpulan data kadar pembiayaan, jikasymbolparameter ditentukan sebagai julat pertanyaan, contohnya:USDT.swapatausymbolparameter tidak lulus, antara muka akan melaporkan ralat.GetFundings()fungsi menggunakan objek pertukaran niaga hadapan jenis ini, anda mesti menentukansymbolparameter sebagai jenis kontrak kekal tertentu untuk menyoal data kadar pembiayaan semasa jenis. Perkhidmatanexchange.GetFundings()fungsi menyokong sistem perdagangan dan backtesting sebenar. Bursa yang tidak menyokong pemerolehan kumpulan data kadar pembiayaan: Futures_Bitget, Futures_OKX, Futures_MEXC, Futures_Deribit, Futures_Crypto. Perlu lulus dalamsymbolparameter dengan kod simbol tertentu, contohnya:ETH_USDT.swap.

Bursa yang tidak menyokongexchange.GetFundings()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetFundings Futures_DigiFinex

{@struct/Pembiayaan Pembiayaan}

Tetapan Rangkaian

exchange.SetBase

Peraturanexchange.SetBase()fungsi digunakan untuk menetapkan alamat asas antara muka API pertukaran yang dikonfigurasikan dalam objek pertukaran {@var/EXCHANGE exchange}.

pertukaran.SetBase (s)

Peraturansparameter digunakan untuk menentukan alamat asas antara muka API pertukaran. s betul senar

function main() {
    // Use default base address
    Log(exchange.GetTicker())
    // Switch to https://aws.okx.com
    exchange.SetBase("https://aws.okx.com")
    Log(exchange.GetTicker())
}
def main():
    Log(exchange.GetTicker())
    exchange.SetBase("https://aws.okx.com")
    Log(exchange.GetTicker())
void main() {
    Log(exchange.GetTicker());
    exchange.SetBase("https://aws.okx.com");
    Log(exchange.GetTicker());
}

Mengubah alamat pangkalan API pertukaran tidak disokong dalam sistem backtesting, kerana sistem backtesting adalah persekitaran simulasi sandbox dan ia tidak benar-benar mengakses antara muka API pertukaran.

{@fun/Trade/exchange.IO exchange.IO}

exchange.GetBase

Peraturanexchange.GetBase()fungsi digunakan untuk mendapatkan alamat asas antara muka API pertukaran semasa.

Alamat asas antara muka API pertukaran semasa. senar

pertukaran.GetBase()

function main() {
    Log(exchange.GetBase())
}
def main():
    Log(exchange.GetBase())
void main() {
    Log(exchange.GetBase());
}

{@fun/NetSettings/exchange.SetBase exchange.SetBase}

exchange.SetProxy

Peraturanexchange.SetProxy()fungsi digunakan untuk menetapkan konfigurasi proksi objek pertukaran {@var/EXCHANGE exchange}.

pertukaran.SetProxy ((proxy)

Peraturanproxyparameter digunakan untuk menentukan konfigurasi proksi. penggantinya betul senar

function main() {
    exchange.SetProxy("socks5://192.168.1.10:8080")
    // If you can't access the exchange ticker interface, set up an available ss5 proxy and you can access the ticker interface
    Log(exchange.GetTicker())
}
def main():
    exchange.SetProxy("socks5://192.168.1.10:8080")
    Log(exchange.GetTicker())
void main() {
    exchange.SetProxy("socks5://192.168.1.10:8080");
    Log(exchange.GetTicker());
}

Mengatur objek pertukaran {@var/EXCHANGE exchange}socks5Proxy:

function main(){
    exchange.SetProxy("ip://10.0.3.15")
    // The requested IP address is 10.0.3.15
    exchange.GetTicker()
}
def main():
    exchange.SetProxy("ip://10.0.3.15")
    exchange.GetTicker()
void main() {
    exchange.SetProxy("ip://10.0.3.15");
    exchange.GetTicker();
}

Selain daripadaspesifikasi globaldaripada alamat IP permintaan dari objek pertukaran {@var/EXCHANGE exchange}, terdapat juga sokongan untuk menentukan alamat IP berdasarkan {@var/EXCHANGE exchange}:

Jika tetapan proksi gagal,exchange.SetProxy()fungsi akan mengembalikan null apabila dipanggil.exchange.SetProxy()fungsi menetapkan proksi untukrestSatu proksi boleh ditetapkan untuk setiap objek pertukaran {@var/EXCHANGE exchange}, dan akses ke antara muka pertukaran terikat kepada objek pertukaran {@var/EXCHANGE exchange} selepas menetapkan proksi akan diakses melalui proksi. Sokongan untuk menetapkansocks5proksi, mengambil objek pertukaran pertama ditambah {@var/EXCHANGE exchange} iaitu:exchanges[0]sebagai contoh:

  • Tetapkan proksi, tiada nama pengguna, tiada kata laluan:exchange.SetProxy("socks5://127.0.0.1:8889").
  • Tetapkan proksi, masukkan nama pengguna dan kata laluan:exchange.SetProxy("socks5://username:password@127.0.0.1:8889"). usernameadalah nama pengguna danpasswordadalah kata laluan.
  • Bertukar ke mod normal tanpa proksi:exchange.SetProxy("").

Menyokong menetapkan alamat IP permintaan dari objek pertukaran {@var/EXCHANGE exchange},global tertentu.

{@var/EXCHANGE pertukaran}

exchange.SetTimeout

Peraturanexchange.SetTimeout()Fungsi digunakan untuk menetapkan masa lapangrestpermintaan untuk objek pertukaran {@var/EXCHANGE exchange}.

pertukaran.SetTimeout (timeout)

PeraturantimeoutParameter digunakan untuk menentukan bilangan milidetik untuk tetapan waktu henti. masa lapang betul nombor

function main() {
    exchange.SetTimeout(3000)
    Log(exchange.GetTicker())
}
def main():
    exchange.SetTimeout(3000)
    Log(exchange.GetTicker())
void main() {
    exchange.SetTimeout(3000);
    Log(exchange.GetTicker());
}

Parametertimeoutadalah nilai milidetik, 1000 milidetik sama dengan 1 saat.resthanya protokol, digunakan untuk menetapkan masa lapang padarestpermintaan, ia berlaku dengan menetapkan sekali sahaja.exchange.SetTimeout(3000), menetapkanrestmeminta masa lapang untukexchangepanggilan fungsi dengan permintaan rangkaian sepertiexchange.GetTicker()yang tidak menerima jawapan selama lebih daripada 3 saat akan tamat tempoh, dan panggilan fungsi yang melakukan tamat tempoh akan mengembalikan nilai sifar.SetTimeout()bukan fungsi global, ia adalah kaedah objek pertukaran {@var/EXCHANGE exchange}.

{@var/EXCHANGE pertukaran}

Benang

Platform Perdagangan Kuantum FMZ benar-benar menyokong fungsi pelbagai benangJavaScriptstrategi bahasa dari bawah sistem, dan melaksanakan objektif berikut:

Objek Arahan Catatan
Penggelek Objek global berbilang benang Fungsi ahli:Thread, getThread, mainThread, dan lain-lain
Benang Objek benang Fungsi ahli:peekMessage, postMessage, join, dan lain-lain
ThreadLock Objek kunci benang Fungsi ahli:acquire, release. Mereka boleh dihantar ke persekitaran benang sebagai parameter fungsi pelaksanaan benang.
ThreadEvent Objek peristiwa Fungsi ahli:set, clear, wait, isSet. Mereka boleh dihantar ke dalam persekitaran benang sebagai parameter fungsi pelaksanaan benang.
ThreadCondition Objek keadaan Fungsi ahli:notify, notifyAll, wait, acquire, release. Mereka boleh dihantar ke dalam persekitaran benang sebagai parameter fungsi pelaksanaan benang.
ThreadDict Objek kamus Fungsi ahli:get, set. Mereka boleh dihantar ke persekitaran benang sebagai parameter fungsi pelaksanaan benang.

Penggelek

Peraturanthreadingobject adalah alat pengurusan multithreading global yang menyediakan fungsi seperti membuat utas serentak, kunci utas, dan objek keadaan.threadingObjek ini hanya disokong olehJavaScriptstrategi bahasa.

Benang

PeraturanThread()fungsi digunakan untuk membuat benang serentak.

PeraturanThread()fungsi mengembalikan aThreadobjek, yang digunakan untuk menguruskan benang serentak yang dicipta, komunikasi benang, dll.

Threadobjek

Thread ((func,...args) Thread ((... item)

Parameterfuncadalah fungsi untuk pelaksanaan serentak (diterbitkan oleh rujukan), dan menyokong menyampaikan fungsi tanpa nama.funcboleh menerima pelbagai parameter, yang akan dihantar melalui...argsOleh itu, senarai parameterfuncperlu konsisten dengan...args.

fungsi betul fungsi Parameterargadalah parameter sebenar yang dihantar kepadafunc(iaitu fungsi pelaksanaan thread serentak) apabila panggilan balik dijalankan; mungkin terdapat beberapa parameterarg, dan senarai parameterfuncperlu konsisten dengan...args.

arg palsu rentetan, nombor, bool, objek, susunan, fungsi, nilai sifar dan jenis lain yang disokong oleh sistem Parameteritemadalah array yang mengandungi rujukan fungsi dan parameter mereka yang akan dijalankan secara serentak.itemparameter boleh dihantar dalam apabila memanggilThread function.

item betul Array

function test1(a, b, c) {
    Log("test1:", a, b, c)
}

function main() {
    var t1 = threading.Thread(test1, 1, 2, 3)
    var t2 = threading.Thread(function (msg) {
        Log("msg:", msg)
    }, "Hello thread2")

    t1.join()
    t2.join()
}

Buat utas serentak untuk kedua-dua fungsi tersuai dan fungsi tanpa nama.

function test1(msg) {
    Log("msg:", msg)
    test2("Hello test2")
}

function main() {
    var t1 = threading.Thread(
        [function(a, b, c) {Log(a, b, c)}, 1, 2, 3], 
        [test1, "Hello test1"], 
        [`function test2(msg) {Log("msg:", msg)}`])

    t1.join()
}

GunakanThread(...items)bentuk untuk mencipta benang serentak dan melaksanakan pelbagai fungsi secara berurutan.

function ml(input) {
    const net = new brain.NeuralNetwork()
    net.train([
        { input: [0, 0], output: [0] },
        { input: [0, 1], output: [1] },
        { input: [1, 0], output: [1] },
        { input: [1, 1], output: [0] },
    ])
    return net.run(input)
}

function main() {
    var ret = threading.Thread([ml, [1, 0]], [HttpQuery("https://unpkg.com/brain.js")]).join()

    // ret: {"id":1,"terminated":false,"elapsed":337636000,"ret":{"0":0.9339330196380615}}
    Log(ret)
}

Ia menyokong lulus dalam rentetan fungsi dan boleh mengimport perpustakaan luaran secara dinamik untuk pengkomputeran serentak.

Fungsi benangfunctelah diteruskan ke dalamThread()fungsi untuk pelaksanaan serentak berjalan dalam persekitaran yang terpencil, jadi pembolehubah di luar benang tidak boleh dirujuk secara langsung, dan penyusunan akan gagal apabila dirujuk. Pada masa yang sama, rujukan kepada fungsi penutupan lain tidak disokong dalam benang. Semua API yang disediakan oleh platform boleh dipanggil dalam benang, tetapi fungsi lain yang ditakrifkan pengguna tidak boleh dipanggil.

Ia menyokong sistem backtesting dan persekitaran perdagangan langsung. Semua fungsi yang berkaitan dengan thread serentak hanya disokong sebagai keserasian kod dalam sistem backtesting dan tidak akan dilaksanakan oleh thread serentak, jadi mereka tidak akan diulangi dalam bab ini.

{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop}

getThread

PeraturangetThread()fungsi digunakan untuk mendapatkan objek thread berdasarkan ID thread yang ditentukan.

PeraturangetThread()fungsi mengembalikanThreadobjek dengan threadId yang ditentukan oleh parameter

Threadobjek

getThread ((threadId)

ParameterthreadIdadalah ID objek thread. Dapatkan objek thread yang sepadan dengan menentukan parameter.

ThreadId betul nombor

function main() {
    var t1 = threading.Thread(function () {
        Log("Hello thread1")
    })
    // The Thread object has a method: id(), which is used to get the thread ID. You can view the section of the document corresponding to the Thread object.
    var threadId = t1.id()
    var threadName = t1.name()
    Log("threadId:", threadId, ", threadName:", threadName)
    
    var t2 = threading.getThread(threadId)
    Log(`threadId == t2.id():`, threadId == t2.id(), `, threadName == t2.name():`, threadName == t2.name())
}

Dapatkan objek benang yang ditentukan melaluithreadId.

Ia menyokong sistem backtesting dan persekitaran perdagangan langsung.

Jika benang yang anda ingin mendapatkan telah dijalankan dan dikeluarkan, anda tidak boleh menggunakanthreading.getThread(threadId)untuk mendapatkan objek benang benang.

{@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threads/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop eventLoop}

mainThread

PeraturanmainThread()fungsi digunakan untuk mendapatkan objek benang benang utama, iaitu benang di manamain()fungsi dalam strategi terletak.

PeraturanmainThread()fungsi mengembalikan objek benang benang utama.

Threadobjek

mainThread()

function main() {
    Log("The threadId of the main thread:", threading.mainThread().id())
}

DapatkanThreadobjek benang utama dan outputthreadIddaripada benang utama.

function test() {
    Log("Output the main thread ID in the test function:", threading.mainThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

Objek benang benang utama juga boleh diperoleh dalam benang serentak.

Ia menyokong sistem backtesting dan persekitaran perdagangan langsung.

{@fun/Threads/getThread getThread}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threads/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop Loop}

Thread semasa

PeraturancurrentThread()fungsi digunakan untuk mendapatkan objek benang benang semasa.

PeraturancurrentThread()fungsi mengembalikan objek benang benang semasa.

Threadobjek

CurrentThread ((()

function test() {
    Log("Id of the current thread:", threading.currentThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

DapatkanThreadobjek benang semasa dan outputthreadIddaripada benang semasa.

Ia menyokong sistem backtesting dan persekitaran perdagangan langsung.

{@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threads/threading/Condition Condition}, {@fun/Threads/threads/threading/Event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threading/threading/pending pending}, {@fun/Threads/threading/eventLoop eventLoop}

Kunci

PeraturanLock()fungsi digunakan untuk mencipta objek kunci benang.

PeraturanLock()fungsi mengembalikan objek kunci benang.

ThreadLockobjek

Kunci.

function consumer(productionQuantity, dict, lock) {
    for (var i = 0; i < productionQuantity; i++) {
        lock.acquire()
        var count = dict.get("count")        
        Log("consumer:", count)
        Sleep(1000)
        lock.release()
    }
}

function producer(productionQuantity, dict, lock) {
    for (var i = 0; i < productionQuantity; i++) {
        lock.acquire()
        dict.set("count", i)
        Log("producer:", i)
        Sleep(1000)
        lock.release()
    }
}

function main() {
    var dict = threading.Dict()
    dict.set("count", -1)
    var lock = threading.Lock()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, lock)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, lock)

    consumerThread.join()
    producerThread.join()
}

Dua benang serentak mengakses sumber yang sama.

Ia menyokong sistem backtesting dan persekitaran perdagangan langsung.

{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/ThreadThread}, {@fun/Threads/threads/threading/Condition Condition}, {@fun/Threads/threads/threading/Event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threads/threading/pending pending}, {@fun/Threads/threads/threading/eventLoop}

Keadaan

PeraturanCondition()fungsi digunakan untuk membuat objek pembolehubah keadaan, yang digunakan untuk mencapai penyegerakan dan komunikasi antara benang dalam persekitaran serentak berbilang benang.Condition(), benang boleh menunggu apabila keadaan tertentu tidak dipenuhi sehingga benang lain memaklumkan bahawa keadaan telah dipenuhi.

PeraturanCondition()fungsi mengembalikan aThreadCondition object.

ThreadConditionobjek

Keadaan

function consumer(productionQuantity, dict, condition) {
    for (var i = 0; i < productionQuantity; i++) {
        condition.acquire()
        while (dict.get("array").length == 0) {
            condition.wait()
        }
        var arr = dict.get("array")
        var count = arr.shift()
        dict.set("array", arr)
        Log("consumer:", count, ", array:", arr)
        condition.release()
        Sleep(1000)
    }
}

function producer(productionQuantity, dict, condition) {
    for (var i = 0; i < productionQuantity; i++) {
        condition.acquire()
        var arr = dict.get("array")
        arr.push(i)
        dict.set("array", arr)
        Log("producer:", i, ", array:", arr)
        condition.notify()
        condition.release()
        Sleep(1000)
    }
}

function main() {
    var dict = threading.Dict()
    dict.set("array", [])
    var condition = threading.Condition()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, condition)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, condition)
    consumerThread.join()
    producerThread.join()
}

Dua benang serentak mengakses sumber yang sama.

Sistem backtesting tidak melaksanakan fungsi ini, ia hanya mentakrifkannya.

{@fun/Threads/getThread getThread}, {@fun/Threads/threads/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/Lock Lock}, {@fun/Threads/threads/threading/Thread Thread}, {@fun/Threads/threads/threading/Event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threading/threading/pending pending}, {@fun/Threads/threading/eventLoop}

Acara

PeraturanEvent()fungsi digunakan untuk menciptaperistiwa benangobjek, yang digunakan untuk menyegerakkan antara utas, membolehkan satu utas menunggu pemberitahuan atau isyarat dari utas lain.

PeraturanEvent()fungsi mengembalikan aThreadEvent object.

ThreadEventobjek

Acara

function consumer(productionQuantity, dict, pEvent, cEvent) {
    for (var i = 0; i < productionQuantity; i++) {
        while (dict.get("array").length == 0) {
            pEvent.wait()
        }
        if (pEvent.isSet()) {
            pEvent.clear()
        }

        var arr = dict.get("array")
        var count = arr.shift()
        dict.set("array", arr)
        Log("consumer:", count, ", array:", arr)
        cEvent.set()
        Sleep(1000)
    }
}

function producer(productionQuantity, dict, pEvent, cEvent) {
    for (var i = 0; i < productionQuantity; i++) {
        while (dict.get("array").length != 0) {
            cEvent.wait()
        }
        if (cEvent.isSet()) {
            cEvent.clear()
        }

        var arr = dict.get("array")
        arr.push(i)
        dict.set("array", arr)
        Log("producer:", i, ", array:", arr)        
        pEvent.set()       
        Sleep(1000)
    }
}

function main() {    
    var dict = threading.Dict()
    dict.set("array", [])
    var pEvent = threading.Event()
    var cEvent = threading.Event()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, pEvent, cEvent)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, pEvent, cEvent)

    consumerThread.join()
    producerThread.join()
}

Dua benang serentak mengakses sumber yang sama.

Ia menyokong sistem backtesting dan persekitaran perdagangan langsung.

{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/Lock Lock}, {@fun/Threads/threads/threading/Condition Condition}, {@fun/Threads/threads/threading/Thread Thread}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threads/threading/pending pending}, {@fun/Threads/threads/threading/eventLoop}

Dikt

PeraturanDict()fungsi digunakan untuk membuat objek kamus untuk lulus ke benang serentak.

PeraturanDict()fungsi mengembalikan aThreadDict object.

ThreadDictobjek

Dict ((()

function threadFun1(obj) {
    obj["age"] = 100
    while (true) {
        Log("threadFun1 obj:", obj)
        Sleep(5000)
    }
}

function threadFun2(obj) {
    while (true) {
        Log("threadFun2 obj:", obj)
        Sleep(5000)
    }
}

function main() {
    var obj = {"age": 10}
    var t1 = threading.Thread(threadFun1, obj)
    var t2 = threading.Thread(threadFun2, obj)
    t1.join()
    t2.join()    
}

Memindahkan objek biasa ke fungsi pelaksanaan utas serentak untuk menguji sama ada mengubah suai nilai kunci objek akan menyebabkan perubahan nilai kunci objek di utas lain.

function threadFun1(threadDict) {
    threadDict.set("age", 100)
    while (true) {
        Log(`threadFun1 threadDict.get("age"):`, threadDict.get("age"))
        Sleep(5000)
    }
}

function threadFun2(threadDict) {
    while (true) {
        Log(`threadFun2 threadDict.get("age"):`, threadDict.get("age"))
        Sleep(5000)
    }
}

function main() {
    var threadDict = threading.Dict()
    threadDict.set("age", 10)
    var t1 = threading.Thread(threadFun1, threadDict)
    var t2 = threading.Thread(threadFun2, threadDict)

    t1.join()
    t2.join()    
}

BerikanThreadDictobjek yang dicipta olehDict()fungsi kepada fungsi pelaksanaan utas serentak, dan menguji sama ada mengubah suai nilai kunci objek akan menyebabkan nilai kunci objek dalam utas lain berubah.

Apabila objek biasa diteruskan ke fungsi utas serentak, ia diteruskan sebagai salinan mendalam.

Ia menyokong sistem backtesting dan persekitaran perdagangan langsung.

{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threading/threading/Thread Thread}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop}

menunggu

Peraturanpendingfungsi digunakan untuk mendapatkan bilangan benang serentak yang berjalan dalam program strategi semasa.

Peraturanpending()fungsi mengembalikan bilangan benang serentak bahawa program strategi semasa sedang berjalan.

nombor

masih belum selesai.

function threadFun1() {
    Log("threadFun1")
    Sleep(3000)
}

function threadFun2() {
    for (var i = 0; i < 3; i++) {
        LogStatus(_D(), "print from threadFun2")
        Sleep(3000)
    }
}

function main() {
    Log(`begin -- threading.pending():`, threading.pending())

    var t1 = threading.Thread(threadFun1)
    var t2 = threading.Thread(threadFun2)
    Log(`after threading.Thread -- threading.pending():`, threading.pending())

    t1.join()
    t2.join()
    Log(`after thread.join -- threading.pending():`, threading.pending())
}

Buat dua benang yang berjalan serentak dan panggilpending()fungsi pada nod masa yang berbeza.

Apabila strategimain()fungsi mula berjalan, memanggil fungsipending()langsung akan kembali 1, kerana benang utama di mana strategimain()fungsi terletak juga benang menunggu.

Ia menyokong sistem backtesting dan persekitaran perdagangan langsung.

{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/eventLoop}

Benang

Threadobjek boleh dicipta atau dikembalikan olehthreading.Thread(), threading.getThread(), threading.mainThread(), danthreading.currentThread().

PeekMessage

PeraturanpeekMessage()fungsi digunakan untuk mendapatkan mesej dari utas.

PeraturanpeekMessage()fungsi mengembalikan mesej yang diterima oleh utas yang dikaitkan dengan objek utas semasa.

rentetan, nombor, bool, objek, susunan, nilai sifar dan jenis lain yang disokong oleh sistem

PeekMessage() peekMessage ((timeout)

Parametertimeoutadalah tetapan masa lapang. Ia akan menyekat dan menunggu bilangan milidetik yang ditetapkan oleh parameter dan mengembalikan data. Jika tidak ada data dan masa lapang melebihi had, nilai sifar akan dikembalikan. Jikatimeoutditetapkan kepada 0 atautimeoutparameter tidak lulus, ia bermakna bahawa proses akan menyekat dan menunggu sehingga data diterima dari saluran.timeoutJika set kepada -1, ia bermaksud bahawa proses tidak akan menyekat dan mengembalikan data dengan segera. Jika tidak ada data, nilai null akan dikembalikan.

masa lapang palsu nombor

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 postMessage():", i)
            threading.mainThread().postMessage(i)
            Sleep(500)
        }        
    })

    while (true) {
        var msg = threading.currentThread().peekMessage()
        Log("main peekMessage():", msg)
        if (msg == 9) {
            break
        }
        Sleep(1000)
    }

    t1.join()
}

Hantar mesej ke thread utama dari thread serentak.

Apabila menulis program, kita perlu memberi perhatian kepada masalah thread deadlock.

{@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name}, {@Threads/Threads/eventLoop eventLoop}

postMesej

PeraturanpostMessage()fungsi digunakan untuk menghantar mesej ke utas.

postMessage ((msg)

Parametermsgadalah mesej yang akan dihantar.

msg betul Sebarang jenis yang disokong oleh sistem, seperti rentetan, nombor, bool, objek, array, nilai sifar, dan lain-lain.

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 postMessage():", i)
            threading.mainThread().postMessage(i)
            Sleep(500)
        }        
    })
    for (var i = 0; i < 10; i++) {
        var event = threading.mainThread().eventLoop()
        Log("main event:", event)
        Sleep(500)
    }
    t1.join()
}

Hantar mesej dalam utas serentak dan gunakaneventLoop()untuk menerima pemberitahuan mesej.

Apabila fungsi pelaksanaan thread memanggilpostMessage()fungsi untuk menghantar isyarat atau data, peristiwa mesej juga dihasilkan.eventLoop()fungsi untuk menerima pemberitahuan mesej.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}

menyertai

Peraturanjoin()fungsi digunakan untuk menunggu untuk utas untuk keluar dan mendapatkan semula sumber sistem.

PeraturanThreadRetobjekmengandungi data mengenai hasil pelaksanaan.

  • id: ID benang.
  • Ditamatkan: Sama ada benang dipaksa untuk berakhir.
  • telah berlalu: Masa berjalan benang dalam nanodetik.
  • ret: Nilai pulangan fungsi benang.

ThreadRetobjek

menyertai ((() join ((timeout)

Peraturantimeoutparameter digunakan untuk menetapkan masa lapang dalam mili saat untuk menunggu untuk benang untuk selesai.timeoutparameter ditetapkan kepada 0 atautimeoutparameter tidak ditetapkan,join()fungsi akan menyekat dan menunggu sehingga benang selesai menjalankan.timeoutparameter ditetapkan kepada -1,join()Fungsi akan kembali dengan segera.

masa lapang palsu nombor

function main() {
    var t1 = threading.Thread(function() {
        Log("Hello thread1")
        Sleep(5000)
    })

    var ret = t1.join(1000)
    Log("ret:", ret)   // ret: undefined

    ret = t1.join()
    Log("ret:", ret)   // ret: {"id":1,"terminated":false,"elapsed":5003252000}
}

Ujijoin()fungsi untuk masa lapang dan output nilai pulangan.

Peraturanjoin()fungsi masa keluar dan kembaliundefined.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}

mengakhiri

Peraturanterminate()fungsi digunakan untuk memaksa menamatkan thread dan melepaskan sumber perkakasan yang digunakan oleh thread yang dicipta.

mengakhiri ((()

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 10; i++) {
            Log("thread1 i:", i)
            Sleep(1000)
        }
    })

    Sleep(3000)
    t1.terminate()
    Log("after t1.terminate()")

    while (true) {
        LogStatus(_D())
        Sleep(1000)
    }
}

Menamatkan pelaksanaan thread dengan paksa. Selepas memaksa menamatkan thread, tidak akan ada output dari thread ini dalam log.

Untuk benang yang diakhiri secara paksa olehterminate()fungsi, kita tidak boleh lagi menggunakanjoin()fungsi untuk menunggu mereka untuk menamatkan.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}

getData

PeraturangetData()fungsi digunakan untuk mengakses pembolehubah yang direkodkan dalam persekitaran benang. data adalah sah apabila benang belum menjalankanjoin()fungsi (menunggu kejayaan keluar) dan tidak menjalankanterminate()fungsi (mengakhiri benang secara paksa).

PeraturangetData()fungsi mengembalikan nilai kunci yang sepadan dengankeyparameter dalam pasangan kunci-nilai yang disimpan dalam konteks thread semasa.

rentetan, nombor, bool, objek, susunan, nilai sifar dan jenis lain yang disokong oleh sistem

getData() getData (kunci)

Peraturankeyparameter adalah nama kunci pasangan kunci-nilai yang disimpan.

kunci betul senar

function main() {
    var t1 = threading.Thread(function() {
        for (var i = 0; i < 5; i++) {
            threading.currentThread().setData("count", i)
            Log(`setData("count"):`, i)
            Sleep(1000)
        }
    })
    for (var i = 0; i < 5; i++) {
        var count = threading.getThread(t1.id()).getData("count")
        Log(`getData("count"):`, count)
        Sleep(1000)
    }
    t1.join()
}

Mencatatkan nilai kuncicountdalam persekitaran benang serentak, dan kemudian membaca nilai kuncicountdalam benang utama.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}

setData

PeraturansetData()fungsi digunakan untuk menyimpan pembolehubah dalam konteks benang.

setData ((kunci, nilai)

Peraturankeyparameter digunakan untuk menentukan nama kunci pasangan kunci-nilai yang disimpan.

kunci betul senar Peraturanvalueparameter digunakan untuk menentukan nilai kunci pasangan kunci-nilai yang disimpan.

nilai betul Sebarang jenis yang disokong oleh sistem, seperti rentetan, nombor, bool, objek, array, nilai sifar, dan lain-lain.

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Sleep(1000)
    Log(`t1.getData("data"):`, t1.getData("data"))
    t1.join()
}

Tetapkan pasangan kunci-nilai di benang serentak dan baca pasangan kunci-nilai di benang utama.

Data adalah sah apabila benang belum dilaksanakanjoin()fungsi (menunggu kejayaan keluar) dan tidak menjalankanterminate()fungsi (mengakhiri benang secara paksa). Nilai parametervaluemestilah pembolehubah yang boleh diserialisasikan.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}

id

Peraturanid()fungsi digunakan untuk mengembalikanthreadIddari contoh objek multithread semasa.

Nilai pulanganid()fungsi ialahthreadId.

nombor

id()

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Log(`t1.id():`, t1.id())
    t1.join()
}

Membuat benang yang berjalan serentak dan outputthreadIddaripada benang serentak ini dalam benang utama.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}

nama

Peraturanname()fungsi digunakan untuk mengembalikan nama contoh objek multithread semasa.

Peraturanname()fungsi mengembalikan nama benang bersamaan.

senar

nama (()

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Log(`t1.name():`, t1.name())  // t1.name(): Thread-1
    t1.join()
}

Buat thread serentak dan keluarkan nama thread serentak dalam thread utama.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/eventLoop eventLoop}

eventLoop

PeraturaneventLoop()fungsi digunakan untuk mendengar untuk peristiwa yang diterima oleh benang.

PeraturaneventLoop()fungsi mengembalikan maklumat peristiwa yang diterima oleh thread semasa. LihatStruktur Maklumat Acara.

objek, nilai sifar

eventLoop (dalam bahasa Inggeris) eventLoop (timeout)

Parametertimeoutadalah tetapan masa lapang dalam milidetik. Jika parametertimeoutJika ia lebih besar daripada 0, ia akan menetapkan masa tunggu acara. Jika ia kurang daripada 0, ia akan mengembalikan acara terbaru dengan serta-merta.

masa lapang palsu nombor

function main() {
    var t1 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop()     // Blocking wait
            // 2024-11-14 10:14:18 thread1 eventMsg: {"Seq":1,"Event":"thread","ThreadId":0,"Index":1,"Queue":0,"Nano":1731550458699947000}
            Log(_D(), "thread1 eventMsg:", eventMsg)
        }
    })

    var t2 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop(-1)   // Return immediately
            Log(_D(), "thread2 eventMsg:", eventMsg)
            Sleep(5000)
        }
    })

    var t3 = threading.Thread(function() {
        while (true) {
            var eventMsg = threading.currentThread().eventLoop(3000) // Set a 3 second timeout
            Log(_D(), "thread3 eventMsg:", eventMsg)
        }
    })

    t1.postMessage("Hello ", t1.name())
    t2.postMessage("Hello ", t2.name())
    t3.postMessage("Hello ", t3.name())
    t1.join()
    t2.join()
    t3.join()
}

Melakukan tiga benang serentak dan mengeluarkan maklumat peristiwa yang diterima. Jika masa tamat berlaku atau fungsi kembali dengan segera, nilai output adalah sifar.

Mekanisme pemprosesaneventLoop()fungsi adalah sama dengan fungsi globalEventLoop().

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}

ThreadLock

Objek kunci benang, digunakan untuk pemprosesan penyegerakan pelbagai benang.

memperoleh

Peraturanacquire()fungsi digunakan untuk meminta kunci benang (kunci).

mendapatkan ((()

Sila rujukthreading.Lock()Bahagian untuk contoh.

Peraturanacquire()fungsi digunakan untuk meminta kunci thread.acquire()fungsi objek kunci thread, ia cuba untuk memperoleh kunci. Jika kunci tidak kini dipegang oleh utas lain, utas panggilan berjaya memperoleh kunci dan meneruskan pelaksanaan. Jika kunci sudah dipegang oleh utas lain, utas panggilanacquire()akan disekat sehingga kunci dilepaskan.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/release release}

Pembebasan

Peraturanrelease()fungsi digunakan untuk melepaskan kunci benang (membuka kunci).

Pembebasan ((()

function consumer(productionQuantity, dict, pLock, cLock) {
    for (var i = 0; i < productionQuantity; i++) {
        pLock.acquire()
        cLock.acquire()
        var arr = dict.get("array")
        var count = arr.shift()
        dict.set("array", arr)
        Log("consumer:", count, ", array:", arr)
        cLock.release()
        Sleep(1000)
        pLock.release()
    }
}

function producer(productionQuantity, dict, pLock, cLock) {
    for (var i = 0; i < productionQuantity; i++) {
        cLock.acquire()   // cLock.acquire() placed after pLock.acquire() will not cause deadlock
        pLock.acquire()   
        var arr = dict.get("array")
        arr.push(i)
        dict.set("array", arr)
        Log("producer:", i, ", array:", arr)
        pLock.release()
        Sleep(1000)
        cLock.release()
    }
}

function main() {
    var dict = threading.Dict()
    dict.set("array", [])
    var pLock = threading.Lock()
    var cLock = threading.Lock()
    var productionQuantity = 10
    var producerThread = threading.Thread(producer, productionQuantity, dict, pLock, cLock)
    var consumerThread = threading.Thread(consumer, productionQuantity, dict, pLock, cLock)

    consumerThread.join()
    producerThread.join()
}

Ujian senario buntu

Perlu diperhatikan bahawa penggunaan kunci benang yang tidak betul boleh menyebabkan kebuntuan.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}

ThreadEvent

Objek peristiwa, digunakan untuk pemberitahuan dan isyarat peristiwa berbilang benang.

set

Peraturanset()fungsi digunakan untuk memberitahu peristiwa (set isyarat).

set (()

Sila rujukthreading.Event()Bahagian untuk contoh.

Jika isyarat telah ditetapkan menggunakanset()Kita perlu membersihkan isyarat dan menetapkannya semula.

{@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}

jelas

Peraturanclear()Fungsi digunakan untuk membersihkan isyarat.

jelas.

Sila rujukthreading.Event()Bahagian untuk contoh.

{@fun/Threads/ThreadEvent/set set}, {@fun/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}

Tunggu.

Peraturanwait()fungsi digunakan untuk menetapkan acara (isyarat) menunggu, dan akan menyekat sebelum acara (isyarat) ditetapkan; ia menyokong menetapkan parameter timeout.

Peraturanwait()fungsi mengembalikan sama ada masa lapang telah berlaku. Jika ya, ia mengembalikan nilai benar.

bool

Tunggu. tunggu (timeout)

PeraturantimeoutParameter digunakan untuk menetapkan masa tunggu dalam mili saat.

masa lapang palsu nombor

function main() {
    var event = threading.Event()
    var t1 = threading.Thread(function(event) {
        var ret = event.wait(100)
        Log(`event.wait(100):`, ret)
        ret = event.wait()
        Log(`event.wait():`, ret)
    }, event)

    Sleep(1000)
    event.set()
    t1.join()
}

Uji nilai pulanganwait() function.

{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/isSet isSet}

isSet

PeraturanisSet()fungsi digunakan untuk menentukan sama ada peristiwa (isyarat) telah ditetapkan.

PeraturanisSet()fungsi mengembalikan sama ada acara (isyarat) telah ditetapkan; jika acara (isyarat) telah ditetapkan, ia mengembalikan nilai benar.

bool

isSet()

Sila rujukthreading.Event()Bahagian untuk contoh.

{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}

ThreadCondition

Objek keadaan, digunakan untuk penyegerakan pelbagai benang.

maklumkan

Peraturannotify()fungsi digunakan untuk membangunkan thread menunggu (jika ada). Hanya thread yang telah dipanggilwait()Sistem akan terbangun.

maklumkan

function consumer(dict, condition) {
    while (true) {
        condition.acquire()
        while (dict.get("array").length == 0) {
            Log(threading.currentThread().name(), "wait()...", ", array:", dict.get("array"))
            condition.wait()
        }
        var arr = dict.get("array")
        var num = arr.shift()
        Log(threading.currentThread().name(), ", num:", num, ", array:", arr, "#FF0000")
        dict.set("array", arr)
        Sleep(1000)
        condition.release()
    }
}

function main() {
    var condition = threading.Condition()
    var dict = threading.Dict()
    dict.set("array", [])
    var t1 = threading.Thread(consumer, dict, condition)
    var t2 = threading.Thread(consumer, dict, condition)
    var t3 = threading.Thread(consumer, dict, condition)
    Sleep(1000)
    var i = 0
    while (true) {
        condition.acquire()
        var msg = ""
        var arr = dict.get("array")
        var randomNum = Math.floor(Math.random() * 5) + 1
        if (arr.length >= 3) {
            condition.notifyAll()
            msg = "notifyAll"
        } else {
            arr.push(i)
            dict.set("array", arr)
            if (randomNum > 3 && arr.length > 0) {
                condition.notify()
                msg = "notify"
            } else {
                msg = "pass"
            }
            i++
        }

        Log(_D(), "randomNum:", randomNum, ", array:", arr, ", msg:", msg)
        condition.release()
        Sleep(1000)
    }
}

Gunakannotify()fungsi untuk membangunkan benang menunggu.

Peraturannotify()fungsi membangunkan utas dalam barisan menunggu.

Apabilanotify()Fungsi membangunkan benang, benang akan mendapatkan semula kunci benang.

{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

memberitahuSemua

PeraturannotifyAll()Fungsi membangunkan semua benang menunggu.

memberitahuSemua()

Sila rujukThreadCondition.notify()Bahagian untuk contoh.

PeraturannotifyAll()Fungsi membangkitkan semua benang menunggu satu demi satu, dan benang yang dibangkitkan mendapatkan semula kunci benang.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

Tunggu.

Peraturanwait()Fungsi digunakan untuk membuat benang menunggu di bawah keadaan tertentu yang direka.

Tunggu.

Sila rujukThreadCondition.notify()Bahagian untuk contoh.

Peraturanwait()Fungsi melepaskan kunci benang dan mendapatkan semula kunci benang apabila bangun.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

memperoleh

Peraturanacquire()fungsi digunakan untuk meminta kunci benang (kunci).

mendapatkan ((()

Sila rujukThreadCondition.notify()Bahagian untuk contoh.

Sebelum digunakanwait(), anda perlu meminta kunci benang (kunci) objek keadaan semasa.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}

Pembebasan

Peraturanrelease()fungsi digunakan untuk melepaskan kunci benang (membuka kunci).

Pembebasan ((()

Sila rujukThreadCondition.notify()Bahagian untuk contoh.

Selepas digunakanwait(), kita perlu melepaskan kunci benang (membuka kunci) objek keadaan semasa.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}

ThreadDict

Objek kamus, digunakan untuk berkongsi data.

Dapatkan

Peraturanget()fungsi digunakan untuk mendapatkan nilai kunci yang direkodkan dalam objek kamus.

Peraturanget()fungsi mengembalikan nilai kunci yang ditentukan olehkey parameter.

rentetan, nombor, bool, objek, susunan, nilai sifar dan jenis lain yang disokong oleh sistem

Dapatkan kunci

PeraturankeyParameter digunakan untuk menentukan nama kunci yang sepadan dengan kunci yang akan diperoleh.

kunci betul senar

function main() {
    var event = threading.Event()
    var dict = threading.Dict()
    dict.set("data", 100)
    
    var t1 = threading.Thread(function(dict, event) {
        Log(`thread1, dict.get("data"):`, dict.get("data"))
        
        event.set()
        event.clear()
        
        event.wait()
        Log(`after main change data, thread1 dict.get("data"):`, dict.get("data"))
    
        dict.set("data", 0)
    }, dict, event)
    
    event.wait()
    
    dict.set("data", 99)
    
    event.set()
    event.clear()
    
    t1.join()
    Log(`main thread, dict.get("data"):`, dict.get("data"))
}

Gunakan objek peristiwa untuk memberitahu utas untuk membaca dan mengubah suai data.

{@fun/Threads/ThreadDict/set set}

set

Peraturanset()fungsi digunakan untuk menetapkan pasangan kunci-nilai.

set (kunci, nilai)

Parameterkeydigunakan untuk menetapkan nama kunci yang akan diubah.

kunci betul senar Parametervaluedigunakan untuk menetapkan nilai kunci yang akan diubah.

nilai betul rentetan, nombor, bool, objek, susunan, nilai sifar dan jenis lain yang disokong oleh sistem

Sila rujukThreadDict.get()Bahagian untuk contoh.

{@fun/Threads/ThreadDict/get get}

Web3

exchange.IO("Abi",...)

Dalam Platform Perdagangan Kuantum FMZ, ia terutamanya melaksanakan pelbagai fungsi, panggilan yang berkaitan dengan blockchain melaluiexchange.IO()Dokumen berikut menerangkanexchange.IO()Cara panggilan sistem penghantaranexchange.IO("abi", ...)fungsi digunakan untuk mendaftarkan ABI.

exchange.IO(k, alamat, abiContent)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"abi"bermaksud bahawa fungsi digunakan untuk mendaftarABI. k betul senar Peraturanaddressparameter digunakan untuk menentukan alamat kontrak pintar. alamat betul senar PeraturanabiContentparameter digunakan untuk menentukanABIdaripada kontrak pintar. abiContent betul senar

function main() {
    // register Uniswap SwapRouter02 abi
    var routerAddress = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
    var abi = `[{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]`
    
    // Get the ```ABI``` content of the contract can be obtained with the following URL, taking the ```result``` field only, e.g:
    exchange.IO("abi", routerAddress, abi)
}

Kaedah panggilan kontrak pintar tidak perlu didaftarkan jika ia adalah kaedah ERC20 standard. DapatkanABIkandungan kontrak boleh didapati dengan URL berikut, mengambilresultHanya bidang, contohnya:

https://api.etherscan.io/api?module=contract&action=getabi&address=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45

exchange.IO("api", eth,...)

Kaedah panggilanexchange.IO("api", "eth", ...)fungsi digunakan untuk memanggil kaedah Ethereum RPC.

Peraturanexchange.IO("api", "eth", ...)fungsi mengembalikan nilai pulangan kaedah RPC yang dipanggil. string, nombor, bool, objek, array, null dan semua jenis lain yang disokong oleh sistem

exchange.IO(k, blockChain, rpcMethod)exchange.IO(k, blockChain, rpcMethod,...args)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"api"menunjukkan bahawa fungsi digunakan untuk memperluaskan permintaan panggilan. k betul senar PeraturanblockChainparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"eth"menunjukkan bahawa fungsi digunakan untuk panggilan kaedah RPC di Rangkaian Ethereum. blockChain betul senar PerkhidmatanrpcMethodParameter digunakan untuk menetapkan kaedah RPC yang akan dipanggil olehexchange.IO()fungsi. rpcMethod betul senar Peraturanargparameter digunakan untuk menentukan parameter kaedah RPC yang akan dipanggil.argJenis dan bilanganargparameter bergantung kepada kaedah RPC yang ditentukan olehrpcMethodparameter. arg palsu string, nombor, bool, objek, array, fungsi, null, dan semua jenis lain yang disokong oleh sistem

function main() {
    // "owner" needs to be replaced with the specific wallet address
    // Parameter labels for the "latest" string position: 'latest', 'earliest' or 'pending', please refrer to https://eth.wiki/json-rpc/API#the-default-block-parameter
    // The return value ethBalance is a hexadecimal string: 0x9b19ce56113070
    var ethBalance = exchange.IO("api", "eth", "eth_getBalance", "owner", "latest")              

    // ETH has a precision unit of 1e18
    var ethDecimal = 18              

    // Because of the JavaScript language precision, it is necessary to use the system underlying package function BigInt, BigDecimal to process
    // Convert ethBalance to readable amount, 0x9b19ce56113070 to 0.043656995388076145
    Log(Number((BigDecimal(BigInt(ethBalance))/BigDecimal(Math.pow(10, ethDecimal))).toString()))
}

Periksa baki ETH dalam dompet anda:

function mian() {
    // ETH has a precision unit of 1e18
    var ethDecimal = 18  

    // Number of transfers, readable amount e.g. 0.01 ETH
    var sendAmount = 0.01  

    // Due to the JavaScript language precision, it is necessary to use the system underlying encapsulated functions BigInt, BigDecimal to process, and to convert the readable amount to the data processed on the chain
    var toAmount = (BigDecimal(sendAmount)*BigDecimal(Math.pow(10, ethDecimal))).toFixed(0)
    
    // "toAddress" is the address of the recipient's ETH wallet at the time of the transfer, which needs to be filled in specifically, and toAmount is the number of transfers
    exchange.IO("api", "eth", "send", "toAddress", toAmount)
}

Untuk pemindahan ETH, anda boleh menetapkan{gasPrice: 11, gasLimit: 111, nonce: 111}parameter, yang ditetapkan pada parameter terakhirexchange.IO()Anda boleh mengabaikannoncedan menggunakan sistem lalai, atau meninggalkangasLimit/gasPrice/noncemematikan dan menggunakan nilai lalai sistem untuk semua.

function toAmount(s, decimals) {
    return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(10, decimals))).toString())
}

function main() {
    var gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
    Log("gasPrice:", toAmount(gasPrice, 0))   // 5000000000 , in wei (5 gwei)
}

SoalangasPrice:

function toAmount(s, decimals) {
    // The toAmount function can convert hex-encoded values to decimal values
    return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(10, decimals))).toString())
}                

function main() {
    // Coding approve (authorization) method calls
    var data = exchange.IO("encode", "0x111111111117dC0aa78b770fA6A738034120C302", "approve", "0xe592427a0aece92de3edee1f18e0157c05861564", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
    Log("data:", data)
    var gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
    Log("gasPrice:", toAmount(gasPrice, 0))
    var obj = {
        "from" : "0x0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",   // walletAddress
        "to"  : "0x111111111117dC0aa78b770fA6A738034120C302",
        "gasPrice" : gasPrice,
        "value" : "0x0",
        "data" : "0x" + data,
    }
    
    var gasLimit = exchange.IO("api", "eth", "eth_estimateGas", obj)
    Log("gasLimit:", toAmount(gasLimit, 0))
    Log("gas fee", toAmount(gasLimit, 0) * toAmount(gasPrice, 0) / 1e18)
}

Soalaneth_estimateGas:

Parameter keduaexchange.IO()fungsi dengan"eth"boleh langsung memanggil kaedah RPC yang tersedia untuk pelayan node Ethereum.

{@fun BigDecimal}, {@fun BigInt}

exchange.IO("mengekod",...)

Peraturanexchange.IO("encode", ...)fungsi dipanggil untuk pengekodan data.

Peraturanexchange.IO("encode", ...)fungsi mengembalikan data yang dikodkan. senar

exchange.IO(k, dataFormat,...args)exchange.IO(k, alamat, dataFormat)exchange.IO(k, alamat, dataFormat,...args)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"encode"bermaksud fungsi digunakan untuk pengekodan data. k betul senar Peraturanaddressparameter digunakan untuk menetapkan alamat kontrak pintar.exchange.IO("encode", ...)Fungsi, melalui dalamaddressparameter menunjukkan pengekodan panggilan kaedah pada kontrak pintar.exchange.IO("encode", ...)fungsi, jikaaddressparameter tidak diteruskan, fungsi ini digunakan untuk mengkod perintah jenis yang ditentukan dan berfungsi bersamaan denganabi.encodedalamSolidity. alamat palsu senar PeraturandataFormatParameter digunakan untuk menentukan kaedah, jenis, dan urutan data yang dikodkan. dataFormat betul senar Perkhidmatanargparameter digunakan untuk menentukan nilai data tertentu yang sepadan dengandataFormatMungkin ada lebih daripada satu parameterargparameter, dan jenis dan bilanganargparameter bergantung kepadadataFormattetapan parameter. arg palsu rentetan, nombor, tuple, array, dan semua jenis lain yang disokong oleh sistem

function main() {
    // Main network address of ContractV3SwapRouterV2: 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
    // Calling the unwrapWETH9 method requires registering the ABI first, which is omitted here
    // "owner" represents the wallet address, which need to fill in the specific, 1 represents the number of unpacking, unpacking a WETH into ETH
    var data = exchange.IO("encode", "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", "unwrapWETH9(uint256,address)", 1, "owner")
    Log(data)
}

Sebagai contoh, memanggil kaedah pengekodanunwrapWETH9:

function main() {
    var x = 10 
    var address = "0x02a5fBb259d20A3Ad2Fdf9CCADeF86F6C1c1Ccc9"
    var str = "Hello World"
    var array = [1, 2, 3]
    var ret = exchange.IO("encode", "uint256,address,string,uint256[]", x, address, str, array)   // uint i.e. uint256 , the type length needs to be specified on FMZ
    Log("ret:", ret)
    /*
    000000000000000000000000000000000000000000000000000000000000000a    // x
    00000000000000000000000002a5fbb259d20a3ad2fdf9ccadef86f6c1c1ccc9    // address
    0000000000000000000000000000000000000000000000000000000000000080    // Offset of str
    00000000000000000000000000000000000000000000000000000000000000c0    // Offset of array
    000000000000000000000000000000000000000000000000000000000000000b    // The length of str
    48656c6c6f20576f726c64000000000000000000000000000000000000000000    // str data
    0000000000000000000000000000000000000000000000000000000000000003    // The length of the array
    0000000000000000000000000000000000000000000000000000000000000001    // array the first data
    0000000000000000000000000000000000000000000000000000000000000002    // array the second data
    0000000000000000000000000000000000000000000000000000000000000003    // array the third data
    */
}

Ia sama dengan contoh pengekodanabi.encodedalamSolidity:

function main() {
    var types = "tuple(a uint256,b uint8,c address),bytes"
    var ret = exchange.IO("encode", types, {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }, "0011")
    Log("encode: ", ret)
}

Ia menyokong pengekodan tuple atau urutan jenis yang mengandungi tuple. Perintah jenis ini terdiri daripada:tuple, bytes, jadi apabila memanggilexchange.IO()untuk pengekodan, anda perlu terus lulus dua parameter:

    1. Peralihan yang sepadan dengan jenis tuple:
    
    {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
    
    

    Parameter yang dihantar juga harus konsisten dengan struktur dan jenistuple, seperti yang ditakrifkan dalamtypesParameter borang:tuple(a uint256,b uint8,c address).

    1. Peralihan yang sepadan dengan jenisbytes:
    "0011"
    
function main() {
    var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"]   // ETH address, USDT address
    var ret = exchange.IO("encode", "address[]", path)
    Log("encode: ", ret)
}

Ia menyokong pengekodan berurutan array atau jenis yang mengandungi array:

Peraturanexchange.IO()fungsi merangkumiencodekaedah, yang boleh mengembalikan kod panggilan fungsi kehexUntuk kegunaan khusus, anda boleh merujuk kepada platforms yang tersedia untuk umumUniswap V3 Perdagangan Templat. Apabila kaedah pengekodan memanggil kontrak pintar, ABI yang sepadan perlu didaftarkan terlebih dahulu.

exchange.IO("encodePacked",...)

Peraturanexchange.IO("encodePacked", ...)fungsi dipanggil dengan cara yang digunakan untukencodePacked encoding.

Peraturanexchange.IO("encodePacked", ...)fungsi mengembalikanencodePackeddata dikodkan. senar

exchange.IO(k, dataFormat,...args)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"encodePacked"bermaksud bahawa fungsi digunakan untuk dataencodePackedpengekodan. k betul senar PeraturandataFormatparameter digunakan untuk menentukan jenis dan urutanencodePackeddata dikodkan. dataFormat betul senar Peraturanargparameter digunakan untuk menentukan nilai data tertentu yang sepadan dengandataFormatMungkin ada lebih daripada satu parameterargparameter, dan jenis dan bilanganargparameter bergantung kepadadataFormattetapan parameter. arg betul rentetan, nombor, tuple, array, dan semua jenis lain yang disokong oleh sistem

function main() {
    var fee = exchange.IO("encodePacked", "uint24", 3000)
    var tokenInAddress = "0x111111111117dC0aa78b770fA6A738034120C302"
    var tokenOutAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"
    var path = tokenInAddress.slice(2).toLowerCase()
    path += fee + tokenOutAddress.slice(2).toLowerCase()
    Log("path:", path)
}

Apabila digunakanUniswap V3, anda perlu lulus dalam parameter seperti laluan pertukaran, anda perlu menggunakanencodePackedOperasi pengekodan:

exchange.IO("decode",...)

Peraturanexchange.IO("decode", ...)Fungsi dipanggil dengan cara yang digunakan untuk mendekod.

Peraturanexchange.IO("decode", ...)fungsi mengembalikan data yang telah didekodkan. Mengembalikan rentetan apabila hanya ada satu data yang ditentukan olehdataFormatMengembalikan array apabila terdapat lebih daripada satu data yang ditentukan olehdataFormatparameter. array、string

exchange.IO(k, dataFormat, data)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, dan menetapkannya kepada"decode"bermaksud bahawa fungsi digunakan untuk mendekod data. k betul senar PeraturandataFormatParameter digunakan untuk menentukan jenis dan urutan data yang didekodkan. dataFormat betul senar Perkhidmatandataparameter digunakan untuk menetapkan data yang akan didekodkan. data betul senar

function main() {
    var types = "tuple(a uint256,b uint8,c address),bytes"
    var ret = exchange.IO("encode", types, {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }, "0011")
    Log("encode: ", ret)            

    var rawData = exchange.IO("decode", types, ret)
    Log("decode:", rawData)
}

Pengoperasian terbalikexchange.IO("encode", ...)fungsi:

function main() {
    // register SwapRouter02 abi
    var walletAddress = "0x398a93ca23CBdd2642a07445bCD2b8435e0a373f"
    var routerAddress = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
    var abi = `[{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]`
    exchange.IO("abi", routerAddress, abi)   // abi only uses the contents of the local exactOutput method, the full abi can be searched on the Internet              

    // encode path
    var fee = exchange.IO("encodePacked", "uint24", 3000)
    var tokenInAddress = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    var tokenOutAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"
    var path = tokenInAddress.slice(2).toLowerCase()
    path += fee + tokenOutAddress.slice(2).toLowerCase()
    Log("path:", path)              

    var dataTuple = {
        "path" : path, 
        "recipient" : walletAddress, 
        "amountOut" : 1000, 
        "amountInMaximum" : 1, 
    }
    // encode SwapRouter02 exactOutput 
    var rawData = exchange.IO("encode", routerAddress, "exactOutput", dataTuple)
    Log("method hash:", rawData.slice(0, 8))   // 09b81346
    Log("params hash:", rawData.slice(8))              

    // decode exactOutput params
    var decodeRaw = exchange.IO("decode", "tuple(path bytes,recipient address,amountOut uint256,amountInMaximum uint256)", rawData.slice(8))
    Log("decodeRaw:", decodeRaw)
}

Contoh berikut pertama melakukanencodePackedoperasi padapathpemprosesan parameter, keranaexactOutputpanggilan kaedah yang perlu dikodkan kemudian memerlukanpathsebagai parameter. KemudianencodeKesemuaexactOutputkaedah kontrak laluan, yang hanya mempunyai satu parameter jenistuple. Nama kaedahexactOutputdikodkan sebagai:0x09b81346, dan menggunakanexchange.IO("decode", ...)kaedah untuk memecahkan kod hasildecodeRaw, konsisten dengan pembolehubahdataTuple.

Untuk pemprosesan data,exchange.IO()Fungsi menyokong bukan sahaja pengekodan, tetapi juga dekod.

exchange.IO("kunci",...)

Peraturanexchange.IO("key", ...)fungsi dipanggil dengan cara untuk menukar kunci peribadi.

exchange.IO(k, kunci)

Parameterkdigunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"key"bermakna fungsi digunakan untuk menukar kunci peribadi. k betul senar PeraturankeyParameter digunakan untuk menetapkan kunci peribadi. kunci betul senar

function main() {
    exchange.IO("key", "Private Key")   // "Private Key" represents the private key string, which needs to be filled in specifically
}

Peraturanexchange.IO()fungsi menyokong menukar kunci peribadi dan ia boleh memanipulasi pelbagai alamat dompet. Ia juga mungkin untuk menambah pelbagai objek pertukaran (lihat: {@var/EXCHANGE/exchanges exchanges}) untuk memanipulasi pelbagai alamat dompet.

exchange.IO("api",...)

Peraturanexchange.IO("api", ...)fungsi dipanggil dengan cara yang digunakan untuk memanggil kaedah kontrak pintar.

Peraturanexchange.IO("api", ...)fungsi mengembalikan nilai pulangan kaedah kontrak pintar yang dipanggil. string, nombor, bool, objek, array, null dan semua jenis lain yang disokong oleh sistem

exchange.IO(k, alamat, kaedah)exchange.IO(k, alamat, kaedah,... args)exchange.IO(k, alamat, kaedah, nilai,... args)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"api"menunjukkan bahawa fungsi digunakan untuk memperluaskan permintaan panggilan. k betul senar Peraturanaddressparameter digunakan untuk menentukan alamat kontrak pintar. alamat betul senar Peraturanmethodparameter digunakan untuk menentukan kaedah kontrak pintar yang akan dipanggil. kaedah betul senar Perkhidmatanvalueparameter digunakan untuk menetapkan jumlah ETH yang akan dihantar.stateMutabilityatribut kaedah kontrak pintar yang akan dilaksanakan adalahpayable, kemudianvalueparameter perlu lulus."stateMutability": "payable"Atribut boleh dilihat dari ABI.exchange.IO()fungsi akan menentukan parameter yang diperlukan berdasarkanstateMutabilityAtribut dalam ABI yang telah didaftarkan.stateMutabilityatribut adalahnonpayable, kemudianvalueParameter tidak perlu dihantar. nilai palsu nombor,string Peraturanargparameter digunakan untuk menentukan parameter kaedah kontrak pintar yang akan dipanggil.argparameter, dan jenis dan bilanganargparameter bergantung kepada kaedah kontrak pintar yang akan dipanggil. arg palsu rentetan, nombor, bool, dan semua jenis lain yang disokong oleh sistem

function main(){
    var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"    // The contract address of the token, the token is 1INCH in the example
    Log(exchange.IO("api", tokenAddress, "decimals"))                  // Query, print 1INCH tokens with precision index of 18
}

Peraturandecimalskaedah adalahconstantkaedah ERC20 yang tidak menimbulkan penggunaan gas dan ia boleh menyoal data ketepatan token.decimalsNilai pulangan: data ketepatan token.

function main(){
    // The contract address of the token, in the example the token is 1INCH
    var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"                          

    // For example, the query yields 1000000000000000000, divided by the precision unit of the token 1e18, the wallet to which the current exchange object is bound has authorized 1 1INCH to the spender address
    Log(exchange.IO("api", tokenAddress, "allowance", "owner", "spender"))   
}

Peraturanallowancekaedah adalahconstantkaedah ERC20 yang tidak menjana penggunaan gas dan boleh pertanyaan jumlah yang dibenarkan token untuk alamat kontrak tertentu.allowancekaedah mengambil 2 parameter, yang pertama adalah alamat dompet dan yang kedua adalah alamat yang dibenarkan.
owner: alamat dompet, contoh digantikan dengan rentetan owner, penggunaan sebenar perlu mengisi alamat tertentu.spender: alamat kontrak yang dibenarkan, contoh digantikan oleh rentetan spender, penggunaan sebenar perlu mengisi alamat tertentu, contohnya ia bolehUniswap V3 router v1 address.

function main(){
    // The contract address of the token, the token is 1INCH in the example
    var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"                 

    // The hexadecimal string of the authorization amount: 0xde0b6b3a7640000 , the corresponding decimal string: 1e18 , 1e18 divided by the precision unit of the token, i.e. 1 token amount, so this refers to the authorization of one token
    Log(exchange.IO("api", tokenAddress, "approve", "spender", "0xde0b6b3a7640000"))  
}```
The ```approve``` method is a non-```constant``` method of ERC20, which generates gas consumption and is used to authorize the operation amount of a token to a contract address. The ```approve``` method takes 2 parameters, the first one is the address to be authorized and the second one is the amount to be authorized. Return value: txid.  
```spender```: the address of the authorized contract, the example is replaced by the string "spender", the actual use needs to fill in the specific address, for example, it can be ```Uniswap V3 router v1``` address. ```0xde0b6b3a7640000```: the number of authorizations, here is the hexadecimal string, the corresponding decimal value is 1e18, divided by the token precision unit in the example (i.e. 1e18). The result is that 1 token is authorized. The third parameter of the ```exchange.IO()``` function is passed to the method name ```approve```, which can also be written in the form of methodId, such as "0x571ac8b0". It is also possible to write the full standard method name, for example: "approve(address,uint256)".
```javascript
function main() {
    var ContractV3SwapRouterV2 = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
    var tokenInName = "ETH"
    var amountIn = 0.01
    var options = {gasPrice: 5000000000, gasLimit: 21000, nonce: 100}   // This is an example, depending on the actual scene settings
    var data = ""                                                       // The encoded data, here is the empty string, depending on the actual scene settings
    var tx = exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", (tokenInName == 'ETH' ? amountIn : 0), (new Date().getTime() / 1000) + 3600, data, options || {})
}

Peraturanmulticallkaedah adalah bukan-constantkaedahUniswap V3yang menjana penggunaan gas dan digunakan untuk menebus token dengan pelbagai cara. Perkhidmatanmulticallkaedah boleh mempunyai pelbagai cara untuk lulus parameter, anda boleh memeriksa ABI yang mengandungi kaedah secara khusus, anda perlu mendaftar ABI sebelum memanggil kaedah.

Untuk contoh khususmulticallanda boleh merujuk kepada platforms yang tersedia untuk umumUniswap V3 Perdagangan Templat

Beberapa butiran diterangkan di sini menggunakan kod palsu:


exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data)

ContractV3SwapRouterV2: alamat penghala v2 Uniswap V3.value: jumlah ETH untuk dipindahkan, ditetapkan kepada 0 jika token dalam operasi pertukaran bukan ETH.deadline: deadlineialah parametermulticallkaedah, yang boleh ditetapkan kepada (new Date().getTime() / 1000) + 3600, menunjukkan bahawa ia sah selama satu jam.data: dataialah parametermulticallkaedah, data operasi pembungkusan yang akan dilakukan.

Sama sepertiexchange.IO("api", "eth", "send", "toAddress", toAmount), yanggasLimit/gasPrice/noncetetapan panggilan kaedah boleh ditentukan apabila memanggilmulticallkaedah. Sekali lagi, kita menggunakan kod palsu untuk menerangkan:


exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data, {gasPrice: 123456, gasLimit: 21000})

Parameter{gasPrice: 11, gasLimit: 111, nonce: 111}boleh ditetapkan mengikut keperluan khusus, yang ditetapkan kepada parameter terakhirexchange.IO()fungsi. Anda boleh terlepasnoncedan menggunakan sistem nilai lalai, atau meninggalkangasLimit/gasPrice/noncemematikan dan menggunakan nilai lalai sistem untuk semua.

exchange.IO("Alamat")

Peraturanexchange.IO("address")fungsi dipanggil sedemikian rupa untuk mendapatkan alamat dompet yang dikonfigurasikan oleh objek pertukaran {@var/EXCHANGE exchange}.

Peraturanexchange.IO("address")fungsi mengembalikan alamat dompet yang dikonfigurasikan. senar

exchange.IO(k)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"address"bermaksud bahawa fungsi digunakan untuk mendapatkan alamat dompet yang dikonfigurasikan. k betul senar

function main() {
    Log(exchange.IO("address"))         // Print the wallet address of the private key configured on the exchange object
}

exchange.IO("Basis",...)

Peraturanexchange.IO("base", ...)fungsi dipanggil dengan cara untuk menetapkan alamat nod RPC.

exchange.IO(k, alamat)

Peraturankparameter digunakan untuk menetapkan fungsiexchange.IO()fungsi, ditetapkan kepada"base"bermaksud fungsi digunakan untuk menukar nod RPC. k betul senar Peraturanaddressparameter digunakan untuk menetapkan alamat nod RPC. alamat betul senar

function main() {
    var chainRpc = "https://bsc-dataseed.binance.org"
    e.IO("base", chainRpc)    // Switching to BSC chain
}

TA

TA.MACD

PeraturanTA.MACD()fungsi digunakan untuk mengiraIndikator MACD kepelbagaian dan kesamaan yang dihaluskan secara eksponen.

Nilai pulanganTA.MACD()fungsi adalah array dua dimensi dengan struktur:[DIF, DEA, MACD]. Array

TA.MACD ((inReal) TA.MACD ((inReal, optInFastPeriod, optInSlowPeriod, optInSignalPeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInFastPeriodParameter digunakan untuk menetapkan tempoh cepat. optInFastPeriod palsu nombor PeraturanoptInSlowPeriodparameter digunakan untuk menetapkan tempoh perlahan. optInSlowPeriod palsu nombor PeraturanoptInSignalPeriodparameter digunakan untuk menetapkan tempoh isyarat. pilihanDalam Tempoh Isyarat palsu nombor

function main(){
    // You can fill in different k-line periods, such as PERIOD_M1,PERIOD_M30,PERIOD_H1...
    var records = exchange.GetRecords(PERIOD_M15)
    var macd = TA.MACD(records, 12, 26, 9)
    // Watching the logs, you can see that three arrays are returned, corresponding to DIF, DEA and MACD.
    Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2])
}
def main():
    r = exchange.GetRecords(PERIOD_M15)
    macd = TA.MACD(r, 12, 26, 9)
    Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2])
void main() {
    auto r = exchange.GetRecords(PERIOD_M15);
    auto macd = TA.MACD(r, 12, 26, 9);
    Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2]);
}

PeraturanTAPerpustakaan indikator FMZ Quant, dioptimumkan untuk algoritma penunjuk biasa.JavaScript, Python, C++panggilan strategi bahasa,Kod perpustakaan TA sumber terbuka. Nilai lalaioptInFastPeriod, optInSlowPeriod, danoptInSignalPeriodparameterTA.MACD()Fungsi adalah:12, 26, dan9.

{@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.KDJ

PeraturanTA.KDJ()fungsi digunakan untuk mengiraIndikator stokastik.

Nilai pulanganTA.KDJ()fungsi adalah array dua dimensi dengan struktur:[K, D, J]. Array

TA.KDJ ((inReal) TA.KDJ ((inReal, tempoh, kPeriod, dPeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor Perkhidmatanperiodparameter digunakan untuk menetapkan tempoh 1. tempoh palsu nombor PeraturankPeriodparameter digunakan untuk menetapkan tempoh 2. kPeriod palsu nombor PeraturandPeriodparameter digunakan untuk menetapkan tempoh 3. dPeriode palsu nombor

function main(){
    var records = exchange.GetRecords(PERIOD_M15)
    var kdj = TA.KDJ(records, 9, 3, 3)
    Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2])
}
def main():
    r = exchange.GetRecords(PERIOD_M15)
    kdj = TA.KDJ(r, 9, 3, 3)
    Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2])
void main() {
    auto r = exchange.GetRecords();
    auto kdj = TA.KDJ(r, 9, 3, 3);
    Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2]);
}

Nilai lalai untukperiod, kPeriod, dandPeriodparameterTA.KDJ()Fungsi adalah:9, 3, dan3.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.RSI

PeraturanTA.RSI()fungsi digunakan untuk mengiraIndikator Kekuatan.

Nilai pulanganTA.RSI()Fungsi adalah: array satu dimensi. Array

TA.RSI ((inReal) TA.RSI ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh. optInTimePeriod palsu nombor

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var rsi = TA.RSI(records, 14)
    Log(rsi)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    rsi = TA.RSI(r, 14)
    Log(rsi)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto rsi = TA.RSI(r, 14);
    Log(rsi); 
}

Nilai lalaioptInTimePeriodparameterTA.RSI()Fungsi adalah:14.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.ATR

PeraturanTA.ATR()fungsi digunakan untuk mengiraPenunjuk Volatiliti Benar Purata.

Nilai pulanganTA.ATR()Fungsi adalah: array satu dimensi. Array

TA.ATR ((inPriceHLC) TA.ATR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh. optInTimePeriod palsu nombor

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var atr = TA.ATR(records, 14)
    Log(atr)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    atr = TA.ATR(r, 14)
    Log(atr)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto atr = TA.ATR(r, 14);
    Log(atr);
}

Nilai lalaioptInTimePeriodparameterTA.ATR()Fungsi adalah:14.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.OBV

PeraturanTA.OBV()fungsi digunakan untuk mengirapenunjuk gelombang tenaga.

Nilai pulanganTA.OBV()Fungsi adalah: array satu dimensi. Array

TA.OBV ((inReal) TA.OBV ((inReal, inPriceV)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmataninPriceVParameter digunakan untuk menentukan data jumlah transaksi. dalamPriceV palsu Array struktur {@struct/Record Record}

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var obv = TA.OBV(records)
    Log(obv)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    obv = TA.OBV(r)
    Log(obv)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto obv = TA.OBV(r);
    Log(obv);
}

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.MA

PeraturanTA.MA()fungsi digunakan untuk mengiraIndikator MACD.

Nilai pulanganTA.MA()Fungsi adalah: array satu dimensi. Array

TA.MA(InReal)TA.MA(inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh. optInTimePeriod palsu nombor

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var ma = TA.MA(records, 14)
    Log(ma)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    ma = TA.MA(r, 14)
    Log(ma)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto ma = TA.MA(r, 14);
    Log(ma);
}

Nilai lalaioptInTimePeriodparameterTA.MA()Fungsi adalah:9.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CM TA.F.CMF}, {@fun/TA/TA.Highest.Highest}, {@fun/TA/TA.Lowest.TA.Lowest}, {@fun/TA/TA.Lowest.TA.Lowest}

TA.EMA

PeraturanTA.EMA()fungsi digunakan untuk mengiraPenunjuk purata eksponen.

Nilai pulanganTA.EMA()Fungsi adalah: array satu dimensi. Array

TA.EMA ((inReal) TA.EMA ((dalamReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh. optInTimePeriod palsu nombor

function main(){
    var records = exchange.GetRecords()
    // Determine if the number of K-line bars meets the calculation period of the indicator
    if (records && records.length > 9) {
        var ema = TA.EMA(records, 9)          
        Log(ema)
    }
}
def main():
    r = exchange.GetRecords()
    if r and len(r) > 9:
        ema = TA.EMA(r, 9)
        Log(ema)
void main() {
    auto r = exchange.GetRecords();
    if(r.Valid && r.size() > 9) {
        auto ema = TA.EMA(r, 9);
        Log(ema);
    }
}

Nilai lalaioptInTimePeriodparameterTA.EMA()Fungsi adalah:9.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.BOLL

PeraturanTA.BOLL()fungsi digunakan untuk mengiraIndikator Bollinger Band.

Nilai pulanganTA.BOLL()fungsi adalah array dua dimensi dengan struktur:[upLine, midLine, downLine]. Array

TA.BOLL ((inReal) TA.BOLL ((inReal, tempoh, pengganda)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor Perkhidmatanperiodparameter digunakan untuk menetapkan tempoh. tempoh palsu nombor Peraturanmultiplierparameter digunakan untuk menetapkan pengganda. pengganda palsu nombor

function main() {
    var records = exchange.GetRecords()
    if(records && records.length > 20) {
        var boll = TA.BOLL(records, 20, 2)
        var upLine = boll[0]
        var midLine = boll[1]
        var downLine = boll[2]
        Log(upLine)
        Log(midLine)
        Log(downLine)
    }
}
def main():
    r = exchange.GetRecords()
    if r and len(r) > 20:
        boll = TA.BOLL(r, 20, 2)
        upLine = boll[0]
        midLine = boll[1]
        downLine = boll[2]
        Log(upLine)
        Log(midLine)
        Log(downLine)
void main() {
    auto r = exchange.GetRecords();
    if(r.Valid && r.size() > 20) {
        auto boll = TA.BOLL(r, 20, 2);
        auto upLine = boll[0];
        auto midLine = boll[1];
        auto downLine = boll[2];
        Log(upLine);
        Log(midLine);
        Log(downLine);
    }
}

Nilai lalai untukperioddanmultiplierparameterTA.BOLL()Fungsi adalah:20dan2.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.Alligator

PeraturanTA.Alligator()fungsi digunakan untuk mengiraIndikator Buaya.

Nilai pulanganTA.Alligator()fungsi adalah array dua dimensi dengan struktur:[jawLine, teethLine, lipsLine]. Array

TA. Alligator ((inReal) TA. Alligator ((inReal, rahangLength, gigiLength, bibirLength

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanjawLengthparameter digunakan untuk menetapkan tempoh rahang. rahangLength palsu nombor PeraturanteethLengthparameter digunakan untuk menetapkan tempoh gigi. gigiLengkung palsu nombor PeraturanlipsLengthparameter digunakan untuk menetapkan tempoh bibir atas. BibirLength palsu nombor

function main(){
    var records = exchange.GetRecords()
    var alligator = TA.Alligator(records)
    Log("jawLine:", alligator[0])
    Log("teethLine:", alligator[1])
    Log("lipsLine:", alligator[2])
}
def main():
    records = exchange.GetRecords()
    alligator = TA.Alligator(records)
    Log("jawLine:", alligator[0])
    Log("teethLine:", alligator[1])
    Log("lipsLine:", alligator[2])
void main() {
    auto records = exchange.GetRecords();
    auto alligator = TA.Alligator(records);
    Log("jawLine:", alligator[0]);
    Log("teethLine:", alligator[1]);
    Log("lipsLine:", alligator[2]);
}

Nilai lalaijawLength, teethLength, danlipsLengthparameterTA.Alligator()Fungsi adalah:13, 8, dan5.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.CMF

PeraturanTA.CMF()fungsi digunakan untuk mengiraIndikator Aliran Wang Chaikin.

Nilai pulanganTA.CMF()Fungsi adalah: array satu dimensi. Array

TA.CMF ((inReal) TA.CMF ((inReal, inPriceV)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmataninPriceVparameter digunakan untuk menentukan data jumlah. dalamPriceV palsu Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var cmf = TA.CMF(records)
    Log(cmf)
}
def main():
    records = exchange.GetRecords()
    cmf = TA.CMF(records)
    Log(cmf)
void main() {
    auto records = exchange.GetRecords();
    auto cmf = TA.CMF(records);
    Log(cmf);
}

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.Highest

PeraturanTA.Highest()fungsi digunakan untuk mengiraharga tertinggi dalam tempoh.

PeraturanTA.Highest()fungsi mengembalikan nilai maksimum atribut dalam tempoh tertentu terakhir, tidak termasuk Bar semasa. nombor

TA.Tinggi ((inReal) TA.Paling tinggi ((dalamReal, tempoh, attr)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor Perkhidmatanperiodparameter digunakan untuk menetapkan tempoh. tempoh palsu nombor Peraturanattrparameter digunakan untuk menetapkan sifat, secara pilihan:Open, Close, Low, High, Volume, OpenInterest. attr palsu senar

function main() {
    var records = exchange.GetRecords()
    var highestForOpen = TA.Highest(records, 10, "Open")
    Log(highestForOpen)
}
def main():
    records = exchange.GetRecords()
    highestForOpen = TA.Highest(records, 10, "Open")
    Log(highestForOpen)
void main() {
    auto records = exchange.GetRecords();
    auto highestForOpen = TA.Highest(records.Open(), 10);
    Log(highestForOpen);
}

Sebagai contoh, jikaTA.Highest(records, 30, "High")fungsi dipanggil, jika parameter tempohperiodditetapkan kepada0, ia bermakna untuk mengira semuaBarsdata K-line yang dihantar olehinRealparameter; jika parameter atributattrtidak ditentukan, data K-line yang diserahkan olehinRealparameter dianggap sebagai array biasa.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Lowest TA.Lowest}

TA.Lowest

PeraturanTA.Lowest()fungsi digunakan untuk mengiraharga terendah tempoh.

PeraturanTA.Lowest()fungsi mengembalikan nilai minimum atribut dalam tempoh tertentu terakhir, tidak termasuk Bar semasa. nombor

TA.Lowest ((inReal) TA.Terendah ((dalamReal, tempoh, attr)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor Perkhidmatanperiodparameter digunakan untuk menetapkan tempoh. tempoh palsu nombor Peraturanattrparameter digunakan untuk menetapkan sifat, secara pilihan:Open, Close, Low, High, Volume, OpenInterest. attr palsu senar

function main() {
    var records = exchange.GetRecords()
    var lowestForOpen = TA.Lowest(records, 10, "Open")
    Log(lowestForOpen)
}
def main():
    records = exchange.GetRecords()
    lowestForOpen = TA.Lowest(records, 10, "Open")
    Log(lowestForOpen)
void main() {
    auto records = exchange.GetRecords();
    auto lowestForOpen = TA.Lowest(records.Open(), 10);
    Log(lowestForOpen);
}

Sebagai contoh, jikaTA.Lowest(records, 30, "Low")fungsi dipanggil, jika parameter tempohperiodditetapkan kepada0, ia bermakna untuk mengira semuaBarsdata K-line yang dihantar olehinRealparameter; jika parameter atributattrtidak ditentukan, data K-line yang diserahkan olehinRealparameter dianggap sebagai array biasa. PenggunaanTA.Highest()danTA.Lowest()fungsi dalamC++strategi perlu diperhatikan bahawaHighest()danLowest()Setiap fungsi hanya mempunyai 2 parameter. Dan parameter pertama yang dihantar bukan data K-linerdiperolehi apabila fungsiauto r = exchange.GetRecords()dipanggil. Awak perlu hubungirkaedah dan lulus dalam data atribut tertentu.r.Close()data harga penutupan.Close, High, Low, Open, Volumeseperti dalamr.Close()kaedah panggilan.

Contoh ujianC++strategi bahasa:

void main() { 
    Records r;
    r.Valid = true;
    for (auto i = 0; i < 10; i++) {
        Record ele;
        ele.Time = i * 100000;
        ele.High = i * 10000;
        ele.Low = i * 1000;
        ele.Close = i * 100;
        ele.Open = i * 10;
        ele.Volume = i * 1;
        r.push_back(ele);
    }            

    for(int j = 0; j < r.size(); j++){
        Log(r[j]);
    }            

    // Note: the first parameter passed is not r, you need to call r.Close()
    auto highest = TA.Highest(r.Close(), 8);   
    Log(highest);                     
}

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}

TA.SMA

PeraturanTA.SMA()fungsi digunakan untuk mengirapenunjuk purata bergerak mudah.

Nilai pulanganTA.SMA()Fungsi adalah: array satu dimensi. Array

TA.SMA ((inReal) TA.SMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh. optInTimePeriod palsu nombor

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    var sma = TA.SMA(records, 14)
    Log(sma)
}
def main():
    r = exchange.GetRecords(PERIOD_M30)
    sma = TA.SMA(r, 14)
    Log(sma)
void main() {
    auto r = exchange.GetRecords(PERIOD_M30);
    auto sma = TA.SMA(r, 14);
    Log(sma);
}

Nilai lalaioptInTimePeriodparameterTA.SMA()Fungsi adalah:9.

{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}

Talib

talib.CDL2CROWS

Peraturantalib.CDL2CROWS()fungsi digunakan untuk mengiraDua gagak (grafik K-line - Dua gagak).

Nilai pulangantalib.CDL2CROWS()Fungsi adalah array satu dimensi. Array

talib.CDL2CROWS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDL2CROWS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDL2CROWS(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDL2CROWS(records);
    Log(ret);
}

PeraturanCDL2CROWS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDL2CROWS(Records[Open,High,Low,Close]) = Array(outInteger)Untuk panggilan diPythonbahasa, parameter lulus adalah berbeza dan perlu berdasarkan penerangan di atas:Records[Open,High,Low,Close].

Contoh pembahagian pembolehubahrecords(iaitu parameterinPriceOHLC, ketik {@struct/Record Record} susunan struktur) ke dalam:Opensenarai: ditulis dalam Python sebagairecords.Open. Highsenarai: ditulis sebagairecords.Highdalam Python.Lowsenarai: ditulis dalam Python sebagairecords.Low. Closesenarai: ditulis dalam Python sebagairecords.Close.

Di panggil dalam kod strategi Python:

talib.CDL2CROWS(records.Open, records.High, records.Low, records.Close)

Yang lain.talibpenunjuk diterangkan dengan cara yang sama dan mereka tidak akan diulangi.

talib.CDL3BLACKCROWS

Peraturantalib.CDL3BLACKCROWS()fungsi digunakan untuk mengiraTiga gagak hitam (grafik K-line - Tiga gagak hitam).

Nilai pulangantalib.CDL3BLACKCROWS()Fungsi adalah: array satu dimensi. Array

talib.CDL3BLACKCROWS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDL3BLACKCROWS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDL3BLACKCROWS(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDL3BLACKCROWS(records);
    Log(ret);
}

PeraturanCDL3BLACKCROWS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDL3BLACKCROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3INSIDE

Peraturantalib.CDL3INSIDE()fungsi digunakan untuk mengiraTiga dalam atas/bawah (grafik garis K: Tiga dalam atas/bawah).

Nilai pulangantalib.CDL3INSIDE()Fungsi adalah: array satu dimensi. Array

Talib.CDL3INSIDE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDL3INSIDE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDL3INSIDE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDL3INSIDE(records);
    Log(ret);
}

PeraturanCDL3INSIDE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDL3INSIDE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3LINESTRIKE

Peraturantalib.CDL3LINESTRIKE()fungsi digunakan untuk mengiraPenarikan Tiga Baris (K-garis carta: Penarikan Tiga Baris).

Nilai pulangantalib.CDL3LINESTRIKE()Fungsi adalah: array satu dimensi. Array

talib.CDL3LINESTRIKE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDL3LINESTRIKE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDL3LINESTRIKE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDL3LINESTRIKE(records);
    Log(ret);
}

PeraturanCDL3LINESTRIKE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDL3LINESTRIKE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3OUTSIDE

Peraturantalib.CDL3OUTSIDE()fungsi digunakan untuk mengiraTiga di luar ke atas / ke bawah (grafik K-garis: Tiga di luar ke atas / ke bawah).

Nilai pulangantalib.CDL3OUTSIDE()Fungsi adalah: array satu dimensi. Array

Talib.CDL3OUTSIDE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDL3OUTSIDE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDL3OUTSIDE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDL3OUTSIDE(records);
    Log(ret);
}

PeraturanCDL3OUTSIDE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDL3OUTSIDE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3STARSINSOUTH

Peraturantalib.CDL3STARSINSOUTH()fungsi digunakan untuk mengiraThree Stars In The South (Gambar K-line: Tiga Bintang Di Selatan).

Nilai pulangantalib.CDL3STARSINSOUTH()Fungsi adalah: array satu dimensi. Array

Talib.CDL3STARSINSOUTH ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDL3STARSINSOUTH(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDL3STARSINSOUTH(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDL3STARSINSOUTH(records);
    Log(ret);
}

PeraturanCDL3STARSINSOUTH()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDL3STARSINSOUTH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3WHITESOLDIERS

Peraturantalib.CDL3WHITESOLDIERS()fungsi digunakan untuk mengiraTiga Tentera Putih yang Berkemajuan (Gambar garis K: Tiga Tentera Putih yang Berkemajuan).

Nilai pulangantalib.CDL3WHITESOLDIERS()Fungsi adalah: array satu dimensi. Array

talib.CDL3WHITESOLDIERS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDL3WHITESOLDIERS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDL3WHITESOLDIERS(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDL3WHITESOLDIERS(records);
    Log(ret);
}

PeraturanCDL3WHITESOLDIERS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDL3WHITESOLDIERS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLABANDONEDBABY

Peraturantalib.CDLABANDONEDBABY()fungsi digunakan untuk mengiraBayi yang ditinggalkan (grafik K-line: Bayi yang ditinggalkan).

Nilai pulangantalib.CDLABANDONEDBABY()Fungsi adalah: array satu dimensi. Array

talib.CDLABANDONEDBABY ((inPriceOHLC) talib.CDLABANDONEDBABY ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk menetapkan Penetrasi, nilai lalai adalah 0.3. optInPenetration palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLABANDONEDBABY(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLABANDONEDBABY(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLABANDONEDBABY(records);
    Log(ret);
}

PeraturanCDLABANDONEDBABY()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLABANDONEDBABY(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLADVANCEBLOCK

Peraturantalib.CDLADVANCEBLOCK()fungsi digunakan untuk mengiraBlok Advance (Gambar K-garis: Advance).

Nilai pulangantalib.CDLADVANCEBLOCK()Fungsi adalah array satu dimensi. Array

talib.CDLADVANCEBLOCK ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLADVANCEBLOCK(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLADVANCEBLOCK(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLADVANCEBLOCK(records);
    Log(ret);
}

PeraturanCDLADVANCEBLOCK()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLADVANCEBLOCK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLBELTHOLD

Peraturantalib.CDLBELTHOLD()fungsi digunakan untuk mengiraPegang tali pinggang (grafik garis K: Pegang tali pinggang).

Nilai pulangantalib.CDLBELTHOLD()Fungsi adalah: array satu dimensi. Array

talib.CDLBELTHOLD ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLBELTHOLD(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLBELTHOLD(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLBELTHOLD(records);
    Log(ret);
}

PeraturanCDLBELTHOLD()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLBELTHOLD(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLBREAKAWAY

Peraturantalib.CDLBREAKAWAY()fungsi digunakan untuk mengiraBreakaway (grafik garis K: Breakaway).

Nilai pulangantalib.CDLBREAKAWAY()Fungsi adalah: array satu dimensi. Array

talib.CDLBREAKAWAY ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLBREAKAWAY(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLBREAKAWAY(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLBREAKAWAY(records);
    Log(ret);
}

CDLBREAKAWAY()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLBREAKAWAY(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCLOSINGMARUBOZU

Peraturantalib.CDLCLOSINGMARUBOZU()fungsi digunakan untuk mengiraMenutup Marubozu (grafik K-line: menutup tanpa kepala dan tanpa kaki).

Nilai pulangantalib.CDLCLOSINGMARUBOZU()Fungsi adalah: array satu dimensi. Array

talib.CDLCLOSINGMARUBOZU ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLCLOSINGMARUBOZU(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLCLOSINGMARUBOZU(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLCLOSINGMARUBOZU(records);
    Log(ret);
}

PeraturanCDLCLOSINGMARUBOZU()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLCLOSINGMARUBOZU(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCONCEALBABYSWALL

Peraturantalib.CDLCONCEALBABYSWALL()fungsi digunakan untuk mengiraMenyimpan Baby Swallow (K-line chart: Menyimpan Baby Swallow corak).

Nilai pulangantalib.CDLCONCEALBABYSWALL()Fungsi adalah: array satu dimensi. Array

Talib.CDLCONCEALBABYSWALL (dalam harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLCONCEALBABYSWALL(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLCONCEALBABYSWALL(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLCONCEALBABYSWALL(records);
    Log(ret);
}

PeraturanCDLCONCEALBABYSWALL()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLCONCEALBABYSWALL(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCOUNTERATTACK

Peraturantalib.CDLCOUNTERATTACK()fungsi digunakan untuk mengiraserangan balas (K-line chart: Counterattack).

Nilai pulangantalib.CDLCOUNTERATTACK()Fungsi adalah array satu dimensi. Array

talib.CDLCONTERATTACK ((dalamPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLCOUNTERATTACK(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLCOUNTERATTACK(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLCOUNTERATTACK(records);
    Log(ret);
}

PeraturanCDLCOUNTERATTACK()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLCOUNTERATTACK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDARKCLOUDCOVER

Peraturantalib.CDLDARKCLOUDCOVER()fungsi digunakan untuk mengiraPenutup Awan Gelap (grafik garis K: penutup awan gelap).

Nilai pulangantalib.CDLDARKCLOUDCOVER()Fungsi adalah array satu dimensi. Array

talib.CDLDARKCLOUDCOVER ((inPriceOHLC) talib.CDLDARKCLOUDCOVER ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk menetapkan Penetrasi, nilai lalai adalah 0.5. optInPenetration palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLDARKCLOUDCOVER(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLDARKCLOUDCOVER(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLDARKCLOUDCOVER(records);
    Log(ret);
}

PeraturanCDLDARKCLOUDCOVER()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLDARKCLOUDCOVER(Records[Open,High,Low,Close],Penetration = 0.5) = Array(outInteger)

talib.CDLDOJI

Peraturantalib.CDLDOJI()fungsi digunakan untuk mengiraDoji (K-line chart: Doji).

Nilai pulangantalib.CDLDOJI()Fungsi adalah: array satu dimensi. Array

Talib.CDLDOJI ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLDOJI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLDOJI(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLDOJI(records);
    Log(ret);
}

PeraturanCDLDOJI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDOJISTAR

Peraturantalib.CDLDOJISTAR()fungsi digunakan untuk mengiraBintang Doji (K-line chart: Bintang Doji).

Nilai pulangantalib.CDLDOJISTAR()Fungsi adalah: array satu dimensi. Array

Talib.CDLDOJISTAR ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLDOJISTAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLDOJISTAR(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLDOJISTAR(records);
    Log(ret);
}

PeraturanCDLDOJISTAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLDOJISTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDRAGONFLYDOJI

Peraturantalib.CDLDRAGONFLYDOJI()fungsi digunakan untuk mengiraDragonfly Doji (K-line chart: Dragonfly Doji).

Nilai pulangantalib.CDLDRAGONFLYDOJI()Fungsi adalah: array satu dimensi. Array

Talib.CDLDRAGONFLYDOJI (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLDRAGONFLYDOJI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLDRAGONFLYDOJI(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLDRAGONFLYDOJI(records);
    Log(ret);
}

PeraturanCDLDRAGONFLYDOJI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLDRAGONFLYDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLENGULFING

Peraturantalib.CDLENGULFING()fungsi digunakan untuk mengiraPola menelan (grafik garis K: menelan).

Nilai pulangantalib.CDLENGULFING()Fungsi adalah array satu dimensi. Array

Talib.CDLENGULFING ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLENGULFING(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLENGULFING(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLENGULFING(records);
    Log(ret);
}

PeraturanCDLENGULFING()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLENGULFING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLEVENINGDOJISTAR

Peraturantalib.CDLEVENINGDOJISTAR()fungsi digunakan untuk mengiraBintang Doji Malam (K-line chart: Bintang Doji Malam).

Nilai pulangantalib.CDLEVENINGDOJISTAR()Fungsi adalah: array satu dimensi. Array

Talib.CDLEVENINGDOJISTAR (dalam Harga OHLC) talib.CDLEVENINGDOJISTAR ((dalamPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk menetapkan Penetrasi, nilai lalai adalah 0.3. optInPenetration palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLEVENINGDOJISTAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLEVENINGDOJISTAR(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLEVENINGDOJISTAR(records);
    Log(ret);
}

PeraturanCDLEVENINGDOJISTAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLEVENINGDOJISTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLEVENINGSTAR

Peraturantalib.CDLEVENINGSTAR()fungsi digunakan untuk mengiraBintang Malam (K-line chart: Bintang Malam).

Nilai pulangantalib.CDLEVENINGSTAR()Fungsi adalah: array satu dimensi. Array

Talib.CDLEVENINGSTAR ((inPriceOHLC) Talib.CDLEVENINGSTAR ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk menetapkan Penetrasi, nilai lalai adalah 0.3. optInPenetration palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLEVENINGSTAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLEVENINGSTAR(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLEVENINGSTAR(records);
    Log(ret);
}

PeraturanCDLEVENINGSTAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLEVENINGSTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLGAPSIDESIDEWHITE

Peraturantalib.CDLGAPSIDESIDEWHITE()fungsi digunakan untuk mengiraGaris putih berdekatan jurang atas/bawah (grafik garisan K: garisan putih berdekatan jurang atas/bawah).

Nilai pulangantalib.CDLGAPSIDESIDEWHITE()Fungsi adalah: array satu dimensi. Array

Talib.CDLGAPSIDESIDEWHITE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLGAPSIDESIDEWHITE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLGAPSIDESIDEWHITE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLGAPSIDESIDEWHITE(records);
    Log(ret);
}

PeraturanCDLGAPSIDESIDEWHITE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLGAPSIDESIDEWHITE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLGRAVESTONEDOJI

Peraturantalib.CDLGRAVESTONEDOJI()fungsi digunakan untuk mengiraGravestone Doji (Gambar K-line: Gravestone Doji).

Nilai pulangantalib.CDLGRAVESTONEDOJI()Fungsi adalah: array satu dimensi. Array

Talib.CDLGRAVESTONEDOJI (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLGRAVESTONEDOJI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLGRAVESTONEDOJI(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLGRAVESTONEDOJI(records);
    Log(ret);
}

PeraturanCDLGRAVESTONEDOJI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLGRAVESTONEDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHAMMER

Peraturantalib.CDLHAMMER()fungsi digunakan untuk mengiraHammer (K-garis carta: Hammer).

Nilai pulangantalib.CDLHAMMER()Fungsi adalah: array satu dimensi. Array

talib.CDLHAMMER ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLHAMMER(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLHAMMER(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLHAMMER(records);
    Log(ret);
}

PeraturanCDLHAMMER()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLHAMMER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHANGINGMAN

Peraturantalib.CDLHANGINGMAN()fungsi digunakan untuk mengiraHanging Man (K-line chart: Hanging Man).

Nilai pulangantalib.CDLHANGINGMAN()Fungsi adalah array satu dimensi. Array

Talib.CDLHANGINGMAN ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLHANGINGMAN(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLHANGINGMAN(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLHANGINGMAN(records);
    Log(ret);
}

PeraturanCDLHANGINGMAN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLHANGINGMAN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHARAMI

Peraturantalib.CDLHARAMI()fungsi digunakan untuk mengiracorak Harami (grafik garis K: garis negatif dan positif).

Nilai pulangantalib.CDLHARAMI()Fungsi adalah array satu dimensi. Array

talib.CDLHARAMI ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLHARAMI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLHARAMI(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLHARAMI(records);
    Log(ret);
}

PeraturanCDLHARAMI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLHARAMI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHARAMICROSS

Peraturantalib.CDLHARAMICROSS()fungsi digunakan untuk mengiraHarami Cross Pattern (K-line chart: melintasi garis negatif dan positif).

Nilai pulangantalib.CDLHARAMICROSS()Fungsi adalah: array satu dimensi. Array

Talib.CDLHARAMICROSS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLHARAMICROSS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLHARAMICROSS(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLHARAMICROSS(records);
    Log(ret);
}

PeraturanCDLHARAMICROSS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLHARAMICROSS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIGHWAVE

Peraturantalib.CDLHIGHWAVE()fungsi digunakan untuk mengiraLilin Gelombang Tinggi (K-line chart: Long Leg Cross).

Nilai pulangantalib.CDLHIGHWAVE()Fungsi adalah array satu dimensi. Array

talib.CDLHIGHWAVE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLHIGHWAVE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLHIGHWAVE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLHIGHWAVE(records);
    Log(ret);
}

PeraturanCDLHIGHWAVE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLHIGHWAVE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIKKAKE

Peraturantalib.CDLHIKKAKE()fungsi digunakan untuk mengiracorak Hikkake (K-garis carta: perangkap).

Nilai pulangantalib.CDLHIKKAKE()Fungsi adalah array satu dimensi. Array

talib.CDLHIKKAKE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLHIKKAKE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLHIKKAKE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLHIKKAKE(records);
    Log(ret);
}

PeraturanCDLHIKKAKE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLHIKKAKE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIKKAKEMOD

Peraturantalib.CDLHIKKAKEMOD()fungsi digunakan untuk mengiracorak Hikkake yang diubahsuai (grafik K-line: perangkap yang diubahsuai).

Nilai pulangantalib.CDLHIKKAKEMOD()Fungsi adalah: array satu dimensi. Array

Talib.CDLHIKKAKEMOD ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLHIKKAKEMOD(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLHIKKAKEMOD(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLHIKKAKEMOD(records);
    Log(ret);
}

PeraturanCDLHIKKAKEMOD()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLHIKKAKEMOD(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHOMINGPIGEON

Peraturantalib.CDLHOMINGPIGEON()fungsi digunakan untuk mengiraMerpati Homing (K-line chart: Merpati).

Nilai pulangantalib.CDLHOMINGPIGEON()Fungsi adalah: array satu dimensi. Array

talib.CDLHOMINGPIGEON ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLHOMINGPIGEON(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLHOMINGPIGEON(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLHOMINGPIGEON(records);
    Log(ret);
}

PeraturanCDLHOMINGPIGEON()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLHOMINGPIGEON(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLIDENTICAL3CROWS

Peraturantalib.CDLIDENTICAL3CROWS()fungsi digunakan untuk mengiraTiga gagak yang sama..

Nilai pulangantalib.CDLIDENTICAL3CROWS()Fungsi adalah: array satu dimensi. Array

Talib.CDLIDENTICAL3CROWS (dalam harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLIDENTICAL3CROWS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLIDENTICAL3CROWS(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLIDENTICAL3CROWS(records);
    Log(ret);
}

PeraturanCDLIDENTICAL3CROWS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLIDENTICAL3CROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLINNECK

Peraturantalib.CDLINNECK()fungsi digunakan untuk mengiraCorak di leher (K-garis carta: neckline).

Nilai pulangantalib.CDLINNECK()Fungsi adalah: array satu dimensi. Array

Talib.CDLINNECK ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLINNECK(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLINNECK(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLINNECK(records);
    Log(ret);
}

PeraturanCDLINNECK()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLINNECK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLINVERTEDHAMMER

Peraturantalib.CDLINVERTEDHAMMER()fungsi digunakan untuk mengiraHammer terbalik (grafik garis K: Hammer terbalik).

Nilai pulangantalib.CDLINVERTEDHAMMER()Fungsi adalah: array satu dimensi. Array

talib.CDLINVERTEDHAMMER ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLINVERTEDHAMMER(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLINVERTEDHAMMER(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLINVERTEDHAMMER(records);
    Log(ret);
}

PeraturanCDLINVERTEDHAMMER()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLINVERTEDHAMMER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLKICKING

Peraturantalib.CDLKICKING()fungsi digunakan untuk mengiraMenendang (K-garis carta: menendang).

Nilai pulangantalib.CDLKICKING()Fungsi adalah array satu dimensi. Array

Talib.CDLKICKING ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLKICKING(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLKICKING(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLKICKING(records);
    Log(ret);
}

PeraturanCDLKICKING()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLKICKING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLKICKINGBYLENGTH

Peraturantalib.CDLKICKINGBYLENGTH()fungsi digunakan untuk mengiratendangan - banteng/beruang yang ditentukan oleh Marubozu yang lebih panjang (grafik K-line: tendangan banteng/beruang tendangan).

Nilai pulangantalib.CDLKICKINGBYLENGTH()Fungsi adalah: array satu dimensi. Array

Talib.CDLKICKINGBYLENGTH ((dalam HargaOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLKICKINGBYLENGTH(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLKICKINGBYLENGTH(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLKICKINGBYLENGTH(records);
    Log(ret);
}

PeraturanCDLKICKINGBYLENGTH()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLKICKINGBYLENGTH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLADDERBOTTOM

Peraturantalib.CDLLADDERBOTTOM()fungsi digunakan untuk mengiraBahagian bawah tangga (grafik garis K: Bahagian bawah tangga).

Nilai pulangantalib.CDLLADDERBOTTOM()Fungsi adalah: array satu dimensi. Array

Talib.CDLLADDERBOTTOM ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLLADDERBOTTOM(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLLADDERBOTTOM(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLLADDERBOTTOM(records);
    Log(ret);
}

PeraturanCDLLADDERBOTTOM()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLLADDERBOTTOM(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLONGLEGGEDDOJI

Peraturantalib.CDLLONGLEGGEDDOJI()fungsi digunakan untuk mengiraDoji Berkaki Panjang (K-line chart: Long Legged Doji).

Nilai pulangantalib.CDLLONGLEGGEDDOJI()Fungsi adalah: array satu dimensi. Array

Talib.CDLLONGLEGGEDDOJI (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLLONGLEGGEDDOJI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLLONGLEGGEDDOJI(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLLONGLEGGEDDOJI(records);
    Log(ret);
}

PeraturanCDLLONGLEGGEDDOJI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLLONGLEGGEDDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLONGLINE

Peraturantalib.CDLLONGLINE()fungsi digunakan untuk mengiraLilin panjang lilin (K-garis carta: Long Line).

Nilai pulangantalib.CDLLONGLINE()Fungsi adalah: array satu dimensi. Array

Talib.CDLLONGLINE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLLONGLINE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLLONGLINE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLLONGLINE(records);
    Log(ret);
}

PeraturanCDLLONGLINE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLLONGLINE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMARUBOZU

Peraturantalib.CDLMARUBOZU()fungsi digunakan untuk mengiraMarubozu (grafik K-line: kepala dan kaki telanjang).

Nilai pulangantalib.CDLMARUBOZU()Fungsi adalah array satu dimensi. Array

talib.CDLMARUBOZU ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLMARUBOZU(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLMARUBOZU(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLMARUBOZU(records);
    Log(ret);
}

PeraturanCDLMARUBOZU()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLMARUBOZU(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMATCHINGLOW

Peraturantalib.CDLMATCHINGLOW()fungsi digunakan untuk mengiraMencocokkan Rendah (Gambar K-garis: Mencocokkan Rendah).

Nilai pulangantalib.CDLMATCHINGLOW()Fungsi adalah: array satu dimensi. Array

talib.CDLMATCHINGLOW ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLMATCHINGLOW(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLMATCHINGLOW(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLMATCHINGLOW(records);
    Log(ret);
}

PeraturanCDLMATCHINGLOW()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLMATCHINGLOW(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMATHOLD

Peraturantalib.CDLMATHOLD()fungsi digunakan untuk mengiraMat Hold (grafik K-line: Mat Hold).

Nilai pulangantalib.CDLMATHOLD()Fungsi adalah: array satu dimensi. Array

talib.CDLMATHOLD ((inPriceOHLC) talib.CDLMATHOLD ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter adalah pilihan dan digunakan untuk menentukan peratusan lebar garis trend menaik/menurun, nilai lalai adalah 0.5. optInPenetration palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLMATHOLD(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLMATHOLD(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLMATHOLD(records);
    Log(ret);
}

PeraturanCDLMATHOLD()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLMATHOLD(Records[Open,High,Low,Close],Penetration = 0.5) = Array(outInteger)

talib.CDLMORNINGDOJISTAR

Peraturantalib.CDLMORNINGDOJISTAR()fungsi digunakan untuk mengiraMorning Doji Star (Gambar garis K: Morning Doji Star).

Nilai pulangantalib.CDLMORNINGDOJISTAR()Fungsi adalah: array satu dimensi. Array

Talib.CDLMORNINGDOJISTAR ((dalam HargaOHLC) Talib.CDLMORNINGDOJISTAR ((dalamPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk menentukan tahap tumpang tindih antara harga pembukaan pengesahan dan bahagian pepejal, nilai lalai adalah 0.3. optInPenetration palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLMORNINGDOJISTAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLMORNINGDOJISTAR(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLMORNINGDOJISTAR(records);
    Log(ret);
}

PeraturanCDLMORNINGDOJISTAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLMORNINGDOJISTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLMORNINGSTAR

Peraturantalib.CDLMORNINGSTAR()fungsi digunakan untuk mengiraMorning Star (K-line chart: Morning Star).

Nilai pulangantalib.CDLMORNINGSTAR()Fungsi adalah: array satu dimensi. Array

talib.CDLMORNINGSTAR ((inPriceOHLC) talib.CDLMORNINGSTAR ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter adalah ambang peratusan pergerakan harga yang diperlukan untuk pengesahan trend dan mengambil nilai dalam julat [0,1], dengan nilai lalai 0.3. optInPenetration palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLMORNINGSTAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLMORNINGSTAR(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLMORNINGSTAR(records);
    Log(ret);
}

PeraturanCDLMORNINGSTAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLMORNINGSTAR(Records[Open,High,Low,Close],Penetration=0.3) = Array(outInteger)

talib.CDLONNECK

Peraturantalib.CDLONNECK()fungsi digunakan untuk mengiraCorak di leher (grafik K-line: Corak di leher).

Nilai pulangantalib.CDLONNECK()Fungsi adalah array satu dimensi. Array

Talib.CDLONNECK ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLONNECK(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLONNECK(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLONNECK(records);
    Log(ret);
}

PeraturanCDLONNECK()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLONNECK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLPIERCING

Peraturantalib.CDLPIERCING()fungsi digunakan untuk mengiraPattern Penembusan (K-line chart: Pattern Penembusan).

Nilai pulangantalib.CDLPIERCING()Fungsi adalah array satu dimensi. Array

Talib.CDLPIERCING ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLPIERCING(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLPIERCING(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLPIERCING(records);
    Log(ret);
}

PeraturanCDLPIERCING()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLPIERCING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLRICKSHAWMAN

Peraturantalib.CDLRICKSHAWMAN()fungsi digunakan untuk mengiraRickshaw Man (K-line chart: Rickshaw Man).

Nilai pulangantalib.CDLRICKSHAWMAN()Fungsi adalah: array satu dimensi. Array

Talib.CDLRICKSHAWMAN ((inPriceOHLC)

PeraturaninPriceOHLCParameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLRICKSHAWMAN(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLRICKSHAWMAN(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLRICKSHAWMAN(records);
    Log(ret);
}

PeraturanCDLRICKSHAWMAN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLRICKSHAWMAN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLRISEFALL3METHODS

Peraturantalib.CDLRISEFALL3METHODS()fungsi digunakan untuk mengiraKetiga Kaedah Naik/Jatuh (K-line chart: Tiga Kaedah Naik/Jatuh).

Nilai pulangantalib.CDLRISEFALL3METHODS()Fungsi adalah: array satu dimensi. Array

talib.CDLRISEFALL3METHODS ((dalam harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLRISEFALL3METHODS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLRISEFALL3METHODS(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLRISEFALL3METHODS(records);
    Log(ret);
}

PeraturanCDLRISEFALL3METHODS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLRISEFALL3METHODS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSEPARATINGLINES

Peraturantalib.CDLSEPARATINGLINES()fungsi digunakan untuk mengiraGaris pemisah (grafik K-garis: Garis pemisah).

Nilai pulangantalib.CDLSEPARATINGLINES()Fungsi adalah array satu dimensi. Array

Talib.CDL SEPARATINGLINES (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLSEPARATINGLINES(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLSEPARATINGLINES(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLSEPARATINGLINES(records);
    Log(ret);
}

PeraturanCDLSEPARATINGLINES()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLSEPARATINGLINES(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSHOOTINGSTAR

Peraturantalib.CDLSHOOTINGSTAR()fungsi digunakan untuk mengiraBintang Menembak (K-line chart: Bintang Menembak).

Nilai pulangantalib.CDLSHOOTINGSTAR()Fungsi adalah array satu dimensi. Array

Talib.CDLSHOOTINGSTAR ((dalam HargaOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLSHOOTINGSTAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLSHOOTINGSTAR(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLSHOOTINGSTAR(records);
    Log(ret);
}

PeraturanCDLSHOOTINGSTAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLSHOOTINGSTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSHORTLINE

Peraturantalib.CDLSHORTLINE()fungsi digunakan untuk mengiraLilin Pendek Candle (K-garis carta: Garis Pendek).

Nilai pulangantalib.CDLSHORTLINE()Fungsi adalah: array satu dimensi. Array

talib.CDLSSORTLINE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLSHORTLINE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLSHORTLINE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLSHORTLINE(records);
    Log(ret);
}

PeraturanCDLSHORTLINE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLSHORTLINE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSPINNINGTOP

Peraturantalib.CDLSPINNINGTOP()fungsi digunakan untuk mengiraSpinning Top (Gambar K-garis: Spinning Top).

Nilai pulangantalib.CDLSPINNINGTOP()Fungsi adalah: array satu dimensi. Array

Talib.CDLSPINNINGTOP ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLSPINNINGTOP(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLSPINNINGTOP(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLSPINNINGTOP(records);
    Log(ret);
}

PeraturanCDLSPINNINGTOP()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLSPINNINGTOP(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSTALLEDPATTERN

Peraturantalib.CDLSTALLEDPATTERN()fungsi digunakan untuk mengiracorak yang terhenti (grafik K-line: corak yang terhenti).

Nilai pulangantalib.CDLSTALLEDPATTERN()Fungsi adalah: array satu dimensi. Array

talib.CDLSTALLEDPATTERN ((dalam harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLSTALLEDPATTERN(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLSTALLEDPATTERN(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLSTALLEDPATTERN(records);
    Log(ret);
}

PeraturanCDLSTALLEDPATTERN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLSTALLEDPATTERN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSTICKSANDWICH

Peraturantalib.CDLSTICKSANDWICH()fungsi digunakan untuk mengiraStick Sandwich (K-line chart: Stick Sandwich).

Nilai pulangantalib.CDLSTICKSANDWICH()Fungsi adalah array satu dimensi. Array

Talib.CDLSTICKSSANDWICH (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLSTICKSANDWICH(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLSTICKSANDWICH(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLSTICKSANDWICH(records);
    Log(ret);
}

PeraturanCDLSTICKSANDWICH()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLSTICKSANDWICH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTAKURI

Peraturantalib.CDLTAKURI()fungsi digunakan untuk mengiraTakuri (doji lalat naga dengan garis bayang-bayang bawah yang sangat panjang) (Gambar garis K: Takuri).

Nilai pulangantalib.CDLTAKURI()Fungsi adalah array satu dimensi. Array

talib.CDLTAKURI ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLTAKURI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLTAKURI(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLTAKURI(records);
    Log(ret);
}

PeraturanCDLTAKURI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLTAKURI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTASUKIGAP

Peraturantalib.CDLTASUKIGAP()fungsi digunakan untuk mengiraTasuki Gap (Gambar garisan K: Tasuki Gap).

Nilai pulangantalib.CDLTASUKIGAP()Fungsi adalah array satu dimensi. Array

talib.CDLTASUKIGAP ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLTASUKIGAP(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLTASUKIGAP(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLTASUKIGAP(records);
    Log(ret);
}

PeraturanCDLTASUKIGAP()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLTASUKIGAP(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTHRUSTING

Peraturantalib.CDLTHRUSTING()fungsi digunakan untuk mengiraPola Mendorong (K-garis carta: Pola Mendorong).

Nilai pulangantalib.CDLTHRUSTING()Fungsi adalah: array satu dimensi. Array

Talib.CDLTHRUSTING ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLTHRUSTING(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLTHRUSTING(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLTHRUSTING(records);
    Log(ret);
}

PeraturanCDLTHRUSTING()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLTHRUSTING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTRISTAR

Peraturantalib.CDLTRISTAR()fungsi digunakan untuk mengiraCorak Tristar (K-line chart: Corak Tristar).

Nilai pulangantalib.CDLTRISTAR()Fungsi adalah: array satu dimensi. Array

Talib.CDLTRISTAR ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLTRISTAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLTRISTAR(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLTRISTAR(records);
    Log(ret);
}

PeraturanCDLTRISTAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLTRISTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLUNIQUE3RIVER

Peraturantalib.CDLUNIQUE3RIVER()fungsi digunakan untuk mengiraSungai Unique 3 (Gambar K-line: Sungai Unique 3).

Nilai pulangantalib.CDLUNIQUE3RIVER()Fungsi adalah: array satu dimensi. Array

Talib.CDLUNIQUE3RIVER ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLUNIQUE3RIVER(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLUNIQUE3RIVER(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLUNIQUE3RIVER(records);
    Log(ret);
}

PeraturanCDLUNIQUE3RIVER()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLUNIQUE3RIVER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLUPSIDEGAP2CROWS

Peraturantalib.CDLUPSIDEGAP2CROWS()fungsi digunakan untuk mengiraUpside Gap Two Crows (Gambar garisan K: Upside Gap Two Crows).

Nilai pulangantalib.CDLUPSIDEGAP2CROWS()Fungsi adalah: array satu dimensi. Array

talib.CDLUPSIDEGAP2CROWS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLUPSIDEGAP2CROWS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLUPSIDEGAP2CROWS(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLUPSIDEGAP2CROWS(records);
    Log(ret);
}

PeraturanCDLUPSIDEGAP2CROWS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLUPSIDEGAP2CROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLXSIDEGAP3METHODS

Peraturantalib.CDLXSIDEGAP3METHODS()fungsi digunakan untuk mengiraKesenjangan Upside/Downside Tiga Kaedah (K-line chart: Kesenjangan Upside/Downside Tiga Kaedah).

Nilai pulangantalib.CDLXSIDEGAP3METHODS()Fungsi adalah: array satu dimensi. Array

Talib.CDLXSIDEGAP3METHODS ((dalam HargaOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CDLXSIDEGAP3METHODS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CDLXSIDEGAP3METHODS(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CDLXSIDEGAP3METHODS(records);
    Log(ret);
}

PeraturanCDLXSIDEGAP3METHODS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CDLXSIDEGAP3METHODS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.AD

Peraturantalib.AD()fungsi digunakan untuk mengiraChaikin A/D Line (penunjuk stokastik garis).

Nilai pulangantalib.AD()Fungsi adalah: array satu dimensi. Array

talib.AD(dalam HargaHLCV)

PeraturaninPriceHLCVparameter digunakan untuk menentukan data garis K. inPriceHLCV betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.AD(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.AD(records.High, records.Low, records.Close, records.Volume)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.AD(records);
    Log(ret);
}

PeraturanAD()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:AD(Records[High,Low,Close,Volume]) = Array(outReal)

talib.ADOSC

Peraturantalib.ADOSC()fungsi digunakan untuk mengiraChaikin A/D Oscillator (Oscillator Chaikin).

Nilai pulangantalib.ADOSC()Fungsi adalah array satu dimensi. Array

talib.ADOSC ((inPriceHLCV) talib.ADOSC ((inPriceHLCV, optInFastPeriod, optInSlowPeriod)

PeraturaninPriceHLCVparameter digunakan untuk menentukan data garis K. inPriceHLCV betul Array struktur {@struct/Record Record} PeraturanoptInFastPeriodParameter digunakan untuk menetapkan tempoh cepat. optInFastPeriod palsu nombor PeraturanoptInSlowPeriodparameter digunakan untuk menetapkan tempoh perlahan. optInSlowPeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ADOSC(records, 3, 10)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ADOSC(records.High, records.Low, records.Close, records.Volume, 3, 10)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ADOSC(records, 3, 10);
    Log(ret);
}

PeraturanADOSC()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ADOSC(Records[High,Low,Close,Volume],Fast Period = 3,Slow Period = 10) = Array(outReal)

talib.OBV

Peraturantalib.OBV()fungsi digunakan untuk mengiraPada jumlah imbangan (gelombang tenaga).

Nilai pulangantalib.OBV()Fungsi adalah array satu dimensi. Array

talib.OBV ((inReal) talib.OBV ((inReal, inPriceV)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmataninPriceVparameter digunakan untuk menentukan data garis K. dalamPriceV palsu Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.OBV(records, records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.OBV(records.Close, records.Volume)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.OBV(records);
    Log(ret);
}

PeraturanOBV()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:OBV(Records[Close],Records[Volume]) = Array(outReal)

talib.ACOS

Peraturantalib.ACOS()fungsi digunakan untuk mengiraVektor Trigonometri ACos (fungsi kosinus terbalik).

Nilai pulangantalib.ACOS()Fungsi adalah array satu dimensi. Array

talib.ACOS ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-1, 0, 1]
    var ret = talib.ACOS(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-1.0, 0, 1.0]
    ret = talib.ACOS(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-1, 0, 1};
    auto ret = talib.ACOS(data);
    Log(ret);
}

PeraturanACOS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ACOS(Records[Close]) = Array(outReal)

talib.ASIN

Peraturantalib.ASIN()fungsi digunakan untuk mengiraVektor Trigonometrik ASin (fungsi sinus terbalik).

Nilai pulangantalib.ASIN()Fungsi adalah array satu dimensi. Array

talib.ASIN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-1, 0, 1]
    var ret = talib.ASIN(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-1.0, 0, 1.0]
    ret = talib.ASIN(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-1, 0, 1};
    auto ret = talib.ASIN(data);
    Log(ret);
}

PeraturanASIN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ASIN(Records[Close]) = Array(outReal)

talib.ATAN

Peraturantalib.ATAN()fungsi digunakan untuk mengiraVektor Trigonometri ATan (fungsi tangen terbalik).

Nilai pulangantalib.ATAN()Fungsi adalah: array satu dimensi. Array

talib.ATAN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-3.14/2, 0, 3.14/2]
    var ret = talib.ATAN(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-3.14/2, 0, 3.14/2]
    ret = talib.ATAN(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-3.14/2, 0, 3.14/2};
    auto ret = talib.ATAN(data);
    Log(ret);
}

PeraturanATAN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ATAN(Records[Close]) = Array(outReal)

talib.CEIL

Peraturantalib.CEIL()fungsi digunakan untuk mengiraSekatan Vektor (fungsi membulat).

Nilai pulangantalib.CEIL()Fungsi adalah array satu dimensi. Array

Talib.CEIL ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CEIL(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CEIL(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CEIL(records);
    Log(ret);
}

PeraturanCEIL()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CEIL(Records[Close]) = Array(outReal)

talib.COS

Peraturantalib.COS()fungsi digunakan untuk mengiraKos trigonometri vektor (fungsi kosinus).

Nilai pulangantalib.COS()Fungsi adalah: array satu dimensi. Array

talib.COS ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-3.14, 0, 3.14]
    var ret = talib.COS(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-3.14, 0, 3.14]
    ret = talib.COS(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-3.14, 0, 3.14};
    auto ret = talib.COS(data);
    Log(ret);
}

PeraturanCOS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:COS(Records[Close]) = Array(outReal)

talib.COSH

Peraturantalib.COSH()fungsi digunakan untuk mengiraVektor Trigonometri Cosh (nilai kosinus hiperbolik).

Nilai pulangantalib.COSH()Fungsi adalah array satu dimensi. Array

talib.COSH ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-1, 0, 1]
    var ret = talib.COSH(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-1.0, 0, 1.0]
    ret = talib.COSH(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-1, 0, 1};
    auto ret = talib.COSH(data);
    Log(ret);
}

PeraturanCOSH()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:COSH(Records[Close]) = Array(outReal)

talib.EXP

Peraturantalib.EXP()fungsi digunakan untuk mengiraVektor Aritmatika Exp (fungsi eksponensial).

Nilai pulangantalib.EXP()Fungsi adalah: array satu dimensi. Array

talib.EXP ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [0, 1, 2]
    var ret = talib.EXP(data)    // e^0, e^1, e^2
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [0, 1.0, 2.0]
    ret = talib.EXP(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {0, 1.0, 2.0};
    auto ret = talib.EXP(data);
    Log(ret);
}

PeraturanEXP()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:EXP(Records[Close]) = Array(outReal)

talib.FLOOR

Peraturantalib.FLOOR()fungsi digunakan untuk mengiraVektor Lantai (dibulatkan ke bawah).

Nilai pulangantalib.FLOOR()Fungsi adalah array satu dimensi. Array

talib.FLOOR ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.FLOOR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.FLOOR(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.FLOOR(records);
    Log(ret);
}

PeraturanFLOOR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:FLOOR(Records[Close]) = Array(outReal)

talib.LN

Peraturantalib.LN()fungsi digunakan untuk mengiraVektor Log Natural (logaritma semula jadi).

Nilai pulangantalib.LN()Fungsi adalah array satu dimensi. Array

talib.LN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [1, 2, 3]
    var ret = talib.LN(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [1.0, 2.0, 3.0]
    ret = talib.LN(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {1, 2, 3};
    auto ret = talib.LN(data);
    Log(ret);
}

PeraturanLN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:LN(Records[Close]) = Array(outReal)

talib.LOG10

Peraturantalib.LOG10()fungsi digunakan untuk mengiraVektor Log10 (fungsi logaritma).

Nilai pulangantalib.LOG10()Fungsi adalah array satu dimensi. Array

talib.LOG10 ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [10, 100, 1000]
    var ret = talib.LOG10(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [10.0, 100.0, 1000.0]
    ret = talib.LOG10(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {10, 100, 1000};
    auto ret = talib.LOG10(data);
    Log(ret);
}

PeraturanLOG10()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:LOG10(Records[Close]) = Array(outReal)

talib.SIN

Peraturantalib.SIN()fungsi digunakan untuk mengiraVektor Trigonometri Sin (nilai sinus).

Nilai pulangantalib.SIN()Fungsi adalah array satu dimensi. Array

talib.SIN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-3.14/2, 0, 3.14/2]
    var ret = talib.SIN(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-3.14/2, 0, 3.14/2]
    ret = talib.SIN(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-3.14/2, 0, 3.14/2};
    auto ret = talib.SIN(data);
    Log(ret);
}

PeraturanSIN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:SIN(Records[Close]) = Array(outReal)

talib.SINH

Peraturantalib.SINH()fungsi digunakan untuk mengiraVektor Trigonometrik Sinh (fungsi sinus hiperbolik).

Nilai pulangantalib.SINH()Fungsi adalah: array satu dimensi. Array

talib.SINH ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-1, 0, 1]
    var ret = talib.SINH(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-1.0, 0, 1.0]
    ret = talib.SINH(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-1, 0, 1};
    auto ret = talib.SINH(data);
    Log(ret);
}

PeraturanSINH()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:SINH(Records[Close]) = Array(outReal)

talib.SQRT

Peraturantalib.SQRT()fungsi digunakan untuk mengiraAkar Kuadrat vektor (akar kuadrat).

Nilai pulangantalib.SQRT()Fungsi adalah: array satu dimensi. Array

talib.SQRT ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [4, 64, 100]
    var ret = talib.SQRT(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [4.0, 64.0, 100.0]
    ret = talib.SQRT(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {4, 64, 100};
    auto ret = talib.SQRT(data);
    Log(ret);
}

PeraturanSQRT()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:SQRT(Records[Close]) = Array(outReal)

talib.TAN

Peraturantalib.TAN()fungsi digunakan untuk mengiraVektor Trigonometri Tan (tangen).

Nilai pulangantalib.TAN()Fungsi adalah array satu dimensi. Array

Talib.TAN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-1, 0, 1]
    var ret = talib.TAN(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-1.0, 0, 1.0]
    ret = talib.TAN(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-1, 0, 1};
    auto ret = talib.TAN(data);
    Log(ret);
}

PeraturanTAN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:TAN(Records[Close]) = Array(outReal)

talib.TANH

Peraturantalib.TANH()fungsi digunakan untuk mengiraVektor Trigonometri Tanh (fungsi tangen hiperbolik).

Nilai pulangantalib.TANH()Fungsi adalah: array satu dimensi. Array

talib.TANH ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var data = [-1, 0, 1]
    var ret = talib.TANH(data)
    Log(ret)
}
import talib
import numpy as np
def main():
    data = [-1.0, 0, 1.0]
    ret = talib.TANH(np.array(data))
    Log(ret)
void main() {
    std::vector<double> data = {-1, 0, 1};
    auto ret = talib.TANH(data);
    Log(ret);
}

PeraturanTANH()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:TANH(Records[Close]) = Array(outReal)

talib.MAX

Peraturantalib.MAX()fungsi digunakan untuk mengira nilai tertinggi (maksimum) untuktempoh tertentu.

Nilai pulangantalib.MAX()Fungsi adalah: array satu dimensi. Array

Talib.MAX ((inReal) talib.MAX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MAX(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MAX(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MAX(records);
    Log(ret);
}

PeraturanMAX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MAX(Records[Close],Time Period = 30) = Array(outReal)

talib.MAXINDEX

Peraturantalib.MAXINDEX()fungsi digunakan untuk mengiraIndeks nilai tertinggi dalam tempoh yang ditentukan (indeks maksimum).

Nilai pulangantalib.MAXINDEX()Fungsi adalah: array satu dimensi. Array

talib.MAXINDEX ((inReal) talib.MAXINDEX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MAXINDEX(records, 5)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MAXINDEX(records.Close, 5)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MAXINDEX(records, 5);
    Log(ret);
}

PeraturanMAXINDEX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MAXINDEX(Records[Close],Time Period = 30) = Array(outInteger)

talib.MIN

Peraturantalib.MIN()Fungsi digunakan untuk mengira nilai terendah (nilai minimum) ** untuk tempoh yang ditentukan.

Nilai pulangantalib.MIN()Fungsi adalah: array satu dimensi. Array

talib.MIN ((inReal) talib.MIN ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MIN(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MIN(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MIN(records);
    Log(ret);
}

PeraturanMIN()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MIN(Records[Close],Time Period = 30) = Array(outReal)

talib.MININDEX

Peraturantalib.MININDEX()fungsi digunakan untuk mengiraindeks nilai terendah (indeks nilai minimum)untuk tempoh yang ditentukan.

Nilai pulangantalib.MININDEX()Fungsi adalah: array satu dimensi. Array

talib.MININDEX ((inReal) talib.MININDEX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MININDEX(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MININDEX(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MININDEX(records);
    Log(ret);
}

PeraturanMININDEX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MININDEX(Records[Close],Time Period = 30) = Array(outInteger)

talib.MINMAX

Peraturantalib.MINMAX()fungsi digunakan untuk mengiraNilai terendah dan tertinggi (minimum dan maksimum) untuk tempoh yang ditentukan.

Nilai pulangantalib.MINMAX()fungsi adalah array dua dimensi. elemen pertama array dua dimensi ini adalah array nilai minimum, dan elemen kedua adalah array nilai maksimum. Array

talib.MINMAX ((inReal) talib.MINMAX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MINMAX(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MINMAX(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MINMAX(records);
    Log(ret);
}

PeraturanMINMAX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MINMAX(Records[Close],Time Period = 30) = [Array(outMin),Array(outMax)]

talib.MINMAXINDEX

Peraturantalib.MINMAXINDEX()fungsi digunakan untuk mengiraIndeks nilai terendah dan tertinggi (indeks minimum dan maksimum) dalam tempoh yang ditentukan.

Nilai pulangantalib.MINMAXINDEX()fungsi adalah: array dua dimensi. elemen pertama daripada array dua dimensi ini adalah minimum array yang diindeks, dan elemen kedua adalah maksimum array yang diindeks. Array

talib.MINMAXINDEX ((inReal) talib.MINMAXINDEX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MINMAXINDEX(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MINMAXINDEX(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MINMAXINDEX(records);
    Log(ret);
}

PeraturanMINMAXINDEX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MINMAXINDEX(Records[Close],Time Period = 30) = [Array(outMinIdx),Array(outMaxIdx)]

talib.SUM

Peraturantalib.SUM()fungsi digunakan untuk mengiraRingkasan.

Nilai pulangantalib.SUM()Fungsi adalah: array satu dimensi. Array

talib.SUM ((inReal) talib.SUM ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.SUM(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.SUM(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.SUM(records);
    Log(ret);
}

PeraturanSUM()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:SUM(Records[Close],Time Period = 30) = Array(outReal)

talib.HT_DCPERIOD

Peraturantalib.HT_DCPERIOD()fungsi digunakan untuk mengiraTransformasi Hilbert - tempoh kitaran dominan (Transformasi Hilbert, tempoh dominan).

Nilai pulangantalib.HT_DCPERIOD()Fungsi adalah: array satu dimensi. Array

talib.HT_DCPERIOD ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.HT_DCPERIOD(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.HT_DCPERIOD(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.HT_DCPERIOD(records);
    Log(ret);
}

PeraturanHT_DCPERIOD()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:HT_DCPERIOD(Records[Close]) = Array(outReal)

talib.HT_DCPHASE

Peraturantalib.HT_DCPHASE()fungsi digunakan untuk mengiraTransformasi Hilbert - fasa kitaran dominan (Transformasi Hilbert, fasa kitaran dominan).

Nilai pulangantalib.HT_DCPHASE()Fungsi adalah: array satu dimensi. Array

talib.HT_DCPHASE ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.HT_DCPHASE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.HT_DCPHASE(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.HT_DCPHASE(records);
    Log(ret);
}

PeraturanHT_DCPHASE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:HT_DCPHASE(Records[Close]) = Array(outReal)

talib.HT_PHASOR

Peraturantalib.HT_PHASOR()fungsi digunakan untuk mengiraTransformasi Hilbert - Komponen Phasor (Transformasi Hilbert, Komponen fasa).

Nilai pulangantalib.HT_PHASOR()Fungsi adalah array dua dimensi. Array

talib.HT_PHASOR ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.HT_PHASOR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.HT_PHASOR(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.HT_PHASOR(records);
    Log(ret);
}

PeraturanHT_PHASOR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:HT_PHASOR(Records[Close]) = [Array(outInPhase),Array(outQuadrature)]

talib.HT_SINE

Peraturantalib.HT_SINE()fungsi digunakan untuk mengiraTransformasi Hilbert - SinusWave (Transformasi Hilbert, Sinus Wave).

Nilai pulangantalib.HT_SINE()Fungsi adalah: array dua dimensi. Array

Talib.HT_SINE ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.HT_SINE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.HT_SINE(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.HT_SINE(records);
    Log(ret);
}

PeraturanHT_SINE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:HT_SINE(Records[Close]) = [Array(outSine),Array(outLeadSine)]

talib.HT_TRENDMODE

Peraturantalib.HT_TRENDMODE()fungsi digunakan untuk mengiraTransformasi Hilbert - Trend dan mod kitaran.

Nilai pulangantalib.HT_TRENDMODE()Fungsi adalah: array satu dimensi. Array

Talib.HT_TRENDMODE ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.HT_TRENDMODE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.HT_TRENDMODE(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.HT_TRENDMODE(records);
    Log(ret);
}

PeraturanHT_TRENDMODE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:HT_TRENDMODE(Records[Close]) = Array(outInteger)

talib.ATR

Peraturantalib.ATR()fungsi digunakan untuk mengiraJulat sebenar purata.

Nilai pulangantalib.ATR()Fungsi adalah array satu dimensi. Array

talib.ATR ((inPriceHLC) talib.ATR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ATR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ATR(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ATR(records);
    Log(ret);
}

PeraturanATR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ATR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.NATR

Peraturantalib.NATR()fungsi digunakan untuk mengiraJulat sebenar purata yang normal.

Nilai pulangantalib.NATR()Fungsi adalah array satu dimensi. Array

talib.NATR ((inPriceHLC) talib.NATR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.NATR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.NATR(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.NATR(records);
    Log(ret);
}

PeraturanNATR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:NATR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.TRANGE

Peraturantalib.TRANGE()fungsi digunakan untuk mengiraJulat sebenar.

Nilai pulangantalib.TRANGE()Fungsi adalah: array satu dimensi. Array

Talib.TRANGE ((inPriceHLC)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.TRANGE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.TRANGE(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.TRANGE(records);
    Log(ret);
}

PeraturanTRANGE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:TRANGE(Records[High,Low,Close]) = Array(outReal)

talib.BBANDS

Peraturantalib.BBANDS()fungsi digunakan untuk mengiraBollinger Bands.

Nilai pulangantalib.BBANDS()fungsi adalah: array dua dimensi. Array mengandungi tiga elemen iaitu: array baris atas, array baris tengah, dan array baris bawah. Array

talib.BBANDS ((inReal) talib.BBANDS ((inReal, optInTimePeriod) talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp) talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp, optInNbDevDn) talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp, optInNbDevDn, optInMAType)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 5. optInTimePeriod palsu nombor PeraturanoptInNbDevUpparameter digunakan untuk menetapkan pengganda garis atas, nilai lalai adalah 2. pilihanInNbDevUp palsu nombor PerkhidmatanoptInNbDevDnparameter digunakan untuk menetapkan pengganda baris bawah, nilai lalai adalah 2. pilihanInNbDevDn palsu nombor PerkhidmatanoptInMATypeparameter digunakan untuk menetapkan jenis purata, nilai lalai adalah 0. pilihanInMATyp palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.BBANDS(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.BBANDS(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.BBANDS(records);
    Log(ret);
}

PeraturanBBANDS()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:BBANDS(Records[Close],Time Period = 5,Deviations up = 2,Deviations down = 2,MA Type = 0) = [Array(outRealUpperBand),Array(outRealMiddleBand),Array(outRealLowerBand)]

talib.DEMA

Peraturantalib.DEMA()fungsi digunakan untuk mengiraPurata Bergerak Eksponensial Ganda.

Nilai pulangantalib.DEMA()Fungsi adalah array satu dimensi. Array

Talib.DEMA ((inReal) talib.DEMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.DEMA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.DEMA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.DEMA(records);
    Log(ret);
}

PeraturanDEMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:DEMA(Records[Close],Time Period = 30) = Array(outReal)

talib.EMA

Peraturantalib.EMA()fungsi digunakan untuk mengiraPurata Bergerak Eksponensial.

Nilai pulangantalib.EMA()Fungsi adalah array satu dimensi. Array

Talib.EMA ((inReal) talib.EMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.EMA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.EMA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.EMA(records);
    Log(ret);
}

PeraturanEMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:EMA(Records[Close],Time Period = 30) = Array(outReal)

talib.HT_TRENDLINE

Peraturantalib.HT_TRENDLINE()fungsi digunakan untuk mengiraTransformasi Hilbert - Barisan Trend Seketika (Transformasi Hilbert, Trend Seketika).

Nilai pulangantalib.HT_TRENDLINE()Fungsi adalah: array satu dimensi. Array

talib.HT_TRENDLINE ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.HT_TRENDLINE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.HT_TRENDLINE(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.HT_TRENDLINE(records);
    Log(ret);
}

PeraturanHT_TRENDLINE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:HT_TRENDLINE(Records[Close]) = Array(outReal)

talib.KAMA

Peraturantalib.KAMA()fungsi digunakan untuk mengiraKaufman Adaptive Moving Average.

Nilai pulangantalib.KAMA()Fungsi adalah: array satu dimensi. Array

Talib.KAMA ((inReal) talib.KAMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.KAMA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.KAMA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.KAMA(records);
    Log(ret);
}

PeraturanKAMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:KAMA(Records[Close],Time Period = 30) = Array(outReal)

talib.MA

Peraturantalib.MA()fungsi digunakan untuk mengiraPurata bergerak.

Nilai pulangantalib.MA()Fungsi adalah: array satu dimensi. Array

talib.MA(InReal)talib.MA(inReal, optInTimePeriod)talib.MA(inReal, optInTimePeriod, optInMAType)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor PeraturanoptInMATypeparameter digunakan untuk menetapkan jenis purata, nilai lalai adalah 0. pilihanInMATyp palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MA(records);
    Log(ret);
}

PeraturanMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MA(Records[Close],Time Period = 30,MA Type = 0) = Array(outReal)

talib.MAMA

Peraturantalib.MAMA()fungsi digunakan untuk mengiraMESA Purata Bergerak Sesuai.

Nilai pulangantalib.MAMA()Fungsi adalah: array dua dimensi. Array

Talib.MAMA ((inReal) talib.MAMA ((inReal, optInFastLimit) talib.MAMA ((inReal, optInFastLimit, optInSlowLimit)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInFastLimitparameter digunakan untuk menetapkan had pantas, nilai lalai adalah 0.5. pilihanInFastLimit palsu nombor PerkhidmatanoptInSlowLimitparameter digunakan untuk menetapkan had perlahan, nilai lalai adalah 0.05. optInSlowLimit palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MAMA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MAMA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MAMA(records);
    Log(ret);
}

PeraturanMAMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MAMA(Records[Close],Fast Limit = 0.5,Slow Limit = 0.05) = [Array(outMAMA),Array(outFAMA)]

talib.MIDPOINT

Peraturantalib.MIDPOINT()fungsi digunakan untuk mengiraTitik tengah tempoh (titik tengah).

Nilai pulangantalib.MIDPOINT()Fungsi adalah array satu dimensi. Array

Talib.MIDPOINT ((inReal) talib.MIDPOINT ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MIDPOINT(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MIDPOINT(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MIDPOINT(records);
    Log(ret);
}

PeraturanMIDPOINT()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MIDPOINT(Records[Close],Time Period = 14) = Array(outReal)

talib.MIDPRICE

Peraturantalib.MIDPRICE()fungsi digunakan untuk mengiraHarga titik tengah sepanjang tempoh (harga titik tengah).

Nilai pulangantalib.MIDPRICE()Fungsi adalah array satu dimensi. Array

talib.MIDPRICE ((inPriceHL) talib.MIDPRICE ((inPriceHL, optInTimePeriod)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MIDPRICE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MIDPRICE(records.High, records.Low)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MIDPRICE(records);
    Log(ret);
}

PeraturanMIDPRICE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MIDPRICE(Records[High,Low],Time Period = 14) = Array(outReal)

talib.SAR

Peraturantalib.SAR()fungsi digunakan untuk mengiraSAR Parabolik.

Nilai pulangantalib.SAR()Fungsi adalah: array satu dimensi. Array

talib.SAR ((inPriceHL) talib.SAR ((inPriceHL, optInAcceleration) talib.SAR ((inPriceHL, optInAcceleration, optInMaximum)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL betul Array struktur {@struct/Record Record} PeraturanoptInAccelerationparameter digunakan untuk menetapkan Faktor Pengecasan, nilai lalai adalah 0.02. PilihPengcepat palsu nombor PerkhidmatanoptInMaximumparameter digunakan untuk menetapkan maksimum AF, nilai lalai adalah 0.2. pilihanInMaximum palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.SAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.SAR(records.High, records.Low)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.SAR(records);
    Log(ret);
}

PeraturanSAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:SAR(Records[High,Low],Acceleration Factor = 0.02,AF Maximum = 0.2) = Array(outReal)

talib.SAREXT

Peraturantalib.SAREXT()fungsi digunakan untuk mengiraSAR parabolik - Ditingkatkan (penyelenggara parabolik yang dipertingkatkan).

Nilai pulangantalib.SAREXT()Fungsi adalah array satu dimensi. Array

talib.SAREXT ((inPriceHL) talib.SAREXT ((inPriceHL, optInStartValue) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong, optInAccelerationInitShort) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong, optInAccelerationInitShort, optInAccelerationShort) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong, optInAccelerationInitShort, optInAccelerationShort, optInAccelerationMaxShort)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL betul Array struktur {@struct/Record Record} PeraturanoptInStartValueparameter digunakan untuk menetapkan Nilai Mula, nilai lalai adalah 0. pilihanInStartValue palsu nombor PerkhidmatanoptInOffsetOnReverseParameter digunakan untuk menetapkan Offset pada Reverse, nilai lalai adalah 0. pilihanInOffsetOnReverse palsu nombor PerkhidmatanoptInAccelerationInitLongparameter digunakan untuk menetapkan AF Init Long, nilai lalai adalah 0.02. Pilih dalamPengcepat dalamItLong palsu nombor PerkhidmatanoptInAccelerationLongparameter digunakan untuk menetapkan AF panjang, nilai lalai adalah 0.02. pilihanInAccelerationLong palsu nombor PerkhidmatanoptInAccelerationMaxLongparameter digunakan untuk menetapkan AF Max Long, nilai lalai adalah 0.2. pilihanInAccelerationMaxLong palsu nombor PerkhidmatanoptInAccelerationInitShortparameter digunakan untuk menetapkan AF Init Short, nilai lalai adalah 0.02. Pilih dalamPengcepat dalamSingkat palsu nombor PerkhidmatanoptInAccelerationShortparameter digunakan untuk menetapkan AF Pendek, nilai lalai adalah 0.02. pilihanInAccelerationShort palsu nombor PerkhidmatanoptInAccelerationMaxShortparameter digunakan untuk menetapkan AF Max Short, nilai lalai adalah 0.2. optInAccelerationMaxShort palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.SAREXT(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.SAREXT(records.High, records.Low)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.SAREXT(records);
    Log(ret);
}

PeraturanSAREXT()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:SAREXT(Records[High,Low],Start Value = 0,Offset on Reverse = 0,AF Init Long = 0.02,AF Long = 0.02,AF Max Long = 0.2,AF Init Short = 0.02,AF Short = 0.02,AF Max Short = 0.2) = Array(outReal)

talib.SMA

Peraturantalib.SMA()fungsi digunakan untuk mengirapurata bergerak mudah.

Nilai pulangantalib.SMA()Fungsi adalah: array satu dimensi. Array

talib.SMA ((inReal) talib.SMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.SMA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.SMA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.SMA(records);
    Log(ret);
}

PeraturanSMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:SMA(Records[Close],Time Period = 30) = Array(outReal)

talib.T3

Peraturantalib.T3()fungsi digunakan untuk mengiraRata-rata Bergerak Eksponensial Tiga (T3) (rata-rata bergerak eksponensial tiga).

Nilai pulangantalib.T3()Fungsi adalah array satu dimensi. Array

Talib.T3 ((inReal) talib.T3 ((inReal, optInTimePeriod) talib.T3 ((inReal, optInTimePeriod, optInVFactor)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 5. optInTimePeriod palsu nombor PeraturanoptInVFactorparameter digunakan untuk menetapkan Volume Factor, nilai lalai adalah 0.7. pilihanInVFactor palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.T3(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.T3(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.T3(records);
    Log(ret);
}

PeraturanT3()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:T3(Records[Close],Time Period = 5,Volume Factor = 0.7) = Array(outReal)

talib.TEMA

Peraturantalib.TEMA()fungsi digunakan untuk mengiraPurata Bergerak Eksponensial Ganda.

Nilai pulangantalib.TEMA()Fungsi adalah array satu dimensi. Array

talib.TEMA ((inReal) talib.TEMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.TEMA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.TEMA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.TEMA(records);
    Log(ret);
}

PeraturanTEMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:TEMA(Records[Close],Time Period = 30) = Array(outReal)

talib.TRIMA

Peraturantalib.TRIMA()fungsi digunakan untuk mengiraPurata bergerak segitiga (purata bergerak tri-eksponensial).

Nilai pulangantalib.TRIMA()Fungsi adalah array satu dimensi. Array

Talib.TRIMA ((inReal) talib.TRIMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.TRIMA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.TRIMA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.TRIMA(records);
    Log(ret);
}

PeraturanTRIMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:TRIMA(Records[Close],Time Period = 30) = Array(outReal)

talib.WMA

Peraturantalib.WMA()fungsi digunakan untuk mengiraPurata Bergerak Bertimbang (WMA).

Nilai pulangantalib.WMA()Fungsi adalah array satu dimensi. Array

talib.WMA ((inReal) talib.WMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.WMA(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.WMA(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.WMA(records);
    Log(ret);
}

PeraturanWMA()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:WMA(Records[Close],Time Period = 30) = Array(outReal)

talib.LINEARREG

Peraturantalib.LINEARREG()fungsi digunakan untuk mengiraRegresi Linear.

Nilai pulangantalib.LINEARREG()Fungsi adalah array satu dimensi. Array

talib.LINEARREG ((inReal) talib.LINEARREG ((dalamReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.LINEARREG(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.LINEARREG(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.LINEARREG(records);
    Log(ret);
}

PeraturanLINEARREG()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:LINEARREG(Records[Close],Time Period = 14) = Array(outReal)

talib.LINEARREG_ANGLE

Peraturantalib.LINEARREG_ANGLE()fungsi digunakan untuk mengiraSudut Regresi Linear.

Nilai pulangantalib.LINEARREG_ANGLE()Fungsi adalah: array satu dimensi. Array

talib.LINEARREG_ANGLE ((inReal) talib.LINEARREG_ANGLE ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.LINEARREG_ANGLE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.LINEARREG_ANGLE(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.LINEARREG_ANGLE(records);
    Log(ret);
}

PeraturanLINEARREG_ANGLE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:LINEARREG_ANGLE(Records[Close],Time Period = 14) = Array(outReal)

talib.LINEARREG_INTERCEPT

Peraturantalib.LINEARREG_INTERCEPT()fungsi digunakan untuk mengiraPemangkasan Regresi Linear.

Nilai pulangantalib.LINEARREG_INTERCEPT()Fungsi adalah: array satu dimensi. Array

talib.LINEARREG_INTERCEPT ((inReal) talib.LINEARREG_INTERCEPT ((dalamReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.LINEARREG_INTERCEPT(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.LINEARREG_INTERCEPT(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.LINEARREG_INTERCEPT(records);
    Log(ret);
}

PeraturanLINEARREG_INTERCEPT()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:LINEARREG_INTERCEPT(Records[Close],Time Period = 14) = Array(outReal)

talib.LINEARREG_SLOPE

Peraturantalib.LINEARREG_SLOPE()fungsi digunakan untuk mengiraKemunduran Linier Slope.

Nilai pulangantalib.LINEARREG_SLOPE()Fungsi adalah: array satu dimensi. Array

talib.LINEARREG_SLOPE ((inReal) talib.LINEARREG_SLOPE ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.LINEARREG_SLOPE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.LINEARREG_SLOPE(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.LINEARREG_SLOPE(records);
    Log(ret);
}

PeraturanLINEARREG_SLOPE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:LINEARREG_SLOPE(Records[Close],Time Period = 14) = Array(outReal)

talib.STDDEV

Peraturantalib.STDDEV()fungsi digunakan untuk mengiraPenyimpangan standard.

Nilai pulangantalib.STDDEV()Fungsi adalah: array satu dimensi. Array

talib.STDDEV ((inReal) talib.STDDEV ((inReal, optInTimePeriod) talib.STDDEV ((inReal, optInTimePeriod, optInNbDev)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 5. optInTimePeriod palsu nombor PeraturanoptInNbDevparameter digunakan untuk menetapkan Penyimpangan, nilai lalai adalah 1. pilihanInNbDev palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.STDDEV(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.STDDEV(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.STDDEV(records);
    Log(ret);
}

PeraturanSTDDEV()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:STDDEV(Records[Close],Time Period = 5,Deviations = 1) = Array(outReal)

talib.TSF

Peraturantalib.TSF()fungsi digunakan untuk mengiraRamalan Siri Masa.

Nilai pulangantalib.TSF()Fungsi adalah array satu dimensi. Array

talib.TSF ((inReal) talib.TSF ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.TSF(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.TSF(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.TSF(records);
    Log(ret);
}

PeraturanTSF()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:TSF(Records[Close],Time Period = 14) = Array(outReal)

talib.VAR

Peraturantalib.VAR()fungsi digunakan untuk mengiraVarians.

Nilai pulangantalib.VAR()Fungsi adalah: array satu dimensi. Array

talib.VAR ((inReal) talib.VAR ((inReal, optInTimePeriod) talib.VAR ((inReal, optInTimePeriod, optInNbDev)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 5. optInTimePeriod palsu nombor PeraturanoptInNbDevparameter digunakan untuk menetapkan Penyimpangan, nilai lalai adalah 1. pilihanInNbDev palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.VAR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.VAR(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.VAR(records);
    Log(ret);
}

PeraturanVAR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:VAR(Records[Close],Time Period = 5,Deviations = 1) = Array(outReal)

talib.ADX

Peraturantalib.ADX()fungsi digunakan untuk mengiraIndeks Pergerakan Arah Purata.

Nilai pulangantalib.ADX()Fungsi adalah array satu dimensi. Array

talib.ADX ((inPriceHLC) talib.ADX ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ADX(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ADX(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ADX(records);
    Log(ret);
}

PeraturanADX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ADX(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.ADXR

Peraturantalib.ADXR()fungsi digunakan untuk mengiraPenarafan Indeks Pergerakan Arah Purata (indeks penilaian).

Nilai pulangantalib.ADXR()Fungsi adalah array satu dimensi. Array

talib.ADXR ((inPriceHLC) talib.ADXR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ADXR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ADXR(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ADXR(records);
    Log(ret);
}

PeraturanADXR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ADXR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.APO

Peraturantalib.APO()fungsi digunakan untuk mengiraOsilator harga mutlak.

Nilai pulangantalib.APO()Fungsi adalah: array satu dimensi. Array

talib.APO ((inReal) talib.APO ((inReal, optInFastPeriod) talib.APO ((inReal, optInFastPeriod, optInSlowPeriod) talib.APO ((inReal, optInFastPeriod, optInSlowPeriod, optInMAType)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInFastPeriodparameter digunakan untuk menetapkan tempoh cepat, nilai lalai adalah 12. optInFastPeriod palsu nombor PerkhidmatanoptInSlowPeriodparameter digunakan untuk menetapkan tempoh perlahan, nilai lalai adalah 26. optInSlowPeriod palsu nombor PerkhidmatanoptInMATypeparameter digunakan untuk menetapkan jenis purata, nilai lalai adalah 0. pilihanInMATyp palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.APO(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.APO(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.APO(records);
    Log(ret);
}

PeraturanAPO()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:APO(Records[Close],Fast Period = 12,Slow Period = 26,MA Type = 0) = Array(outReal)

talib.AROON

Peraturantalib.AROON()fungsi digunakan untuk mengiraAroon (penunjuk Aroon).

Nilai pulangantalib.AROON()Fungsi adalah array dua dimensi. Array

talib.AROON ((inPriceHL) talib.AROON ((inPriceHL, optInTimePeriod)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.AROON(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.AROON(records.High, records.Low)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.AROON(records);
    Log(ret);
}

PeraturanAROON()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:AROON(Records[High,Low],Time Period = 14) = [Array(outAroonDown),Array(outAroonUp)]

talib.AROONOSC

Peraturantalib.AROONOSC()fungsi digunakan untuk mengiraAroon Oscillator.

Nilai pulangantalib.AROONOSC()Fungsi adalah: array satu dimensi. Array

talib.AROONOSC ((inPriceHL) talib.AROONOSC ((dalam HargaHL, pilih dalam Tempoh)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.AROONOSC(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.AROONOSC(records.High, records.Low)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.AROONOSC(records);
    Log(ret);
}

PeraturanAROONOSC()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:AROONOSC(Records[High,Low],Time Period = 14) = Array(outReal)

talib.BOP

Peraturantalib.BOP()fungsi digunakan untuk mengiraKeseimbangan Kuasa.

Nilai pulangantalib.BOP()Fungsi adalah array satu dimensi. Array

talib.BOP ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.BOP(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.BOP(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.BOP(records);
    Log(ret);
}

PeraturanBOP()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:BOP(Records[Open,High,Low,Close]) = Array(outReal)

talib.CCI

Peraturantalib.CCI()fungsi digunakan untuk mengiraIndeks Saluran Komoditi (penunjuk homeopati).

Nilai pulangantalib.CCI()Fungsi adalah array satu dimensi. Array

talib.CCI ((inPriceHLC) talib.CCI ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CCI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CCI(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CCI(records);
    Log(ret);
}

PeraturanCCI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CCI(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.CMO

Peraturantalib.CMO()fungsi digunakan untuk mengiraOsilator Momentum Chande (CMO).

Nilai pulangantalib.CMO()Fungsi adalah: array satu dimensi. Array

talib.CMO ((inReal) talib.CMO ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.CMO(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.CMO(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.CMO(records);
    Log(ret);
}

PeraturanCMO()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:CMO(Records[Close],Time Period = 14) = Array(outReal)

talib.DX

Peraturantalib.DX()fungsi digunakan untuk mengiraIndeks Pergerakan Arah.

Nilai pulangantalib.DX()Fungsi adalah: array satu dimensi. Array

talib.DX ((inPriceHLC) talib.DX ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.DX(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.DX(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.DX(records);
    Log(ret);
}

PeraturanDX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:DX(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.MACD

Peraturantalib.MACD()fungsi digunakan untuk mengiraRata-rata bergerak Convergence/Divergence (rata-rata bergerak yang dihaluskan secara eksponensial).

Nilai pulangantalib.MACD()Fungsi adalah: array dua dimensi. Array

talib.MACD ((inReal) talib.MACD ((inReal, optInFastPeriod) talib.MACD ((inReal, optInFastPeriod, optInSlowPeriod) talib.MACD ((inReal, optInFastPeriod, optInSlowPeriod, optInSignalPeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInFastPeriodparameter digunakan untuk menetapkan tempoh cepat, nilai lalai adalah 12. optInFastPeriod palsu nombor PerkhidmatanoptInSlowPeriodparameter digunakan untuk menetapkan tempoh perlahan, nilai lalai adalah 26. optInSlowPeriod palsu nombor PerkhidmatanoptInSignalPeriodparameter digunakan untuk menetapkan tempoh isyarat, nilai lalai adalah 9. pilihanDalam Tempoh Isyarat palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MACD(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MACD(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MACD(records);
    Log(ret);
}

PeraturanMACD()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MACD(Records[Close],Fast Period = 12,Slow Period = 26,Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]

talib.MACDEXT

Peraturantalib.MACDEXT()fungsi digunakan untuk mengiraMACD dengan jenis MA yang boleh dikawal.

Nilai pulangantalib.MACDEXT()Fungsi adalah array dua dimensi. Array

talib.MACDEXT ((inReal) talib.MACDEXT ((inReal, optInFastPeriod) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType, optInSlowPeriod) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType, optInSlowPeriod, optInSlowMAType) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType, optInSlowPeriod, optInSlowMAType, optInSignalPeriod) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType, optInSlowPeriod, optInSlowMAType, optInSignalPeriod, optInSignalMAType)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInFastPeriodparameter digunakan untuk menetapkan tempoh cepat, nilai lalai adalah 12. optInFastPeriod palsu nombor PerkhidmatanoptInFastMATypeparameter digunakan untuk menetapkan jenis purata pantas, nilai lalai adalah 0. pilihanInFastMAType palsu nombor PerkhidmatanoptInSlowPeriodparameter digunakan untuk menetapkan tempoh perlahan, nilai lalai adalah 26. optInSlowPeriod palsu nombor PerkhidmatanoptInSlowMATypeParameter digunakan untuk menetapkan jenis purata perlahan, nilai lalai adalah 0. pilihanInSlowMAType palsu nombor PerkhidmatanoptInSignalPeriodparameter digunakan untuk menetapkan tempoh isyarat, nilai lalai adalah 9. pilihanDalam Tempoh Isyarat palsu nombor PerkhidmatanoptInSignalMATypeparameter digunakan untuk menetapkan jenis purata isyarat, nilai lalai adalah 0. pilihanInSignalMAType palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MACDEXT(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MACDEXT(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MACDEXT(records);
    Log(ret);
}

PeraturanMACDEXT()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MACDEXT(Records[Close],Fast Period = 12,Fast MA = 0,Slow Period = 26,Slow MA = 0,Signal Period = 9,Signal MA = 0) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]

talib.MACDFIX

Peraturantalib.MACDFIX()fungsi digunakan untuk mengiraPemasangan Convergence/Divergence Purata Bergerak 12/26.

Nilai pulangantalib.MACDFIX()Fungsi adalah array dua dimensi. Array

Talib.MACDFIX ((inReal) talib.MACDFIX ((inReal, optInSignalPeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInSignalPeriodparameter digunakan untuk menetapkan tempoh isyarat, nilai lalai adalah 9. pilihanDalam Tempoh Isyarat palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MACDFIX(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MACDFIX(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MACDFIX(records);
    Log(ret);
}

PeraturanMACDFIX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MACDFIX(Records[Close],Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]

talib.MFI

Peraturantalib.MFI()fungsi digunakan untuk mengiraIndeks Aliran Wang.

Nilai pulangantalib.MFI()Fungsi adalah array satu dimensi. Array

talib.MFI ((inPriceHLCV) talib.MFI ((inPriceHLCV, optInTimePeriod)

PeraturaninPriceHLCVparameter digunakan untuk menentukan data garis K. inPriceHLCV betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MFI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MFI(records.High, records.Low, records.Close, records.Volume)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MFI(records);
    Log(ret);
}

PeraturanMFI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MFI(Records[High,Low,Close,Volume],Time Period = 14) = Array(outReal)

talib.MINUS_DI

Peraturantalib.MINUS_DI()fungsi digunakan untuk mengiraPenunjuk arah negatif (penunjuk negatif).

Nilai pulangantalib.MINUS_DI()Fungsi adalah array satu dimensi. Array

talib.MINUS_DI (dalam harga) talib.MINUS_DI ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MINUS_DI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MINUS_DI(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MINUS_DI(records);
    Log(ret);
}

PeraturanMINUS_DI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MINUS_DI(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.MINUS_DM

Peraturantalib.MINUS_DM()fungsi digunakan untuk mengiraMinus Pergerakan Arah (pergerakan negatif).

Nilai pulangantalib.MINUS_DM()Fungsi adalah array satu dimensi. Array

talib.MINUS_DM ((inPriceHL) talib.MINUS_DM ((inPriceHL, optInTimePeriod)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MINUS_DM(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MINUS_DM(records.High, records.Low)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MINUS_DM(records);
    Log(ret);
}

PeraturanMINUS_DM()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MINUS_DM(Records[High,Low],Time Period = 14) = Array(outReal)

talib.MOM

Peraturantalib.MOM()fungsi digunakan untuk mengiraMomentum.

Nilai pulangantalib.MOM()Fungsi adalah array satu dimensi. Array

talib.MOM ((inReal) talib.MOM ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 10. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MOM(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MOM(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MOM(records);
    Log(ret);
}

PeraturanMOM()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MOM(Records[Close],Time Period = 10) = Array(outReal)

talib.PLUS_DI

Peraturantalib.PLUS_DI()fungsi digunakan untuk mengiraTambah Petunjuk Arah.

Nilai pulangantalib.PLUS_DI()Fungsi adalah: array satu dimensi. Array

Talib.PLUS_DI (dalam Harga) talib.PLUS_DI ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.PLUS_DI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.PLUS_DI(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.PLUS_DI(records);
    Log(ret);
}

PeraturanPLUS_DI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:PLUS_DI(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.PLUS_DM

Peraturantalib.PLUS_DM()fungsi digunakan untuk mengiraTambah Pergerakan Arah.

Nilai pulangantalib.PLUS_DM()Fungsi adalah array satu dimensi. Array

talib.PLUS_DM ((inPriceHL) talib.PLUS_DM ((inPriceHL, optInTimePeriod)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.PLUS_DM(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.PLUS_DM(records.High, records.Low)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.PLUS_DM(records);
    Log(ret);
}

PeraturanPLUS_DM()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:PLUS_DM(Records[High,Low],Time Period = 14) = Array(outReal)

talib.PPO

Peraturantalib.PPO()fungsi digunakan untuk mengiraPeratusan Osilator Harga.

Nilai pulangantalib.PPO()Fungsi adalah array satu dimensi. Array

Talib.PPO ((inReal) talib.PPO ((inReal, optInFastPeriod) talib.PPO ((inReal, optInFastPeriod, optInSlowPeriod) talib.PPO ((inReal, optInFastPeriod, optInSlowPeriod, optInMAType)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInFastPeriodparameter digunakan untuk menetapkan tempoh cepat, nilai lalai adalah 12. optInFastPeriod palsu nombor PerkhidmatanoptInSlowPeriodparameter digunakan untuk menetapkan tempoh perlahan, nilai lalai adalah 26. optInSlowPeriod palsu nombor PerkhidmatanoptInMATypeparameter digunakan untuk menetapkan jenis purata, nilai lalai adalah 0. pilihanInMATyp palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.PPO(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.PPO(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.PPO(records);
    Log(ret);
}

PeraturanPPO()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:PPO(Records[Close],Fast Period = 12,Slow Period = 26,MA Type = 0) = Array(outReal)

talib.ROC

Peraturantalib.ROC()fungsi digunakan untuk mengiraKadar perubahan: ((harga/prevPrice) -1) * 100 (penunjuk kadar perubahan).

Nilai pulangantalib.ROC()Fungsi adalah array satu dimensi. Array

talib.ROC ((inReal) talib.ROC ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 10. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ROC(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ROC(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ROC(records);
    Log(ret);
}

PeraturanROC()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ROC(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCP

Peraturantalib.ROCP()fungsi digunakan untuk mengiraKadar perubahan Peratusan: (harga-prevPrice) /prevPrice ( kadar perubahan harga).

Nilai pulangantalib.ROCP()Fungsi adalah: array satu dimensi. Array

talib.ROCP ((inReal) talib.ROCP ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 10. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ROCP(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ROCP(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ROCP(records);
    Log(ret);
}

PeraturanROCP()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ROCP(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCR

Peraturantalib.ROCR()fungsi digunakan untuk mengiraNisbah kadar perubahan: (harga/prevPrice) ( Nisbah perubahan harga).

Nilai pulangantalib.ROCR()Fungsi adalah array satu dimensi. Array

talib.ROCR ((inReal) talib.ROCR ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 10. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ROCR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ROCR(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ROCR(records);
    Log(ret);
}

PeraturanROCR()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ROCR(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCR100

Peraturantalib.ROCR100()fungsi digunakan untuk mengiraKadar perubahan nisbah 100 skala: (harga/prevPrice) * 100 (nombor perubahan harga).

Nilai pulangantalib.ROCR100()Fungsi adalah: array satu dimensi. Array

talib.ROCR100 ((inReal) talib.ROCR100 ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 10. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ROCR100(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ROCR100(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ROCR100(records);
    Log(ret);
}

PeraturanROCR100()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ROCR100(Records[Close],Time Period = 10) = Array(outReal)

talib.RSI

Peraturantalib.RSI()fungsi digunakan untuk mengiraIndeks Kekuatan Relatif.

Nilai pulangantalib.RSI()Fungsi adalah array satu dimensi. Array

talib.RSI ((inReal) talib.RSI ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.RSI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.RSI(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.RSI(records);
    Log(ret);
}

PeraturanRSI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:RSI(Records[Close],Time Period = 14) = Array(outReal)

talib.STOCH

Peraturantalib.STOCH()fungsi digunakan untuk mengiraStochastic (penunjuk STOCH).

Nilai pulangantalib.STOCH()Fungsi adalah array dua dimensi. Array

talib.STOCH ((inPriceHLC) talib.STOCH ((inPriceHLC, optInFastK_Period) talib.STOCH ((inPriceHLC, optInFastK_Period, optInSlowK_Period) talib.STOCH ((inPriceHLC, optInFastK_Period, optInSlowK_Period, optInSlowK_MAType) talib.STOCH ((inPriceHLC, optInFastK_Period, optInSlowK_Period, optInSlowK_MAType, optInSlowD_Period) talib.STOCH ((inPriceHLC, optInFastK_Period, optInSlowK_Period, optInSlowK_MAType, optInSlowD_Period, optInSlowD_MAType)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInFastK_Periodparameter digunakan untuk menetapkan tempoh Fast-K, nilai lalai adalah 5. optInFastK_Period palsu nombor PerkhidmatanoptInSlowK_Periodparameter digunakan untuk menetapkan tempoh Slow-K, nilai lalai adalah 3. optInSlowK_Period palsu nombor PerkhidmatanoptInSlowK_MATypeparameter digunakan untuk menetapkan jenis purata Slow-K, nilai lalai adalah 0. pilihanInSlowK_MAType palsu nombor PerkhidmatanoptInSlowD_Periodparameter digunakan untuk menetapkan tempoh Slow-D, nilai lalai adalah 3. optInSlowD_Period palsu nombor PerkhidmatanoptInSlowD_MATypeparameter digunakan untuk menetapkan jenis purata Slow-D, nilai lalai adalah 0. pilihanInSlowD_MAType palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.STOCH(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.STOCH(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.STOCH(records);
    Log(ret);
}

PeraturanSTOCH()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:STOCH(Records[High,Low,Close],Fast-K Period = 5,Slow-K Period = 3,Slow-K MA = 0,Slow-D Period = 3,Slow-D MA = 0) = [Array(outSlowK),Array(outSlowD)]

talib.STOCHF

Peraturantalib.STOCHF()fungsi digunakan untuk mengiraStochastic Fast (penunjuk STOCH cepat).

Nilai pulangantalib.STOCHF()Fungsi adalah array dua dimensi. Array

talib.STOCHF ((inPriceHLC) talib.STOCHF ((inPriceHLC, optInFastK_Period) talib.STOCHF ((inPriceHLC, optInFastK_Period, optInFastD_Period) talib.STOCHF ((inPriceHLC, optInFastK_Period, optInFastD_Period, optInFastD_MAType)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInFastK_Periodparameter digunakan untuk menetapkan tempoh Fast-K, nilai lalai adalah 5. optInFastK_Period palsu nombor PerkhidmatanoptInFastD_Periodparameter digunakan untuk menetapkan tempoh Fast-D, nilai lalai adalah 3. optInFastD_Period palsu nombor PerkhidmatanoptInFastD_MATypeparameter digunakan untuk menetapkan jenis purata Fast-D, nilai lalai adalah 0. pilihanInFastD_MAType palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.STOCHF(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.STOCHF(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.STOCHF(records);
    Log(ret);
}

PeraturanSTOCHF()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:STOCHF(Records[High,Low,Close],Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]

talib.STOCHRSI

Peraturantalib.STOCHRSI()fungsi digunakan untuk mengiraIndeks Kekuatan Relatif Stochastic.

Nilai pulangantalib.STOCHRSI()Fungsi adalah: array dua dimensi. Array

Talib.STOCHRSI ((inReal) talib.STOCHRSI ((inReal, optInTimePeriod) talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period) talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period, optInFastD_Period) talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period, optInFastD_Period, optInFastD_MAType)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor PeraturanoptInFastK_Periodparameter digunakan untuk menetapkan tempoh Fast-K, nilai lalai adalah 5. optInFastK_Period palsu nombor PerkhidmatanoptInFastD_Periodparameter digunakan untuk menetapkan tempoh Fast-D, nilai lalai adalah 3. optInFastD_Period palsu nombor PerkhidmatanoptInFastD_MATypeparameter digunakan untuk menetapkan jenis purata Fast-D, nilai lalai adalah 0. pilihanInFastD_MAType palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.STOCHRSI(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.STOCHRSI(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.STOCHRSI(records);
    Log(ret);
}

PeraturanSTOCHRSI()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]

talib.TRIX

Peraturantalib.TRIX()fungsi digunakan untuk mengiraRate-of-Change (ROC) 1 hari daripada EMA Ganda Lempar.

Nilai pulangantalib.TRIX()Fungsi adalah: array satu dimensi. Array

Talib.TRIX ((inReal) talib.TRIX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal betul {@struct/Record Record} array struktur, array nombor PerkhidmatanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 30. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.TRIX(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.TRIX(records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.TRIX(records);
    Log(ret);
}

PeraturanTRIX()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:TRIX(Records[Close],Time Period = 30) = Array(outReal)

talib.ULTOSC

Peraturantalib.ULTOSC()fungsi digunakan untuk mengiraOscillator Utama.

Nilai pulangantalib.ULTOSC()Fungsi adalah array satu dimensi. Array

talib.ULTOSC ((inPriceHLC) talib.ULTOSC ((inPriceHLC, optInTimePeriod1) talib.ULTOSC ((inPriceHLC, optInTimePeriod1, optInTimePeriod2) talib.ULTOSC ((inPriceHLC, optInTimePeriod1, optInTimePeriod2, optInTimePeriod3)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriod1parameter digunakan untuk menetapkan tempoh pertama, nilai lalai adalah 7. optInTimePeriod1 palsu nombor PerkhidmatanoptInTimePeriod2parameter digunakan untuk menetapkan tempoh kedua, nilai lalai adalah 14. optInTimePeriod2 palsu nombor PerkhidmatanoptInTimePeriod3parameter digunakan untuk menetapkan tempoh ketiga, nilai lalai adalah 28. optInTimePeriod3 palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.ULTOSC(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.ULTOSC(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.ULTOSC(records);
    Log(ret);
}

PeraturanULTOSC()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:ULTOSC(Records[High,Low,Close],First Period = 7,Second Period = 14,Third Period = 28) = Array(outReal)

talib.WILLR

Peraturantalib.WILLR()fungsi digunakan untuk mengiraWilliams %R.

Nilai pulangantalib.WILLR()Fungsi adalah: array satu dimensi. Array

Talib.WILLR ((inPriceHLC) talib.WILLR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk menetapkan tempoh, nilai lalai adalah 14. optInTimePeriod palsu nombor

function main() {
    var records = exchange.GetRecords()
    var ret = talib.WILLR(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.WILLR(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.WILLR(records);
    Log(ret);
}```

The ```WILLR()``` function is described in the talib library documentation as: ```WILLR(Records[High,Low,Close],Time Period = 14) = Array(outReal)```

### talib.AVGPRICE

The ```talib.AVGPRICE()``` function is used to calculate **Average Price**.

The return value of the ```talib.AVGPRICE()``` function is a one-dimensional array.
array

talib.AVGPRICE(inPriceOHLC)

The ```inPriceOHLC``` parameter is used to specify the K-line data.
inPriceOHLC
true
{@struct/Record Record} structure array

```javascript
function main() {
    var records = exchange.GetRecords()
    var ret = talib.AVGPRICE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.AVGPRICE(records.Open, records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.AVGPRICE(records);
    Log(ret);
}

PeraturanAVGPRICE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:AVGPRICE(Records[Open,High,Low,Close]) = Array(outReal)

talib.MEDPRICE

Peraturantalib.MEDPRICE()fungsi digunakan untuk mengiraHarga purata.

Nilai pulangantalib.MEDPRICE()Fungsi adalah array satu dimensi. Array

talib.MEDPRICE ((inPriceHL)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.MEDPRICE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.MEDPRICE(records.High, records.Low)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.MEDPRICE(records);
    Log(ret);
}

PeraturanMEDPRICE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:MEDPRICE(Records[High,Low]) = Array(outReal)

talib.TYPPRICE

Peraturantalib.TYPPRICE()fungsi digunakan untuk mengiraHarga Tipikal.

Nilai pulangantalib.TYPPRICE()Fungsi adalah array satu dimensi. Array

talib.TYPPRICE ((inPriceHLC)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.TYPPRICE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.TYPPRICE(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.TYPPRICE(records);
    Log(ret);
}

PeraturanTYPPRICE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:TYPPRICE(Records[High,Low,Close]) = Array(outReal)

talib.WCLPRICE

Peraturantalib.WCLPRICE()fungsi digunakan untuk mengiraHarga Penutupan Bertingkat.

Nilai pulangantalib.WCLPRICE()Fungsi adalah array satu dimensi. Array

talib.WCLPRICE ((inPriceHLC)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC betul Array struktur {@struct/Record Record}

function main() {
    var records = exchange.GetRecords()
    var ret = talib.WCLPRICE(records)
    Log(ret)
}
import talib
def main():
    records = exchange.GetRecords()
    ret = talib.WCLPRICE(records.High, records.Low, records.Close)
    Log(ret)
void main() {
    auto records = exchange.GetRecords();
    auto ret = talib.WCLPRICE(records);
    Log(ret);
}

PeraturanWCLPRICE()fungsi diterangkan dalam dokumentasi perpustakaan talib sebagai:WCLPRICE(Records[High,Low,Close]) = Array(outReal)

Struktur