Sumber daya yang dimuat... Pemuatan...

Fungsi bawaan

Global

Versi

Mengembalikan nomor versi sistem saat ini.

Nomor versi sistem saat ini, seperti3.6Aku tidak tahu. string

Versi ((()

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

Nomor versi sistem adalah nomor versi dari program docker.

Tidur

Fungsi tidur, menyebabkan program berhenti sejenak.

Tidur (millisecond)

Peraturanmillisecondparameter digunakan untuk mengatur durasi tidur dan jumlah milidetik. Milisekund benar nomor

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, ketika menjalankanSleep(1000)fungsi, program akan tidur selama 1 detik.Sleep(0.1). Ini mendukung parameter minimum dari0.000001, yaitu hibernasi nanodetik, di mana 1 nanodetik sama dengan1e-6Milisekund. Ketika menulis strategi diPythonbahasa,Sleep(millisecond)fungsi harus digunakan untuk intervall polling, waktu untuk menunggu operasi.time.sleep(second)fungsi dariPythonItu adalahtimeini karena menggunakantime.sleep(second)fungsi dalam strategi membuat program strategi menunggu untuk periode waktu sebenarnya ketika backtesting (tidak melewatkan seri waktu dari sistem backtesting), sehingga menyebabkan strategi untuk backtest sangat lambat.

IsVirtual

Tentukan apakah lingkungan operasi strategi adalah sistem backtesting.

Strategi mengembalikan nilai sebenarnya, misalnya:trueStrategi ini mengembalikan nilai palsu, misalnya:falseketika berjalan di lingkungan perdagangan langsung. bool

Apakah Virtual ((()

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 apakah lingkungan berjalan saat ini adalah sistem backtesting, yang digunakan untuk kompatibel dengan perbedaan antara backtesting dan perdagangan langsung.

Surat

Kirim email.

Pengiriman email yang berhasil mengembalikan nilai yang sebenarnya, misalnya,true, dan pengiriman gagal mengembalikan nilai palsu, misalnya,falseAku tidak tahu. bool

Mail ((smtpServer, smtpUsername, smtpPassword, mailTo, judul, tubuh)

Digunakan untuk menentukanSMTPalamat layanan pengirim email. smtpServer benar string Digunakan untuk menentukan alamat email pengirim email. smtpNama pengguna benar string PeraturanSMTPkata sandi untuk kotak surat pengirim email. smtpPassword benar string Digunakan untuk menentukan alamat email penerima email. mailTo benar string Alamat email. Judul benar string Tubuh email. tubuh benar string

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 sandi untukSMTPlayanan, bukan kata sandi kotak surat. Saat mengatursmtpServerparameter, jika Anda perlu mengubah port, Anda dapat menambahkan nomor port langsung di parametersmtpServer. Misalnya: QQ mailsmtp.qq.com:587, yang tersedia untuk pengujian. Jika kesalahan dilaporkan:unencryped connection, Anda perlu memodifikasismtpServerdariMailFormat parameter adalah:ssl://xxx.com:xxx, misalnya,sslmetodeSMTPuntuk QQ mail:ssl://smtp.qq.com:465atausmtp://xxx.com:xxxAku tidak tahu. Ini tidak bekerja di sistem backtesting.

{@fun/Global/Mail_Go Mail_Go}

Mail_Go

Versi asinkron dariMail function.

PeraturanMail_Gofungsi mengembalikan objek bersamaan segera, dan Anda dapat menggunakanwaitmetode dari objek bersamaan untuk mendapatkan hasil pengiriman surat. pengiriman surat yang sukses mengembalikan nilai benar, misalnya,true, dan pengiriman gagal mengembalikan nilai palsu, misalnya,falseAku tidak tahu. objek

Mail_Go ((smtpServer, smtpUsername, smtpPassword, mailTo, judul, body)

Ini digunakan untuk menentukanSMTPalamat layanan pengirim email. smtpServer benar string Ini digunakan untuk menentukan alamat email pengirim email. smtpNama pengguna benar string PeraturanSMTPkata sandi untuk kotak surat pengirim email. smtpPassword benar string Ini digunakan untuk menentukan alamat email penerima email. mailTo benar string Alamat email. Judul benar string Tubuh email. tubuh benar string

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.

Ini tidak bekerja di sistem backtesting.

{@fun/Global/Mail Mail}

SetErrorFilter

Log kesalahan filter.

SetErrorFilter ((filter)

Senar ekspresi reguler. Filter benar string

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 kesalahan umum.

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);
}

Menyaring pesan kesalahan antarmuka.

Log kesalahan yang cocok dengan ekspresi reguler ini tidak akan diunggah ke sistem log. Anda dapat memanggilnya beberapa kali (tidak ada batasan jumlah kali) untuk mengatur beberapa kondisi filter. Ekspresi reguler yang ditetapkan beberapa kali akan dikumpulkan dan berlaku pada saat yang sama. Anda dapat mengatur string kosong untuk mengatur ulang ekspresi reguler yang digunakan untuk menyaring log kesalahan:SetErrorFilter(""). Log yang disaring tidak lagi ditulis ke file database yang sesuai dengan ID perdagangan langsung di direktori docker untuk mencegah laporan kesalahan yang sering dari membengkak file database.

GetPid

Dapatkan ID proses perdagangan langsung.

Kembalikan ID proses perdagangan langsung. string

GetPid ((()

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

GetLastError

Dapatkan pesan kesalahan terakhir.

Pesan kesalahan terakhir. string

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);
}

Ini tidak bekerja di sistem backtesting.

GetCommand

Dapatkan perintah interaksi strategi.

Format perintah kembali adalahControlName:Data. ControlNameadalah nama kontrol, danDataadalah data yang dimasukkan ke dalam kontrol. Jika kontrol interaktif tidak memiliki kotak input, kotak drop-down dan komponen lain (misalnya kontrol tombol tanpa kotak input) maka format perintah yang dikembalikan adalahControlName, yang hanya mengembalikan nama kontrol. string

GetCommand ((()

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);
    }
}

Mendeteksi perintah interaksi dan menggunakanLogfungsi untuk output perintah interaksi ketika terdeteksi.

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);
    }
}

Misalnya, strategi kontrol interaktif menambahkan kontrol tanpa kotak input, kontrol interaktif diberi nama:buy, informasi deskripsi kontrol adalah:buy, yang merupakan kontrol tombol. Lanjutkan dengan menambahkan kontrol dengan kotak input. Kontrol interaktif bernama:selldan pesan deskripsi kontrol adalah:sell, yang merupakan kontrol interaktif yang merupakan kombinasi dari tombol dan kotak input. kode interaksi dirancang dalam strategi untuk menanggapi kontrol interaksi yang berbeda:

Ini tidak bekerja di sistem backtesting.

GetMeta

Dapatkan nilai Meta ditulis saat menghasilkan kode pendaftaran strategi.

Metadata. string

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 skenario aplikasi: PenggunaanMetauntuk membatasi jumlah aset yang dioperasikan oleh strategi.

Skenario aplikasi: perlu melakukan batas modal untuk penyewa strategi yang berbeda.Metanilai yang ditetapkan saat menghasilkan kode pendaftaran tidak dapat melebihi 190 karakter danGetMeta()Jika tidak ada metadata (Meta) ditetapkan saat menghasilkan kode pendaftaran strategi,GetMeta()Fungsi ini tidak berfungsi di sistem backtesting.

Pilih

Untuk primitifSocketakses, mendukungtcp, udp, tls, unixMendukung 4 protokol komunikasi populer:mqtt, nats, amqp, kafka. Dukungan untuk menghubungkan ke database:sqlite3, mysql, postgres, clickhouse.

PeraturanDial()fungsi mengembalikan null jika waktu habis. panggilan normal mengembalikan objek koneksi yang memiliki tiga metode:read, writedanclose.readmetode digunakan untuk membaca data,writemetode digunakan untuk mengirim data danclosemetode digunakan untuk menutup koneksi. PeraturanreadMetode ini mendukung parameter berikut:

  • Ketika tidak ada parameter yang diteruskan, ia memblokir sampai pesan tersedia dan kembali, sepertiws.read().
  • Ketika diteruskan sebagai parameter, satuan adalah milidetik, menentukan periode waktu tunggu pesan.ws.read(2000)menentukan timeout dua detik (2000 millisecond).
  • Kedua parameter berikut hanya berlaku untuk WebSocket: Mengirim parameter-1berarti bahwa fungsi mengembalikan langsung, terlepas dari kehadiran atau tidak adanya pesan, misalnya:ws.read(-1)Aku tidak tahu. Mengirim parameter-2berarti bahwa fungsi mengembalikan segera dengan atau tanpa pesan, tetapi hanya pesan terbaru yang dikembalikan, dan pesan yang disimpen dibuang.ws.read(-2).

read()deskripsi buffer fungsi: Data masuk yang didorong oleh protokol WebSocket dapat menyebabkan akumulasi data jika interval waktu antara strategiread()Data ini disimpan di buffer, yang memiliki struktur data antrian dengan maksimum 2000. Setelah 2000 dilampaui, data terbaru dimasukkan ke buffer dan data tertua dihapus.

Skenario Tidak ada parameter Parameter: -1 Parameter: -2 Parameter: 2000, dalam milidetik
Data sudah di buffer Kembalikan data tertua segera Kembalikan data tertua segera Kembali data terbaru segera Kembalikan data tertua segera
Tidak ada data di buffer Kembali saat diblokir ke data Kembali null segera Kembali null segera Tunggu 2000 ms, kembali null jika tidak ada data, kembali null jika ada data
Koneksi WebSocket terputus atau dihubungkan kembali oleh yang mendasarinya read() function mengembalikan string kosong, yaitu: , dan write() function mengembalikan 0. Situasinya terdeteksi. Anda dapat menutup koneksi menggunakan fungsi close(), atau jika Anda telah mengatur koneksi ulang otomatis, Anda tidak perlu menutupnya, sistem yang mendasari akan menghubungkannya kembali secara otomatis.

objek

Pilih (Alamat) Pilih (alamat, waktu)

Alamat permintaan. alamat benar string detik timeout, timeout palsu Nomor

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 antarmuka 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 ke antarmuka ticker WebSocket OKX:

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 ke antarmuka ticker WebSocket Huobi:

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 OKX WebSocket autentikasi antarmuka:

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 koneksi yang dikembalikan oleh fungsi Dial saat terhubung ke database memiliki dua fungsi metode yang unik untuknya:

  • exec(sqlString): Digunakan untuk mengeksekusi pernyataan SQL dengan cara yang mirip denganDBExec() function.
  • fd(): Thefd()fungsi mengembalikan pegangan (misalnya, variabel pegangan adalah pegangan) yang akan digunakan oleh thread lain untuk terhubung kembali (bahkan jika objek yang dibuat oleh Dial telah ditutup oleh pelaksanaanclose()fungsi untuk menutup koneksi) dengan melewati pegangan keDial()fungsi, misalnya,Dial(handle)Gunakan kembali koneksi. Berikut ini adalah contoh dari fungsi Dial menghubungkan kesqlite3 database.

Rincian dariaddressparameter, dipisahkan oleh|simbol setelah alamat normal:wss://ws.okx.com:8443/ws/v5/publicJika ada.|karakter dalam string parameter, kemudian||Bagian setelah itu adalah beberapa pengaturan parameter fungsi, dan setiap parameter terhubung dengan&karakter. Misalnya,ss5Parameter proxy dan kompresi dapat disatukan sebagai berikut:Dial("wss://ws.okx.com:8443/ws/v5/public|proxy=socks5://xxx:9999&compress=gzip_raw&mode=recv")

Fungsi yang didukung oleh parameter alamat dari fungsi Dial Deskripsi parameter
Parameter yang terkait dengan kompresi data protokol WebSocket: compress=parameter value compress adalah metode kompresi, pilihan parameter compress adalah: gzip_raw, gzip, dll. Jika metode gzip tidak standar gzip, Anda dapat menggunakan metode diperpanjang: gzip_raw
Parameter yang terkait dengan kompresi data protokol WebSocket: mode=nilai parameter mode adalah mode kompresi, parameter mode dapat dual, send, recv. dual adalah kompresi dua arah, mengirim data terkompresi, menerima data terkompresi. send adalah mengirim data terkompresi. recv adalah menerima data terkompresi, dekompresi lokal.
Protokol WebSocket menetapkan parameter terkait auto-reconnect yang mendasari: reconnect=parameter value reconnect adalah apakah untuk mengatur reconnect, reconnect=true adalah untuk mengaktifkan reconnect.
Protokol WebSocket menetapkan parameter terkait auto-reconnect yang mendasari: interval=nilai parameter interval adalah interval percobaan ulang, dalam milidetik, interval=10000 adalah interval percobaan ulang 10 detik, default adalah 1 detik ketika tidak diatur, yaitu interval=1000.
Protokol WebSocket menetapkan parameter terkait auto-reconnect yang mendasari: payload=parameter value payload adalah pesan langganan yang perlu dikirim saat WebSocket dihubungkan kembali, misalnya: payload=okokok.
Parameter yang terkait dengan kaus kaki5 proxy: proxy=nilai parameter Proxy adalah pengaturan proxy ss5, format nilai parameter: socks5://name:pwd@192.168.0.1:1080, nama adalah nama pengguna server ss5, pwd adalah password login server ss5, 1080 adalah port layanan ss5.

PeraturanDial()Fungsi hanya didukung untuk perdagangan langsung. Saat terhubung ke database menggunakan fungsi Dial, string koneksi ditulis dengan referensi ke proyek driver bahasa go untuk setiap database.

Basis data yang didukung Proyek Penggerak Senar koneksi Pengamatan
Sqlite3 github.com/mattn/go-sqlite3 sqlite3://file:test.db?cache=shared&mode=memory Peraturansqlite3://Prefiks menunjukkan bahwa database 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
Tumbuh 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

Harap dicatat bahwa ketikapayloadkonten yang ditetapkan dalamaddressparameter berisi karakter=atau karakter khusus lainnya, dapat mempengaruhi analisis dariaddressparameter dariDialfungsi, seperti contoh berikut.

contoh panggilan backPack Exchange websocket private interface:

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 kode bekerja dengan baik:

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

Jika Anda menulisnya langsung dipayload, tidak akan berfungsi dengan baik, misalnya:

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

Saat ini, hanya JavaScript mendukung penggunaanmqtt, nats, amqp, dankafkakode 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")
    }
}

Referensi dokumentasi rinci:Menjelajahi FMZ: Praktik Protokol Komunikasi Antara Strategi Perdagangan Langsung

HttpQuery

Kirim permintaan Http.

Mengembalikan data respons dari permintaan. Jika nilai yang dikembalikan adalahJSONstring, itu dapat dianalisis olehJSON.parse()Fungsi dalamJavaScriptstrategi bahasa, dan olehjson::parse()Fungsi dalamC++Jika debug ditetapkan menjadi true dalam struktur opsi, nilai pengembalian adalah objek (JSON); jika debug ditetapkan menjadi false, nilai pengembalian adalah string. string, objek

