残りは削除します
ログリセット ((10)
}
```Python
def main():
LogReset(10)
void main() {
LogReset(10);
}
LogVacuum()
呼んだ後LogReset()
ログをクリアする機能,SQLiteデータを削除する際には,この関数には返される値はありません.
その理由はSQLite
データを削除するときに占有するスペースを回収しないので,実行する必要がありますVACUUM
テーブルを掃除し,スペースを解放する.この関数を呼び出すと,ファイル移動操作は大きな遅延で発生します.適切な時間間隔で呼び出すことが推奨されます.
主な市場インターフェース機能は:
機能名 | 記述 |
---|---|
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コールをランダムに返し,いくつかの失敗した呼び出しの返却値を返します. ボットでプログラムの強度を迅速にテストできます.
戦略編集ページのバックテストシステムページに切り替えて,逆の三角形右側にあるドロップダウンコントロールで
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()
この関数は,インターフェースが呼び出される時に返される元のデータを保存します.
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);
}
exchange.GetTrades()
プラットフォームの取引履歴 (あなた自身のものではない) を取得します.Trade
structure 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);
}
exchange.GetRecords(Period)
ボットを作成するときに指定されます. パラメータを指定する場合は,exchange.GetRecords()
この関数が呼び出された場合,得られるデータはパラメータ期間に対応するK線データになります.指定されたパラメータがない場合は,ボットパラメータに設定されたK線期間またはバックテストページに設定されたK線期間に従ってK線データが返されます.
パラメーターPeriod
:
Period
上記に定義された標準周期のみを通過できるが,秒単位で数字を通過することもできる.返済する値exchange.GetRecords(Period)
機能:
返される値は,Record
蓄積されたK線バーの上限は,exchange.SetMaxBarLen関数設定. 設定されていない場合のデフォルト上限は5000K線バーである. K線バー蓄積制限に達すると,K線バーを追加し,最早のK線バーを削除することによって更新される (例えば,キューイン/アウト). いくつかの取引所はK線インターフェースを提供していないため,ドーカーはK線を生成するためにリアルタイムで市場取引記録データを収集する.
K線バーの数GetRecords
この関数は,最初の呼び出しです.
について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線データによって合成されるからです.
中へcpp
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.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");
}
についてexchange.SetMaxBarLen(Len)
暗号通貨戦略の実行中に機能が2つの側面に影響を与える:
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.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);
}
exchange.GetRate()
交換で現在使用されている通貨と現在表示されている価格通貨の為替レートを返します.返される値は1で,為替レートの変換が無効であることを示します.返される値は数値型です.
注記:
exchange.SetRate()
交換レートを設定するために呼び出されていなかった場合,交換レートの値が返されるexchange.GetRate()
デフォルトでは 1 です.つまり,現在表示されている為替レートの変換は交換されていません.exchange.SetRate()
通貨レートの値を設定するために使用されたもの,例えば,exchange.SetRate(7)
取引プラットフォームの流通通貨を表す現在の交換対象の価格情報,例えば,報じ,深さ,注文価格など,変換のために以前に設定された為替レート7に掛けられます.exchange
価格設定通貨としてUSDを交換するexchange.SetRate(7)
この時点で,使用して得られる為替レートの値は,exchange.GetRate()
7 になります.exchange.GetUSDCNY()
最新の米ドル為替レートを返します (データソースはyahoo
) 返される値は:数値型.
について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);
}
}
上記テストコードを実行すると,図のように,対応するデータが対応する時に得られます.
タイムスタンプの対応時間1579622400000
は2020-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);
}
}
について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分間のキャッシュタイムアウトです.バックテストシステムでは,データ要求のアクセスインターフェースを使用するときに,バックテストシステムは,要求に自動的にパラメータ
呼び出すことができます.exchange
またはexchanges[0]
例えば:exchange.Sell(100, 1);
次の注文は100の価格と1の量で取引所での販売注文です.
exchange.Buy(Price, Amount)
購入オーダーとオーダーIDを返信するために使用されます. パラメータ値:Price
番号の種類で表した注文価格であり,Amount
return 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);
}
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, "...");
}
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);
}
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)
取引所における流通通貨の為替レートを設定する.パラメータ値:Rate
はnumber
返される値: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("api", httpMethod, resource, params, raw)
パラメータ値:httpMehod
文字列のタイプです. 要求型を記入します.POST
またはGET
. resource
文字列のタイプで,要求経路を満たします.params
要求パラメータを入力しますraw
JSON文字列のパラメータであり,省略することもできます.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);
}
この関数を使うには,交換に行く必要がありますAPI
FMZが追加していない機能を拡張するために (あなたはパラメータ暗号化,署名,検証のプロセスについて心配する必要はありませんPOST
FMZは底層で完全に処理されているので,対応するパラメータを入力するだけです).
注記:
キー値が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());
}
この方法により,トレーディングペア構成されているロボットが追加されたときまたはバックテストが実行されましたコードで切り替えます
注記:
ETH_BTC
切り替えるだけですLTC_BTC
しないLTC_USDT
.websocket
交換オブジェクト,あなたは使用することはできませんexchange.IO("currency", "XXX_YYY")
通貨の交換を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")