資源の読み込みに... 荷物...

内蔵機能

グローバル

バージョン

システムの現在のバージョン番号を返します.

現在のシステムバージョン番号,例えば3.6- わかった 文字列

バージョン

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

システムバージョン番号は,dockerのプログラムのバージョン番号です.

眠れ

睡眠機能で プログラムが一時停止します

睡眠 (ミリ秒)

についてmillisecondパラメータは睡眠時間とミリ秒数を設定するために使用されます. ミリ秒 本当 番号

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

実行する際にSleep(1000)1ミリ秒未満の睡眠時間,例えば設定をサポートします.Sleep(0.1). それは最小パラメータをサポートします0.0000011ナノ秒は1e-6ミリ秒です 戦略を書き出すときPython言語,Sleep(millisecond)投票間隔,待機時間操作のために使用する必要があります.time.sleep(second)機能Pythonほらtime図書館を活用したからです.time.sleep(second)バックテストを行うとき (バックテストシステムの時間列をスキップするのではなく),戦略が非常にゆっくりとバックテストするようになります.

IsVirtual は

戦略の実行環境がバックテストシステムであるかどうかを決定する.

ストラテジーは,真価を返します.trueバックテストシステム環境で実行される場合. 戦略は誤り値を返します.例えば:falseリアルな取引環境で実行される場合 ボール

IsVirtual (バーチャル)

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

現在の実行環境がバックテストシステムであるかどうかを決定し,バックテストとライブ取引の違いと互換性を確保するために使用します.

郵便

メールを送る

メールの送信が成功すると,実際の値が返されます.true失敗した配送が誤った値を返します.false- わかった ボール

メール ((smtpサーバー, smtpユーザー名, smtpパスワード, mailTo,タイトル,ボディ)

指定するために使用されますSMTPメール送信者のサービスアドレス smtpサーバー 本当 文字列 メール送信者のメールアドレスを指定するために使用されます. smtpユーザー名 本当 文字列 についてSMTPメール送信者のメールボックスへのパスワードです smtpパスワード 本当 文字列 メール受信者のメールアドレスを指定するために使用されます. mailTo に 本当 文字列 メールアドレス タイトル 本当 文字列 メールボディ 身体 本当 文字列

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

についてsmtpPasswordパラメーターは,パスワードを設定しますSMTPメールボックスのパスワードではありません 設定するときにsmtpServerパラメータに直接ポート番号を追加することができます.smtpServer例えばQQメールsmtp.qq.com:587試験可能である. エラーが報告された場合:unencryped connection変更する必要があります.smtpServerについてMailパラメータ形式は:ssl://xxx.com:xxx例えば,ssl方法SMTPQQメールでは:ssl://smtp.qq.com:465またはsmtp://xxx.com:xxx- わかった バックテストシステムでは機能しません

{@fun/Global/Mail_Go メイル_Go}

メイル_ゴー

アシンクロンバージョンMail function.

についてMail_Goこの関数で,同じオブジェクトをすぐに返します.waitメール配信の結果を取得する同期オブジェクトの方法. メール配信が成功すると,真値が返されます.true失敗した配送が誤った値を返します.false- わかった オブジェクト

メール_Go (smtpサーバー, smtpユーザー名, smtpパスワード, mailTo,タイトル,ボディ)

指定するために使用されます.SMTPメール送信者のサービスアドレス smtpサーバー 本当 文字列 メール送信者のメールアドレスを指定するために使用されます. smtpユーザー名 本当 文字列 についてSMTPメール送信者のメールボックスのパスワードです smtpパスワード 本当 文字列 メール受信者のメールアドレスを指定するために使用されます. mailTo に 本当 文字列 メールアドレス タイトル 本当 文字列 メールボディ 身体 本当 文字列

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.

バックテストシステムでは機能しません

{@fun/Global/Mail Mail} メール・メール

SetErrorFilter を設定する

フィルターエラー ログ

SetErrorFilter (フィルター設定)

規則式文字列です フィルター 本当 文字列

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

一般的なエラーをフィルタリングする

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

インターフェースエラーメッセージをフィルタリングします.

この正規表現にマッチしたエラーログはログシステムにアップロードされません.複数のフィルター条件を設定するために,複数の kere (数回数に制限はありません) を呼び出すことができます.複数の kereをセットした正規表現は,蓄積され,同時に有効になります.エラーログをフィルターするために使用される正規表現をリセットするために,空の文字列を設定できます:SetErrorFilter(""). フィルタリングされたログは,頻繁にエラー報告がデータベースファイルを膨らませるのを防ぐために,ドッカーディレクトリ内のライブ取引IDに対応するデータベースファイルに書き込まれません.

GetPid は

リアルタイムで取引の プロセスIDを取得します

リアルタイム取引プロセスIDを返します. 文字列

GetPid (ゲットピッド)

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

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

バックテストシステムでは機能しません

GetCommand を取得する

戦略インタラクションのコマンドを受け取る

返したコマンドの形式はControlName:Data. ControlNameコントロールの名前で,Dataインタラクティブなコントロールに入力ボックス,ドロップダウンボックス,その他のコンポーネントがない場合 (例えば入力ボックスのないボタンのコントロール),返されるコマンドフォーマットはControlNameコントロールの名前だけ返します. 文字列

コマンドを取得する

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

インタラクションコマンドを検出し,Logインタラクションコマンドが検出されたときにそれを出力する機能です.

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

例えば,戦略インタラクティブコントロールは入力ボックスなしでコントロールを追加します.インタラクティブコントロールは以下のように命名されます.buy制御説明の情報は:buyインタラクティブなコントロールの名前は:sell制御説明メッセージは次のとおりです.sellインタラクションコードは,異なるインタラクションコントロールに対応するように戦略に設計されています.

バックテストシステムでは機能しません

GetMeta を取得する

戦略登録コードを生成するときにメタの値を書き出す.

Metaデータです 文字列

GetMeta (メタ) を取得する

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

応用例:使用Meta戦略によって運用される資産の量を制限する.

戦略の賃貸者のために資本制限を行う必要があります.Meta登録コードを生成する際に設定された値は 190文字を超えないこと,GetMeta()メタデータがない場合 (Meta戦略登録コードを生成する際に設定され,GetMeta()バックテストシステムでは動作しません.

ダイヤル

原始語Socketアクセス,サポートtcp, udp, tls, unix4つの一般的な通信プロトコルをサポートします.mqtt, nats, amqp, kafkaデータベースに接続するサポート:sqlite3, mysql, postgres, clickhouse.

についてDial()標準呼び出しでは,接続オブジェクトが3つのメソッドを持つ.read, writeそしてclose.....readデータを読み取るために使用されます.writeデータを送信するために使用されます.close接続を閉めるために使用されます. についてreadこの方法は次のパラメータをサポートします.

  • パラメータが渡されない場合は,メッセージが利用可能になるまでブロックし,返します.ws.read().
  • パラメータとして渡された場合,単位はミリ秒で,メッセージ待ちタイムアウト期間を指定します.例えば:ws.read(2000)2秒 (2000ミリ秒) のタイムアウトを指定する.
  • 次の2つのパラメータは WebSocket にのみ有効である. パラメータを転送する-1機能がメッセージの有無に関わらず即座に返信することを意味します.例えば:ws.read(-1)- わかった パラメータを転送する-2つまり,この関数はメッセージを含むか,ないか,すぐに返信しますが,最新のメッセージのみが返信され,バッファ化されたメッセージは捨てられます.例えば,ws.read(-2).

read()機能バッファの記述: WebSocket プロトコルによって押された受信データは,戦略の間の時間間隔がread()函数呼び出しが長すぎる.これらのデータはバッファーに格納され,そのデータ構造は最大2000のキューである.2000を超えると,最新のデータがバッファーに入力され,最も古いデータは削除される.

シナリオ パラメーターなし パラメータ: -1 パラメーター: -2 パラメータ: 2000 ミリ秒
すでにバッファにあるデータ 最古のデータをすぐに返します. 最古のデータをすぐに返します. 最新のデータをすぐに返します 最古のデータをすぐに返します.
バッファーにデータがない データにブロックされたときに戻す すぐに null を返します すぐに null を返します 2000 ms を待って,データがない場合は null を返します.データがある場合は null を返します.
WebSocket 接続は,底辺の接続によって切断または再接続されます. read() 機能は空の文字列を返します.つまり: ,そして write() 機能は0を返します.状況が検出されます. Close() 機能を使用して接続を終了できます.または自動再接続を設定している場合は,それを終了する必要はありません.底にあるシステムは自動的に再接続します.

オブジェクト

ダイヤル (住所) ダイヤル (住所,タイムアウト)

アドレスを要求します アドレス 本当 文字列 タイムアウト秒 タイムアウト 偽り 番号

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

ダイヤル関数呼び出しの例:

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

バイナンス WebSocket ticker インターフェースにアクセスするには:

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

OKXの WebSocket ticker インターフェイスへのアクセス:

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

Huobiの WebSocket ティッカーインターフェイスへのアクセス:

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

OKXのWebSocket認証インターフェイスにアクセスするには:

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

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

データベースに接続する際に Dial 関数によって返される接続 オブジェクトには 2 つの独自のメソッド 関数があります.

  • exec(sqlString): SQL 文を SQL 文と類似した方法で実行するために使用されます.DBExec() function.
  • fd()についてfd()この関数は,他のスレッドが再接続するために使用するハンドル (例えば,ハンドル変数はハンドル) を返します (Dial によって作成されたオブジェクトが既に実行によって閉じられた場合でも).close()接続を閉じる機能) を使って,ハンドルをハンドルにDial()機能などDial(handle)再利用接続 ダイヤル関数と接続する例ですsqlite3 database.

詳細についてaddressパラメータ,|通常の住所の後ろの記号:wss://ws.okx.com:8443/ws/v5/publicもしそうなら|パラメータ文字列の文字列,その後||機能のパラメータの設定です. それぞれのパラメータは,&文字は,例えば,ss5プロキシと圧縮パラメータは次のように組み合わせることができます.Dial("wss://ws.okx.com:8443/ws/v5/public|proxy=socks5://xxx:9999&compress=gzip_raw&mode=recv")

ダイヤル機能のアドレスパラメータによってサポートされる機能 パラメータ説明
WebSocket プロトコルのデータ圧縮に関連するパラメータ: compress=パラメータ値 gzip は標準 gzip でない場合は,拡張メソッド: gzip_raw を使用できます.
WebSocket プロトコルデータ圧縮に関連するパラメータ: mode=パラメータ値 モードは圧縮モードで,モードパラメータは二重で,送信,recv. dualは二方向圧縮,圧縮データを送信,圧縮データ受信.送信は圧縮データを送信する.recvは圧縮データを受け取る,ローカルデコンプレッション.
WebSocket プロトコルは,元となる自動再接続関連パラメータを設定します: reconnect=パラメータ値 reconnect は reconnect を設定するかどうか, reconnect=true は reconnect を有効にするかどうかです.このパラメータが設定されていない場合,デフォルトでは reconnect はありません.
WebSocket プロトコルは,基礎となる自動再接続関連パラメータを設定します: interval=パラメータ値 intervalは再試行間隔,ミリ秒で,interval=10000は再試行間隔10秒,デフォルトは1秒で,設定されていない場合,つまりinterval=1000です.
WebSocket プロトコルは,基礎となる自動再接続関連パラメータを設定します: payload=パラメータ値 payload は WebSocket が再接続されたときに送信されるサブスクリプションメッセージです.例えば: payload=okokok.
靴下5のパラメータに関するプロキシ:プロキシ=パラメータ値 プロキシは ss5 プロキシ設定です パラメータ値形式: socks5://name:pwd@192.168.0.1:1080名前はSS5サーバーのユーザー名 pwdはSS5サーバーのログインパスワード 1080はSS5サービスポートです

についてDial()この機能はライブ取引のみに対応しています ダイヤル関数を使用してデータベースに接続するときは,接続文字列は各データベースのgo言語ドライバープロジェクトを参照して記述されます.

サポートされているデータベース 推進プロジェクト 接続文字列 コメント
スクライト3 github.com/mattn/go-sqlite3 sqlite3://ファイル:test.db?キャッシュ=共有&モード=メモリ についてsqlite3://前項は sqlite3 データベースが使用されていることを示します.Dial("sqlite3://test1.db")
mysql github.com/go-sql-driver/mysql mysql://username:yourpassword@tcp (あなたのパスワード@tcp)localhost:3306) /あなたのデータベース?チャルセット=utf8mb4
産後 github.com/lib/pq postgres://user=postgres dbname=yourdatabase sslmode=disable password=yourpassword ホスト=ローカルホスト ポート=5432
クリックハウス github.com/ClickHouse/clickhouse-go クリックハウス://tcp://host:9000?ユーザー名=ユーザー名&パスワード=あなたのパスワード&データベース=youdatabase

確認してください.payload設定された内容addressパラメータには文字が含まれています.=解析に影響を与える可能性があります.addressパラメータDialこの例のようなものです

backPack Exchange websocket のプライベートインターフェースの呼び出し例:

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

次の呼び出しはうまく動作します.

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

文字を書き込むとpayload機能しない場合,例えば

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

JavaScriptだけが JavaScript の使用をサポートしています.mqtt, nats, amqpそしてkafkaダイヤル関数における通信プロトコル. JavaScript 言語戦略コードは,4つのプロトコルの使用を示す例として使用されます.mqtt, nats, amqpそしてkafka:

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

詳細なドキュメント参照:FMZを調査する: ライブ取引戦略間の通信プロトコルの実践

HttpQuery をインストールする

Http リクエストを送信します.

リクエストの応答データを返します.JSON文字列で解析できます.JSON.parse()機能についてJavaScript言語戦略とjson::parse()機能についてC++言語戦略.デバッグがオプション構造で true に設定されている場合,返却値はオブジェクト (JSON) である.デバッグが false に設定されている場合,返却値は文字列である. 文字列,オブジェクト

HttpQuery (URL) HttpQuery (URL,オプション)

Http リクエスト URL url 本当 文字列 例えば,Http リクエストに関連する設定は,次のように構造化できます:

{
    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
}
  • プロフィール: ブラウザをシミュレートするために使用tls指紋を サポートされている設定には以下のオプションが含まれます. chrome_: は"chrome_103", "chrome_104", "chrome_105", "chrome_106", "chrome_107", "chrome_108", "chrome_109", "chrome_110", "chrome_111", "chrome_112", "chrome_117"ありがとうございました サファリ"safari_15_6_1", "safari_16_0", "safari_ipad_15_6", "safari_ios_15_5", "safari_ios_15_6", "safari_ios_16_0"ありがとうございました ファイアフォックス:"firefox_102", "firefox_104", "firefox_105", "firefox_106", "firefox_108", "firefox_110", "firefox_117"ありがとうございました オペラ"opera_89", "opera_90", "opera_91"ありがとうございました ザランド:"zalando_android_mobile", "zalando_ios_mobile"ありがとうございました ナイキ"nike_ios_mobile", "nike_android_mobile"ありがとうございました 雲の摩天楼"cloudscraper"ありがとうございました mms_:"mms_ios"ありがとうございました メッシュ_:"mesh_ios", "mesh_ios_1", "mesh_ios_2", "mesh_android", "mesh_android_1", "mesh_android_2"ありがとうございました 確認した"confirmed_ios", "confirmed_android"ありがとうございました わかった."okhttp4_android_7", "okhttp4_android_8", "okhttp4_android_9", "okhttp4_android_10", "okhttp4_android_11", "okhttp4_android_12", "okhttp4_android_13",
  • debug: に設定されているときtrueについてHttpQuery返信メッセージを返します.false単一のデータです.Body返信メッセージが返されます.
  • タイムアウト:タイムアウト設定で,セット1000は1秒のタイムアウトを意味します.
  • Charset: GB18030 のような要求応答データのトランスコードをサポートする. この構造のすべてのフィールドはオプションで,例えば,profileフィールドは,外に出ることができます.

オプション 偽り オブジェクト

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

OKX パブリック ティッカー API インターフェースへのアクセス例.

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

HttpQuery関数はプロキシ設定を使用します.

についてHttpQuery()機能のみサポートJavaScript, C++言語Python言語はurllibHttp リクエストを直接送信します.HttpQuery()取引所のインターフェースにアクセスするために主に使用されます. チケット情報などの公開インターフェースなど,署名を必要としません.HttpQuery()バックテストシステムでリクエストを送信するために使用できます (ただGETバックテストは,異なる研究機関への20回の訪問に限定されています.URLsそしてHttpQuery()データをキャッシュします.URL2回目でアクセスされる場合,HttpQuery()この関数はキャッシュされたデータを返し,実際のネットワークリクエストは起こらない.

{@fun/Global/HttpQuery_Go HttpQuery_Go} このビデオは,

HttpQuery_Go をインストールする

Http リクエストを送信します.HttpQuery function.

についてHttpQuery_Go()Http リクエストの結果を取得するために使用できる並行オブジェクトをすぐに返します.wait方法 方法JSON.parse()解析するために使用できます.JSON.parse()機能についてJavaScript言語の戦略について
オブジェクト

HttpQuery_Go (URL) HttpQuery_Go (URL,オプション)

Http リクエスト URL url 本当 文字列 例えば,Http リクエストに関連する設定は,次のように構造化できます:

{
    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
}
  • プロフィール: ブラウザをシミュレートするために使用tls fingerprints.
  • debug: に設定されているときtrueこのHttpQuery_Go返信メッセージを返します.false単一のデータです.Body返信メッセージが返されます.
  • タイムアウト:タイムアウト設定で,セット1000は1秒のタイムアウトを意味します. この構造のすべてのフィールドはオプションで,例えば,profileフィールドは,外に出ることができます.

オプション 偽り オブジェクト

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

取引所の公開インターフェイスへの非同期アクセス

についてHttpQuery_Go()機能のみサポートJavaScriptについてPython言語は,urllibHttp リクエストを直接送信します.HttpQuery_Go()取引所で署名を必要としないインターフェースにアクセスするために主に使用されます.HttpQuery_Goバックテストシステムではサポートされていません.

{@fun/Global/HttpQuery HttpQuery} このビデオは,

暗号化

この関数は,入力されたパラメータに従ってデータをコードします.

についてEncode暗号化や暗号化後にデータを返します 文字列

エンコード (algo, inputFormat, output) 形式,データ エンコード (algo, inputFormat, output) 形式,データ,キー 形式,キー

パラメータalgo暗号化計算に使用されたアルゴリズムです. サポート設定は:raw(アルゴリズムが使用されていない) "サイン", サインTx, 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 パラメーター.algoまた: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk,エンコーディングと解読文字列をサポートしています. パラメータalgoまた: ed25519アルゴリズムもサポートしています. 異なるハッシュアルゴリズムの使用もサポートしています.algoed25519.md5,ed25519.sha512などと書ける.ed25519.seed計算する アルゴ 本当 文字列 データの形式を指定するために使用されます.dataパラメータinputFormatパラメータは次のいずれかに設定できます:raw, hex, base64, stringrawはデータが原始データであることを意味します.hexbase64 は,データがbase64文字列が文字列であることを意味します. input 形式 本当 文字列 出力のデータ形式を指定するために使用されます.outputFormatパラメータは次のいずれかに設定できます:raw, hex, base64, stringrawはデータが原始データであることを意味します.hexbase64 は,データがbase64文字列が文字列であることを意味します. output 形式 本当 文字列 パラメーターdata処理されるデータです データ 本当 文字列 データの形式を指定するために使用されます.keyパラメータkeyパラメータは次のいずれかに設定できます:raw, hex, base64, stringrawはデータが原始データであることを意味します.hexbase64 は,データがbase64文字列が文字列であることを意味します. キー形式 偽り 文字列 パラメーターkey秘密鍵はHMACパラメーターkeyパラメータがalgo設定されています.signまたはsignTx.....keyパラメータは,HMAC暗号化algoパラメータは raw に設定されます (HMAC暗号化のためにアルゴリズムを指定する必要があります). キー 偽り 文字列

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
}

エンコード関数呼び出しの例

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

パラメータalgoまた,文字列のエンコードと解読をサポートする: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk.

についてEncode()直接取引にのみサポートされています.keyそしてkeyFormatパラメータが通過されていない場合,key暗号化が使用されていません

UnixNano について

この瞬間のナノ秒タイムスタンプを

についてUnixNano()この関数はナノ秒間のタイムスタンプを返します 番号

UnixNano (ユニックスナノ))

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

タイムスタンプを手に入れるには 次のコードを使います

{@fun/Global/Unix Unix} ユニクスは

UNIX

2階の現在の時刻のタイムスタンプを

2階のタイムスタンプを返します 番号

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 をインストールする

ドーカーが位置するデバイスのシステム情報を取得します.

システム情報 文字列

GetOS (ゲットOS)

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

例えば,電話でGetOS()動作するドーカーのための関数マック OS操作システムが返信する可能性があります:darwin/amd64Appleのコンピュータには複数のハードウェアアーキテクチャがあるからですdarwin名称はマック OS system.

MD5

パラメータの MD5 ハッシュを計算するdata.

MD5ハッシュ値 文字列

MD5 (データ)

MD5の計算を必要とするデータです データ 本当 文字列

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

呼び出すMD5("hello world")この関数で返される値は5eb63bbbe01eeed093cb22bb8f5acdc3.

{@fun/Global/Encode エンコード}

DBExec は

データベース インターフェース機能

実行結果を含むオブジェクトスクワール例えば,以下のように


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

オブジェクト

DBExec (sql)

スクワール命令文字列です スクワール 本当 文字列

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

メモリ内のデータベースをサポートするDBExec機能パラメータスクワールと始まる:記憶内データベースで動作する場合は,ファイルを書く必要なくより速く動作します.

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

テーブルを作れ

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

テーブル内のレコードを追加,削除,チェック,変更します.

機能についてDBExec()パラメータを入力してライブ取引データベース (SQLiteデータベース) を操作できます. リアル取引データベースにデータを追加,削除,チェック,変更の操作を実現します.SQLiteシステムで予約されたテーブル ライブ取引データベース:kvdb, cfg, log, profit, chartこのテーブルで操作しないでください.取引システムに衝突を引き起こす可能性があるため,そのような操作を行うことは推奨されません.DBExec()この機能はライブ取引のみに対応しています

{@fun/Global/_G _G} ほら ほら

UUID

UUID を作成します.

32ビット UUID 文字列

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

についてUUID()機能はライブ取引のみをサポートします.

イベントループ

事件を聞いて,それは,何があるときに戻ってくるWebSocket読み取れるデータや並行作業,例えばexchange.Go(), HttpQuery_Go()完了しました.

返されたオブジェクトが null ではない場合,Event返信内容に含まれるのはイベントトリガータイプです.例えば,次の返信値構造:

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

オブジェクト

イベントループ イベントループ (タイムアウト)

パラメータtimeoutパラメーターは,このパラメータを表示します.timeoutイベントが0に設定されている場合,戻る前に発生するのを待つ. イベントが0より大きい場合は,タイムアウトを待つように設定し, 0未満の場合,最も最近のイベントをすぐに返します. タイムアウト 偽り 番号

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

初の電話はEventLoop()実行される場合,最初の動作が実行される場合,EventLoop()イベントコールバックが開始された後,以前のイベントを逃します. 基礎システムでは,最大500回のイベントコールバックをキャッシュするキュー構造を包み込みます.EventLoop()500キャッシュの外の後のイベントコールバックは失われます.EventLoop()基本システム WebSocket のキャッシュキューや,並行関数のキャッシュに影響しないexchange.Go(). これらのキャッシュでは,データを取得するためにそれぞれの方法を使用する必要があります.EventLoop()復元される前に取得されたデータのための機能EventLoop()主な目的は,EventLoop()戦略層に新しいネットワークデータが基盤システムに受信されたことを通知する機能です. 戦略全体がイベントによって動かされます.EventLoop()WebSocket 接続,WebSocket で作成されたオブジェクトなどexchange.Go()データを集めようとしますEventLoop()機能はライブ取引のみをサポートします. メイン機能から呼び出されるとメインスレッドのイベントを聞くmain()戦略を策定するJavaScript言語,threading.Thread()実行関数で呼び出せるスレッドを作成し,現在のスレッドのイベントを聞く.

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

__ 仕える

について__ServeHttp サービス,TCP サービス,Webソケット サービス (Http プロトコルに基づく) を作成するために使用されます.

作成されたサービスの IP アドレスとポートを記録する文字列を返します.例えば:127.0.0.1:8088, [::]:8089.

文字列

__Serve (サーバーURI,ハンドラー) __Serve (サーバーURI,ハンドラー,...args)

についてserveURIパラメータは,プロトコル,IPアドレス,ポート,および他の設定を設定するために使用されます.http://0.0.0.0:8088?gzip=trueつまりhttp://:8088?gzip=true.

  • TCP プロトコルserveURIパラメータ設定,例えばtcp://127.0.0.1:6666?tls=true証明書やプライベートキーを追加できます.tls=true&cert_pem=xxxx&cert_key_pem=xxxx.
  • Http プロトコルserveURIパラメータ設定などhttp://127.0.0.1:6666?gzip=true; 圧縮設定を設定できます:gzip=true- わかった についてserveURIHttps の場合も使用されます.https://127.0.0.1:6666?tls=true&gzip=true追加することもできますcert_pemそしてcert_key_pem証明書の読み込みのパラメータ

サービスURI 本当 文字列 についてhandlerこのパラメータは,ルーティング処理機能 (Http プロトコル),メッセージ処理機能 (TCP プロトコル),ストリーム処理機能 (Webソケット) に渡すのに使用されます. パラメータによって送信されたコールバック関数handler複数のパラメータを定義できます 最初のパラメータは ctx オブジェクト (コンテキスト オブジェクト) です

ハンドラー 本当 機能 コールバック関数の実際のパラメータがパラメータとして渡されますhandler複数のパラメータがある可能性があります.arg例えば:

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

パラメータ1, 2, 3呼び出すときに通過した__Serve()パラメータに対応する機能a, b, cコールバック機能で通過しました

アルグ 偽り 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値,システムでサポートされる他のタイプ

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
  • この関数は JavaScript 言語戦略のみをサポートします.
  • サービススレッドは,グローバルスコープから隔離されているため,閉鎖や外部変数,カスタム関数等への参照をサポートしません.しかし,すべてのプラットフォーム API 関数を呼び出すことができます.
  • についてWebsocket経路にルーティングブランチを設定し,実装コードを設計することができます.Websocketこのセクションのサンプルコードを参照してください.

