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

FMZ API インストラクション

作者: リン・ハーンゼロ, 作成日:2020年4月20日 10:19:00, 更新日:2023年4月12日 14:44:56

残りは削除します ログリセット ((10)
}


```Python
def main():
    LogReset(10)
void main() {
    LogReset(10);
}

ログバキューム

LogVacuum()呼んだ後LogReset()ログをクリアする機能,SQLiteデータを削除する際には,この関数には返される値はありません. その理由はSQLiteデータを削除するときに占有するスペースを回収しないので,実行する必要がありますVACUUMテーブルを掃除し,スペースを解放する.この関数を呼び出すと,ファイル移動操作は大きな遅延で発生します.適切な時間間隔で呼び出すことが推奨されます.

市場コート API

主な市場インターフェース機能は:

機能名 記述
GetTicker をインストールする チェック引数を取得する
GetRecords を取得する K線データを取得
GetDepth を取得する 注文簿データ (注文深度データ) を取得する
GetTrades は 最新の市場取引記録を取得

次の関数を呼び出すことができます.exchangeまたはexchanges[0]機能などexchange.GetTicker();またはexchanges[0].GetTicker();, 現在の取引ペアの市場コートと設定契約を返します.

ネットワークアクセスで API 関数を呼び出すための重要なヒント:プラットフォームインターフェースにアクセスする API 機能 (例えばexchange.GetTicker(), exchange.Buy(Price, Amount), exchange.CancelOrder(Id)これらの関数への呼び出しに対して,故障容認処理を行う必要があります. 例えば:exchange.GetTicker()プラットフォームサーバの問題やネットワーク伝送の問題などにより,市場データを取得するための機能が,exchange.GetTicker()機能はnull返される値が,exchange.GetTicker()障害耐性処理で処理しなければならない.

返信されたデータexchange.GetTicker()次のコードの機能は,ticker変数で,我々は使用する前に欠陥容量に対処する必要がありますticker variable.

function main() {
    var ticker = exchange.GetTicker()
    if(!ticker){
        // Recall once, or use other processing logic
        ticker = exchange.GetTicker()
    }
}
def main():
    ticker = exchange.GetTicker()
    if not ticker:
        ticker = exchange.GetTicker()
void main() {
    auto ticker = exchange.GetTicker();
    if(!ticker.Valid) {
        ticker = exchange.GetTicker();
        Log("Test");
    }
}

戦略の故障耐性性能試験のために,FMZは特にユニークな障害耐性モードバックテスト. バックテストシステムは,設定されたパラメータに従ってネットワークにアクセスするときに発生するいくつかのAPIコールをランダムに返し,いくつかの失敗した呼び出しの返却値を返します. ボットでプログラムの強度を迅速にテストできます. 戦略編集ページのバックテストシステムページに切り替えて,逆の三角形右側にあるドロップダウンコントロールで Start Backtestボタンをクリックすると Backtest Fault Tolerantボタンが表示されます

交換する.GetTicker()

exchange.GetTicker()現行の取引ペアと契約の現在の市場コートを得ます.Ticker構造について バックテストシステムでは,Ticker返されたデータexchange.GetTicker()機能HighそしてLow仮想通貨は,ボット内の現在の時から取られたシミュレーション値である. 仮想通貨は,取引所によって定義された特定の期間の最高価格と最低価格です.Tick interface.

function main(){
    var ticker = exchange.GetTicker()
    /*
        The platform interface may not be accessible due to network problems (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, ticker is null, when accessing ticker. When it is "High", it will cause an error; so when testing, ensure that you can access the platform interface
    */
    Log("High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Volume:", ticker.Volume)
}
def main():
    ticker = exchange.GetTicker()
    Log("High:", ticker["High"], "Low:", ticker["Low"], "Sell:", ticker["Sell"], "Buy:", ticker["Buy"], "Last:", ticker["Last"], "Volume:", ticker["Volume"])
void main() {
    auto ticker = exchange.GetTicker();
    Log("High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Volume:", ticker.Volume);
}

バックテストではなく,Info返却値の属性exchange.GetTicker()この関数は,インターフェースが呼び出される時に返される元のデータを保存します.

交換する.GetDepth ((()

exchange.GetDepth()現行の取引ペアと契約の交換オーダーブックデータを取得します.返済値:Depth structure.

Depth構造は2つの構造の配列を含みます.Asks[]そしてBids[], AsksそしてBids次の構造変数を含みます.

データタイプ 変数名 記述
番号 価格 価格
番号 総額

このコードを書きましょう. このコードを書き換えると,

function main(){
    var depth = exchange.GetDepth()
    /*
       The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
       At this time, depth is null. When accessing depth.Asks[1].Price, it will cause an error; so when testing, ensure that you can access the platform interface
    */
    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);
}

交換.GetTrades (ゲットトレード)

exchange.GetTrades()プラットフォームの取引履歴 (あなた自身のものではない) を取得します.Tradestructure array. いくつかの取引所はそれをサポートしません. 返される特定のデータは,特定の状況に応じて,範囲内の取引記録に依存します. 各要素の時間配列は,各要素のデータ配列と同じである.exchange.GetRecordsこの数列の最後の要素は 現在の時間に近いデータです

// In the simulated backtest, the data is empty; to have a trading history, there must be a real bot running
function main(){
    var trades = exchange.GetTrades()
    /*
        The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, "trades" is null. When accessing trades[0].Id, it will cause an error; so when testing, ensure that you can access the platform 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);
}

交換.GetRecords (取得記録)

exchange.GetRecords(Period)ボットを作成するときに指定されます. パラメータを指定する場合は,exchange.GetRecords()この関数が呼び出された場合,得られるデータはパラメータ期間に対応するK線データになります.指定されたパラメータがない場合は,ボットパラメータに設定されたK線期間またはバックテストページに設定されたK線期間に従ってK線データが返されます.

パラメーターPeriod:

  • M1 期間: 1分を表示する
  • M5 期間: 5分を意味する
  • M15 期間: 15分を意味する
  • 期間_M30: 30分を意味します
  • H1 期間: 1時間
  • 期間_D1: 1日について パラメータ値Period上記に定義された標準周期のみを通過できるが,秒単位で数字を通過することもできる.

返済する値exchange.GetRecords(Period)機能: 返される値は,Record蓄積されたK線バーの上限は,exchange.SetMaxBarLen関数設定. 設定されていない場合のデフォルト上限は5000K線バーである. K線バー蓄積制限に達すると,K線バーを追加し,最早のK線バーを削除することによって更新される (例えば,キューイン/アウト). いくつかの取引所はK線インターフェースを提供していないため,ドーカーはK線を生成するためにリアルタイムで市場取引記録データを収集する.

K線バーの数GetRecordsこの関数は,最初の呼び出しです.

  • バックテストの開始時点の最初の1000のK線バーは,バックテストシステムで初期K線データとして事前に採取される.
  • リアルボットで取得できるKラインバーの特定の数は,取引所のKラインインターフェースで取得できる最大量のデータに基づいています.

についてexchange.GetRecords(Period)ロボットとバックテスト仮想通貨パラメーターPeriod秒の数です 例えば:

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

設定Periodパラメータ5は5秒間でK線データを要求する. もしPeriodパラメータが60で均等に分割されていない場合 (つまり,表示された期間は利用できない分間の期間です),システムの底層は,GetTrades取引記録のデータを取得し,必要なK線データを合成する. もしPeriodパラメーターを均等に60で割ると,必要なK線データは最低1分間のK線データを用いることで合成されます (可能な限り必要なK線データを合成するためにより長い期間を使用します).

function main(){
    var records = exchange.GetRecords(PERIOD_H1)
    /*
        The platform interface may not be accessible due to network reasons (even if the device's docker program can open the platform website, the API may not be accessible)
        At this time, "records" is null. When accessing records[0].Time, it will cause an error; so when testing, ensure that you can access the platform 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], "Current K-line (latest)", 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 is, Time:", records[1]["Time"], "Close:", records[1]["Close"])
    Log("Current K-line (latest)", records[-1], "Current K-line (latest)", 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 is, Time:", records[1].Time, "Close:", records[1].Close);
    Log("Current K-line (latest)", records[records.size() - 1], "Current K-line (latest)", records[records.size() - 2]);
}

exchange.GetRecords()この関数は,K線データを取得するための2つの条件を持っています.

  • 交換はK線データインターフェースを提供します.この場合,取得されたデータは交換によって直接返されるデータです.

  • 取引所はK線データインターフェイスを提供していない. FMZドッカープログラムは,戦略プログラムが呼び出すたびに取引所の最新の取引記録を取得exchange.GetRecords()つまり,それはexchange.GetTrades()データを取得し,K線データを合成する機能です.

システム内のシミュレーションレベルのバックテストは,基となるK線期(バックテストシステムがバックテストのレベルをシミュレートするとき,対応するK線データは,セットに従ってティックデータを生成するために使用されます.基となるK線期戦略で得られたK線データの期間が基となるK線期なぜなら,シミュレーションレベルのバックテストでは,各期間のK線データは,バックテストシステム内の基となるK線期に対応するK線データによって合成されるからです.

中へcppK線データを構築する必要がある場合は,次のコード例があります.

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

交換.GetPeriod (取得期間)

についてexchange.GetPeriod()FMZ プラットフォームの Web ページに設定された K ライン 期間を返します.バックテストそしてロボット返した値は秒単位で整数です.返した値は数値型です.

function main() {
    // For example, in the backtest and bot, set the K-line period on the website page of FMZ platform to 1 hour
    var period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hour")
}
def main():
    period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hour")
void main() {
    auto period = exchange.GetPeriod();
    Log("K-line period:", period / (60 * 60.0), "hour");
}

交換する.SetMaxBarLen ((Len)

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

  • K線棒 (BAR) の数に影響する.
  • K線棒 (BAR) の上限に影響を与える.
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]);
}

交換する.GetRawJSON()

exchange.GetRawJSON()最後の文字列で返された原始コンテンツ (文字列) を返します.RESTrequest, を使ってデータを自分で解析できます. 返却値:文字列タイプ,暗号通貨のライブ取引環境でのみ有効です. バックテストは機能をサポートしません. 戦略についてcpp言語は機能をサポートしません.

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++ doe not support "GetRawJSON" function
    Log(obj);
}

エクスチェンジ.GetRate ((()

exchange.GetRate()交換で現在使用されている通貨と現在表示されている価格通貨の為替レートを返します.返される値は1で,為替レートの変換が無効であることを示します.返される値は数値型です.

注記:

  • もしexchange.SetRate()交換レートを設定するために呼び出されていなかった場合,交換レートの値が返されるexchange.GetRate()デフォルトでは 1 です.つまり,現在表示されている為替レートの変換は交換されていません.
  • もしexchange.SetRate()通貨レートの値を設定するために使用されたもの,例えば,exchange.SetRate(7)取引プラットフォームの流通通貨を表す現在の交換対象の価格情報,例えば,報じ,深さ,注文価格など,変換のために以前に設定された為替レート7に掛けられます.
  • もしexchange価格設定通貨としてUSDを交換するexchange.SetRate(7)この時点で,使用して得られる為替レートの値は,exchange.GetRate()7 になります.

交換する.USDCNYを入手する.

exchange.GetUSDCNY()最新の米ドル為替レートを返します (データソースはyahoo) 返される値は:数値型.

exchange.SetData ((Key, Value) について

についてexchange.SetData(Key, Value)この関数は,戦略が実行されている時にロードされたデータを設定するために使用されます. これは,経済指標,業界データ,関連するインデックスなどである可能性があります. 取引戦略のためのすべての定量化可能な情報を定量化するために使用され,バックテストシステムでの使用もサポートできます.

呼び出し方法exchange.SetData(Key, Value)機能:

  • 戦略に直接データを書き込む データの形式は,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);
        }
    }
    

    上記テストコードを実行すると,図のように,対応するデータが対応する時に得られます.

    img

    タイムスタンプの対応時間15796224000002020-01-22 00: 00: 00戦略プログラムがこの時間後に実行される場合,次のデータタイムスタンプの前に1579708800000つまり,その前に2020-01-23 00: 00: 00呼んでexchange.GetData(Source)データを取得する機能です.[1579622400000, 123]プログラムが実行され 時が変化するにつれ データを少しずつ取得します

  • 外部リンクを通じてデータを要求する

    要求されたデータ形式

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

    どこにschema読み込まれたデータのメインボディ内の各レコードのデータフォーマットです. フォーマットは,["time", "data"], に対応するdataデータを1つずつ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}]]
        ]
    }
    

    試験戦略コード:

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

交換.GetData (情報源)

についてexchange.GetData(Source)この関数は,データで読み込まれるexchange.SetData(Key, Value)バックテストシステムで使用できます. バックテスト中に1回データを取得し,実際の取引中に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);
        }
    }
    
  • 外部リンクからデータを呼び出す方法

    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"));
    }
    
  • プラットフォームデータセンターの基本データを利用 試しにexchange.GetData(Source)取得する関数基本データ.

呼び出すときexchange.GetData(Source)この機能では,キャッシュタイムアウトをミリ秒で設定するために,第2パラメータを通過することができます.デフォルトはリアルボットでは1分間のキャッシュタイムアウトです.バックテストシステムでは,データ要求のアクセスインターフェースを使用するときに,バックテストシステムは,要求に自動的にパラメータfrom (タイムスタンプ秒), to (タイムスタンプ秒), period (底下のKライン期間,タイムスタンプミリ秒) および他のパラメータを追加し,取得されるデータの時間範囲を決定します.

トレーディング API

呼び出すことができます.exchangeまたはexchanges[0]例えば:exchange.Sell(100, 1);次の注文は100の価格と1の量で取引所での販売注文です.

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

exchange.Buy(Price, Amount)購入オーダーとオーダーIDを返信するために使用されます. パラメータ値:Price番号の種類で表した注文価格であり,Amountreturn value: string type or numeric type (特定のタイプは各取引所の返信タイプに依存する).

返済された注文番号は,注文情報への問い合わせや注文のキャンセルに使用できます.

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);
}
  • フューチャー・オーダー

    フューチャー取引の注文を出すとき,取引方向が正しく設定されているか注意する必要があります.取引方向と取引機能が一致しない場合は,エラーが報告されます.仮想通貨フューチャー取引所に配置された注文数は,別の規定がない限り,契約数です. 例えば:

    // The following is the wrong call
    function main() {
        exchange.SetContractType("quarter")
      
        // Set short direction
        exchange.SetDirection("sell")     
        // Place a buy order, and you will get an error, so you can only sell short
        var id = exchange.Buy(50, 1)      
    
        // Set short direction
        exchange.SetDirection("buy")      
        // Place a sell order, and you will get an error, so you can only buy long
        var id2 = exchange.Sell(60, 1)    
      
        // Set close long position direction
        exchange.SetDirection("closebuy")    
        // Place a buy order, and you will get an error, so you can only sell short
        var id3 = exchange.Buy(-1, 1)        
      
        // Set close short position direction
        exchange.SetDirection("closesell")   
        // Place a sell order, and you will get an error, so you can only buy long
        var id4 = exchange.Sell(-1, 1)       
    }
    
    # The following is the wrong 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 the wrong 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, trading pairs: ETH_BTC, bought in by market order
    function main() {
        // Buy a market order, and buy ETH coins equal to 0.1 BTC (quote currency) 
        exchange.Buy(-1, 0.1)    
    }
    
    def main():
        exchange.Buy(-1, 0.1)
    
    void main() {
        exchange.Buy(-1, 0.1);
    }
    

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

exchange.Sell(Price, Amount)販売注文を出し,注文IDを返します パラメータ値:Price注文価格,数値型です.Amount返却値:文字列タイプまたは数値タイプ (特定のタイプは各取引所の返却タイプに依存します).

返却された注文番号は,注文情報への問い合わせや注文のキャンセルに使用できます.

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);
}
  • フューチャー・オーダー

    フューチャーに対する注文を出すとき,取引方向が正しく設定されているか注意する必要があります.取引方向と取引機能が一致しない場合は,エラーが報告されます.仮想通貨フューチャープラットフォームの注文金額は,別の規定がない限り,契約数です.

  • 市場命令

    注: プラットフォームのオーダー配置インターフェイスは,市場オーダーをサポートするために必要である. (オーダータイプが販売オーダーである場合,オーダー金額パラメータは販売された運用コインの数である),および仮想通貨先物取引は,市場オーダー形式によるオーダーを配置し,オーダー金額パラメータ単位は,契約数リアル取引のデジタル通貨取引所は 市場オーダーインターフェースをサポートしていません

    // For example, trading pairs: ETH_BTC, sold out by market order 
    function main() {
        // Note: Sell by a market order, and sell 0.2 ETH coins 
        exchange.Sell(-1, 0.2)   
    }
    
    def main():
        exchange.Sell(-1, 0.2)
    
    void main() {
        exchange.Sell(-1, 0.2);
    }
    

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

exchange.CancelOrder(orderId), この関数の目的は Id の注文をキャンセルすることです. パラメータ値:Id文字列型または数値型のオーダー番号 (各プラットフォームでオーダーをする際の返信型によって特定のタイプが異なります)

操作結果を返します.true注文のキャンセル要求がうまく送信されたことを意味します.falseキャンセル注文要求が送信されないことを意味します (返却値は送信要求が成功するか否かを示します.exchange.GetOrders()プラットフォームが注文をキャンセルするかどうかを確認する)

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

FMZ の API 機能は,Log 出力関数を生成できます.Log(...), exchange.Buy(Price, Amount)そしてexchange.CancelOrder(Id)追加出力パラメータ,例えば:exchange.CancelOrder(orders[j].Id, orders[j])この方法で,それはキャンセルしていますorders[j]この注文の情報,すなわち,出力に付随するOrder構造orders[j].

function main() {
    Log("data1", "data2", "data3", "...")
    var data2 = 200
    var id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...")
    exchange.CancelOrder(id, "Incidental data1", data2, "...")
    LogProfit(100, "Incidental data1", data2, "...")
}
def main():
    Log("data1", "data2", "data3", "...")
    data2 = 200
    id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...")
    exchange.CancelOrder(id, "Incidental data1", data2, "...")
    LogProfit(100, "Incidental data1", data2, "...")
void main() {
    Log("data1", "data2", "data3", "...");
    int data2 = 200;
    auto id = exchange.Sell(100000, 0.1, "Incidental data1", data2, "...");
    exchange.CancelOrder(id, "Incidental data1", data2, "...");
    LogProfit(100, "Incidental data1", data2, "...");
}

交換する.GetOrder (Id)

exchange.GetOrder(orderId)順序番号に従って注文の詳細を取得します パラメータ値:Id取得する順番番号であり,Id文字列または数値型である (特定の型は各取引所の返信型に依存する).返信値:Order構造について (一部の取引所ではサポートされていません)

  • Order構造
  • AvgPrice実行された平均価格を示します (一部の取引所はこのフィールドをサポートしません.サポートしていない場合は0に設定します).
function main(){
    var id = exchange.Sell(1000, 1)
    // The 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);
}

交換する.GetOrders (GetOrders)

exchange.GetOrders()すべての未完成の注文を取得します.返回値:Order構造の配列 についてOrder構造についてはexchange.GetOrder()交換対象によって代表されるアカウントは,exchange待機中の注文がないので電話してくださいexchange.GetOrders()空の配列を返します.[].

function main(){
    exchange.Sell(1000, 1)
    exchange.Sell(1000, 1)
    var orders = exchange.GetOrders()
    Log("Information for unfinished order 1, ID:", orders[0].Id, "Price:", orders[0].Price, "Amount:", orders[0].Amount,
        "DealAmount:", orders[0].DealAmount, "type:", orders[0].Type)
    Log("Information for unfinished order 2, ID:", orders[1].Id, "Price:", orders[1].Price, "Amount:", orders[1].Amount,
        "DealAmount:", orders[1].DealAmount, "type:", orders[1].Type)
}
def main():
    exchange.Sell(1000, 1)
    exchange.Sell(1000, 1)
    orders = exchange.GetOrders()
    Log("Information for unfinished order 1, ID:", orders[0]["Id"], "Price:", orders[0]["Price"], "Amount:", orders[0]["Amount"], 
        "DealAmount:", orders[0]["DealAmount"], "type:", orders[0]["Type"])
    Log("Information for unfinished order 2, ID:", orders[1]["Id"], "Price:", orders[1]["Price"], "Amount:", orders[1]["Amount"],
        "DealAmount:", orders[1]["DealAmount"], "type:", orders[1]["Type"])
void main() {
    exchange.Sell(1000, 1);
    exchange.Sell(1000, 1);
    auto orders = exchange.GetOrders();
    Log("Information for unfinished order 1, ID:", orders[0].Id, "Price:", orders[0].Price, "Amount:", orders[0].Amount, 
        "DealAmount:", orders[0].DealAmount, "type:", orders[0].Type);
    Log("Information for unfinished order 2, ID:", orders[1].Id, "Price:", orders[1].Price, "Amount:", orders[1].Amount,
        "DealAmount:", orders[1].DealAmount, "type:", orders[1].Type);
}

についてexchange.GetOrders()現在セットの未完成の順序情報を取得します.トレーディングペア暗号通貨の先物には,取引ペアだけでなく,契約コードにも違いがあることに注意してください.

// Test OKX contract tradings, to know whether "GetOrders" gets all unfinished contract orders
function main(){
    // The next weekly buy order; the price of the order minus 50 guarantees no execution; pending orders
    exchange.SetContractType("this_week")
    exchange.SetDirection("buy")
    var ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Buy(ticker.Last - 50, 1)

    // The next quarterly sell order; the price plus 50 guarantees that it will not be executed, and the pending order has been switched to a quarterly contract
    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Sell(ticker.Last + 50, 1)

    // Get the unfinished orders
    Log("orders", exchange.GetOrders())
}
def main():
    exchange.SetContractType("this_week")
    exchange.SetDirection("buy")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Buy(ticker["Last"] - 50, 1)

    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    ticker = exchange.GetTicker()
    Log(ticker)
    exchange.Sell(ticker["Last"] + 50, 1)

    Log("orders", exchange.GetOrders())
void main() {
    exchange.SetContractType("this_week");
    exchange.SetDirection("buy");
    auto ticker = exchange.GetTicker();
    Log(ticker);
    exchange.Buy(ticker.Last - 50, 1);

    exchange.SetContractType("quarter");
    exchange.SetDirection("sell");
    ticker = exchange.GetTicker();
    Log(ticker);
    exchange.Sell(ticker.Last + 50, 1);

    Log("orders", exchange.GetOrders());
}

取得した未完成の注文情報:

[{"Id":17116430886,"Amount":1,"Price":808.4,"DealAmount":0,"AvgPrice":0,"Status":0,"Type":1,"ContractType":"quarter"}]

クリプトコインの取引では,exchange.GetOrders()現在設定されている契約の未完成の注文だけです.

交換.セット 精度...

exchange.SetPrecision(PricePrecision, AmountPrecision)価格とシンボルの順序金額の十進数値を設定します.設定後自動的に切断されます.パラメータ値:PricePrecision価格データにおける小数点の数を制御するために使用される数値型である.AmountPrecision番号タイプで,注文金額の後の小数点を制御するために使用されます.PricePrecisionそしてAmountPrecisionバックテストは関数をサポートせず,バックテストの数値精度は自動的に処理されます.

function main(){
    // Set the decimal precision of the price to 2 digits, and set the precision of the quantity of the symbol order to 3 digits
    exchange.SetPrecision(2, 3)
}    
def main():
    exchange.SetPrecision(2, 3)
void main() {
    exchange.SetPrecision(2, 3);
}

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

exchange.SetRate(Rate)取引所における流通通貨の為替レートを設定する.パラメータ値:Ratenumber返される値:number type.

function main(){
    Log(exchange.GetTicker())
    // Set the exchange rate conversion
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    // Set to 1, without 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(Rate)流通通貨の現在の市場価格,深さ,注文価格を含むすべての価格情報exchange換算のために設定された為替レート7に掛ける.

  • 例えばexchangeドルで表される為替レートです.exchange.SetRate(7)実際の取引の全ての価格が 7 で掛けられ,CNYに近い価格に変換されます.

exchange.IO(…)

exchange.IO("api", httpMethod, resource, params, raw)パラメータ値:httpMehod文字列のタイプです. 要求型を記入します.POSTまたはGET. resource文字列のタイプで,要求経路を満たします.params要求パラメータを入力しますrawJSON文字列のパラメータであり,省略することもできます.exchange.IO("api", httpMethod, resource, params, raw)呼び出しが失敗すると,ゼロ値を返します (ネットワークリクエストの関数,例えばGetTicker()そしてGetAccount()呼び出しが失敗すると null 値を返します).exchange.IO("api", ...) function.

OKX バッチ順序の例では,パラメータを使用しますrawオーダーパラメータを表示するには:

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 directly access the platform batch ordering interface
    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);
}

この関数を使うには,交換に行く必要がありますAPIFMZが追加していない機能を拡張するために (あなたはパラメータ暗号化,署名,検証のプロセスについて心配する必要はありませんPOSTFMZは底層で完全に処理されているので,対応するパラメータを入力するだけです).

注記: キー値がparamsパラメータ (つまり,Http リクエスト パラメータ) は文字列で,単一の引数で包まれなければなりません (シンボル') パラメータ値の両側. 例えば:bitfinex exchange.

var amount = 1
var price = 10
var basecurrency = "ltc"
function main () {
    // Notice that amount.toString() and price.toString() both have a ' character on the left and right
    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);
}

アクセスする例OKXインターフェース:

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

試験中に返されるデータ:

{"code":"0","data":[],"msg":""}

他の設定exchange.IO機能:

  • 現在の取引所の取引ペアを切り替える

    exchange.IO("currency", "ETH_BTC")

    function main() {
        // For example, set the current trading pair of the exchange object on the bot to BTC_USDT, and print the current trading pair market
        Log(exchange.GetTicker())
        // Switch 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());
    }
    

    この方法により,トレーディングペア構成されているロボットが追加されたときまたはバックテストが実行されましたコードで切り替えます

    注記:

      1. バックテストシステムは,現在取引ペア (仮想通貨のスポット交換オブジェクトのみ) を切り替えるのをサポートしています. バックテスト中に,同じコート通貨の取引ペアのみを切り替える事ができることに注意してください. たとえば,現在の取引ペアは,ETH_BTC切り替えるだけですLTC_BTCしないLTC_USDT.
      1. もしwebsocket交換オブジェクト,あなたは使用することはできませんexchange.IO("currency", "XXX_YYY")通貨の交換を
      1. 仮想通貨先物取引では 取引ペアが切り替わると 取引したい契約を決めるために 契約を再設定する必要があります
      1. 新しい システムも使えますexchange.SetCurrency(Symbol)取引ペアを切り替える機能とexchange.IO("currency","XXX_YYY")互換性を保つ方法です
  • exchange.IO交換 API ベースアドレスを切り替える機能 (RESET 契約;一部の交換はそれをサポートしません). 化学薬品の使用はexchange.SetBase(Base)交換 API ベース アドレスを切り替える機能がサポートされていますexchange.IO("base","https://xxx.xxx.xxx")互換性を保つ方法です

    例えば:交換オブジェクトがカプセル化されているとき,デフォルトのベースアドレスはhttps://api.huobipro.com, に切り替える:https://api.huobi.pro次のコードを使用します.

    function main () {
        // exchanges[0] is the first exchange object added when the bot is added 
        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");
    }
    

    ベースアドレスを:https://api.huobipro.com.

    function main () {
        exchanges[0].IO("base", "https://api.huobipro.com")
    }
    
    def main():
        exchanges[0].IO("base", "https://api.huobipro.com")
    

もっと