HttpQuery (URL) HttpQuery ((url, opsi)

URL permintaan HTTP. Url benar string Pengaturan terkait permintaan HTTP, misalnya, dapat disusun sebagai 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 browsertlsSidik jari. Pengaturan yang didukung termasuk opsi 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"... gedung pencakar langit:"cloudscraper"... mms_:"mms_ios"... mesh_:"mesh_ios", "mesh_ios_1", "mesh_ios_2", "mesh_android", "mesh_android_1", "mesh_android_2"... Konfirmasi_:"confirmed_ios", "confirmed_android"... Oke."okhttp4_android_7", "okhttp4_android_8", "okhttp4_android_9", "okhttp4_android_10", "okhttp4_android_11", "okhttp4_android_12", "okhttp4_android_13",
  • debug: Ketika ditetapkan untuktrue, yangHttpQuerypanggilan fungsi mengembalikan pesan jawaban penuh.false, hanya data dalamBodydari pesan balasan dikembalikan.
  • timeout: pengaturan timeout, setting 1000 berarti 1 detik timeout.
  • Charset: Mendukung transkoding data respons yang diminta, seperti GB18030. Semua bidang dalam struktur ini bersifat opsional, misalnya,profilelapangan dapat dilewatkan.

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 antarmuka API ticker publik 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 pengaturan proxy.

PeraturanHttpQuery()Fungsi hanya mendukungJavaScript, C++bahasa,Pythonbahasa dapat menggunakanurllibPerpustakaan untuk mengirim permintaan Http langsung.HttpQuery()digunakan terutama untuk mengakses antarmuka pertukaran yang tidak memerlukan tanda tangan, seperti antarmuka publik seperti informasi ticker.HttpQuery()dapat digunakan dalam sistem backtesting untuk mengirim permintaan (hanyaGETBacktesting terbatas pada penggunaan 20 kunjungan ke berbagaiURLs, danHttpQuery()kunjungan akan cache data.URLdiakses untuk kedua kalinya,HttpQuery()fungsi mengembalikan data yang di-cache dan tidak ada lagi permintaan jaringan yang sebenarnya terjadi.

{@fun/Global/HttpQuery_Go HttpQuery_Go}

HttpQuery_Go

Mengirim permintaan HTTP, versi asinkron dariHttpQuery function.

PeraturanHttpQuery_Go()fungsi segera mengembalikan objek bersamaan yang dapat digunakan untuk mendapatkan hasil permintaan HTTP menggunakanwaitmetode dariJSON.parse()fungsi dapat digunakan untuk menganalisisJSON.parse()Fungsi dalamJavaScriptstrategi bahasa.
objek

HttpQuery_Go ((url) HttpQuery_Go ((url, opsi)

URL permintaan HTTP. Url benar string Pengaturan terkait permintaan HTTP, misalnya, dapat disusun sebagai 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 browsertls fingerprints.
  • debug: Ketika ditetapkan untuktrue, iniHttpQuery_Gopanggilan fungsi mengembalikan pesan jawaban penuh.false, hanya data dalamBodydari pesan balasan dikembalikan.
  • timeout: pengaturan timeout, setting 1000 berarti 1 detik timeout. Semua bidang dalam struktur ini bersifat opsional, misalnya,profilelapangan dapat dilewatkan.

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 asinkron ke antarmuka publik pertukaran untuk data ticker agregat.

PeraturanHttpQuery_Go()Fungsi hanya mendukungJavaScript, yangPythonbahasa dapat digunakan denganurllibPerpustakaan untuk mengirim permintaan Http langsung.HttpQuery_Go()digunakan terutama untuk mengakses antarmuka yang tidak memerlukan tanda tangan di bursa, seperti antarmuka publik seperti informasi ticker.HttpQuery_Gofungsi tidak didukung dalam sistem backtesting.

{@fun/Global/HttpQuery HttpQuery}

Mengenkode

Fungsi ini mengkodekan data sesuai dengan parameter yang diteruskan.

PeraturanEncodefungsi mengembalikan data setelah pengkodean dan enkripsi. string

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

Parameteralgoadalah algoritma yang digunakan dalam perhitungan pengkodean. Pengaturan dukungan 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 mendukung: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk, mengenkode dan mendekode string.algojuga mendukung: ed25519 algoritma. Mendukung penggunaan algoritma hash yang berbeda, misalnya parameteralgodapat ditulis sebagai ed25519.md5, ed25519.sha512, dll.ed25519.seedperhitungan. sesuatu benar string Digunakan untuk menentukan format data daridataparameter.inputFormatparameter dapat ditetapkan sebagai salah satu dari berikut:raw, hex, base64, string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. inputFormat benar string Digunakan untuk menentukan format data output.outputFormatparameter dapat ditetapkan sebagai salah satu dari berikut:raw, hex, base64, string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. outputFormat benar string Parameterdataadalah data yang akan diproses. data benar string Digunakan untuk menentukan format data darikeyparameter.keyparameter dapat ditetapkan sebagai salah satu dari berikut:raw, hex, base64, string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. keyFormat palsu string Parameterkeyadalah kunci rahasia yang digunakan untukHMACEnkripsi.keydiperlukan ketika parameteralgodiatur untuksignatausignTx.keyparameter tidak digunakan untukHMACEnkripsi ketikaalgoparameter ditetapkan menjadi raw (karena algoritma harus ditentukan untuk enkripsi HMAC). kunci palsu string

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 mendukung: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk untuk mengenkode dan mendekode string.

PeraturanEncode()fungsi hanya didukung untuk perdagangan langsung.keydankeyFormatparameter tidak lulus, makakeyEnkripsi tidak digunakan.

UnixNano

Dapatkan tanda waktu nanodetik saat ini.

PeraturanUnixNano()Fungsi mengembalikan tanda waktu nanodetik. Nomor

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 time stamp millisecond, Anda dapat menggunakan kode berikut:

{@fun/Global/Unix Unix}

Unix

Dapatkan time stamp saat ini di tingkat kedua.

Mengembalikan timestamp tingkat dua. Nomor

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 informasi sistem dari perangkat di mana docker terletak.

Informasi sistem. string

GetOS()

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

Sebagai contoh, panggilan keGetOS()fungsi untuk docker yang berjalan padaMac OSsistem operasi mungkin kembali:darwin/amd64Karena komputer Apple memiliki beberapa arsitektur hardware.darwinadalah nama dariMac OS system.

MD5

Menghitung hash MD5 dari parameterdata.

Nilai hash MD5. string

MD5 (data)

Data yang membutuhkan perhitungan MD5. data benar string

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

MenelponMD5("hello world")fungsi, nilai yang dikembalikan adalah:5eb63bbbe01eeed093cb22bb8f5acdc3.

{@fun/Global/Encode Encode}

DBExec

Fungsi antarmuka database.

Sebuah objek yang berisi hasil dari eksekusiSqlpernyataan, misalnya:


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

objek

DBExec ((sql)

Sqlstring pernyataan. Sql benar string

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;"));
}

Dukungan database di memori, untukDBExecparameter fungsi, jikaSqlpernyataan dimulai dengan:kemudian dioperasikan dalam database in-memory, akan lebih cepat tanpa menulis file.

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));
}

Tambahkan, hapus, periksa dan ubah catatan dalam tabel.

FungsiDBExec()dapat mengoperasikan database perdagangan langsung (database SQLite) dengan melewati parameter.SQLiteSistem cadangan tabel di basis data perdagangan langsung:kvdb, cfg, log, profit, chart, jangan bekerja di meja ini.Transaksitidak didukung dan tidak dianjurkan untuk melakukan operasi tersebut, yang dapat menyebabkan konflik dalam sistem.DBExec()Fungsi hanya didukung untuk perdagangan langsung.

{@fun/Global/_G _G}

UUID

Buat UUID.

UUID 32 bit. string

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 hanya mendukung perdagangan langsung.

EventLoop

Dengarkan untuk peristiwa, itu kembali ketika adaWebSocketdata yang dapat dibaca atau tugas bersamaan, sepertiexchange.Go(), HttpQuery_Go(), dll telah selesai.

Jika objek yang dikembalikan bukan nilai nol,Eventyang terkandung dalam konten pengembalian adalah jenis pemicu peristiwa. Misalnya struktur nilai pengembalian berikut:

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

objek

EventLoop ((() EventLoop (timeout)

Parametertimeoutadalah pengaturan timeout, dalam milidetik.timeoutmenunggu suatu peristiwa terjadi sebelum kembali jika ditetapkan menjadi 0. Jika lebih besar dari 0, mengatur peristiwa untuk menunggu waktu habis, dan mengembalikan peristiwa terbaru segera jika kurang dari 0. timeout palsu nomor

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 untukEventLoop()fungsi dalam kode menginisialisasi mekanisme untuk acara yang didengarkan, dan jika yang pertamaEventLoop()call dimulai setelah event callback, itu akan melewatkan acara sebelumnya. sistem yang mendasari membungkus struktur antrian yang cache maksimum 500 callback acara.EventLoop()fungsi tidak dipanggil pada waktunya untuk mengambil mereka keluar selama eksekusi program, kemudian callback acara di luar 500 cache akan hilang.EventLoop()fungsi tidak mempengaruhi antrian cache dari sistem dasar WebSocket atau cache fungsi bersamaan sepertiexchange.Go()Untuk cache ini, masih perlu menggunakan metode masing-masing untuk mengambil data.EventLoop()fungsi untuk data yang telah diambil sebelumEventLoop()Tujuan utama dariEventLoop()fungsi adalah untuk memberi tahu lapisan strategi bahwa data jaringan baru telah diterima oleh sistem yang mendasari.EventLoop()fungsi mengembalikan suatu peristiwa, hanya melintasi semua sumber data.exchange.Go()mencoba untuk mendapatkan data.EventLoop()Fungsi hanya mendukung perdagangan langsung. Dengarkan acara di thread utama ketika dipanggil dari fungsi utamamain(). Dalam strategi yang ditulis dalamJavaScriptbahasa,threading.Thread()fungsi membuat thread, yang juga dapat dipanggil dalam fungsi eksekusi threads, untuk mendengarkan peristiwa di thread saat ini.

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

__Servis

Peraturan__Servefungsi digunakan untuk membuat layanan HTTP, layanan TCP, dan layanan Websocket (berdasarkan protokol HTTP).

Mengembalikan string yang mencatat alamat IP dan port dari layanan yang dibuat.127.0.0.1:8088, [::]:8089.

string

__Serve (serveURI, pengelola) __Serve ((serveURI, handler,...args)

PeraturanserveURIparameter digunakan untuk mengkonfigurasi protokol, alamat IP, port dan pengaturan lain dari layanan mengikat, sepertihttp://0.0.0.0:8088?gzip=true, yaitu,http://:8088?gzip=true.

  • Protokol TCPserveURIpengaturan parameter, sepertitcp://127.0.0.1:6666?tls=true; Anda dapat menambahkan sertifikat dan kunci pribadi, sepertitls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Protokol HttpserveURIpengaturan parameter, sepertihttp://127.0.0.1:6666?gzip=true; Anda dapat mengatur pengaturan kompresi:gzip=trueAku tidak tahu. PeraturanserveURIparameter digunakan untuk Https, sepertihttps://127.0.0.1:6666?tls=true&gzip=true; Anda dapat menambahkancert_pemdancert_key_pemparameter untuk memuat sertifikat.

melayaniURI benar string PeraturanhandlerParameter digunakan untuk lulus dalam fungsi pemrosesan routing (Http protokol), fungsi pemrosesan pesan (TCP protokol), dan fungsi pemrosesan Stream (Websocket). Fungsi callback yang diteruskan oleh parameterhandlerdapat mendefinisikan beberapa parameter, parameter pertama adalah objek ctx (objek konteks).

pengelola benar fungsi Parameter sebenarnya dari fungsi callback yang dilewati sebagai parameterhandlerMungkin ada beberapa parameter.arg, misalnya:

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

Parameter1, 2, 3melewati saat memanggil__Serve()fungsi sesuai dengan parametera, b, cdilewati dalam fungsi callback.

arg palsu string, number, bool, object, array, function, null value dan tipe lain yang didukung 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 hanya mendukung strategi bahasa JavaScript.
  • Thread layanan terisolasi dari ruang lingkup global, sehingga tidak mendukung penutupan atau referensi ke variabel eksternal, fungsi kustom, dll.; Namun, dapat memanggil semua fungsi API platform.
  • PeraturanWebsocketlayanan diimplementasikan berdasarkan protokol Http. Anda dapat mengatur cabang routing di jalur dan merancang kode implementasi untukWebsocketAnda dapat melihat contoh kode di bagian ini.

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

  • ctx.proto ((() Terapan pada protokol Http/TCP, mengembalikan nama protokol saat dipanggil.HTTP/1.1, tcp.
  • ctx.host() Diterapkan pada protokol Http, ini mengembalikan informasi host ketika dipanggil alamat IP dan port.
  • ctx.path ((() Terapkan pada protokol Http, mengembalikan jalur permintaan saat dipanggil.
  • ctx.query (kunci) Diterapkan pada protokol Http, mengembalikan nilai yang sesuai dengan kunci dalam kueri dalam permintaan ketika dipanggil.http://127.0.0.1:8088?num=123, dan fungsi pemrosesan callback yang diteruskan oleh parameterhandlerkembali"123"kapan?ctx.query("num")disebut.
  • ctx.rawQuery() Terapan pada protokol Http, ketika dipanggil, mengembalikan kueri asli dalam permintaan (kueri permintaan Http).
  • ctx.headers ((() Terapan pada protokol Http, dan mengembalikan informasi request header dalam request saat dipanggil.
  • ctx.header (kunci) Diterapkan pada protokol Http, mengembalikan nilai kunci di header permintaan yang ditentukan ketika dipanggil.User-Agentdalam judul permintaan saat ini:ctx.header("User-Agent").
  • ctx.metode (() Terapkan pada protokol Http, mengembalikan metode permintaan saat dipanggil, sepertiGET, POST, dll.
  • Ctx.body (dalam bahasa Inggris) Terapkan pada permintaan POST dari protokol Http, dan mengembalikan tubuh permintaan saat dipanggil.
  • ctx.setHeader (kunci, nilai) Digunakan pada protokol Http untuk mengatur informasi request header dari pesan respons.
  • ctx.setStatus (kode) Aplikasi untuk protokol Http, mengatur kode status pesan Http. Biasanya, kode status Http ditetapkan di akhir cabang routing. Nilai default adalah 200.
  • ctx.remoteAddr() Terapan pada protokol Http/TCP, mengembalikan alamat klien jarak jauh dan port dalam permintaan saat dipanggil.
  • ctx.localAddr() Terapan pada protokol Http/TCP, mengembalikan alamat lokal dan port layanan saat dipanggil.
  • ctx.upgrade ((websocket) diterapkan pada implementasi protokol Websocket berdasarkan protokol Http, beralihctxobjek konteks ke protokol Websocket; mengembalikan nilai Boolean (benar) jika switch berhasil, dan nilai Boolean (palsu) jika gagal.
  • ctx.read ((timeout_ms) Terapkan pada implementasi protokol Websocket / protokol TCP berdasarkan protokol Http, membaca data koneksi Websocket dan koneksi TCP.readmetode tidak didukung dalam protokol HTTP biasa. Anda dapat menentukan parameter timeouttimeout_msdalam milidetik.
  • ctx.write (s) Dilakukan pada protokol Http/TCP, digunakan untuk menulis data string.JSON.stringify()untuk mengenkode objek JSON ke dalam string dan kemudian menulisnya.WebSocketprotokol, Anda dapat menggunakan metode ini untuk melewati string yang dienkode ke klien.

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

_G

Fungsi ini mengimplementasikan fungsi kamus global yang dapat disimpan. Struktur data adalah tabel KV yang secara permanen disimpan di file database lokal docker.

Data nilai kunci yang disimpan secara permanen dik-vPasangan kunci-nilai. string, nomor, bool, objek, array, nilai nol

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

Parameterkadalah nama kunci dalam pasangan kunci-nilai yang disimpan, dan tidak sensitif huruf besar. k palsu string, nilai nol Parametervadalah nilai kunci dalam pasangan kunci-nilai yang disimpan, yang bisa menjadi data apa pun yang dapatJSONSerial. v palsu string, nomor, bool, objek, array, nilai nol

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 database terpisah untuk setiap perdagangan langsung, data yang disimpan oleh_G()fungsi akan selalu ada jika strategi dimulai kembali atau docker berhenti berjalan._G()Saat menggunakan_G()fungsi untuk mempertahankan data yang disimpan, harus digunakan secara wajar sesuai dengan memori dan ruang hard disk perangkat keras, dan tidak boleh disalahgunakan. Saat menelepon_G()fungsi dalam perdagangan hidup dan tidak ada parameter yang dilewati,_G()fungsi mengembalikanIdsaat ini perdagangan langsung._G()fungsi, parametervdilewatkan sebagai nol untuk menunjukkan penghapusank-vKetika memanggil_G()fungsi, hanya parameterkditeruskan dalam string, dan_G()fungsi mengembalikan nilai kunci yang sesuai dengan parameter yang disimpank. Ketika memanggil_G()fungsi, hanya parameterkdiberikan dalam nilai nol, menunjukkan bahwa semua catatan darik-vkey-value pair dihapus.k-vpasangan kunci-nilai telah disimpan terus menerus,_G()fungsi dipanggil lagi, lulus dalam nama kunci yang telah disimpan terus-menerus sebagai parameterk. Mengirim nilai kunci baru sebagai parametervakan memperbarui ituk-vPasangan kunci-nilai.

{@fun/Global/DBExec DBExec}

_D

Mengkonversi millisecond timestamps atauDateobjek untuk string waktu.

String waktu. string

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

Stempel waktu milidetik atauDateobjek. Stempel waktu palsu Nomor, objek Format string,JavaScriptFormat bahasa default:yyyy-MM-dd hh:mm:ss; PythonFormat bahasa default:%Y-%m-%d %H:%M:%S; C++Format bahasa default:%Y-%m-%d %H:%M:%SAku tidak tahu. fmt palsu string

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

Dapatkan dan cetak string waktu saat ini:

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 waktu adalah 1574993606000, menggunakan konversi kode:

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 parameterfmtberbeda untukJavaScript, Python, danC++bahasa, seperti yang ditunjukkan dalam contoh berikut:

Mengembalikan string waktu saat ini tanpa melewati parameter._D()Fungsi dalamPythonstrategi, Anda perlu menyadari bahwa parameter yang dilewatkan adalah timestamps tingkat kedua (timestamps tingkat milidetik dalam strategi JavaScript dan C ++, di mana 1 detik sama dengan 1000 milidetik)._D()fungsi untuk menganalisis string waktu dengan timestamp yang dapat dibaca dalam perdagangan langsung, Anda perlu memperhatikan zona waktu dan pengaturan waktu dari sistem operasi di mana program docker terletak._D()Fungsi ini menganalisis timestamp ke dalam string waktu yang dapat dibaca tergantung pada waktu dari sistem docker.

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

_N

Formatkan nomor tanda gerak.

Nomor koma mengambang yang diformat sesuai dengan pengaturan presisi. nomor

_N() _N(nomor) _N ((num, presisi)

Nomor tanda mengapung yang perlu diformat. Nomor benar Nomor Pengaturan presisi untuk pemformatan, parameterprecisionadalah bilangan bulat, dan parameterprecisiondefault ke 4. Keakuratan palsu Nomor

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 menghapus nilai setelah3.1415dua tempat desimal 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 mengubah semua N digit ke kiri dari titik desimal ke 0, Anda dapat menulisnya seperti ini:

Parameterprecisionbisa menjadi bilangan bulat positif, bilangan bulat negatif.

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

_C

Coba lagi fungsi untuk toleransi kesalahan antarmuka.

Nilai yang dikembalikan dari fungsi callback saat dijalankan. Semua tipe didukung oleh sistem kecualinilai logis palsudannilai nol.

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

Parameterpfnadalah referensi fungsi, yang merupakanFungsi callbackAku tidak tahu. pfn benar fungsi Parameter untukfungsi callback, mungkin ada lebih dari satu parameterarg. Jenis dan jumlah parameterargtergantung pada parameter dariFungsi callbackAku tidak tahu. arg palsu string, number, bool, object, array, function, semua jenis didukung oleh sistem, seperti nilai nol

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 kesalahan 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 kesalahan:

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

Hal ini juga dapat digunakan untuk toleransi kesalahan fungsi kustom:

Peraturan_C()fungsi akan terus memanggil fungsi yang ditentukan sampai kembali dengan sukses (fungsi yang dirujuk oleh parameterpfnkembalinolataupalsuketika dipanggil akan mencoba memanggil lagipfnMisalnya:_C(exchange.GetTicker). Interval uji ulang default adalah 3 detik, Anda dapat memanggil_CDelay()fungsi untuk mengatur interval percobaan ulang._CDelay(1000)berarti untuk mengubah interval percobaan ulang dari_C()fungsi ke 1 detik. Toleransi kesalahan dapat dilakukan untuk, namun tidak terbatas pada, fungsi berikut:

  • exchange.GetTicker()
  • exchange.GetDepth()
  • exchange.GetTrades()
  • exchange.GetRecords()
  • exchange.GetAccount()
  • exchange.GetOrders()
  • exchange.GetOrder()
  • exchange.GetPositions()Semua dapat dipanggil oleh_C()fungsi untuk toleransi kesalahan._C()fungsi tidak terbatas pada fungsi yang tercantum di atas toleransi kesalahan, parameterpfnadalah referensi fungsi daripada panggilan fungsi. Perhatikan bahwa itu_C(exchange.GetTicker), tidak_C(exchange.GetTicker()).

_Silang

Mengembalikan jumlah titik persimpangan arrayarr1dan arrayarr2.

Jumlah periode silang dari arrayarr1dan arrayarr2Aku tidak tahu. Nomor

_Cross ((arr1, arr2)

Elemen adalah array tipenumberAku tidak tahu. arr1 benar Array Elemen adalah array tipenumberAku tidak tahu. arr2 benar 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 dapat disimulasikan untuk menguji fungsi _Cross ((Arr1, Arr2):

Jika nilai pengembalian_Cross()fungsi adalah angka positif, ini menunjukkan periode penetrasi ke atas, jika ini adalah angka negatif, ini menunjukkan periode penetrasi ke bawah, 0 berarti sama dengan harga saat ini.Analisis dan instruksi penggunaan tentang fungsi bawaan _Cross.

JSONParse

FungsiJSONParse()digunakan untuk menganalisisJSON strings.

JSONobjek. objek

JSONParse (s)

JSONtali. s benar string

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 string dengan nilai besar dapat dianalisis dengan benar, dan akan dianalisis nilai besar sebagai jenis string.JSONParse()fungsi tidak didukung dalam sistem backtest.

Log

Log

Output log.

Catatan ((...msgs)

Parametermsgadalah isi output, dan parametermsgbisa dilewati lebih dari satu. msg palsu string, number, bool, object, array, jenis apapun yang didukung oleh sistem seperti null.

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

Berbagaimsgparameter dapat dilewati:

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@");
}

Ini mendukung pengaturan warna pesan output, jika kita menggunakan pengaturan warna dan push pada saat yang sama, kita perlu untuk mengatur warna pertama dan menggunakan@karakter untuk mengatur 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 mendukung pencetakanbase64gambar yang dikodekan, dimulai dengan`dan berakhir dengan`, misalnya:

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

PeraturanLog()Fungsi mendukung pencetakan langsungPythonItu adalahmatplotlib.pyplotobjek. Selama objek berisisavefigmetode, dapat dicetak langsung dengan menggunakanLogfungsi, misalnya:

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

PeraturanLog()Fungsi ini mendukung pertukaran bahasa.Log()fungsi output teks yang akan beralih ke bahasa yang sesuai secara otomatis berdasarkan pengaturan bahasa pada halaman platform, misalnya:

PeraturanLog()fungsi output pesan log di area log dari live trading atau backtesting sistem, dan log disimpan di database live trading ketika live trading sedang berjalan.Log()fungsi output pesan log yang berakhir dengan@Push ke alamat email, alamat WebHook, dll yang dikonfigurasi diTekan PengaturanPushing pesan tidak didukung olehAlat debug, sistem backtesting. Ada batas frekuensi untuk push pesan. Aturan pembatasan spesifik adalah sebagai berikut: dalam siklus 20 detik perdagangan langsung, hanya pesan push terakhir yang akan dipertahankan dan didorong, dan pesan lain akan disaring dan tidak didorong (output log push oleh fungsi Log akan dicetak dan ditampilkan secara normal di area log). UntukWebHookpush, Anda dapat menggunakan program layanan 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 Pengaturan: http://XXX.XX.XXX.XX:9090/data?data=Hello_FMZAku tidak tahu. Setelah menjalankan tertulisGolangprogram layanan, kita mulai menjalankan strategi live trading, berikut adalah strategi yang ditulis dalamJavaScriptbahasa, strategi berjalan dengan melaksanakanLog()fungsi dan mendorong pesan:

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

Sebuah program layanan yang ditulis dalamGolangbahasa menerima dorongan dan program layanan mencetak pesan:

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

Catat nilai P&L, cetak nilai P&L dan gambarkan kurva pengembalian berdasarkan nilai P&L.

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

Parameterprofitadalah data pendapatan, yang diberikan oleh algoritma desain dan perhitungan dalam strategi. keuntungan benar nomor Parameter diperluas untuk output informasi kebetulan ke log pendapatan,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, jenis apapun yang didukung 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 berakhir dengan karakter&, hanya membuat grafik pendapatan dan tidak mencetak log pendapatan.

{@fun/Log/LogProfitReset LogProfitReset}

LogProfitReset

Hapus semua log pendapatan, grafik pendapatan.

LogProfitReset (() LogProfitReset (tetap)

PeraturanremainParameter digunakan untuk menentukan jumlah entri log (nilai bilangan bulat) yang harus disimpan. tetap palsu nomor

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

Informasi output di bilah status sistem backtesting atau halaman perdagangan langsung.

LogStatus ((...msgs)

Parametermsgadalah isi output, dan parametermsgbisa dilewati lebih dari satu. msg palsu string, number, bool, object, array, jenis apapun yang didukung 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");
}

Ini mendukung pengaturan warna konten 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 di bilah 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() + "`");
}

Ini mendukung untuk merancang kontrol tombol di bilah status (struktur tombol 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() + "`");
}

Atur fungsi deskripsi dari tombol status bar (struktur tombol 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, membangun fungsi interaksi tombol bilah status (struktur tombol 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 masukan juga didukung ketika membangun tombol bar status untuk interaksi, dan perintah interaksi ditangkap olehGetCommand()fungsi akhirnya.inputitem (struktur tombol lama) untuk struktur data kontrol tombol di bilah status, misalnya menambahkan"input": {"name": "number of open positions", "type": "number", "defValue": 1}untuk{"type": "button", "cmd": "open", "name": "open position"}akan menyebabkan popup dengan kontrol kotak input muncul ketika tombol diklik (nilai default dalam kotak input adalah 1, yang merupakan data yang ditetapkan olehdefValueAnda dapat memasukkan data yang akan dikirim bersama dengan perintah tombol. Sebagai contoh, ketika kode tes berikut berjalan, setelah mengklik tombol "open position, jendela popup dengan kotak input muncul. Masukkan 111 di kotak input dan klik OK.GetCommand()fungsi kemudian akan menangkap pesan: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);
    }
}

Ini mendukung untuk kontrol tombol dikelompokkan (struktur tombol lama), secara fungsional konsisten dengantombol bar status yang mendukung entri dataPerintah interaktif pada akhirnya ditangkap olehGetCommand()Perbedaannya adalah bahwa dengan"group"pengaturan bidang, ketika tombol diklik untuk memicu interaksi, dialog yang muncul di halaman berisi satu setkelompokdari kontrol input yang diatur untuk memasukkan sekelompok data sekaligus. Beberapa hal yang perlu diperhatikan tentang"group"bidang dalam struktur kontrol tombol bilah status dan kontrol tombol kelompok:

  • Peraturantypeproperti dalam kelompok hanya mendukung empat jenis berikut, dandefValueproperty adalah nilai default. selected: Kontrol dropdown box yang menggunakan|simbol untuk memisahkan setiap opsi di kotak dropdown saat ditetapkan. nomor: Kontrol kotak input numerik. string: Kontrol kotak input string. boolean: Kontrol kotak centang, diperiksa untuk (Boolean) true, tidak diperiksa untuk (Boolean) false.
  • Kontrol pada pengaturan ketergantungan dukungan input interaktif: Misalnya, dalam contoh berikut:"name": "tradePrice@orderType==1"pengaturan, yang membuatperdaganganHargakontrol input hanya tersedia ketikaorderJeniskontrol drop-down dipilih sebagaiPerintah yang sedang menunggu.
  • Dukungan nama kontrol bilingual untuk input interaktif For example, in the following example: description : dengan satu cara order type setting, use|simbol untuk memisahkan isi deskripsi dalam bahasa Cina dan Inggris.
  • name, descriptiondalam kelompok danname, descriptiondalam struktur tombol tidak memiliki definisi yang sama meskipun mereka memiliki nama bidang yang sama. Definisi darinamedalam kelompok juga berbeda dari definisinamedalam input.
  • Ketika kontrol tombol kelompok diaktifkan, konten interaksi dikirim dalam format nilai kolom cmd tombol dan data terkait kolom kelompok, seperti output dariLog("cmd:", cmd)pernyataan dalam contoh uji berikut:cmd: open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}, yaitu, apa yang dikembalikan olehGetCommand()fungsi ketika terjadi interaksi:open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}.
  • Peraturantypeproperti kontrol tombol hanya mendukung:"button"Aku tidak tahu. Kontrol tombol yang mendukung input data, yaitu kontrol denganinputset properti,typeproperti dalam informasi konfigurasi dariinputbidang mendukung beberapa jenis kontrol. Perhatikan contoh-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);
    }
}

Ketika tombol status bar kelompok kontrol (diimplementasikan dengan mengaturgroup(diimplementasikan dengan mengaturinputfield) diklik untuk memicu interaksi (struktur tombol lama), kontrol kotak drop-down di kotak dialog yang muncul di halaman juga mendukung beberapa pilihan. Contoh berikut menunjukkan cara merancang kontrol kotak drop-down dengan beberapa pilihan pemilihan:

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 tombol terbaru untuk membangun tombol dalam tabel bilah status. Saat mengklik tombol untuk memicu interaksi, jendela pop-up multi-kontrol akan muncul. Untuk rincian lebih lanjut, silakan lihat:Panduan Pengguna - Kontrol Interaktif di 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() + "`");
}

Merger horizontal sel dalam tabel 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 vertikal menggabungkan sel-sel dalam tabel 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 paginasi tabel bilah 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 menampilkan tabel dalam halaman, beberapa tabel juga dapat ditampilkan dalam urutan 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() + "`");
}

Dukungan untuk mengatur mode gulung horizontal dan vertikal dari tabel bilah status.scrollatribut untuk"auto", ketika jumlah baris vertikal dari tabel bar status melebihi 20 baris, isi akan di geser.scrollatribut dapat digunakan untuk meringankan masalah keterlambatan menulis sejumlah besar data di bilah status selama perdagangan langsung.

Hasil informasi dariLogStatus()fungsi ketika perdagangan langsung berjalan tidak disimpan ke basis data perdagangan langsung, tetapi hanya memperbarui konten bilah status perdagangan langsung saat ini. PeraturanLogStatus()Fungsi mendukung pencetakanbase64gambar yang dikodekan, dimulai dengan`dan berakhir dengan`Misalnya:LogStatus("`data:image/png;base64,AAAA`")Aku tidak tahu. PeraturanLogStatus()Fungsi mendukung melewatimatplotlib.pyplotobjek langsung kePython, selama objek berisisavefigmetode, itu dapat dilewati sebagai parameter untukLogStatus()fungsi, misalnya:

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

Ketika strategi berjalan perdagangan langsung, jika Anda pergi melalui sejarah di halaman perdagangan langsung, bilah status akan tidur dan berhenti memperbarui. hanya data bilah status akan diperbarui ketika log berada di halaman pertama.base64gambar terenkode di bilah status, dan juga mendukung outputbase64Gambar yang dienkode dalam tabel yang ditampilkan di bilah status. Karena data string gambar yang dienkode umumnya sangat panjang, contoh kode tidak ditampilkan.

{@fun/Global/GetCommand GetCommand}

EnableLog

Aktifkan atau matikan pencatatan informasi pesanan.

EnableLog (diaktifkan)

JikaenableParameter diatur ke nilai palsu, misalnyafalse, order log (yaitu log yang dihasilkan oleh fungsi sepertiexchange.Buy()) tidak dicetak dan tidak ditulis ke database perdagangan langsung. Memungkinkan benar 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}

Grafik

Sesuaikan fungsi gambar grafik.

Objek grafik. objek

Grafik (pilihan)

Peraturanoptionsparameter adalah konfigurasi grafik.Chart()parameter fungsioptionsadalahJSONdapat diserialisasikanHighStocksparameter untukHighcharts.StockChart. Sebuah tambahan__isStockatribut ditambahkan di atas parameter asli, dan jika__isStock:falseJika data yang ditampilkan di atas adalah data yang ditampilkan di atas, maka data tersebut akan ditampilkan sebagai grafik normal.__isStockatribut ditetapkan ke nilai palsu misalnyafalse, yaitu grafik yang digunakan adalahHighchartsJika__isStockatribut ditetapkan ke nilai benar misalnyatrue, yaitu grafik yang digunakan adalahHighstocksgrafik (secara default)__isStockadalah benar misalnyatrue) Anda dapat menanyakanPerpustakaan grafik HighStocksAku tidak tahu. pilihan benar objek, array 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 gambar multi-chart:

  • extension.layoutatribut Jika atribut ditetapkan dengan nilai single, grafik tidak akan ditumpuk (tidak ditampilkan sebagai tab), tetapi akan ditampilkan secara terpisah (dibalut).
  • extension.heightatribut Atribut ini digunakan untuk mengatur tinggi grafik, baik sebagai nilai numerik, atau sebagai 300px.
  • extension.colatribut Atribut ini digunakan untuk mengatur lebar grafik, lebar halaman dibagi menjadi 12 sel, set 8, yaitu, grafik menempati 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 gambar sederhana:

// 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 gambar kurva 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 grafik hibrida:

// 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);

Bagan tipepieadalah grafik tanpa garis waktu, dan Anda perlu memperbarui konfigurasi grafik langsung saat memperbarui data.c.update(chartCfg)setelah memperbarui data, sebagai berikut:

PeraturanChart()fungsi mengembalikan objek grafik yang memiliki 4 metode:add(), reset(), update(), del().

    1. Peraturanupdate()metode: Peraturanupdate()Metode ini dapat memperbarui informasi konfigurasi grafik. Parameter dari metode ini adalah objek konfigurasi grafik (JSON).
    1. Peraturandel()metode: Peraturandel()Metode ini dapat menghapus seri data dari indeks yang ditentukan berdasarkan parameter seri yang dilewati.
    1. Peraturanadd()metode: Peraturanadd()metode dapat menulis data ke grafik, dengan parameter berikut dalam urutan:
    • series: digunakan untuk mengatur indeks seri data, yang merupakan bilangan bulat.
    • data: digunakan untuk mengatur data tertentu yang akan ditulis, itu adalah array.
    • index(opsional): digunakan untuk mengatur indeks data, ini adalah bilangan bulat.-1mengacu pada data terakhir dalam set data. Misalnya, ketika menggambar garis, mengubah data pada titik terakhir garis:chart.add(0, [1574993606000, 13.5], -1), yaitu, mengubah data pada titik pertama penultimate grafikseries[0].dataAku tidak tahu. Peraturanindexparameter tidak ditetapkan, yang berarti bahwa data ditambahkan ke titik terakhir dari seri data saat ini.
    1. Peraturanreset()metode: Peraturanreset()metode digunakan untuk mengosongkan data grafik.reset()Metode dapat mengambil parameterremainuntuk menentukan jumlah entri untuk menyimpan.remainDioperasikan untuk menghapus semua data.

{@fun/Log/KLineChart KLineChart}

KLineChart

Fungsi ini digunakan untuk menggambar kustom pada strategi runtime menggunakan metode menggambar mirip denganPine language.

Objek grafik.KLineChart()fungsi mengembalikan objek grafik dengan beberapa metode, di antaranya Anda perlu memperhatikanbegin()danclose()Operasi menggambar harus dimulai denganbegin()panggilan fungsi dan berakhir denganclose()panggilan fungsi saat melintasi data KLine untuk melakukan operasi gambar. objek

KLineChart (opsi)

PeraturanoptionsParameter adalah konfigurasi grafik. pilihan benar objek, array 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 kontrol grafik diperlukan untuk menggambar di area gambar khusus strategi, gunakanKLineChart()fungsi untuk membuat objek.KLineChart()fungsi adalah struktur konfigurasi grafik, yang digunakan dalam kode referensi sederhana:{overlay: true}. Struktur konfigurasi grafik ini hanya menetapkan konten gambar yang akan di output pada grafik utama.overlayditetapkan pada nilai false, misalnyafalseJika Anda perlu menentukan fungsi gambar untuk menggambar pada bagan utama, Anda juga dapat menentukan parameteroverlaysebagai nilai benar dalam panggilan fungsi tertentu, misalnya: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 antarmuka gambar dariPinebahasa yang didukung dalam operasi gambar adalah:barcolor, yang mengatur warna garis K.

barcolor ((warna, offset, dapat diedit, show_last, judul, tampilan) parameter tampilan opsional: 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 garis K dengan warna yang ditentukan.

bgcolor ((warna, offset, dapat diedit, show_last, judul, tampilan, overlay) parameter tampilan opsional: 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, memetakan serangkaian data pada grafik.

plot ((seri, judul, warna, lebar baris, gaya, trackprice, histbase, offset, join, editable, show_last, display) parameter gaya opsional: stepline_diamond, stepline, cross, areabr, area, circles, columns, histogram, linebr, line parameter tampilan opsional: 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 antara dua plot atauhlinedengan warna yang disediakan.

mengisi (line1, line2, warna, judul, dapat diedit, mengisi celah, menampilkan) parameter tampilan opsional: tidak ada, semua

SejakJavaScriptbahasa tidak dapat menentukan parameter masuk berdasarkan nama parameter fungsi formal, untuk memecahkan masalah ini, Anda dapat menggunakan{key: value}struktur untuk menentukan parameter yang akan dilewatkan ke nama parameter formal tertentu. Misalnya, kode referensi menggunakan{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)'}menentukancolorparameter darifillfungsi. Jika Anda perlu menentukan beberapa parameter dengan nama parameter bentuk berturut-turut, Anda dapat menggunakan{key1: value1, key2: value2, key3: value3}Aku tidak tahu. Misalnya, 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'}Aku tidak tahu. Untuk nilai warna, Anda dapat mengaturnya 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 horizontal disajikan pada tingkat harga tetap tertentu.

hline ((harga, judul, warna, gaya baris, lebar baris, dapat diedit, tampilan) Parameter gaya garis bersifat opsional: bergaris-garis, bertitik, padat parameter tampilan opsional: tidak ada, semua

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

plotarrow, menggambar panah ke atas dan ke bawah pada grafik.

Plotarrow ((seri, judul, colorup, colorordown, offset, minheight, maxheight, editable, show_last, display) parameter tampilan opsional: tidak ada, semua

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

plotshape, menggambar bentuk visual pada grafik.

plotshape ((seri, judul, gaya, lokasi, warna, offset, teks, textcolor, dapat diedit, ukuran, show_last, display) parameter gaya opsional: diamond, square, label_down, label_up, arrow_down, arrow_up, circle, flag, triangle_down, triangle_up, cross, xcross parameter lokasi bersifat opsional: bar atas, bar bawah, top, bottom, absolute parameter ukuran adalah opsional: 10px, 14px, 20px, 40px, 80px, membandingkan size.tiny, size.small, size.normal, size.large, size.huge dalam bahasa Pine.size.autoadalah ukuran kecil. parameter tampilan opsional: tidak ada, semua

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

plotchar, menggambar bentuk visual pada grafik menggunakan karakter Unicode tertentu.

plotchar ((seri, judul, char, lokasi, warna, offset, teks, textcolor, editable, size, show_last, display) parameter lokasi bersifat opsional: abovebar, belowbar, top, bottom, absolute parameter ukuran adalah opsional: 10px, 14px, 20px, 40px, 80px, membandingkan size.tiny, size.small, size.normal, size.large, size.huge dalam bahasa Pine.size.autoadalah ukuran kecil. parameter tampilan opsional: 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, menggambar grafik garis K pada grafik.

plotcandle ((buka, tinggi, rendah, dekat, judul, warna, wickcolor, editable, show_last, bordercolor, display) parameter tampilan opsional: 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 sinyal beli dan jual di sini.

sinyal ((arah, harga, qty, id) Parameter long diteruskan untuk menunjukkan arah transaksi, Anda dapat memilih long, closelong, short, closeshort.bar.Highadalah posisi sumbu Y dari sinyal penanda. Parameter 1.5 yang dilewati menunjukkan jumlah transaksi sinyal. Parameter keempat dapat dilewati untuk menggantikan konten teks default yang ditarik, dan teks default dari penanda sinyal yang ditarik adalah arah transaksi, misalnya closelong.

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

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

Reset (tetap) Peraturanreset()metode dapat mengambil satu parameter,remain, untuk menentukan jumlah data yang harus disimpan.remainberarti menghapus semua data.

Strategi gambar kustom hanya dapat menggunakan salah satu caraKLineChart()fungsi atauChart()Untuk beberapa pengaturan warna dan gaya yang digunakan dalamKLineChart()panggilan fungsi, silakan lihatGunakan fungsi KLineChart untuk membuat desain strategi gambar lebih mudah.

{@fun/Log/Chart Chart}

LogReset

Bersihkan lognya.

LogReset (tetap)

PeraturanremainParameter digunakan untuk mengatur jumlah entri log terbaru yang harus disimpan. tetap palsu nomor

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

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

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

LogVacuum

Digunakan untuk merebut kembali ruang penyimpanan yang diduduki olehSQLiteketika menghapus data setelah memanggilLogReset()Fungsi untuk menghapus log.

LogVacuum ((()

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

Alasannya adalah bahwaSQLitetidak merebut kembali ruang yang diduduki saat menghapus data, dan perlu dijalankanVACUUMUntuk membersihkan tabel dan membebaskan ruang. file move operasi terjadi ketika fungsi ini dipanggil, dan keterlambatan yang besar, sehingga disarankan untuk memanggil pada interval waktu yang tepat.

{@fun/Log/LogReset LogReset}

console.log

Ini digunakan untuk output informasi debugging di kolom debug information di halaman perdagangan langsung.123456, yangconsole.logfungsi output debugging informasi pada halaman perdagangan hidup, dan pada saat yang sama, membuat file log dengan ekstensi.logdan menulis informasi debugging di/logs/storage/123456/dalam direktori docker yang termasuk perdagangan langsung, dengan awalan nama filestdout_.

konsol.log ((...msgs)

Parametermsgadalah isi output, dan parametermsgbisa dilewati lebih dari satu. msg palsu string, number, bool, object, array, null dan tipe lain yang didukung oleh sistem.

function main() {
    console.log("test console.log")
}
# Not supported
// Not supported
  • HanyaJavaScriptbahasa mendukung fungsi ini.
  • Fungsi ini hanya didukung oleh perdagangan langsung, tetapi tidak oleh Debugging Tools atau Backtesting System.
  • Output objek dikonversi ke string[object Object], jadi cobalah untuk output sebanyak mungkin informasi yang dapat dibaca.

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

console.error

Digunakan untuk output kesalahan di kolom Debug message pada halaman perdagangan langsung.123456, yangconsole.errorfungsi membuat file log dengan ekstensi.logdalam/logs/storage/123456/direktori dari docker di mana perdagangan hidup milik, dan menulis output kesalahan dengan awalanstderr_.

konsol.kesalahan(...msgs)

Parametermsgadalah isi output, dan parametermsgbisa dilewati lebih dari satu. msg palsu string, number, bool, object, array, null dan tipe lain yang didukung oleh sistem.

function main() {
    console.error("test console.error")
}
# Not supported
// Not supported
  • HanyaJavaScriptbahasa mendukung fungsi ini.
  • Fungsi ini hanya didukung oleh perdagangan langsung, tetapi tidak oleh Debugging Tools atau Backtesting System.
  • Output objek dikonversi ke string[object Object], jadi cobalah untuk output sebanyak mungkin informasi yang dapat dibaca.

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

Pasar

exchange.GetTicker

Dapatkan struktur {@struct/Ticker Ticker} dari spot atau kontrak yang sesuai dengan pasangan perdagangan saat ini, kode kontrak, yaitu data ticker.GetTicker ()fungsi adalah anggota fungsi dari pertukaran objek {@var/EXCHANGE exchange}, penggunaanexchangeFungsi anggota objek (metode) hanya terkait denganexchange, dan tidak akan diulang dalam dokumen.

Peraturanexchange.GetTicker()fungsi mengembalikan struktur {@struct/Ticker Ticker} ketika permintaan data berhasil, dan mengembalikan nilai nol ketika permintaan data gagal. {@struct/Ticker Ticker}, nilai nol

pertukaran.GetTicker() pertukaran.GetTicker (simbol)

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak yang sesuai dengan data {@struct/Ticker Ticker} yang diminta. Jika parameter ini tidak dilewati, data pasar dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default. Saat meneleponexchange.GetTicker(symbol)fungsi,exchangeJika Anda perlu meminta data pasar dengan mata uang denominasi sebagai USDT dan mata uang perdagangan sebagai BTC, parametersymboladalah:"BTC_USDT", dan formatnya adalah format pasangan perdagangan yang didefinisikan oleh platform FMZ. Saat meneleponexchange.GetTicker(symbol)fungsi,exchangeJika Anda perlu meminta data pasar kontrak abadi standar U BTC, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter .. Saat meneleponexchange.GetTicker(symbol)fungsi,exchangeJika Anda perlu meminta data pasar dari kontrak opsi standar U BTC, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter ..

lambang palsu string

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 obyek pertukaran berjangka (yaitu,exchangeatauexchanges[0]), Anda perlu mengatur kode kontrak menggunakanexchange.SetContractType()fungsi sebelum memanggil fungsi ticker, yang tidak akan diulang.

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 pasar untuk simbol tertentu (simbol spot).

PeraturanTickerdata yang dikembalikan olehexchange.GetTicker()fungsi dalam sistem backtesting.HighdanLowadalah nilai simulasi, diambil dari satu jual dan membeli satu dari pasar pada saat itu.Tickerdata yang dikembalikan olehexchange.GetTicker()Di manaHighdanLownilai didasarkan pada data yang dikembalikan oleh pertukaran terkapasTickantarmuka, yang mencakup harga tertinggi dan terendah dalam periode tertentu (biasanya periode 24 jam). Bursa yang tidak mendukungexchange.GetTicker()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
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} dari spot atau kontrak yang sesuai dengan pasangan perdagangan yang saat ini ditetapkan, kode kontrak, yaitu data buku pesanan.

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

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

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak yang sesuai dengan data {@struct/Depth Depth} yang diminta. Jika parameter ini tidak dilewati, data buku pesanan dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default.exchange.GetDepth(symbol)fungsi,exchangeJika Anda perlu meminta untuk mendapatkan data buku pesanan dengan mata uang denominasi sebagai USDT dan mata uang transaksi sebagai BTC, parametersymboladalah:"BTC_USDT", dan formatnya adalah format pasangan perdagangan yang didefinisikan oleh platform FMZ.exchange.GetDepth(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan kontrak abadi standar U BTC, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter ..exchange.GetDepth(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan dari kontrak opsi standar U BTC, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. simbol palsu string

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);
}

Tesexchange.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);
}

Ketika dikonfigurasiexchangeobyek adalah obyek bursa berjangka, menggunakansymbolparameter untuk meminta data buku pesanan dari simbol tertentu (simbol futures).

Dalam sistem backtesting, data untuk setiap kelas dikembalikan olehexchange.GetDepth()fungsi saat menggunakanSimulasi TickPada sistem backtesting, data yang dikembalikan olehexchange.GetDepth()fungsi saat menggunakanBenar-benar Tickbacktesting adalah tingkat kedua yang mendalam snapshot.

{@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} dari spot atau kontrak yang sesuai dengan pasangan perdagangan yang saat ini ditetapkan, kode kontrak, yaitu data transaksi pasar.

Peraturanexchange.GetTrades()fungsi mengembalikan array struktur {@struct/Trade Trade} jika permintaan data berhasil, dan mengembalikan nilai nol jika permintaan data gagal. {@struct/Trade Trade} array, nilai nol

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

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak yang sesuai dengan data array {@struct/Trade Trade} yang diminta. Jika parameter ini tidak dilewati, data catatan transaksi terbaru dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default.exchange.GetTrades(symbol)fungsi,exchangeJika Anda perlu meminta untuk mendapatkan data buku pesanan dengan mata uang denominasi sebagai USDT dan mata uang perdagangan sebagai BTC, parametersymboladalah:"BTC_USDT", dan formatnya adalah format pasangan perdagangan yang didefinisikan oleh platform FMZ.exchange.GetTrades(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan kontrak abadi standar U BTC, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter ..exchange.GetTrades(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan dari kontrak opsi standar U BTC, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. simbol palsu string

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);
}

Ujilahexchange.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);
}

Ketika dikonfigurasiexchangeobyek adalah obyek bursa berjangka, menggunakansymbolparameter untuk meminta data catatan transaksi pasar untuk simbol tertentu (simbol berjangka).

exchange.GetTrades()fungsi untuk mendapatkan pasangan perdagangan saat ini, sejarah transaksi pasar (bukan mereka sendiri) yang sesuai dengan kontrak. Beberapa bursa tidak mendukung fungsi ini, dan data spesifik yang dikembalikan adalah berapa banyak dari rentang catatan transaksi tergantung pada bursa dan perlu ditangani sesuai dengan situasi tertentu.exchange.GetRecords ()fungsi mengembalikan urutan data yang sama, yaitu, elemen terakhir array adalah data yang paling dekat dengan waktu saat ini. Peraturanexchange.GetTrades()fungsi mengembalikan array kosong saat menggunakanSimulasi Tickdata yang dikembalikan oleh sistem backtesting.exchange.GetTrades()fungsi saat digunakanBenar-benar Tickbacktesting dalam sistem backtesting adalah data order flow snapshot, yaitu array struktur {@struct/Trade Trade}. Bursa yang tidak mendukungexchange.GetTrades()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
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} dari spot atau kontrak yang sesuai dengan pasangan perdagangan yang saat ini ditetapkan, kode kontrak, yaitu data K-line.

Peraturanexchange.GetRecords()fungsi mengembalikan array struktur {@struct/Record Record} ketika permintaan data berhasil, dan mengembalikan nilai nol ketika permintaan data gagal. Array, nilai nol

pertukaran.GetRecords ((() pertukaran.GetRecords (simbol) exchange.GetRecords (simbol, titik) exchange.GetRecords ((simbol, periode, batas) Pertukaran.GetRecords (periode) exchange.GetRecords ((periode, batas)

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak yang sesuai dengan data array {@struct/Record Record} yang diminta. Jika parameter ini tidak dilewati, data K-line dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default.exchange.GetRecords(symbol)fungsi,exchangeJika Anda perlu meminta untuk mendapatkan data dengan mata uang denominasi sebagai USDT dan mata uang transaksi sebagai BTC, parametersymboladalah:"BTC_USDT", dan formatnya adalah format pasangan perdagangan yang didefinisikan oleh platform FMZ.exchange.GetRecords(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan kontrak abadi standar U BTC, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter ..exchange.GetRecords(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan dari kontrak opsi standar U BTC, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. simbol palsu string Parameterperiodmenentukan periode data garis K yang diminta, misalnya: {@var/PERIOD/PERIOD_M1 PERIOD_M1}, {@var/PERIOD/PERIOD_M5 PERIOD_M5}, {@var/PERIOD/PERIOD_M15 PERIOD_M15}, dll. Nilai parameterperiodJika parameter ini tidak dilewati, periode data K-line yang diminta secara default adalah periode K-line default dari konfigurasi real-time/backtest strategi saat ini. periode palsu nomor Parameterlimitdigunakan untuk menentukan panjang data K-line yang diminta. Jika parameter ini tidak dilewatkan, panjang permintaan default adalah jumlah maksimum bar K-line yang diminta pada saat antarmuka K-line pertukaran. Parameter ini dapat menyebabkan paging untuk menanyakan data K-line pertukaran, dan konsumsi waktu panggilan fungsi akan meningkat selama permintaan paging. batas palsu nomor

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 periode 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 garis K 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);
}

Ketika dikonfigurasiexchangeobyek adalah obyek bursa berjangka, menggunakansymbol, period, danlimitparameter untuk meminta data K-line dari produk tertentu (produk masa depan).

Periode K-line default dapat diatur di halaman backtest dan real trading.exchange.GetRecords()fungsi, data K-line yang sesuai dengan periode parameter tersebut akan diperoleh. Jika tidak ada parameter yang ditentukan ketika fungsi dipanggil, data K-line yang sesuai akan dikembalikan sesuai dengan periode K-line yang ditetapkan dalam backtest dan parameter pasar nyata. Nilai yang dikembalikan adalah array dariRecordstruktur, data K-line yang dikembalikan akan terkumpul dari waktu ke waktu, batas atas bar K-line terkumpul dipengaruhi olehexchange.SetMaxBarLen()setting fungsi. Batas default adalah 5000 bar ketika tidak diatur. Ketika data K-line mencapai batas akumulasi bar K-line, akan diperbarui dengan menambahkan bar K-line dan menghapus bar K-line tertua (misalnya antrian masuk/keluar). Beberapa pertukaran tidak menyediakan antarmuka K-line, sehingga docker mengumpulkan data catatan transaksi pasar (Tradearray terstruktur) secara real time untuk menghasilkan K-line. Jika antarmuka K-line pertukaran mendukung pertanyaan paging, beberapa permintaan API akan dibuat ketika memanggilexchange.SetMaxBarLen()fungsi untuk mengatur panjang K-line yang lebih besar. Ketikaexchange.GetRecords()fungsi dipanggil pada awalnya, jumlah batang K-line yang diperoleh berbeda antara backtesting dan perdagangan nyata: - Sistem backtesting akan memperoleh sejumlah batang K-line sebelum dimulainya rentang waktu backtesting sebelumnya (default adalah 5000, pengaturan sistem backtesting dan jumlah data akan mempengaruhi jumlah akhir yang dikembalikan), sebagai data K-line awal. - Jumlah batang K-line yang diperoleh selama perdagangan sebenarnya didasarkan pada jumlah maksimum data yang dapat diperoleh dari antarmuka K-line dari bursa. Peraturanperiodparameter diatur menjadi 5, yang merupakan permintaan untuk mendapatkan data K-line dengan periode 5 detik.periodParameter tidak habis dibagi 60 (yaitu, periode yang diwakili tidak habis dibagi menit).exchange.GetTrades()untuk memperoleh data catatan transaksi dan mensintesis data K-line yang diperlukan.periodparameter dibagi 60, maka data garis K yang diperlukan disintesis menggunakan minimal data garis K 1 menit (jika memungkinkan, data garis K yang diperlukan disintesis menggunakan periode yang lebih besar). Simulasi level backtesting dalam sistem backtesting membutuhkan pengaturan periode K-line yang mendasari (ketika sistem backtesting mensimulasikan level backtesting, data K-line yang sesuai digunakan untuk menghasilkan data Tick sesuai dengan periode K-line yang mendasari). PeraturanC++bahasa memiliki contoh kode berikut jika Anda perlu membangun data K-line 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 mendukungexchange.GetRecords()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
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 periode K-line yang ditetapkan pada halaman situs web platform FMZ Quant Trading saat backtesting dan menjalankan strategi dalam perdagangan langsung, yaitu periode K-line default yang digunakan saat memanggilexchange.GetRecords()fungsi tanpa melewati parameter.

Periode garis K dalam detik, nilai bulat dalam detik. Nomor

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 exchange.GetRecords}

exchange.SetMaxBarLen

Tetapkan panjang maksimum garis K.

pertukaran.SetMaxBarLen ((n)

Parameterndigunakan untuk menentukan panjang garis K maksimum. n benar Nomor

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 runtime strategi cryptocurrency:

  • Berpengaruh pada jumlah batang K-line (Bars) yang diperoleh pada panggilan pertama.
  • Mempengaruhi jumlah maksimum batang K-line (Bars).

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

exchange.GetRawJSON

Dapatkan konten asli kembali oleh terakhirrestpermintaan untuk objek pertukaran saat ini ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).

Data respons untukrestpermintaan. string

exchange.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 ini tidak didukung oleh strategi dalam trading.C++ language.

{@var/EXCHANGE pertukaran}

exchange.GetRate

Dapatkan nilai tukar yang saat ini ditetapkan untuk objek pertukaran.

Nilai saat ini dari nilai tukar objek pertukaran. Nomor

exchange.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 nilai tukar,exchange.GetRate()fungsi mengembalikan nilai tingkat default 1. Artinya, data yang terkait dengan mata uang yang ditampilkan saat ini (quoteCurrency) belum dikonversi. Jika nilai nilai tukar telah ditetapkan menggunakanexchange.SetRate(), misalnya,exchange.SetRate(7)Kemudian semua informasi harga, seperti penawaran, kedalaman, dan harga pesanan yang diperoleh melaluiexchangeobjek pertukaran akan dikonversi dengan mengalikan dengan nilai tukar yang ditetapkan7Aku tidak tahu. Jikaexchangesesuai dengan pertukaran dengan USD sebagai mata uang denominasi, setelah panggilanexchange.SetRate(7), semua harga di pasar langsung akan dikonversi ke harga yang dekat dengan CNY dengan mengalikan7Pada titik ini, nilai nilai tukar yang diperoleh dengan menggunakanexchange.GetRate()adalah7.

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

exchange.SetData

Peraturanexchange.SetData()Fungsi digunakan untuk mengatur data yang dimuat saat strategi berjalan.

Panjang string setelah parametervalueKode JSON. Nomor

exchange.SetData ((kunci, nilai)

Nama pengumpulan data. kunci benar string Data yang akan dimuat olehexchange.SetData()Struktur data adalah sama dengan format data yang diminta olehexchange.GetData()fungsi saat meminta data eksternal, yaitu:"schema": ["time", "data"]Aku tidak tahu. nilai benar 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);
    }
}

Hal ini mengharuskan bahwa data untuk parametervalueharus dalam format yang sama dengandataAnda dapat melihat bahwa timestamp1579622400000sesuai dengan waktu2020-01-22 00:00:00, dan bahwa ketika program strategi dijalankan setelah waktu ini, memanggilexchange.GetData()fungsi untuk mendapatkan data sebelum data timestamp berikutnya1579708800000, yaitu, waktu2020-01-23 00:00:00Apa yang kau dapatkan adalah[1579622400000, 123]isi data tersebut, saat program terus berjalan, waktu berubah, dan sebagainya untuk mendapatkan item data secara item. dalam contoh berikut, pada saat runtime (backtesting atau live trading), momen saat ini mencapai atau melebihi timestamp1579795200000, yangexchange.GetData()fungsi dipanggil dan nilai balik adalah:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}. "Time":1579795200000sesuai dengan1579795200000dalam data[1579795200000, ["abc", 123, {"price": 123}]]. "Data":["abc", 123, {"price": 123}]sesuai dengan data["abc", 123, {"price": 123}]]dalam[1579795200000, ["abc", 123, {"price": 123}]].

Data yang dimuat dapat berupa indikator ekonomi, data industri, indikator yang relevan, dll, yang digunakan untuk penilaian kuantitatif strategi dari semua informasi yang dapat diukur.

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

exchange.GetData

Peraturanexchange.GetData()fungsi digunakan untuk mendapatkan data dimuat olehexchange.SetData()fungsi atau disediakan oleh tautan eksternal.

Catatan dalam pengumpulan data. objek

exchange.GetData (kunci) pertukaran.GetData (kunci, waktu habis)

Nama pengumpulan data. kunci benar string Digunakan untuk mengatur cache timeout dalam milidetik. Default ke satu menit cache timeout untuk perdagangan hidup. timeout palsu nomor

/*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 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);
    }
}

Ini mendukung untuk meminta data melalui tautan eksternal, 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 catatan dalam tubuh data yang dimuat, yang ditetapkan pada["time", "data"]yang sesuai dengan format data entri per entri dalamdataatribut. Apa yang disimpan didataatribut adalah tubuh data, dengan setiap entri yang terdiri dari timestamp tingkat milidetik dan isi data (yang bisa menjadi data yang dapat dienkode JSON). Program layanan untuk pengujian, 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 tanggapan program pada saat menerima permintaan:

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

Kode strategi uji:

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"));
}

Metode panggilan untuk mendapatkan data dari tautan eksternal.

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 kueri yang dibuat di platformdata data, meminta bahwa format data jawaban adalah (harus memiliki waktu, bidang data yang dijelaskan dalam skema):

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

Bidang data adalah isi data yang diperlukan, dan data dalam bidang data harus sama dengan apa yang disepakati dalam schema.exchange.GetData()fungsi dipanggil, objek JSON dikembalikan, misalnya:{"Time":1579795200000, "Data":"..."}.

Dapatkan data sekaligus untuk backtesting dan cache satu menit data untuk perdagangan langsung. dalam sistem backtesting, ketika meminta data menggunakan antarmuka akses, sistem backtesting secara otomatis menambahkanfrom(dicap waktu dalam detik),to(timestamped dalam detik) untuk permintaan, parameter sepertiperiod(periode garis K yang mendasari, bertanda waktu dalam milidetik) digunakan untuk menentukan kerangka waktu di mana data akan diperoleh.

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

exchange.GetMarkets

Peraturanexchange.GetMarkets()fungsi digunakan untuk mendapatkan informasi pasar pertukaran.

Kamus yang berisi 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 ke obyek bursa berjangka:

/*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 obyek pertukaran berjangka untuk memanggilexchange.GetMarkets()fungsi dalam sistem backtesting. Sebelum memanggil fungsi pasar manapun, GetMarkets hanya mengembalikan data pasar dari pasangan perdagangan default saat ini. Setelah memanggil fungsi pasar, ia mengembalikan data pasar dari semua varietas yang diminta. Anda dapat merujuk pada contoh uji berikut:

Peraturanexchange.GetMarkets()fungsi mengembalikan kamus dengan kunci bernama nama varietas perdagangan, dan untuk spot fix yang diformat sebagai pasangan perdagangan, misalnya:

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

Untuk bursa kontrak berjangka, karena mungkin ada beberapa kontrak untuk varietas yang sama, misalnyaBTC_USDTperdagangan pasangan, ada kontrak abadi, kontrak triwulanan, dan sebagainya.exchange.GetMarkets()fungsi mengembalikan kamus dengan nama kunci pasangan dikombinasikan dengan kode kontrak, misalnya:

{
    "BTC_USDT.swap" : {...},     // The key value is the Market structure
    "BTC_USDT.quarter" : {...}, 
    "LTC_USDT.swap" : {...},
    ...
}
  • Peraturanexchange.GetMarkets()Fungsi mendukung perdagangan langsung, sistem backtesting.
  • Peraturanexchange.GetMarkets()fungsi mengembalikan informasi pasar hanya untuk varietas yang diperdagangkan secara online di bursa.
  • Peraturanexchange.GetMarkets()fungsi tidak mendukung kontrak opsi.

Bursa yang tidak mendukungexchange.GetMarkets()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetMarkets Coincheck / Bithumb / BitFlyer

{@struct/Pasar Pasar}

exchange.GetTickers

Peraturanexchange.GetTickers()Fungsi ini digunakan untuk mendapatkan data ticker agregat pertukaran (saringan struktur {@struct/Ticker Ticker}).exchangeMengembalikan data ticker untuk semua pasangan perdagangan ketika itu adalah objek pertukaran spot;exchangeMengembalikan data ticker untuk semua kontrak ketika itu adalah obyek pertukaran berjangka.

Peraturanexchange.GetTickers()fungsi mengembalikan array struktur {@struct/Ticker Ticker} ketika berhasil meminta data, dan null ketika gagal. {@struct/Ticker Ticker} array, nilai nol

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 memperoleh data pasar 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 spot exchange objek dan memanggilexchange.GetTickers()fungsi dalam sistem backtest. Sebelum memanggil fungsi pasar manapun, GetTickers hanya mengembalikan data ticker dari pasangan perdagangan default saat ini. Setelah memanggil fungsi pasar, ia mengembalikan data ticker dari semua varietas yang diminta. Anda dapat merujuk pada contoh uji berikut:

  • Fungsi ini meminta pertukaran untuk agregat ticker antarmuka, tidak perlu mengatur pasangan perdagangan, kode kontrak sebelum panggilan.
  • Sistem backtesting mendukung fungsi ini.
  • Objek Exchange yang tidak menyediakan antarmuka ticker agregat tidak mendukung fungsi ini.
  • Fungsi ini tidak mendukung kontrak opsi.

Bursa yang tidak mendukungexchange.GetTickers()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetTickers Zaif / WOO / Gemini / Coincheck / BitFlyer / Bibox Futures_WOO / Futures_dYdX / Futures_Deribit / Futures_Bibox / Futures_Aevo

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

Perdagangan

exchange.Buy

Peraturanexchange.Buy()Fungsi ini digunakan untuk menempatkan pesanan beli.Buy()fungsi adalah anggota fungsi dari exchange object {@var/EXCHANGE exchange}.Buy()fungsi beroperasi pada rekening pertukaran yang terikat pada objek pertukaranexchangeTujuan dari fungsi anggota (metode) dariexchangeobjek hanya terkait denganexchange, dan tidak akan diulang setelah dokumentasi.

Perintah yang berhasil mengembalikan ID pesanan, perintah yang gagal mengembalikan nilai nol. AtributnyaIdstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pasangan perdagangan spotETH_USDTurutan pertukaran OKX adalah:ETH-USDT,1547130415509278720Aku tidak tahu. Saat meneleponexchange.Buy()fungsi untuk menempatkan pesanan, nilai kembali pesananIdadalah konsisten denganIdatribut dari struktur order {@struct/Order Order}.

string, nilai nol

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

PeraturanpriceParameter digunakan untuk mengatur harga pesanan. harga benar Nomor PeraturanamountParameter digunakan untuk mengatur jumlah pesanan. jumlah benar nomor Parameter yang diperluas yang dapat menghasilkan informasi yang menyertainya ke log pesanan ini,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, null dan jenis lain yang didukung 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);
}

Nomor urutan yang dikembalikan olehexchange.Buy()dapat digunakan untuk menanyakan informasi 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);
}

Ketika menempatkan pesanan untuk kontrak berjangka cryptocurrency, perhatian harus diambil untuk memastikan bahwa arah perdagangan ditetapkan dengan benar, karena ketidakcocokan antara arah perdagangan dan fungsi perdagangan akan menghasilkan kesalahan:

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 pasar spot.

Saat menempatkan pesanan untuk kontrak berjangka, Anda harus memperhatikan apakah arah perdagangan ditetapkan dengan benar, karena kesalahan akan dilaporkan jika arah perdagangan dan fungsi perdagangan tidak cocok. Parameterpricediatur untuk-1untuk menempatkan pesanan pasar, yang membutuhkan antarmuka penempatan pesanan bursa untuk mendukung pesanan pasar.amountadalah jumlah uang dalam mata uang pesanan. Ketika menempatkan pesanan pasar untuk kontrak berjangka cryptocurrency, parameter jumlahamountadalah jumlah kontrak. Ada beberapa bursa cryptocurrency yang tidak mendukung antarmuka pesanan pasar selama perdagangan langsung. Jumlah pesanan untuk pesanan beli pasar di beberapa bursa spot adalah jumlah koin perdagangan. Silakan lihatInstruksi Khusus untuk PertukaranPanduan Pengguna untuk rincian. Jika Anda menggunakan versi lama dari docker, nilai kembali dari perintahIddariexchange.Buy()fungsi mungkin berbeda dari nilai kembali dari pesananIddijelaskan dalam dokumen ini.

{@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 menempatkan pesanan jual.

Perintah yang berhasil mengembalikan order Id, perintah yang gagal mengembalikan nilai nol.Idstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pasangan perdagangan spotETH_USDTurutan pertukaran OKX adalah:ETH-USDT,1547130415509278720. Ketika memanggilexchange.Sell()fungsi untuk menempatkan pesanan, nilai kembali pesananIdadalah konsisten denganIdatribut dari struktur order {@struct/Order Order}. string, nilai nol

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

PeraturanpriceParameter digunakan untuk mengatur harga pesanan. harga benar Nomor PeraturanamountParameter digunakan untuk mengatur jumlah pesanan. jumlah benar nomor Parameter yang diperluas yang dapat menghasilkan informasi yang menyertainya ke log pesanan ini,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, null dan jenis lain yang didukung 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);
}

Nomor urutan yang dikembalikan olehexchange.Sell()dapat digunakan untuk menanyakan informasi 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);
}

Ketika menempatkan pesanan untuk kontrak berjangka cryptocurrency, perhatian harus diambil untuk memastikan bahwa arah perdagangan ditetapkan dengan benar, karena ketidakcocokan antara arah perdagangan dan fungsi perdagangan akan menghasilkan kesalahan:

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 pasar spot.

Saat menempatkan pesanan untuk kontrak berjangka, Anda harus memperhatikan apakah arah perdagangan ditetapkan dengan benar, karena kesalahan akan dilaporkan jika arah perdagangan dan fungsi perdagangan tidak cocok. Parameterpricediatur untuk-1untuk menempatkan pesanan pasar, yang membutuhkan antarmuka penempatan pesanan bursa untuk mendukung pesanan pasar.amountadalah jumlah dalam mata uang perdagangan. Ketika menempatkan pesanan pasar untuk kontrak berjangka cryptocurrency, parameter jumlahamountAda beberapa pertukaran cryptocurrency yang tidak mendukung antarmuka pesanan pasar selama perdagangan langsung. Jika Anda menggunakan versi lama dari docker, nilai kembali dari perintahIddariexchange.Sell()fungsi mungkin berbeda dari nilai kembali dari pesananIddijelaskan dalam dokumen ini.

{@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 menempatkan pesanan.

Jika pesanan berhasil ditempatkan, ID pesanan dikembalikan; jika pesanan gagal, nilai nol dikembalikan.Idstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pesanan dari pasangan perdagangan spotETH_USDTdari bursa OKX adalah:ETH-USDT,1547130415509278720. Ketika memanggilexchange.CreateOrder(symbol, side, price, amount)fungsi untuk menempatkan pesanan, nilai yang dikembalikan dari pesananIdadalah konsisten denganIdproperti dari struktur order {@struct/Order Order}. string, nilai nol

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

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak pesanan.exchange.CreateOrder(symbol, side, price, amount)fungsi untuk menempatkan pesanan,exchangeadalah objek pertukaran spot. Jika mata uang pesanan adalah USDT dan mata uang perdagangan adalah BTC, parametersymboladalah:"BTC_USDT", dalam format pasangan perdagangan yang didefinisikan oleh platform FMZ.exchange.CreateOrder(symbol, side, price, amount)fungsi untuk menempatkan pesanan,exchangeadalah objek pertukaran berjangka. Jika pesanan adalah pesanan kontrak abadi standar BTCs U, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter ..exchange.CreateOrder(symbol, side, price, amount)fungsi untuk menempatkan pesanan,exchangeadalah objek pertukaran berjangka. Jika pesanan adalah pesanan kontrak opsi standar U BTCs, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), dan formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. simbol benar string PeraturansideParameter digunakan untuk menentukan arah perdagangan order. Untuk obyek pertukaran spot, nilai opsional darisideparameter adalah:buy, sell. buyberarti membeli, dansellberarti menjual. Untuk obyek pertukaran berjangka, nilai opsional darisideparameter adalah:buy, closebuy, sell, closesell. buyberarti membuka posisi panjang,closebuyberarti menutup posisi panjang,sellberarti membuka posisi pendek, danclosesellberarti menutup posisi pendek.

sisi benar string Parameterpricedigunakan untuk menetapkan harga order. harga -1 menunjukkan bahwa order adalah order pasar. harga benar nomor Parameteramountdigunakan untuk menetapkan jumlah pesanan. Harap dicatat bahwa ketika pesanan adalah pesanan beli pasar, jumlah pesanan adalah jumlah pembelian; jumlah pesanan pesanan beli pasar beberapa bursa spot adalah jumlah koin perdagangan. Untuk rincian, silakan lihatInstruksi Khusus untuk Pertukarandalam Panduan Pengguna. jumlah benar nomor Parameter diperluas dapat output informasi tambahan ke order log ini.argparameter dapat dilewati. arg palsu Setiap jenis yang didukung oleh sistem, seperti string, nomor, bool, objek, array, nilai nol, dll.

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 obyek pertukaran futures disebutexchange.CreateOrder()fungsi untuk menempatkan pesanan.

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

exchange.CancelOrder

Peraturanexchange.CancelOrder()fungsi digunakan untuk membatalkan pesanan. AtributnyaIdstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pesanan dari pasangan perdagangan spotETH_USDTdari bursa OKX adalah:ETH-USDT,1547130415509278720Aku tidak tahu. ParameterorderIdmelewati saat memanggilexchange.CancelOrder()fungsi untuk membatalkan pesanan adalah konsisten denganIdproperti dari struktur order {@struct/Order Order}.

Peraturanexchange.CancelOrder()fungsi mengembalikan nilai benar, misalnyatrueberarti bahwa permintaan order pembatalan telah dikirim dengan sukses. Jika mengembalikan nilai palsu, sepertifalse, berarti bahwa permintaan order pembatalan gagal dikirim. Nilai yang dikembalikan hanya mewakili keberhasilan atau kegagalan permintaan yang dikirim untuk menentukan apakah bursa membatalkan pesanan. Anda dapat meneleponexchange.GetOrders()untuk menentukan apakah perintah dibatalkan. bool

Pertukaran. Batalkan Pesenan ((PesenanId) Pertukaran. Batalkan Pesenan ((PesenanId,... args)

PeraturanorderIdParameter digunakan untuk menentukan order yang akan dibatalkan. Perintah benar nomor, string Parameter diperpanjang, Anda dapat keluarkan informasi yang terlampir ke log penarikan ini,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, null dan jenis lain yang didukung 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 FMZ API yang dapat menghasilkan fungsi log output seperti:Log(), exchange.Buy(), exchange.CancelOrder()dapat diikuti oleh beberapa parameter output yang menyertainya setelah parameter yang diperlukan.exchange.CancelOrder(orders[i].Id, orders[i]), sehingga ketika membatalkan pesanan yang Id adalahorders[i].Id, informasi orders output dengan itu. yaitu, struktur {@struct/Order Order} dariorders[i].

Jika Anda menggunakan versi yang lebih tua dari docker, parameter orderId dari fungsi exchange.CancelOrder() mungkin berbeda dari orderId yang dijelaskan dalam dokumen saat ini.

{@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 informasi pesanan.

Menanyakan detail urutan sesuai dengan nomor urutan, dan mengembalikan struktur {@struct/Order Order} jika permintaan berhasil, atau mengembalikan null jika permintaan gagal. {@struct/Order Order}, nilai nol

tukar.GetOrder (OrderId)

PeraturanorderIdParameter digunakan untuk menentukan urutan yang akan ditanyakan. AtributnyaIdstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pesanan dari pasangan perdagangan spotETH_USDTdari bursa OKX adalah:ETH-USDT,1547130415509278720Aku tidak tahu. ParameterorderIdmelewati saat memanggilexchange.GetOrder()fungsi untuk menanyakan perintah adalah konsisten denganIdproperti dari struktur order {@struct/Order Order}.

Perintah benar string

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 ini tidak didukung oleh beberapa pertukaran.AvgPriceAtribut dalam struktur {@struct/Order Order} dari nilai pengembalian adalah harga rata-rata transaksi. Beberapa bursa tidak mendukung bidang ini, dan jika tidak, ditetapkan menjadi 0. Jika Anda menggunakan versi lama dari docker,orderIdparameter dariexchange.GetOrder()fungsi dapat berbeda dariorderIddijelaskan dalam dokumentasi saat ini. Bursa yang tidak mendukungexchange.GetOrder()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
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 array struktur {@struct/Order Order} jika permintaan data berhasil, dan mengembalikan nilai nol jika permintaan data gagal. {@struct/Order Order} array, nilai nol

pertukaran.GetOrders ((() exchange.GetOrders (simbol)

Parametersymboldigunakan untuk mengaturSimbol transaksiataurentang simbol transaksiuntuk diinterogasi. Untuk obyek pertukaran spot, jikasymbolparameter tidak dilewati, data pesanan yang belum selesai dari semua produk spot akan diminta. Untuk obyek pertukaran futures, jikasymbolparameter tidak diteruskan, default adalah untuk meminta data order yang belum selesai dari semua varietas dalam kisaran dimensi pasangan perdagangan saat ini dan kode kontrak.

lambang palsu string

/*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 menempatkan pesanan beli untuk beberapa pasangan perdagangan yang berbeda pada setengah harga saat ini, dan kemudian menanyakan informasi 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 berjangka untuk menempatkan pesanan untuk beberapa pasangan perdagangan yang berbeda dan kode kontrak. Tempatkan pesanan dengan harga yang jauh dari harga mitra, simpan pesanan dalam keadaan yang belum terpenuhi, dan kueri pesanan dengan berbagai 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);
}

Saat meneleponexchange.GetOrders()fungsi, lulus diSymbolparameter untuk meminta data order untuk pasangan perdagangan tertentu dan kode kontrak.

DalamGetOrdersfungsi, skenario penggunaan parameter simbol diringkas sebagai berikut:

Klasifikasi Objek Exchange simbol Parameter Ruang lingkup kueri Pernyataan
Tempat Jangan lulus parameter simbol Pertanyaan semua pasangan perdagangan spot Untuk semua skenario panggilan, jika antarmuka pertukaran tidak mendukungnya, kesalahan akan dilaporkan dan nilai nol akan dikembalikan.
Tempat Tentukan jenis perdagangan, parameter simbol adalah: BTC_USDT Menanyakan pasangan perdagangan BTC_USDT yang ditentukan Untuk objek pertukaran spot, format parameter simbol adalah: BTC_USDT
Masa Depan Jangan lulus parameter simbol Mencari semua produk perdagangan dalam kisaran dimensi pasangan perdagangan saat ini dan kode kontrak Jika pasangan perdagangan saat ini adalah BTC_USDT dan kode kontraknya adalah swap, semua kontrak abadi dengan margin USDT akan ditanyakan.GetOrders("USDT.swap")
Masa Depan Tentukan jenis perdagangan, parameter simbol adalah: BTC_USDT.swap Mencari kontrak abadi berbasis USDT untuk BTC tertentu Untuk obyek pertukaran berjangka, format simbol parameter adalah: kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter"..
Masa Depan Tentukan rentang produk perdagangan, parameter simbol adalah: USDT.swap Mencari semua kontrak abadi berbasis USDT -
Bursa berjangka yang mendukung opsi Jangan lulus parameter simbol Mencari semua kontrak opsi dalam kisaran dimensi pasangan perdagangan saat ini Jika pasangan perdagangan saat ini adalah BTC_USDT, kontrak ditetapkan sebagai kontrak opsi, misalnya, kontrak opsi Binance: BTC-240108-40000-C
Bursa berjangka yang mendukung opsi Tentukan produk perdagangan tertentu Mencari kontrak opsi yang ditentukan Misalnya, untuk Binance Futures Exchange, parameter simbol adalah: BTC_USDT.BTC-240108-40000-C
Bursa berjangka yang mendukung opsi Tentukan rentang produk perdagangan, parameter simbol adalah: USDT.option Mencari semua kontrak opsi berbasis USDT -

DalamGetOrdersfungsi, permintaan objek bursa berjangka kisaran dimensi diringkas sebagai berikut:

simbol Parameter Definisi Jangkauan Permintaan Pernyataan
USDT.swap Rentang kontrak abadi berbasis USDT. Untuk

dimensi yang tidak didukung oleh antarmuka API pertukaran, kesalahan akan dilaporkan dan nilai nol akan dikembalikan ketika Menelpon. USDT.futures. USDT berbasis rentang kontrak pengiriman. {\cH00FFFF}$USD.swap {\cH00FFFF}Rentang mata uang berbasis abadi kontrak. {\cH00FFFF}USD.futures {\cH00FFFF}Rentang pengiriman berdasarkan mata uang kontrak. {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT-based options contract range {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT-based options contract range {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFFFF}$USDT-based options contract range {\cH00FFFFFF}$USDT.option range. USD.option Rentang kontrak opsi berbasis mata uang. USDT.futures_combo Rentang kombinasi CFD. Futures_Deribit Exchange USD.futures_ff Rangkaian kontrak pengiriman margin campuran. Futures_Kraken Exchange {\cH00FFFF}$USD.swap_pf {\cH00FFFF}Rangkaian kontrak abadi margin campuran. ♫ Futures_Kraken Exchange ♫

Ketika akun yang diwakili oleh objek pertukaranexchangetidak memiliki perintah yang menunggu dalamrentang kueriatauInstrumen perdagangan tertentu(perintah aktif dalam keadaan tidak terpenuhi), memanggil fungsi ini mengembalikan array kosong, yaitu:[]Aku tidak tahu. Pertukaran berikut mengharuskan instrumen untuk lulus dalam parameter instrumen saat menanyakan pesanan yang saat ini belum selesai. Ketika memanggil fungsi GetOrders dengan pertukaran ini, jika parameter instrumen tidak diteruskan, hanya pesanan yang belum selesai dari instrumen saat ini yang diminta, bukan pesanan yang belum selesai dari semua instrumen (karena antarmuka pertukaran tidak mendukung ini). Zaif, MEXC, LBank, Korbit, Coinw, BitMart, Bithumb, BitFlyer, BigONE.

Bursa yang tidak mendukungexchange.GetOrders()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetOrders Futures_Bibox

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

exchange.GetHistoryOrders

Peraturanexchange.GetHistoryOrders()Fungsi ini digunakan untuk mendapatkan pasangan perdagangan saat ini, pesanan historis untuk kontrak; ini mendukung spesifikasi varietas perdagangan tertentu.

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

exchange.GetHistoryOrders ((() exchange.GetHistoryOrders (simbol) exchange.GetHistoryOrders (simbol, sejak) exchange.GetHistoryOrders ((simbol, sejak, batas) exchange.GetHistoryOrders (sejak) exchange.GetHistoryOrders ((sejak, batas)

PeraturansymbolParameter digunakan untuk menentukan simbol perdagangan.BTC_USDTpasangan perdagangan, misalnya, ketikaexchangeadalah objek pertukaran spot, format parameter untuksymboladalahBTC_USDTJika itu adalah obyek pertukaran berjangka, mengambil kontrak abadi sebagai contoh, format parameter untuksymboladalah:BTC_USDT.swapAku tidak tahu. Jika Anda menanyakan data pesanan kontrak opsi, atur parametersymboluntuk"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh).pasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. Jika parameter ini tidak dilewati, data order dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default.

lambang palsu string PeraturansinceParameter digunakan untuk menentukan timestamp awal kueri dalam milidetik. sejak palsu nomor PeraturanlimitParameter digunakan untuk menentukan jumlah perintah untuk query. batas palsu nomor

function main() {
    var historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
}
def main():
    historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
void main() {
    auto historyOrders = exchange.GetHistoryOrders();
    Log(historyOrders);
}
  • Kapan?symbol, since, limitparameter tidak ditentukan, kueri default adalah pasangan perdagangan saat ini, pesanan kontrak historis. Kueri pesanan historis dalam kisaran tertentu yang terdekat dengan waktu saat ini, kisaran kueri tergantung pada kisaran kueri tunggal antarmuka pertukaran.
  • Ketikasymbolparameter ditentukan, query riwayat order untuk jenis perdagangan yang ditetapkan.
  • Ketikasinceparameter ditentukan, query ke arah waktu saat ini menggunakansinceStempel waktu sebagai waktu awal.
  • Jikalimitparameter ditentukan, query dikembalikan setelah jumlah cukup entri.
  • Fungsi ini hanya didukung untuk pertukaran yang menyediakan antarmuka permintaan pesanan historis.

Bursa yang tidak mendukungexchange.GetHistoryOrders()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
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 mengatur presisi dariexchangeobjek pertukaranhargadanjumlah pesanan, setelah diatur, sistem akan mengabaikan data berlebih secara otomatis.

setPrecision ((hargaPrecision, jumlahPrecision)

PeraturanpricePrecisionparameter digunakan untuk mengontrol ketepatan data harga. hargaPrecision benar Nomor PeraturanamountPrecisionParameter digunakan untuk mengontrol presisi jumlah data yang akan dipesan. JumlahPenerangan benar nomor

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 mendukung fungsi ini, dan akurasi numerik dari sistem backtesting ditangani secara otomatis.

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

exchange.SetRate

Atur nilai tukar saat ini dari objek pertukaran.

exchange.SetRate (tingkat)

Peraturanrateparameter digunakan untuk menentukan nilai tukar konversi. Tingkat benar Nomor

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 nilai tukar telah ditetapkan menggunakanexchange.SetRate()Kemudian semua informasi harga seperti ticker, kedalaman, harga pesanan, dll untuk pertukaran yang diwakili oleh arusexchangeobjek pertukaran akan dikonversi dengan mengalikannya dengan nilai tukar yang ditetapkan dari 7.exchangeadalah pertukaran dengan dolar AS sebagai mata uang denominasi.exchange.SetRate(7), semua harga di pasar langsung akan dikonversi ke harga yang dekat denganCNYNominal dengan mengalikan dengan 7.

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

exchange.IO

Peraturanexchange.IO()fungsi digunakan untuk panggilan antarmuka lain yang terkait dengan objek pertukaran.

Peraturanexchange.IO()fungsi memanggil antarmuka lain yang terkait dengan objek pertukaran, mengembalikan data respons yang diminta pada panggilan yang berhasil dan mengembalikan nol pada panggilan yang gagal. string, number, bool, object, array, null, dan jenis lain yang didukung oleh sistem

exchange.IO(k,... args)

PeraturankParameter digunakan untuk mengatur jenis panggilan, dengan nilai opsional"api", "currency", "base", "trade_margin", "trade_normal", "public_base", "mbase", selfTradePreventionMode, simulate, cross, dual, unifieddan sebagainya. k benar string Parameter diperluas, lulus sesuai dengan skenario panggilan tertentu,argKarena mekanisme polimorfik dariexchange.IO()fungsi, pengaturan parameter yang berbeda sesuai dengan fungsi yang berbeda.exchange.IO()Fungsi tidak pasti. arg benar string, number, bool, object, array, null dan jenis lain yang didukung 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)bentuk panggilan dariexchange.IO()fungsi, perlu untuk memahami antarmuka API dari pertukaran dan memeriksa dokumentasi yang relevan terlebih dahulu. ini akan memungkinkan Anda untuk memperluas fungsi yang tidak ditambahkan ke platform FMZ.POSTpermintaan tidak memerlukan Anda untuk khawatir tentang enkripsi, penandatanganan, atau memverifikasi parameter, yang sudah ditangani oleh FMZ di bagian bawah, selama Anda mengisi parameter yang sesuai.OKX Exchangekontrak berjangka, dan menggunakan parameterrawuntuk melewati parameter urutan:

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 (yaitu, parameter permintaan HTTP) adalah string, itu perlu ditulis dalam tanda kutip tunggal (yaitu, 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);
}

Hal ini mendukung melewati di parameter url lengkap yang dapat menghilangkan operasi beralih alamat dasar (menelponexchange.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());
}

Mengubah pasangan perdagangan pertukaran saat ini, sehingga akan mengubah pasangan perdagangan yang dikonfigurasi oleh kodepada 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 dasar yang berbeda untuk antarmuka ticker dan antarmuka perdagangan, misalnya, Bitfinex Futures memiliki dua alamat, satu untuk antarmuka ticker dan yang lainnya untuk antarmuka perdagangan.exchange.SetBase("xxx"). Bitfinex berjangka beralih alamat dasar antarmuka publik menggunakanexchange.IO("mbase", "xxx").

I. Untuk pertukaran yang berpusat pada cryptocurrency panggilan antarmuka API lainnya yang tidak terkapsul secara seragam, dengan parameterkdiatur untuk"api":

exchange.IO("api", httpMethod, resource, params, raw)
  • httpMethod : Parameter adalah jenis string, isi jenis permintaanPOST, GET, dll.
  • sumber: Parameter ini adalah jenis string dan mengisi jalur permintaan; Ini mendukung penggunaan jalur permintaan lengkap, lihat contoh referensi untuk rincian.
  • Parameter: Parameter adalah jenis string, diisi dengan parameter permintaan, dikodekan denganURL.
  • raw: Parameter adalah parameter string mentah dan dapat dilewatkan.

Peraturanexchange.IO("api", httpMethod, resource, params, raw)panggilan fungsi akan mengakses antarmuka pertukaran dan mengembalikan null jika panggilan gagal dan terjadi kesalahan. Hanya perdagangan nyata mendukung panggilanexchange.IO("api", httpMethod, resource, params, raw) function.

II. Untuk beralih pasangan perdagangan, parameterkdiatur untuk"currency":

exchange.IO("currency", currency)
  • mata uang: Parameter adalah jenis string dengan format huruf besar yang seragam, menggunakan tanda bawah untuk memisahkanbaseCurrencydariquoteCurrency, sepertiBTC_USDT.

    1. Sistem backtesting sekarang mendukung switching trading pairs (hanya untuk mata uang digital spot exchange objects), ketika backtesting, Anda perlu memperhatikan bahwa Anda hanya dapat beralih ke trading pairs dengan mata uang denominasi yang sama, misalnya, pasangan perdagangan saat ini adalahETH_BTChanya bisa beralih keLTC_BTC, tidak untukLTC_USDT.
    2. Untuk kontrak berjangka cryptocurrency, objek pertukaran beralih pasangan perdagangan dan kode kontrak perlu ditetapkan kembali untuk menentukan kontrak mana yang akan diperdagangkan.
    3. Menggunakan fungsi {@fun/Account/exchange.SetCurrency exchange.SetCurrency} untuk beralih pasangan perdagangan adalah persis sama dengan menggunakanexchange.IO("currency", currency)untuk menukar pasangan perdagangan.

III. Digunakan untuk beralih ke mode akun leveraged objek pertukaran cryptocurrency spot:

  • Parameterkdiatur untuk"trade_margin"untuk beralih ke mode akun leverage spot. menempatkan pesanan dan memperoleh aset akun akan mengakses pertukarans spot leveraged interface. Jika bursa membedakan antara margin penuh dan margin terisolasi dalam leverage spot, gunakan:exchange.IO("trade_super_margin")untuk beralih ke margin penuh untuk akun leveraged, danexchange.IO("trade_margin")untuk beralih ke margin terisolasi untuk akun leveraged.
  • Parameterkdiatur untuk"trade_normal"untuk beralih kembali ke mode akun spot normal.

Bursa spot yang mendukung beralih antara model akun leveraged:

Pertukaran Catatan Khusus
OKX Pasangan perdagangan dalam mode akun leveraged berbeda dari yang normal, beberapa pasangan perdagangan mungkin tidak memilikinya.exchange.IO("trade_super_margin")untuk beralih ke posisi penuh untuk akun leveraged dan menggunakanexchange.IO("trade_margin")untuk beralih ke posisi dengan posisi.trade_normaluntuk beralih ke mode spot normal.exchange.IO("tdMode", "cross")untuk secara langsung menentukan mode leverage.
Huobi Pasangan perdagangan mode akun leveraged berbeda dari yang normal, beberapa pasangan perdagangan mungkin tidak memilikinya.trade_marginuntuk beralih ke posisi akun leverage berdasarkan posisi, menggunakantrade_super_marginuntuk beralih ke leverage account posisi penuh.trade_normaluntuk beralih ke mode mata uang-mata uang normal.
Binance Modus akun leveraged dibagi menjadi posisi per posisi dan posisi penuh, penggunaantrade_marginuntuk beralih ke posisi dengan posisi, menggunakantrade_super_marginuntuk beralih ke posisi penuh, gunakantrade_normaluntuk beralih ke mode mata uang-mata uang normal.
Gerbang Modus akun leveraged dibagi menjadi posisi per posisi dan posisi penuh, penggunaantrade_marginuntuk beralih ke posisi dengan posisi, menggunakantrade_super_marginuntuk beralih ke posisi penuh, gunakantrade_normaluntuk beralih ke mode mata uang-mata uang normal.
AscendEx Penggunaanexchange.IO("trade_margin")untuk beralih ke mode akun leverage danexchange.IO("trade_normal")untuk beralih kembali ke mode akun normal.
WOO Penggunaanexchange.IO("trade_margin")untuk beralih ke mode akun leverage danexchange.IO("trade_normal")untuk beralih kembali ke mode akun normal.
CoinEx Penggunaanexchange.IO("trade_margin")untuk beralih ke mode akun leveraged danexchange.IO("trade_normal")untuk beralih kembali ke mode akun normal.

IV. Fungsi switching lainnya:Lihatlahexchange.IO()fungsi untukFungsi switching lainnyadalam 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 output log penempatan order dan penarikan di area kolom log. Ketika dipanggil, tidak ada pesanan yang ditempatkan, hanya log transaksi yang output dan dicatat.

exchange.Log ((orderJenis, harga, jumlah) exchange.Log ((orderJenis, harga, jumlah,... args)

PeraturanorderTypeparameter digunakan untuk mengatur jenis log output, nilai opsional 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 benar nomor PeraturanpriceParameter digunakan untuk mengatur harga yang ditampilkan dalam log output. harga benar nomor PeraturanamountParameter digunakan untuk mengatur jumlah pesanan yang ditampilkan dalam log output. jumlah benar nomor Parameter diperluas yang dapat output informasi yang menyertai log ini,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, null dan jenis lain yang didukung 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)salah satu skenario yang paling umum adalah menggunakan {@fun/Trade/exchange.IOexchange.IO} fungsi untuk mengakses antarmuka pertukaran untuk membuat pesanan bersyarat, tetapi menggunakanexchange.IO()fungsi tidak output informasi log transaksi dalam catatan log perdagangan hidup.exchange.Log()fungsi dapat digunakan untuk melengkapi log output untuk merekam informasi penempatan pesanan, dan hal yang sama berlaku untuk operasi penarikan pesanan.

KetikaorderTypeparameter adalahLOG_TYPE_CANCEL, yangpriceParameter adalah urutan Id order ditarik yang digunakan untuk mencetak log penarikan ketika order ditarik langsung menggunakanexchange.IO()Fungsi.exchange.Log()fungsi adalah fungsi anggota dari objek pertukaran {@var/EXCHANGE exchange}, berbeda 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 perhitungan enkripsi tanda tangan.

Peraturanexchange.Encode()fungsi mengembalikan pengkodean nilai hash yang dihitung. string

exchange.Encode ((algo, inputFormat, outputFormat, data) exchange.Encode ((algo, inputFormat, outputFormat, data, keyFormat, key)

Parameteralgoadalah algoritma yang digunakan untuk perhitungan pengkodean. Pengaturan yang didukung 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.256algojuga mendukung: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk, untuk pengkodean dan dekodean string.algojuga mendukung: ed25519 algoritma. Ini mendukung penggunaan algoritma hash yang berbeda, misalnya parameteralgodapat ditulis sebagai ed25519.md5, ed25519.sha512, dll. Mendukunged25519.seedperhitungan. sesuatu benar string Digunakan untuk menentukan format data daridataparameter.inputFormatparameter dapat diatur ke salah satu dari: raw, hex, base64, dan string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. inputFormat benar string Digunakan untuk menentukan format data output.outputFormatparameter mendukung pengaturan berikut: raw, hex, base64, string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. outputFormat benar string Parameterdataadalah data yang akan diproses. data benar string Digunakan untuk menentukan format data darikeyparameter.keyparameter dapat diatur ke salah satu dari: raw, hex, base64, dan string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. keyFormat palsu string Peraturankeyparameter digunakan untuk menentukan kunci yang digunakan dalam perhitungan tanda tangan, dan dapat digunakan sebagai string plaintext."{{accesskey}}", "{{secretkey}}"untuk merujuk padaaccessKeydansecretKeydikonfigurasi dalam objek pertukaran {@var/EXCHANGE exchange} kunci palsu string

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 posisi BitMEX (protocol wss):

Hanya perdagangan nyata mendukung panggilanexchange.Encode()Fungsi."{{accesskey}}", "{{secretkey}}"Referensi hanya berlaku jikaexchange.Encode()fungsi digunakan.

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

exchange.Go

Fungsi pendukung asinkron multi-threaded dapat mengubah operasi semua fungsi yang didukung menjadi eksekusi serentak asinkron.

Peraturanexchange.Go()fungsi mengembalikan objek bersamaan segera, dan Anda dapat menggunakanwait()metode dari objek bersamaan untuk mendapatkan hasil permintaan bersamaan. objek

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

Peraturanmethodparameter digunakan untuk menentukan nama fungsi bersamaan. Perhatikan bahwa parameter adalah string nama fungsi, bukan referensi fungsi. metode benar string Parameter untukFungsi yang dilakukan secara bersamaan, mungkin ada lebih dari satu parameterarg. Jenis dan jumlah parameterargtergantung pada parameter darifungsi eksekusi bersamaanAku tidak tahu. arg palsu string, number, bool, object, array, function, null, dan semua tipe lain yang didukung 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", karenanull == undefinedadalah valid di 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);
}

Menelponwait()Metode pada objek paralel yang telah dirilis akan melaporkan kesalahan:

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 bersamaan ke beberapa ticker pertukaran:

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");
}

Serentakexchange.IO("api", ...)Fungsi:

Fungsi ini hanya membuat tugas eksekusi multi-threaded saat berjalan dalam perdagangan nyata, backtesting tidak mendukung eksekusi tugas serentak multi-threaded (backtesting tersedia, tetapi masih dijalankan secara berurutan). Setelahexchange.Go()fungsi mengembalikan objek, nyawait()fungsi dipanggil melalui objek itu untuk mendapatkan data yang dikembalikan oleh thread.wait()fungsi harus dipanggil untuk mendapatkan data sebelum thread akan dirilis secara otomatis.wait()jika fungsi ditentukan, thread tidak akan dirilis secara otomatis bahkan jika timeout terjadi. Hasil thread harus diperoleh sebelum dirilis secara otomatis (terlepas dari keberhasilan atau kegagalan panggilan antarmuka untuk akses bersamaan).wait()fungsi terlepas dari apakah eksekusi berhasil atau gagal, dan sumber daya dari thread yang diminta olehexchange.Go()fungsi harus dilepaskan secara otomatis oleh docker. Peraturanwait()Metode ini mendukung parameter timeout: Tanpa parameter timeout, yaitu,wait(), atau dengan parameter timeout 0, yaitu,wait(0).wait()fungsi blok dan menunggu sampai thread bersamaan telah selesai berjalan, mengembalikan hasil dari thread paralels eksekusi. Atur parameter timeout -1, yaituwait(-1).wait()fungsi mengembalikan langsung, dengan nilai pengembalian yang berbeda untuk bahasa pemrograman yang berbeda, lihat subbagian ini untuk contoh panggilan. Tetapkan parameter timeout tertentu,wait(300), danwait()fungsi akan menunggu maksimal 300 milidetik sebelum kembali.

Jika hasil dari hasil akhirwait()fungsi tidak diperoleh, sumber daya thread tidak akan dirilis secara otomatis, yang akan menyebabkan akumulasi thread yang diminta, dan lebih dari 2000 akan melaporkan kesalahan:"too many routine wait, max is 2000"Aku tidak tahu. Fungsi yang didukung:GetTicker, GetDepth, GetTrades, GetRecords, GetAccount, GetOrders, GetOrder, CancelOrder, Buy, Sell, GetPositions, IO. Semua fungsi ini dijalankan berdasarkan objek pertukaran {@var/EXCHANGE exchange} saat dipanggil secara bersamaan. Perbedaan antara bahasa Python dan bahasa JavaScript adalah bahwawait()fungsi dari objek bersamaan dalam bahasa Python mengembalikan dua parameter. parameter pertama adalah hasil yang dikembalikan oleh panggilan API asinkron, dan parameter kedua menunjukkan apakah panggilan asinkron 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}

Rekening

exchange.GetAccount

Peraturanexchange.GetAccount()fungsi digunakan untuk meminta informasi rekening pertukaran.GetAccount()fungsi adalah fungsi anggota dari objek pertukaran {@var/EXCHANGE exchange}.exchangeobjek hanya terkait denganexchange, dan tidak akan diulang setelah dokumentasi.

Menanyakan informasi aset akun dan mengembalikan struktur {@struct/Account Account} jika kueri berhasil atau null jika gagal. {@struct/Account Account}, nilai nol

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"])
}

Atur pasangan perdagangan, kode kontrak, dan dapatkan informasi rekening.

Jika objek pertukaran diatur untuk pertukaran kontrak berjangka cryptocurrency, dan beralih ke kontrak denganUSDTsebagai margin (lihat {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType} fungsi untuk cara beralih).USDTsebagai margin, yang dicatat dalamBalance, FrozenBalanceAtribut dari struktur {@struct/Account Account} Jika objek pertukaran ditetapkan untuk pertukaran kontrak berjangka cryptocurrency, dan beralih ke kontrak berbasis mata uang, aset dalam mata uang sebagai margin dan dicatat dalamStocks, FrozenStocksAtribut dari struktur {@struct/Account Account} Saat menggunakan akun Binance Futures, saat meneleponexchange.GetAccount()fungsi untuk meminta informasi akun, data yang dikemas adalah jumlah semua aset yang dikonversi menjadiUSD. Ini ditampilkan diBalanceJika Anda perlu menghitung jumlah konversi aset lain, Anda dapat menggunakan jumlah konversi USD dibagi dengan harga indeks (aset yang akan dikonversi) dan kemudian dibagi dengan suku bunga gadai (aset yang akan dikonversi) untuk menghitungnya.

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

exchange.GetAssets

Peraturanexchange.GetAssetsfungsi digunakan untuk meminta informasi aset rekening pertukaran.

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

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 informasi tentang aset dari rekening pertukaran,exchange.GetAssets()mengembalikan array dengan elemen dari struktur Aset.

PeraturanGetAssets()fungsi dari objek Futures Exchange mengembalikan aset margin di bawah pasangan perdagangan saat ini (berbasis mata uang, berbasis USDT, berbasis USDC, dll.).

{@struct/Asset Asset}

exchange.GetName

Peraturanexchange.GetName()fungsi digunakan untuk mendapatkan nama pertukaran yang obyek pertukaran saat ini terikat.

Peraturanexchange.GetName()fungsi mengembalikan nama bursa yang didefinisikan oleh platform FMZ Quant Trading. string

exchange.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 umumnya digunakan untuk mengidentifikasi objek pertukaran, sepertiexchangeatauexchanges[1], exchanges[2]nama bursa kontrak berjangka cryptocurrency memiliki awalan tetapFutures_.

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

exchange.GetLabel

Peraturanexchange.GetLabel()fungsi digunakan untuk mendapatkan label kustom yang ditetapkan ketika objek pertukaran dikonfigurasi.

Peraturanexchange.GetLabel()fungsi mengembalikan label kustom yang ditetapkan ketika objek pertukaran dikonfigurasi. string

pertukaran.GetLabel ((()

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

Bertukar objek sepertiexchangeatauexchanges[1], exchanges[2]dalam kode strategi diidentifikasi dengan tag set.

{@var/EXCHANGE pertukaran}

exchange.GetCurrency

Peraturanexchange.GetCurrency()Fungsi digunakan untuk mendapatkan pasangan perdagangan yang saat ini ditetapkan.

Peraturanexchange.GetCurrency()fungsi mengembalikan pasangan perdagangan yang ditetapkan oleh objek pertukaran {@var/EXCHANGE exchange} saat ini. string

exchange.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 perdagangan adalah huruf besar secara seragam, menggunakan tanda bawah untuk memisahkanbaseCurrencydanquoteCurrency, sepertiBTC_USDT.

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

exchange.SetCurrency

Peraturanexchange.SetCurrency()Fungsi ini digunakan untuk beralih pasangan perdagangan saat ini dari objek pertukaran {@var/EXCHANGE exchange}.

exchange.SetCurrency (mata uang)

PeraturancurrencyFormat pasangan perdagangan adalah huruf besar secara seragam, menggunakan tanda bawah untuk memisahkanbaseCurrencydariquoteCurrency, sepertiBTC_USDTAku tidak tahu. mata uang benar string

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. Kompatibel denganexchange.IO("currency", "BTC_USDT")metode beralih, silakan lihat ke {@funexcahnge.IO}.
  2. Dukungan untuk beralih pasangan perdagangan dalam sistem backtesting, nama mata uang denominasi tidak dapat diubah saat beralih pasangan perdagangan dalam sistem backtesting.BTC_USDTdapat beralih keLTC_USDT, tidak untukLTC_BTC.
  3. Jumlah mata uang yang diperdagangkan adalah 0 setelah beralih ke pasangan perdagangan yang awalnya ditetapkan pada halaman non-backtest.BTC_USDT, jumlahBTCadalah 3, jumlahUSDTsaat ini, beralih keLTC_USDTsegera, jumlah mata uang perdagangan adalah 0 setelah beralih, yaitu jumlahLTC_USDTdalam akun adalah 0. yaitu, jumlahLTCdalam akun adalah 0, dan pasangan perdagangan yang beralih berbagi jumlahUSDT, yaitu 10.000.

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

exchange.GetQuoteCurrency

Peraturanexchange.GetQuoteCurrency()Fungsi ini digunakan untuk mendapatkan nama mata uang denominasi dari pasangan perdagangan saat ini, yaituquoteCurrency.

Peraturanexchange.GetQuoteCurrency()fungsi mengembalikan nama mata uang dari pasangan perdagangan saat ini. string

exchange.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())
}

Misalnya: {@var/EXCHANGE exchange} exchange objects pasangan transaksi saat ini adalahBTC_USDT, yangexchange.GetQuoteCurrency()fungsi kembaliUSDTJika pasangan perdagangan saat ini adalahETH_BTC, yangexchange.GetQuoteCurrency()fungsi kembaliBTC.

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

Masa Depan

exchange.GetPositions

Peraturanexchange.GetPositions()fungsi digunakan untuk mendapatkan informasi posisi;GetPositions()fungsi adalah anggota fungsi dari exchange object {@var/EXCHANGE exchange}.GetPositions()fungsi mendapatkan informasi posisi akun pertukaran terikat pada objek pertukaranexchangeTujuan dari fungsi anggota (metode) dariexchangeobjek hanya terkait denganexchangedan tidak akan diulang di sini.

Peraturanexchange.GetPositions()fungsi mengembalikan array struktur {@struct/Position Position} jika permintaan data berhasil, dan mengembalikan nilai nol jika permintaan data gagal. {@struct/Position Position} array, nilai nol

Pertukaran.GetPositions ((() tukar.GetPositions (simbol)

Parametersymboldigunakan untuk mengatursimbol perdaganganataukisaran simbol perdaganganuntuk diinterogasi. Jikasymbolparameter tidak diteruskan, default adalah untuk meminta data posisi dari semua simbol dalam kisaran dimensi pasangan perdagangan saat ini dan kode kontrak.

lambang palsu string

/*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 obyek pertukaran berjangka untuk menempatkan pesanan pasar untuk beberapa pasangan perdagangan yang berbeda dan kode kontrak.

Kontrak berjangka cryptocurrency berbeda dari spot cryptocurrency, yang hanya memiliki konsep posisi yang logis.Pasangan perdagangan, kode kontrakSilakan lihat fungsi {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType} DalamGetPositionsfungsi, skenario penggunaan parameter simbol diringkas sebagai berikut:

Klasifikasi Objek Exchange simbol Parameter Ruang lingkup kueri Pernyataan
Masa Depan Jangan lulus parameter simbol Mencari semua produk perdagangan dalam kisaran dimensi pasangan perdagangan saat ini dan kode kontrak Jika pasangan perdagangan saat ini adalah BTC_USDT dan kode kontrak adalah swap, semua kontrak abadi berbasis USDT akan ditanyakan.GetPositions("USDT.swap")
Masa Depan Tentukan produk perdagangan, parameter simbol adalah: BTC_USDT.swap Mencari kontrak abadi berbasis USDT dari BTC tertentu Untuk obyek bursa berjangka, format simbol parameter adalah:pasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter"..
Masa Depan Tentukan rentang produk perdagangan, parameter simbol adalah: USDT.swap Mencari semua kontrak abadi berbasis USDT -
Bursa berjangka yang mendukung opsi Jangan lulus parameter simbol Mencari semua kontrak opsi dalam kisaran dimensi pasangan perdagangan saat ini Jika pasangan perdagangan saat ini adalah BTC_USDT, kontrak ditetapkan sebagai kontrak opsi, misalnya, kontrak opsi Binance: BTC-240108-40000-C
Bursa berjangka yang mendukung opsi Tentukan produk perdagangan tertentu Mencari kontrak opsi yang ditentukan Misalnya, untuk Binance Futures Exchange, parameter simbol adalah: BTC_USDT.BTC-240108-40000-C
Bursa berjangka yang mendukung opsi Tentukan rentang produk perdagangan, parameter simbol adalah: USDT.option Mencari semua kontrak opsi berbasis USDT -

DalamGetPositionsfungsi, obyek pertukaran berjangka rentang dimensi kueri diringkas sebagai berikut:

simbol Parameter Definisi Lingkup Permintaan Pernyataan
USDT.swap Rentang kontrak abadi berbasis USDT. Untuk

dimensi yang tidak didukung oleh antarmuka API pertukaran, kesalahan akan dilaporkan dan nilai nol akan dikembalikan ketika Menelpon.

USDT.futures. USDT berbasis rentang kontrak pengiriman.

{\cH00FFFF}$USD.swap {\cH00FFFF}Skop perpetual berbasis mata uang kontrak.

{\cH00FFFF}USD.futures. {\cH00FFFF}Skop pengiriman berdasarkan mata uang kontrak.

{\cH00FFFF}$USDT.option {\cH00FFFF}$USDT-based options contract range {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT-based options contract range {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFFFF}$USDT-based options contract range {\cH00FFFFFF}$USDT.option range.

USD.option Rentang kontrak opsi berbasis mata uang

  • |

USDT.futures_combo Rentang kombinasi CFD. Futures_Deribit Exchange

{\cH00FFFF}$.futures_ff. {\cH00FFFF}Skop kontrak pengiriman margin campuran. Futures_Kraken Exchange

{\cH00FFFF}USD.swap_pf {\cH00FFFF}Rentang kontrak jangka panjang margin campuran. Futures_Kraken Exchange

Kompatibel denganexchange.GetPosition()panggilan,GetPositionsama persis denganGetPositions.

Ketika akun yang diwakili oleh objek pertukaranexchangetidak memiliki posisi direntang kueriatauInstrumen perdagangan tertentu, yangexchange.GetPositions()fungsi mengembalikan array kosong, misalnya:[].

{@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 dari pasangan perdagangan atau kontrak yang ditentukan olehsymbolKompatibel dengan hanya melewati dalam parametermarginLeveluntuk menetapkan nilai leverage dari pasangan perdagangan atau kontrak saat ini dari objek pertukaran {@var/EXCHANGE exchange}.

exchange.SetMarginLevel ((simbol, marginLevel) Pertukaran.Set MarginLevel ((marginLevel)

Peraturansymbolparameter digunakan untuk menentukan pasangan perdagangan atau kontrak yang mana nilai leverage perlu disesuaikan.symbolparameter dariSetMarginLevel()fungsi konsisten dengan format darisymbolparameter dariGetTicker()fungsi. lambang palsu string PeraturanmarginLevelparameter digunakan untuk mengatur nilai leverage, yang biasanya bilangan bulat untuk bursa dan juga mendukung pengaturan nilai leverage titik terapung untuk beberapa bursa. marginLevel benar nomor

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 mendukung cryptocurrency kontrak berjangka pertukaran objek saja. sistem backtesting mendukung memanggilexchange.SetMarginLevel()fungsi untuk mengatur nilai leverage. Untuk kontrak berjangka cryptocurrency, mekanisme leverage tidak seragam karena pertukaran kontrak berjangka cryptocurrency.exchange.SetMarginLevel()fungsi tidak menghasilkan permintaan jaringan, tetapi hanya menetapkan variabel leverage dalam sistem FMZ yang mendasari (digunakan untuk melewati parameter dalam antarmuka penempatan pesanan). Nilai leverage dari beberapa kontrak berjangka pertukaran adalah pengaturan dari bursa, yang perlu ditetapkan di halaman situs web bursa atau menggunakan antarmuka API. Dalam hal ini memanggilexchange.SetMarginLevel()fungsi akan menghasilkan permintaan jaringan dan mungkin gagal mengatur leverage. Ada banyak alasan untuk ini, misalnya: ada posisi saat ini atau pesanan yang menunggu, yang membuat tidak mungkin untuk menetapkan nilai leverage baru untuk pasangan perdagangan atau kontrak ini. Bursa yang tidak mendukungexchange.SetMarginLevel()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
SetMarginLevel Futures_dYdX / Futures_Deribit

{@var/EXCHANGE pertukaran}

exchange.SetDirection

Peraturanexchange.SetDirection()Fungsi ini digunakan untuk mengatur arah pesanan dari fungsi {@fun/Trade/exchange.Buy exchange.Buy}, fungsi {@fun/Trade/exchange.Sell exchange.Sell} ketika menempatkan pesanan untuk kontrak berjangka.

Pertukaran.SetDirection ((arah)

Peraturandirectionparameter digunakan untuk mengatur arah kontrak berjangka ketika pesanan ditempatkan."buy", "closesell", "sell", "closebuy"Aku tidak tahu. arah benar string

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 korespondensi antara arah transaksi kontrak berjangka dan fungsi penempatan order:

Fungsi penempatan pesanan Arah yang ditetapkan oleh parameter fungsi SetDirection Pengamatan
exchange.Buy membeli Membeli dan membuka posisi panjang
exchange.Buy jual tutup Membeli dan menutup posisi pendek
exchange.Sell menjual Jual dan buka posisi pendek
exchange.Sell closebuy Jual dan tutup posisi panjang

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

exchange.SetContractType

Peraturanexchange.SetContractType()Fungsi ini digunakan untuk mengatur kode kontrak saat ini dari objek pertukaran {@var/EXCHANGE exchange}.

Peraturanexchange.SetContractType()fungsi mengembalikan struktur yang berisi kode kontrak pertukaran yang sesuai dengan kode kontrak saat ini.quarter, dan struktur nilai pengembalian fungsi ini adalah:{"InstrumentID": "BTCUSD_230630", "instrument": "BTCUSD_230630"}Aku tidak tahu. objek

exchange.SetContractType ((simbol)

Peraturansymbolparameter digunakan untuk mengatur kode kontrak, nilai opsional adalah:"this_week", "next_week", "quarter", "next_quarter", "swap", dll. Kontrak berjangka cryptocurrencykontrak pengirimankode, jika tidak ditentukan, umumnya memiliki:

  • this_week: kontrak minggu ini.
  • next_week: kontrak minggu depan.
  • quarter: kontrak triwulanan.
  • next_quarter: kontrak kuartal berikutnya.Kontrak permanenkode dalam kontrak berjangka cryptocurrency, jika tidak ditentukan, umumnya memiliki:
  • swap: kontrak abadi.

lambang benar string

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 saat ini sebagai kontrak minggu saat ini:

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());
}

Ketika membuat kontrak denganUSDTsebagai margin, Anda perlu beralih pasangan perdagangan dalam kode (Anda juga dapat mengatur pasangan perdagangan langsung saat menambahkan 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 kembali dariexchange.SetContractType()Fungsi:

Dalam strategi kontrak berjangka cryptocurrency, ambil contoh beralih keBTC_USDTPasangan perdagangan: Ketika beralih pasangan perdagangan menggunakanexchange.SetCurrency("BTC_USDT")atauexchange.IO("currency", "BTC_USDT")fungsi, setelah beralih, Anda perlu menggunakanexchange.SetContractType()Sistem ini berfungsi untuk mengatur ulang kontrak untuk menentukan kontrak saat ini yang akan dioperasikan di bawah pasangan perdagangan baru.kontrak standar mata uangatauKontrak standar USDTMisalnya, jika pasangan perdagangan diatur untukBTC_USDT, gunakanexchange.SetContractType("swap")fungsi untuk mengatur kode kontrak untukswapPada titik ini, itu diatur untukBTCuntukStandar USDTkontrak abadi. Jika pasangan perdaganganBTC_USD, gunakanexchange.SetContractType("swap")fungsi untuk mengatur kode kontrak untukswapPada titik ini, itu diatur untukBTCItu adalahstandar mata uangkontrak abadi. Rincian dari pertukaran kontrak berjangka cryptocurrency yang didukung, dengan nama kontrak untuk setiap pertukaran sebagai berikut:

  • Futures_OKCoin (OKX) Setel untuk kontrak abadi:exchange.SetContractType("swap")Set untuk kontrak minggu ini:exchange.SetContractType("this_week")Setel untuk kontrak minggu depan:exchange.SetContractType("next_week")Setel kontrak bulanan:exchange.SetContractType("month")Setel untuk kontrak bulan depan:exchange.SetContractType("next_month")Diatur ke kontrak triwulanan:exchange.SetContractType("quarter")Setel untuk kontrak kuartal berikutnya:exchange.SetContractType("next_quarter")

    OKX memiliki kontrak perdagangan pra-pasar: tanggal pengiriman kontrak adalah waktu tetap.HMSTR-USDT-250207. Atur pasangan perdagangan keHMSTR_USDTdi platform FMZ, dan kemudian menggunakanexchange.SetContractType("HMSTR-USDT-250207")untuk mengatur kontrak. Untuk fungsi yang mendukungsymbolparameter, seperti:exchange.GetTicker(), exchange.CreateOrder(), dll. Anda dapat menentukansymbolparameter sebagai:HMSTR_USDT.HMSTR-USDT-250207untuk memperoleh data pasar dari kontrak ini atau melakukan pesanan.

  • Futures_HuobiDM (Futures Huobi) Set untuk kontrak minggu ini:exchange.SetContractType("this_week")Aku tidak tahu. Setel untuk kontrak minggu depan:exchange.SetContractType("next_week")Aku tidak tahu. Diatur ke kontrak triwulanan:exchange.SetContractType("quarter")Aku tidak tahu. Setel untuk kontrak kuartal berikutnya:exchange.SetContractType("next_quarter")Aku tidak tahu. Setel untuk kontrak abadi:exchange.SetContractType("swap")Aku tidak tahu. Ini mendukung kontrak denganUSDTsebagai margin, ambilBTCkontrak sebagai contoh: penggunaanexchange.IO("currency", "BTC_USDT")untuk beralih ke kontrak yang menggunakanUSDTsebagai margin. Atau atur pasangan perdagangan saat ini keBTC_USDTlangsung saat mengkonfigurasi parameter perdagangan langsung dan menambahkan objek pertukaran.exchange.SetContractType()fungsi lagi untuk mengatur kontrak.

  • Futures_BitMEX (BitMEX) Setel untuk kontrak abadi:exchange.SetContractType("swap")Aku tidak tahu. Kontrak pengiriman bursa Futures_BitMEX adalah kontrak bulanan dengan kode kontrak berikut (dari Januari hingga Desember):

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

    Menetapkan kontrak pengiriman:exchange.SetContractType("December")Misalnya, ketika pasangan perdagangan diatur untukXBT_USDT, yangexchange.SetContractType("December")fungsi dipanggil untuk menetapkan kontrak untuk pengiriman Desember dalam USDT berdasarkan BTC (mengandung kode kontrak yang sebenarnya dariXBTUSDTZ23).

    Futures_BitMEX Ringkasan Informasi Kontrak

    Kode kontrak yang didefinisikan oleh Futures_BitMEX Pasangan perdagangan yang sesuai di FMZ Kode kontrak yang sesuai di FMZ Pernyataan
    DOGEUSD DOGE_USD swap Denied USD, XBT diselesaikan.
    DOGEUSDT DOGE_USDT swap USDT, USDT diselesaikan.
    XBTETH XBT_ETH swap ETH di atas, XBT di atas.
    XBTEUR XBT_EUR swap Dimensional EUR, XBT diselesaikan.
    USDTUSDC USDT_USDC swap USDC, XBT diselesaikan.
    ETHUSD_ETH ETH_USD_ETH swap Nominasikan dalam USD, ETH diselesaikan.
    XBTH24 XBT_USD Maret Tanggal kedaluwarsa: 24 Maret, kode bulan adalah: H; denominasi USD, XBT diselesaikan.
    ETHUSDZ23 ETH_USD Desember Tanggal kedaluwarsa: 23 Desember, kode bulan adalah: Z; denominasi USD, diselesaikan dalam XBT.
    XBTUSDTZ23 XBT_USDT Desember Tanggal kedaluwarsa: 23 Desember, kode bulan adalah: Z ; denominasi USDT, diselesaikan dalam USDT.
    ADAZ23 ADA_XBT Desember Tanggal kedaluwarsa: 23 Desember, kode bulan adalah: Z ; penagihan XBT, XBT diselesaikan.
    P_XBTETFX23 USDT_XXX P_XBTETFX23 Kesudahan: 11/23/23; dinyatakan sebagai persentase dan diselesaikan dalam USDT.
  • Futures_GateIO Set untuk kontrak minggu ini:exchange.SetContractType("this_week")Aku tidak tahu. Setel untuk kontrak minggu depan:exchange.SetContractType("next_week")Aku tidak tahu. Diatur ke kontrak triwulanan:exchange.SetContractType("quarter")Aku tidak tahu. Setel untuk kontrak kuartal berikutnya:exchange.SetContractType("next_quarter")Aku tidak tahu. Setel untuk kontrak abadi:exchange.SetContractType("swap")Aku tidak tahu. Ini mendukung kontrak denganUSDTsebagai margin, ambilBTCkontrak sebagai contoh: penggunaanexchange.IO("currency", "BTC_USDT")untuk beralih ke kontrak yang menggunakanUSDTsebagai margin. Atau atur pasangan perdagangan saat ini keBTC_USDTlangsung saat mengkonfigurasi parameter perdagangan langsung dan menambahkan objek pertukaran.exchange.SetContractType()fungsi lagi untuk mengatur kontrak.

  • Futures_Deribit Setel untuk kontrak abadi:exchange.SetContractType("swap")Aku tidak tahu. Ini mendukung DeribitUSDCkontrak. Kontrak pengiriman adalah:"this_week", "next_week", "month", "quarter", "next_quarter", "third_quarter", "fourth_quarter"Aku tidak tahu. CFD (future_combo):"this_week,swap", "next_week,swap", "next_quarter,this_week", "third_quarter,this_week", "month,next_week", ada banyak kombinasi. Untuk kontrak opsi, Anda harus memasukkan kode kontrak opsi tertentu yang ditentukan oleh bursa, lihat situs web Deribit untuk rincian.

  • Futures_KuCoin Misalnya, jika pasangan perdagangan diatur untukBTC_USDdan kode kontrak ditetapkan, itu adalah kontrak berbasis mata uang: Setel kontrak abadi:exchange.SetContractType("swap")Aku tidak tahu. Diatur ke kontrak triwulanan:exchange.SetContractType("quarter")Aku tidak tahu. Setel untuk kontrak kuartal berikutnya:exchange.SetContractType("next_quarter").

    USDT sebagai kontrak margin: Misalnya, jika pasangan perdagangan diatur untukBTC_USDT, dan kemudian mengatur kode kontrak, itu adalah kontrak dengan USDT sebagai margin. Setel kontrak abadi:exchange.SetContractType("swap").

  • Futures_Binance Binance Futures Exchange default untuk kontrak abadi dari pasangan perdagangan saat ini, kode kontrak:swapAku tidak tahu. Setel untuk kontrak abadi:exchange.SetContractType("swap"), kontrak abadi Binance memiliki kontrak yang menggunakanUSDTsebagai margin.USDTstandar kontrak abadi dariBTCdapat digunakan sebagai kontrak margin, dan pasangan perdagangan diatur untukBTC_USDTBinance juga mendukung kontrak abadi yang menggunakan koin sebagai margin, misalnya,BTCBinance standar kontrak abadi, dengan pasangan perdagangan diatur untukBTC_USDAku tidak tahu. Diatur ke kontrak triwulanan:exchange.SetContractType("quarter"), kontrak pengiriman memiliki kontrak standar mata uang (yaitu, menggunakan mata uang sebagai margin), misalnya,BTCPada kontrak kuartalan, pasangan perdagangan diatur untuk:BTC_USDdan kemudian mengatur kontrakexchange.SetContractType("quarter"), itu diatur untukBTCkontrak kuartal dengan kontrak standar mata uang. Setel untuk kontrak kuartal berikutnya:exchange.SetContractType("next_quarter"), misalnya,BTCdari kontrak tahunan standar mata uang, pasangan perdagangan ditetapkan untuk:BTC_USD, dan kemudian mengatur kontrakexchange.SetContractType("next_quarter")Aku tidak tahu. Binance mendukung sebagianUSDTsebagai kontrak pengiriman margin, mengambilBTCsebagai contoh, mengatur pasangan perdagangan untukBTC_USDT, lalu atur kode kontrak.

    Dukungan untuk kontrak Binance Options: Format kode kontrak opsi didasarkan pada kode kontrak opsi yang didefinisikan oleh bursa:BTC-241227-15000-C, XRP-240112-0.5-C, BTC-241227-15000-PAmbil kode kontrak opsi Binance.BTC-241227-15000-Psebagai contoh: BTC adalah kode mata uang opsi, 241227 adalah tanggal pelaksanaan, 15000 adalah harga pelaksanaan, P mewakili opsi jual, dan C mewakili opsi pembelian. Untuk rincian jenis opsi, apakah itu opsi Eropa atau opsi Amerika, silakan lihat informasi yang relevan dari kontrak opsi bursa. Bursa dapat membatasi penjual opsi dan mengharuskan mereka untuk mengajukan kualifikasi secara terpisah.

  • Futures_Bibox Kode kontrak untuk kontrak abadi Bibox:swapAku tidak tahu. Setel untuk kontrak abadi:exchange.SetContractType("swap").

  • Futures_Bybit Standar adalah kontrak abadi untuk pasangan perdagangan saat ini, kode kontrak:swapAku tidak tahu. Kode kontrak minggu ini:this_weekAku tidak tahu. Kode kontrak minggu depan:next_weekAku tidak tahu. Kode kontrak minggu ketiga:third_weekAku tidak tahu. Kode kontrak bulanan:monthAku tidak tahu. Kode kontrak bulan depan:next_monthAku tidak tahu. Kode kontrak kuartal:quarterAku tidak tahu. Kode kontrak kuartal berikutnya:next_quarterAku tidak tahu. Kode kontrak kuartal ketiga:third_quarter.

  • Futures_Kraken Standar adalah kontrak abadi dari pasangan perdagangan saat ini, kode kontrak:swap. swap: kontrak abadi.month: kontrak bulan saat ini.quarter: kontrak triwulanan.next_quarter: kontrak kuartal berikutnya.swap_pf: Kontrak abadi dengan margin campuran.quarter_ff: Kontrak kuartal dengan margin campuran.month_ff: Kontrak bulan saat ini dengan margin campuran.next_quarter_ff: Margin campuran kontrak kuartal berikutnya.

  • Futures_Bitfinex Default adalah kontrak abadi untuk pasangan perdagangan saat ini, kode kontrak:swap.

  • Futures_Bitget Default adalah kontrak abadi untuk pasangan perdagangan saat ini, kode kontrak:swapAku tidak tahu. Pasangan perdagangan diatur untukBTC_USDuntuk kontrak standar mata uang, dan pasangan perdagangan diatur untukBTC_USDTuntuk kontrak yang diselesaikan olehUSDTKontrak demo dapat diatur dengan pasangan perdagangan sebagaiSBTC_USD, BTC_SUSDT.

  • Futures_dYdX Kode kontrak untuk kontrak abadi dYdX:swapAku tidak tahu. Setel untuk kontrak abadi:exchange.SetContractType("swap"), dYdX hanya memiliki kontrak standar USDT.

  • Futures_MEXC Kode kontrak untuk kontrak abadi MEXC:swapAku tidak tahu. Setel untuk kontrak abadi:exchange.SetContractType("swap"). Atur pasangan perdagangan keBTC_USD, yang merupakan kontrak standar mata uang, dan mengatur pasangan perdagangan untukBTC_USDT, yang merupakanUSDT- Kontrak diselesaikan.

  • Futures_Crypto Token di rekening dicrypto.comnilai tukar dapat dikonversi menjadi kredit dalam USD untuk digunakan sebagai margin untuk perdagangan kontrak. Set untuk kontrak abadi:exchange.SetContractType("swap"). Contoh memanggilexchange.SetContractType("swap")fungsi untuk mengatur kontrak abadi untuk BTC ketika pasangan perdagangan diatur untukBTC_USDAku tidak tahu. Peraturancrypto.comkontrak pengiriman pertukaran adalah kontrak bulanan dengan kode kontrak berikut (dari Januari hingga Desember):

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

    Tetapkan kontrak pengiriman:exchange.SetContractType("October")Misalnya, ketika pasangan perdagangan diatur untukBTC_USD, memanggil fungsiexchange.SetContractType("October")untuk menetapkan kontrak pengiriman Oktober untuk BTC. Kode kontrak yang sesuai saat ini adalah:BTCUSD-231027.

  • Futures_WOO Futures_WOO dukungan pertukaranUSDTberdasarkan kontrak dengan kode kontrak abadiswapMisalnya, ketika pasangan perdagangan diatur untukBTC_USDT, fungsiexchange.SetContractType("swap")disebut untuk mengatur kontrak saat ini untuk menjadi kontrak abadi berbasis USDT untuk BTC.

{@fun/Futures/exchange.GetContractType exchange.GetContractType}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}

exchange.GetContractType

Peraturanexchange.GetContractType()Fungsi ini digunakan untuk mendapatkan kode kontrak untuk pengaturan saat ini dari objek pertukaran {@var/EXCHANGE exchange}.

Peraturanexchange.GetContractType()fungsi mengembalikan kode kontrak yang didefinisikan oleh platform FMZ, misalnya:this_week, swap, dll. string

exchange.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 exchange.SetContractType}

exchange.GetFundings

Peraturanexchange.GetFundings()Fungsi ini digunakan untuk mendapatkan data tingkat pendanaan untuk periode saat ini.

Peraturanexchange.GetFundings()fungsi mengembalikan array struktur {@struct/Funding Funding} ketika permintaan data berhasil, dan mengembalikan nilai nol ketika permintaan data gagal. {@struct/Funding Funding} array, nilai nol

pertukaran.GetFundings ((() exchange.GetFundings (simbol)

Parametersymboldigunakan untuk mengaturSimbol transaksiataurentang simbol transaksiuntuk ditanyakan.symbolJika parameter tidak dilewati, data tingkat pendanaan saat ini dari semua instrumen akan diminta secara default dalam kisaran dimensi pasangan perdagangan saat ini dan kode kontrak.

lambang palsu string

/*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 obyek pertukaran berjangka untuk memanggilexchange.GetFundings()fungsi dalam sistem backtesting. Sebelum memanggil fungsi pasar, GetFundings hanya mengembalikan data Pendanaan dari pasangan perdagangan default saat ini. Setelah memanggil fungsi pasar, ia mengembalikan data Pendanaan dari semua varietas yang diminta. Anda dapat merujuk pada contoh uji berikut:

Untuk bursa berjangka yang tidak mendukung batch query dari data tingkat pendanaan, jikasymbolparameter ditentukan sebagai rentang kueri, misalnya:USDT.swapatausymbolparameter tidak diteruskan, antarmuka akan melaporkan kesalahan.GetFundings()fungsi menggunakan jenis ini obyek pertukaran berjangka, Anda harus menentukansymbolparameter sebagai jenis kontrak abadi tertentu untuk menanyakan data tingkat pendanaan saat ini dari jenis tersebut. Peraturanexchange.GetFundings()fungsi mendukung sistem perdagangan dan backtesting yang nyata. Bursa yang tidak mendukung akuisisi batch data tingkat pendanaan: Futures_Bitget, Futures_OKX, Futures_MEXC, Futures_Deribit, Futures_Crypto.symbolparameter dengan kode simbol khusus, misalnya:ETH_USDT.swap.

Bursa yang tidak mendukungexchange.GetFundings()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetFundings Futures_DigiFinex

{@struct/Pembiayaan Pendanaan}

Pengaturan Jaringan

exchange.SetBase

Peraturanexchange.SetBase()fungsi digunakan untuk mengatur alamat dasar dari antarmuka API pertukaran yang dikonfigurasi dalam objek pertukaran {@var/EXCHANGE exchange}.

exchange.SetBase (s)

PeraturansParameter digunakan untuk menentukan alamat dasar antarmuka API pertukaran. s benar string

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());
}

Mengganti alamat basis API pertukaran tidak didukung dalam sistem backtesting, karena sistem backtesting adalah lingkungan simulasi sandbox dan tidak benar-benar mengakses antarmuka API pertukaran.

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

exchange.GetBase

Peraturanexchange.GetBase()Fungsi digunakan untuk mendapatkan alamat basis antarmuka API pertukaran saat ini.

Alamat basis antarmuka API pertukaran saat ini. string

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 mengatur konfigurasi proxy dari objek pertukaran {@var/EXCHANGE exchange}.

Pertukaran.SetProxy ((proxy)

Peraturanproxyparameter digunakan untuk menentukan konfigurasi proxy. Proxy benar string

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());
}

Mengkonfigurasi 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();
}

Selainspesifikasi globaldari alamat IP permintaan dari objek pertukaran {@var/EXCHANGE exchange}, ada juga dukungan untuk menentukan alamat IP berdasarkan {@var/EXCHANGE exchange}:

Jika pengaturan proxy gagal,exchange.SetProxy()fungsi akan mengembalikan null ketika dipanggil.exchange.SetProxy()fungsi menetapkan proxy untukrestSatu proxy dapat diatur untuk setiap objek pertukaran {@var/EXCHANGE exchange}, dan akses ke antarmuka pertukaran yang terikat pada objek pertukaran {@var/EXCHANGE exchange} setelah pengaturan proxy akan diakses melalui proxy. Dukungan untuk pengaturansocks5proxy, mengambil objek pertukaran pertama ditambahkan {@var/EXCHANGE exchange} yaitu:exchanges[0]sebagai contoh:

  • Set proxy, tidak ada nama pengguna, tidak ada kata sandi:exchange.SetProxy("socks5://127.0.0.1:8889").
  • Setel proxy, masukkan nama pengguna dan kata sandi:exchange.SetProxy("socks5://username:password@127.0.0.1:8889"). usernameadalah nama pengguna danpasswordadalah kata sandi.
  • Pindah ke mode normal tanpa proxy:exchange.SetProxy("").

Mendukung pengaturan alamat IP permintaan dari objek pertukaran {@var/EXCHANGE exchange},global tertentu.

{@var/EXCHANGE pertukaran}

exchange.SetTimeout

Peraturanexchange.SetTimeout()fungsi digunakan untuk mengatur timeout darirestpermintaan untuk objek pertukaran {@var/EXCHANGE exchange}.

Pertukaran.SetTimeout ((timeout)

PeraturantimeoutParameter digunakan untuk menentukan jumlah milidetik untuk pengaturan timeout. timeout benar nomor

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 detik.resthanya protokol, digunakan untuk mengatur timeout padarestpermintaan, itu berlaku dengan mengatur sekali saja.exchange.SetTimeout(3000), menetapkanrestmeminta waktu untukexchangeMenghubungi fungsi dengan permintaan jaringan sepertiexchange.GetTicker()yang tidak menerima jawaban selama lebih dari 3 detik akan time out, dan panggilan fungsi yang melakukan time out akan mengembalikan nilai nol.SetTimeout()bukan fungsi global, itu adalah metode dari objek pertukaran {@var/EXCHANGE exchange}

{@var/EXCHANGE pertukaran}

Benang

FMZ Quant Trading Platform benar-benar mendukung fungsi multi-threaded dariJavaScriptstrategi bahasa dari bawah sistem, dan menerapkan tujuan berikut:

Objek Panduan Pengamatan
Pembuatan thread Objek global multi-threaded Fungsi anggota:Thread, getThread, mainThread, dll.
Benang Objek thread Fungsi anggota:peekMessage, postMessage, join, dll.
ThreadLock Objek penguncian benang Fungsi anggota:acquire, release. Mereka dapat diteruskan ke lingkungan thread sebagai parameter dari fungsi eksekusi thread.
ThreadEvent Objek acara Fungsi anggota:set, clear, wait, isSet. Mereka dapat diteruskan ke lingkungan thread sebagai parameter dari fungsi eksekusi thread.
ThreadKondisi Objek kondisi Fungsi anggota:notify, notifyAll, wait, acquire, release. Mereka dapat diteruskan ke lingkungan thread sebagai parameter dari fungsi eksekusi thread.
ThreadDict Objek kamus Fungsi anggota:get, set. Mereka dapat diteruskan ke lingkungan thread sebagai parameter dari fungsi eksekusi thread.

Pembuatan thread

Peraturanthreadingobject adalah alat manajemen multithreading global yang menyediakan fungsi seperti membuat thread paralel, kunci thread, dan objek kondisi.threadingObyek ini hanya didukung olehJavaScriptstrategi bahasa.

Benang

PeraturanThread()fungsi digunakan untuk membuat thread bersamaan.

PeraturanThread()fungsi mengembalikan aThreadobjek, yang digunakan untuk mengelola thread yang dibuat secara bersamaan, komunikasi thread, dll.

Threadobjek

Thread ((func,...args) Thread ((...item)

Parameterfuncadalah fungsi untuk eksekusi bersamaan (diperkenalkan dengan referensi), dan mendukung pemasangan fungsi anonim.funcdapat menerima beberapa parameter, yang akan diteruskan melalui...argsOleh karena itu, daftar parameter darifuncharus konsisten dengan...args.

fungsi benar fungsi Parameterargadalah parameter aktual yang diteruskan kefunc(yaitu fungsi pelaksanaan thread bersamaan) ketika callback dijalankan; mungkin ada beberapa parameterarg, dan daftar parameter darifuncharus konsisten dengan...args.

arg palsu string, number, bool, object, array, function, null value dan tipe lain yang didukung oleh sistem Parameteritemadalah array yang berisi referensi fungsi dan parameter mereka yang akan dijalankan secara bersamaan.itemparameter dapat diteruskan dalam ketika memanggilThread function.

item benar 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 thread bersamaan untuk fungsi kustom dan fungsi anonim.

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 membuat thread bersamaan dan menjalankan beberapa fungsi secara berurutan.

function testFunc1(p) {
    Log("testFunc1 p:", p)
}

function main() {
    threading.Thread(function(pfn) {
        var threadName = threading.currentThread().name()
        var threadId = threading.currentThread().id()
        pfn(`in thread threadName: ${threadName}, threadId: ${threadId}`)
    }, testFunc1).join()
}

Ini mendukung lulus parameter ke fungsi yang dijalankan secara bersamaan.

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)
}

Ini mendukung lulus dalam string fungsi dan dapat mengimpor perpustakaan eksternal secara dinamis untuk komputasi simultan.

Fungsi benangfuncmelewati ke dalamThread()fungsi untuk eksekusi bersamaan berjalan di lingkungan yang terisolasi, sehingga variabel di luar thread tidak dapat dirujuk secara langsung, dan kompilasi akan gagal ketika dirujuk. Pada saat yang sama, referensi ke fungsi penutupan lainnya tidak didukung di dalam thread. Semua API yang disediakan oleh platform dapat dipanggil di dalam thread, tetapi fungsi yang didefinisikan pengguna lainnya tidak dapat dipanggil.

Ini mendukung sistem backtesting dan lingkungan perdagangan langsung. Semua fungsi terkait thread bersamaan hanya didukung sebagai kompatibilitas kode dalam sistem backtesting dan tidak akan benar-benar dieksekusi oleh thread bersamaan, jadi mereka tidak akan diulang 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 ini 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 sesuai dengan menentukan parameter.

ThreadId benar Nomor

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 thread yang ditentukan melaluithreadId.

Ini mendukung sistem backtesting dan lingkungan perdagangan langsung.

Jika thread yang ingin Anda dapatkan telah dieksekusi dan dilepaskan, Anda tidak dapat 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 dari benang utama, yaitu benang di manamain()fungsi dalam strategi yang terletak.

PeraturanmainThread()fungsi mengembalikan objek thread dari thread utama.

Threadobjek

mainThread ((()

function main() {
    Log("The threadId of the main thread:", threading.mainThread().id())
}

DapatkanThreadobjek dari benang utama dan outputthreadIddari 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 dari benang utama juga dapat diperoleh dalam benang paralel.

Ini mendukung sistem backtesting dan lingkungan 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/threading/Dict Dict}, {@fun/Threads/threading/threading/pending pending}, {@fun/Threads/threading/eventLoop Loop}

Thread saat ini

PeraturancurrentThread()fungsi digunakan untuk mendapatkan objek thread dari thread saat ini.

PeraturancurrentThread()fungsi mengembalikan objek thread dari thread saat ini.

Threadobjek

currentThread ((()

function test() {
    Log("Id of the current thread:", threading.currentThread().id())
}

function main() {
    var t1 = threading.Thread(test)
    t1.join()
}

DapatkanThreadobjek dari benang arus dan outputthreadIddari benang saat ini.

Ini mendukung sistem backtesting dan lingkungan perdagangan langsung.

{@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/event Event}, {@fun/Threads/threading/threading/Dict Dict}, {@fun/Threads/threading/threading/eventLoop pending}, {@fun/Threads/threading/eventLoop eventLoop}

Kunci

PeraturanLock()fungsi digunakan untuk membuat obyek thread lock.

PeraturanLock()fungsi mengembalikan objek thread lock.

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 thread bersamaan mengakses sumber daya yang sama.

Ini mendukung sistem backtesting dan lingkungan 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}

Kondisi

PeraturanCondition()fungsi digunakan untuk membuat objek variabel kondisi, yang digunakan untuk mencapai sinkronisasi dan komunikasi antara thread dalam lingkungan serentak multi-threaded.Condition(), sebuah thread dapat menunggu ketika kondisi tertentu tidak terpenuhi sampai thread lain memberitahunya bahwa kondisi telah terpenuhi.

PeraturanCondition()fungsi mengembalikan aThreadCondition object.

ThreadConditionobjek

Kondisi

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 thread bersamaan mengakses sumber daya yang sama.

Sistem backtesting tidak menerapkan fungsi ini, hanya mendefinisikannya.

{@fun/Threads/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop}

Peristiwa

PeraturanEvent()fungsi digunakan untuk membuatacara threadobjek, yang digunakan untuk sinkronisasi antara thread, memungkinkan satu thread untuk menunggu pemberitahuan atau sinyal dari thread 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 thread bersamaan mengakses sumber daya yang sama.

Ini mendukung sistem backtesting dan lingkungan 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/Thread Thread}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop eventop}

Dict

PeraturanDict()fungsi digunakan untuk membuat objek kamus untuk lulus ke thread bersamaan.

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()    
}

Melalui objek normal ke fungsi pelaksanaan thread bersamaan untuk menguji apakah memodifikasi nilai kunci objek akan menyebabkan perubahan nilai kunci objek di thread 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 dibuat olehDict()fungsi ke fungsi eksekusi thread bersamaan, dan menguji apakah memodifikasi nilai kunci objek akan menyebabkan nilai kunci objek dalam thread lain berubah.

Ketika sebuah objek umum diteruskan ke fungsi thread bersamaan, itu diteruskan sebagai salinan mendalam.

Ini mendukung sistem backtesting dan lingkungan 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/threading/pending pending}, {@fun/Threads/threading/eventLoop}

sedang menunggu

PeraturanpendingFungsi ini digunakan untuk mendapatkan jumlah thread bersamaan yang berjalan dalam program strategi saat ini.

Peraturanpending()fungsi mengembalikan jumlah thread bersamaan yang sedang dijalankan oleh program strategi saat ini.

nomor

sedang menunggu ((()

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 thread yang berjalan bersamaan dan panggilpending()fungsi pada titik waktu yang berbeda.

Ketika strategimain()fungsi mulai berjalan, memanggil fungsipending()langsung akan mengembalikan 1, karena benang utama di mana strategimain()fungsi yang terletak juga thread yang sedang menunggu.

Ini mendukung sistem backtesting dan lingkungan 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 dapat dibuat atau dikembalikan olehthreading.Thread(), threading.getThread(), threading.mainThread(), danthreading.currentThread().

PeekMessage

PeraturanpeekMessage()fungsi digunakan untuk mendapatkan pesan dari thread.

PeraturanpeekMessage()fungsi mengembalikan pesan yang diterima oleh thread yang terkait dengan objek thread saat ini.

string, number, bool, object, array, null value dan jenis lain yang didukung oleh sistem

PeekMessage (() peekMessage (timeout)

Parametertimeoutadalah pengaturan timeout. Ini akan memblokir dan menunggu jumlah milidetik yang ditetapkan oleh parameter dan mengembalikan data. Jika tidak ada data dan timeout melebihi batas, nilai nol akan dikembalikan. Jikatimeoutditetapkan menjadi 0 atautimeoutparameter tidak dilewati, itu berarti bahwa proses akan memblokir dan menunggu sampai data diterima dari saluran.timeoutJika nilai yang ditetapkan adalah -1, berarti bahwa proses tidak akan memblokir dan mengembalikan data segera.

timeout palsu Nomor

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()
}

Kirim pesan ke thread utama dari thread paralel.

Saat menulis program, kita perlu memperhatikan 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}

PostMessage

PeraturanpostMessage()fungsi digunakan untuk mengirim pesan ke thread.

postMessage ((msg)

Parametermsgadalah pesan yang akan dikirim.

msg benar Setiap jenis yang didukung oleh sistem, seperti string, angka, bool, objek, array, fungsi, nilai nol, dll.

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()
}

Kirim pesan dalam thread bersamaan dan gunakaneventLoop()untuk menerima pemberitahuan pesan.

function main() {
    threading.mainThread().postMessage(function(msg) {
        Log("func from mainThread, msg:", msg)
    })
    
    threading.Thread(function() {
        var func = threading.mainThread().peekMessage()
        func("in " + threading.currentThread().name())
    }).join()
}

Ini mendukung mengirim fungsi.

Ketika fungsi eksekusi threads memanggilpostMessage()fungsi untuk mengirim sinyal atau data, sebuah peristiwa pesan juga dihasilkan.eventLoop()fungsi untuk menerima pemberitahuan pesan.

{@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/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}

bergabung

Peraturanjoin()fungsi digunakan untuk menunggu thread untuk keluar dan merebut kembali sumber daya sistem.

PeraturanThreadRetobjekberisi data tentang hasil pelaksanaan.

  • id: ID benang.
  • diakhiri: Apakah benang dipaksa untuk berakhir.
  • elapsed: Waktu berjalan benang dalam nanodetik.
  • ret: Nilai yang dikembalikan dari fungsi thread.

ThreadRetobjek

Bergabunglah. bergabung (timeout)

Peraturantimeoutparameter digunakan untuk mengatur timeout dalam milidetik untuk menunggu thread untuk selesai.timeoutparameter diatur ke 0 atautimeoutparameter tidak diatur,join()fungsi akan memblokir dan menunggu sampai thread selesai menjalankan.timeoutParameter diatur menjadi -1,join()Fungsi akan segera kembali.

timeout palsu Nomor

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}
}

Ujilahjoin()fungsi untuk timeout dan output nilai kembali.

Peraturanjoin()fungsi waktu 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 mengakhiri thread dan melepaskan sumber daya perangkat keras yang digunakan oleh thread yang dibuat.

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)
    }
}

Mengakhiri eksekusi thread secara paksa Setelah mengakhiri thread secara paksa, tidak akan ada output dari thread ini di log.

Untuk benang yang diakhiri dengan paksa olehterminate()fungsi, kita tidak bisa lagi menggunakanjoin()fungsi untuk menunggu mereka untuk mengakhiri.

{@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 variabel yang tercatat dalam lingkungan thread. data yang valid ketika thread belum menjalankanjoin()fungsi (menunggu keberhasilan keluar) dan belum melaksanakanterminate()fungsi (mengakhiri benang secara paksa).

PeraturangetData()fungsi mengembalikan nilai kunci yang sesuai dengankeyparameter dalam pasangan nilai kunci yang disimpan dalam konteks thread saat ini.

string, number, bool, object, array, null value dan jenis lain yang didukung oleh sistem

getData ((() getData (kunci)

Peraturankeyparameter adalah nama kunci dari pasangan kunci-nilai yang disimpan.

kunci benar string

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()
}

Catat nilai kuncicountdalam lingkungan thread bersamaan, dan kemudian membaca nilai kunci daricountdi 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 variabel dalam konteks thread.

setData ((kunci, nilai)

PeraturankeyParameter digunakan untuk menentukan nama kunci dari pasangan kunci-nilai yang disimpan.

kunci benar string PeraturanvalueParameter digunakan untuk menentukan nilai kunci dari pasangan kunci-nilai yang disimpan.

nilai benar Setiap jenis yang didukung oleh sistem, seperti string, angka, bool, objek, array, fungsi, nilai nol, dll.

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Sleep(1000)
    Log(`t1.getData("data"):`, t1.getData("data"))
    t1.join()
}

Atur pasangan kunci-nilai di thread paralel dan baca pasangan kunci-nilai di thread utama.

function main() {
    threading.mainThread().setData("func2", function(p) {
        Log("func2 p:", p)
    })
    
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("func1", function(p) {
            Log("func1 p:", p)
        })
    
        var func2 = threading.mainThread().getData("func2")
        func2("test2")
    })
    
    Sleep(1000)
    var func1 = t1.getData("func1")
    func1("test1")
    t1.join()
}

Ini mendukung key-value passing ke dalam fungsi.

Data yang valid ketika thread belum dijalankanjoin()fungsi (menunggu keberhasilan keluar) dan belum melaksanakanterminate()fungsi (mengakhiri thread secara paksa). Nilai parametervalueharus menjadi variabel yang dapat 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 name}, {@fun/Threads/Thread/eventLoop eventLoop}

id

Peraturanid()fungsi digunakan untuk mengembalikanthreadIddari instansi objek multithreaded saat ini.

Nilai pengembalianid()fungsi adalahthreadId.

nomor

id()

function main() {
    var t1 = threading.Thread(function() {
        threading.currentThread().setData("data", 100)
    })
    Log(`t1.id():`, t1.id())
    t1.join()
}

Buat thread yang berjalan bersamaan dan outputthreadIddari thread paralel ini di 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/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}

nama

Peraturanname()fungsi digunakan untuk mengembalikan nama contoh objek multithreaded saat ini.

Peraturanname()fungsi mengembalikan nama thread bersamaan.

string

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 paralel dan keluarkan nama thread paralel di 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 mendengarkan untuk acara yang diterima oleh thread.

PeraturaneventLoop()fungsi mengembalikan informasi peristiwa yang diterima oleh thread saat ini. LihatStruktur Informasi Acara.

objek, nilai nol

eventLoop (() eventLoop (timeout)

Parametertimeoutadalah pengaturan timeout dalam milidetik Jika parametertimeoutjika set menjadi 0, akan menunggu suatu peristiwa terjadi sebelum kembali. jika lebih besar dari 0, akan mengatur event waiting timeout. jika kurang dari 0, akan mengembalikan event terbaru segera.

timeout palsu Nomor

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()
}

Mengeksekusi tiga thread secara bersamaan dan keluarkan informasi peristiwa yang diterima.

Mekanisme pemrosesaneventLoop()fungsi 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 thread, digunakan untuk pemrosesan sinkronisasi multi-thread.

mendapatkan

Peraturanacquire()Fungsi digunakan untuk meminta kunci benang (lock).

mendapatkan ((()

Silakan lihatthreading.Lock()bagian untuk contoh.

Peraturanacquire()Fungsi ini digunakan untuk meminta kunci thread.acquire()fungsi dari objek thread lock, ia mencoba untuk memperoleh kunci. Jika kunci saat ini tidak dipegang oleh thread lain, thread yang memanggil berhasil memperoleh kunci dan melanjutkan eksekusi. Jika kunci sudah dipegang oleh thread lain, thread yang memanggilacquire()akan diblokir sampai kunci dilepaskan.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/release release}

Pembebasan

Peraturanrelease()fungsi digunakan untuk melepaskan kunci benang (membuka).

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()
}

Pengujian skenario kebuntuan

Perlu dicatat bahwa penggunaan kunci benang yang tidak tepat dapat menyebabkan kebuntuan.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}

ThreadEvent

Objek acara, digunakan untuk pemberitahuan dan sinyal acara multi-threaded.

set

Peraturanset()fungsi digunakan untuk memberi tahu peristiwa (set sinyal).

Set (()

Silakan lihatthreading.Event()bagian untuk contoh.

Jika sinyal telah diatur menggunakanset()Kita harus membersihkan sinyal dan mengaturnya lagi.

{@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}

jelas

Peraturanclear()Fungsi digunakan untuk membersihkan sinyal.

jelas.

Silakan lihatthreading.Event()bagian untuk contoh.

{@fun/Threads/ThreadEvent/set set}, {@fun/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}

Tunggu.

Peraturanwait()fungsi digunakan untuk mengatur acara (sinyal) menunggu, dan akan memblokir sebelum acara (sinyal) ditetapkan; mendukung pengaturan parameter timeout.

Peraturanwait()fungsi mengembalikan apakah timeout telah terjadi. Jika demikian, mengembalikan nilai benar.

bool

Tunggu. Tunggu (timeout)

PeraturantimeoutParameter digunakan untuk mengatur waktu tunggu dalam milidetik.

timeout palsu Nomor

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 kembali dariwait() function.

{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/isSet isSet}

isSet

PeraturanisSet()fungsi digunakan untuk menentukan apakah suatu peristiwa (sinyal) telah ditetapkan.

PeraturanisSet()fungsi mengembalikan apakah acara (sinyal) telah ditetapkan; jika acara (sinyal) telah ditetapkan, mengembalikan nilai benar.

bool

isSet()

Silakan lihatthreading.Event()bagian untuk contoh.

{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}

ThreadKondisi

Objek kondisi, digunakan untuk sinkronisasi multi-thread.

Beritahu

Peraturannotify()fungsi digunakan untuk membangunkan thread menunggu (jika ada).wait()metode akan terbangun.

Berikan pemberitahuan

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 membangkitkan thread di antrian menunggu.

Ketikanotify()fungsi membangunkan benang, benang akan mendapatkan kembali kunci benang.

{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

Kabari Semua

PeraturannotifyAll()Fungsi membangunkan semua thread yang menunggu.

Kabarkan Semua

Silakan lihatThreadCondition.notify()bagian untuk contoh.

PeraturannotifyAll()fungsi membangkitkan semua waiting threads satu per satu, dan threads terbangun mendapatkan kembali kunci thread.

{@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 kondisi tertentu yang dirancang.

Tunggu.

Silakan lihatThreadCondition.notify()bagian untuk contoh.

Peraturanwait()Fungsi melepaskan kunci benang dan mendapatkan kembali kunci benang ketika terbangun.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

mendapatkan

Peraturanacquire()Fungsi digunakan untuk meminta kunci benang (lock).

mendapatkan ((()

Silakan lihatThreadCondition.notify()bagian untuk contoh.

Sebelum digunakanwait(), Anda perlu meminta thread lock (lock) dari objek kondisi saat ini.

{@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).

Pembebasan (((

Silakan lihatThreadCondition.notify()bagian untuk contoh.

Setelah digunakanwait(), kita perlu untuk melepaskan thread lock (membuka) dari kondisi saat ini objek.

{@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 berbagi data.

Dapatkan

Peraturanget()fungsi digunakan untuk mendapatkan nilai kunci yang tercatat dalam objek kamus.

Peraturanget()fungsi mengembalikan nilai kunci yang ditentukan olehkey parameter.

string, number, bool, object, array, null value dan jenis lain yang didukung oleh sistem

Dapatkan kunci

PeraturankeyParameter digunakan untuk menentukan nama kunci yang sesuai dengan kunci yang akan diperoleh.

kunci benar string

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 acara untuk memberi tahu thread untuk membaca dan memodifikasi data.

{@fun/Threads/ThreadDict/set set}

set

Peraturanset()fungsi digunakan untuk mengatur pasangan kunci-nilai.

set (kunci, nilai)

Parameterkeydigunakan untuk mengatur nama kunci yang akan dimodifikasi.

kunci benar string Parametervaluedigunakan untuk mengatur nilai kunci yang akan dimodifikasi.

nilai benar string, number, bool, object, array, function, null value dan tipe lain yang didukung oleh sistem

function main() {
    var dict1 = threading.Dict()
    dict1.set("func1", function(p) {
        Log("func1 p:", p)
    })
    
    threading.Thread(function(dict1) {
        var func1 = dict1.get("func1")
        func1("test")
    }, dict1).join()
}

Ini mendukung key-value passing ke dalam fungsi.

{@fun/Threads/ThreadDict/get get}

Web3

exchange.IO("abi",...)

Dalam Platform Perdagangan Kuantum FMZ, terutama menerapkan berbagai fungsi, panggilan terkait dengan blockchain melaluiexchange.IO()Dokumen berikut menggambarkanexchange.IO()metode panggilan dariexchange.IO("abi", ...)fungsi digunakan untuk mendaftarkan ABI.

exchange.IO(k, alamat, abiContent)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"abi"berarti bahwa fungsi ini digunakan untuk mendaftarABIAku tidak tahu. k benar string PeraturanaddressParameter digunakan untuk menentukan alamat kontrak pintar. alamat benar string PeraturanabiContentparameter digunakan untuk menentukanABIdari kontrak pintar. abiContent benar string

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)
}

Metode panggilan kontrak pintar tidak perlu didaftarkan jika metode ERC20 standar. DapatkanABIisi kontrak dapat diperoleh dengan URL berikut, mengambilresulthanya bidang, misalnya:

https://api.etherscan.io/api?module=contract&action=getabi&address=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45

exchange.IO("api", eth,...)

Metode panggilan dariexchange.IO("api", "eth", ...)fungsi digunakan untuk memanggil metode Ethereum RPC.

Peraturanexchange.IO("api", "eth", ...)fungsi mengembalikan nilai yang dikembalikan dari metode RPC yang disebut. string, number, bool, object, array, null dan semua tipe lain yang didukung oleh sistem

exchange.IO(k, blockChain, rpcMethod)exchange.IO(k, blockChain, rpcMethod,...args)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"api"menunjukkan bahwa fungsi digunakan untuk memperluas permintaan panggilan. k benar string PeraturanblockChainparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"eth"menunjukkan bahwa fungsi ini digunakan untuk panggilan metode RPC di Jaringan Ethereum. blockChain benar string PeraturanrpcMethodParameter digunakan untuk mengatur metode RPC yang akan dipanggil olehexchange.IO()fungsi. rpcMethod benar string Peraturanargparameter digunakan untuk menentukan parameter metode RPC yang akan dipanggil.argJenis dan jumlahargparameter tergantung pada metode RPC yang ditentukan olehrpcMethodParameter. arg palsu string, number, bool, object, array, function, null, dan semua tipe lain yang didukung 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 saldo ETH di 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 transfer ETH, Anda dapat mengatur{gasPrice: 11, gasLimit: 111, nonce: 111}parameter, yang ditetapkan pada parameter terakhir dariexchange.IO()Anda dapat melewatkannoncedan menggunakan sistem default, atau meninggalkangasLimit/gasPrice/nonceUnduh dan gunakan nilai default 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)
}

PertanyaangasPrice:

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)
}

Pertanyaaneth_estimateGas:

Parameter kedua dariexchange.IO()fungsi dengan"eth"dapat langsung memanggil metode RPC yang tersedia untuk server node Ethereum.

{@fun BigDecimal}, {@fun BigInt}

exchange.IO("mengkode",...)

Peraturanexchange.IO("encode", ...)fungsi dipanggil untuk pengkodean data.

Peraturanexchange.IO("encode", ...)fungsi mengembalikan data yang dikodekan. string

exchange.IO(k, dataFormat,...args)exchange.IO(k, alamat, dataFormat)exchange.IO(k, alamat, dataFormat,...args)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"encode"berarti fungsi digunakan untuk pengkodean data. k benar string Peraturanaddressparameter digunakan untuk mengatur alamat kontrak pintar.exchange.IO("encode", ...)fungsi, melewati dalamaddressparameter menunjukkan pengkodean metode panggilan pada kontrak pintar.exchange.IO("encode", ...)fungsi, jikaaddressparameter tidak dilewati, fungsi ini digunakan untuk mengkode urutan jenis yang ditentukan dan secara fungsional setara denganabi.encodedalamSolidityAku tidak tahu. alamat palsu string PeraturandataFormatParameter digunakan untuk menentukan metode, jenis, dan urutan data yang dikodekan. dataFormat benar string Peraturanargparameter digunakan untuk menentukan nilai data spesifik yang sesuai dengandataFormatMungkin ada lebih dari satu parameterargparameter, dan jenis dan jumlahargparameter tergantung padadataFormatpengaturan parameter. arg palsu string, number, tuple, array, dan semua jenis lain yang didukung 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)
}

Misalnya, memanggil metode pengkodeanunwrapWETH9:

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
    */
}

Ini setara dengan contoh pengkodean dariabi.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)
}

Ini mendukung pengkodean tuple atau urutan tipe yang berisi tuple. Urutan jenis ini terdiri dari:tuple, bytes, jadi ketika meneleponexchange.IO()untuk pengkodean, Anda perlu terus melewati dua parameter:

    1. Variabel yang sesuai dengan tipe tuple:
    
    {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
    
    

    Parameter yang diberikan juga harus konsisten dengan struktur dan jenistuple, sebagaimana didefinisikan dalamtypesParameter dari formulir:tuple(a uint256,b uint8,c address).

    1. Variabel yang sesuai dengan tipebytes:
    "0011"
    
function main() {
    var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"]   // ETH address, USDT address
    var ret = exchange.IO("encode", "address[]", path)
    Log("encode: ", ret)
}

Ini mendukung untuk pengkodean berurutan array atau jenis yang mengandung array:

Peraturanexchange.IO()fungsi merangkumencodemetode, yang dapat mengembalikan kode panggilan fungsi kehexUntuk penggunaan khusus, Anda dapat merujuk ke platform yang tersedia untuk umumUniswap V3 Trade TemplateAku tidak tahu. Ketika metode pengkodean memanggil kontrak pintar, ABI yang sesuai harus didaftarkan terlebih dahulu.

exchange.IO("encodePacked",...)

Peraturanexchange.IO("encodePacked", ...)fungsi dipanggil dengan cara yang digunakan untukencodePacked encoding.

Peraturanexchange.IO("encodePacked", ...)fungsi mengembalikanencodePackeddata terenkripsi. string

exchange.IO(k, dataFormat,...args)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"encodePacked"berarti bahwa fungsi digunakan untuk dataencodePackedmengkodekan. k benar string PeraturandataFormatparameter digunakan untuk menentukan jenis dan urutanencodePackeddata terenkripsi. dataFormat benar string Peraturanargparameter digunakan untuk menentukan nilai data spesifik yang sesuai dengandataFormatMungkin ada lebih dari satu parameterargparameter, dan jenis dan jumlahargparameter tergantung padadataFormatpengaturan parameter. arg benar string, number, tuple, array, dan semua jenis lain yang didukung 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)
}

Saat digunakanUniswap V3, Anda perlu untuk lulus dalam parameter seperti jalur pertukaran, Anda perlu menggunakanencodePackedoperasi pengkodean:

exchange.IO("decode",...)

Peraturanexchange.IO("decode", ...)fungsi dipanggil dengan cara yang digunakan untuk dekoding.

Peraturanexchange.IO("decode", ...)fungsi mengembalikan data yang didekode. Mengembalikan string ketika hanya ada satu data yang ditentukan olehdataFormatMengembalikan array ketika ada lebih dari satu data yang ditentukan olehdataFormatParameter. array、string

exchange.IO(k, data)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, dan mengaturnya ke"decode"berarti bahwa fungsi digunakan untuk dekoding data. k benar string PeraturandataFormatParameter digunakan untuk menentukan jenis dan urutan data yang didekode. dataFormat benar string PeraturandataParameter digunakan untuk mengatur data yang akan didekode. data benar string

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)
}

Operasi terbalik dariexchange.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 padapathproses parameter, karenaexactOutputpanggilan metode yang perlu dikodekan kemudian membutuhkanpathsebagai parameter. KemudianencodeyangexactOutputmetode kontrak rute, yang hanya memiliki satu parameter jenistuple. Nama metodeexactOutputdikodekan sebagai:0x09b81346, dan menggunakanexchange.IO("decode", ...)metode untuk mendekode hasildecodeRaw, konsisten dengan variabeldataTuple.

Untuk pengolahan data,exchange.IO()fungsi mendukung tidak hanya pengkodean, tetapi juga dekodean.

exchange.IO("kunci",...)

Peraturanexchange.IO("key", ...)fungsi dipanggil dengan cara untuk beralih kunci pribadi.

exchange.IO(k, kunci)

Parameterkdigunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"key"berarti fungsi digunakan untuk beralih kunci pribadi. k benar string PeraturankeyParameter digunakan untuk mengatur kunci pribadi. kunci benar string

function main() {
    exchange.IO("key", "Private Key")   // "Private Key" represents the private key string, which needs to be filled in specifically
}

Peraturanexchange.IO()fungsi mendukung beralih kunci pribadi dan dapat memanipulasi beberapa alamat dompet.

exchange.IO("api",...)

Peraturanexchange.IO("api", ...)fungsi dipanggil dengan cara yang digunakan untuk memanggil metode kontrak pintar.

Peraturanexchange.IO("api", ...)fungsi mengembalikan nilai yang dikembalikan dari metode yang disebut kontrak pintar. string, number, bool, object, array, null dan semua tipe lain yang didukung oleh sistem

exchange.IO(k, alamat, metode)exchange.IO(k, alamat, metode,... args)exchange.IO(k, alamat, metode, nilai,... args)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"api"menunjukkan bahwa fungsi digunakan untuk memperluas permintaan panggilan. k benar string PeraturanaddressParameter digunakan untuk menentukan alamat kontrak pintar. alamat benar string PeraturanmethodParameter digunakan untuk menentukan metode kontrak pintar yang akan dipanggil. metode benar string Peraturanvalueparameter digunakan untuk mengatur jumlah ETH yang akan dikirim.stateMutabilityAtribut metode kontrak pintar yang akan dieksekusi adalahpayable, kemudianvalueParameter harus dilewati."stateMutability": "payable"Atribut dapat dilihat dari ABI.exchange.IO()fungsi akan menentukan parameter yang diperlukan berdasarkanstateMutabilityAtribut dalam ABI yang telah terdaftar.stateMutabilityatribut adalahnonpayable, kemudianvalueParameter tidak perlu dilewati. nilai palsu nomor, string Peraturanargparameter digunakan untuk menentukan parameter metode kontrak pintar yang akan dipanggil.argparameter, dan jenis dan jumlahargparameter tergantung pada metode kontrak pintar yang akan dipanggil. arg palsu string, number, bool, dan semua jenis lain yang didukung 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
}

Peraturandecimalsmetode adalahconstantmetode ERC20 yang tidak menimbulkan konsumsi gas dan dapat menanyakan data presisi token.decimalsNilai pengembalian: data presisi 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"))   
}

Peraturanallowancemetode adalahconstantmetode ERC20 yang tidak menghasilkan konsumsi gas dan dapat menanyakan jumlah yang sah dari token untuk alamat kontrak tertentu.allowancemetode mengambil 2 parameter, yang pertama adalah alamat dompet dan yang kedua adalah alamat otorisasi.
owner: alamat dompet, contohnya diganti dengan string owner, penggunaan sebenarnya perlu mengisi alamat tertentu.spender: alamat kontrak yang sah, contohnya digantikan oleh string spender, penggunaan sebenarnya perlu mengisi alamat tertentu, misalnya dapatUniswap 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 || {})
}