パラメータによって送信されたコールバック関数handler受け取るctxパラメータctxパラメータは,次の方法でデータを取得し書き込むために使用されるコンテキストオブジェクトです.

  • ctx.proto ((() について Http/TCP プロトコルに適用され,呼び出すときにプロトコル名を返します.例えば:HTTP/1.1, tcp.
  • ctx.host() Http プロトコルに適用すると,IP アドレスとポートを呼んだときにホスト情報を返します.
  • ctx.path ((() について Http プロトコルに適用され,呼び出すときに要求経路を返します.
  • ctx.query (キー) Http プロトコルに適用される.呼び出し時にリクエスト内のキーに対応する値を返します.例えば,送信されたリクエストは:http://127.0.0.1:8088?num=123パラメータによって送信されたコールバック処理機能handlerリターン"123"いつctx.query("num")呼び出されています
  • ctx.rawQuery (() Http プロトコルに適用され,呼び出されると,リクエストの元のクエリ (Http リクエストのクエリ) を返します.
  • ctx.headers ((() について Http プロトコルに適用され,呼び出し時にリクエストのヘッダ情報を返します.
  • ctx.header (キー) 呼び出し時に指定された要求ヘッダのキー値を返します.例えば,User-Agent本願の表記にはctx.header("User-Agent").
  • ctx.method (ctx.方法) について Http プロトコルに適用され,呼び出すときに要求メソッドを返します.GET, POSTなど
  • ctx.body ((() について HTTP プロトコルの POST リクエストに適用され,呼び出されるとリクエストのボディを返します.
  • ctx.setHeader (キー,値) Http プロトコルに適用され,応答メッセージの要求ヘッダ情報を設定する.
  • ctx.setStatus (コード) Http プロトコルに適用され,Http メッセージの状態コードを設定します.通常,Http 状態コードはルーティング ブランチの最後に設定されます.デフォルト値は 200.
  • ctx.remoteAddr ((() について Http/TCP プロトコルに適用され,リモート クライアント アドレスとポートをリクエストで返します.
  • ctx.localAddr ((() Http/TCP プロトコルに適用され,呼び出し時にサービスのローカルアドレスとポートを返します.
  • ctx.upgrade (WEBソケット) Webソケットプロトコルの実装に適用されます.ctxWebソケットプロトコルへのコンテキストオブジェクト; スイッチが成功した場合にブール値 (true) と失敗した場合にブール値 (false) を返します.
  • ctx.read (タイムアウト) HTTP プロトコルに基づく Websocket プロトコル実装/TCP プロトコルに適用され, Websocket 接続と TCP 接続のデータを読みます.readタイムアウトパラメータを指定できます.timeout_ms数ミリ秒で
  • ctx.write ((s) について 文字列のデータを書くために使用できます.JSON.stringify()JSON オブジェクトを文字列にコードし,それを書き込みます.WebSocket暗号化された文字列をクライアントに送信します

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go} ウェブ上で検索するサイト

_G

データを継続的に保存する,この関数は保存できるグローバル辞書関数を実装する.データ構造は,dockerのローカルデータベースファイルに永久に保存されるKVテーブルである.

キー値のデータを保存するk-vキー値のペア 文字列,数,ボール,オブジェクト,配列,ゼロ値

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

パラメータk保存されたキー値ペアの鍵の名前で,小字・小文字が表示されない. k 偽り 文字列,ゼロ値 パラメーターv保存されたキー値ペアのキー値です.JSONシリーズ化しました v 偽り 文字列,数,ボール,オブジェクト,配列,ゼロ値

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

リアルタイム取引の各個別データベース,_G()バックテストが完了すると,バックテストシステムに保存されたデータは,_G()機能が削除されます._G()ハードウェアデバイスのメモリとハードディスクスペースに応じて合理的に使用し,悪用してはならない. 呼び出すとき_G()パラメータが通過されなければ,_G()この関数は,Id現行のライブ取引._G()パラメータv削除を表示する為, null に渡されます.k-v呼び出すとき_G()パラメータのみk文字列で渡され,_G()保存されたパラメータに対応するキー値を返します.k. 呼び出すとき_G()パラメータのみkすべての記録が0で表示されます.k-vキー値ペアが削除されます.k-vキー値ペアが持続的に保存されている場合,_G()パラメータとして保存されたキー名を入力します.kパラメータとして新しいキー値を入力v更新しますk-vキー値ペア

{@fun/Global/DBExec DBExec} このビデオは

_D

ミリ秒タイムスタンプまたはDate時間の文字列にオブジェクト.

タイムストリング 文字列

_D() _D (時間) タイムスタンプ,fmt

ミリ秒タイムスタンプかDateオブジェクト タイムスタンプ 偽り 番号、対象 文字列をフォーマットJavaScript言語のデフォルト形式:yyyy-MM-dd hh:mm:ss; Python言語のデフォルト形式:%Y-%m-%d %H:%M:%S; C++言語のデフォルト形式:%Y-%m-%d %H:%M:%S- わかった fmt 偽り 文字列

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

現在の時間文字列を取得してプリントします:

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

タイムスタンプは1574993606000,コード変換で:

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
}

パラメータでフォーマットするfmt異なる場合JavaScript, PythonそしてC++言語は以下の例で示されている.

パラメータを通過することなく現在の時間文字列を返します._D()機能についてPythonパラメータは2階のタイムスタンプ (JavaScriptとC++の戦略では1秒は1000ミリ秒) である._D()タイムスタンプで読み取れる時間文字列を解析するには,ドッカープログラムが位置するオペレーティングシステムのタイムゾーンと時間設定に注意する必要があります._D()この関数は,dockerのシステムの時間に応じて,タイムスタンプを読み取れる時間文字列に解析します.

{@fun/Global/UnixNano UnixNano}, {@fun/Global/Unix Unix} ユーニックス

_ N

浮動小数点番号をフォーマットする

精度設定に従ってフォーマットされた浮動点数 番号

_ N() _ N (数) _N (num,精度)

フォーマットする必要がある浮動小数点番号. ナンバー 本当 番号 フォーマットの精度設定,パラメータprecisionこのパラメータは,precision4に設定します. 精度 偽り 番号

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

例えば_N(3.1415, 2)削除する3.1415この関数から返します.3.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);
}

0に書き換えることができます. これは,

パラメータprecision負の整数です. 負の整数です.

{@fun/Trade/exchange.SetPrecision exchange.SetPrecision} チェンジする

_C

インターフェースの障害耐性を再試します

コールバック関数の実行時に返される値 システムでは,すべてのタイプがサポートされています.論理的誤り値そしてゼロ値.

_C(pfn) _C ((pfn,... args) について

パラメータpfn函数参照であり,コールバック機能- わかった pfn 本当 機能 パラメーターコールバック機能複数のパラメータがある可能性があります.argパラメータの種類と数arg測定するコールバック機能- わかった アルグ 偽り 文字列,数, bool,オブジェクト,配列,関数,すべてのタイプは,ゼロ値などのシステムでサポートされています

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

パラメータのない誤差容量関数については:

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

パラメータが誤差耐性のある関数については:

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

また,カスタム機能の障害耐性にも使用できます.

について_C()指定された関数を成功して返すまで呼び続けます (パラメータが参照する関数)pfnリターンゼロまたは偽り呼び出されると呼び出します.pfn) など_C(exchange.GetTicker)3秒で再試行します._CDelay()試行距離を設定する関数です._CDelay(1000)試行錯誤の間隔を変更する_C()1秒まで 障害許容は,以下のような機能に限らずに行うことができる.

  • exchange.GetTicker()
  • exchange.GetDepth()
  • exchange.GetTrades()
  • exchange.GetRecords()
  • exchange.GetAccount()
  • exchange.GetOrders()
  • exchange.GetOrder()
  • exchange.GetPositions()呼び出すことができます._C()誤差耐性について_C()機能は上記に記載されている機能の障害許容量に限定されていない場合,パラメータpfn函数呼び出しではなく関数参照です 注目してください._C(exchange.GetTicker)しない_C(exchange.GetTicker()).

_クロス

配列の交差点数を返しますarr1そして配列arr2.

配列の交差期数arr1そして配列arr2- わかった 番号

_ 交差 (arr1,arr2)

エレメントは型の配列である.number- わかった arr1 本当 配列 エレメントは型の配列である.number- わかった arr2 本当 配列

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

数値のセットをシミュレーションして _Cross ((Arr1,Arr2) 関数をテストできます:

返回値が_Cross()値が正数である場合,上向きの浸透期間を示し,負数である場合,下向きの浸透期間を示し,0は現在の価格と同じです. 具体的な使用説明:内蔵機能に関する分析と使用説明 _Cross.

JSONパース

機能についてJSONParse()解析するために使用されます.JSON strings.

JSONオブジェクト オブジェクト

JSONParse (JSONパース)

JSONストリング s 本当 文字列

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 の文字列は,文字列の種類として解析されます.JSONParse()バックテストシステムでは機能がサポートされていません.

ログ

ログ

出力日記

ログ...msgs

パラメータmsg出力の内容であり,パラメータmsg1つ以上で通過できます メッセージ 偽り 文字列,数,ボール,オブジェクト,配列,システムでサポートされる任意のタイプ,例えば null

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

複数msgパラメータは,次の通り渡すことができます:

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

色を設定し,同時にプッシュする場合は,私たちは最初に色を設定し,使用する必要があります@押す最後の設定するキャラクター.

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

についてLog()機能は印刷をサポートするbase64暗号化された画像は`そして最後に`例えば:

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

についてLog()直接印刷をサポートするPythonほらmatplotlib.pyplotオブジェクトは,そのオブジェクトがsavefig直接印刷することができます.Log機能,例えば:

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

についてLog()言語の切り替えをサポートします.Log()この機能は,プラットフォームページの言語設定に基づいて,自動的に対応言語に切り替えるテキストを出力します.例えば:

についてLog()リアルトレードまたはバックテストシステムのログエリアにログメッセージを出力し,ライブトレードが実行されているときにログはライブトレードデータベースに保存されます.Log()終了するログメッセージを出力します.@メールアドレス, WebHook アドレス,などに設定します.設定を押すFMZ Quant トレーディング プラットフォームの現在のアカウントです.デバッグツール,バックテストシステム.メッセージプッシュには周波数制限があります.特定の制限規則は以下のとおりです:ライブ取引の20秒サイクルの内,最後のプッシュメッセージのみが保持されプッシュされ,他のメッセージはフィルタリングされプッシュされません (ログ機能によるプッシュログ出力は,ログエリアで通常印刷され表示されます). についてWebHookプッシュ,あなたが書いたサービスプログラムを使用することができますGolang:

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

セットWebHook設定を押す: http://XXX.XX.XXX.XX:9090/data?data=Hello_FMZ- わかった 書き込みの実行後Golang実行を開始します. 次の戦略は書いていますJavaScript言語,戦略は実行によって実行されますLog()メッセージを押して:

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

サービスプログラムGolanglanguage は push を受信し,サービスプログラムはメッセージをプリントします.

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 ログリセット}, {@fun/Log/Logバキュム ログバキュム}

ログプロフィット

P&L値を記録し,P&L値を印刷し,P&L値に基づいてリターン曲線を描く.

ログ 利益 (利益) ログProfit (利益,... args)

パラメータprofit戦略の設計アルゴリズムと計算によって得られる収益データです 利益 本当 番号 収益日記に偶然の情報を出力するための拡張パラメータargパラメータは"つ以上渡すことができます アルグ 偽り 文字列,数,ボール,オブジェクト,配列,システムでサポートされる任意のタイプ,例えば 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);
    }
}

についてLogProfit文字で終わったら&収入表だけ作成し,収入日記を印刷しません.

{@fun/Log/LogProfitReset ログプロフィットリセット}

ログプロフィットリセット

収入記録や 収入表を全て 消して

ログプロフィットリセット ログProfitReset (残る)

についてremainこのパラメータは,保存するログエントリ (整数値) の数を指定するために使用されます. 留まる 偽り 番号

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 ログプロフィット}

ログステータス

バックテストシステムまたはライブ取引ページのステータスバーの出力情報

ログステータス...msgs

パラメータmsg出力の内容であり,パラメータmsg1つ以上で通過できます メッセージ 偽り 文字列,数,ボール,オブジェクト,配列,システムでサポートされる任意のタイプ,例えば 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");
}

出力コンテンツの色を設定するサポート:

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

状態バーのデータ出力例:

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

ステータスバー (古いボタンの構造) でボタンのコントロールを設計するサポート:

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

ステータスバーボタン (古いボタン構造) の記述関数を無効に設定します:

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

共同でGetCommand()機能,状態バーボタンのインタラクション関数 (古いボタンの構造) を構築する:

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

インタラクション用のステータスバーボタンを構築する際にもサポートされ,インタラクションコマンドはGetCommand()追加します.input状態バーのボタン制御のデータ構造に,例えば,追加"input": {"name": "number of open positions", "type": "number", "defValue": 1}{"type": "button", "cmd": "open", "name": "open position"}ボタンをクリックすると,入力ボックス制御が表示されるポップアップを表示します (入力ボックス内のデフォルト値は1,defValue) ボタンコマンドと一緒に送信されるデータを入力できます.例えば,次のテストコードを実行すると", open position ボタンをクリックすると,入力ボックスを持つポップアップウィンドウがポップアップします.入力ボックスに 111 を入力して,OK をクリックします.GetCommand()この関数は次のメッセージをキャプチャします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);
    }
}

機能的にコンパクトなボタン制御 (古いボタン構造) をサポートします.データ入力をサポートするステータスバーのボタンインタラクティブなコマンドは,最終的に,コンピュータによって記録されます.GetCommand()機能.その違いは,"group"ページにポップアップするダイアログは,グループ一度にデータ群を入力するように設定された入力制御の この問題について注意すべき点は"group"ステータスバー ボタン コントロールとグループ ボタン コントロールの構造のフィールド:

  • についてtypeグループ内のプロパティは,次の4つのタイプのみをサポートし,defValueproperty はデフォルト値です selected: ドロップダウン ボックス コントロール|各オプションを設定したままにドロップダウンボックスで分離するシンボルです 番号:数値入力ボックス制御. string: 文字列入力ボックス制御 ブーリアン:チェックボックスのコントロール, (ブーリアン) true をチェックし, (ブーリアン) false をチェックしていない.
  • インタラクティブな入力サポート依存性設定の制御: 例えば次の例では"name": "tradePrice@orderType==1"設定する取引価格入力制御は,order タイプドロップダウン制御が選択されます.待機中の命令.
  • インタラクティブな入力のための双語制御名サポート 例えば,次の例では: description: を単一の方法で設定する order type, use|中国語と英語の記述の内容を区別するシンボルです
  • name, descriptionグループとname, descriptionボタンの構造に同じフィールド名を持つにもかかわらず,同じ定義がありません. 定義するname定義から異なる.name入力されている.
  • グループ ボタンの制御が起動すると,インタラクションコンテンツは ボタンのcmd フィールド値とグループ フィールドの関連データ,例えばLog("cmd:", cmd)次の試験例の記述:cmd: open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}返されるものGetCommand()相互作用が起こるときの機能:open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}.
  • についてtypeボタンのコントロールのプロパティは,以下のみをサポートします."button"- わかった 入力データをサポートするボタン制御,つまりinput属性セット,type設定情報にプロパティinputこのフィールドは複数の制御タイプをサポートします. 次の例を参照してください.
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);
    }
}

状態バーのグループボタン制御 (設定によって実装group状態バーボタンの制御 (設定によって実装)inputfield) をクリックすると,インタラクションを起動する (古いボタンの構造),ページにポップアップするダイアログボックスのドロップダウンボックスのコントロールも複数の選択をサポートします.以下の例では,複数の選択オプションを持つドロップダウンボックスの制御を設計する方法を示します:

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

最新のボタン構造を使用して状態バーのテーブルでボタンを作成します. インタラクションを起動するためにボタンをクリックすると,マルチコントロールポップアップウィンドウがポップアップします. 詳細については,以下を参照してください.ユーザーガイド - ステータスバーのインタラクティブなコントロール.

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

テーブル内のセルを横軸に合併LogStatus()機能:

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

縦に結合する テーブルにセルLogStatus()機能:

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

状態バー表ページ表示:

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

テーブルをページに表示するだけでなく,複数のテーブルを上から下へと順序で表示することもできます.

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

ステータスバーテーブルの水平および垂直スクロールモードを設定するサポート.scroll属性について"auto"横の列の数がページ表示範囲を超えると,ページの表示範囲が移動されます.scrollリアルトレード中に状態バーに大量のデータを書き込む遅延問題を軽減するために使用できます.次のテスト例を参照してください.

情報の出力はLogStatus()ライブ取引が実行されているときの機能は ライブ取引データベースに保存されませんが,現在のライブ取引のステータスバーコンテンツのみを更新します. についてLogStatus()機能は印刷をサポートするbase64暗号化された画像は`そして最後に`例えば:LogStatus("`data:image/png;base64,AAAA`")- わかった についてLogStatus()機能は通過を支えるmatplotlib.pyplot対象を直接Python対象にsavefigパラメータとして渡すことができます.LogStatus()機能,例えば:

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

ストラテジーがライブ・トレードを実行しているとき,ライブ・トレードページの履歴を閲覧すると,ステータスバーは休み,更新を停止します.ログが最初のページにあるときにステータスバーデータのみがリフレッシュされます.出力をサポートします.base64状態バーでエンコードされた画像を表示し,base64ステータスバーに表示される表の暗号化された画像. 暗号化された画像の文字列データは一般的に非常に長いため,サンプルコードは表示されません.

{@fun/Global/GetCommand GetCommand} オーケストラがやってる

EnableLog を起動する

注文情報のログをオンまたはオフにする.

EnableLog (ログを有効にする)

もしenableパラメータが false に設定されている場合,例えばfalse命令日記 (例えば,関数によって生成される日記)exchange.Buy()) は印刷されず,ライブ取引のデータベースに書き込まれていません. 許可する 本当 ボール

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}, {@fun/Trade/exchange.Buy.exchange.Buy}, {@fun/Trade/exchange.Buy}, {@fun/Trade/exchange.Buy.Exchange.Buy}, {@fun/Trade/exchange.Buy.Exchange.Buy}, {@fun/Trade/exchange.Buy.Exchange.Buy}, {@fun/Trade/exchange.Buy.Exchange.Buy}, {@fun/Trade/exchange.Buy.Exchange.Buy}, {@fun/Trade/Exchange.Sell.Exchange.Sell}, {@fun/Trade/Exchange.Exchange.Exchange.Sell.Order}, {@fun/Trade/Exchange.Exchange.Exchange.Sell},

図表

グラフを描く機能をカスタマイズします

チャートオブジェクト オブジェクト

グラフ (オプション)

についてoptionsパラメータはチャート構成です.Chart()機能パラメータoptionsこれはJSONシリーズ化可能HighStocksパラメータHighcharts.StockChart追加的な__isStocknative パラメーターの上に attribute が追加され,__isStock:false通常のグラフとして表示されます.__isStock属性が false に設定されている場合,false,つまり,使用したグラフはHighchartsグラフ.__isStockアトリビュットは true 値に設定されます.true,つまり,使用したグラフはHighstocksチャート (デフォルトで)__isStock真実です 例えばtrue) に問い合わせることができます.HighStocksチャートライブラリ- わかった オプション 本当 オブジェクト,オブジェクトアレイ

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

複数のチャート図の設定:

  • extension.layout属性 属性が値singleで設定されている場合,チャートは積み重なって表示されない (タブとして表示されない),別々に表示される (タイル).
  • extension.height属性 この属性は,数値値または300pxとしてチャートの高さを設定するために使用されます.
  • extension.col属性 この属性は,チャートの幅を設定するために使用されます. ページの幅は12のセルに分けられ,セットは8です. つまり,チャートは8のセル幅を占めています.
// 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);
    }
}

簡単な図の例:

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

三角形曲線を描く例:

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

ハイブリッドチャートの複雑な例:

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

タイプ図pieデータを更新するときに直接チャート構成を更新する必要があります.例えば,上記の例のコードは,チャートを更新します.c.update(chartCfg)データを更新した後,次のとおり:

についてChart()この関数は4つのメソッドを持つチャートオブジェクトを返しますadd(), reset(), update(), del().

    1. についてupdate()方法: についてupdate()このメソッドのパラメータは Chart Configuration Object (JSON) である.
    1. についてdel()方法: についてdel()このメソッドは,渡されたシリーズパラメータに基づいて,指定されたインデックスのデータシリーズを削除できます.
    1. についてadd()方法: についてadd()この方法では,次のパラメータの順序でデータをチャートに書き込むことができます.
    • series: 数値系インデックスを設定するために使用されます.
    • data: 書き込む特定のデータを設定するために使用されます. これは配列です.
    • index(オプション): データインデックスを設定するために使用されます.これは整数です. 変更されたデータの特定のインデックス位置を指定します.-1データセットの最後のデータを指します. 例えば,線を描くとき,線の最後の点のデータを修正します.chart.add(0, [1574993606000, 13.5], -1),つまり,チャートの前最後の最初のポイントのデータを変更しますseries[0].data- わかった についてindexパラメータが設定されていないので,データは現在のデータシリーズの最後の点に追加されます.
    1. についてreset()方法: についてreset()グラフのデータを空にする.reset()メソッドはパラメータを取ることができるremainパラメータはありません.remainすべてのデータをクリアします.

{@fun/Log/KLineChartKLineChart} クライン・チャート クライン・チャート

KLineチャート

この関数は,戦略実行時にカスタム図を描くのに使用されます.Pine language.

グラフオブジェクト.KLineChart()複数のメソッドでチャートオブジェクトを返します.begin()そしてclose()引く作業は,begin()函数呼び出しで終了するclose()描画操作を実行するためにKLineデータを通過するときに関数呼び出しをする. オブジェクト

KLineChart (オプション)

についてoptionsパラメータはチャート構成です オプション 本当 オブジェクト,オブジェクトアレイ

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

図面制御オブジェクトが戦略のカスタム描画領域に描画するために必要な場合,KLineChart()対象を作成する. パラメータKLineChart()この関数はチャート構成構造で,参照コードで使用されるものはシンプルです.{overlay: true}このチャート構成構造は,メインチャートで出力される描画コンテンツのみを設定します.overlay誤り値に設定されます.falseメインチャートに描くための描画関数を指定する必要がある場合,パラメータも指定できます.overlay特定の関数呼び出しの真の値として,例えば: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

図面インターフェースの機能Pine図面処理でサポートされる言語は:barcolorK線の色を設定します.

barcolor ((色,オフセット,編集可能, show_last,タイトル,表示) 表示パラメータはオプションです: none, all

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

bgcolor,K線の背景を指定された色で満たします.

bgcolor ((色,オフセット,編集可能, show_last,タイトル,表示,オーバーレイ) 表示パラメータはオプションです: none, all

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グラフに一連のデータを描画する.

plot ((シリーズ,タイトル,色,行幅,スタイル,トラック価格,histbase,オフセット,join,編集可能,show_last,display) スタイルのパラメータはオプションです: stepline_diamond, stepline, cross, areabr, area, circles, columns, histogram, linebr, line 表示パラメータはオプションです: none, all

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

fill2つのプロット間の背景を埋め,またはhline提供された色で

記入する (→ライン1,ライン2,色,タイトル,編集可能,記入する,表示する) 表示パラメータはオプションです: none, all

労働組合がJavaScriptこの問題を解くには,公式パラメータを使用できます. 公式パラメータは,{key: value}特定のフォーマルパラメータ名に渡すパラメータを指定する構造です. 例えば,参照コードは,{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)'}指定するcolorパラメータfill機能 形式のパラメータの名前で複数のパラメータを指定する必要がある場合,{key1: value1, key2: value2, key3: value3}- わかった この例では,追加のtitleパラメータが指定されています:{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)', title: 'fill'}- わかった 設定することができます.'rgba(255, 0, 0, 0, 0.2)'または'#FF0000'.

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

hline,水平線は一定の固定価格レベルで表されます.

ライン (価格,タイトル,色,ラインスタイル,ライン幅,編集可能,表示) ラインスタイルのパラメータはオプションです: ,,固体 表示パラメータはオプションです: none, all

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

plotarrowグラフに上下矢印を描いてください

plotarrow ((シリーズ,タイトル,カラーアップ,カラーダウン,オフセット,ミンの高さ,最大高さ,編集可能, show_last,表示) 表示パラメータはオプションです: none, all

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

plotshape図に視覚的な形を描く.

plotshape (シリーズ,タイトル,スタイル,位置,色,オフセット,テキスト,テキスト色,編集可能,サイズ, show_last,表示) スタイルのパラメータはオプションです: ダイヤモンド, 平方, ラベル_ダウン, ラベル_アップ, 矢印_ダウン, 矢印_アップ, , , 三角_ダウン, 三角_アップ, クロス, xクロス 位置パラメータはオプションです: , , , , 絶対 サイズパラメータはオプションです: 10px, 14px, 20px, 40px, 80px, パイン言語でsize.tiny, size.small, size.normal, size.large, size.huge を比較します.size.autoサイズが小さい 表示パラメータはオプションです: none, all

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

plotcharグラフに任意のユニコード文字を使用して視覚的な形を描きます.

plotchar (シリーズ,タイトル,チャール,場所,色,オフセット,テキスト,テキスト色,編集可能,サイズ, show_last,表示) 位置パラメータはオプションです: , , , , 絶対 サイズパラメータはオプションです: 10px, 14px, 20px, 40px, 80px, パイン言語でsize.tiny, size.small, size.normal, size.large, size.huge を比較します.size.autoサイズが小さい 表示パラメータはオプションです: none, all

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図にK線図を描く

plotcandle ((open, high, low, close, title, color, wickcolor, 編集可能, show_last, bordercolor, display) オープン,高い,低い, 閉じる, タイトル, カラー, ウィックカラー, 編集可能, ショウ_ラスト, 境界カラー, 表示) 表示パラメータはオプションです: none, all

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

signalバイ・セールシグナルを描くのに使われます.

シグナル (方向,価格,Qty,ID) 取引の方向を示すためにパラメータは渡されます. あなたは選択することができます long, closelong, short, closeshort. パラメータbar.Highマーカー信号のY軸位置です. 送信されたパラメータ1.5は,信号のトランザクションの数を示します.第4パラメータは,描かれたデフォルトテキストコンテンツを入れ替えるために送信され,描かれた信号マーカーのデフォルトテキストは,トランザクションの方向である,例えばcloselongです.

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

reset,Pine言語では利用できない関数は,チャートデータを空にするのに使用されます.

リセット (リメイク) についてreset()方法が1つのパラメータを取ることができる.remain保存するデータの数を指定する.remainすべてのデータを削除します.

戦略のカスタム図は,方法の1つだけ使用することができますKLineChart()機能またはChart()機能.いくつかの色とスタイル設定のためにKLineChart()機能の呼び出し,参照してくださいKLineChart 関数を使って戦略図面設計を簡単にする.

{@fun/Log/チャート・チャート}

ログリセット

ログを片付けろ

ログリセット (remain)

についてremainこのパラメータは,保存すべき最近のログエントリの数を設定するために使用されます. 留まる 偽り 番号

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

ストラテジーの開始毎の起動ログは1つとしてカウントされるので,パラメータが送信されず,ストラテジーの開始時にログ出力がない場合は,ログが表示されず,ドッカーログが返されるのを待っています (例外ではありません).

{@fun/Log Log}, {@fun/Log/Logバキューム ログバキューム}

ログ真空

貯蔵スペースを回収するために使われますSQLiteデータを削除する際にLogReset()ログをクリアする機能です

ログバキューム

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

その理由はSQLiteデータを削除するときに占有するスペースを回収せず,実行する必要があります.VACUUMこの機能が呼び出されるとファイル移動操作が起こります.遅延は大きいので,適切な時間間隔で呼び出すことが推奨されます.

{@fun/Log/LogReset ログリセット}

console.log

これは,ライブ取引ページの"debug information"列のデバッグ情報を出力するために使用されます.例えば,ライブ取引 ID が123456についてconsole.log拡張子でログファイルを作成します. このプログラムでは,すべての情報と.logプログラムにデバッグ情報を書き込む/logs/storage/123456/ライブ取引が属しているドッカーディレクトリで,ファイル名前置きでstdout_.

コンソール. ログ...msgs

パラメータmsg出力の内容であり,パラメータmsg1つ以上で通過できます メッセージ 偽り 文字列,数,ボール,オブジェクト,配列,null,その他のシステムでサポートされるタイプ.

function main() {
    console.log("test console.log")
}
# Not supported
// Not supported
  • ただJavaScript言語はこの機能をサポートします
  • この機能はライブ取引のみがサポートしていますが,デバッグツールやバックテストシステムではサポートされていません.
  • 文字列に変換されます.[object Object]できるだけ多くの読み取れる情報を出力してみてください.

{@fun/Log/console.error コンソール.エラー}

console.error

ライブ取引ページの"デバッグメッセージ"フィールドのエラー出力に使用されます.例えば,ライブ取引IDが123456についてconsole.error拡張子でログファイルを作成する.logについて/logs/storage/123456/プレフィックスでエラー出力を書き込むstderr_.

コンソール.エラー...msgs

パラメータmsg出力の内容であり,パラメータmsg1つ以上で通過できます メッセージ 偽り 文字列,数,ボール,オブジェクト,配列,null,その他のシステムでサポートされるタイプ.

function main() {
    console.error("test console.error")
}
# Not supported
// Not supported
  • ただJavaScript言語はこの機能をサポートします
  • この機能はライブ取引のみがサポートしていますが,デバッグツールやバックテストシステムではサポートされていません.
  • 文字列に変換されます.[object Object]できるだけ多くの読み取れる情報を出力してみてください.

{@fun/Log/console.log コンソール.log}

市場

exchange.GetTicker

現時点での設定された取引ペア,契約コード,すなわちティッカーデータに対応するスポットまたはコントラクトの {@struct/Ticker Ticker} 構造を取得します.GetTicker ()交換オブジェクト {@var/EXCHANGE exchange} のメンバー関数であり,exchange対象メンバーの関数 (方法) は,exchange文書には繰り返されないでしょう

についてexchange.GetTicker()データの要求が成功すると {@struct/Ticker Ticker} 構造を返し,データ要求が失敗すると null 値を返します. {@struct/Ticker Ticker},ゼロ値

交換する.GetTicker() 交換する.GetTicker (タッカーのシンボル)

パラメータsymbol要求された {@struct/Ticker Ticker} データに対応する特定の取引ペアとコントラクトコードを指定するために使用されます.このパラメータが送信されない場合は,現在設定されている取引ペアとコントラクトコードの市場データがデフォルトで要求されます. 呼び出すときexchange.GetTicker(symbol)機能exchangeUSDT と BTC と取引される通貨で市場データを要求する必要がある場合,パラメータはsymbolこれは:"BTC_USDT"形式はFMZプラットフォームで定義された取引ペア形式です. 呼び出すときexchange.GetTicker(symbol)機能exchangeBTCのU標準永久契約の市場データを要求する必要がある場合,パラメータsymbolこれは:"BTC_USDT.swap"形式は,トレーディングペアそして契約コードFMZプラットフォームで定義され,文字. で区切られる. 呼び出すときexchange.GetTicker(symbol)機能exchangeBTCのU標準オプション契約の市場データを要求する必要がある場合,パラメータsymbolこれは:"BTC_USDT.BTC-240108-40000-C"(Binance Option BTC-240108-40000-C を例として) 形式は,トレーディングペアFMZプラットフォームで定義され,取引所によって定義された特定のオプション契約コードは,文字.で分離されます.

シンボル 偽り 文字列

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

フューチャー取引対象 (すなわち,exchangeまたはexchanges[0]契約コードを設定するには,exchange.SetContractType()呼び出しが繰り返されない.

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

試しにsymbol特定のシンボル (スポットシンボル) の市場データを要求するパラメータ.

についてTicker返されたデータexchange.GetTicker()バックテストシステムで機能します.HighそしてLow市場から1つ購入し,その時点で1つ販売.Ticker返されたデータexchange.GetTicker()実際の市場での機能.HighそしてLow値がカプセル化された交換によって返されるデータに基づいています.Tickインターフェースで,特定の期間 (通常24時間) の最高値と最低値が表示されます. 支援しない取引所exchange.GetTicker()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetTicker をインストールする フューチャーズ_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}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange

exchange.GetDepth

現時点で設定された取引ペア,契約コード,すなわちオーダーブックデータに対応するスポットまたは契約の {@struct/Depth Depth} 構造を取得します.

についてexchange.GetDepth()データの要求が成功した場合 {@struct/Depth Depth} 構造を返し,データ要求が失敗した場合 null を返します. {@struct/Depth Depth},ゼロ値

交換する.GetDepth ((() 交換.GetDepth (深度) シンボル

パラメータsymbol要求された {@struct/Depth Depth} データに対応する特定の取引ペアとコントラクトコードを指定するために使用されます.このパラメータが送信されない場合,現在設定されている取引ペアとコントラクトコードのオーダーブックデータはデフォルトで要求されます.exchange.GetDepth(symbol)機能exchangeUSDT と BTC と取引通貨で注文簿データを取得するために要求する必要があります.symbolこれは:"BTC_USDT"FMZ プラットフォームで定義された取引ペア形式です.exchange.GetDepth(symbol)機能exchangeBTCのU標準永続契約のオーダーブックデータを要求する必要がある場合,パラメータはsymbolこれは:"BTC_USDT.swap"形式は,トレーディングペアそして契約コードFMZ プラットフォームによって定義され,文字で区切られています.exchange.GetDepth(symbol)機能exchangeBTCのU標準オプション契約のオーダーブックデータを要求する必要がある場合,パラメータsymbolこれは:"BTC_USDT.BTC-240108-40000-C"(Binance Option BTC-240108-40000-C を例として) 形式は,トレーディングペアFMZプラットフォームで定義され,取引所によって定義された特定のオプション契約コードは,文字.で分離されます. シンボル 偽り 文字列

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

テストexchange.GetDepth()機能:

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

設定されたときexchange取引対象は,先物として,symbol特定のシンボル (フューチャーシンボル) のオーダーブックデータを要求するパラメータ.

バックテストシステムでは,各グレードのデータがexchange.GetDepth()機能シミュレーションバックテストシステムでは,バックテストによって返されるデータは,exchange.GetDepth()機能リアル・ティックバックテストは 2階層の深層スナップショットです

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

exchange.GetTrades

{@struct/Trade Trade} の構造配列を取得します. 現時点での設定された取引ペア,契約コード,すなわち市場取引データに対応するスポットまたは契約.

についてexchange.GetTrades()この関数は,データ要求が成功した場合に {@struct/Trade Trade} 構造の配列を返し,データ要求が失敗した場合に null 値を返します. {@struct/Trade Trade}配列,ゼロ値

交換.GetTrades (ゲットトレード) 交換.GetTrades (シンボル)

パラメータsymbol要求された {@struct/Trade Trade} 配列データに対応する特定の取引ペアと契約コードを指定するために使用されます.このパラメータが通過しなければ,現在設定されている取引ペアと契約コードの最新の取引記録データがデフォルトで要求されます.exchange.GetTrades(symbol)機能exchangeUSDT と BTC と取引される通貨で注文簿データを要求する必要がある場合,パラメータsymbolこれは:"BTC_USDT"FMZ プラットフォームで定義された取引ペア形式です.exchange.GetTrades(symbol)機能exchangeBTCのU標準永続契約のオーダーブックデータを要求する必要がある場合,パラメータはsymbolこれは:"BTC_USDT.swap"形式は,トレーディングペアそして契約コードFMZ プラットフォームによって定義され,文字で区切られています.exchange.GetTrades(symbol)機能exchangeBTCのU標準オプション契約のオーダーブックデータを要求する必要がある場合,パラメータsymbolこれは:"BTC_USDT.BTC-240108-40000-C"(Binance Option BTC-240108-40000-C を例として) 形式は,トレーディングペアFMZプラットフォームで定義され,取引所によって定義された特定のオプション契約コードは,文字.で分離されます. シンボル 偽り 文字列

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

試験するexchange.GetTrades()機能:

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

設定されたときexchange取引対象は,先物として,symbol特定のシンボル (フューチャーシンボル) の市場取引記録データを要求するパラメータ.

exchange.GetTrades()現行の取引ペア,市場の取引履歴 (自分のものではなく) を取得する機能. いくつかの取引所はこの機能をサポートせず,返される特定のデータは,取引記録の範囲が取引所に依存し,特定の状況に応じて処理する必要がある程度です. 返されるデータは配列で,各要素が時間順に並べられ,exchange.GetRecords ()この関数は同じ順序のデータを返します つまり,配列の最後の要素は現在の時間に近いデータです についてexchange.GetTrades()この関数で表示される値が,シミュレーションバックテストシステムでバックテストします.exchange.GetTrades()使用するときに機能リアル・ティックバックテストシステムにおけるバックテストは,オーダーフローのスナップショットデータ,つまり {@struct/Trade Trade} 構造配列です. 支援しない取引所exchange.GetTrades()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetTrades は Futures_BitMart / Futures_Bibox について

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

exchange.GetRecords

現在設定されている取引ペア,契約コード,すなわちKラインデータに対応するスポットまたはコントラクトの {@struct/Record Record} 構造配列を取得します.

についてexchange.GetRecords()この関数は,データ要求が成功すると {@struct/Record Record} 構造の配列を返し,データ要求が失敗すると null 値を返します. {@struct/Record Record}配列,ゼロ値

交換.GetRecords (取得記録) 交換.GetRecords (レコードのシンボル) 交換.GetRecords (記号,点) exchange.GetRecords (シンボル,ピリオド,制限) 交換.GetRecords (期間) 交換.GetRecords (期間,制限)

パラメータsymbolこのパラメータが送信されない場合,現在設定されている取引ペアと契約コードのK線データはデフォルトで要求されます.exchange.GetRecords(symbol)機能exchangeUSDT と BTC と取引通貨でデータを取得するために要求する必要がある場合,パラメータsymbolこれは:"BTC_USDT"FMZ プラットフォームで定義された取引ペア形式です.exchange.GetRecords(symbol)機能exchangeBTCのU標準永続契約のオーダーブックデータを要求する必要がある場合,パラメータはsymbolこれは:"BTC_USDT.swap"形式は,トレーディングペアそして契約コードFMZ プラットフォームによって定義され,文字で区切られています.exchange.GetRecords(symbol)機能exchangeBTCのU標準オプション契約のオーダーブックデータを要求する必要がある場合,パラメータsymbolこれは:"BTC_USDT.BTC-240108-40000-C"(Binance Option BTC-240108-40000-C を例として) 形式は,トレーディングペアFMZプラットフォームで定義され,取引所によって定義された特定のオプション契約コードは,文字.で分離されます. シンボル 偽り 文字列 パラメーターperiod要求されたK線データの期間を指定します.例えば: {@var/PERIOD/PERIOD_M1 PERIOD_M1}, {@var/PERIOD/PERIOD_M5 PERIOD_M5}, {@var/PERIOD/PERIOD_M15 PERIOD_M15}など.パラメータの値period定義された標準周期だけでなく,秒で整数値も通過できます.このパラメータが通過しなければ,デフォルトで要求されるK線データの期間は,現在の戦略リアルタイム/バックテスト構成のデフォルトK線周期です. 期間 偽り 番号 パラメーターlimitこのパラメータが送信されない場合,デフォルトの要求長は,交換K線インターフェースの時点で要求される最大数のK線バーである.このパラメータは,交換K線データをクエリするページングを引き起こし,ページングクエリ中に関数呼び出しの時間の消費が増加する可能性があります. 制限 偽り 番号

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

カスタム期間のK線データを取得します

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

出力K線バーデータ:

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

設定されたときexchange取引対象は,先物として,symbol, periodそしてlimit特定の製品 (将来の製品) のK線データを要求するパラメータ

バックテストと実際の取引ページで設定できます. パラメータを指定するとexchange.GetRecords()函数で,そのパラメータ期間に対応するK線データが取得されます.関数を呼び出すときにパラメータが指定されていない場合は,バックテストと実際の市場パラメータに設定されたK線期間に従って対応するK線データが返されます. 返される値は,数列です.Record蓄積されたK線バーの上限は,exchange.SetMaxBarLen()関数設定. 設定されていない場合のデフォルト制限は5000バーです. K線データが K線バー蓄積制限に達すると,K線バーを追加して最古のK線バーを削除することによって更新されます (例えば,キューイン/アウト).TradeK線を生成するために,リアルタイムで エクスチェンジのKラインインターフェースがページングクエリをサポートしている場合,複数のAPIリクエストがexchange.SetMaxBarLen()線長を大きく設定する機能です 必要なのはexchange.GetRecords()- バックテストシステムは,バックテストの時間範囲が開始される前に (デフォルトは5000で,バックテストシステムの設定とデータの量は返された最終数値に影響を与える) 初期Kラインデータとして,一定の数のKラインバーを事前に取得します. - 実際の取引中に得られたKラインバーの数は,取引所のKラインインターフェースから得ることができる最大量のデータに基づいています. についてperiod5 秒間でK線データを取得する要求です.periodパラメータは60で割り切れない (つまり,表示された期間は分で割り切れない). 基礎システムでは,exchange.GetTrades()取引記録データを取得し,必要なK線データを合成します.periodパラメータが60で割り切れる場合,必要なK線データは最低1分間のK線データを用い合成されます (可能な限り,必要なK線データはより長い期間を使って合成されます). バックテストシステムにおけるシミュレーションレベルのバックテストには,基礎K線周期の設定が必要である (バックテストシステムがレベルバックテストをシミュレートするとき,対応するK線データは,セットの基礎K線周期に従ってTickデータを生成するために使用される).戦略で得られたK線データの期間は,基礎K線周期よりも小さくならないことに注意すべきである.シミュレーションレベルのバックテストでは,バックテストシステムの各期間のK線データは,基礎K線期間のK線データから合成される. についてC++この言語は,自分のK線データを構築する必要がある場合,次のコード例を持っています.

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

支援しない取引所exchange.GetRecords()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetRecords を取得する ザイフ / コインチェック / ビットフライヤー フューチャーズ_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}, {@fun/Market/exchange.SetMaxBarLen exchange.SetMaxBarLen}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetDepth exchange.GetDepth exchange

exchange.GetPeriod

FMZ Quant Trading プラットフォームのウェブサイトページで設定されたK-ライン期間を取得して,バックテストとライブ取引で戦略を実行します.exchange.GetRecords()パラメータを通過することなく機能する.

数秒で整数値を表示します 番号

交換.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

K線の最大長さを設定します

交換する.SetMaxBarLen ((n)

パラメータn最大K線長を指定するために使用されます. n 本当 番号

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

についてexchange.SetMaxBarLen()機能は暗号通貨戦略の実行時間には2つの側面に影響を与える:

  • 最初の呼び出しで得られるK線バー (Bars) の数に影響を与える.
  • K線バー (バー) の最大数に影響を与える.

{@fun/Market/exchange.GetRecords exchange.GetRecords} 取引先を チェックする

exchange.GetRawJSON

元のコンテンツを最後に戻すrest現在の交換オブジェクトの要求 ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).

回答データrest要求する 文字列

交換する.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);
}

についてexchange.GetRawJSON()この機能は,実際の取引にのみサポートされています.C++ language.

{@var/EXCHANGE exchange} 交換する

exchange.GetRate

交換対象の為替レートを取得します.

交換対象の為替レートの現在の値. 番号

エクスチェンジ.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());
}

もしexchange.SetRate()換算率を設定するために呼び出されていなかった場合,exchange.GetRate()この関数は,現在表示されている通貨 (quoteCurrency) に関するデータが変換されていないことを表示します. 通貨レートの値が,exchange.SetRate()例えばexchange.SetRate(7)価格情報,例えば,オート,深さ,および注文価格exchange交換対象は,設定された為替レートに掛けることで変換されます.7- わかった もしexchange呼び出し後,名義通貨としてUSDと交換に対応します.exchange.SetRate(7)リアルマーケットのすべての価格は,CNYに近い価格に変換されます.7この時点で,交換レートの値は,exchange.GetRate()7.

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

exchange.SetData

についてexchange.SetData()戦略が実行されているときに読み込まれるデータを設定するために使用されます.

パラメータの後の文字列の長さvalueJSONコード化 番号

exchange.SetData ((キー,値) を表示する

データ収集の名前 キー 本当 文字列 読み込むデータexchange.SetData()配列のデータ構造があります. データ構造は,配列が要求するデータ形式と同じです.exchange.GetData()外部データ要求時の機能,すなわち:"schema": ["time", "data"]- わかった 価値 本当 配列

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

パラメータのデータがvalue形式は,dataタイムスタンプが表示されているように,1579622400000時間に対応します2020-01-22 00:00:00この時間後に実行すると,呼び出すexchange.GetData()次のデータタイムスタンプの前にデータを取得する関数1579708800000時間2020-01-23 00:00:00受け取るものは[1579622400000, 123]プログラムが実行され続けるにつれて,そのデータの内容,時間の変化,など,データ項目を項目ごとに取得します.次の例では,実行時に (バックテストまたはライブ取引),現在の瞬間はタイムスタンプに達または超過します.1579795200000についてexchange.GetData()函数が呼び出し,返した値は:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}. "Time":1579795200000対応する1579795200000データで[1579795200000, ["abc", 123, {"price": 123}]]. "Data":["abc", 123, {"price": 123}]データに対応する["abc", 123, {"price": 123}]][1579795200000, ["abc", 123, {"price": 123}]].

読み込まれるデータは,あらゆる計測可能な情報の戦略的定量評価に使用される経済指標,業界データ,関連指標などである.

{@fun/Market/exchange.GetData exchange.GetData} 情報を交換する

exchange.GetData

についてexchange.GetData()この関数は,データ読み込みをexchange.SetData()外部リンクによって提供されます.

データ収集の記録 オブジェクト

交換する.GetData (キー) 交換.GetData (キー,タイムアウト)

データ収集の名前 キー 本当 文字列 ミリ秒でキャッシュタイムアウトを設定します. リアルトレードでは1分キャッシュタイムアウトをデフォルトで設定します. タイムアウト 偽り 番号

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

データを直接書き込むための電話です

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

外部リンクを通じてデータを要求するサポート,要求されたデータのフォーマット:

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

どこにschemaロードされたデータ本体の各レコードのデータ形式で,["time", "data"]入力データ形式に対応するdata属性 保存されているものdataアトリビュートとは,データの本体であり,各エントリにはミリ秒レベルのタイムスタンプとデータ内容 (JSONでコードできる任意のデータ) が含まれます. 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)
}

要求を受信した際にプログラムによる応答データ:

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

試験戦略コード:

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

外部リンクのデータを取得するための呼び出し方法.

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

プラットフォームで作成されたクエリのデータ要求データデータ回答のデータ形式を要求する (時間,スキーマで記述されたデータフィールドを含む必要があります):

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

dataフィールドは,必要なデータ内容であり,dataフィールドのデータは, schemaで合意されたものと一致する必要があります.exchange.GetData()JSON オブジェクトが返されます.例えば:{"Time":1579795200000, "Data":"..."}.

バックテストシステムでは,アクセスインターフェースを使用してデータを要求するときに,バックテストシステムは自動的に追加します.from(秒で表示)to(秒で表示される) 要求,パラメータなどperiod(基となるK線期間,時間スタンプはミリ秒で) は,データを取得する時間枠を決定するために使用されます.

{@fun/Market/exchange.SetData exchange.SetData} データを交換する

exchange.GetMarkets

についてexchange.GetMarkets()交換市場情報を入手するために使用されます.

{@struct/Market Market} 構造を含む辞書 オブジェクト

交換.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]);
}

フューチャー取引対象へのコール例:

/*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() + "`");
}

フューチャー交換オブジェクトを呼び出すexchange.GetMarkets()バックテストシステム内の関数.任意の市場関数を呼び出す前に,GetMarketsは現在のデフォルト取引ペアの市場データを返します.市場関数を呼び出す後,すべての要求された多様性の市場データを返します.以下のテスト例を参照してください:

についてexchange.GetMarkets()この関数は,取引品種の名前というキーで辞書を返します.例えば,取引ペアとしてフォーマットされたスポット修正の場合:

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

フューチャー契約の取引では,単一の種類のための複数の契約がある可能性があるため,例えばBTC_USDT永続契約や四半期契約などがあります.exchange.GetMarkets()function は,契約コードと組み合わせたペアのキー名を含む辞書を返します.例えば:

{
    "BTC_USDT.swap" : {...},     // The key value is the Market structure
    "BTC_USDT.quarter" : {...}, 
    "LTC_USDT.swap" : {...},
    ...
}
  • についてexchange.GetMarkets()機能はライブ取引,バックテストシステムをサポートします.
  • についてexchange.GetMarkets()この関数は,取引所でオンライン取引されている品種のみの市場情報を返します.
  • についてexchange.GetMarkets()この機能はオプション契約をサポートしません.

支援しない取引所exchange.GetMarkets()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetMarkets を取得する Coincheck / Bithumb / ビットフライヤー

{@struct/市場市場}

exchange.GetTickers

についてexchange.GetTickers()この関数は,交換されたティッカーデータ ({@struct/Ticker Ticker} 構造の配列) を取得するために使用されます.exchangeスポット取引対象である場合,すべての取引対の ticker データを返します.exchangeフューチャー取引対象の場合,すべての契約のティッカーデータを返します.

についてexchange.GetTickers()この関数は {@struct/Ticker Ticker} 構造の配列をデータ要求に成功すると返し,失敗すると null を返します. {@struct/Ticker Ticker}配列,ゼロ値

交換する.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());
    }
}

呼んでexchange.GetTickers()市場データを集計する機能です

/*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() + "`");
}

スポット交換オブジェクトを使用し,exchange.GetTickers()バックテストシステムにおける関数.任意の市場関数を呼び出す前に,GetTickersは現在のデフォルト取引ペアのティッカーデータを返します.市場関数を呼び出す後,すべての要求された多様性のティッカーデータを返します.以下のテスト例を参照してください:

  • この機能は,取引先から集計ティッカーのインターフェースを要求し,取引ペア,契約コードを呼び出す前に設定する必要はありません. 交換所のオンライン取引品種のティッカーを返します.
  • バックテストシステムはこの機能をサポートします
  • 集計されたティッカーインターフェースを提供していない Exchange オブジェクトは,この機能をサポートしません.
  • この機能はオプション契約をサポートしません.

支援しない取引所exchange.GetTickers()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetTickers は Zaif / WOO / Gemini / Coincheck / BitFlyer / ビボックス フューチャーズ_WOO / フューチャーズ_dYdX / フューチャーズ_Deribit / フューチャーズ_Bibox / フューチャーズ_Aevo

{@struct/TickerTicker}, {@fun/Market/exchange.GetTicker交換.GetTicker} 取引先を表示する

貿易

exchange.Buy

についてexchange.Buy()購入オーダーを出すために使用されます.Buy()交換オブジェクト {@var/EXCHANGE exchange} のメンバー関数である.Buy()交換対象に結合した交換口座で動作します.exchangeメンバーの機能 (方法) の目的exchange対象は,単に関連しているexchange文書化後には 繰り返されないでしょう

成功したオーダーはオーダー Id を返します.失敗したオーダーは null 値を返します. 属性IdFMZプラットフォームのオーダー {@struct/Order Order} 構造は,英語の逗子で分離された交換製品コードと交換元の注文IDで構成されています.Idスポット取引対の形式ETH_USDTOKX取引所の順序は次のとおりです.ETH-USDT,1547130415509278720- わかった 呼び出すときexchange.Buy()注文を出す機能,返品値の注文Id基準に合致していますIdオーダー {@struct/Order Order} 構造の属性

文字列,ゼロ値

交換.購入 (価格,金額) 交換する.購入する (価格,金額,... args)

についてpriceパラメータは注文価格を設定するために使用されます. 価格 本当 番号 についてamountパラメータは注文金額を設定するために使用されます. 額 本当 番号 この注文日記に付随情報を出力できる拡張パラメータargパラメータは"つ以上渡すことができます アルグ 偽り 文字列,数,ボール,オブジェクト,配列,null,およびシステムでサポートされる他の種類

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

返した順序番号exchange.Buy()注文情報への問い合わせや注文のキャンセルに使用できます

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

暗号通貨の先物契約のオーダーを出すとき,取引方向が正しく設定されていることを注意する必要があります.取引方向と取引機能の不一致はエラーを引き起こすため:

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

スポットマーケットオーダー

フューチャー契約の注文をすると,取引方向と取引機能が一致しない場合はエラーが報告されるため,取引方向が正しく設定されているかどうか注意する必要があります.仮想通貨フューチャー契約の注文サイズは,指定されていない場合の契約数です. パラメーターprice設定されています.-1取引所のオーダー配置インターフェースが市場オーダーをサポートすることを要求する.仮想通貨のスポット契約の市場オーダーを配置する際に,パラメータは,amount取引先は,取引先の取引先の取引先の取引先の取引先の取引先です.amount取引数です. ライブ取引中にマーケットオーダーインターフェースをサポートしない数少ない仮想通貨取引所があります. いくつかのスポット取引所で市場購入注文の注文量は取引コインの数です.交換に関する特別指示詳細については ユーザーガイド を参照してください. 命令の返却値が,この命令の返却値が,Idについてexchange.Buy()命令の返却値とは異なる可能性があります.Idこのドキュメントで説明されています

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

exchange.Sell

についてexchange.Sell()販売注文を出すために使われます.

順序 Id を返します.失敗した順序は null 値を返します.IdFMZプラットフォームのオーダー {@struct/Order Order} 構造は,英語の逗子で分離された交換製品コードと交換元の注文IDで構成されています.Idスポット取引対の形式ETH_USDTOKX取引所の順序は次のとおりです.ETH-USDT,1547130415509278720. 呼び出すときexchange.Sell()注文を出す機能,返品値の注文Id基準に合致していますIdオーダー {@struct/Order Order} 構造の属性 文字列,ゼロ値

交換.販売 (価格,金額) 交換.販売 (価格,金額,... args)

についてpriceパラメータは注文価格を設定するために使用されます. 価格 本当 番号 についてamountパラメータは注文金額を設定するために使用されます. 額 本当 番号 この注文日記に付随情報を出力できる拡張パラメータargパラメータは"つ以上渡すことができます アルグ 偽り 文字列,数,ボール,オブジェクト,配列,null,およびシステムでサポートされる他の種類

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

返した順序番号exchange.Sell()注文情報をクエリしたり 注文をキャンセルしたりできます

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

暗号通貨の先物契約のオーダーを出すとき,取引方向が正しく設定されていることを注意する必要があります.取引方向と取引機能の不一致はエラーを引き起こすため:

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

スポットマーケットオーダー

フューチャー契約の注文をすると,取引方向と取引機能が一致しない場合はエラーが報告されるため,取引方向が正しく設定されているか注意する必要があります.仮想通貨フューチャー契約の注文金額は,指定されていない場合の契約数です. パラメーターprice設定されています.-1取引所のオーダー配置インターフェイスが市場オーダーをサポートすることを要求する.仮想通貨のスポット契約の市場オーダーを配置する際に,金額パラメータは,amount取引通貨の金額です. 仮想通貨先物契約の市場オーダーを出すとき,金額パラメータamount契約数です. ライブ取引中にマーケットオーダーインターフェースをサポートしない数少ない仮想通貨取引所があります. 命令の返却値が,この命令の返却値が,Idについてexchange.Sell()命令の返却値とは異なる可能性があります.Idこのドキュメントで説明されています

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

exchange.CreateOrder

についてexchange.CreateOrder()この関数は,注文をするのに使用されます.

順序が成功した場合,順序 ID が返されます.順序が失敗した場合, null 値が返されます.IdFMZプラットフォームのオーダー {@struct/Order Order} 構造は,英語の逗子で分離された交換製品コードと交換元の注文IDで構成されています.Idスポット取引対のオーダーの形式ETH_USDTOKXの取引所は:ETH-USDT,1547130415509278720. 呼び出すときexchange.CreateOrder(symbol, side, price, amount)オーダーを表示する機能,オーダーの返却値Id基準に合致していますIdオーダー {@struct/Order Order} 構造の属性 文字列,ゼロ値

exchange.CreateOrder ((シンボル,サイド,価格,金額) exchange.CreateOrder ((シンボル,サイド,価格,金額,... args)

パラメータsymbol注文の特定の取引ペアと契約コードを指定するために使用されます.exchange.CreateOrder(symbol, side, price, amount)オーダーを出す機能exchange注文の通貨がUSDTで取引通貨がBTCである場合,パラメータはsymbolこれは:"BTC_USDT"FMZ プラットフォームで定義された取引対の形式でexchange.CreateOrder(symbol, side, price, amount)オーダーを出す機能exchange取引対象である.もし注文が BTCのU標準の永続契約注文である場合,パラメータはsymbolこれは:"BTC_USDT.swap"形式は,トレーディングペアそして契約コードFMZ プラットフォームによって定義され,文字で区切られています.exchange.CreateOrder(symbol, side, price, amount)オーダーを出す機能exchange取引対象である.もしその注文が BTCのU標準オプション契約の注文である場合,パラメータはsymbolこれは:"BTC_USDT.BTC-240108-40000-C"(Binance Option BTC-240108-40000-C を例として) 形式はトレーディングペアFMZプラットフォームで定義され,取引所によって定義された特定のオプション契約コードは,文字.で分離されます. シンボル 本当 文字列 についてsideこのパラメータは,注文の取引方向を指定するために使用されます. スポット交換対象の場合,オプション値はsideパラメータは:buy, sell. buy購入を意味しますsell売るという意味です フューチャー取引対象については,sideパラメータは:buy, closebuy, sell, closesell. buy長いポジションを開くことを意味します.closebuy長いポジションを閉じるという意味ですsellショートポジションを開くことを意味します.closesellショートポジションを閉じる

側 本当 文字列 パラメーターpriceオーダーの価格を設定するために使用されます. -1 の価格は,オーダーが市場オーダーであることを示します. 価格 本当 番号 パラメーターamount注文量設定に使用されます. 注文が市場購入オーダーである場合,注文量は購入金額であり,一部のスポット取引所の市場購入オーダーの注文量は取引コインの数であることに注意してください.詳細については,交換に関する特別指示ユーザーガイド 額 本当 番号 拡張パラメータは,この注文ログに追加の情報を出力することができます.argパラメーターは渡すことができます アルグ 偽り 文字列,数,ボール,オブジェクト,配列,ゼロ値など,システムでサポートされる任意のタイプ

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

スポット取引物と先物取引物とはexchange.CreateOrder()注文する機能です

{@fun/Trade/exchange.buy exchange.buy} {@fun/Trade/exchange.sell exchange.sell} {@fun/Trade/exchange.exchange.buy} {@fun/Trade/exchange.sell exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.exchange.buy} {@fun/Trade/exchange.exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.exchange.sell} {@fun/Trade/exchange.sell.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.sell.sell}

exchange.CancelOrder

についてexchange.CancelOrder()命令をキャンセルするために使用されます. 属性IdFMZプラットフォームのオーダー {@struct/Order Order} 構造は,英語の逗子で分離された交換製品コードと交換元の注文IDで構成されています.Idスポット取引対のオーダーの形式ETH_USDTOKXの取引所は:ETH-USDT,1547130415509278720- わかった パラメーターorderId呼び出すときに通過したexchange.CancelOrder()命令をキャンセルする機能は,Idオーダー {@struct/Order Order} 構造の属性

についてexchange.CancelOrder()例えば,この関数は,真値を返します.trueキャンセル注文要求が成功して送信されたことを意味します.false, はキャンセルオーダー要求が送信されなかったことを意味します.返した値は,交換が注文をキャンセルするかどうかを決定するために送信された要求の成功または失敗を表します.exchange.GetOrders()命令がキャンセルされたかどうかを判断するために ボール

交換.注文をキャンセル (注文Id) 交換.注文をキャンセル (注文Id,... args)

についてorderIdこのパラメータは,キャンセルされるオーダーを指定するために使用されます. 命令された 本当 番号,文字列 この退会日記に添付された情報を出力できますargパラメータは"つ以上渡すことができます アルグ 偽り 文字列,数,ボール,オブジェクト,配列,null,およびシステムでサポートされる他の種類

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

注文をキャンセル

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

FMZ API 機能は,次のようなログ出力機能を生成することができる.Log(), exchange.Buy(), exchange.CancelOrder()必要なパラメータの後にいくつかの付随の出力パラメータが続きます.例えば:exchange.CancelOrder(orders[i].Id, orders[i])注文をキャンセルするときにIDがorders[i].Id命令の情報が出力されます.つまり, {@struct/Order Order} の構造orders[i].

古いバージョンのドッカーを使用している場合は,Exchange.CancelOrder (※) 関数の orderId パラメータは,現在のドキュメントで説明されているorderId と異なる可能性があります.

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

exchange.GetOrder

についてexchange.GetOrder()オーダー情報を取得するために使用されます.

順序番号に従って順序の詳細をクエリし,クエリが成功した場合 {@struct/Order Order} 構造を返します. {@struct/Order Order},ゼロ値

交換.GetOrder (注文番号)

についてorderIdパラメータは,クエリする順序を指定するために使用されます. 属性IdFMZプラットフォームのオーダー {@struct/Order Order} 構造は,英語の逗子で分離された交換製品コードと交換元の注文IDで構成されています.Idスポット取引対のオーダーの形式ETH_USDTOKXの取引所は:ETH-USDT,1547130415509278720- わかった パラメーターorderId呼び出すときに通過したexchange.GetOrder()順序をクエリする機能は,Idオーダー {@struct/Order Order} 構造の属性

命令された 本当 文字列

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

についてexchange.GetOrder()機能は,いくつかの交換によってサポートされていません.AvgPrice{@struct/Order Order} 構造の帰還値の属性は,取引の平均価格である.一部の取引所はこのフィールドをサポートしていないが,そうでない場合は0に設定されている. 古いバージョンを使用している場合は,orderIdパラメータexchange.GetOrder()機能はorderId現在のドキュメントに記載されています. 支援しない取引所exchange.GetOrder()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetOrder を取得する ザイフ / コインチェック / ビットスタンプ

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

exchange.GetOrders

についてexchange.GetOrders()欠点オーダーを得るのに使われます

についてexchange.GetOrders()この関数は,データ要求が成功した場合に {@struct/Order Order} 構造の配列を返し,データ要求が失敗した場合に null 値を返します. {@struct/Order Order}配列,ゼロ値

交換する.GetOrders (GetOrders) 交換.GetOrders (GetOrders) を表示する

パラメータsymbol設定するために使用されます.トランザクションシンボルまたはトランザクションシンボルの範囲尋問される スポット交換対象の場合,symbolパラメータが渡されない場合,すべてのスポット製品の未完了注文データは要求されます. フューチャー取引対象の場合,symbolパラメータが渡されない場合,デフォルトでは,現在の取引ペアと契約コードの次元範囲内のすべての種類の未完了オーダーデータを要求します.

シンボル 偽り 文字列

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

スポット交換オブジェクトを使用して,現在の価格の半分で複数の異なる取引ペアの購入オーダーを置き,その後に未払いオーダー情報をクエリします.

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

フューチャー交換オブジェクトを使用して,複数の異なる取引ペアと契約コードの注文をします. 対価価格から遠く離れた価格で注文を入れ,未履行状態で注文を保持し,複数の方法で注文をクエリします.

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

呼び出すときexchange.GetOrders()機能,パスSymbol特定の取引ペアと契約コードのオーダーデータを要求するパラメータ

についてGetOrdersfunction,シンボルのパラメータの使用シナリオは,以下のように要約されます.

エクスチェンジオブジェクト分類 パラメータ クエリの範囲 コメント
スポット シンボルのパラメータを通さない すべてのスポット取引ペアをクエリ すべての呼び出しシナリオでは,交換インターフェイスがサポートしていない場合は,エラーが報告され,ゼロ値が返されます.さらなる説明はされません.
スポット 取引の種類を指定します. シンボルのパラメータは: BTC_USDT 指定された BTC_USDT 取引ペアをクエリする スポット取引対象のシンボルのパラメータ形式は: BTC_USDT
フューチャー シンボルのパラメータを通さない 現在の取引ペアと契約コードの次元範囲内のすべての取引製品を検索する. 現在の取引ペアが BTC_USDT で,契約コードがスワップである場合,USDTのマージング付き永続契約はすべてクエリされます.これは,呼び出しに相当しますGetOrders("USDT.swap")
フューチャー 取引の種類を指定し,シンボルのパラメータは: BTC_USDT.swap 指定されたBTCのUSDTベースの永続契約をクエリする フューチャー取引対象のパラメータシンボルの形式は:トレーディングペアそして契約コードFMZプラットフォームで定義され,文字で区切られています."..
フューチャー 取引商品の範囲を指定します. シンボルのパラメータは: USDT.swap すべてのUSDTベースの永続契約をクエリ -
オプションをサポートする先物取引 シンボルのパラメータを通さない 現在の取引ペアサイズ範囲内のすべてのオプション契約をクエリする 現在の取引ペアが BTC_USDTである場合,契約はオプション契約に設定されます.例えば,Binanceオプション契約: BTC-240108-40000-C
オプションをサポートする先物取引 特定の取引製品を指定する 指定されたオプション契約をクエリ たとえば,Binance 期貨取引所では,シンボルのパラメータは: BTC_USDT.BTC-240108-40000-C
オプションをサポートする先物取引 取引商品の範囲を指定します,シンボルのパラメータは: USDT.option すべてのUSDTベースのオプション契約をクエリ -

についてGetOrdersフューチャー交換オブジェクトのクエリ サイズ範囲は以下のように要約される:

パラメータ 要求範囲の定義 コメント
USDT.swap USDTベースの永続契約範囲 について

交換 API インターフェースでサポートされていない次元 エラーが報告され, null 値が返されます. 呼び出しています 送料契約の範囲です 送料契約の範囲です USD.swap. 通貨ベースの永続的な 契約です USD.futures. 貨幣による配送の範囲 契約です USDTのオプションです USDTベースのオプション契約の範囲です 通貨ベースのオプション契約の範囲です USDT.futures_combo CFDの組み合わせの範囲 FUTURES_DERIBIT 取引所 USD.futures_ff ミックスド・マーージン・デリバリー・コントラクト フューチャーズ_クラッケン取引所 USD.swap_pf 混合型永続契約の範囲です 未来_クラケン取引所

取引対象となる口座がexchange待機中の注文はありません問い合わせ範囲または特定取引手段この関数を呼び出すと空の配列が返されます.[]- わかった 以下の交換では,当面未完了の注文をクエリする際に,インストラムがインストゥルメントパラメータに送信することを要求する.これらの交換でGetOrders関数を呼び出すとき,インストゥルメントパラメータが送信されない場合は,すべてのインストゥルメントの未完了の注文ではなく,当面のインストゥルメントの未完了の注文のみが要求される (交換インターフェイスがこれをサポートしていないため). Zaif,MEXC,LBank,Korbit,Coinw,BitMart,Bithumb,BitFlyer,ビッグONE について

支援しない取引所exchange.GetOrders()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetOrders を取得する フューチャーズ_ビボックス

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

exchange.GetHistoryOrders

についてexchange.GetHistoryOrders()この関数は,現在の取引ペア,契約の過去のオーダーを取得するために使用されます.

についてexchange.GetHistoryOrders()この関数は,データ要求が成功した場合に {@struct/Order Order} 構造の配列を返し,要求が失敗した場合に null を返します. {@struct/Order Order}配列,ゼロ値

交換.GetHistoryOrders (取得履歴) exchange.GetHistoryOrders (シンボル) をクリックする exchange.GetHistoryOrders ((シンボル,から) exchange.GetHistoryOrders (シンボル,から,制限) 交換.GetHistoryOrders (過去からの) exchange.GetHistoryOrders (ここから制限)

についてsymbol取引の記号を指定するために使用されます.BTC_USDT取引相手は,例えば,exchangeスポット交換オブジェクトで,パラメータ形式はsymbolBTC_USDT■ 期貨取引対象である場合,永久契約を例として,パラメータ形式symbolこれは:BTC_USDT.swap- わかった オプション契約の注文データをクエリする場合は,パラメータを設定しますsymbol"BTC_USDT.BTC-240108-40000-C"(Binance Option BTC-240108-40000-C を例として)トレーディングペアFMZプラットフォームで定義され,取引所によって定義された特定のオプション契約コードは,文字.で分離されます. このパラメータが送信されない場合,現在設定されている取引ペアのオーダーデータと契約コードがデフォルトで要求されます.

シンボル 偽り 文字列 についてsinceこのパラメータは,クエリの開始タイムスタンプをミリ秒で指定するために使用されます. それ以来 偽り 番号 についてlimitこのパラメータは,クエリする注文の数を指定するために使用されます. 制限 偽り 番号

function main() {
    var historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
}
def main():
    historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
void main() {
    auto historyOrders = exchange.GetHistoryOrders();
    Log(historyOrders);
}
  • いつsymbol, since, limitパラメータが指定されていない場合,デフォルトクエリは現在の取引ペア,契約の歴史的な注文です.現在の時間に近い特定の範囲内の歴史的な注文をクエリします.クエリ範囲は,交換インターフェイスの単一のクエリ範囲に依存します.
  • その時にsymbol設定された取引タイプの注文履歴をクエリします.
  • その時にsince設定されている場合,現在の時間方向で問い合わせsince開始時間としてタイムスタンプを
  • もしlimitパラメータが指定された場合,十分な数の入力後にクエリが返されます.
  • この機能は,履歴の注文クエリインターフェースを提供する取引所のみにサポートされています.

支援しない取引所exchange.GetHistoryOrders()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetHistoryOrders を取得する Zaif / Upbit / Coincheck / Bitstamp / Bithumb / BitFlyer / ビッグONE Futures_dYdX / Futures_Bibox / Futures_ApolloX について

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

exchange.SetPrecision

exchange.SetPrecision()精度を設定するために使用されます.exchange交換対象価格そして注文金額設定後,システムは過剰なデータを自動的に無視します.

交換.セット 精度 ((価格 精度,金額 精度)

についてpricePrecisionこのパラメータは,価格データの精度を制御するために使用されます. 価格 精度 本当 番号 についてamountPrecisionパラメータは,注文されるデータの量の精度を制御するために使用されます. 額 精度 本当 番号

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

バックテストシステムはこの機能をサポートせず,バックテストシステムの数値精度は自動的に処理されます.

{@fun/Trade/exchange.buy exchange.buy} {@fun/Trade/exchange.sell exchange.sell} {@fun/Trade/exchange.exchange.buy} {@fun/Trade/exchange.sell exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.exchange.buy} {@fun/Trade/exchange.exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.exchange.sell} {@fun/Trade/exchange.sell.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.sell.sell}

exchange.SetRate

交換対象の現在の為替レートを設定する.

交換.セットレート (レート)

についてrateこのパラメータは,変換為替レートを指定するために使用されます. 税率 本当 番号

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

通貨レートの値がexchange.SetRate()価格の情報,例えばティッカー,深さ,注文価格,など,現在の取引所によって代表される.exchange交換対象は,設定された為替レート7に掛けることで変換されます.例えば,exchange通貨として,アメリカドルと交換です.exchange.SetRate(7)市場でのすべての価格は,CNY7で掛けると

{@fun/Market/exchange.GetRate exchange.GetRate} 取引先は 取引先の 取引先の 取引先の

exchange.IO

についてexchange.IO()交換オブジェクトに関連する他のインターフェース呼び出しに使用されます.

についてexchange.IO()機能は交換オブジェクトに関連する他のインターフェースに呼び出し,成功した呼び出しで要求された応答データを返します.失敗した呼び出しでは null を返します. 文字列,数, bool,オブジェクト,配列,null,およびシステムによってサポートされる他の種類

exchange.IO(k,... args)

についてkパラメータは,オプション値でコールタイプを設定するために使用されます."api", "currency", "base", "trade_margin", "trade_normal", "public_base", "mbase", selfTradePreventionMode, simulate, cross, dual, unifiedそしてこれからも k 本当 文字列 拡張されたパラメータ,特定のコールシナリオに従って通過,arg複数のパラメータが通過できます.exchange.IO()パラメータの数と種類は,異なる機能に対応します. パラメータの数と種類は,exchange.IO()機能は不確定です アルグ 本当 文字列,数, bool,オブジェクト,配列,null,その他のシステムでサポートされるタイプ

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

システムを使用exchange.IO("api", httpMethod, resource, params, raw)呼び出しのフォームexchange.IO()FMZプラットフォームに追加されていない機能を拡張することができます. 交換のAPIインターフェースを理解し,関連するドキュメントを最初に確認する必要があります.POST対応するパラメータを記入する限り,FMZが既に下に処理しているパラメータを暗号化,署名,検証する心配する必要はありません.OKX 交換所パラメーターを使用します.raw順序パラメータを表示するには:

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

キー値がparamsパラメータ (つまり,Http リクエスト パラメータ) は文字列で,パラメータ値を包むためにパラメータ値の周りに単一の引数で (つまり,符号 ') 書き込む必要があります.

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

ベースアドレスを切り替える操作を省略できる.exchange.SetBase()機能)

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

パラメータなしの呼び出しの例raw:

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

コードで設定された取引ペアを切り替えるように,現在の交換の取引ペアを切り替える直接取引の作成時にまたはバックテストで.

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

取引先のインターフェースと取引インターフェースの異なるベースアドレスを持つ取引所では,例えば,Bitfinex Futuresには2つのアドレスがあり,一つは ticker インターフェース,もう一つは取引インターフェースです.Bitfinex futuurs はプライベート インターフェースのベースアドレスを使用して切り替えます.exchange.SetBase("xxx")Bitfinexの先物取引は,公開インターフェースのベースアドレスをexchange.IO("mbase", "xxx").

I. 暗号通貨中心の取引所では,パラメータが均一にカプセル化されていない他のAPIインターフェース呼び出しkに設定"api":

exchange.IO("api", httpMethod, resource, params, raw)
  • httpメソッド: パラメータは文字列タイプで,リクエストタイプを入力しますPOST, GETなど
  • resource: このパラメータは文字列タイプで,要求経路を埋めます.完全な要求経路の使用をサポートします.詳細については参照例を参照してください.
  • params: パラメータは,要求パラメータで満たされた文字列タイプで,URL.
  • raw: このパラメータは raw の文字列パラメータであり,省略することもできます.

についてexchange.IO("api", httpMethod, resource, params, raw)呼び出しが失敗してエラーが発生した場合,関数呼び出しは交換インターフェースにアクセスし null を返します. 真の取引のみをサポートしますexchange.IO("api", httpMethod, resource, params, raw) function.

II. 取引対を切り替える場合,パラメータはk設定されています."currency":

exchange.IO("currency", currency)
  • 通貨: パラメータは,単一の上文字形式の文字列タイプで,下文字で区切ります.baseCurrencyからquoteCurrency例えばBTC_USDT.

    1. バックテストでは,同じ通貨の取引ペアに切り替えるのみに注意を払う必要があります. 例えば,現在の取引ペアは,ETH_BTC切り替えるだけですLTC_BTCしないLTC_USDT.
    2. 仮想通貨先物契約の場合,取引対象は取引ペアを切り替えており,どの契約が取引されるかを決定するために,契約コードを再設定する必要があります.
    3. {@fun/Account/exchange.SetCurrency exchange.SetCurrency}関数を使って取引ペアを切り替えるのは,exchange.IO("currency", currency)取引相手を切り替える

(III) 仮想通貨スポット取引所オブジェクトのレバレッジアカウントモードを切り替えるために使用する:

  • パラメータk設定されています."trade_margin"スポットレバレッジアカウントモードに切り替える.オーダーと口座資産の取得は,取引所のスポットレバレッジインターフェイスにアクセスします. 取引所が,即日レバレッジにおいて,完全なリマージと孤立したリマージを区別する場合,以下を用います.exchange.IO("trade_super_margin")利回り口座の全保安金に切り替える,およびexchange.IO("trade_margin")利回り口座の利回り分担に切り替える
  • パラメーターk設定されています."trade_normal"通常のスポット口座モードに戻る.

ローバー付き口座モデル間の切り替えをサポートするスポット取引所:

交換 特別注意事項
OKX レバレッジアカウントモードの取引ペアは通常のものとは異なります.一部の取引ペアはそれらを持たない可能性があります.exchange.IO("trade_super_margin")レバレッジ付き口座の全ポジションに切り替えて使用するexchange.IO("trade_margin")位置から位置に切り替える.trade_normal通常のスポットモードに切り替える.exchange.IO("tdMode", "cross")直接レバレッジモードを指定する.
ハウビー ハーバードアカウントモードの取引ペアは通常のペアとは異なります.一部の取引ペアはそうでない場合があります. Huobi ハーバードアカウントにはフルポジションとポジションごとに位置があります.trade_marginレバレッジ口座のポジションごとに切り替えるtrade_super_marginレバレッジアカウントの完全なポジションに切り替える.trade_normal通常の通貨対通貨モードに切り替える
バイナンス レバレッジされた口座モードは,ポジションごとにポジションとフルポジションに分けられる.trade_margin位置から位置に切り替え,使用trade_super_marginフルポジションに切り替えるには,trade_normal通常の通貨対通貨モードに切り替える
ゲート レバレッジされた口座モードは,ポジションごとにポジションとフルポジションに分けられる.trade_margin位置から位置に切り替え,使用trade_super_marginフルポジションに切り替えるには,trade_normal通常の通貨対通貨モードに切り替える
アセンデックス 使用exchange.IO("trade_margin")レバレッジアカウントモードに切り替えるexchange.IO("trade_normal")普通のアカウントモードに戻る
ワオ 使用exchange.IO("trade_margin")レバレッジアカウントモードに切り替えるexchange.IO("trade_normal")普通のアカウントモードに戻る
コインエックス 使用exchange.IO("trade_margin")レバレッジ付き口座モードに切り替えるexchange.IO("trade_normal")普通のアカウントモードに戻る

他のスイッチ機能:チェックしてくださいexchange.IO()の関数他のスイッチ機能ユーザーガイドで

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

exchange.Log

についてexchange.Log()この関数は,ログ列領域のオーダープレスメントと撤収のログを出力するために使用されます.呼び出されると,注文は行われず,トランザクションログだけが出力され記録されます.

取引日記 (注文の種類,価格,金額) 取引日記 (注文の種類,価格,金額,... args)

についてorderTypeパラメータは出力ログのタイプを設定するために使用され,オプション値は {@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}. 命令型 本当 番号 についてpriceパラメータは出力ログに表示される価格を設定するために使用されます. 価格 本当 番号 についてamountパラメータは,出力日記に表示される注文の量を設定するために使用されます. 額 本当 番号 このログに付随情報を出力できる拡張パラメータargパラメータは"つ以上渡すことができます アルグ 偽り 文字列,数,ボール,オブジェクト,配列,null,およびシステムでサポートされる他の種類

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

使用するexchange.Log(orderType, price, amount)テスト,シミュレーションされた注文の配達,および注文の配達をログインするのに役立ちます.最も一般的なシナリオの1つは, {@fun/Trade/exchange.IOを使用することです.exchange.IO条件付きの注文を作成するための交換のインターフェースにアクセスする機能,しかし,exchange.IO()取引日誌の記録にトランザクションログ情報を出力しません.exchange.Log()オーダー発注の情報を記録するために出力日記を補完するために使用できますし,オーダー撤回も同様です

その時にorderTypeパラメータはLOG_TYPE_CANCELについてpriceパラメータは,引き出されたオーダーの順序 Id で,直接注文を引き出すときに引き出すログを印刷するために使用されます.exchange.IO()機能exchange.Log()function は,グローバル関数 {@fun/Log Log} と区別される {@var/EXCHANGE exchange} 交換オブジェクトのメンバー関数です.

{@fun/Log Log}, {@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}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}, ローグ・タイプは, ローグ・タイプは, ローグ・タイプが, ログ・タイプが, ログ・タイプが, ログ・タイプが, ログ・タイプが

exchange.Encode

についてexchange.Encode()この関数は署名暗号化計算に使用されます.

についてexchange.Encode()計算したハッシュ値のエンコーディングを返します. 文字列

exchange.Encode ((algo, input 形式, output 形式,データ) exchange.Encode ((algo, input形式, output形式,データ,キー形式,キー)

パラメータalgoは,暗号化計算に使用されるアルゴリズムである. サポートされている設定は: raw (アルゴリズムが使用されていない), 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, blake2b.512, s.128s, blake2256 パラメーター.algoまた,文字列のエンコーディングと解読のために, text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk をサポートしています. パラメータalgoまた: ed25519 アルゴリズムもサポートしています. 異なるハッシュ アルゴリズムの使用もサポートしています.algoed25519.md5,ed25519.sha512などと書ける サポートed25519.seed計算する アルゴ 本当 文字列 データの形式を指定するために使用されます.dataパラメータinputFormatパラメータは,次のいずれかに設定できます: raw, hex, base64, string. rawはデータが原始データ, hexはデータがhexbase64 は,データがbase64文字列が文字列であることを意味します. input 形式 本当 文字列 出力データ形式を指定するために使用されます.outputFormatパラメータは以下の設定をサポートします: raw, hex, base64, string. rawはデータが原始データ, hexはデータがhexbase64 は,データがbase64文字列が文字列であることを意味します. output 形式 本当 文字列 パラメーターdata処理されるデータです データ 本当 文字列 データの形式を指定するために使用されます.keyパラメータkeyパラメータは,次のいずれかに設定できます: raw, hex, base64, string. rawはデータが原始データ, hexはデータがhexbase64 は,データがbase64文字列が文字列であることを意味します. キー形式 偽り 文字列 についてkeyパラメータは署名計算に使用されたキーを指定するために使用され, 文字列として使用できます."{{accesskey}}", "{{secretkey}}"参照するaccessKeyそしてsecretKey{@var/EXCHANGE exchange} exchange オブジェクトで設定されている. キー 偽り 文字列

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

BitMEX の位置変更プッシュ (wss プロトコル) の例:

真の取引のみをサポートしますexchange.Encode()機能"{{accesskey}}", "{{secretkey}}"参照は,exchange.Encode()機能が使われています.

{@var/EXCHANGE exchange}, {@fun/Global/Encode エンコード}

exchange.Go

多スレッドアシンクロンサポート機能は,すべてのサポートされた機能の操作をアシンクロン同時実行に変えることができます.

についてexchange.Go()この関数で,同じオブジェクトをすぐに返します.wait()同期リクエストの結果を取得するために,同期オブジェクトの方法. オブジェクト

交換.Go (方法) 交換.Go (方法,... args)

についてmethodパラメーターは,関数の名前文字列であり,関数の参照ではないことに注意してください. 方法 本当 文字列 パラメータ同時に機能を実行する複数のパラメータがある可能性があります.argパラメータの種類と番号arg測定する同期実行機能- わかった アルグ 偽り 文字列,数, bool,オブジェクト,配列,関数,null,およびシステムでサポートされる他のすべてのタイプ

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()function の使用例を決定するundefined使うtypeof(xx) === "undefined"なぜならnull == undefinedJavaScriptで有効です

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

呼び出すwait()このメソッドは,リリースされた同時オブジェクトでエラーを報告します.

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

複数の交換チケットへの同時アクセス:

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

同期募集についてexchange.IO("api", ...)機能:

この機能は,実際の取引で実行する際に多スレッド実行タスクのみを作成し,バックテストは多スレッド同時実行タスクをサポートしません (バックテストは利用可能ですが,それでも順番で実行されます). その後にexchange.Go()この関数は,そのオブジェクトを返しますwait()このスレッドで返されるデータを得るため,そのオブジェクトを通して呼び出されます.wait()スレッドが自動的にリリースされる前にデータを取得するために呼び出す必要があります.wait()インタフェースの機能が指定されている場合,タイムアウトが発生してもスレッドは自動的にリリースされません.スレッドが自動的にリリースされる前にスレッドの結果が取得されなければならない (同時アクセスのためのインターフェースコールが成功するか失敗するかに関わらず). シンプルな言葉で,要求されたスレッドは,スレッドが自動的にリリースされる前に取得する必要があります.wait()実行が成功するか失敗するかに関わらず, 要求されたスレッドのリソースexchange.Go()自動で解き放たれる必要があります. についてwait()このメソッドはタイムアウトパラメータをサポートします. タイムアウトパラメータがないとwait(),またはタイムアウトパラメータが0である,すなわち,wait(0).....wait()機能ブロックで,並行スレッドが実行を終了するまで待機し,並行スレッドの実行結果を返します. タイムアウトパラメータを -1 に設定します.wait(-1).....wait()異なるプログラミング言語の異なる返却値で,このサブセクションを例の呼び出しのために参照してください. 特定のタイムアウトパラメータを設定しますwait(300)そして,wait()戻る前に最大300ミリ秒待ちます

試験結果が返される場合wait()要求されたスレッドが蓄積し,2000以上のスレッドがエラーを報告します."too many routine wait, max is 2000"- わかった サポートされている機能:GetTicker, GetDepth, GetTrades, GetRecords, GetAccount, GetOrders, GetOrder, CancelOrder, Buy, Sell, GetPositions, IOこれらの機能はすべて,同時に呼び出すときに現在の {@var/EXCHANGE exchange} 交換オブジェクトに基づいて実行されます. PythonとJavaScriptの違いはwait()Python言語の同時オブジェクトの関数は2つのパラメータを返します.最初のパラメータは,非同期 API コールによって返される結果で,第2パラメータは,非同期 コールが完了しているかを示します.


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 イベントループ}

口座

exchange.GetAccount

についてexchange.GetAccount()交換口座情報を要求するために使用されます.GetAccount()交換オブジェクト {@var/EXCHANGE exchange} のメンバー関数である. 交換オブジェクトのメンバー関数 (方法) の目的はexchange対象は,単に関連しているexchange文書化後には 繰り返されないでしょう

アカウント資産情報をクエリし,クエリが成功した場合に {@struct/Account Account} 構造を返します. {@struct/アカウントアカウント},ゼロ値

交換する.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"])
}

取引ペアと契約コードを設定して 経金情報を入手する

取引対象が暗号通貨の先物契約取引に設定され,USDTマージンとして ([@fun/Account/exchange.SetCurrency exchange.SetCurrency},[@fun/Futures/exchange.SetContractType exchange.SetContractType}の関数を見て,どのように切り替えるかを参照してください).資産はUSDT利回りとして記録されます.Balance, FrozenBalance{@struct/アカウントアカウント} 構造の属性 取引対象が暗号通貨先物契約取引所に設定され,通貨ベースの契約に切り替わると,資産は通貨で保安金として記録され,Stocks, FrozenStocks{@struct/アカウントアカウント} 構造の属性 取引先に電話をするときexchange.GetAccount()収納されたデータは,すべての資産に変換された金額ですドル図表に表示されています.Balance{@struct/Account Account} 構造のフィールド.他の資産の変換額を計算する必要がある場合は,USD変換額をインデックス価格 (変換される資産) で割って,その後押金金率 (変換される資産) で割って計算できます.

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

exchange.GetAssets

についてexchange.GetAssets交換口座の資産情報を要求するために使用されます.

についてexchange.GetAssets()この関数は,データ要求が成功した場合に {@struct/Asset Asset} 構造の配列,または要求が失敗した場合に null を返す. {@struct/Asset Asset}配列,ゼロ値

交換する.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);
}

交換口座の資産に関する情報を得るexchange.GetAssets()アセット構造の要素を含む配列を返します.

についてGetAssets()フォウチャーズ・エクスチェンジオブジェクトの関数は,現在の取引ペア (通貨ベース,USDTベース,USDCベース,など) のマーージン資産を返します.

{@struct/Asset Asset} 資産について

exchange.GetName

についてexchange.GetName()この関数は,現在の交換オブジェクトが接続されている交換の名前を得るのに使用されます.

についてexchange.GetName()FMZ Quant Trading プラットフォームで定義された取引所の名前を返します. 文字列

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

についてexchange.GetName()交換オブジェクトを識別するために一般的に使用されます.exchangeまたはexchanges[1], exchanges[2]暗号通貨の先物取引所の名前には,固定プレフィックスがあります.Futures_.

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

exchange.GetLabel

についてexchange.GetLabel()交換オブジェクトの設定時に設定されたカスタムラベルを取得するために使用されます.

についてexchange.GetLabel()交換オブジェクトの設定時に設定されたカスタムラベルを返します. 文字列

交換する.GetLabel ((()

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

交換オブジェクトexchangeまたはexchanges[1], exchanges[2]セットタグで識別されます.

{@var/EXCHANGE exchange} 交換する

exchange.GetCurrency

についてexchange.GetCurrency()この関数は,現在設定されている取引ペアを得るのに使用されます.

についてexchange.GetCurrency()この関数は,現在の {@var/EXCHANGE exchange} 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());
}

トレーディングペアの形式は,単一の大文字で,baseCurrencyそしてquoteCurrency例えばBTC_USDT.

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

exchange.SetCurrency

についてexchange.SetCurrency()この関数は,交換オブジェクト {@var/EXCHANGE exchange} の現在の取引ペアを切り替えるのに使用されます.

交換.セット 通貨 (通貨)

についてcurrency交換する取引ペアを設定するために使用されます. 取引ペアの形式は,単一の上文字で,分離するために下文字を使用します.baseCurrencyからquoteCurrency例えばBTC_USDT- わかった 通貨 本当 文字列

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. 互換性exchange.IO("currency", "BTC_USDT"){@fun に参照してください.excahnge.IO}.
  2. バックテストシステムで取引ペアを切り替えるサポート,バックテストシステムで取引ペアを切り替える際に,通貨名を変更することはできません.例えば:BTC_USDT切り替えられるLTC_USDTしないLTC_BTC.
  3. バックテストページで最初に設定された取引ペアに切り替えた後,取引通貨の数は0です.例えば,バックテストページで設定された最初の取引ペアをバックテストするときに,BTC_USDT,数についてBTC3 になります.USDTこの時点で,切り替えるLTC_USDT取引される通貨の数は 0 です.LTC_USDTつまり,この数値が 0 です.LTC取引相手は 0 となり,交換された取引相手はUSDTこれは10000です.

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

exchange.GetQuoteCurrency

についてexchange.GetQuoteCurrency()この関数は,現在の取引対の通貨の名前を得るのに使用されます.quoteCurrency.

についてexchange.GetQuoteCurrency()この関数は,現在の取引対の通貨を返します. 文字列

交換.GetQuoteCurrency (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())
}

例えば: {@var/EXCHANGE exchange} 交換オブジェクトの現在のトランザクションペアはBTC_USDTについてexchange.GetQuoteCurrency()関数返しUSDT. 現在の取引ペアがETH_BTCについてexchange.GetQuoteCurrency()関数返しBTC.

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

フューチャー

exchange.GetPositions

についてexchange.GetPositions()位置情報を取得するために使用されます.GetPositions()交換オブジェクト {@var/EXCHANGE exchange} のメンバー関数である.GetPositions()交換オブジェクトにリンクした交換口座の位置情報を取得します.exchangeメンバーの機能 (方法) の目的exchange対象は,単に関連しているexchange繰り返されないでしょう

についてexchange.GetPositions()この関数は,データ要求が成功した場合に {@struct/Position Position} 構造の配列を返し,データ要求が失敗した場合に null 値を返します. {@struct/Position Position} アレイ,ゼロ値

交換.GetPositions (位置を取得する) 交換.GetPositions (シグナル)

パラメータsymbol設定するために使用されます.取引符号または取引シンボルの範囲尋問される もしsymbolパラメータが送信されない場合,デフォルトでは,現在の取引ペアと契約コードの次元範囲内のすべてのシンボルの位置データを要求します.

シンボル 偽り 文字列

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

複数の異なる取引ペアと契約コードのための市場オーダーを配置するために先物交換オブジェクトを使用します.複数の方法でポジションをクエリします.

仮想通貨先物契約は,ポジションの論理的概念のみを有する仮想通貨スポットとは異なります. FMZ Quant Tradingプラットフォームのシステムでは,特定のタイプの仮想通貨先物契約は,トレーディングペア, 契約コード{@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType} の関数を参照してください. についてGetPositionsfunction,シンボルのパラメータの使用シナリオは,以下のように要約されます.

エクスチェンジオブジェクト分類 パラメータ クエリの範囲 コメント
フューチャー シンボルのパラメータを通さない 現在の取引ペアと契約コードの次元範囲内のすべての取引製品を検索する. 現在の取引ペアがBTC_USDTで,契約コードがスワップである場合,すべてのUSDTベースの永続契約がクエリされます. これは,呼び出しに相当しますGetPositions("USDT.swap")
フューチャー 取引商品を指定する,シンボルのパラメータは: BTC_USDT.swap 指定されたBTCのUSDTベースの永続契約をクエリする フューチャー取引対象のパラメータシンボルの形式は:トレーディングペアそして契約コードFMZプラットフォームで定義され,文字で区切られています."..
フューチャー 取引商品の範囲を指定します. シンボルのパラメータは: USDT.swap すべてのUSDTベースの永続契約をクエリ -
オプションをサポートする先物取引 シンボルのパラメータを通さない 現在の取引ペアサイズ範囲内のすべてのオプション契約をクエリする 現在の取引ペアが BTC_USDTである場合,契約はオプション契約に設定されます.例えば,Binanceオプション契約: BTC-240108-40000-C
オプションをサポートする先物取引 特定の取引商品を指定する 指定されたオプション契約をクエリ たとえば,Binance 期貨取引所では,シンボルのパラメータは: BTC_USDT.BTC-240108-40000-C
オプションをサポートする先物取引 取引商品の範囲を指定します,シンボルのパラメータは: USDT.option すべてのUSDTベースのオプション契約をクエリ -

についてGetPositions機能,先物取引対象 問い合わせの寸法範囲は次のように要約されます.

パラメータ 要求範囲の定義 コメント
USDT.swap USDTベースの永続契約範囲 について

Exchange API インターフェースでサポートされていない次元 エラーが報告され, null 値が返されます. 呼び出しています

送料契約の範囲です 送料契約の範囲です

通貨ベースの永続的な取引の範囲 契約です

貨幣による配送の範囲 契約です

USDTのオプションです USDTベースのオプション契約の範囲です

通貨ベースのオプション契約の範囲です

  • |

USDT.futures_combo CFDの組み合わせの範囲 FUTURES_DERIBIT 取引所

USD.futures_ff ミックス・マーージン・デリバリー・コントラクトの範囲 フューチャーズ_クラッケン取引所

USD.swap_pf ミックス・マーージン・パーペチュアル・コントラクト・レンジ フューチャーズ_クラッケン取引所

互換性exchange.GetPosition()呼び出しGetPositionこの式は,GetPositions.

取引対象となる口座がexchange市場におけるポジションがない問い合わせ範囲または特定取引手段についてexchange.GetPositions()function は空の配列を返します 例えば:[].

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

exchange.SetMarginLevel

についてexchange.SetMarginLevel()取引対または契約のレバレッジ値を設定するために使用されます.symbolパラメータ. パラメータを入力するだけで対応marginLevel{@var/EXCHANGE exchange} 取引対象の現在の取引ペアまたは契約のレバレッジ値を設定する.

exchange.SetMarginLevel ((マーク,マージンLevel) を設定する) 交換. 設定 マージンレベル (マージンレベル)

についてsymbolこのパラメータは,レバレッジ値を調整する必要がある取引ペアまたは契約を指定するために使用されます.symbolパラメータSetMarginLevel()機能は,その形式と一致しているsymbolパラメータGetTicker()機能 シンボル 偽り 文字列 についてmarginLevelこのパラメータはレバレッジ値を設定するために使用され,通常は取引所の整数であり,一部の取引所の浮動点レバレッジ値設定もサポートします. マージンレベル 本当 番号

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

についてexchange.SetMarginLevel()バックテストシステムは,暗号通貨の先物取引対象のみをサポートします.exchange.SetMarginLevel()引き上げ値を設定する機能です. 仮想通貨先物契約の為,レバレッジメカニズムは仮想通貨先物契約取引所により均一ではない.一部の取引所で,先物契約のレバレッジ値は,注文配置インターフェースのパラメータである.exchange.SetMarginLevel()この関数はネットワークリクエストを生成せず,基となる FMZ システム (オーダー配置インターフェースのパラメータを通すのに使用される) にレバレッジ変数を設定するだけです.一部の取引先先先物契約のレバレッジ値は,取引所のウェブサイトページまたは API インターフェースを使用して設定する必要がある取引所の設定です.exchange.SetMarginLevel()この関数はネットワークリクエストを生成し,レバレッジを設定できない可能性があります.その理由はたくさんあります.例えば,現在のポジションまたは待機中のオーダーがあり,この取引ペアまたは契約に新しいレバレッジ値を設定することが不可能になります. 支援しない取引所exchange.SetMarginLevel()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
マージンレベルを設定 期貨_dYdX / 期貨_Deribit

{@var/EXCHANGE exchange} 交換する

exchange.SetDirection

についてexchange.SetDirection()この関数は,先物契約の注文を出すとき, {@fun/Trade/exchange.Buy exchange.Buy}関数, {@fun/Trade/exchange.Sell exchange.Sell}関数のオーダー方向を設定するために使用されます.

交換.設定方向 (方向)

についてdirectionこのパラメータは,オーダーを投じたときに先物契約の方向を設定するために使用されます.オプション値は:"buy", "closesell", "sell", "closebuy"- わかった 方向性 本当 文字列

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

についてexchange.SetDirection()この関数は,先物契約取引の方向とオーダー配置関数の間の対応を設定します.

注文の配送機能 SetDirection 関数のパラメータによって設定された方向 コメント
exchange.Buy 買って ロングポジションの購入と開設
exchange.Buy 閉店する ショートポジションの購入と閉じる
exchange.Sell 売る 売り出し・開いたショートポジション
exchange.Sell 近売り ロングポジションを売り,閉じる

{@fun/Trade/exchange.buy exchange.buy} {@fun/Trade/exchange.sell exchange.sell} {@fun/Trade/exchange.exchange.buy} {@fun/Trade/exchange.sell exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.exchange.buy} {@fun/Trade/exchange.exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.exchange.sell} {@fun/Trade/exchange.sell.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.sell} {@fun/Trade/exchange.sell.sell}

exchange.SetContractType

についてexchange.SetContractType()この関数は {@var/EXCHANGE exchange} 交換オブジェクトの現在の契約コードを設定するために使用されます.

についてexchange.SetContractType()この関数は,現在の契約コードに対応する取引契約コードを含む構造を返します.例えば,Binance Futures 取引所の場合,現在の契約コードはquarterこの関数の返し値構造は:{"InstrumentID": "BTCUSD_230630", "instrument": "BTCUSD_230630"}- わかった オブジェクト

exchange.SetContractType (符号)

についてsymbolパラメータは契約コードを設定するために使用され,オプション値は:"this_week", "next_week", "quarter", "next_quarter", "swap"など 暗号通貨の先物契約納品契約指定されていないコードは,一般的に次のとおりです.

  • this_week契約は今週の契約です
  • next_week次の週の契約です
  • quarter契約は四半期ごとに
  • next_quarter次の四半期契約です永住契約暗号通貨の先物契約のコードは,指定されていない場合,一般的に以下のとおりである.
  • swap永久契約

シンボル 本当 文字列

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

現在の契約を現在の週の契約として設定します.

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

契約を締結する際にはUSDT取引対をコードで切り替える必要があります (交換オブジェクトを追加するときに直接取引対を設定することもできます):

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

復元値を印刷するexchange.SetContractType()機能:

暗号通貨の先物契約戦略では,BTC_USDTトレーディングペア: 取引ペアを切り替えるときexchange.SetCurrency("BTC_USDT")またはexchange.IO("currency", "BTC_USDT")機能,スイッチした後,あなたは使用する必要がありますexchange.SetContractType()新しい取引ペアで実行される現在の契約を決定するために契約をリセットする機能.通貨標準契約またはUSDT標準契約例えば,取引ペアがBTC_USDT薬剤をexchange.SetContractType("swap")契約コードを設定する機能swapこの時点で,それはBTCについてUSDT標準取引相手が,BTC_USD薬剤をexchange.SetContractType("swap")契約コードを設定する機能swapこの時点で,それはBTCほら通貨標準永久契約です サポートされている暗号通貨先物取引所の詳細,各取引所の契約名:

  • フューチャー=OKCoin (OKX) 永久契約に設定:exchange.SetContractType("swap")今週の契約に設定:exchange.SetContractType("this_week")来週の契約に設定:exchange.SetContractType("next_week")月間契約に設定:exchange.SetContractType("month")来月の契約に設定:exchange.SetContractType("next_month")決算された四半期契約:exchange.SetContractType("quarter")次の四半期に設定された契約:exchange.SetContractType("next_quarter")

    OKXには,市場前の取引契約があります.契約の納期日は固定時間です.取引所によって定義される契約コードは,例えば:HMSTR-USDT-250207. 取引ペアをHMSTR_USDTFMZのプラットフォームで,そしてそれを使用exchange.SetContractType("HMSTR-USDT-250207")契約書を作るために サポートする機能のためにsymbolパラメータは次の通りですexchange.GetTicker(), exchange.CreateOrder(), etc. 指定することができますsymbolパラメータは:HMSTR_USDT.HMSTR-USDT-250207この契約の市場データを入手したり,注文をしたりする.

  • フューチャーズ_HuobiDM (フューチャーズ) 今週の契約に設定:exchange.SetContractType("this_week")- わかった 来週の契約に設定:exchange.SetContractType("next_week")- わかった 決算された四半期契約:exchange.SetContractType("quarter")- わかった 次の四半期に設定された契約:exchange.SetContractType("next_quarter")- わかった 永久契約に設定:exchange.SetContractType("swap")- わかった 契約を支えるUSDTマージンとしてBTC契約例:使用exchange.IO("currency", "BTC_USDT")契約に切り替えるUSDTマージンとして または現在の取引ペアをBTC_USDT取引ペアを切り替えた後,呼び出す必要があります.exchange.SetContractType()契約を設定するために再び機能します.

  • 取引先は,取引先の取引先と関連している. 永久契約に設定:exchange.SetContractType("swap")- わかった Futures_BitMEX 取引所配送契約は,以下の契約コード (1月から12月まで) を有する月間契約です.

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

    納品契約の作成exchange.SetContractType("December")例えば,取引ペアがXBT_USDTについてexchange.SetContractType("December")BTC に基づく USDT で12月の配送の契約を設定します (実際の契約コードに対応します)XBTUSDTZ23).

    フューチャーズ_BitMEX 契約情報要約

    Futures_BitMEX で定義された契約コード FMZ に対応する取引対 FMZにおける対応契約コード コメント
    ドッグスード DOGE_USD スワップ USDで決算され,XBTはBTCです.
    ドーゲュスト DOGE_USDT スワップ USDTで表され,USDTで決済されます.
    XBTETH XBT_ETH スワップ ETHで決済 XBTで決済
    XBTEUR XBT_EUR スワップ EURで決済され,XBTで決済されます.
    USDTUSDC USDT_USDC スワップ USDCで決済され XBTで決済されます
    ETHUSD_ETH ETH_USD_ETH スワップ USDで決済され,ETHで決済される.
    XBTH24 XBT_USD 3月 効用期限: 3月24日 月コードは: H; ドルで表され,XBTで決済.
    ETHUSDZ23 ETH_USD 12月 効用期限: 12月23日 月コードは: Z; ドルで表され,XBTで決済.
    XBTUSDTZ23 XBT_USDT 12月 効用期限: 12月23日 月コードは: Z; USDTで表され,USDTで決済される.
    ADAZ23 ADA_XBT 12月 期限: 12月23日 月コードは: Z ; XBTで請求,XBTで決済.
    P_XBTETFX23 USDT_XXX P_XBTETFX23 期限: 11/23/23; 割合で表し,USDTで決済する.
  • フューチャーズ_GateIO 今週の契約に設定:exchange.SetContractType("this_week")- わかった 来週の契約に設定:exchange.SetContractType("next_week")- わかった 決算された四半期契約:exchange.SetContractType("quarter")- わかった 次の四半期に設定された契約:exchange.SetContractType("next_quarter")- わかった 永久契約に設定:exchange.SetContractType("swap")- わかった 契約を支えるUSDTマージンとしてBTC契約例:使用exchange.IO("currency", "BTC_USDT")契約に切り替えるUSDTマージンとして または現在の取引ペアをBTC_USDT取引ペアを切り替えた後,呼び出す必要があります.exchange.SetContractType()契約を設定するために再び機能します.

  • フューチャーズ_デリビット 永久契約に設定:exchange.SetContractType("swap")- わかった デリビットをサポートします.USDC契約 納品契約は次のとおりです."this_week", "next_week", "month", "quarter", "next_quarter", "third_quarter", "fourth_quarter"- わかった CFD (フューチャー_コンボ):"this_week,swap", "next_week,swap", "next_quarter,this_week", "third_quarter,this_week", "month,next_week",多くの組み合わせがあります. オプション契約については,取引所によって定義された特定のオプション契約コードを入力する必要があります.詳細については Deribit のウェブサイトを参照してください.

  • フューチャー=KuCoin 例えば,取引ペアがBTC_USDコードが設定されれば,通貨に基づく契約です. 永久契約に設定:exchange.SetContractType("swap")- わかった 決算された四半期契約:exchange.SetContractType("quarter")- わかった 次の四半期に設定された契約:exchange.SetContractType("next_quarter").

    保証金契約としてUSDT: 例えば,取引ペアがBTC_USDT契約コードを設定します. これは,USDTを保全金として使用する契約です. 永久契約に設定:exchange.SetContractType("swap").

  • フューチャー=Binance バイナンス・フューチャーズ・エクスチェンジは,現在の取引ペアの永続契約のデフォルト,契約コード:swap- わかった 永久契約に設定:exchange.SetContractType("swap")Binanceの永続契約にはUSDT例えば,この2つの要素はUSDT標準の永続契約BTC取引ペアが設定されている場合BTC_USDT例えば,コインを担保金として使用する永続契約もサポートします.BTC取引ペアを設定してBTC_USD- わかった 決算された四半期契約:exchange.SetContractType("quarter"), 配送契約には通貨標準契約 (つまり,通貨を保証金として使用する) があります.BTC取引対は,次のように設定されます.BTC_USDそして契約を設定しますexchange.SetContractType("quarter")設定されているBTC通貨スタンダード契約と四半期契約. 次の四半期に設定された契約:exchange.SetContractType("next_quarter")例えばBTC通貨スタンダード四半期契約の取引対は,以下に設定される:BTC_USD契約書を作ってexchange.SetContractType("next_quarter")- わかった バイナンスではUSDTマージン付与契約として,BTC例えば,取引対をBTC_USDT契約コードを設定します

    バイナンスオプション契約のサポート: オプション契約コードの形式は,取引所によって定義されたオプション契約コードに基づいています.BTC-241227-15000-C, XRP-240112-0.5-C, BTC-241227-15000-Pバイナンスオプション契約コードをBTC-241227-15000-P例えば,BTCはオプション通貨コード,241227は行使日,15000は行使価格,Pは販売オプション,Cはコールオプションです. オプションの種類については,欧州オプションかアメリカオプションかについては,取引所のオプション契約の関連情報を参照してください. 取引所はオプション販売者を制限し,資格を別々に申請することを要求することがあります.バイナンスオプションには販売者の資格が必要です.

  • フューチャーズ_ビボックス バイボックスの永続契約の契約コード:swap- わかった 永久契約に設定:exchange.SetContractType("swap").

  • フューチャーズ_Bybit 既定は,現在の取引対の永続契約,契約コード:swap- わかった 今週の契約コード:this_week- わかった 来週の契約コード:next_week- わかった 第3週間の契約コード:third_week- わかった 月間契約コード:month- わかった 次の月の契約コード:next_month- わかった 四半期契約コード:quarter- わかった 次の四半期契約コード:next_quarter- わかった 第3四半期契約コード:third_quarter.

  • フューチャーズ_クラケン 既定は,現在の取引ペアの永続契約,契約コード:swap. swap永久契約month: 現月契約.quarter契約は四半期ごとにnext_quarter次の四半期契約ですswap_pf: 混合保証金付き永続契約quarter_ff: 混同保証金による四半期契約month_ff: 混同保証金 流動月契約next_quarter_ff: 混同利益率の契約

  • フューチャー=Bitfinex 契約コードは,現在の取引対の永久契約です.swap.

  • フューチャー=Bitget 契約コードは,現在の取引対の永久契約です.swap- わかった 取引対は,BTC_USD通貨標準契約の場合,取引対はBTC_USDT決済された契約の場合USDTデモコンタクトは,以下のような取引対で設定できます.SBTC_USD, BTC_SUSDT.

  • フューチャーズ_dYdX dYdX 永続契約の契約コード:swap- わかった 永久契約に設定:exchange.SetContractType("swap"), dYdXはUSDT標準契約のみを持っています.

  • フューチャーズ_MEXC MEXCの永続契約の契約コード:swap- わかった 永久契約に設定:exchange.SetContractType("swap"). 取引対をBTC_USD通貨標準契約であり,取引ペアをBTC_USDTこれはUSDT- 契約が決まった

  • フューチャー=仮想通貨 トークンcrypto.com契約取引のための保証金として使用するために,ドルで表記されたクレジットに変換することができます. 永久契約に設定:exchange.SetContractType("swap")呼び出す例exchange.SetContractType("swap")取引ペアが設定されているとき BTCの永久契約を設定する機能BTC_USD- わかった についてcrypto.com交換配送契約は,次の契約コードを持つ月間契約 (1月から12月まで) である.

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

    配送契約を設定する:exchange.SetContractType("October")例えば,取引ペアがBTC_USD,関数を呼び出すexchange.SetContractType("October")BTCの10月の配達契約を設定する 合同コードは,現在,次のとおりです.BTCUSD-231027.

  • フューチャーズ フューチャーズ_WOO 交換サポートUSDT永続契約のコードでswap例えば,取引ペアがBTC_USDT機能についてexchange.SetContractType("swap")現行の契約を BTC の USDT ベースの永続契約に設定します

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

exchange.GetContractType

についてexchange.GetContractType()この関数は {@var/EXCHANGE exchange} exchange オブジェクトの現在の設定の契約コードを取得するために使用されます.

についてexchange.GetContractType()FMZ プラットフォームで定義された契約コードを返します 例えば:this_week, swapなど 文字列

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

についてexchange.GetFundings()この関数は,現在の期間の資金調達の割合のデータを得るのに使用されます.

についてexchange.GetFundings()この関数は,データリクエストが成功した場合に {@struct/Funding Funding} 構造の配列を返し,データリクエストが失敗した場合に null 値を返します. {@struct/Funding Funding}配列,ゼロ値

交換.GetFundings (資金調達) exchange.GetFundings (シンボル)

パラメータsymbol設定するために使用されます.トランザクションシンボルまたはトランザクションシンボルの範囲問いかけられる.symbolパラメータが通過されない場合,すべてのインstrumentの現在の資金調達のレートのデータは,現在の取引ペアと契約コードの次元範囲でデフォルトで要求されます.

シンボル 偽り 文字列

/*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() + "`");
}

フューチャー交換オブジェクトを呼び出すexchange.GetFundings()バックテストシステムにおける関数.任意の市場関数を呼び出す前に,GetFundingsは現在のデフォルト取引ペアの資金提供データを返します.市場関数を呼び出す後,すべての要求された多様性の資金提供データを返します.以下のテスト例を参照してください:

資金調達の割合のデータの一連のクエリをサポートしない先物取引所では,symbolパラメータはクエリ範囲として指定されます 例えば:USDT.swapまたはsymbolパラメータが送信されない場合,インターフェースはエラーを報告します.GetFundings()このタイプの先物交換オブジェクトを指定する必要があります.symbolパラメータは特定の永続契約の種類として,そのタイプの現在の資金調達の割合のデータをクエリする. についてexchange.GetFundings()機能は実際の取引とバックテストシステムをサポートします. 資金調達のレートのデータをバッチ取得をサポートしない取引所:Futures_Bitget,Futures_OKX,Futures_MEXC,Futures_Deribit,Futures_Cryptosymbolパラメータの特定のシンボルのコード,例えば:ETH_USDT.swap.

支援しない取引所exchange.GetFundings()機能:

機能名 サポートされていないスポット交換 サポートされていない先物取引
GetFundings について フューチャーズ_DigiFinex

{@struct/Funding 資金提供}

ネットワーク設定

exchange.SetBase

についてexchange.SetBase()この関数は,交換オブジェクト {@var/EXCHANGE exchange} で設定された交換 API インターフェイスのベースアドレスを設定するために使用されます.

交換.セットBase (s)

についてsこのパラメータは,交換 API インターフェイスのベースアドレスを指定するために使用されます. s 本当 文字列

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

Exchange API ベースアドレスの切り替えは,Backtesting システムではサポートされません. Backtesting システムはサンドボックスシミュレーション環境であり, Exchange API インターフェイスにアクセスできません.

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

exchange.GetBase

についてexchange.GetBase()この関数は,現在の交換 API インターフェイスのベースアドレスを取得するために使用されます.

現在の Exchange API インターフェースのベースアドレスです 文字列

交換する.GetBase ((()

function main() {
    Log(exchange.GetBase())
}
def main():
    Log(exchange.GetBase())
void main() {
    Log(exchange.GetBase());
}

{@fun/NetSettings/exchange.SetBase exchange.SetBase} (ネット設定) {@fun/NetSettings/exchange.SetBase exchange.SetBase} (ネット設定/ネット設定/交換.セットベース交換.セットベース}

exchange.SetProxy

についてexchange.SetProxy()交換オブジェクト {@var/EXCHANGE exchange} のプロキシ設定を設定するために使用されます.

交換.SetProxy (プロキシ)

についてproxyパラメータはプロキシの設定を指定するために使用されます. 代理 本当 文字列

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

交換オブジェクト {@var/EXCHANGE exchange} を設定するsocks5代理:

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

更にグローバル仕様{@var/EXCHANGE exchange} exchange オブジェクトからの要求の IP アドレスの場合, {@var/EXCHANGE exchange} に基づいて IP アドレスを指定することもサポートされています:

プロキシ設定が失敗すると,exchange.SetProxy()呼び出すと null を返します.exchange.SetProxy()この関数では,restプロキシを設定した後, {@var/EXCHANGE exchange} 交換オブジェクトにリンクされた交換インターフェースへのアクセスがプロキシを通じてアクセスされます. 設定のサポートsocks5交換オブジェクトを追加します. つまり:exchanges[0]例えば:

  • プロキシを設定する ユーザー名やパスワードなしexchange.SetProxy("socks5://127.0.0.1:8889").
  • プロキシを設定して,ユーザー名とパスワードを入力します:exchange.SetProxy("socks5://username:password@127.0.0.1:8889"). usernameユーザー名とpasswordパスワードです
  • プロキシなしで通常のモードに切り替える:exchange.SetProxy("").

{@var/EXCHANGE exchange} 交換オブジェクトからの要求のIPアドレスを設定するサポート,グローバルに指定.

{@var/EXCHANGE exchange} 交換する

exchange.SetTimeout

についてexchange.SetTimeout()タイムアウトを設定するために使用されます.rest{@var/EXCHANGE exchange} 交換オブジェクトの要求

交換.セットタイムアウト (タイムアウト)

についてtimeoutパラメータはタイムアウト設定のミリ秒数を指定するために使用されます. タイムアウト 本当 番号

function main() {
    exchange.SetTimeout(3000)
    Log(exchange.GetTicker())
}
def main():
    exchange.SetTimeout(3000)
    Log(exchange.GetTicker())
void main() {
    exchange.SetTimeout(3000);
    Log(exchange.GetTicker());
}

パラメータtimeout1000ミリ秒は1秒に等しい.restタイムアウトを設定するために使用されます.rest要求が一度だけ設定されれば 効力を発揮しますexchange.SetTimeout(3000)設定するrestタイムアウトを要求するexchangeネットワークリクエストなどの関数を呼び出す.exchange.GetTicker()3秒以上応答を受けない関数は タイムアウトし,タイムアウトする関数は ゼロ値を返しますSetTimeout()グローバル関数ではなく,交換オブジェクト {@var/EXCHANGE exchange} の方法です.

{@var/EXCHANGE exchange} 交換する

FMZ 量子取引プラットフォームは,実際に多スレッド機能をサポートしていますJavaScript言語戦略をシステムの下部から導入し,以下の目的を実現します

対象物 指示 コメント
スレッド 多スレッドグローバルオブジェクト メンバーの役割Thread, getThread, mainThreadなど
スレッド スレッドオブジェクト メンバーの役割peekMessage, postMessage, joinなど
スレッドロック スレッドロックオブジェクト メンバーの役割acquire, releaseスレッド実行関数のパラメータとしてスレッド環境に転送できます.
ThreadEvent について イベントオブジェクト メンバーの役割set, clear, wait, isSetスレッド実行関数のパラメータとしてスレッド環境に転送できます.
ThreadCondition について 条件オブジェクト メンバーの役割notify, notifyAll, wait, acquire, releaseスレッド実行関数のパラメータとしてスレッド環境に転送できます.
ThreadDict について 辞書オブジェクト メンバーの役割get, setスレッド実行関数のパラメータとしてスレッド環境に転送できます.

スレッド

についてthreadingobject は,同時スレッド,スレッドロック,および条件オブジェクトを作成する機能を提供するグローバルマルチスレッド管理ツールです.このセクションでは,Stream のメンバー関数を紹介します.threadingこのオブジェクトは,このオブジェクトのみがサポートされていますJavaScript言語戦略

スレッド

についてThread()この関数は同時スレッドを作成するために使用されます.

についてThread()a を返しますThread作成された同時スレッド,スレッド通信などを管理するために使用されるオブジェクト.

Threadオブジェクト

スレッド (笑) スレッド (→...項目)

パラメータfunc同期実行のための関数 (参照で渡す) で,匿名関数の渡しをサポートします.func複数のパラメータを受け入れることができます....argsパラメータリストはfunc必要なのは...args.

機能 本当 機能 パラメーターarg実行パラメータがfunc(つまり,同時スレッド実行機能) コールバックが実行されるとき,複数のパラメータがある可能性があります.arg, パラメータリストfunc必要なのは...args.

アルグ 偽り 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値,システムでサポートされる他のタイプ パラメーターitem同期実行される関数参照とそのパラメータを含む配列である.itemパラメータを呼び出すときに送信することができます.Thread function.

ポイント 本当 配列

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

カスタム関数と匿名関数の両方の同時スレッドを作成します.

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

試しにThread(...items)連続スレッドを作成し,複数の機能を順序的に実行します.

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

パラメータを同時に実行される関数に転送する機能をサポートします.

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

函数文字列の転送をサポートし,同時コンピューティングのために外部ライブラリを動的にインポートすることができます.

スレッド機能func通過したThread()同期実行のための関数は孤立した環境で実行されるので,スレッドの外の変数は直接参照できないし,参照されたときにコンパイルが失敗する.同時に,スレッド内で他の閉じる関数への参照はサポートされません.プラットフォームが提供するすべてのAPIはスレッド内で呼び出されますが,他のユーザー定義関数は呼び出できません.

バックテストシステムとライブ取引環境をサポートする.すべての同時スレッド関連機能は,バックテストシステムでのコード互換性としてのみサポートされており,実際に同時スレッドによって実行されません.したがって,この章では繰り返されません.

{@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/threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threads/threading/eventLoop}

getThread を取得する

についてgetThread()この関数は,指定されたスレッドIDに基づいてスレッドオブジェクトを取得するために使用されます.

についてgetThread()この関数は,Threadパラメータで指定されたthreadIdを持つオブジェクト

Threadオブジェクト

getThread (threadId) を取得する

パラメータthreadIdパラメータを指定して対応するスレッドオブジェクトを取得します.

スレッドId 本当 番号

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

指定されたスレッドオブジェクトを入力します.threadId.

バックテストシステムとライブ取引環境をサポートします

実行され,解放された場合は,それを使用することはできません.threading.getThread(threadId)糸のスレッドオブジェクトを得るために

{@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/threading/Dict Dict}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/threading/Lock Lock}, {@fun/Threads/threading/eventLoop}, {@fun/Threads/threads/threading/eventLoop}

メインスレッド

についてmainThread()主糸のスレッドオブジェクト,つまりスレッドがmain()戦略の機能が位置しています.

についてmainThread()この関数で返されるのは 主なスレッドのスレッドオブジェクトです

Threadオブジェクト

mainThread (メインスレッド)

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

持ってきてThread主糸の物体と出力threadId主要な糸の

function test() {
    Log("Output the main thread ID in the test function:", threading.mainThread().id())
}

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

メインスレッドのスレッドオブジェクトは,並行スレッドでも得ることができる.

バックテストシステムとライブ取引環境をサポートします

{@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/currentThread currentThread}, {@fun/Threads/threading/threading/Lock Lock}, {@fun/Threads/threads/threading/eventLoop}, {@fun/Threads/threads/threading/eventLoop}, {@fun/Threads/threads/threads/threading/eventLoop}

currentスレッド

についてcurrentThread()この関数は,現在のスレッドのスレッドオブジェクトを取得するために使用されます.

についてcurrentThread()この関数は,現在のスレッドのスレッドオブジェクトを返します.

Threadオブジェクト

currentThread (現在のスレッド)

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

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

持ってきてThread電流の糸の対象と出力threadIdロープの流れを

バックテストシステムとライブ取引環境をサポートします

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

ロック

についてLock()この関数はスレッドロックオブジェクトを作成するために使用されます.

についてLock()この関数はスレッドロックオブジェクトを返します.

ThreadLockオブジェクト

鍵を閉めろ

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

2つの同時スレッドが共通のリソースにアクセスします.

バックテストシステムとライブ取引環境をサポートします

{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/Thread Thread}, {@fun/Threads/threads/threading/condition Condition}, {@fun/Threads/threads/threading/event Event}, {@fun/Threads/threads/threading/mainThread mainThread}, {@fun/Threads/threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/threads/threading/threadThreadThread}, {@fun/Threads/threads/threads/threads/threads/eventLoopイベント}, {@fun/Threads/threads/threads/thre

条件

についてCondition()条件変数オブジェクトを作成するために使用され,複数のスレッドの同時環境におけるスレッド間の同期と通信を達成するために使用されます.Condition()特定の条件が満たされていない場合,スレッドが他のスレッドが条件が満たされていることを通知するまで待つことができます.

についてCondition()a を返しますThreadCondition object.

ThreadConditionオブジェクト

条件

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

2つの同時スレッドが共通のリソースにアクセスします.

バックテストシステムは この機能を実装しません ただ定義します

{@fun/Threads/getThread getThread}, {@fun/Threads/threads/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/Lock Lock}, {@fun/Threads/threads/threading/Thread Thread}, {@fun/Threads/threads/threading/event Event}, {@fun/Threads/threads/threads/mainThread mainThread}, {@fun/Threads/threads/threading/currentThread currentThread}, {@fun/Threads/threads/threads/threading/Loop lock}, {@fun/Threads/threads/threads/eventLoop}, {@fun/Threads/threads/threads/threading/eventLoop}, {@fun/Threads/threads/th

イベント

についてEvent()この関数は,スレッドイベントスレッド間の同期に使用されるオブジェクトで,スレッドが別のスレッドからの通知またはシグナルを待つことができます.

についてEvent()a を返しますThreadEvent object.

ThreadEventオブジェクト

イベント

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

2つの同時スレッドが共通のリソースにアクセスします.

バックテストシステムとライブ取引環境をサポートします

{@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/threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threads/threading/eventLoop 事件終了}

ディクト

についてDict()この関数は,並行スレッドに転送するための辞書オブジェクトを作成するために使用されます.

についてDict()a を返しますThreadDict object.

ThreadDictオブジェクト

暗記する

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

正規オブジェクトを同時スレッド実行関数に転送し,オブジェクトのキー値を修正すると,他のスレッドのオブジェクトのキー値が変更されるかどうかをテストします.

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

渡してThreadDict作成されたオブジェクトDict()動作を同時スレッド実行機能に変換し,オブジェクトのキー値を変更すると,他のスレッドのオブジェクトのキー値が変化するかどうかをテストします.

共通のオブジェクトが並行スレッド関数に渡されたとき,それはディープコピーとして渡されます.並行スレッドのキー値を修正すると,他のスレッドの辞書に影響しません.

バックテストシステムとライブ取引環境をサポートします

{@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/threading/eventLoop}

待機中

についてpendingこの関数は,現在の戦略プログラムで実行されている並行スレッドの数を得るのに使用されます.

についてpending()この関数は,現在の戦略プログラムが実行している並行スレッドの数を返します.

番号

待機している

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

2つの同時実行スレッドを作成して,pending()異なる時間ノードで機能します.

戦略がmain()実行を開始し,関数を呼び出す.pending()戦略が実行されている主なスレッドであるため,main()機能が位置している場合も 待機しているスレッドです

バックテストシステムとライブ取引環境をサポートします

{@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/threads/threading/Dict Dict}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/threading/eventLoop}, {@fun/Threads/threads/threading/eventLoop}, {@fun/Threads/threads/threads/threading/threading/threadLoop}

スレッド

Thread作成または返却することができます.threading.Thread(), threading.getThread(), threading.mainThread()そしてthreading.currentThread().

peek メッセージ

についてpeekMessage()この関数はスレッドからメッセージを受け取るのに使われます

についてpeekMessage()この関数は,現在のスレッドオブジェクトに関連付けられたスレッドが受信したメッセージを返します.

文字列,数,ボール,オブジェクト,配列,ゼロ値,システムでサポートされる他のタイプ

peekMessage (メッセージ) peekMessage (タイムアウト)

パラメータtimeouttimeout の設定です. パラメータによって設定されたミリ秒の数をブロックして待ち,データを返します. データがない場合,タイムアウトが限界を超えると, null 値が返されます.timeout0 に設定されているか,timeoutプロセスがブロックされ,チャネルからデータが受信されるまで待つことを意味します.timeout−1に設定された場合,プロセスはデータをブロックし,すぐに返却しないことを意味します.データがない場合は,ゼロ値が返されます.

タイムアウト 偽り 番号

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

同期スレッドからメインスレッドにメッセージを送信します.

プログラムを書くとき スレッド・デッドロックの問題に 注意を払う必要があります

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

投稿メッセージ

についてpostMessage()この関数はスレッドにメッセージを送信するために使用されます.

postMessage ((msg) について

パラメータmsgメッセージを送信します

メッセージ 本当 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値など,システムでサポートされる任意のタイプ

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

同期スレッドでメッセージを送信し,使用するeventLoop()メッセージの通知を受け取る

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

函数を送信もサポートします

実行関数に呼び出します.postMessage()メッセージ イベントも生成されます.eventLoop()メッセージ通知を受信する機能

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Threads/id id}, {@fun/Threads/Threads/Threads/name name}, {@fun/Threads/Thread/eventLoop eventLoop}

加入する

についてjoin()この機能はスレッドが終了してシステムリソースを回収するのを待つために使用されます.

についてThreadRetオブジェクト実行結果に関するデータを含みます.その属性には以下が含まれます:

  • id:スレッドID
  • terminated: 糸が強制的に終了するかどうか.
  • 経過:ナノ秒で糸の走行時間.
  • ret:スレッド関数の返される値.

ThreadRetオブジェクト

加入する 加入 (タイムアウト)

についてtimeoutスレッドが終了するのを待つためのミリ秒でタイムアウトを設定するために使用されます.timeoutパラメータが0に設定されているかtimeoutパラメータが設定されていない場合,join()実行が完了するまで待つ.timeoutパラメータが -1 に設定され,join()機能がすぐに戻ります

タイムアウト 偽り 番号

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

試験するjoin()タイムアウトの関数と返却値を出力します

についてjoin()関数 out と return の時間undefined.

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

終了する

についてterminate()この機能はスレッドを強制的に終了し,作成したスレッドが使用するハードウェアリソースを解放するために使用されます.

終了する

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

スレッドの実行を強制的に終了します. スレッドを強制的に終了した後,ログにこのスレッドからの出力はありません.

糸が強要的に切断される場合terminate()機能,我々はもはや使用することはできませんjoin()機能が終了するのを待つことです

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

getデータ

についてgetData()この関数はスレッド環境で記録された変数にアクセスするために使用されます.スレッドが実行していない場合,データは有効です.join()実行していない場合terminate()機能 (糸を強制的に切る)

についてgetData()この関数は,この関数に対応するキー値を返します.key現在のスレッドコンテキストに格納されたキー値ペアのパラメータです.

文字列,数,ボール,オブジェクト,配列,ゼロ値,システムでサポートされる他のタイプ

getData (データ取得) getData (キー) を取得する

についてkeyパラメータは,保存されたキー値ペアのキー名です.

キー 本当 文字列

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

鍵の値を記録するcount鍵値を読み取ることができます.count主要な話題です

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Thread/thread/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads

setData について

についてsetData()この関数はスレッドコンテキスト内の変数を保存するために使用されます.

setData (キー,値)

についてkeyパラメータは,保存されたキー値ペアのキー名を指定するために使用されます.

キー 本当 文字列 についてvalueパラメータは,保存されたキー値ペアのキー値を指定するために使用されます.

価値 本当 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値など,システムでサポートされる任意のタイプ

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

同行スレッドにキー値ペアを設定し メインスレッドにキー値ペアを読み取ります

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

鍵値が関数に変換されるのをサポートします.

このスレッドが実行していない場合,このデータは有効です.join()実行していない場合terminate()パラメータの値valueシリアル化可能な変数でなければならない.

{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop eventLoop

id

についてid()この関数で,threadId複数のスレッドのオブジェクトのインスタンスの

返金値がid()機能はthreadId.

番号

id()

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

同期で実行するスレッドを作成して出力しますthreadIdこの同時進行糸がメイン糸に

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

名前

についてname()この関数は,現在のマルチスレッドオブジェクトインスタンスの名前を返します.

についてname()この関数は,同時スレッド名を返します.

文字列

氏名

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

同期スレッドを作成し,メインスレッドで同期スレッドの名前を出力します.

{@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/Threads/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop}, {@fun/Threads/thread/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Th

イベントループ

についてeventLoop()この機能はスレッドが受信したイベントを聞くために使用されます.

についてeventLoop()この関数は,現在のスレッドが受信したイベント情報を返します.イベント情報構造.

オブジェクト,ゼロ値

イベントループ イベントループ (タイムアウト)

パラメータtimeoutパラメータが設定されている場合timeout値が0に設定されている場合,帰還する前にイベントが起こるのを待つ.値が0を超えると,イベントの待機タイムアウトを設定します.値が0未満の場合,最新のイベントを直ちに返します.

タイムアウト 偽り 番号

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

3つのスレッドを同時に実行し,受信されたイベント情報を出力します.タイムアウトが発生するか,関数がすぐに返される場合は,出力値は null です.

処理メカニズムはeventLoop()この関数は,この関数と同じです.EventLoop().

{@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/Threads/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/name id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/name name}, {@fun/Threads/Threads/name name}, {@fun/Threads/Threads/data set}, {@fun/Threads/Threads/id id}, {@fun/Threads/threads/name name}, {@

スレッドロック

複数のスレッドの同期処理に使用されるスレッドロックオブジェクト

獲得する

についてacquire()機能はスレッドロック (ロック) を要求するために使用されます.

取得する

参照してくださいthreading.Lock()例のセクションです

についてacquire()スレッドロックを要求するために使用されます. スレッドがスレッドロックを呼び出すとき,acquire()スレッドロックオブジェクトの関数は,スレッドロックを取得しようとします.もしスレッドロックが別のスレッドによって現在保持されていない場合,呼び出しスレッドはロックを成功裏に取得し,実行を続けます.もしスレッドロックが既に別のスレッドによって保持されている場合,スレッドコールacquire()鍵が解けられるまで ブロックされます

{@fun/Threads/threading/Lock Lock} {@fun/Threads/ThreadLock/release release} {@fun/threads/threads/threading/lock lock} {@fun/threads/threads/threads/threading/lock lock} {@fun/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads/threads}

解放する

についてrelease()機能はスレッドロックを解き放つために使われます.

解放する

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

デッドロックシナリオのテスト

線鎖の不適切な使用は,行き詰まりにつながる可能性があることに注意してください.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire} ローックロック

ThreadEvent について

複数のスレッドのイベント通知と信号に使用されるイベントオブジェクト.

セット

についてset()機能はイベント (セット信号) を通知するために使用されます.

セット

参照してくださいthreading.Event()例のセクションです

信号が設定されている場合set()信号を消して再設定する

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

はっきりした

についてclear()信号をクリアするために使用されます.

分かりました.

参照してくださいthreading.Event()例のセクションです

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

待って

についてwait()この機能は,イベント (信号) の待機を設定するために使用され,イベント (信号) が設定される前にブロックされます.タイムアウトパラメータを設定することをサポートします.

についてwait()timeout が発生したかどうかを返します.そうであれば true 値を返します.

ボール

待って 待って (タイムアウト)

についてtimeoutパラメータは,待機タイムアウトをミリ秒で設定するために使用されます.

タイムアウト 偽り 番号

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

返回値をテストするwait() function.

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

isSet

についてisSet()この関数は,イベント (信号) が設定されているかどうかを判断するために使用されます.

についてisSet()この関数は,イベント (信号) が設定されているかどうかを返します.もしイベント (信号) が設定されている場合は,true値を返します.

ボール

isSet (セット)

参照してくださいthreading.Event()例のセクションです

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

ThreadCondition について

条件オブジェクト,マルチスレッド同期に使用されます.

通知する

についてnotify()呼び出したスレッドのみです.wait()方法が目覚めるでしょう

通知する

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

試しにnotify()待機糸を目覚めさせる機能です

についてnotify()待機列のスレッドを起こします

その時にnotify()糸がスレッドロックに戻ります

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

全員に知らせる

についてnotifyAll()待機するスレッドをすべて起こします.

全員に知らせる

参照してくださいThreadCondition.notify()例のセクションです

についてnotifyAll()起き上がったスレッドがスレッドロックを再獲得します 起き上がったスレッドがスレッドロックを再獲得します

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}, {@fun/Threads/ThreadCondition/release release}, {@fun/Threads/ThreadCondition/release release}, {@fun/Threads/ThreadCondition/thread release}, {@fun/threads/threadCondition/thread release release}, {@fun/threads/threadCondition/thread release release}, {@fun/threads/threadCondition/thread release release}, {@fun/threads/threadCondition/thread release release release}, {@fun/threads/threadCondition/thread release release release release}, {@fun/threads/threadCondition/thread

待って

についてwait()特定の設計条件下でスレッドを待機させる機能です

待って

参照してくださいThreadCondition.notify()例のセクションです

についてwait()機能はスレッドロックを解放し,目覚めるとスレッドロックを再獲得します.

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

獲得する

についてacquire()機能はスレッドロック (ロック) を要求するために使用されます.

取得する

参照してくださいThreadCondition.notify()例のセクションです

使用前wait()ロープのロック (ロック) を要求する必要があります.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/ThreadCondition/ThreadCondition/release release}, {@fun/ThreadCondition/ThreadCondition/release release}, {@fun/ThreadCondition/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}, {@fun/ThreadCondition/threadCondition/release release}, {@fun/threadCondition/threadCondition/release release}, {@threadCondition/threadCondition/release release release}, {@fun/threadCondition/threadCondition/release release release}, {@fun/thread

解放する

についてrelease()機能はスレッドロックを解き放つために使われます.

解放する

参照してくださいThreadCondition.notify()例のセクションです

使用後wait()ロープを解き放つ必要があります. ロープを解き放つ必要があります.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/ThreadCondition/threadCondition/acquire acquire}, {@fun/ThreadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition}, {@fun/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/threadCondition/acquire

ThreadDict について

辞書オブジェクト,データ共有に使用されます.

取れ

についてget()辞書オブジェクトに記録されたキー値を取得するために使用されます.

についてget()鍵の値を返しますkey parameter.

文字列,数,ボール,オブジェクト,配列,ゼロ値,システムでサポートされる他のタイプ

get (キー)

についてkeyパラメータは取得するキーに対応するキー名を指定するために使用されます.

キー 本当 文字列

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

イベントオブジェクトを使用してスレッドにデータを読み取り,修正するように通知します.

{@fun/Threads/ThreadDict/セットセット}

セット

についてset()鍵値ペアを設定するために使用されます.

セット (キー,値)

パラメータkey変更するキー名を設定するために使用されます.

キー 本当 文字列 パラメーターvalue変更するキー値を設定するために使用されます.

価値 本当 文字列,数,ボール,オブジェクト,配列,関数,ゼロ値,システムでサポートされる他のタイプ

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

鍵値が関数に変換されるのをサポートします.

{@fun/Threads/ThreadDict/get get} 楽しいこと

ウェブ3

exchange.IO("アビ"...)

FMZ Quant トレーディング プラットフォームでは,主に様々な機能を実装し,ブロックチェーンに関連する呼び出しをexchange.IO()機能について説明しますexchange.IO()呼び出し方法は,その機能に応じて別々に機能します.exchange.IO("abi", ...)ABI を登録するために使用されます.

exchange.IO(k,アドレス,abiContent)

についてkパラメータは,機能の設定に使用されますexchange.IO()設定されている"abi"この関数は登録するために使用されます.ABI- わかった k 本当 文字列 についてaddressパラメータはスマートコントラクトのアドレスを指定するために使用されます. アドレス 本当 文字列 についてabiContentパラメータは,指定するために使用されますABIスマートコントラクトです abiコンテンツ 本当 文字列

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

スマートコントラクトを呼び出す方法は,標準ERC20方法である場合は登録する必要はありません. 持ってきてABI契約内容は,次のURLで取得できます.resultフィールドのみ,例えば:

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

exchange.IO"アピ"は"th"で

呼び出す方法exchange.IO("api", "eth", ...)この関数は Ethereum RPC メソッドを呼び出すのに使われます

についてexchange.IO("api", "eth", ...)この関数は,呼び出された RPC メソッドの返却値を返します. 文字列,数, bool,オブジェクト,配列,null,およびシステムでサポートされる他のすべてのタイプ

exchange.IO(k,ブロックチェーン,rpcメソッド)exchange.IO(k,blockChain,rpcメソッド,...args)

についてkパラメータは,機能の設定に使用されますexchange.IO()設定されている"api"呼び出し要求を拡張するために使用されていることを示します. k 本当 文字列 についてblockChainパラメータは,機能の設定に使用されますexchange.IO()設定されている"eth"この関数は,Ethereumネットワーク上の RPC メソッド呼び出しに使用されていることを示します. ブロックチェーン 本当 文字列 についてrpcMethod呼び出す RPC メソッドを設定するために使用されます.exchange.IO()機能 rpcメソッド 本当 文字列 についてarg呼び出す RPC メソッドのパラメータを指定するために使用されます.argパラメータの種類と数argRPC 方法によって決定されます.rpcMethodパラメーター アルグ 偽り 文字列,数, bool,オブジェクト,配列,関数,null,およびシステムでサポートされる他のすべてのタイプ

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

財布のETHの残高を確認してください.

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

ETHの送金には,{gasPrice: 11, gasLimit: 111, nonce: 111}パラメータ,最後のパラメータに設定されますexchange.IO()特定のニーズに応じて機能します.nonceシステムデフォルトを使用し,または残すgasLimit/gasPrice/nonceシステムデフォルト値をすべてに有効にします

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

問い合わせgasPrice:

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

問い合わせeth_estimateGas:

この2番目のパラメータはexchange.IO()機能する"eth"直接Ethereumノードサーバーに利用可能な RPCメソッドを呼び出すことができます

{@楽しいビッグデシマル} {@楽しいビッグイン}

exchange.IO("コード",...)

についてexchange.IO("encode", ...)データのエンコーディングのために呼び出されます.

についてexchange.IO("encode", ...)暗号化されたデータを返します. 文字列

exchange.IO(k,データフォーマット,...args)exchange.IO(k,アドレス,データ形式)exchange.IO(k,アドレス,データ 形式,... args)

についてkパラメータは,機能の設定に使用されますexchange.IO()設定されている"encode"この関数はデータコーディングに使用される. k 本当 文字列 についてaddressスマートコントラクトのアドレスを設定するために使用されます.exchange.IO("encode", ...)機能, 通過するaddressスマートコントラクトのメソッド呼び出しの暗号化を示します.exchange.IO("encode", ...)機能,もしaddressパラメータが渡されない場合,この関数は指定された型順序をコードするために使用され,機能的に同等である.abi.encodeSolidity- わかった アドレス 偽り 文字列 についてdataFormatパラメータは,暗号化されたデータの方法,タイプ,順序を指定するために使用されます. data 形式 本当 文字列 についてargパラメータは,特定のデータ値を指定するために使用されます.dataFormatパラメーターは,一つ以上あります.argパラメータ,およびargパラメータは,dataFormatパラメータ設定 アルグ 偽り 文字列,数,タプル,配列,およびシステムによってサポートされる他のすべてのタイプ

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

暗号化メソッドを呼び出すunwrapWETH9:

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

暗号化例と同じですabi.encodeSolidity:

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

トゥップルまたはトゥップルを含むタイプ順序のエンコーディングをサポートします. このタイプオーダーは,tuple, bytesだから電話をする時exchange.IO()2つのパラメータを入力します.

    1. トゥープル型に対応する変数:
    
    {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
    
    

    送信されたパラメータは,また,構造とタイプのtuple定義されているようにtypesフォームのパラメータ:tuple(a uint256,b uint8,c address).

    1. 型に対応する変数bytes:
    "0011"
    
function main() {
    var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"]   // ETH address, USDT address
    var ret = exchange.IO("encode", "address[]", path)
    Log("encode: ", ret)
}

配列または配列を含むタイプの連続的なコーディングをサポートします.

についてexchange.IO()この関数は,encode函数呼び出しコードをhex特定の用途については,公開されているプラットフォームを参照してください.Uniswap V3 Trade テンプレート- わかった 暗号化方法がスマートコントラクトを呼び出す場合,対応するABIを最初に登録する必要があります.

exchange.IO"エンコードパック"

についてexchange.IO("encodePacked", ...)この関数は,encodePacked encoding.

についてexchange.IO("encodePacked", ...)この関数は,encodePacked暗号化されたデータ 文字列

exchange.IO(k,データフォーマット,...args)

についてkパラメータは,機能の設定に使用されますexchange.IO()設定されている"encodePacked"この関数がデータに使用されるという意味ですencodePacked暗号化する k 本当 文字列 についてdataFormatパラメータは,種類と順序を指定するために使用されますencodePacked暗号化されたデータ data 形式 本当 文字列 についてargパラメータは,特定のデータ値を指定するために使用されます.dataFormatパラメーターは,一つ以上あります.argパラメータ,およびargパラメータは,dataFormatパラメータ設定 アルグ 本当 文字列,数,タプル,配列,およびシステムによってサポートされる他のすべてのタイプ

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

服用時にUniswap V3交換経路のようなパラメータを通す必要があります.encodePackedコード操作:

exchange.IO("解読",...)

についてexchange.IO("decode", ...)解読に使われる方法で呼び出されます

についてexchange.IO("decode", ...)文字列を返します.dataFormat数値が 1 つ以上ある場合,配列を返します.dataFormatパラメーター array、string について

exchange.IO(k,データ 形式,データ)

についてkパラメータは,機能の設定に使用されますexchange.IO()機能,そしてそれを設定"decode"この関数はデータ解読に使用される. k 本当 文字列 についてdataFormatパラメータは,解読されたデータの種類と順序を指定するために使用されます. data 形式 本当 文字列 についてdataパラメーターは,解読されるデータを設定するために使用されます. データ 本当 文字列

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

逆の操作exchange.IO("encode", ...)機能:

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

この例では,まずencodePacked操作についてpathパラメータ処理exactOutput後で暗号化される必要がある方法呼び出しが必要です.path設定されたパラメータです.encodeについてexactOutputルーティング契約の方法,タイプパラメータが1つだけtuple方法名exactOutputこのコードは:0x09b81346,そして,exchange.IO("decode", ...)解読する方法decodeRaw変数と一致するdataTuple.

データ処理については,exchange.IO()暗号化だけでなく解読もサポートします

exchange.IO("鍵"...)

についてexchange.IO("key", ...)プライベートキーを切り替えるように呼びます

exchange.IO(k,キー)

パラメータk機能を設定するために使用されます.exchange.IO()設定されている"key"この関数はプライベートキーを切り替えるのに使われます k 本当 文字列 についてkeyパラメーターはプライベートキーを設定するために使用されます キー 本当 文字列

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

についてexchange.IO()この機能は,プライベートキーの切り替えをサポートし,複数のウォレットアドレスを操作できます.複数のウォレットアドレスを操作するために,複数の交換オブジェクトを追加することも可能です (参照: {@var/EXCHANGE/exchanges exchanges}).

exchange.IO(アピ)

についてexchange.IO("api", ...)スマートコントラクトのメソッドを呼び出すのに使われます.

についてexchange.IO("api", ...)この関数は"スマートコントラクト"と呼ばれるメソッドの返却値を返します. 文字列,数, bool,オブジェクト,配列,null,およびシステムでサポートされる他のすべてのタイプ

exchange.IO(k,住所,方法)exchange.IO(k,アドレス,方法,... args)exchange.IO(k,アドレス,方法,値,... args)

についてkパラメータは,機能の設定に使用されますexchange.IO()設定されている"api"呼び出し要求を拡張するために使用されていることを示します. k 本当 文字列 についてaddressパラメータはスマートコントラクトのアドレスを指定するために使用されます. アドレス 本当 文字列 についてmethodこのパラメータは,呼び出すスマートコントラクトのメソッドを指定するために使用されます. 方法 本当 文字列 についてvalue送信されるETHの量を設定するために使用されます.stateMutability実行されるスマートコントラクトメソッドの属性はpayableそしてvalueパラメータをパスする必要があります."stateMutability": "payable"ABI から見ることができます.exchange.IO()必要なパラメータを決定します.stateMutability登録されたABIの属性.stateMutability属性はnonpayableそしてvalueパラメータは渡す必要はありません. 価値 偽り 数、文字列 についてargパラメータは,呼び出されるスマートコントラクトのメソッドのパラメータを指定するために使用されます.argパラメータ,およびarg呼び出すためのスマートコントラクトの方法に依存します アルグ 偽り 文字列,数, bool,およびシステムによってサポートされる他のすべてのタイプ

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
}

についてdecimals方法としてconstantERC20 の方法で,ガス消費を発生せず,トークンの精度データをクエリすることができます.decimals方法にはパラメータがない.返却値:トークンの精度データ.

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

についてallowance方法としてconstant特定の契約アドレスに対するトークンの許可された金額をクエリすることができます.allowanceこの方法には2つのパラメータがあります.最初のパラメータはウォレットアドレスで,もう1つは認証アドレスです.返却値:トークンの認証金額です.
owner: 財布の住所,例は文字列ownerに置き換えられ,実際の使用は特定の住所を記入する必要があります.spender: 許可された契約の住所,例は文字列で置き換えられます spender,実際の使用は,特定の住所を記入する必要があります.Uniswap 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 || {})
}

についてmulticallこの方法はconstant方法Uniswap V3複数の方法でトークンを換算するために使用されます についてmulticall方法にはパラメータをパスする様々な方法がある場合,特定の方法を含む ABI をチェックできます.メソッドを呼び出す前に ABI を登録する必要があります.返回値: txid.

具体例についてはmulticall公開されているプラットフォームを参照できます.Uniswap V3 Trade テンプレート

いくつかの詳細は 擬似コードで説明されています


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

ContractV3SwapRouterV2: Uniswap V3のルーター v2のアドレスvalue: 交換取引のトークンはETHでない場合,転送するETHの金額を0に設定します.deadline: deadlineは,このパラメータです.multicall(new Date().getTime() / 1000) + 3600 に設定できる方法で,1時間有効であることを示します.data: dataは,このパラメータです.multicall方法,行なわれる梱包作業のデータ

似たものexchange.IO("api", "eth", "send", "toAddress", toAmount)についてgasLimit/gasPrice/nonce呼び出すときに指定できます.multicall方法について 偽コードを使って説明します


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

パラメータ{gasPrice: 11, gasLimit: 111, nonce: 111}特定の必要に応じて設定することができます.exchange.IO()機能 省略してもいいnonceシステムデフォルト値を使用するgasLimit/gasPrice/nonceシステムデフォルト値をすべてに有効にします

exchange.IO("住所")

についてexchange.IO("address")この関数は, {@var/EXCHANGE exchange} exchange オブジェクトによって設定された財布のアドレスを取得するように呼び出されます.

についてexchange.IO("address")設定されたウォレットアドレスを返します. 文字列

exchange.IO(k)

についてkパラメータは,機能の設定に使用されますexchange.IO()設定されている"address"この関数は設定されたウォレットアドレスを取得するために使用されます. k 本当 文字列

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

exchange.IO("ベース",...)

についてexchange.IO("base", ...)RPCノードアドレスを設定する方法で呼び出されます.

exchange.IO(k アドレス)

についてkパラメータは,機能の設定に使用されますexchange.IO()設定されている"base"この関数は RPC ノードを切り替えるのに使われます. k 本当 文字列 についてaddressこのパラメータは,RPCノードアドレスを設定するために使用されます. アドレス 本当 文字列

function main() {
    var chainRpc = "https://bsc-dataseed.binance.org"
    e.IO("base", chainRpc)    // Switching to BSC chain
}

TA

TA.MACD

についてTA.MACD()計算するために使用されます.指数的な平滑した不類似性と類似性 MACD指標.

返金値がTA.MACD()函数とは2次元配列で,構造は:[DIF, DEA, MACD]- わかった 配列

TA.MACD (インリアル) TA.MACD ((inReal, optInFastPeriod, optInSlowPeriod, optInSignalPeriod) リアル,オプトインファストペリオド,オプトインスローペリオド,オプトインシグナルペリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInFastPeriodパラメーターは,速度の設定に使用されます. optInFastPeriod について 偽り 番号 についてoptInSlowPeriodパラメータは遅い期間を設定するために使用されます. optInSlowPeriod について 偽り 番号 についてoptInSignalPeriodパラメータは信号期間を設定するために使用されます. optInSignalPeriod (シグナル期間) 偽り 番号

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

についてTAFMZ Quantの指標ライブラリ,一般的な指標アルゴリズムに最適化されています.JavaScript, Python, C++言語戦略の呼びかけオープンソースのTAライブラリコード- わかった 標準値はoptInFastPeriod, optInSlowPeriodそしてoptInSignalPeriodパラメータTA.MACD()機能は次のとおりです12, 26そして9.

{@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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest TA.Lowest}, {

TA.KDJ

についてTA.KDJ()計算するために使用されます.ストカスティック指標.

返金値がTA.KDJ()函数とは2次元配列で,構造は:[K, D, J]- わかった 配列

TA.KDJ (インリアル) TA.KDJ ((inReal, 期間, k 期間, d 期間)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてperiodパラメータは,期間 1 を設定するために使用されます. 期間 偽り 番号 についてkPeriodパラメータは,期間2を設定するために使用されます. k 期間 偽り 番号 についてdPeriodパラメータは,期間を設定するために使用されます. d期間 偽り 番号

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

標準値はperiod, kPeriodそしてdPeriodパラメータTA.KDJ()機能は次のとおりです9, 3そして3.

{@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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest TA.Lowest}, {

TA.RSI

についてTA.RSI()計算するために使用されます.強度指標.

返金値がTA.RSI()機能は"次元配列です 配列

TA.RSI (インリアル) TA.RSI ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. optInTimePeriod について 偽り 番号

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

標準値はoptInTimePeriodパラメータTA.RSI()機能は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}, {@fun/TA/TA.OBV}, {@fun/TA/TA.MA}, {@fun/TA/TA.ATR TA.ATR},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest TA.Lowest}, {

TA.ATR

についてTA.ATR()計算するために使用されます.平均的な真価変動指数.

返金値がTA.ATR()機能は"次元配列です 配列

TA.ATR ((インプライスHLC) TA.ATR ((inPriceHLC, optInTimePeriod) について

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. optInTimePeriod について 偽り 番号

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

標準値はoptInTimePeriodパラメータTA.ATR()機能は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}, {@fun/TA/TA.TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest TA.Lowest}, {

TA.OBV

についてTA.OBV()計算するために使用されます.エネルギー潮流指標.

返金値がTA.OBV()機能は"次元配列です 配列

TA.OBV ((インリアル) TA.OBV ((インリアル,インプライスV)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてinPriceVパラメータは,取引金額のデータを指定するために使用されます. inPriceV について 偽り {@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}, {@fun/TA/TA.MA}, ほら,こっちがいいからTA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest TA.Lowest}, {

TA.MA

についてTA.MA()計算するために使用されます.MACD インディケーター.

返金値がTA.MA()機能は"次元配列です 配列

TA.MA(インリアル)TA.MA(inReal, optInTimePeriod) リアルタイム,オプトインタイム

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. optInTimePeriod について 偽り 番号

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

標準値はoptInTimePeriodパラメータTA.MA()機能は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.Hist}, {@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.EMA

についてTA.EMA()計算するために使用されます.指数平均指標.

返金値がTA.EMA()機能は"次元配列です 配列

TA.EMA (インリアル) TA.EMA ((inReal, optInTimePeriod) リアルタイムで

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. optInTimePeriod について 偽り 番号

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

標準値はoptInTimePeriodパラメータTA.EMA()機能は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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},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.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/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.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}

TA.BOLL

についてTA.BOLL()計算するために使用されます.Bollinger Band インディケーター.

返金値がTA.BOLL()函数とは2次元配列で,構造は:[upLine, midLine, downLine]- わかった 配列

TA.BOLL (インリアル) TA.BOLL ((inReal,点,倍数)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてperiodパラメーターは,期間を設定するために使用されます. 期間 偽り 番号 についてmultiplierパラメータは倍数を設定するために使用されます. マルチプリキュア 偽り 番号

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

標準値はperiodそしてmultiplierパラメータTA.BOLL()機能は次のとおりです20そして2.

{@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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.

TA.Alligator

についてTA.Alligator()計算するために使用されます.ワニの指標.

返金値がTA.Alligator()函数とは2次元配列で,構造は:[jawLine, teethLine, lipsLine]- わかった 配列

TA.アリガター (inReal) TA.アリゴーター ((inReal, jaw長さ,歯長さ,唇長さ)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてjawLengthパラメーターは,周期を設定するために使用されます. 長さ 偽り 番号 についてteethLengthパラメーターは歯の期間を設定するために使用されます. 歯 長さ 偽り 番号 についてlipsLength上唇のピリオドを設定するパラメータです. 唇の長さ 偽り 番号

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

標準値はjawLength, teethLengthそしてlipsLengthパラメータTA.Alligator()機能は次のとおりです13, 8そして5.

{@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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/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}

TA.CMF

についてTA.CMF()計算するために使用されます.チャイキン・マネー・フロー・インディケーター.

返金値がTA.CMF()機能は"次元配列です 配列

TA.CMF (インリアル) TA.CMF ((インリアル,インプライスV)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてinPriceVパラメータは,ボリュームデータを指定するために使用されます. inPriceV について 偽り {@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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/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}

TA.Highest

についてTA.Highest()計算するために使用されます.期間の最高価格.

についてTA.Highest()この関数は,現在の Bar を除く,最後の特定の期間の属性の最大値を返します. 番号

TA.最高 (inReal) TA.最高 (実物,周期,アト)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてperiodパラメーターは,期間を設定するために使用されます. 期間 偽り 番号 についてattrパラメータは属性を設定するために使用されます.オプションとして:Open, Close, Low, High, Volume, OpenInterest- わかった アトール 偽り 文字列

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

例えば,TA.Highest(records, 30, "High")周期パラメータが呼び出されれば,period設定されています.0計算するということですBarsK線データからinRealパラメータ: 属性パラメータattr指定されていない場合,K線データinRealパラメータは通常の配列とみなされます.

{@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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.CMF}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA.TA.Lowest TA.Lowest}

TA.Lowest

についてTA.Lowest()計算するために使用されます.最低価格.

についてTA.Lowest()この関数は,現在の Bar を除いて,最後の特定の期間の属性の最小値を返します. 番号

TA.Lowest ((インリアル) TA.最低 (実数,周期,アト)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてperiodパラメーターは,期間を設定するために使用されます. 期間 偽り 番号 についてattrパラメータは属性を設定するために使用されます.オプションとして:Open, Close, Low, High, Volume, OpenInterest- わかった アトール 偽り 文字列

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

例えば,TA.Lowest(records, 30, "Low")周期パラメータが呼び出されれば,period設定されています.0計算するということですBarsK線データからinRealパラメータ: 属性パラメータattr指定されていない場合,K線データinRealパラメータは通常の配列とみなされます. 薬剤の使用についてTA.Highest()そしてTA.Lowest()機能についてC++戦略は,Highest()そしてLowest()2つのパラメータしかありません. K線データではありません.rこの関数で得られるauto r = exchange.GetRecords()呼び出されました 呼び出す必要があるr特定の属性データにパスします.r.Close()決済価格データClose, High, Low, Open, Volumeともかく,r.Close()呼び出し方法

試験の例C++言語戦略

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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@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.TA

TA.SMA

についてTA.SMA()計算するために使用されます.単純な移動平均指標.

返金値がTA.SMA()機能は"次元配列です 配列

TA.SMA (インリアル) TA.SMA ((inReal, optInTimePeriod) リアルで,オプションで

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. optInTimePeriod について 偽り 番号

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

標準値はoptInTimePeriodパラメータTA.SMA()機能は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}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest TA.Lowest}, {

タリブ

talib.CDL2CROWS

についてtalib.CDL2CROWS()計算するために使用されます.2 カラス (K線図 - 2 カラス).

返金値がtalib.CDL2CROWS()この関数は1次元の配列です 配列

タリブ.CDL2CROWS ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDL2CROWS()タリブ図書館のドキュメントでは,次の機能が記述されています.CDL2CROWS(Records[Open,High,Low,Close]) = Array(outInteger)携帯電話の電話はPython言語,通過パラメータは異なっており,上記の記述に基づかなければならない.Records[Open,High,Low,Close].

変数を分割する例records(つまりパラメータ)inPriceOHLC, {@struct/Record Record} 構造の配列をタイプする:Openリスト: Python でrecords.Open. Highリスト:records.HighPythonでLowリスト: Python でrecords.Low. Closeリスト: Python でrecords.Close.

Python 戦略コードで呼び出す:

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

もう一つはtalib指標は同じ方法で記述され,繰り返されません.

talib.CDL3BLACKCROWS

についてtalib.CDL3BLACKCROWS()計算するために使用されます.3つの黒いカラスは (K線図 - 3つの黒いカラスは).

返金値がtalib.CDL3BLACKCROWS()機能は"次元配列です 配列

タリブ.CDL3BLACKCROWS ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDL3BLACKCROWS()タリブ図書館のドキュメントでは,次の機能が記述されています.CDL3BLACKCROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3INSIDE

についてtalib.CDL3INSIDE()計算するために使用されます.3 インサイドアップ/ダウン (K線グラフ: 3 インサイドアップ/ダウン).

返金値がtalib.CDL3INSIDE()機能は"次元配列です 配列

タリブ.CDL3INSIDE ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDL3INSIDE()タリブ図書館のドキュメントでは,次の機能が記述されています.CDL3INSIDE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3LINESTRIKE

についてtalib.CDL3LINESTRIKE()計算するために使用されます.3線ストライク (K線グラフ: 3線ストライク).

返金値がtalib.CDL3LINESTRIKE()機能は"次元配列です 配列

タリブ.CDL3LINESTRIKE (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDL3LINESTRIKE()タリブ図書館のドキュメントでは,次の機能が記述されています.CDL3LINESTRIKE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3OUTSIDE

についてtalib.CDL3OUTSIDE()計算するために使用されます.3 外側上下 (K線図: 3 外側上下).

返金値がtalib.CDL3OUTSIDE()機能は"次元配列です 配列

タリブ.CDL3OUTSIDE ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDL3OUTSIDE()タリブ図書館のドキュメントでは,次の機能が記述されています.CDL3OUTSIDE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3STARSINSOUTH

についてtalib.CDL3STARSINSOUTH()計算するために使用されます.三つ星南 (K線図:三つ星南).

返金値がtalib.CDL3STARSINSOUTH()機能は"次元配列です 配列

タリブ.CDL3STARSINSOUTH ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDL3STARSINSOUTH()タリブ図書館のドキュメントでは,次の機能が記述されています.CDL3STARSINSOUTH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDL3WHITESOLDIERS

についてtalib.CDL3WHITESOLDIERS()計算するために使用されます.3 人 の 白兵 が 前進 し て いる (K 線 の 図: 3 人 の 白兵 が 前進 し て いる).

返金値がtalib.CDL3WHITESOLDIERS()機能は"次元配列です 配列

タリブ.CDL3WHITESOLDIERS ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDL3WHITESOLDIERS()タリブ図書館のドキュメントでは,次の機能が記述されています.CDL3WHITESOLDIERS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLABANDONEDBABY

についてtalib.CDLABANDONEDBABY()計算するために使用されます.捨てられた赤ちゃん (K線図:捨てられた赤ちゃん).

返金値がtalib.CDLABANDONEDBABY()機能は"次元配列です 配列

タリブ.CDLABANDONEDBABY ((インプライスOHLC) タリブ.CDLABANDONEDBABY ((インプライスOHLC,オプトインペネトレーション)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@struct/Record Record} 構造配列 についてoptInPenetrationパラメータは Penetration を設定するために使用され,デフォルト値は 0.3 です. optInPenetration について 偽り 番号

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

についてCDLABANDONEDBABY()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLABANDONEDBABY(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLADVANCEBLOCK

についてtalib.CDLADVANCEBLOCK()計算するために使用されます.アドバンスブロック (K線図: アドバンス).

返金値がtalib.CDLADVANCEBLOCK()この関数は1次元の配列です 配列

タリブ.CDLADVANCEBLOCK ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLADVANCEBLOCK()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLADVANCEBLOCK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLBELTHOLD

についてtalib.CDLBELTHOLD()計算するために使用されます.ベルト保持 (K線図:ベルト保持).

返金値がtalib.CDLBELTHOLD()機能は"次元配列です 配列

タリブ.CDLBELTHOLD (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLBELTHOLD()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLBELTHOLD(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLBREAKAWAY

についてtalib.CDLBREAKAWAY()計算するために使用されます.ブレイクウェイ (K線図: ブレイクウェイ).

返金値がtalib.CDLBREAKAWAY()機能は"次元配列です 配列

タリブ.CDLBBRAKAWAY ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLBREAKAWAY(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCLOSINGMARUBOZU

についてtalib.CDLCLOSINGMARUBOZU()計算するために使用されます.マルボツーの閉幕 (K線図:赤頭で赤脚で閉幕).

返金値がtalib.CDLCLOSINGMARUBOZU()機能は"次元配列です 配列

タリブ.CDLCLOSINGMARUBOZU ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLCLOSINGMARUBOZU()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLCLOSINGMARUBOZU(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCONCEALBABYSWALL

についてtalib.CDLCONCEALBABYSWALL()計算するために使用されます.ベビースロウを隠す (K線図: ベビースロウを隠すパターン).

返金値がtalib.CDLCONCEALBABYSWALL()機能は"次元配列です 配列

タリブ.CDLCONCEALBABYSWALL (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLCONCEALBABYSWALL()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLCONCEALBABYSWALL(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLCOUNTERATTACK

についてtalib.CDLCOUNTERATTACK()計算するために使用されます.逆襲 (K線図:逆襲).

返金値がtalib.CDLCOUNTERATTACK()この関数は1次元の配列です 配列

タリブ.CDL対抗攻撃 (inPriceOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLCOUNTERATTACK()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLCOUNTERATTACK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDARKCLOUDCOVER

についてtalib.CDLDARKCLOUDCOVER()計算するために使用されます.ダーククラウドカバー (K線図:ダーククラウドカバー).

返金値がtalib.CDLDARKCLOUDCOVER()この関数は1次元の配列です 配列

タリブ.CDDARKCLOUDCOVER (インプライスOHLC) タリブ.CDDARKCLOUDCOVER ((インプライスOHLC,オプトインペネトレーション)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@struct/Record Record} 構造配列 についてoptInPenetrationパラメータは Penetration を設定するために使用され,デフォルト値は 0.5 です. optInPenetration について 偽り 番号

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

についてCDLDARKCLOUDCOVER()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLDARKCLOUDCOVER(Records[Open,High,Low,Close],Penetration = 0.5) = Array(outInteger)

talib.CDLDOJI

についてtalib.CDLDOJI()計算するために使用されます.ドジ (K線図: ドジ).

返金値がtalib.CDLDOJI()機能は"次元配列です 配列

タリブ.CDLDOJI ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLDOJI()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDOJISTAR

についてtalib.CDLDOJISTAR()計算するために使用されます.ドジスター (K線図:ドジスター).

返金値がtalib.CDLDOJISTAR()機能は"次元配列です 配列

タリブ.CDLDOJISTAR ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLDOJISTAR()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLDOJISTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLDRAGONFLYDOJI

についてtalib.CDLDRAGONFLYDOJI()計算するために使用されます.ドラゴンフライ・ドジ (K線図: ドラゴンフライ・ドジ).

返金値がtalib.CDLDRAGONFLYDOJI()機能は"次元配列です 配列

タリブ.CDLDRAGONFLYDOJI (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLDRAGONFLYDOJI()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLDRAGONFLYDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLENGULFING

についてtalib.CDLENGULFING()計算するために使用されます.浸透パターン (K線図:浸透).

返金値がtalib.CDLENGULFING()この関数は1次元の配列です 配列

タリブ.CDLENGULFING ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLENGULFING()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLENGULFING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLEVENINGDOJISTAR

についてtalib.CDLEVENINGDOJISTAR()計算するために使用されます.夕日星 (K線図:夕日星).

返金値がtalib.CDLEVENINGDOJISTAR()機能は"次元配列です 配列

タリブ.CDLEVENINGDOJISTAR ((インプライスOHLC) タリブ.CDLEVENINGDOJISTAR ((インプライスOHLC,オプトインペネトレーション)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@struct/Record Record} 構造配列 についてoptInPenetrationパラメータは Penetration を設定するために使用され,デフォルト値は 0.3 です. optInPenetration について 偽り 番号

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

についてCDLEVENINGDOJISTAR()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLEVENINGDOJISTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLEVENINGSTAR

についてtalib.CDLEVENINGSTAR()計算するために使用されます.イブニングスター (K線図: イブニングスター).

返金値がtalib.CDLEVENINGSTAR()機能は"次元配列です 配列

タリブ.CDLEVENINGSTAR ((インプライスOHLC) タリブ.CDLEVENINGSTAR ((インプライスOHLC,オプトインペネトレーション)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@struct/Record Record} 構造配列 についてoptInPenetrationパラメータは Penetration を設定するために使用され,デフォルト値は 0.3 です. optInPenetration について 偽り 番号

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

についてCDLEVENINGSTAR()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLEVENINGSTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLGAPSIDESIDEWHITE

についてtalib.CDLGAPSIDESIDEWHITE()計算するために使用されます.上下間隔の横の白い線 (K線図:上下間隔の横の白い線).

返金値がtalib.CDLGAPSIDESIDEWHITE()機能は"次元配列です 配列

タリブ.CDLGAPSIDESIDEWHITE (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLGAPSIDESIDEWHITE()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLGAPSIDESIDEWHITE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLGRAVESTONEDOJI

についてtalib.CDLGRAVESTONEDOJI()計算するために使用されます.墓石ドジ (K線図:墓石ドジ).

返金値がtalib.CDLGRAVESTONEDOJI()機能は"次元配列です 配列

タリブ.CDL グラベストンドジ (InPriceOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLGRAVESTONEDOJI()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLGRAVESTONEDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHAMMER

についてtalib.CDLHAMMER()計算するために使用されます.ハンマー (K線図: ハンマー).

返金値がtalib.CDLHAMMER()機能は"次元配列です 配列

タリブ.CDLHAMMER ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLHAMMER()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLHAMMER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHANGINGMAN

についてtalib.CDLHANGINGMAN()計算するために使用されます.ハンギングマン (K線図: ハンギングマン).

返金値がtalib.CDLHANGINGMAN()この関数は1次元の配列です 配列

タリブ.CDLHANGINGMAN ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLHANGINGMAN()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLHANGINGMAN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHARAMI

についてtalib.CDLHARAMI()計算するために使用されます.ハラミパターン (K線図:負線と正線).

返金値がtalib.CDLHARAMI()この関数は1次元の配列です 配列

タリブ.CDLHARAMI (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLHARAMI()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLHARAMI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHARAMICROSS

についてtalib.CDLHARAMICROSS()計算するために使用されます.ハラミ・クロス・パターン (K線図:負線と正線を交差する).

返金値がtalib.CDLHARAMICROSS()機能は"次元配列です 配列

タリブ.CDLHARAMICROSS (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLHARAMICROSS()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLHARAMICROSS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIGHWAVE

についてtalib.CDLHIGHWAVE()計算するために使用されます.高波のキャンドル (K線図: 長足のクロス).

返金値がtalib.CDLHIGHWAVE()この関数は1次元の配列です 配列

タリブ.CDLHIGHWAVE ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLHIGHWAVE()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLHIGHWAVE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIKKAKE

についてtalib.CDLHIKKAKE()計算するために使用されます.ヒッカケパターン (K線図:罠).

返金値がtalib.CDLHIKKAKE()この関数は1次元の配列です 配列

タリブ.CDLHIKKAKE ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLHIKKAKE()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLHIKKAKE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHIKKAKEMOD

についてtalib.CDLHIKKAKEMOD()計算するために使用されます.修正されたヒッカケパターン (K線図:修正された罠).

返金値がtalib.CDLHIKKAKEMOD()機能は"次元配列です 配列

タリブ.CDLHIKKAKEMOD ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLHIKKAKEMOD()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLHIKKAKEMOD(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLHOMINGPIGEON

についてtalib.CDLHOMINGPIGEON()計算するために使用されます.ホーミング・ピエゴン (K線図:ピエゴン).

返金値がtalib.CDLHOMINGPIGEON()機能は"次元配列です 配列

タリブ.CDLHOMINGPIGEON (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLHOMINGPIGEON()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLHOMINGPIGEON(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLIDENTICAL3CROWS

についてtalib.CDLIDENTICAL3CROWS()計算するために使用されます.同じ3つのカラスは (K線図:同じ3つのカラスは).

返金値がtalib.CDLIDENTICAL3CROWS()機能は"次元配列です 配列

タリブ.CDIDENTICAL3CROWS (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLIDENTICAL3CROWS()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLIDENTICAL3CROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLINNECK

についてtalib.CDLINNECK()計算するために使用されます.首内パターン (K線グラフ:首の切り口).

返金値がtalib.CDLINNECK()機能は"次元配列です 配列

タリブ.CDLINNECK ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLINNECK()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLINNECK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLINVERTEDHAMMER

についてtalib.CDLINVERTEDHAMMER()計算するために使用されます.逆のハンマー (K線図:逆のハンマー).

返金値がtalib.CDLINVERTEDHAMMER()機能は"次元配列です 配列

タリブ.CD リバーテッドハンマー (InPriceOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLINVERTEDHAMMER()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLINVERTEDHAMMER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLKICKING

についてtalib.CDLKICKING()計算するために使用されます.キック (K線図:キック).

返金値がtalib.CDLKICKING()この関数は1次元の配列です 配列

タリブ.CDL キッキング (InPriceOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLKICKING()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLKICKING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLKICKINGBYLENGTH

についてtalib.CDLKICKINGBYLENGTH()計算するために使用されます.キック - 長いマルーボツーによって決定された雄牛/熊 (K線図:キック・ブル/キック・熊).

返金値がtalib.CDLKICKINGBYLENGTH()機能は"次元配列です 配列

タリブ.CDLKICKINGBYLENGTH (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLKICKINGBYLENGTH()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLKICKINGBYLENGTH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLADDERBOTTOM

についてtalib.CDLLADDERBOTTOM()計算するために使用されます.梯子の底 (K線図:梯子の底).

返金値がtalib.CDLLADDERBOTTOM()機能は"次元配列です 配列

タリブ.CDLLADDERBOTTOM ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLLADDERBOTTOM()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLLADDERBOTTOM(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLONGLEGGEDDOJI

についてtalib.CDLLONGLEGGEDDOJI()計算するために使用されます.長足ドジ (K線図:長足ドジ).

返金値がtalib.CDLLONGLEGGEDDOJI()機能は"次元配列です 配列

タリブ.CDLLONGLEGGEDDOJI (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLLONGLEGGEDDOJI()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLLONGLEGGEDDOJI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLLONGLINE

についてtalib.CDLLONGLINE()計算するために使用されます.ロングラインキャンドル (K線図: ロングライン).

返金値がtalib.CDLLONGLINE()機能は"次元配列です 配列

タリブ.CDLLONGLINE ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLLONGLINE()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLLONGLINE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMARUBOZU

についてtalib.CDLMARUBOZU()計算するために使用されます.マルボズ (K線図:頭と足が裸).

返金値がtalib.CDLMARUBOZU()この関数は1次元の配列です 配列

タリブ.CDLMARUBOZU ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLMARUBOZU()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLMARUBOZU(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMATCHINGLOW

についてtalib.CDLMATCHINGLOW()計算するために使用されます.マッチングロー (K線図:マッチングロー).

返金値がtalib.CDLMATCHINGLOW()機能は"次元配列です 配列

タリブ.CDLMマッチングLOW ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLMATCHINGLOW()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLMATCHINGLOW(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLMATHOLD

についてtalib.CDLMATHOLD()計算するために使用されます.マット・ホール (K線図: マット・ホール).

返金値がtalib.CDLMATHOLD()機能は"次元配列です 配列

タリブ.CDLMATHOLD ((インプライスOHLC) タリブ.CDLMATHOLD ((インプライスOHLC,オプトインペネトレーション)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@struct/Record Record} 構造配列 についてoptInPenetrationこのパラメータはオプションで,上昇/下降傾向線の幅の割合を指定するために使用されます.デフォルト値は0.5です. optInPenetration について 偽り 番号

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

についてCDLMATHOLD()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLMATHOLD(Records[Open,High,Low,Close],Penetration = 0.5) = Array(outInteger)

talib.CDLMORNINGDOJISTAR

についてtalib.CDLMORNINGDOJISTAR()計算するために使用されます.朝のドジ星 (K線図:朝のドジ星).

返金値がtalib.CDLMORNINGDOJISTAR()機能は"次元配列です 配列

タリブ.CD モーニングDOJISTAR (インプライスOHLC) タリブ.CDLMORNINGDOJISTAR ((インプライスOHLC,オプトインペネトレーション)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@struct/Record Record} 構造配列 についてoptInPenetrationこのパラメータは,検証開始価格と固体部分の重複度を示すために使用され,デフォルト値は0.3です. optInPenetration について 偽り 番号

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

についてCDLMORNINGDOJISTAR()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLMORNINGDOJISTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)

talib.CDLMORNINGSTAR

についてtalib.CDLMORNINGSTAR()計算するために使用されます.モーニングスター (K線図:モーニングスター).

返金値がtalib.CDLMORNINGSTAR()機能は"次元配列です 配列

タリブ.CDLMORNINGSTAR ((インプライスOHLC) タリブ.CDLMORNINGSTAR ((インプライスOHLC,オプトインペネトレーション)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@struct/Record Record} 構造配列 についてoptInPenetrationパラメータは,トレンド確認に必要な価格浮動パーセントの限界値で,デフォルト値は0.3で,範囲 [0,1] の値を取る. optInPenetration について 偽り 番号

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

についてCDLMORNINGSTAR()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLMORNINGSTAR(Records[Open,High,Low,Close],Penetration=0.3) = Array(outInteger)

talib.CDLONNECK

についてtalib.CDLONNECK()計算するために使用されます.首上パターン (K線図:首上パターン).

返金値がtalib.CDLONNECK()この関数は1次元の配列です 配列

タリブ.CDLONNECK ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLONNECK()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLONNECK(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLPIERCING

についてtalib.CDLPIERCING()計算するために使用されます.ピアスパターン (K線図:ピアスパターン).

返金値がtalib.CDLPIERCING()この関数は1次元の配列です 配列

タリブ.CDLPIERCING ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLPIERCING()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLPIERCING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLRICKSHAWMAN

についてtalib.CDLRICKSHAWMAN()計算するために使用されます.リクショマン (K線図:リクショマン).

返金値がtalib.CDLRICKSHAWMAN()機能は"次元配列です 配列

タリブ.CDLRICKSHAWMAN (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLRICKSHAWMAN()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLRICKSHAWMAN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLRISEFALL3METHODS

についてtalib.CDLRISEFALL3METHODS()計算するために使用されます.3つの上昇/下落方法 (K線図:上昇/下落の3つの方法).

返金値がtalib.CDLRISEFALL3METHODS()機能は"次元配列です 配列

talib.CDLRISEFALL3METHODS (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLRISEFALL3METHODS()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLRISEFALL3METHODS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSEPARATINGLINES

についてtalib.CDLSEPARATINGLINES()計算するために使用されます.分離線 (K線図: 分離線).

返金値がtalib.CDLSEPARATINGLINES()この関数は1次元の配列です 配列

タリブ.CDLSEPARATINGLINES (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLSEPARATINGLINES()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLSEPARATINGLINES(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSHOOTINGSTAR

についてtalib.CDLSHOOTINGSTAR()計算するために使用されます.射星 (K線図:射星).

返金値がtalib.CDLSHOOTINGSTAR()この関数は1次元の配列です 配列

タリブ.CDSHOOTINGSTAR ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLSHOOTINGSTAR()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLSHOOTINGSTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSHORTLINE

についてtalib.CDLSHORTLINE()計算するために使用されます.ショートラインキャンドル (K線図:ショートライン).

返金値がtalib.CDLSHORTLINE()機能は"次元配列です 配列

タリブ.CDLSショートライン (inPriceOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLSHORTLINE()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLSHORTLINE(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSPINNINGTOP

についてtalib.CDLSPINNINGTOP()計算するために使用されます.スピンニング・トップ (K線図: スピンニング・トップ).

返金値がtalib.CDLSPINNINGTOP()機能は"次元配列です 配列

タリブ.CDLSPINNINGTOP ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLSPINNINGTOP()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLSPINNINGTOP(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSTALLEDPATTERN

についてtalib.CDLSTALLEDPATTERN()計算するために使用されます.止まったパターン (K線図:止まったパターン).

返金値がtalib.CDLSTALLEDPATTERN()機能は"次元配列です 配列

タリブ.CDLSTALLEDPATTERN (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLSTALLEDPATTERN()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLSTALLEDPATTERN(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLSTICKSANDWICH

についてtalib.CDLSTICKSANDWICH()計算するために使用されます.スティック・サンドウィッチ (K線図: スティック・サンドウィッチ).

返金値がtalib.CDLSTICKSANDWICH()この関数は1次元の配列です 配列

タリブ.CDLSTICKSANDWICH (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLSTICKSANDWICH()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLSTICKSANDWICH(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTAKURI

についてtalib.CDLTAKURI()計算するために使用されます.タキュリ (非常に長い下の影線を持つドラゴンフライドージ) (K線図:タキュリ).

返金値がtalib.CDLTAKURI()この関数は1次元の配列です 配列

タリブ.CDLTAKURI ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLTAKURI()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLTAKURI(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTASUKIGAP

についてtalib.CDLTASUKIGAP()計算するために使用されます.タスキギャップ (K線図:タスキギャップ).

返金値がtalib.CDLTASUKIGAP()この関数は1次元の配列です 配列

タリブ.CDLTASUKIGAP ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLTASUKIGAP()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLTASUKIGAP(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTHRUSTING

についてtalib.CDLTHRUSTING()計算するために使用されます.推力パターン (K線図:推力パターン).

返金値がtalib.CDLTHRUSTING()機能は"次元配列です 配列

タリブ.CDLTHRUSTING ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLTHRUSTING()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLTHRUSTING(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLTRISTAR

についてtalib.CDLTRISTAR()計算するために使用されます.トリスターパターン (K線図: トリスターパターン).

返金値がtalib.CDLTRISTAR()機能は"次元配列です 配列

タリブ.CDLTRISTAR ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLTRISTAR()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLTRISTAR(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLUNIQUE3RIVER

についてtalib.CDLUNIQUE3RIVER()計算するために使用されます.ユニーク3川 (K線図:ユニーク3川).

返金値がtalib.CDLUNIQUE3RIVER()機能は"次元配列です 配列

タリブ.CDLUNIQUE3RIVER ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLUNIQUE3RIVER()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLUNIQUE3RIVER(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLUPSIDEGAP2CROWS

についてtalib.CDLUPSIDEGAP2CROWS()計算するために使用されます.上方ギャップ 2 カラス (K線図: 上方ギャップ 2 カラス).

返金値がtalib.CDLUPSIDEGAP2CROWS()機能は"次元配列です 配列

タリブ.CDLUPSIDEGAP2CROWS (インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLUPSIDEGAP2CROWS()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLUPSIDEGAP2CROWS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.CDLXSIDEGAP3METHODS

についてtalib.CDLXSIDEGAP3METHODS()計算するために使用されます.上下差の3つの方法 (K線図:上下差の3つの方法).

返金値がtalib.CDLXSIDEGAP3METHODS()機能は"次元配列です 配列

talib.CDLXSIDEGAP3METHODS ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてCDLXSIDEGAP3METHODS()タリブ図書館のドキュメントでは,次の機能が記述されています.CDLXSIDEGAP3METHODS(Records[Open,High,Low,Close]) = Array(outInteger)

talib.AD

についてtalib.AD()計算するために使用されます.Chaikin A/D Line (ラインストキャスト指標).

返金値がtalib.AD()機能は"次元配列です 配列

talib.AD(PriceHLCVで)

についてinPriceHLCVパラメータはK線データを指定するために使用されます. inPriceHLCV について 本当 {@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);
}

についてAD()タリブ図書館のドキュメントでは,次の機能が記述されています.AD(Records[High,Low,Close,Volume]) = Array(outReal)

talib.ADOSC

についてtalib.ADOSC()計算するために使用されます.チェイキン A/D オシレーター (チェイキン オシレーター).

返金値がtalib.ADOSC()この関数は1次元の配列です 配列

タリブ.ADOSC ((インプライスHLCV) タリブ.ADOSC ((inPriceHLCV, optInFastPeriod, optInSlowPeriod) 価格について

についてinPriceHLCVパラメータはK線データを指定するために使用されます. inPriceHLCV について 本当 {@struct/Record Record} 構造配列 についてoptInFastPeriodパラメーターは,速度の設定に使用されます. optInFastPeriod について 偽り 番号 についてoptInSlowPeriodパラメータは遅い期間を設定するために使用されます. optInSlowPeriod について 偽り 番号

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

についてADOSC()タリブ図書館のドキュメントでは,次の機能が記述されています.ADOSC(Records[High,Low,Close,Volume],Fast Period = 3,Slow Period = 10) = Array(outReal)

talib.OBV

についてtalib.OBV()計算するために使用されます.バランスボリューム (エネルギー潮).

返金値がtalib.OBV()この関数は1次元の配列です 配列

タリブ.OBV (inReal) タリブ.OBV ((インリアル,インプライスV)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてinPriceVパラメータはK線データを指定するために使用されます. inPriceV について 偽り {@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);
}

についてOBV()タリブ図書館のドキュメントでは,次の機能が記述されています.OBV(Records[Close],Records[Volume]) = Array(outReal)

talib.ACOS

についてtalib.ACOS()計算するために使用されます.矢量三角形 ACos (逆のコシノス関数).

返金値がtalib.ACOS()この関数は1次元の配列です 配列

タリブ.ACOS (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてACOS()タリブ図書館のドキュメントでは,次の機能が記述されています.ACOS(Records[Close]) = Array(outReal)

talib.ASIN

についてtalib.ASIN()計算するために使用されます.矢量三角形 ASin (逆正弦関数).

返金値がtalib.ASIN()この関数は1次元の配列です 配列

タリブ.ASIN (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてASIN()タリブ図書館のドキュメントでは,次の機能が記述されています.ASIN(Records[Close]) = Array(outReal)

talib.ATAN

についてtalib.ATAN()計算するために使用されます.矢量三角形 ATan (逆関数関数).

返金値がtalib.ATAN()機能は"次元配列です 配列

タリブ.ATAN (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてATAN()タリブ図書館のドキュメントでは,次の機能が記述されています.ATAN(Records[Close]) = Array(outReal)

talib.CEIL

についてtalib.CEIL()計算するために使用されます.ベクトル上限 (丸める関数).

返金値がtalib.CEIL()この関数は1次元の配列です 配列

タリブ.CEIL (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてCEIL()タリブ図書館のドキュメントでは,次の機能が記述されています.CEIL(Records[Close]) = Array(outReal)

talib.COS

についてtalib.COS()計算するために使用されます.矢量三角関数 Cos (コシナス関数).

返金値がtalib.COS()機能は"次元配列です 配列

タリブ.COS (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてCOS()タリブ図書館のドキュメントでは,次の機能が記述されています.COS(Records[Close]) = Array(outReal)

talib.COSH

についてtalib.COSH()計算するために使用されます.矢量三角形コシュ (ハイパーボリックコシナス値).

返金値がtalib.COSH()この関数は1次元の配列です 配列

タリブ.COSH (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてCOSH()タリブ図書館のドキュメントでは,次の機能が記述されています.COSH(Records[Close]) = Array(outReal)

talib.EXP

についてtalib.EXP()計算するために使用されます.ベクトル算術 Exp (指数関数).

返金値がtalib.EXP()機能は"次元配列です 配列

タリブ.EXP (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてEXP()タリブ図書館のドキュメントでは,次の機能が記述されています.EXP(Records[Close]) = Array(outReal)

talib.FLOOR

についてtalib.FLOOR()計算するために使用されます.ベクトル・フロア (下方から丸める).

返金値がtalib.FLOOR()この関数は1次元の配列です 配列

タリブ・フロア (inReal)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてFLOOR()タリブ図書館のドキュメントでは,次の機能が記述されています.FLOOR(Records[Close]) = Array(outReal)

talib.LN

についてtalib.LN()計算するために使用されます.ベクトルログ自然 (自然対数).

返金値がtalib.LN()この関数は1次元の配列です 配列

タリブ.LN (inReal)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてLN()タリブ図書館のドキュメントでは,次の機能が記述されています.LN(Records[Close]) = Array(outReal)

talib.LOG10

についてtalib.LOG10()計算するために使用されます.ベクトル ログ10 (対数関数).

返金値がtalib.LOG10()この関数は1次元の配列です 配列

タリブ.LOG10 (inReal)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてLOG10()タリブ図書館のドキュメントでは,次の機能が記述されています.LOG10(Records[Close]) = Array(outReal)

talib.SIN

についてtalib.SIN()計算するために使用されます.矢量三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角三角.

返金値がtalib.SIN()この関数は1次元の配列です 配列

タリブ.SIN (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてSIN()タリブ図書館のドキュメントでは,次の機能が記述されています.SIN(Records[Close]) = Array(outReal)

talib.SINH

についてtalib.SINH()計算するために使用されます.矢量三角形シーン (ハイパーボリックシーン関数).

返金値がtalib.SINH()機能は"次元配列です 配列

タリブ・シン (inReal)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてSINH()タリブ図書館のドキュメントでは,次の機能が記述されています.SINH(Records[Close]) = Array(outReal)

talib.SQRT

についてtalib.SQRT()計算するために使用されます.ベクトル平方根 (平方根).

返金値がtalib.SQRT()機能は"次元配列です 配列

タリブ.SQRT (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてSQRT()タリブ図書館のドキュメントでは,次の機能が記述されています.SQRT(Records[Close]) = Array(outReal)

talib.TAN

についてtalib.TAN()計算するために使用されます.ベクトル三角数式タン (タンゲント).

返金値がtalib.TAN()この関数は1次元の配列です 配列

タリブ.TAN (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてTAN()タリブ図書館のドキュメントでは,次の機能が記述されています.TAN(Records[Close]) = Array(outReal)

talib.TANH

についてtalib.TANH()計算するために使用されます.矢量三角関数タン (ハイパーボリック触角関数).

返金値がtalib.TANH()機能は"次元配列です 配列

タリブ.TANH (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてTANH()タリブ図書館のドキュメントでは,次の機能が記述されています.TANH(Records[Close]) = Array(outReal)

talib.MAX

についてtalib.MAX()この関数は,最大値を計算するために使用されます.特定期間.

返金値がtalib.MAX()機能は"次元配列です 配列

タリブ.MAX (インリアル) タリブ.MAX ((インリアル,オプトインタイムペリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてMAX()タリブ図書館のドキュメントでは,次の機能が記述されています.MAX(Records[Close],Time Period = 30) = Array(outReal)

talib.MAXINDEX

についてtalib.MAXINDEX()計算するために使用されます.指定された期間の最高値のインデックス (最大インデックス).

返金値がtalib.MAXINDEX()機能は"次元配列です 配列

タリブ.MAXINDEX ((インリアル) タリブ.MAXINDEX ((inReal, optInTimePeriod) タイムピリオドを選択する)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてMAXINDEX()タリブ図書館のドキュメントでは,次の機能が記述されています.MAXINDEX(Records[Close],Time Period = 30) = Array(outInteger)

talib.MIN

についてtalib.MIN()この関数は,指定された期間の最低値 (最小値) ** を計算するために使用されます.

返金値がtalib.MIN()機能は"次元配列です 配列

タリブ.MIN (インリアル) タリブ.MIN (インリアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてMIN()タリブ図書館のドキュメントでは,次の機能が記述されています.MIN(Records[Close],Time Period = 30) = Array(outReal)

talib.MININDEX

についてtalib.MININDEX()計算するために使用されます.最低値指数 (最低値指数)指定期間について

返金値がtalib.MININDEX()機能は"次元配列です 配列

タリブ.MININDEX (インリアル) タリブ.MININDEX ((inReal, optInTimePeriod) タイムピリオドを選択する)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてMININDEX()タリブ図書館のドキュメントでは,次の機能が記述されています.MININDEX(Records[Close],Time Period = 30) = Array(outInteger)

talib.MINMAX

についてtalib.MINMAX()計算するために使用されます.指定期間における最低値と最高値 (最低値と最大値).

返金値がtalib.MINMAX()この二次元配列の最初の要素は最小値の配列であり,第二の要素は最大値の配列です. 配列

タリブ.MINMAX (インリアル) タリブ.MINMAX (インリアル,オプトインタイムペリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてMINMAX()タリブ図書館のドキュメントでは,次の機能が記述されています.MINMAX(Records[Close],Time Period = 30) = [Array(outMin),Array(outMax)]

talib.MINMAXINDEX

についてtalib.MINMAXINDEX()計算するために使用されます.指定された期間の最低値と最高値 (最低値と最大値) のインデックス.

返金値がtalib.MINMAXINDEX()この二次元配列の最初の要素は最小のインデックス配列で,第二の要素は最大のインデックス配列です. 配列

タリブ.MINMAXINDEX (インリアル) タリブ.MINMAXINDEX ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてMINMAXINDEX()タリブ図書館のドキュメントでは,次の機能が記述されています.MINMAXINDEX(Records[Close],Time Period = 30) = [Array(outMinIdx),Array(outMaxIdx)]

talib.SUM

についてtalib.SUM()計算するために使用されます.概要.

返金値がtalib.SUM()機能は"次元配列です 配列

タリブ.SUM ((inReal) talib.SUM ((inReal, optInTimePeriod) リアル,オプトインタイム

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてSUM()タリブ図書館のドキュメントでは,次の機能が記述されています.SUM(Records[Close],Time Period = 30) = Array(outReal)

talib.HT_DCPERIOD について

についてtalib.HT_DCPERIOD()計算するために使用されます.ヒルバート変換 - 主要周期期 (ヒルバート変換, 主要周期期).

返金値がtalib.HT_DCPERIOD()機能は"次元配列です 配列

タリブ.HT_DCPERIOD (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてHT_DCPERIOD()タリブ図書館のドキュメントでは,次の機能が記述されています.HT_DCPERIOD(Records[Close]) = Array(outReal)

タリブ.HT_DCPHASE

についてtalib.HT_DCPHASE()計算するために使用されます.ヒルバート変換 - 主要サイクル段階 (ヒルバート変換, 主要サイクル段階).

返金値がtalib.HT_DCPHASE()機能は"次元配列です 配列

タリブ.HT_DCPHASE ((インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてHT_DCPHASE()タリブ図書館のドキュメントでは,次の機能が記述されています.HT_DCPHASE(Records[Close]) = Array(outReal)

タリブ.HT_PHASOR

についてtalib.HT_PHASOR()計算するために使用されます.ヒルバート変換 - ファソール構成要素 (ヒルバート変換,相構成要素).

返金値がtalib.HT_PHASOR()この関数は2次元配列です 配列

タリブ.HT_PHASOR (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてHT_PHASOR()タリブ図書館のドキュメントでは,次の機能が記述されています.HT_PHASOR(Records[Close]) = [Array(outInPhase),Array(outQuadrature)]

タリブ.HT_SINE

についてtalib.HT_SINE()計算するために使用されます.ヒルバート変換 - サイヌ波 (ヒルバート変換,サイヌ波).

返金値がtalib.HT_SINE()2次元の配列です 配列

タリブ.HT_SINE (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてHT_SINE()タリブ図書館のドキュメントでは,次の機能が記述されています.HT_SINE(Records[Close]) = [Array(outSine),Array(outLeadSine)]

タリブ.HT_TRENDMODE

についてtalib.HT_TRENDMODE()計算するために使用されます.ヒルベルト変換 - 傾向とサイクルモード.

返金値がtalib.HT_TRENDMODE()機能は"次元配列です 配列

タリブ.HT_TRENDMODE (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてHT_TRENDMODE()タリブ図書館のドキュメントでは,次の機能が記述されています.HT_TRENDMODE(Records[Close]) = Array(outInteger)

talib.ATR

についてtalib.ATR()計算するために使用されます.平均的な実範囲.

返金値がtalib.ATR()この関数は1次元の配列です 配列

タリブ.ATR (inPriceHLC) タリブ.ATR ((インプライスHLC,オプトインタイムピリオド)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてATR()タリブ図書館のドキュメントでは,次の機能が記述されています.ATR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.NATR

についてtalib.NATR()計算するために使用されます.標準化された平均真域.

返金値がtalib.NATR()この関数は1次元の配列です 配列

タリブ.NATR ((インプライスHLC) タリブ.NATR ((インプライスHLC,オプトインタイムピリオド)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてNATR()タリブ図書館のドキュメントでは,次の機能が記述されています.NATR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.TRANGE

についてtalib.TRANGE()計算するために使用されます.真の範囲.

返金値がtalib.TRANGE()機能は"次元配列です 配列

タリブ.TRANGE ((インプライスHLC)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@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);
}

についてTRANGE()タリブ図書館のドキュメントでは,次の機能が記述されています.TRANGE(Records[High,Low,Close]) = Array(outReal)

talib.BBANDS

についてtalib.BBANDS()計算するために使用されます.ボリンジャー・バンド.

返金値がtalib.BBANDS()配列は2次元配列である.配列には,3つの要素が含まれます.上行配列,中行配列,下行配列です. 配列

タリブ.BBANDS (インリアル) タリブ.BBBANDs (リアル,オプトインタイムピリオド) talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp) リアルで,タイムピリオドで,タイムピリオドで talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp, optInNbDevDn) リアル,オプトインタイムピリオド,オプトインNbDevUp,オプトインNbDevDn) talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp, optInNbDevDn, optInMAType) について

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は5です. optInTimePeriod について 偽り 番号 についてoptInNbDevUpこのパラメータは,アップライン倍数を設定するために使用されます. デフォルト値は2です. オプトインNbDevUp 偽り 番号 についてoptInNbDevDnこのパラメータは,下行倍数を設定するために使用されます. デフォルト値は2です. オプトインnbDevDn 偽り 番号 についてoptInMATypeこのパラメータは平均型を設定するために使用され,デフォルト値は0です. optInMAType を選択する 偽り 番号

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

についてBBANDS()タリブ図書館のドキュメントでは,次の機能が記述されています.BBANDS(Records[Close],Time Period = 5,Deviations up = 2,Deviations down = 2,MA Type = 0) = [Array(outRealUpperBand),Array(outRealMiddleBand),Array(outRealLowerBand)]

talib.DEMA

についてtalib.DEMA()計算するために使用されます.2倍指数関数移動平均.

返金値がtalib.DEMA()この関数は1次元の配列です 配列

タリブ.DEMA (インリアル) タリブ.DEMA ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてDEMA()タリブ図書館のドキュメントでは,次の機能が記述されています.DEMA(Records[Close],Time Period = 30) = Array(outReal)

talib.EMA

についてtalib.EMA()計算するために使用されます.指数関数移動平均.

返金値がtalib.EMA()この関数は1次元の配列です 配列

タリブ.EMA (インリアル) タリブ.EMA (inReal, optInTimePeriod) (リアルタイム,オプトインタイム)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてEMA()タリブ図書館のドキュメントでは,次の機能が記述されています.EMA(Records[Close],Time Period = 30) = Array(outReal)

タリブ.HT_TRENDLINE

についてtalib.HT_TRENDLINE()計算するために使用されます.ヒルバート変換 - 即時トレンドライン (ヒルバート変換,即時トレンド).

返金値がtalib.HT_TRENDLINE()機能は"次元配列です 配列

タリブ.HT_TRENDLINE (インリアル)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列

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

についてHT_TRENDLINE()タリブ図書館のドキュメントでは,次の機能が記述されています.HT_TRENDLINE(Records[Close]) = Array(outReal)

talib.KAMA

についてtalib.KAMA()計算するために使用されます.カウフマンの適応移動平均.

返金値がtalib.KAMA()機能は"次元配列です 配列

タリブ.カマ (inReal) タリブ.カマ (inReal, optInTimePeriod)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてKAMA()タリブ図書館のドキュメントでは,次の機能が記述されています.KAMA(Records[Close],Time Period = 30) = Array(outReal)

talib.MA

についてtalib.MA()計算するために使用されます.移動平均.

返金値がtalib.MA()機能は"次元配列です 配列

talib.MA(インリアル)talib.MA(inReal, optInTimePeriod) リアルタイム,オプトインタイムtalib.MA(inReal, optInTimePeriod, optInMAType) この2つのタイプは,

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号 についてoptInMATypeこのパラメータは平均型を設定するために使用され,デフォルト値は0です. optInMAType を選択する 偽り 番号

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

についてMA()タリブ図書館のドキュメントでは,次の機能が記述されています.MA(Records[Close],Time Period = 30,MA Type = 0) = Array(outReal)

talib.MAMA

についてtalib.MAMA()計算するために使用されます.MESA アダプティブ移動平均.

返金値がtalib.MAMA()2次元の配列です 配列

タリブ ママ (inReal) タリブ ママ (inReal, optInFastLimit) タリブ.ママ (inReal, optInFastLimit, optInSlowLimit) オンラインで

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInFastLimitパラメータは,Fast Limit を設定するために使用されます.デフォルト値は0.5です. optInFastLimit を選択する 偽り 番号 についてoptInSlowLimitパラメータはスローリーミットを設定するために使用されます. 既定値は0.05です. optInSlowLimit を選択する 偽り 番号

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

についてMAMA()タリブ図書館のドキュメントでは,次の機能が記述されています.MAMA(Records[Close],Fast Limit = 0.5,Slow Limit = 0.05) = [Array(outMAMA),Array(outFAMA)]

talib.MIDPOINT

についてtalib.MIDPOINT()計算するために使用されます.期間の中点 (中点).

返金値がtalib.MIDPOINT()この関数は1次元の配列です 配列

タリブ.ミッドポイント (inReal) タリブ.ミッドポイント (inReal, optInTimePeriod)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてMIDPOINT()タリブ図書館のドキュメントでは,次の機能が記述されています.MIDPOINT(Records[Close],Time Period = 14) = Array(outReal)

talib.MIDPRICE

についてtalib.MIDPRICE()計算するために使用されます.期間の中間価格 (中間価格).

返金値がtalib.MIDPRICE()この関数は1次元の配列です 配列

タリブ.MIDPRICE ((インプライスHL) タリブ.MIDPRICE (中価格)

についてinPriceHLパラメータはK線データを指定するために使用されます. inPriceHL について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてMIDPRICE()タリブ図書館のドキュメントでは,次の機能が記述されています.MIDPRICE(Records[High,Low],Time Period = 14) = Array(outReal)

talib.SAR

についてtalib.SAR()計算するために使用されます.パラボリック SAR.

返金値がtalib.SAR()機能は"次元配列です 配列

タリブ.SAR (inPriceHL) タリブ.SAR ((インプライスHL,オプトインアクセラレーション) タリブ.SAR ((inPriceHL, optInAcceleration, optInMaximum) 価格で,加速で,最大で

についてinPriceHLパラメータはK線データを指定するために使用されます. inPriceHL について 本当 {@struct/Record Record} 構造配列 についてoptInAccelerationパラメータは加速因子を設定するために使用され,デフォルト値は0.02です. オプトイン加速 偽り 番号 についてoptInMaximumAF 最大値を設定するために使用されるパラメータで,デフォルト値は0.2です. optIn最大 偽り 番号

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

についてSAR()タリブ図書館のドキュメントでは,次の機能が記述されています.SAR(Records[High,Low],Acceleration Factor = 0.02,AF Maximum = 0.2) = Array(outReal)

talib.SAREXT

についてtalib.SAREXT()計算するために使用されます.パラボリック SAR - 拡張 (強化されたパラボリックステアリング).

返金値がtalib.SAREXT()この関数は1次元の配列です 配列

タリブ.SAREXT ((インプライスHL) talib.SAREXT ((inPriceHL, optInStartValue) について talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse) は,この2つの要素を表示しています. 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) 選択してください.このビデオでは,この2つの要素が表示されています. talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong, optInAccelerationInitShort, optInAccelerationShort) 選択してください.このビデオでは,この2つの要素について説明します. talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong, optInAccelerationInitShort, optInAccelerationShort, optInAccelerationMaxShort) 選択してください.このリストは,このリストのリストから選べます.

についてinPriceHLパラメータはK線データを指定するために使用されます. inPriceHL について 本当 {@struct/Record Record} 構造配列 についてoptInStartValueパラメータはスタート値を設定するために使用され,デフォルト値は0です. optInStartValue を選択する 偽り 番号 についてoptInOffsetOnReverseオフセットをリバースに設定するパラメータが使用されます 既定値は0です optInOffsetOnReverse を選択する 偽り 番号 についてoptInAccelerationInitLongAF Init Longを設定するために使用されるパラメータで,デフォルト値は0.02です. オプトInAccelerationInitLong について 偽り 番号 についてoptInAccelerationLongAF Long を設定するパラメータは,デフォルト値は 0.02 です. オプトイン加速長 偽り 番号 についてoptInAccelerationMaxLongAF Max Long を設定するパラメータは,デフォルト値は 0.2 です. オプトイン加速MaxLong 偽り 番号 についてoptInAccelerationInitShortAF Init Short を設定するパラメータで,デフォルト値は 0.02 です. オプトInAccelerationInitShort について 偽り 番号 についてoptInAccelerationShortAF Short を設定するパラメータは,デフォルト値は 0.02 です. オプトインアクセレレーションショート 偽り 番号 についてoptInAccelerationMaxShortAF Max Short を設定するパラメータで,デフォルト値は 0.2 です. optInAccelerationMaxShort 選択する 偽り 番号

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

についてSAREXT()タリブ図書館のドキュメントでは,次の機能が記述されています.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

についてtalib.SMA()計算するために使用されます.単純な移動平均.

返金値がtalib.SMA()機能は"次元配列です 配列

タリブ.SMA (インリアル) タリブ.SMA ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてSMA()タリブ図書館のドキュメントでは,次の機能が記述されています.SMA(Records[Close],Time Period = 30) = Array(outReal)

talib.T3

についてtalib.T3()計算するために使用されます.三倍指数関数移動平均 (T3) (三倍指数関数移動平均).

返金値がtalib.T3()この関数は1次元の配列です 配列

タリブ.T3 (inReal) タリブ.T3 ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド) talib.T3 ((inReal, optInTimePeriod, optInVFactor) について

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は5です. optInTimePeriod について 偽り 番号 についてoptInVFactorパラメータはボリュームファクタを設定するために使用されます.デフォルト値は0.7です. optInVFactor を選択する 偽り 番号

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

についてT3()タリブ図書館のドキュメントでは,次の機能が記述されています.T3(Records[Close],Time Period = 5,Volume Factor = 0.7) = Array(outReal)

talib.TEMA

についてtalib.TEMA()計算するために使用されます.3倍指数関数移動平均.

返金値がtalib.TEMA()この関数は1次元の配列です 配列

タリブ.TEMA (インリアル) タリブ.TEMA ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてTEMA()タリブ図書館のドキュメントでは,次の機能が記述されています.TEMA(Records[Close],Time Period = 30) = Array(outReal)

talib.TRIMA

についてtalib.TRIMA()計算するために使用されます.三角移動平均 (三指数移動平均).

返金値がtalib.TRIMA()この関数は1次元の配列です 配列

タリブ.TRIMA (インリアル) タリブ.TRIMA ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてTRIMA()タリブ図書館のドキュメントでは,次の機能が記述されています.TRIMA(Records[Close],Time Period = 30) = Array(outReal)

talib.WMA

についてtalib.WMA()計算するために使用されます.振込金について.

返金値がtalib.WMA()この関数は1次元の配列です 配列

タリブ.WMA (インリアル) タリブ.WMA ((inReal, optInTimePeriod) リアルタイムで

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてWMA()タリブ図書館のドキュメントでは,次の機能が記述されています.WMA(Records[Close],Time Period = 30) = Array(outReal)

talib.LINEARREG

についてtalib.LINEARREG()計算するために使用されます.線形回帰.

返金値がtalib.LINEARREG()この関数は1次元の配列です 配列

タリブ.LINEARREG (インリアル) talib.LINEARREG ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド) リアル,オプトインタイムピリオド

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてLINEARREG()タリブ図書館のドキュメントでは,次の機能が記述されています.LINEARREG(Records[Close],Time Period = 14) = Array(outReal)

talib.LINEARREG_ANGLE ポイントは

についてtalib.LINEARREG_ANGLE()計算するために使用されます.線形回帰角.

返金値がtalib.LINEARREG_ANGLE()機能は"次元配列です 配列

タリブ.LINEARREG_ANGLE (インリアル) talib.LINEARREG_ANGLE ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてLINEARREG_ANGLE()タリブ図書館のドキュメントでは,次の機能が記述されています.LINEARREG_ANGLE(Records[Close],Time Period = 14) = Array(outReal)

talib.LINEARREG_INTERCEPT チェックリスト

についてtalib.LINEARREG_INTERCEPT()計算するために使用されます.線形回帰インターセプト.

返金値がtalib.LINEARREG_INTERCEPT()機能は"次元配列です 配列

タリブ.LINEARREG_INTERCEPT (インリアル) talib.LINEARREG_INTERCEPT ((inReal, optInTimePeriod) タイムピリオドを選択する)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてLINEARREG_INTERCEPT()タリブ図書館のドキュメントでは,次の機能が記述されています.LINEARREG_INTERCEPT(Records[Close],Time Period = 14) = Array(outReal)

talib.LINEARREG_SLOPE について

についてtalib.LINEARREG_SLOPE()計算するために使用されます.線形回帰傾き.

返金値がtalib.LINEARREG_SLOPE()機能は"次元配列です 配列

タリブ.LINEARREG_SLOPE (インリアル) talib.LINEARREG_SLOPE ((inReal, optInTimePeriod) タイムピリオドを選択する)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてLINEARREG_SLOPE()タリブ図書館のドキュメントでは,次の機能が記述されています.LINEARREG_SLOPE(Records[Close],Time Period = 14) = Array(outReal)

talib.STDDEV

についてtalib.STDDEV()計算するために使用されます.標準偏差.

返金値がtalib.STDDEV()機能は"次元配列です 配列

タリブ.STDDEV (インリアル) タリブ.STDDEV ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド) タリブ.STDDEV ((inReal, optInTimePeriod, optInNbDev) リアル,オプトインタイムペリオド,オプトインNbDev)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は5です. optInTimePeriod について 偽り 番号 についてoptInNbDev偏差を設定するために使用されるパラメータで,デフォルト値は1です. オプトインNbDev 偽り 番号

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

についてSTDDEV()タリブ図書館のドキュメントでは,次の機能が記述されています.STDDEV(Records[Close],Time Period = 5,Deviations = 1) = Array(outReal)

talib.TSF

についてtalib.TSF()計算するために使用されます.タイム シリーズ 予測.

返金値がtalib.TSF()この関数は1次元の配列です 配列

タリブ.TSF (inReal) タリブ.TSF ((inReal, optInTimePeriod) タイムピリオドを選択する)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてTSF()タリブ図書館のドキュメントでは,次の機能が記述されています.TSF(Records[Close],Time Period = 14) = Array(outReal)

talib.VAR

についてtalib.VAR()計算するために使用されます.バランス.

返金値がtalib.VAR()機能は"次元配列です 配列

タリブ.VAR (inReal) talib.VAR ((inReal, optInTimePeriod) リアルタイムで talib.VAR ((inReal, optInTimePeriod, optInNbDev) について

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は5です. optInTimePeriod について 偽り 番号 についてoptInNbDev偏差を設定するために使用されるパラメータで,デフォルト値は1です. オプトインNbDev 偽り 番号

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

についてVAR()タリブ図書館のドキュメントでは,次の機能が記述されています.VAR(Records[Close],Time Period = 5,Deviations = 1) = Array(outReal)

talib.ADX

についてtalib.ADX()計算するために使用されます.平均方向動向指数.

返金値がtalib.ADX()この関数は1次元の配列です 配列

タリブ.ADX ((インプライスHLC) タリブ.ADX (inPriceHLC, optInTimePeriod)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてADX()タリブ図書館のドキュメントでは,次の機能が記述されています.ADX(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.ADXR

についてtalib.ADXR()計算するために使用されます.平均指数 (評価指数).

返金値がtalib.ADXR()この関数は1次元の配列です 配列

タリブ.ADXR ((インプライスHLC) タリブ.ADXR ((inPriceHLC, optInTimePeriod) について

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてADXR()タリブ図書館のドキュメントでは,次の機能が記述されています.ADXR(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.APO

についてtalib.APO()計算するために使用されます.絶対価格オシレーター.

返金値がtalib.APO()機能は"次元配列です 配列

タリブ.APO (インリアル) タリブ.APO ((inReal, optInFastPeriod) リアル,オプトインファストペリオド) talib.APO ((inReal, optInFastPeriod, optInSlowPeriod) リアル,オプトインファストペリオド,オプトインスローペリオド) talib.APO ((inReal, optInFastPeriod, optInSlowPeriod, optInMAType) は,この2つのタイプを表示しています.

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInFastPeriodパラメーターは,速度の期間を設定するために使用され,デフォルト値は12です. optInFastPeriod について 偽り 番号 についてoptInSlowPeriodパラメータは遅い期間を設定するために使用されます デフォルト値は26です optInSlowPeriod について 偽り 番号 についてoptInMATypeこのパラメータは平均型を設定するために使用され,デフォルト値は0です. optInMAType を選択する 偽り 番号

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

についてAPO()タリブ図書館のドキュメントでは,次の機能が記述されています.APO(Records[Close],Fast Period = 12,Slow Period = 26,MA Type = 0) = Array(outReal)

talib.AROON

についてtalib.AROON()計算するために使用されます.アルーン (アルーン指標).

返金値がtalib.AROON()この関数は2次元配列です 配列

タリブ・アルーン (inPriceHL) タリブ・アルーン (inPriceHL, optInTimePeriod)

についてinPriceHLパラメータはK線データを指定するために使用されます. inPriceHL について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてAROON()タリブ図書館のドキュメントでは,次の機能が記述されています.AROON(Records[High,Low],Time Period = 14) = [Array(outAroonDown),Array(outAroonUp)]

talib.AROONOSC

についてtalib.AROONOSC()計算するために使用されます.アルーン振動器.

返金値がtalib.AROONOSC()機能は"次元配列です 配列

タリブ.AROONOSC ((インプライスHL) タリブ.アロノスC (inPriceHl, optInTimePeriod)

についてinPriceHLパラメータはK線データを指定するために使用されます. inPriceHL について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてAROONOSC()タリブ図書館のドキュメントでは,次の機能が記述されています.AROONOSC(Records[High,Low],Time Period = 14) = Array(outReal)

talib.BOP

についてtalib.BOP()計算するために使用されます.権力 の 均衡.

返金値がtalib.BOP()この関数は1次元の配列です 配列

タリブ.BOP ((インプライスOHLC)

についてinPriceOHLCパラメータはK線データを指定するために使用されます. inPriceOHLC について 本当 {@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);
}

についてBOP()タリブ図書館のドキュメントでは,次の機能が記述されています.BOP(Records[Open,High,Low,Close]) = Array(outReal)

talib.CCI

についてtalib.CCI()計算するために使用されます.商品チャネルインデックス (ホメオパシー指標).

返金値がtalib.CCI()この関数は1次元の配列です 配列

タリブ.CCI ((インプライスHLC) talib.CCI ((インプライスHLC,オプトインタイムピリオド)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてCCI()タリブ図書館のドキュメントでは,次の機能が記述されています.CCI(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.CMO

についてtalib.CMO()計算するために使用されます.チャンデ・モメント・オシレーター (CMO).

返金値がtalib.CMO()機能は"次元配列です 配列

タリブ.CMO (インリアル) タリブ.CMO (inReal, optInTimePeriod)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてCMO()タリブ図書館のドキュメントでは,次の機能が記述されています.CMO(Records[Close],Time Period = 14) = Array(outReal)

talib.DX

についてtalib.DX()計算するために使用されます.方向移動指数.

返金値がtalib.DX()機能は"次元配列です 配列

タリブ.DX (inPriceHLC) talib.DX ((inPriceHLC, optInTimePeriod) について

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてDX()タリブ図書館のドキュメントでは,次の機能が記述されています.DX(Records[High,Low,Close],Time Period = 14) = Array(outReal)

talib.MACD

についてtalib.MACD()計算するために使用されます.移動平均の収束/離散 (指数関数的に平滑した移動平均).

返金値がtalib.MACD()2次元の配列です 配列

タリブ.MACD (インリアル) タリブ.MACD ((inReal, optInFastPeriod) について talib.MACD ((inReal, optInFastPeriod, optInSlowPeriod) リアル,オプトインファストペリオド,オプトインスローペリオド) talib.MACD ((inReal, optInFastPeriod, optInSlowPeriod, optInSignalPeriod) リアル,オプトインファストペリオド,オプトインスローペリオド,オプトインシグナルペリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInFastPeriodパラメーターは,速度の期間を設定するために使用され,デフォルト値は12です. optInFastPeriod について 偽り 番号 についてoptInSlowPeriodパラメータは遅い期間を設定するために使用されます デフォルト値は26です optInSlowPeriod について 偽り 番号 についてoptInSignalPeriodパラメータは信号期間を設定するために使用されます 既定値は9です optInSignalPeriod (シグナル期間) 偽り 番号

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

についてMACD()タリブ図書館のドキュメントでは,次の機能が記述されています.MACD(Records[Close],Fast Period = 12,Slow Period = 26,Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]

talib.MACDEXT

についてtalib.MACDEXT()計算するために使用されます.制御可能なMA型MACD.

返金値がtalib.MACDEXT()この関数は2次元配列です 配列

タリブ.マックデックス (inReal) タリブ.マックデックス (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) この2つのタイプは,

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInFastPeriodパラメーターは,速度の期間を設定するために使用され,デフォルト値は12です. optInFastPeriod について 偽り 番号 についてoptInFastMATypeパラメータは,高速平均型を設定するために使用されます. デフォルト値は0です. optInFastMAType を選択する 偽り 番号 についてoptInSlowPeriodパラメータは遅い期間を設定するために使用されます デフォルト値は26です optInSlowPeriod について 偽り 番号 についてoptInSlowMATypeパラメータはスロー・ミニアンタイプを設定するために使用され,デフォルト値は0です. optInSlowMAType を選択する 偽り 番号 についてoptInSignalPeriodパラメータは信号期間を設定するために使用されます 既定値は9です optInSignalPeriod (シグナル期間) 偽り 番号 についてoptInSignalMATypeパラメータは信号の中間値のタイプを設定するために使用されます.デフォルト値は0です. optInSignalMAType を選択する 偽り 番号

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

についてMACDEXT()タリブ図書館のドキュメントでは,次の機能が記述されています.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

についてtalib.MACDFIX()計算するために使用されます.移動平均収束/離散修正 12/26.

返金値がtalib.MACDFIX()この関数は2次元配列です 配列

タリブ.MACDFIX (インリアル) タリブ.MACDFIX ((インリアル,オプトインシグナルPeriod)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInSignalPeriodパラメータは信号期間を設定するために使用されます 既定値は9です optInSignalPeriod (シグナル期間) 偽り 番号

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

についてMACDFIX()タリブ図書館のドキュメントでは,次の機能が記述されています.MACDFIX(Records[Close],Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]

talib.MFI

についてtalib.MFI()計算するために使用されます.貨幣流量指数.

返金値がtalib.MFI()この関数は1次元の配列です 配列

talib.MFI ((インプライスHLCV) talib.MFI ((inPriceHLCV, optInTimePeriod) について

についてinPriceHLCVパラメータはK線データを指定するために使用されます. inPriceHLCV について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてMFI()タリブ図書館のドキュメントでは,次の機能が記述されています.MFI(Records[High,Low,Close,Volume],Time Period = 14) = Array(outReal)

タリブ.MINUS_DI

についてtalib.MINUS_DI()計算するために使用されます.マイナス方向指標 (マイナス指標).

返金値がtalib.MINUS_DI()この関数は1次元の配列です 配列

タリブ.MINUS_DI ((インプライスHLC) talib.MINUS_DI ((inPriceHLC, optInTimePeriod) 価格について

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてMINUS_DI()タリブ図書館のドキュメントでは,次の機能が記述されています.MINUS_DI(Records[High,Low,Close],Time Period = 14) = Array(outReal)

タリブ.MINUS_DM

についてtalib.MINUS_DM()計算するために使用されます.マイナス方向移動 (否定的な動き).

返金値がtalib.MINUS_DM()この関数は1次元の配列です 配列

タリブ.MINUS_DM ((インプライスHL) talib.MINUS_DM ((インプライスHL,オプトインタイムPeriod)

についてinPriceHLパラメータはK線データを指定するために使用されます. inPriceHL について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてMINUS_DM()タリブ図書館のドキュメントでは,次の機能が記述されています.MINUS_DM(Records[High,Low],Time Period = 14) = Array(outReal)

talib.MOM

についてtalib.MOM()計算するために使用されます.勢い.

返金値がtalib.MOM()この関数は1次元の配列です 配列

タリブ.マム (inReal) タリブ.マム (inReal, optInTimePeriod)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は10です. optInTimePeriod について 偽り 番号

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

についてMOM()タリブ図書館のドキュメントでは,次の機能が記述されています.MOM(Records[Close],Time Period = 10) = Array(outReal)

タリブ

についてtalib.PLUS_DI()計算するために使用されます.プラス方向指示.

返金値がtalib.PLUS_DI()機能は"次元配列です 配列

タリブ.PLUS_DI (インプライスHLC) talib.PLUS_DI ((inPriceHLC, optInTimePeriod) 価格について

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてPLUS_DI()タリブ図書館のドキュメントでは,次の機能が記述されています.PLUS_DI(Records[High,Low,Close],Time Period = 14) = Array(outReal)

タリブ.PLUS_DM

についてtalib.PLUS_DM()計算するために使用されます.プラス方向移動.

返金値がtalib.PLUS_DM()この関数は1次元の配列です 配列

タリブ.PLUS_DM ((インプライスHL) talib.PLUS_DM ((inPriceHL, optInTimePeriod) 価格について

についてinPriceHLパラメータはK線データを指定するために使用されます. inPriceHL について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてPLUS_DM()タリブ図書館のドキュメントでは,次の機能が記述されています.PLUS_DM(Records[High,Low],Time Period = 14) = Array(outReal)

talib.PPO

についてtalib.PPO()計算するために使用されます.% 価格オシレーター.

返金値がtalib.PPO()この関数は1次元の配列です 配列

タリブ.PPO (インリアル) タリブ.PPO ((inReal, optInFastPeriod) リアル,オプトインファストペリオド) タリブ.PPO ((inReal, optInFastPeriod, optInSlowPeriod) リアル,オプトインファストペリオド,オプトインスローペリオド) talib.PPO ((inReal, optInFastPeriod, optInSlowPeriod, optInMAType) について

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInFastPeriodパラメーターは,速度の期間を設定するために使用され,デフォルト値は12です. optInFastPeriod について 偽り 番号 についてoptInSlowPeriodパラメータは遅い期間を設定するために使用されます デフォルト値は26です optInSlowPeriod について 偽り 番号 についてoptInMATypeこのパラメータは平均型を設定するために使用され,デフォルト値は0です. optInMAType を選択する 偽り 番号

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

についてPPO()タリブ図書館のドキュメントでは,次の機能が記述されています.PPO(Records[Close],Fast Period = 12,Slow Period = 26,MA Type = 0) = Array(outReal)

talib.ROC

についてtalib.ROC()計算するために使用されます.変化率: ((価格/前価格) -1) *100 (変化率指標).

返金値がtalib.ROC()この関数は1次元の配列です 配列

タリブ.ROC ((インリアル) タリブ.ROC ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は10です. optInTimePeriod について 偽り 番号

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

についてROC()タリブ図書館のドキュメントでは,次の機能が記述されています.ROC(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCP

についてtalib.ROCP()計算するために使用されます.変化率 パーセント: (価格前Price) /prevPrice (価格変化率).

返金値がtalib.ROCP()機能は"次元配列です 配列

タリブ.ROCP (インリアル) タリブ.ROCP ((inReal, optInTimePeriod) タイムピリオドを選択する

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は10です. optInTimePeriod について 偽り 番号

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

についてROCP()タリブ図書館のドキュメントでは,次の機能が記述されています.ROCP(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCR

についてtalib.ROCR()計算するために使用されます.変化率比: (価格/前価格) (価格変化比).

返金値がtalib.ROCR()この関数は1次元の配列です 配列

タリブ.ROCR (インリアル) タリブ.ROCR ((inReal, optInTimePeriod) リアルタイムで

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は10です. optInTimePeriod について 偽り 番号

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

についてROCR()タリブ図書館のドキュメントでは,次の機能が記述されています.ROCR(Records[Close],Time Period = 10) = Array(outReal)

talib.ROCR100

についてtalib.ROCR100()計算するために使用されます.変化率比100スケール: (価格/prevPrice) *100 (価格変化比).

返金値がtalib.ROCR100()機能は"次元配列です 配列

タリブ.ROCR100 (インリアル) タリブ.ROCR100 ((inReal, optInTimePeriod) リアルタイムで

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は10です. optInTimePeriod について 偽り 番号

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

についてROCR100()タリブ図書館のドキュメントでは,次の機能が記述されています.ROCR100(Records[Close],Time Period = 10) = Array(outReal)

talib.RSI

についてtalib.RSI()計算するために使用されます.相対強度指数.

返金値がtalib.RSI()この関数は1次元の配列です 配列

タリブ.RSI (インリアル) talib.RSI ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてRSI()タリブ図書館のドキュメントでは,次の機能が記述されています.RSI(Records[Close],Time Period = 14) = Array(outReal)

talib.STOCH

についてtalib.STOCH()計算するために使用されます.ストカスティック (STOCH指標).

返金値がtalib.STOCH()この関数は2次元配列です 配列

タリブ.ストック (inPriceHLC) talib.STOCH ((inPriceHLC, optInFastK_Period) ストック (inPriceHLC, optInFastK_Period) ストック (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) は,この2つの要素を表示しています.

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInFastK_PeriodFast-K 期間を設定するパラメータで,デフォルト値は 5 です. optInFastK_Period を選択する 偽り 番号 についてoptInSlowK_PeriodこのパラメータはSlow-K周期を設定するために使用され,デフォルト値は3です. optInSlowK_Period を選択する 偽り 番号 についてoptInSlowK_MATypeパラメータはSlow-K平均型を設定するために使用され,デフォルト値は0です. optInSlowK_MAType を選択する 偽り 番号 についてoptInSlowD_PeriodこのパラメータはSlow-D期間を設定するために使用され,デフォルト値は3です. optInSlowD_Period を選択する 偽り 番号 についてoptInSlowD_MATypeこのパラメータはSlow-D平均型を設定するために使用されます.デフォルト値は0です. optInSlowD_MAType を選択する 偽り 番号

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

についてSTOCH()タリブ図書館のドキュメントでは,次の機能が記述されています.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

についてtalib.STOCHF()計算するために使用されます.ストキャスティック・ファスト (速度の高いSTOCH指標).

返金値がtalib.STOCHF()この関数は2次元配列です 配列

タリブ.STOCHF ((インプライスHLC) talib.STOCHF ((inPriceHLC, optInFastK_Period) について talib.STOCHF ((inPriceHLC, optInFastK_Period, optInFastD_Period) について talib.STOCHF ((inPriceHLC, optInFastK_Period, optInFastD_Period, optInFastD_MAType) について

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInFastK_PeriodFast-K 期間を設定するパラメータで,デフォルト値は 5 です. optInFastK_Period を選択する 偽り 番号 についてoptInFastD_PeriodFast-D 期間を設定するパラメータは 3 です optInFastD_Period を選択する 偽り 番号 についてoptInFastD_MATypeパラメータはFast-D平均型を設定するために使用され,デフォルト値は0です. optInFastD_MAType について 偽り 番号

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

についてSTOCHF()タリブ図書館のドキュメントでは,次の機能が記述されています.STOCHF(Records[High,Low,Close],Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]

talib.STOCHRSI

についてtalib.STOCHRSI()計算するために使用されます.ストカスティック相対強度指数.

返金値がtalib.STOCHRSI()2次元の配列です 配列

タリブ・ストックルシ (inReal) タリブ.STOCHRSI (inReal, optInTimePeriod) (リアル,オプトインタイムピリオド) talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period) リアルタイム,オプトインタイムピリオド,オプトインファストK_ピリオド) talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period, optInFastD_Period) について talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period, optInFastD_Period, optInFastD_MAType) について

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号 についてoptInFastK_PeriodFast-K 期間を設定するパラメータで,デフォルト値は 5 です. optInFastK_Period を選択する 偽り 番号 についてoptInFastD_PeriodFast-D 期間を設定するパラメータは 3 です optInFastD_Period を選択する 偽り 番号 についてoptInFastD_MATypeパラメータはFast-D平均型を設定するために使用され,デフォルト値は0です. optInFastD_MAType について 偽り 番号

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

についてSTOCHRSI()タリブ図書館のドキュメントでは,次の機能が記述されています.STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]

talib.TRIX

についてtalib.TRIX()計算するために使用されます.1日間の変化率 (ROC) の3回間スムーズEMA.

返金値がtalib.TRIX()機能は"次元配列です 配列

タリブ.TRIX (インリアル) タリブ.TRIX ((inReal, optInTimePeriod) リアル,オプトインタイムピリオド)

についてinRealパラメータはK線データを指定するために使用されます. リアル 本当 {@struct/Record Record} 構造配列,数値配列 についてoptInTimePeriodパラメータは,期間を設定するために使用されます. デフォルト値は30です. optInTimePeriod について 偽り 番号

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

についてTRIX()タリブ図書館のドキュメントでは,次の機能が記述されています.TRIX(Records[Close],Time Period = 30) = Array(outReal)

talib.ULTOSC

についてtalib.ULTOSC()計算するために使用されます.究極のオシレーター.

返金値がtalib.ULTOSC()この関数は1次元の配列です 配列

タリブ.ULTOSC ((インプライスHLC) タリブ.ULTOSC ((インプライスHLC,オプトインタイムPeriod1) talib.ULTOSC ((inPriceHLC, optInTimePeriod1, optInTimePeriod2) 価格について タリブ.ULTOSC ((inPriceHLC, optInTimePeriod1, optInTimePeriod2, optInTimePeriod3)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriod1パラメータが最初の周期を設定するために使用され,デフォルト値は7です. optInTimePeriod1 について 偽り 番号 についてoptInTimePeriod2このパラメータは第2周期を設定するために使用され,デフォルト値は14です. optInTimePeriod2 について 偽り 番号 についてoptInTimePeriod3このパラメータは第3周期を設定するために使用され,デフォルト値は28です. optInTimePeriod3 について 偽り 番号

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

についてULTOSC()タリブ図書館のドキュメントでは,次の機能が記述されています.ULTOSC(Records[High,Low,Close],First Period = 7,Second Period = 14,Third Period = 28) = Array(outReal)

talib.WILLR

についてtalib.WILLR()計算するために使用されます.ウィリアムズ %R.

返金値がtalib.WILLR()機能は"次元配列です 配列

タリブ.WILLR ((インプライスHLC) タリブ.WILLR ((inPriceHLC, optInTimePeriod) タイムピリオドを選択する)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@struct/Record Record} 構造配列 についてoptInTimePeriodパラメーターは,期間を設定するために使用されます. デフォルト値は14です. optInTimePeriod について 偽り 番号

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

についてAVGPRICE()タリブ図書館のドキュメントでは,次の機能が記述されています.AVGPRICE(Records[Open,High,Low,Close]) = Array(outReal)

talib.MEDPRICE

についてtalib.MEDPRICE()計算するために使用されます.中間価格.

返金値がtalib.MEDPRICE()この関数は1次元の配列です 配列

タリブ.MEDPRICE ((インプライスHL)

についてinPriceHLパラメータはK線データを指定するために使用されます. inPriceHL について 本当 {@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);
}

についてMEDPRICE()タリブ図書館のドキュメントでは,次の機能が記述されています.MEDPRICE(Records[High,Low]) = Array(outReal)

talib.TYPPRICE

についてtalib.TYPPRICE()計算するために使用されます.典型的な価格.

返金値がtalib.TYPPRICE()この関数は1次元の配列です 配列

タリブ.TYPPRICE ((インプライスHLC)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@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);
}

についてTYPPRICE()タリブ図書館のドキュメントでは,次の機能が記述されています.TYPPRICE(Records[High,Low,Close]) = Array(outReal)

talib.WCLPRICE

についてtalib.WCLPRICE()計算するために使用されます.重要度の高い閉店価格.

返金値がtalib.WCLPRICE()この関数は1次元の配列です 配列

タリブ.WCLPRICE ((インプライスHLC)

についてinPriceHLCパラメータはK線データを指定するために使用されます. inPriceHLC について 本当 {@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);
}

についてWCLPRICE()タリブ図書館のドキュメントでは,次の機能が記述されています.WCLPRICE(Records[High,Low,Close]) = Array(outReal)

構造