Peraturanmulticallmetode ini adalah non-constantmetodeUniswap V3yang menghasilkan konsumsi gas dan digunakan untuk menebus token dengan berbagai cara. Peraturanmulticallmetode mungkin memiliki berbagai cara untuk melewati parameter, Anda dapat memeriksa ABI yang berisi metode secara khusus, Anda perlu mendaftarkan ABI sebelum memanggil metode.

Untuk contoh spesifik darimulticallmetode panggilan, Anda dapat merujuk ke platform yang tersedia untuk umumUniswap V3 Trade Template

Beberapa detail dijelaskan di sini menggunakan pseudo-kode:


exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data)

ContractV3SwapRouterV2: alamat router v2 dari Uniswap V3.value: jumlah ETH yang akan ditransfer, ditetapkan menjadi 0 jika tokenIn token dari operasi pertukaran bukan ETH.deadline: deadlineadalah parameter darimulticallmetode, yang dapat diatur untuk (new Date().getTime() / 1000) + 3600, menunjukkan bahwa itu berlaku selama satu jam.data: dataadalah parameter darimulticallmetode, data dari operasi pengemasan yang akan dilakukan.

Mirip denganexchange.IO("api", "eth", "send", "toAddress", toAmount), yanggasLimit/gasPrice/noncepengaturan panggilan metode dapat ditentukan saat memanggilmulticallmetode. Sekali lagi, kita menggunakan pseudo-kode untuk menggambarkan:


exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data, {gasPrice: 123456, gasLimit: 21000})

Parameter{gasPrice: 11, gasLimit: 111, nonce: 111}dapat diatur sesuai dengan kebutuhan khusus, yang diatur ke parameter terakhir dariexchange.IO()fungsi. Anda bisa melewatkannoncedan menggunakan sistem default nilai, atau meninggalkangasLimit/gasPrice/nonceUnduh dan gunakan nilai default sistem untuk semua.

exchange.IO("Alamat")

Peraturanexchange.IO("address")fungsi dipanggil sedemikian rupa untuk mendapatkan alamat dompet yang dikonfigurasi oleh objek pertukaran {@var/EXCHANGE exchange}.

Peraturanexchange.IO("address")fungsi mengembalikan alamat dompet yang dikonfigurasi. string

exchange.IO(k)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"address"berarti bahwa fungsi ini digunakan untuk mendapatkan alamat dompet yang dikonfigurasi. k benar string

function main() {
    Log(exchange.IO("address"))         // Print the wallet address of the private key configured on the exchange object
}

exchange.IO("dasar",...)

Peraturanexchange.IO("base", ...)fungsi dipanggil dengan cara untuk mengatur alamat node RPC.

exchange.IO(k, alamat)

Peraturankparameter digunakan untuk mengatur fungsi dariexchange.IO()fungsi, diatur untuk"base"berarti fungsi digunakan untuk beralih node RPC. k benar string PeraturanaddressParameter digunakan untuk mengatur alamat node RPC. alamat benar string

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 menghitungIndikator MACD perbandingan dan kesamaan yang dihaluskan secara eksponensial.

Nilai pengembalianTA.MACD()fungsi adalah array dua dimensi dengan struktur:[DIF, DEA, MACD]Aku tidak tahu. Array

TA.MACD ((inReal) TA.MACD ((inReal, optInFastPeriod, optInSlowPeriod, optInSignalPeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInFastPeriodParameter digunakan untuk mengatur periode cepat. optInFastPeriod palsu Nomor PeraturanoptInSlowPeriodParameter digunakan untuk mengatur periode lambat. optInSlowPeriod palsu Nomor PeraturanoptInSignalPeriodparameter digunakan untuk mengatur periode sinyal. OpInSignalPeriode palsu Nomor

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, dioptimalkan untuk algoritma indikator umum.JavaScript, Python, C++panggilan strategi bahasa,Kode perpustakaan TA sumber terbukaAku tidak tahu. Nilai default darioptInFastPeriod, optInSlowPeriod, danoptInSignalPeriodparameter dariTA.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{\cH00FFFF}, {@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 menghitungIndikator stokastik.

Nilai pengembalianTA.KDJ()fungsi adalah array dua dimensi dengan struktur:[K, D, J]Aku tidak tahu. Array

TA.KDJ ((inReal) TA.KDJ ((inReal, periode, kPeriode, dPeriode)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik Peraturanperiodparameter digunakan untuk mengatur periode 1. periode palsu Nomor PeraturankPeriodparameter digunakan untuk mengatur periode 2. kPeriode palsu Nomor PeraturandPeriodparameter digunakan untuk mengatur periode 3. dPeriode palsu Nomor

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 default untukperiod, kPeriod, dandPeriodparameter dariTA.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{\cH00FFFF}, {@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 menghitungIndikator kekuatan.

Nilai pengembalianTA.RSI()fungsi adalah: array satu dimensi. Array

TA.RSI ((inReal) TA.RSI ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode. optInTimePeriode palsu Nomor

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 default darioptInTimePeriodparameter dariTA.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{\cH00FFFF}, {@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 menghitungRata-rata Indikator Volatilitas Benar.

Nilai pengembalianTA.ATR()fungsi adalah: array satu dimensi. Array

TA.ATR ((inPriceHLC) TA.ATR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode. optInTimePeriode palsu Nomor

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 default darioptInTimePeriodparameter dariTA.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{\cH00FFFF}, {@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 menghitungIndikator pasang energi.

Nilai pengembalianTA.OBV()fungsi adalah: array satu dimensi. Array

TA.OBV ((inReal) TA.OBV ((inReal, inPriceV)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturaninPriceVParameter digunakan untuk menentukan data jumlah transaksi. inPriceV 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{\cH00FFFF}, {@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 menghitungIndikator MACD.

Nilai pengembalianTA.MA()fungsi adalah: array satu dimensi. Array

TA.MA(inReal)TA.MA(inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode. optInTimePeriode palsu Nomor

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 default darioptInTimePeriodparameter dariTA.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 menghitungindikator rata-rata eksponensial.

Nilai pengembalianTA.EMA()fungsi adalah: array satu dimensi. Array

TA.EMA ((inReal) TA.EMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode. optInTimePeriode palsu Nomor

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 default darioptInTimePeriodparameter dariTA.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}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA

TA.BOLL

PeraturanTA.BOLL()fungsi digunakan untuk menghitungIndikator Bollinger Band.

Nilai pengembalianTA.BOLL()fungsi adalah array dua dimensi dengan struktur:[upLine, midLine, downLine]Aku tidak tahu. Array

TA.BOLL ((inReal) TA.BOLL ((inReal, periode, pengganda)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik Peraturanperiodparameter digunakan untuk mengatur periode. periode palsu Nomor PeraturanmultiplierParameter digunakan untuk mengatur pengganda. perkalian palsu Nomor

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 default untukperioddanmultiplierparameter dariTA.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{\cH00FFFF}, {@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 menghitungIndikator Buaya.

Nilai pengembalianTA.Alligator()fungsi adalah array dua dimensi dengan struktur:[jawLine, teethLine, lipsLine]Aku tidak tahu. Array

TA. Alligator ((inReal) TA.Aligator ((inReal, rahangLength, gigiLength, bibirLength

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanjawLengthParameter digunakan untuk mengatur periode rahang. rahangpanjang palsu Nomor PeraturanteethLengthParameter digunakan untuk mengatur periode gigi. gigiLength palsu Nomor PeraturanlipsLengthparameter digunakan untuk mengatur periode bibir atas. Lengan bibir palsu Nomor

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 default darijawLength, teethLength, danlipsLengthparameter dariTA.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{\cH00FFFF}, {@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 menghitungIndikator Aliran Uang Chaikin.

Nilai pengembalianTA.CMF()fungsi adalah: array satu dimensi. Array

TA.CMF ((inReal) TA.CMF ((inReal, inPriceV)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturaninPriceVParameter digunakan untuk menentukan data volume. inPriceV 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{\cH00FFFF}, {@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 menghitungharga tertinggi periode.

PeraturanTA.Highest()fungsi mengembalikan nilai maksimum dari atribut dalam periode tertentu terakhir, tidak termasuk Bar saat ini. nomor

TA.Tinggi (dalam Real) TA.Tinggi ((inReal, periode, attr)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik Peraturanperiodparameter digunakan untuk mengatur periode. periode palsu Nomor Peraturanattrparameter digunakan untuk mengatur atribut, opsional:Open, Close, Low, High, Volume, OpenInterestAku tidak tahu. attr palsu string

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);
}

Misalnya, jikaTA.Highest(records, 30, "High")fungsi dipanggil, jika parameter periodeperioddiatur untuk0, itu berarti menghitung semuaBarsdari data K-line yang dikirimkan olehinRealparameter; jika parameter atributattrtidak ditentukan, data K-line yang dikirimkan 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{\cH00FFFF}, {@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 menghitungperiode harga terendah.

PeraturanTA.Lowest()fungsi mengembalikan nilai minimum dari atribut pada periode tertentu terakhir, tidak termasuk Bar saat ini. nomor

TA.Lowest ((inReal) TA.Terendah ((inReal, periode, attr)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik Peraturanperiodparameter digunakan untuk mengatur periode. periode palsu Nomor Peraturanattrparameter digunakan untuk mengatur atribut, opsional:Open, Close, Low, High, Volume, OpenInterestAku tidak tahu. attr palsu string

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);
}

Misalnya, jikaTA.Lowest(records, 30, "Low")fungsi dipanggil, jika parameter periodeperioddiatur untuk0, itu berarti menghitung semuaBarsdari data K-line yang dikirimkan olehinRealparameter; jika parameter atributattrtidak ditentukan, data K-line yang dikirimkan olehinRealparameter dianggap sebagai array biasa. PenggunaanTA.Highest()danTA.Lowest()fungsi dalamC++strategi perlu dicatat bahwaHighest()danLowest()fungsi masing-masing hanya memiliki 2 parameter. Dan parameter pertama yang diteruskan bukan data garis Krdiperoleh ketika fungsiauto r = exchange.GetRecords()telah dipanggil. Kau harus menghubungirmetode dan lulus dalam data atribut tertentu.r.Close()data harga penutupan.Close, High, Low, Open, Volumeseperti dalamr.Close()metode panggilan.

Contoh tes dariC++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{\cH00FFFF}, {@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.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}

TA.SMA

PeraturanTA.SMA()fungsi digunakan untuk menghitungindikator rata-rata bergerak sederhana.

Nilai pengembalianTA.SMA()fungsi adalah: array satu dimensi. Array

TA.SMA ((inReal) TA.SMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode. optInTimePeriode palsu Nomor

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 default darioptInTimePeriodparameter dariTA.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{\cH00FFFF}, {@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 menghitungDua gagak (K-line chart - Dua gagak).

Nilai pengembaliantalib.CDL2CROWS()fungsi adalah array satu dimensi. Array

talib.CDL2CROWS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDL2CROWS(Records[Open,High,Low,Close]) = Array(outInteger)Untuk panggilan diPythonbahasa, parameter lulus berbeda dan perlu didasarkan pada deskripsi di atas:Records[Open,High,Low,Close].

Contoh pembagian variabelrecords(yaitu parameterinPriceOHLC, ketik {@struct/Record Record} susunan struktur) ke dalam:Opendaftar: ditulis dalam Python sebagairecords.Open. Highdaftar: ditulis sebagairecords.Highdalam Python.Lowdaftar: ditulis dalam Python sebagairecords.Low. Closedaftar: ditulis dalam Python sebagairecords.Close.

Digunakan dalam kode strategi Python:

talib.CDL2CROWS(records.Open, records.High, records.Low, records.Close)

Yang lainnya.talibindikator dijelaskan dengan cara yang sama dan mereka tidak akan diulang.

talib.CDL3BLACKCROWS

Peraturantalib.CDL3BLACKCROWS()Fungsi digunakan untuk menghitungTiga Black Crows (K-line chart - Tiga Black Crows).

Nilai pengembaliantalib.CDL3BLACKCROWS()fungsi adalah: array satu dimensi. Array

talib.CDL3BLACKCROWS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDL3BLACKCROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3INSIDE

Peraturantalib.CDL3INSIDE()Fungsi digunakan untuk menghitungTiga di dalam atas/bawah (K-line chart: Tiga di dalam atas/bawah).

Nilai pengembaliantalib.CDL3INSIDE()fungsi adalah: array satu dimensi. Array

talib.CDL3INSIDE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDL3INSIDE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3LINESTRIKE

Peraturantalib.CDL3LINESTRIKE()fungsi digunakan untuk menghitungTiga-Line Strike (K-line chart: Tiga-Line Strike).

Nilai pengembaliantalib.CDL3LINESTRIKE()fungsi adalah: array satu dimensi. Array

Talib.CDL3LINESTRIKE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDL3LINESTRIKE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3OUTSIDE

Peraturantalib.CDL3OUTSIDE()Fungsi digunakan untuk menghitungTiga di luar atas/bawah (K-line chart: Tiga di luar atas/bawah).

Nilai pengembaliantalib.CDL3OUTSIDE()fungsi adalah: array satu dimensi. Array

talib.CDL3OUTSIDE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDL3OUTSIDE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3STARSINSOUTH

Peraturantalib.CDL3STARSINSOUTH()Fungsi digunakan untuk menghitungTiga Bintang di Selatan (K-line chart: Three Stars In The South).

Nilai pengembaliantalib.CDL3STARSINSOUTH()fungsi adalah: array satu dimensi. Array

Talib.CDL3STARSINSOUTH ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDL3STARSINSOUTH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3WHITESOLDIERS

Peraturantalib.CDL3WHITESOLDIERS()Fungsi digunakan untuk menghitungTiga Prajurit Putih yang Melangkah (Bagian K: Tiga Prajurit Putih yang Melangkah).

Nilai pengembaliantalib.CDL3WHITESOLDIERS()fungsi adalah: array satu dimensi. Array

talib.CDL3WHITESOLDIERS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDL3WHITESOLDIERS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLABANDONEDBABY

Peraturantalib.CDLABANDONEDBABY()Fungsi digunakan untuk menghitungBayi yang ditinggalkan (K-line chart: Bayi yang ditinggalkan).

Nilai pengembaliantalib.CDLABANDONEDBABY()fungsi adalah: array satu dimensi. Array

talib.CDLABANDONEDBABY ((inPriceOHLC) talib.CDLABANDONEDBABY ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk mengatur Penetrasi, nilai default adalah 0,3. optInPenetration palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLABANDONEDBABY(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLADVANCEBLOCK

Peraturantalib.CDLADVANCEBLOCK()fungsi digunakan untuk menghitungBlok Advance (K-line chart: Advance).

Nilai pengembaliantalib.CDLADVANCEBLOCK()fungsi adalah array satu dimensi. Array

talib.CDLADVANCEBLOCK ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLADVANCEBLOCK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLBELTHOLD

Peraturantalib.CDLBELTHOLD()fungsi digunakan untuk menghitungPegang sabuk (grafik garis K: Pegang sabuk).

Nilai pengembaliantalib.CDLBELTHOLD()fungsi adalah: array satu dimensi. Array

talib.CDLBELTHOLD ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLBELTHOLD(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLBREAKAWAY

Peraturantalib.CDLBREAKAWAY()fungsi digunakan untuk menghitungBreakaway (K-line chart: Breakaway).

Nilai pengembaliantalib.CDLBREAKAWAY()fungsi adalah: array satu dimensi. Array

Talib.CDLBREAKAWAY ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLBREAKAWAY(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCLOSINGMARUBOZU

Peraturantalib.CDLCLOSINGMARUBOZU()Fungsi digunakan untuk menghitungMenutup Marubozu (K-line chart: menutup bertelanjang kepala dan bertelanjang kaki).

Nilai pengembaliantalib.CDLCLOSINGMARUBOZU()fungsi adalah: array satu dimensi. Array

talib.CDLCLOSINGMARUBOZU ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLCLOSINGMARUBOZU(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCONCEALBABYSWALL

Peraturantalib.CDLCONCEALBABYSWALL()fungsi digunakan untuk menghitungMenyimpan Baby Swallow (K-line chart: Menyimpan Baby Swallow pattern).

Nilai pengembaliantalib.CDLCONCEALBABYSWALL()fungsi adalah: array satu dimensi. Array

talib.CDLCONCEALBABYSWALL ((inPriceOHLC) (dalam bahasa Inggris)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLCONCEALBABYSWALL(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCOUNTERATTACK

Peraturantalib.CDLCOUNTERATTACK()Fungsi digunakan untuk menghitungCounterattack (K-line chart: Counterattack).

Nilai pengembaliantalib.CDLCOUNTERATTACK()fungsi adalah array satu dimensi. Array

Talib.CDLCOUNTERATTACK (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLCOUNTERATTACK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDARKCLOUDCOVER

Peraturantalib.CDLDARKCLOUDCOVER()Fungsi digunakan untuk menghitungTutupan Awan Gelap (grafik garis K: Tutupan Awan Gelap).

Nilai pengembaliantalib.CDLDARKCLOUDCOVER()fungsi adalah array satu dimensi. Array

talib.CDLDARKCLOUDCOVER ((inPriceOHLC) talib.CDLDARKCLOUDCOVER ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk mengatur Penetrasi, nilai default adalah 0,5. optInPenetration palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLDARKCLOUDCOVER(Records[Open,High,Low,Close],Penetration = 0.5) = Array(outInteger)

talib.CDLDOJI

Peraturantalib.CDLDOJI()Fungsi digunakan untuk menghitungDoji (K-line chart: Doji).

Nilai pengembaliantalib.CDLDOJI()fungsi adalah: array satu dimensi. Array

Talib.CDLDOJI ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDOJISTAR

Peraturantalib.CDLDOJISTAR()fungsi digunakan untuk menghitungDoji Star (K-line chart: Doji Star).

Nilai pengembaliantalib.CDLDOJISTAR()fungsi adalah: array satu dimensi. Array

Talib.CDLDOJISTAR ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLDOJISTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDRAGONFLYDOJI

Peraturantalib.CDLDRAGONFLYDOJI()Fungsi digunakan untuk menghitungDragonfly Doji (K-line chart: Dragonfly Doji).

Nilai pengembaliantalib.CDLDRAGONFLYDOJI()fungsi adalah: array satu dimensi. Array

Talib.CDLDRAGONFLYDOJI (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLDRAGONFLYDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLENGULFING

Peraturantalib.CDLENGULFING()fungsi digunakan untuk menghitungPattern engulfing (K-line chart: engulfing).

Nilai pengembaliantalib.CDLENGULFING()fungsi adalah array satu dimensi. Array

Talib.CDLENGULFING ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLENGULFING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLEVENINGDOJISTAR

Peraturantalib.CDLEVENINGDOJISTAR()fungsi digunakan untuk menghitungMalam Doji Star (K-line chart: Malam Doji Star).

Nilai pengembaliantalib.CDLEVENINGDOJISTAR()fungsi adalah: array satu dimensi. Array

Talib.CDLEVENINGDOJISTAR ((dalam HargaOHLC) Talib.CDLEVENINGDOJISTAR ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk mengatur Penetrasi, nilai default adalah 0,3. optInPenetration palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLEVENINGDOJISTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLEVENINGSTAR

Peraturantalib.CDLEVENINGSTAR()fungsi digunakan untuk menghitungBintang Malam (K-line chart: Bintang Malam).

Nilai pengembaliantalib.CDLEVENINGSTAR()fungsi adalah: array satu dimensi. Array

talib.CDLEVENINGSTAR ((inPriceOHLC) Talib.CDLEVENINGSTAR ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk mengatur Penetrasi, nilai default adalah 0,3. optInPenetration palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLEVENINGSTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLGAPSIDESIDEWHITE

Peraturantalib.CDLGAPSIDESIDEWHITE()Fungsi digunakan untuk menghitungGaris-garis putih berdekatan (K-line chart: Garis-garis putih berdekatan).

Nilai pengembaliantalib.CDLGAPSIDESIDEWHITE()fungsi adalah: array satu dimensi. Array

Talib.CDLGAPSIDESIDEWHITE ((dalam HargaOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLGAPSIDESIDEWHITE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLGRAVESTONEDOJI

Peraturantalib.CDLGRAVESTONEDOJI()fungsi digunakan untuk menghitungGravestone Doji (K-line chart: Gravestone Doji).

Nilai pengembaliantalib.CDLGRAVESTONEDOJI()fungsi adalah: array satu dimensi. Array

Talib.CDLGRAVESTONEDOJI (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLGRAVESTONEDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHAMMER

Peraturantalib.CDLHAMMER()Fungsi digunakan untuk menghitungHammer (K-line chart: Hammer).

Nilai pengembaliantalib.CDLHAMMER()fungsi adalah: array satu dimensi. Array

talib.CDLHAMMER ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLHAMMER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHANGINGMAN

Peraturantalib.CDLHANGINGMAN()Fungsi digunakan untuk menghitungHanging Man (K-line chart: Hanging Man).

Nilai pengembaliantalib.CDLHANGINGMAN()fungsi adalah array satu dimensi. Array

talib.CDLHANGINGMAN ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLHANGINGMAN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHARAMI

Peraturantalib.CDLHARAMI()fungsi digunakan untuk menghitungHarami Pattern (K-line chart: garis negatif dan positif).

Nilai pengembaliantalib.CDLHARAMI()fungsi adalah array satu dimensi. Array

talib.CDLHARAMI ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLHARAMI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHARAMICROSS

Peraturantalib.CDLHARAMICROSS()fungsi digunakan untuk menghitungHarami Cross Pattern (K-line chart: lintas garis negatif dan positif).

Nilai pengembaliantalib.CDLHARAMICROSS()fungsi adalah: array satu dimensi. Array

talib.CDLHARAMICROSS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLHARAMICROSS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIGHWAVE

Peraturantalib.CDLHIGHWAVE()fungsi digunakan untuk menghitungLilin Gelombang Tinggi (K-line chart: Long Leg Cross).

Nilai pengembaliantalib.CDLHIGHWAVE()fungsi adalah array satu dimensi. Array

talib.CDLHIGHWAVE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLHIGHWAVE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIKKAKE

Peraturantalib.CDLHIKKAKE()fungsi digunakan untuk menghitungPola Hikkake (K-line chart: trap).

Nilai pengembaliantalib.CDLHIKKAKE()fungsi adalah array satu dimensi. Array

Talib.CDLHIKKAKE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLHIKKAKE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIKKAKEMOD

Peraturantalib.CDLHIKKAKEMOD()fungsi digunakan untuk menghitungPola Hikkake yang dimodifikasi (K-line chart: Modified Trap).

Nilai pengembaliantalib.CDLHIKKAKEMOD()fungsi adalah: array satu dimensi. Array

talib.CDLHIKKAKEMOD ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLHIKKAKEMOD(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHOMINGPIGEON

Peraturantalib.CDLHOMINGPIGEON()fungsi digunakan untuk menghitungMerpati Homing (K-line chart: Merpati).

Nilai pengembaliantalib.CDLHOMINGPIGEON()fungsi adalah: array satu dimensi. Array

talib.CDLHOMINGPIGEON ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLHOMINGPIGEON(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLIDENTICAL3CROWS

Peraturantalib.CDLIDENTICAL3CROWS()Fungsi digunakan untuk menghitungTiga gagak identik (K-line chart: sama tiga gagak).

Nilai pengembaliantalib.CDLIDENTICAL3CROWS()fungsi adalah: array satu dimensi. Array

talib.CDLIDENTICAL3CROWS ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLIDENTICAL3CROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLINNECK

Peraturantalib.CDLINNECK()fungsi digunakan untuk menghitungPola di leher (K-line chart: neckline).

Nilai pengembaliantalib.CDLINNECK()fungsi adalah: array satu dimensi. Array

Talib.CDLINNECK ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLINNECK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLINVERTEDHAMMER

Peraturantalib.CDLINVERTEDHAMMER()fungsi digunakan untuk menghitungHammer terbalik (K-line chart: Hammer terbalik).

Nilai pengembaliantalib.CDLINVERTEDHAMMER()fungsi adalah: array satu dimensi. Array

talib.CDLINVERTEDHAMMER ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLINVERTEDHAMMER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLKICKING

Peraturantalib.CDLKICKING()Fungsi digunakan untuk menghitungMenendang (K-line chart: menendang).

Nilai pengembaliantalib.CDLKICKING()fungsi adalah array satu dimensi. Array

Talib.CDLKICKING ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLKICKING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLKICKINGBYLENGTH

Peraturantalib.CDLKICKINGBYLENGTH()fungsi digunakan untuk menghitungtendangan - banteng/beruang ditentukan oleh Marubozu yang lebih panjang (grafik garis K: tendangan banteng/beruang tendangan).

Nilai pengembaliantalib.CDLKICKINGBYLENGTH()fungsi adalah: array satu dimensi. Array

Talib.CDLKICKINGBYLENGTH ((dalam HargaOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLKICKINGBYLENGTH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLADDERBOTTOM

Peraturantalib.CDLLADDERBOTTOM()fungsi digunakan untuk menghitungBagian bawah tangga (grafik garis K: Bagian bawah tangga).

Nilai pengembaliantalib.CDLLADDERBOTTOM()fungsi adalah: array satu dimensi. Array

Talib.CDLLADDERBOTTOM ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLLADDERBOTTOM(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLONGLEGGEDDOJI

Peraturantalib.CDLLONGLEGGEDDOJI()fungsi digunakan untuk menghitungDoji Berkaki Panjang (K-line chart: Long Legged Doji).

Nilai pengembaliantalib.CDLLONGLEGGEDDOJI()fungsi adalah: array satu dimensi. Array

Talib.CDLLONGLEGGEDDOJI (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLLONGLEGGEDDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLONGLINE

Peraturantalib.CDLLONGLINE()fungsi digunakan untuk menghitungLong Line Candle (K-line chart: Long Line).

Nilai pengembaliantalib.CDLLONGLINE()fungsi adalah: array satu dimensi. Array

talib.CDLLONGLINE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLLONGLINE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMARUBOZU

Peraturantalib.CDLMARUBOZU()fungsi digunakan untuk menghitungMarubozu (K-line chart: kepala telanjang dan kaki telanjang).

Nilai pengembaliantalib.CDLMARUBOZU()fungsi adalah array satu dimensi. Array

talib.CDLMARUBOZU ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLMARUBOZU(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMATCHINGLOW

Peraturantalib.CDLMATCHINGLOW()Fungsi digunakan untuk menghitungMatching Low (K-line chart: Matching Low).

Nilai pengembaliantalib.CDLMATCHINGLOW()fungsi adalah: array satu dimensi. Array

talib.CDLMATCHINGLOW ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLMATCHINGLOW(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMATHOLD

Peraturantalib.CDLMATHOLD()Fungsi digunakan untuk menghitungMat Hold (K-line chart: Mat Hold).

Nilai pengembaliantalib.CDLMATHOLD()fungsi adalah: array satu dimensi. Array

Talib.CDLMATHOLD ((inPriceOHLC) talib.CDLMATHOLD ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar Array struktur {@struct/Record Record} PeraturanoptInPenetrationParameter ini opsional dan digunakan untuk menentukan persentase dari lebar garis tren naik/turun, nilai default adalah 0,5. optInPenetration palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLMATHOLD(Records[Open,High,Low,Close],Penetration = 0.5) = Array(outInteger)

talib.CDLMORNINGDOJISTAR

Peraturantalib.CDLMORNINGDOJISTAR()fungsi digunakan untuk menghitungMorning Doji Star (K-line chart: Morning Doji Star).

Nilai pengembaliantalib.CDLMORNINGDOJISTAR()fungsi adalah: array satu dimensi. Array

talib.CDLMORNINGDOJISTAR ((dalam HargaOHLC) Talib.CDLMORNINGDOJISTAR ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter digunakan untuk menentukan tingkat tumpang tindih antara harga pembukaan validasi dan bagian padat, nilai default adalah 0,3. optInPenetration palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLMORNINGDOJISTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLMORNINGSTAR

Peraturantalib.CDLMORNINGSTAR()Fungsi digunakan untuk menghitungMorning Star (K-line chart: Bintang Pagi).

Nilai pengembaliantalib.CDLMORNINGSTAR()fungsi adalah: array satu dimensi. Array

talib.CDLMORNINGSTAR ((inPriceOHLC) talib.CDLMORNINGSTAR ((inPriceOHLC, optInPenetration)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar Array struktur {@struct/Record Record} PeraturanoptInPenetrationparameter adalah ambang persentase float harga yang diperlukan untuk konfirmasi tren dan mengambil nilai dalam kisaran [0,1], dengan nilai default 0,3. optInPenetration palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLMORNINGSTAR(Records[Open,High,Low,Close],Penetration=0.3) = Array(outInteger)

talib.CDLONNECK

Peraturantalib.CDLONNECK()fungsi digunakan untuk menghitungPola di leher (K-line chart: Pola di leher).

Nilai pengembaliantalib.CDLONNECK()fungsi adalah array satu dimensi. Array

Talib.CDLONNECK ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLONNECK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLPIERCING

Peraturantalib.CDLPIERCING()fungsi digunakan untuk menghitungPattern Penembusan (K-line chart: Pattern Penembusan).

Nilai pengembaliantalib.CDLPIERCING()fungsi adalah array satu dimensi. Array

talib.CDLPIERCING ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLPIERCING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLRICKSHAWMAN

Peraturantalib.CDLRICKSHAWMAN()Fungsi digunakan untuk menghitungRickshaw Man (K-line chart: Rickshaw Man).

Nilai pengembaliantalib.CDLRICKSHAWMAN()fungsi adalah: array satu dimensi. Array

talib.CDLRICKSHAWMAN ((inPriceOHLC)

PeraturaninPriceOHLCParameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLRICKSHAWMAN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLRISEFALL3METHODS

Peraturantalib.CDLRISEFALL3METHODS()Fungsi digunakan untuk menghitungTiga Metode Naik/Jatuh (K-line chart: Tiga Metode Naik/Jatuh).

Nilai pengembaliantalib.CDLRISEFALL3METHODS()fungsi adalah: array satu dimensi. Array

Talib.CDLRISEFALL3METHODS ((dalam HargaOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLRISEFALL3METHODS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSEPARATINGLINES

Peraturantalib.CDLSEPARATINGLINES()Fungsi digunakan untuk menghitungGaris pemisah (grafik garis K: Garis pemisah).

Nilai pengembaliantalib.CDLSEPARATINGLINES()fungsi adalah array satu dimensi. Array

Talib.CDL SEPARATINGLINES (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLSEPARATINGLINES(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSHOOTINGSTAR

Peraturantalib.CDLSHOOTINGSTAR()fungsi digunakan untuk menghitungShooting Star (K-line chart: Shooting Star).

Nilai pengembaliantalib.CDLSHOOTINGSTAR()fungsi adalah array satu dimensi. Array

talib.CDLSHOOTINGSTAR ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLSHOOTINGSTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSHORTLINE

Peraturantalib.CDLSHORTLINE()fungsi digunakan untuk menghitungShort Line Candle (K-line chart: Short Line).

Nilai pengembaliantalib.CDLSHORTLINE()fungsi adalah: array satu dimensi. Array

talib.CDLSSORTLINE ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLSHORTLINE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSPINNINGTOP

Peraturantalib.CDLSPINNINGTOP()Fungsi digunakan untuk menghitungSpinning Top (K-line chart: Spinning Top).

Nilai pengembaliantalib.CDLSPINNINGTOP()fungsi adalah: array satu dimensi. Array

talib.CDLSPINNINGTOP ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLSPINNINGTOP(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSTALLEDPATTERN

Peraturantalib.CDLSTALLEDPATTERN()Fungsi digunakan untuk menghitungPattern yang terhambat (K-line chart: Pattern yang terhambat).

Nilai pengembaliantalib.CDLSTALLEDPATTERN()fungsi adalah: array satu dimensi. Array

talib.CDLSTALLEDPATTERN ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLSTALLEDPATTERN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSTICKSANDWICH

Peraturantalib.CDLSTICKSANDWICH()fungsi digunakan untuk menghitungStick Sandwich (K-line chart: Stick Sandwich).

Nilai pengembaliantalib.CDLSTICKSANDWICH()fungsi adalah array satu dimensi. Array

Talib.CDLSTICKSSANDWICH (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLSTICKSANDWICH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTAKURI

Peraturantalib.CDLTAKURI()Fungsi digunakan untuk menghitungTakuri (doji lalat naga dengan garis bayangan bawah yang sangat panjang) (K-line chart: Takuri).

Nilai pengembaliantalib.CDLTAKURI()fungsi adalah array satu dimensi. Array

talib.CDLTAKURI ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLTAKURI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTASUKIGAP

Peraturantalib.CDLTASUKIGAP()fungsi digunakan untuk menghitungTasuki Gap (K-line chart: Tasuki Gap).

Nilai pengembaliantalib.CDLTASUKIGAP()fungsi adalah array satu dimensi. Array

talib.CDLTASUKIGAP ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLTASUKIGAP(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTHRUSTING

Peraturantalib.CDLTHRUSTING()fungsi digunakan untuk menghitungPola Mendorong (K-line chart: Pola Mendorong).

Nilai pengembaliantalib.CDLTHRUSTING()fungsi adalah: array satu dimensi. Array

talib.CDLTHRUSTING ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLTHRUSTING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTRISTAR

Peraturantalib.CDLTRISTAR()fungsi digunakan untuk menghitungPola Tristar (K-line chart: Pola Tristar).

Nilai pengembaliantalib.CDLTRISTAR()fungsi adalah: array satu dimensi. Array

Talib.CDLTRISTAR ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLTRISTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLUNIQUE3RIVER

Peraturantalib.CDLUNIQUE3RIVER()fungsi digunakan untuk menghitungUnique 3 River (K-line chart: Unique 3 River).

Nilai pengembaliantalib.CDLUNIQUE3RIVER()fungsi adalah: array satu dimensi. Array

Talib.CDLUNIQUE3RIVER ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLUNIQUE3RIVER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLUPSIDEGAP2CROWS

Peraturantalib.CDLUPSIDEGAP2CROWS()Fungsi digunakan untuk menghitungUpside Gap Two Crows (K-line chart: Upside Gap Two Crows).

Nilai pengembaliantalib.CDLUPSIDEGAP2CROWS()fungsi adalah: array satu dimensi. Array

talib.CDLUPSIDEGAP2CROWS ((inPriceOHLC) (dalam bahasa Inggris)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLUPSIDEGAP2CROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLXSIDEGAP3METHODS

Peraturantalib.CDLXSIDEGAP3METHODS()Fungsi digunakan untuk menghitungUpside/Downside Gap Tiga Metode (K-line chart: Upside/Downside Gap Tiga Metode).

Nilai pengembaliantalib.CDLXSIDEGAP3METHODS()fungsi adalah: array satu dimensi. Array

Talib.CDLXSIDEGAP3METHODS (dalam Harga OHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CDLXSIDEGAP3METHODS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.AD

Peraturantalib.AD()fungsi digunakan untuk menghitungChaikin A/D Line (indikator stokastik garis).

Nilai pengembaliantalib.AD()fungsi adalah: array satu dimensi. Array

talib.AD(inPriceHLCV)

PeraturaninPriceHLCVparameter digunakan untuk menentukan data garis K. inPriceHLCV benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:AD(Records[High,Low,Close,Volume]) = Array(outReal)

talib.ADOSC

Peraturantalib.ADOSC()fungsi digunakan untuk menghitungChaikin A/D Oscillator (Oscillator Chaikin).

Nilai pengembaliantalib.ADOSC()fungsi adalah array satu dimensi. Array

talib.ADOSC ((inPriceHLCV) talib.ADOSC ((inPriceHLCV, optInFastPeriod, optInSlowPeriod)

PeraturaninPriceHLCVparameter digunakan untuk menentukan data garis K. inPriceHLCV benar Array struktur {@struct/Record Record} PeraturanoptInFastPeriodParameter digunakan untuk mengatur periode cepat. optInFastPeriod palsu Nomor PeraturanoptInSlowPeriodParameter digunakan untuk mengatur periode lambat. optInSlowPeriod palsu Nomor

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 ini dijelaskan 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 menghitungPada Volume Saldo (Lapasan Energi).

Nilai pengembaliantalib.OBV()fungsi adalah array satu dimensi. Array

talib.OBV ((inReal) Talib.OBV ((inReal, inPriceV)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturaninPriceVparameter digunakan untuk menentukan data garis K. inPriceV 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:OBV(Records[Close],Records[Volume]) = Array(outReal)

talib.ACOS

Peraturantalib.ACOS()Fungsi digunakan untuk menghitungVektor Trigonometri ACos (fungsi kosinus terbalik).

Nilai pengembaliantalib.ACOS()fungsi adalah array satu dimensi. Array

talib.ACOS ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ACOS(Records[Close]) = Array(outReal)

talib.ASIN

Peraturantalib.ASIN()fungsi digunakan untuk menghitungVektor Trigonometri ASin (fungsi sinus terbalik).

Nilai pengembaliantalib.ASIN()fungsi adalah array satu dimensi. Array

talib.ASIN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ASIN(Records[Close]) = Array(outReal)

talib.ATAN

Peraturantalib.ATAN()fungsi digunakan untuk menghitungVektor Trigonometri ATan (fungsi tangen terbalik).

Nilai pengembaliantalib.ATAN()fungsi adalah: array satu dimensi. Array

talib.ATAN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ATAN(Records[Close]) = Array(outReal)

talib.CEIL

Peraturantalib.CEIL()Fungsi digunakan untuk menghitungVektor Langit-langit (fungsi pembulatan).

Nilai pengembaliantalib.CEIL()fungsi adalah array satu dimensi. Array

Talib.CEIL ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CEIL(Records[Close]) = Array(outReal)

talib.COS

Peraturantalib.COS()fungsi digunakan untuk menghitungVektor Trigonometri Cos (fungsi kosinus).

Nilai pengembaliantalib.COS()fungsi adalah: array satu dimensi. Array

talib.COS ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:COS(Records[Close]) = Array(outReal)

talib.COSH

Peraturantalib.COSH()Fungsi digunakan untuk menghitungVektor Trigonometric Cosh (nilai kosinus hiperbolik).

Nilai pengembaliantalib.COSH()fungsi adalah array satu dimensi. Array

talib.COSH ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:COSH(Records[Close]) = Array(outReal)

talib.EXP

Peraturantalib.EXP()fungsi digunakan untuk menghitungVektor Aritmatika Exp (fungsi eksponensial).

Nilai pengembaliantalib.EXP()fungsi adalah: array satu dimensi. Array

talib.EXP ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:EXP(Records[Close]) = Array(outReal)

talib.FLOOR

Peraturantalib.FLOOR()fungsi digunakan untuk menghitungLantai vektor (dibulatkan ke bawah).

Nilai pengembaliantalib.FLOOR()fungsi adalah array satu dimensi. Array

talib.FLOOR ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:FLOOR(Records[Close]) = Array(outReal)

talib.LN

Peraturantalib.LN()fungsi digunakan untuk menghitungVektor Log Natural (logaritma alami).

Nilai pengembaliantalib.LN()fungsi adalah array satu dimensi. Array

talib.LN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:LN(Records[Close]) = Array(outReal)

talib.LOG10

Peraturantalib.LOG10()Fungsi digunakan untuk menghitungVektor Log10 (fungsi logaritma).

Nilai pengembaliantalib.LOG10()fungsi adalah array satu dimensi. Array

talib.LOG10 ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:LOG10(Records[Close]) = Array(outReal)

talib.SIN

Peraturantalib.SIN()Fungsi digunakan untuk menghitungVektor Trigonometri Sin (nilai sinus).

Nilai pengembaliantalib.SIN()fungsi adalah array satu dimensi. Array

talib.SIN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:SIN(Records[Close]) = Array(outReal)

talib.SINH

Peraturantalib.SINH()fungsi digunakan untuk menghitungVektor Trigonometric Sinh (fungsi sinus hiperbolik).

Nilai pengembaliantalib.SINH()fungsi adalah: array satu dimensi. Array

talib.SINH ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:SINH(Records[Close]) = Array(outReal)

talib.SQRT

Peraturantalib.SQRT()fungsi digunakan untuk menghitungVektor Akar kuadrat (akar kuadrat).

Nilai pengembaliantalib.SQRT()fungsi adalah: array satu dimensi. Array

talib.SQRT ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:SQRT(Records[Close]) = Array(outReal)

talib.TAN

Peraturantalib.TAN()fungsi digunakan untuk menghitungVektor Trigonometri Tan (tangen).

Nilai pengembaliantalib.TAN()fungsi adalah array satu dimensi. Array

talib.TAN ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:TAN(Records[Close]) = Array(outReal)

talib.TANH

Peraturantalib.TANH()fungsi digunakan untuk menghitungVektor Trigonometri Tanh (fungsi tangen hiperbolik).

Nilai pengembaliantalib.TANH()fungsi adalah: array satu dimensi. Array

talib.TANH ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:TANH(Records[Close]) = Array(outReal)

talib.MAX

Peraturantalib.MAX()fungsi digunakan untuk menghitung nilai tertinggi (maksimum) untukperiode tertentu.

Nilai pengembaliantalib.MAX()fungsi adalah: array satu dimensi. Array

talib.MAX ((inReal) talib.MAX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MAX(Records[Close],Time Period = 30) = Array(outReal)

talib.MAXINDEX

Peraturantalib.MAXINDEX()Fungsi digunakan untuk menghitungIndeks nilai tertinggi dalam periode yang ditentukan (indeks maksimum).

Nilai pengembaliantalib.MAXINDEX()fungsi adalah: array satu dimensi. Array

Talib.MAXINDEX ((inReal) talib.MAXINDEX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MAXINDEX(Records[Close],Time Period = 30) = Array(outInteger)

talib.MIN

Peraturantalib.MIN()Fungsi ini digunakan untuk menghitung nilai terendah (nilai minimum) ** untuk periode yang ditentukan.

Nilai pengembaliantalib.MIN()fungsi adalah: array satu dimensi. Array

talib.MIN ((inReal) talib.MIN ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MIN(Records[Close],Time Period = 30) = Array(outReal)

talib.MININDEX

Peraturantalib.MININDEX()Fungsi digunakan untuk menghitungIndeks nilai terendah (indeks nilai minimum)untuk periode yang ditentukan.

Nilai pengembaliantalib.MININDEX()fungsi adalah: array satu dimensi. Array

talib.MININDEX ((inReal) talib.MININDEX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MININDEX(Records[Close],Time Period = 30) = Array(outInteger)

talib.MINMAX

Peraturantalib.MINMAX()Fungsi digunakan untuk menghitungnilai terendah dan tertinggi (minimal dan maksimum) untuk periode yang ditentukan.

Nilai pengembaliantalib.MINMAX()fungsi adalah array dua dimensi. elemen pertama dari 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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MINMAX(Records[Close],Time Period = 30) = [Array(outMin),Array(outMax)]

talib.MINMAXINDEX

Peraturantalib.MINMAXINDEX()Fungsi digunakan untuk menghitungIndeks nilai terendah dan tertinggi (indeks minimum dan maksimum) dalam periode yang ditentukan.

Nilai pengembaliantalib.MINMAXINDEX()fungsi adalah: array dua dimensi. elemen pertama dari array dua dimensi ini adalah array terindeks minimum, dan elemen kedua adalah array terindeks maksimum. Array

talib.MINMAXINDEX ((inReal) talib.MINMAXINDEX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MINMAXINDEX(Records[Close],Time Period = 30) = [Array(outMinIdx),Array(outMaxIdx)]

talib.SUM

Peraturantalib.SUM()Fungsi digunakan untuk menghitungRingkasan.

Nilai pengembaliantalib.SUM()fungsi adalah: array satu dimensi. Array

talib.SUM ((inReal) talib.SUM ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:SUM(Records[Close],Time Period = 30) = Array(outReal)

talib.HT_DCPERIOD

Peraturantalib.HT_DCPERIOD()fungsi digunakan untuk menghitungTransformasi Hilbert - Periode Siklus Dominan (Transformasi Hilbert, Periode Dominan).

Nilai pengembaliantalib.HT_DCPERIOD()fungsi adalah: array satu dimensi. Array

talib.HT_DCPERIOD ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:HT_DCPERIOD(Records[Close]) = Array(outReal)

talib.HT_DCPHASE

Peraturantalib.HT_DCPHASE()fungsi digunakan untuk menghitungTransformasi Hilbert - Fase Siklus Dominan (Transformasi Hilbert, Fase Siklus Dominan).

Nilai pengembaliantalib.HT_DCPHASE()fungsi adalah: array satu dimensi. Array

Talib.HT_DCPHASE ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:HT_DCPHASE(Records[Close]) = Array(outReal)

Talib.HT_PHASOR

Peraturantalib.HT_PHASOR()fungsi digunakan untuk menghitungTransformasi Hilbert - Komponen Phasor (Transformasi Hilbert, Komponen Phase).

Nilai pengembaliantalib.HT_PHASOR()fungsi adalah array dua dimensi. Array

Talib.HT_PHASOR ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:HT_PHASOR(Records[Close]) = [Array(outInPhase),Array(outQuadrature)]

talib.HT_SINE

Peraturantalib.HT_SINE()fungsi digunakan untuk menghitungTransformasi Hilbert - Sinus Wave (Transformasi Hilbert, Sinus Wave).

Nilai pengembaliantalib.HT_SINE()fungsi adalah: array dua dimensi. Array

Talib.HT_SINE ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:HT_SINE(Records[Close]) = [Array(outSine),Array(outLeadSine)]

talib.HT_TRENDMODE

Peraturantalib.HT_TRENDMODE()fungsi digunakan untuk menghitungTransformasi Hilbert - Trend dan Mode Siklus.

Nilai pengembaliantalib.HT_TRENDMODE()fungsi adalah: array satu dimensi. Array

Talib.HT_TRENDMODE ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:HT_TRENDMODE(Records[Close]) = Array(outInteger)

talib.ATR

Peraturantalib.ATR()fungsi digunakan untuk menghitungRentang Rata-rata Benar.

Nilai pengembaliantalib.ATR()fungsi adalah array satu dimensi. Array

Talib.ATR ((inPriceHLC) talib.ATR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ATR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.NATR

Peraturantalib.NATR()fungsi digunakan untuk menghitungJangkauan Benar Rata-rata yang Normal.

Nilai pengembaliantalib.NATR()fungsi adalah array satu dimensi. Array

talib.NATR ((inPriceHLC) talib.NATR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:NATR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.TRANGE

Peraturantalib.TRANGE()fungsi digunakan untuk menghitungJangkauan Nyata.

Nilai pengembaliantalib.TRANGE()fungsi adalah: array satu dimensi. Array

Talib.TRANGE ((inPriceHLC)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:TRANGE(Records[High,Low,Close]) = Array(outReal)

talib.BBANDS

Peraturantalib.BBANDS()Fungsi digunakan untuk menghitungBollinger Bands.

Nilai pengembaliantalib.BBANDS()fungsi adalah: array dua dimensi. array berisi tiga elemen yaitu: 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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 5. optInTimePeriode palsu Nomor PeraturanoptInNbDevUpparameter digunakan untuk mengatur pengganda upline, nilai default adalah 2. PilihInNbDevUp palsu nomor PeraturanoptInNbDevDnParameter digunakan untuk mengatur pengganda baris bawah, nilai default adalah 2. OpInNbDevDn palsu nomor PeraturanoptInMATypeparameter digunakan untuk mengatur jenis rata-rata, nilai default adalah 0. pilihanInMAType palsu nomor

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 ini dijelaskan 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 menghitungRata-rata Bergerak Eksponensial Ganda.

Nilai pengembaliantalib.DEMA()fungsi adalah array satu dimensi. Array

talib.DEMA ((inReal) talib.DEMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:DEMA(Records[Close],Time Period = 30) = Array(outReal)

talib.EMA

Peraturantalib.EMA()fungsi digunakan untuk menghitungRata-rata Bergerak Eksponensial.

Nilai pengembaliantalib.EMA()fungsi adalah array satu dimensi. Array

Talib.EMA ((inReal) talib.EMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:EMA(Records[Close],Time Period = 30) = Array(outReal)

Talib.HT_TRENDLINE

Peraturantalib.HT_TRENDLINE()fungsi digunakan untuk menghitungTransformasi Hilbert - Instan Trendline (Transformasi Hilbert, Instan Trend).

Nilai pengembaliantalib.HT_TRENDLINE()fungsi adalah: array satu dimensi. Array

Talib.HT_TRENDLINE ((inReal)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:HT_TRENDLINE(Records[Close]) = Array(outReal)

talib.KAMA

Peraturantalib.KAMA()fungsi digunakan untuk menghitungKaufman Adaptive Moving Average.

Nilai pengembaliantalib.KAMA()fungsi adalah: array satu dimensi. Array

Talib.KAMA ((inReal) talib.KAMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:KAMA(Records[Close],Time Period = 30) = Array(outReal)

talib.MA

Peraturantalib.MA()fungsi digunakan untuk menghitungRata-rata bergerak.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor PeraturanoptInMATypeparameter digunakan untuk mengatur jenis rata-rata, nilai default adalah 0. pilihanInMAType palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MA(Records[Close],Time Period = 30,MA Type = 0) = Array(outReal)

talib.MAMA

Peraturantalib.MAMA()fungsi digunakan untuk menghitungMESA Adaptive Moving Average.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInFastLimitParameter digunakan untuk mengatur Batas Cepat, nilai default adalah 0,5. PilihInFastLimit palsu nomor PeraturanoptInSlowLimitparameter digunakan untuk mengatur batas lambat, nilai default adalah 0,05. OptionInSlowLimit palsu nomor

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 ini dijelaskan 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 menghitungTitik tengah dari periode (titik tengah).

Nilai pengembaliantalib.MIDPOINT()fungsi adalah array satu dimensi. Array

talib.MIDPOINT ((inReal) talib.MIDPOINT ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MIDPOINT(Records[Close],Time Period = 14) = Array(outReal)

talib.MIDPRICE

Peraturantalib.MIDPRICE()fungsi digunakan untuk menghitungHarga titik tengah selama periode (harga titik tengah).

Nilai pengembaliantalib.MIDPRICE()fungsi adalah array satu dimensi. Array

talib.MIDPRICE ((inPriceHL) talib.MIDPRICE ((inPriceHL, optInTimePeriod)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MIDPRICE(Records[High,Low],Time Period = 14) = Array(outReal)

talib.SAR

Peraturantalib.SAR()fungsi digunakan untuk menghitungSAR parabola.

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInAccelerationparameter digunakan untuk mengatur Faktor Percepatan, nilai default adalah 0,02. OpInAcceleration palsu nomor PeraturanoptInMaximumparameter digunakan untuk mengatur AF Maximum, nilai default adalah 0,2. OptiMaksimum palsu nomor

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 ini dijelaskan 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 menghitungParabolik SAR - diperpanjang (penyempur parabolik yang ditingkatkan).

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInStartValueparameter digunakan untuk mengatur Start Value, nilai default adalah 0. pilihanInStartValue palsu nomor PeraturanoptInOffsetOnReverseParameter digunakan untuk mengatur Offset pada Reverse, nilai default adalah 0. PilihInOffsetOnReverse palsu nomor PeraturanoptInAccelerationInitLongparameter digunakan untuk mengatur AF Init Long, nilai default adalah 0,02. Pilih dalam akselerasi dalam waktu yang lama palsu nomor PeraturanoptInAccelerationLongparameter digunakan untuk mengatur AF panjang, nilai default adalah 0,02. OptionInAccelerationLang palsu nomor PeraturanoptInAccelerationMaxLongparameter digunakan untuk mengatur AF Max Long, nilai default adalah 0,2. OptionInAccelerationMaxLong palsu nomor PeraturanoptInAccelerationInitShortparameter digunakan untuk mengatur AF Init Short, nilai default adalah 0,02. OptionInAccelerationInitSingkat palsu nomor PeraturanoptInAccelerationShortparameter digunakan untuk mengatur AF Short, nilai default adalah 0,02. OptionInAccelerationSingkat palsu nomor PeraturanoptInAccelerationMaxShortparameter digunakan untuk mengatur AF Max Short, nilai default adalah 0,2. OptionInAccelerationMaxShort palsu nomor

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 ini dijelaskan 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 menghitungRata-rata Bergerak Sederhana.

Nilai pengembaliantalib.SMA()fungsi adalah: array satu dimensi. Array

talib.SMA ((inReal) talib.SMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:SMA(Records[Close],Time Period = 30) = Array(outReal)

talib.T3

Peraturantalib.T3()fungsi digunakan untuk menghitungTriple Exponential Moving Average (T3) (rata-rata bergerak eksponensial tiga kali).

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 5. optInTimePeriode palsu Nomor PeraturanoptInVFactorparameter digunakan untuk mengatur Volume Factor, nilai default adalah 0,7. optInVFactor palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:T3(Records[Close],Time Period = 5,Volume Factor = 0.7) = Array(outReal)

talib.TEMA

Peraturantalib.TEMA()Fungsi digunakan untuk menghitungTriple Exponential Moving Average.

Nilai pengembaliantalib.TEMA()fungsi adalah array satu dimensi. Array

talib.TEMA ((inReal) talib.TEMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:TEMA(Records[Close],Time Period = 30) = Array(outReal)

talib.TRIMA

Peraturantalib.TRIMA()fungsi digunakan untuk menghitungRata-rata Gerak Segitiga (rata-rata gerak tiga eksponensial).

Nilai pengembaliantalib.TRIMA()fungsi adalah array satu dimensi. Array

talib.TRIMA ((inReal) talib.TRIMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:TRIMA(Records[Close],Time Period = 30) = Array(outReal)

talib.WMA

Peraturantalib.WMA()fungsi digunakan untuk menghitungRata-rata bergerak tertimbang (WMA).

Nilai pengembaliantalib.WMA()fungsi adalah array satu dimensi. Array

talib.WMA ((inReal) talib.WMA ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:WMA(Records[Close],Time Period = 30) = Array(outReal)

talib.LINEARREG

Peraturantalib.LINEARREG()Fungsi digunakan untuk menghitungRegresi linier.

Nilai pengembaliantalib.LINEARREG()fungsi adalah array satu dimensi. Array

talib.LINEARREG ((inReal) talib.LINEARREG ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:LINEARREG(Records[Close],Time Period = 14) = Array(outReal)

Talib.LINEARREG_ANGLE

Peraturantalib.LINEARREG_ANGLE()fungsi digunakan untuk menghitungSudut Regresi Linear.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:LINEARREG_ANGLE(Records[Close],Time Period = 14) = Array(outReal)

Talib.LINEARREG_INTERCEPT

Peraturantalib.LINEARREG_INTERCEPT()fungsi digunakan untuk menghitungLinear Regression Intercept.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:LINEARREG_INTERCEPT(Records[Close],Time Period = 14) = Array(outReal)

talib.LINEARREG_SLOPE

Peraturantalib.LINEARREG_SLOPE()fungsi digunakan untuk menghitungKemiringan Regresi Linear.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:LINEARREG_SLOPE(Records[Close],Time Period = 14) = Array(outReal)

talib.STDDEV

Peraturantalib.STDDEV()Fungsi digunakan untuk menghitungPenyimpangan Standar.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 5. optInTimePeriode palsu Nomor PeraturanoptInNbDevparameter digunakan untuk mengatur Deviasi, nilai default adalah 1. OpInNbDev palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:STDDEV(Records[Close],Time Period = 5,Deviations = 1) = Array(outReal)

talib.TSF

Peraturantalib.TSF()Fungsi digunakan untuk menghitungRamalan Seri Waktu.

Nilai pengembaliantalib.TSF()fungsi adalah array satu dimensi. Array

talib.TSF ((inReal) talib.TSF ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:TSF(Records[Close],Time Period = 14) = Array(outReal)

talib.VAR

Peraturantalib.VAR()Fungsi digunakan untuk menghitungVariansi.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 5. optInTimePeriode palsu Nomor PeraturanoptInNbDevparameter digunakan untuk mengatur Deviasi, nilai default adalah 1. OpInNbDev palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:VAR(Records[Close],Time Period = 5,Deviations = 1) = Array(outReal)

talib.ADX

Peraturantalib.ADX()fungsi digunakan untuk menghitungIndeks Gerakan Arah Rata-rata.

Nilai pengembaliantalib.ADX()fungsi adalah array satu dimensi. Array

Talib.ADX ((inPriceHLC) talib.ADX ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ADX(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.ADXR

Peraturantalib.ADXR()fungsi digunakan untuk menghitungRata-rata Indeks Gerakan Arah Peringkat (indeks penilaian).

Nilai pengembaliantalib.ADXR()fungsi adalah array satu dimensi. Array

Talib.ADXR ((inPriceHLC) talib.ADXR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ADXR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.APO

Peraturantalib.APO()fungsi digunakan untuk menghitungOsilator Harga Absolute.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInFastPeriodparameter digunakan untuk mengatur periode cepat, nilai default adalah 12. optInFastPeriod palsu nomor PeraturanoptInSlowPeriodparameter digunakan untuk mengatur periode lambat, nilai default adalah 26. optInSlowPeriod palsu nomor PeraturanoptInMATypeparameter digunakan untuk mengatur jenis rata-rata, nilai default adalah 0. pilihanInMAType palsu nomor

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 ini dijelaskan 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 menghitungAroon (Indikator Aroon).

Nilai pengembaliantalib.AROON()fungsi adalah array dua dimensi. Array

talib.AROON ((inPriceHL) talib.AROON ((inPriceHL, optInTimePeriod)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:AROON(Records[High,Low],Time Period = 14) = [Array(outAroonDown),Array(outAroonUp)]

talib.AROONOSC

Peraturantalib.AROONOSC()fungsi digunakan untuk menghitungAroon Oscillator.

Nilai pengembaliantalib.AROONOSC()fungsi adalah: array satu dimensi. Array

talib.AROONOSC ((inPriceHL) talib.AROONOSC ((inPriceHL, optInTimePeriod)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:AROONOSC(Records[High,Low],Time Period = 14) = Array(outReal)

talib.BOP

Peraturantalib.BOP()fungsi digunakan untuk menghitungKeseimbangan Kekuatan.

Nilai pengembaliantalib.BOP()fungsi adalah array satu dimensi. Array

Talib.BOP ((inPriceOHLC)

PeraturaninPriceOHLCparameter digunakan untuk menentukan data garis K. inPriceOHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:BOP(Records[Open,High,Low,Close]) = Array(outReal)

talib.CCI

Peraturantalib.CCI()fungsi digunakan untuk menghitungIndeks Saluran Komoditas (indikator homeopati).

Nilai pengembaliantalib.CCI()fungsi adalah array satu dimensi. Array

talib.CCI ((inPriceHLC) talib.CCI ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CCI(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.CMO

Peraturantalib.CMO()fungsi digunakan untuk menghitungChande Momentum Oscillator (CMO).

Nilai pengembaliantalib.CMO()fungsi adalah: array satu dimensi. Array

talib.CMO ((inReal) talib.CMO ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:CMO(Records[Close],Time Period = 14) = Array(outReal)

talib.DX

Peraturantalib.DX()fungsi digunakan untuk menghitungIndeks Gerakan Arah.

Nilai pengembaliantalib.DX()fungsi adalah: array satu dimensi. Array

Talib.DX ((inPriceHLC) talib.DX ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:DX(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.MACD

Peraturantalib.MACD()Fungsi digunakan untuk menghitungRata-rata bergerak konvergensi/divergensi (rata-rata bergerak yang dihaluskan secara eksponensial).

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInFastPeriodparameter digunakan untuk mengatur periode cepat, nilai default adalah 12. optInFastPeriod palsu nomor PeraturanoptInSlowPeriodparameter digunakan untuk mengatur periode lambat, nilai default adalah 26. optInSlowPeriod palsu nomor PeraturanoptInSignalPeriodparameter digunakan untuk mengatur periode sinyal, nilai default adalah 9. OpInSignalPeriode palsu nomor

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 ini dijelaskan 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 menghitungMACD dengan jenis MA yang dapat dikontrol.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInFastPeriodparameter digunakan untuk mengatur periode cepat, nilai default adalah 12. optInFastPeriod palsu nomor PeraturanoptInFastMATypeparameter digunakan untuk mengatur jenis rata-rata cepat, nilai default adalah 0. pilihanInFastMAType palsu nomor PeraturanoptInSlowPeriodparameter digunakan untuk mengatur periode lambat, nilai default adalah 26. optInSlowPeriod palsu nomor PeraturanoptInSlowMATypeparameter digunakan untuk mengatur jenis rata-rata lambat, nilai default adalah 0. pilihanInSlowMAType palsu nomor PeraturanoptInSignalPeriodparameter digunakan untuk mengatur periode sinyal, nilai default adalah 9. OpInSignalPeriode palsu nomor PeraturanoptInSignalMATypeparameter digunakan untuk mengatur jenis sinyal rata-rata, nilai default adalah 0. pilihanInSignalMAType palsu nomor

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 ini dijelaskan 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 menghitungKonvergensi/Divergensi Rata-rata yang Bergerak 12/26.

Nilai pengembaliantalib.MACDFIX()fungsi adalah array dua dimensi. Array

talib.MACDFIX ((inReal) talib.MACDFIX ((inReal, optInSignalPeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInSignalPeriodparameter digunakan untuk mengatur periode sinyal, nilai default adalah 9. OpInSignalPeriode palsu nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MACDFIX(Records[Close],Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]

talib.MFI

Peraturantalib.MFI()fungsi digunakan untuk menghitungIndeks Aliran Uang.

Nilai pengembaliantalib.MFI()fungsi adalah array satu dimensi. Array

talib.MFI ((inPriceHLCV) talib.MFI ((inPriceHLCV, optInTimePeriod)

PeraturaninPriceHLCVparameter digunakan untuk menentukan data garis K. inPriceHLCV benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan 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 menghitungIndikator arah minus (indikator negatif).

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan 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 menghitungMinus Gerakan arah (gerakan negatif).

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MINUS_DM(Records[High,Low],Time Period = 14) = Array(outReal)

talib.MOM

Peraturantalib.MOM()Fungsi digunakan untuk menghitungMomentum.

Nilai pengembaliantalib.MOM()fungsi adalah array satu dimensi. Array

Talib.MOM ((inReal) talib.MOM ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 10. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MOM(Records[Close],Time Period = 10) = Array(outReal)

talib.PLUS_DI

Peraturantalib.PLUS_DI()fungsi digunakan untuk menghitungPlus Indikator Arah.

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan 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 menghitungPlus Gerakan arah.

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:PLUS_DM(Records[High,Low],Time Period = 14) = Array(outReal)

talib.PPO

Peraturantalib.PPO()fungsi digunakan untuk menghitungOsilator Harga Persentase.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInFastPeriodparameter digunakan untuk mengatur periode cepat, nilai default adalah 12. optInFastPeriod palsu nomor PeraturanoptInSlowPeriodparameter digunakan untuk mengatur periode lambat, nilai default adalah 26. optInSlowPeriod palsu nomor PeraturanoptInMATypeparameter digunakan untuk mengatur jenis rata-rata, nilai default adalah 0. pilihanInMAType palsu nomor

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 ini dijelaskan 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 menghitungTingkat perubahan: ((harga/prevPrice) -1) * 100 (indikator tingkat perubahan).

Nilai pengembaliantalib.ROC()fungsi adalah array satu dimensi. Array

Talib.ROC ((inReal) talib.ROC ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 10. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ROC(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCP

Peraturantalib.ROCP()Fungsi digunakan untuk menghitungTingkat perubahan Persentase: (harga-prevPrice) /prevPrice (tingkat perubahan harga).

Nilai pengembaliantalib.ROCP()fungsi adalah: array satu dimensi. Array

talib.ROCP ((inReal) talib.ROCP ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 10. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ROCP(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCR

Peraturantalib.ROCR()fungsi digunakan untuk menghitungRasio tingkat perubahan: (harga/prevPrice) (rasio perubahan harga).

Nilai pengembaliantalib.ROCR()fungsi adalah array satu dimensi. Array

talib.ROCR ((inReal) talib.ROCR ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 10. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ROCR(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCR100

Peraturantalib.ROCR100()Fungsi digunakan untuk menghitungTingkat rasio perubahan skala 100: (harga/prevPrice) * 100 (ratio perubahan harga).

Nilai pengembaliantalib.ROCR100()fungsi adalah: array satu dimensi. Array

talib.ROCR100 ((inReal) Talib.ROCR100 ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 10. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:ROCR100(Records[Close],Time Period = 10) = Array(outReal)

talib.RSI

Peraturantalib.RSI()fungsi digunakan untuk menghitungIndeks Kekuatan Relatif.

Nilai pengembaliantalib.RSI()fungsi adalah array satu dimensi. Array

talib.RSI ((inReal) talib.RSI ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:RSI(Records[Close],Time Period = 14) = Array(outReal)

talib.STOCH

Peraturantalib.STOCH()fungsi digunakan untuk menghitungStochastic (indikator STOCH).

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInFastK_Periodparameter digunakan untuk mengatur periode Fast-K, nilai default adalah 5. pilihanInFastK_Periode palsu nomor PeraturanoptInSlowK_Periodparameter digunakan untuk mengatur periode Slow-K, nilai default adalah 3. pilihanInSlowK_Periode palsu nomor PeraturanoptInSlowK_MATypeparameter digunakan untuk mengatur jenis rata-rata Slow-K, nilai default adalah 0. pilihanInSlowK_MAType palsu nomor PeraturanoptInSlowD_Periodparameter digunakan untuk mengatur periode Slow-D, nilai default adalah 3. pilihanInSlowD_Periode palsu nomor PeraturanoptInSlowD_MATypeparameter digunakan untuk mengatur jenis rata-rata Slow-D, nilai default adalah 0. pilihanInSlowD_MAType palsu nomor

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 ini dijelaskan 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 menghitungStochastic Fast (indikator STOCH cepat).

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInFastK_Periodparameter digunakan untuk mengatur periode Fast-K, nilai default adalah 5. pilihanInFastK_Periode palsu nomor PeraturanoptInFastD_Periodparameter digunakan untuk mengatur periode Fast-D, nilai default adalah 3. pilihanInFastD_Periode palsu nomor PeraturanoptInFastD_MATypeParameter digunakan untuk mengatur jenis rata-rata Fast-D, nilai default adalah 0. pilihanInFastD_MAType palsu nomor

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 ini dijelaskan 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 menghitungIndeks Kekuatan Relatif Stochastic.

Nilai pengembaliantalib.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 benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor PeraturanoptInFastK_Periodparameter digunakan untuk mengatur periode Fast-K, nilai default adalah 5. pilihanInFastK_Periode palsu nomor PeraturanoptInFastD_Periodparameter digunakan untuk mengatur periode Fast-D, nilai default adalah 3. pilihanInFastD_Periode palsu nomor PeraturanoptInFastD_MATypeParameter digunakan untuk mengatur jenis rata-rata Fast-D, nilai default adalah 0. pilihanInFastD_MAType palsu nomor

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 ini dijelaskan 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 menghitungRate-of-Change (ROC) 1 hari dari EMA Triple Smooth.

Nilai pengembaliantalib.TRIX()fungsi adalah: array satu dimensi. Array

Talib.TRIX ((inReal) talib.TRIX ((inReal, optInTimePeriod)

PeraturaninRealparameter digunakan untuk menentukan data garis K. InReal benar {@struct/Record Record} array struktur, array numerik PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 30. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:TRIX(Records[Close],Time Period = 30) = Array(outReal)

talib.ULTOSC

Peraturantalib.ULTOSC()fungsi digunakan untuk menghitungUltimate Oscillator.

Nilai pengembaliantalib.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 benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriod1parameter digunakan untuk mengatur periode pertama, nilai default adalah 7. optInTimePeriod1 palsu nomor PeraturanoptInTimePeriod2parameter digunakan untuk mengatur periode kedua, nilai default adalah 14. optInTimePeriod2 palsu nomor PeraturanoptInTimePeriod3parameter digunakan untuk mengatur periode ketiga, nilai default adalah 28. optInTimePeriod3 palsu nomor

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 ini dijelaskan 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 menghitungWilliams %R.

Nilai pengembaliantalib.WILLR()fungsi adalah: array satu dimensi. Array

talib.WILLR ((inPriceHLC) talib.WILLR ((inPriceHLC, optInTimePeriod)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar Array struktur {@struct/Record Record} PeraturanoptInTimePeriodparameter digunakan untuk mengatur periode, nilai default adalah 14. optInTimePeriode palsu Nomor

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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:AVGPRICE(Records[Open,High,Low,Close]) = Array(outReal)

talib.MEDPRICE

Peraturantalib.MEDPRICE()fungsi digunakan untuk menghitungHarga rata-rata.

Nilai pengembaliantalib.MEDPRICE()fungsi adalah array satu dimensi. Array

talib.MEDPRICE ((inPriceHL)

PeraturaninPriceHLparameter digunakan untuk menentukan data garis K. inPriceHL benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:MEDPRICE(Records[High,Low]) = Array(outReal)

talib.TYPPRICE

Peraturantalib.TYPPRICE()Fungsi digunakan untuk menghitungHarga Tipikal.

Nilai pengembaliantalib.TYPPRICE()fungsi adalah array satu dimensi. Array

Talib.TYPPRICE ((inPriceHLC)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:TYPPRICE(Records[High,Low,Close]) = Array(outReal)

talib.WCLPRICE

Peraturantalib.WCLPRICE()fungsi digunakan untuk menghitungHarga Penutupan Tertimbang.

Nilai pengembaliantalib.WCLPRICE()fungsi adalah array satu dimensi. Array

talib.WCLPRICE ((inPriceHLC)

PeraturaninPriceHLCparameter digunakan untuk menentukan data garis K. inPriceHLC benar 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 ini dijelaskan dalam dokumentasi perpustakaan talib sebagai:WCLPRICE(Records[High,Low,Close]) = Array(outReal)

Struktur