FMZ定量化プラットフォーム戦略 初心者向けチュートリアル (必須)

作者: リン・ハーン小草作成日:2019年8月13日 17:47:27 更新日:2021年8月6日 10:29:46 更新日:2021年8月6日 更新日:2021年8月6日 更新日:2021年8月6日 更新日:2021年8月6日 更新日:2021年8月6日 更新日:2021年8月6日

[TOC] このチュートリアルには,APIの紹介,復習,図などを含む,ポリシー作成の初知識が含まれています. この基本的なチュートリアルを学んだ後,ユーザーは基本的なAPIを熟練して,安定した実体盤のポリシーを書くことができます. このチュートリアルを学ぶ前に,まず学ぶ必要があります.FMZの発明者による量化プラットフォームの導入 。

古い教科書:発明者 量化 (※FMZ.COM) 策略 完全使用手帳2.0 (※チュートリアル)このツーリョクタルは,多くの投稿のインデックスをリストしています.

戦略の作成の初期説明

APIの紹介

プログラム化取引とは,プログラムがAPIと取引所をつなぐことで,設計の意図に従って自動的に売買または他の機能を実現する.APIは,Application Programming Interface (アプリケーションプログラミングインターフェース) と呼ばれる.

現在,デジタル通貨取引所には主に2つのインターフェースプロトコルがあります:RESTとWebsocket. RESTプロトコルはデータを取得するごとに1回アクセスする必要があります. 模擬取引所のwex.appのAPIを例として,ブラウザで直接https://api.wex.app/api/v1/public/ticker?market=BTC_USDTを開くと,以下の結果が得られます:

{"data:{"buy":"11351.73","high":"11595.77","last":"11351.85","low":"11118.45","open":"11358.74","quoteVol":"95995607137.00903936","sell":"11356.02","time":1565593489318,"vol":"3552.5153"}}

このページでは,BTC_USDTの取引の最新市場が表示され,更新ごとに変更されます.market=その後は,特定の取引対のパラメータであり,他の取引対のデータを取得するために変更することができます. 市場のような公開インターフェースでは,誰もがアクセスできるので,検証は必要ありません. いくつかのインターフェースでは,下記の命令とアカウントを取得する場合は,ユーザーの身元を確認する必要があります. このとき,API-KEYを使用して署名する必要があります. Websocket はサブスクリプションモードで,サブスクリプションを必要とするコンテンツを送信した後,取引所は更新されたデータをプログラムに送信し,毎回再アクセスする必要がないため,より効率的です.

FMZ量化取引プラットフォームは,各取引所のRESTインターフェースをパッケージ化し,統一された方法で呼び出しとデータフォーマットを使用し,ポリシーを書き込むことをよりシンプルに汎用化しています. FMZプラットフォームではWebsocketのサポートが便利です.次のチュートリアルで詳細に説明します.

異なるプログラミング言語

FMZプラットフォームAPIドキュメントは主にJavaScriptを例として使用しているが,パッケージ化により,言語はほとんど異なるので,文法上の問題だけに注意する必要がある. C++は少し特別で,後編のチュートリアルには専用の説明が用意されている. Jsは比較的シンプルで,互換性に関する問題がないため,初心者の使用は推奨されている. FMZは,完全なPythonをサポートし,さまざまなパッケージを自由にインストールし,特定のプログラミング基礎を使用することを推奨している. プログラミング言語を学びたくない,ただすぐに策略を書くことを望むユーザーのために,FMZプラットフォームは,基本的には互換性のある文献財務策略,関連する経験の推薦もサポートしている.

Pythonには様々なバージョンがあるため,プログラム開始時に指定することができます.#!Python2,#!Python3◎JavaScriptが最近ES6の文法アップグレードをしたことに注意してください. 興味深いことは,以下は,同じ機能を備えたPythonとJavascriptのコードが示されています. 文法的な違いのみが表示されます. したがって,APIドキュメントはJavascriptの例のみを示しています. このチュートリアルでは,Pythonの特殊な用例も考慮します.

#python代码
def main():
    while True:
        Log(exchange.GetAccount().Balance)
        Sleep(2000)
#相应的Js代码
function main(){
    while(true){
        Log(exchange.GetAccount().Balance)
        Sleep(2000)
    }
}

資源の推薦

デュージングツール

FMZの定量化プラットフォームは,APIのデビューツールを提供し,https://www.fmz.com/m/debug・デビューツールはJavaScriptのみをサポートし,一時的に実行できるだけで,リアルディスクを作成することなく取引所のインターフェースをデビューできます. ・返却したデータは結果として返されます. ・デビューツールのコードは保存されません. ・このチュートリアルでは,デビューツールを同時使用してテストすることができます.img

戦略的プロセスアーキテクチャー

ポリシープログラムは,通常のプログラムと同様に,コード順序で実行されるが,その特異性はメイン関数がある必要があることである. ポリシーが連続的に実行する必要があるため,通常はループと休憩時間が必要である. 取引のすべてのAPIへのアクセス頻度が制限されているため,それに応じて休憩時間を調整する必要がある. この架空は典型的な固定間隔実行であり,websocktを使用してイベント駆動のポリシーを書くこともできます.

特殊な役割を持つ他の機能は以下のとおりです.

  • onexit ((() は,正常な退出の掃描尾関数で,最大実行時間は5分であり,遅刻した場合の断絶エラーを報告することを宣言できない.
  • onerror ((() は例外退出関数で,最大実行時間は5分であり,宣言できない.
  • init ((() は初期化関数で,実行開始時に自動的に呼び出されるポリシープログラムであり,宣言することはできません.
function onTick(){
   var ticker = exchange.GetTicker()
   var account = exchange.GetAccount()
    //在这里写策略逻辑,将会每6s调用一次
}
function main(){
    while(true){
        onTick()
        Sleep(6000)
    }
}

上記の例では,ネットワークアクセスが失敗した場合,ポリシーが直接停止する可能性があります. もし,自動再起動のような停止しないポリシーが望まれている場合は,実盤ポリシーをtry catchでエラー主回り (=再テストはtryを使用しないでください) に容認できます. もちろん,ポリシーが安定している場合にのみ,すべてのエラーを返済しないようにし,リストアップするのが難しいポリシーの問題である場合にのみ,このような操作を推奨します.

function onTick(){
   var ticker = exchange.GetTicker()
   var account = exchange.GetAccount()
    //在这里写策略逻辑,将会每6s调用一次
}
function main(){
    try{
        while(true){
           onTick()
           Sleep(6000)
       }
    }catch(err){
        Log(err)
    }
}

エクスチェンジAPIの紹介

取引所と取引対の設定

エクスチェンジと取引ペアを明示する必要があります. リアルディスクを作成するときに1つの取引ペアのみを追加した場合,exchangeこの項目は,exchange.GetTicker()取引先の取引対の市場ティッカーが手に入ります.

FMZプラットフォームは,複数の取引所-取引ペアを同時に追加することをサポートします.例えば,同じ取引所のアカウントを同時に操作できるBTCとETH,また,別の取引所のBTCとETHを同時に操作することもできます.また,同じ取引所の異なるアカウントも同時に追加できます.それらはFMZウェブサイトに追加されたラベルによって区別されます.複数の取引所-取引所がある場合,使用します.exchanges列は,実際に作成された順序で追加されたものとして,exchanges[0]exchanges[1]取引対の形式は,BTC_USDTBTCは取引通貨であり,USDTは料金通貨である.

img

取引対を多く操作している場合,この方法は問題になります.exchange.SetCurrency("BTC_USDT")この時点でexchange取引相手は,BTC_USDT取引先の変更は,次の呼び出しまで有効となります.交換取引のペアがサポートされていることを確認してください≪下記は具体的な例です≫

var symbols = ["BTC_USDT", "LTC_USDT", "EOS_USDT", "ETH_USDT"]
var buyValue = 1000
function main(){
  for(var i=0;i<symbols.length;i++){
      exchange.SetCurrency(symbols[i])
      var ticker = exchange.GetTicker()
      var amount = _N(buyValue/ticker.Sell, 3)
      exchange.Buy(ticker.Sell, amount)
      Sleep(1000)
  }
}

市場などの公開インターフェースにアクセス

前述の例のように,市場インターフェースは一般に公開されたインターフェースであり,誰でもアクセスできる.一般的な市場インターフェースには:市場ティッカーを取得,深度深度を取得,K線記録を取得,取引記録の取引を取得する.市場は,取引判断の戦略の基礎である.

インターフェースは,Infoフィールド,交換所が返した原始データ文字列を表し,追加の情報に補完するために使用され,JavaScriptを使用して解析する必要があります.JSON.parse()Python は json データベースを使っています.Timeフィールドは要求の時間帯を表し,遅延判断に使用できます.

リアルディスクでAPIを使用すると,アクセスが失敗して戻る可能性があります.nullPythonが戻ってきたNone誤差の許容は非常に重要です. このチュートリアルでは別々に説明します.

GetTicker をインストールする

現在の市場状況を取得することは,おそらく最も一般的なインターフェースであり,最後の取引価格,買取・売却価格,最近の取引量などの情報を見つけることができます. また,注文する前に,ティッカーの情報に基づいて取引価格を決定することができます.{"Info:{}, "High":5226.69, "Low":5086.37,"Sell":5210.63, "Buy":5208.5, "Last":5208.51, "Volume":1703.1245, "OpenInterest":0, "Time":1554884195976}

function main() {
    var ticker = exchange.GetTicker()
    Log(ticker) //在调试工具中 return ticker 。可以看到具体的结果。
    Log('上次成交价: ',ticker.Last, '买一价: ', ticker.Buy)
}

GetDepth を取得する

アスクス (Asks) は売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り物・売り) を表示する.

{
    "Info":null,
    "Asks":[
        {"Price":5866.38,"Amount":0.068644},
        {"Price":5866.39,"Amount":0.263985},
        ......
        ]
    "Bids":[
        {"Price":5865.13,"Amount":0.001898},
        {"Price":5865,"Amount":0.085575},
        ......
        ],
    "Time":1530241857399
}

ディープ アクセスの利用例:

function main() {
    var depth = exchange.GetDepth()
    Log('买一价个: ', depth.Bids[0].Price, '卖一价格: ', depth.Asks[0].Price)
}

GetRecords を取得する

K線を取得する,最も一般的に使用されるインターフェースの1つである,一度に長い時間間の価格情報を返却し,様々な指標の基礎を計算する. K線周期は,実際のディスクを追加するときに使用されるデフォルト周期を指定しない場合を示します. K線の長さは指定できません. 時間の蓄積が増加するにつれて,最大2000根,最初の呼び出しで200根程度 (異なる取引所が異なる). 最後のK線は最新のK線なので,データは常に変化する.最初のK線は最も古いデータです.

exchange.SetMaxBarLen(Len)最初のK線取得の数 (一部の取引所がサポートしている) を設定し,最大K線数を設定します.例えば:exchange.SetMaxBarLen(500)

GetRecordsでは,周期を指定することができます:PERIOD_M1:1分,PERIOD_M5:5分,PERIOD_M15:15分,PERIOD_M30:30分,PERIOD_H1:1時間,PERIOD_D1:1日.exchange.GetRecords(PERIOD_M1)・最新の托管がアップグレードされた後,カスタムサイクルをサポートし,直接周期秒数をパラメータとして実行し,分間のレベルでのカスタム化は1分間のK線に基づいて合成され,1分未満のK線はGetTradesによって合成され,商品先物商品はティックに基づいて合成される.学習の過程でPERIOD_M1FMZのデフォルトのグローバル変数であるこれらの変数は,興味のある人は,それらの特定の値にログインし,通常は直接使用することができます.

データの返却例:

[
    {"Time":1526616000000,"Open":7995,"High":8067.65,"Low":7986.6,"Close":8027.22,"Volume":9444676.27669432},
    {"Time":1526619600000,"Open":8019.03,"High":8049.99,"Low":7982.78,"Close":8027,"Volume":5354251.80804935},
    {"Time":1526623200000,"Open":8027.01,"High":8036.41,"Low":7955.24,"Close":7955.39,"Volume":6659842.42025361},
    ......
]

代行線の例:

function main(){
    var close = []
    var records = exchange.GetRecords(PERIOD_H1)
    Log('total bars: ', records.length)
    for(var i=0;i<records.length;i++){
        close.push(records[i].Close)
    }
    return close
}

GetTrades は

特定の時間帯の取引データ (自分の取引データではなく) を取得することは,一部の取引所ではサポートされていません.

取引のためにアカウントを取得

これらのインターフェイスはアカウントに関連しているため,直接アクセスできません.API-KEY署名が必要です.FMZプラットフォームはバックグラウンドの統一を自動処理し,直接使用できます.

GetAccount アカウントを取得

アカウント情報を取得します. 最もよく使われるインターフェースの一つで,不十分な残高を避けるために注文前に呼び出す必要があります.{"Stocks":0.38594816,"FrozenStocks":0,"Balance":542.858308,"FrozenBalance":0,"Info":{}}ストックは取引対の取引通貨の利用余額であり,FrozenStocksは未完成の注文の凍結余額であり,Balanceは価格通貨の利用余額であり,FrozenBalanceは取引対の凍結余額である.BTC_USDT株式はBTC,バランスはUSDTです.

返回結果は指定された取引対の結果であり,取引口座内の他の通貨に関する情報はInfoフィールドにあり,複数の取引対を操作し,複数の呼び出しを必要としない.

取引の総額に対する現在の取引の実価を常に印刷している:

function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var account = exchange.GetAccount()
        var price = ticker.Buy
        var stocks = account.Stocks + account.FrozenStocks
        var balance = account.Balance + account.FrozenBalance
        var value = stocks*price + balance
        Log('Account value is: ', value)
        LogProfit(value)
        Sleep(3000)//sleep 3000ms(3s), A loop must has a sleep, or the rate-limit of the exchange will be exceed
        //when run in debug tool, add a break here
    }
}

購入する

決済をします.exchange.Buy(Price, Amount)可能性はexchange.Buy(Price, Amount, Msg)Msg は追加文字列で,実力ディスクログに表示される. 必須ではありません. この方法は,順位列で,即座に完全に順位が完了できない場合は未完成の注文を生成します.順位列の成功結果は,順位 id,失敗は,nullオーダーステータスを調べるのに使う.

市場価格で購入する場合は,Price は-1,Amount は,注文価値,例えばexchange.Buy(-1, 0.5)取引は正しいETH_BTC市場価格0.5BTCで購入されたETHを代表する.一部の取引所は市場価格表やフューチャー再評価もサポートしていない.

部分取引 すべての価格と数値の精度要求は利用可能_N()精度関数を制御する.前期取引のBuyとSellには別の意味があり,別々に説明します.

価格で購入する例は以下の通り.

function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var price = ticker.Sell
        if(price >= 7000){
            exchange.Buy(_N(price+5,2), 1, 'BTC-USDT')
            break
        }
        Sleep(3000)//Sleep 3000ms
    }
    Log('done')
}

売る 売る

下手札は↑パラメータはbuyと同じである。上手札のパラメータの意味は異なる.上手札は↑パラメータが同じである.exchange.Sell(-1, 0.2)市場価格を代表して0.2ETHを販売した.

GetOrderで注文を取得する

注文IDに基づいて注文情報を取得する.exchange.GetOrder(OrderId)OrderId は,注文の時に返される,注文 id です.注文の種類に注意Typeフィールドと注文状態Status実際の値は数字で,異なる意味を表すが,記憶に不利である.FMZは,未完成の注文などのグローバル定数でこれらの値を表現する.Status値が 0 だったら,ORDER_STATE_PENDINGグローバルコンスタンツは,すべての文献で確認できます.返信する結果:

{
    "Id":125723661, //订单id
    "Amount":0.01, //订单数量
    "Price":7000, //订单价格
    "DealAmount":0, //已成交数量
    "AvgPrice":0, //成交均价
    "Status":0, // 0:未完全成交, 1:已成交, 2:已撤单
    "Type":1,// 订单类型,0:买单, 1:卖单
    "ContractType":"",//合约类型,用于期货交易
    "Info":{} //交易所返回原始信息
    }
}

通貨の購入の戦略は,

function main(){
    while(true){
        var amount = exchange.GetAccount().Stocks
        var ticker = exchange.GetTicker()
        var id = null
        if(5-amount>0.01){
            id = exchange.Buy(ticker.Sell, Math.min(5-amount,0.2))
        }else{
            Log('Job completed')
            return //return the main function, bot will stop
        }
        Sleep(3000) //Sleep 3000ms
        if(id){
            var status = exchange.GetOrder(id).Status
            if(status == 0){ //这里也可以用 status == ORDER_STATE_PENDING 来判断。
                exchange.CancelOrder(id)
            }
        }
    }
}

GetOrders 未完成の注文

現在の取引をすべての未完了注文リストに取得します.未完了注文がない場合は空の配列を返します.注文リストの特定の結果,例えばGetOrder.

現在取引をすべてキャンセルする例:

function CancelAll(){
    var orders = exchange.GetOrders()
    for(var i=0;i<orders.length;i++){
        exchange.CancelOrder(orders[i].Id) // cancel order by orderID
    }
}
function main(){
    CancelAll()
    while(true){
        //do something
        Sleep(10000)
    }
}

CancelOrder キャンセル

注文 ID に基づいて注文を取り消す.exchange.CancelOrder(OrderId)・キャンセル成功はtrueを返し,そうでなければfalseを返します. ・注文が完全に完了した場合はキャンセル失敗を注意してください.

期貨と永続契約

デジタル通貨先物取引と現物取引とは異なり,上記の現物取引の機能は,同じく先物取引に適用され,単一先物取引には独自の機能があります.デジタル通貨先物取引のプログラム化取引を行う前に,ウェブサイトで手動操作を熟知し,開場,平仓,全仓,一株,レバレッジ,平仓損失,浮動利益,保証金などの基本概念と相応の計算式を理解する必要があります.各先物取引所で関連するチュートリアルを見つけることができます.自分で学ぶ必要があります.

永続契約と先物契約は似ているが,同時に複数の空間に持てる概念がない.

取引所が同時にOKEXとHuobiのフューチャーをサポートしている場合,取引所のインターフェイスで別々にOKEXフューチャーパックとHuobiのフューチャーパックを選択し,FMZでは現貨とは異なる取引所とみなす必要があります.

SetContractType 契約を設定する

フューチャー取引の第一歩は,取引する契約を設定することです. OKEX フューチャーとして,実盘または回顧を作成する際にBTC取引ペアを選択します. また,コードに当週,来週または四半期契約を設定する必要があります.invalid contract type現金取引とは異なり,フューチャー契約は,取引通貨であるBTCを担保金として取引する傾向があり,取引対にBTCを追加することは,通常BTCを担保金として代表するBTC_USD取引対であり,USDTを担保金として使用するフューチャーがある場合,BTC_USDTの取引対をリアルタイムに追加する必要性がある.取引ペアを設定した後,永続,当週,次週など特定の契約タイプを設定します. 契約を設定した後,取得市場,売買などの操作を行うことができます.

ビナイン,OKEX,HuobiDMなどの現金本位およびUSDT本位の契約は,実盤設定契約を追加する際に区別する必要があります.具体的設定は以下のとおりです.

//OKEX期货
exchange.SetContractType("swap")        // 设置为永续合约
exchange.SetContractType("this_week")   // 设置为当周合约
exchange.SetContractType("next_week")   // 设置为次周合约
exchange.SetContractType("quarter")     // 设置为季度合约

//HuobiDM
exchange.SetContractType("this_week")   // 设置为当周合约 
exchange.SetContractType("next_week")   // 设置为次周合约
exchange.SetContractType("quarter")     // 设置为季度合约
exchange.SetContractType("swap")        // 设置为永续合约

//币安期货
exchange.SetContractType("swap")   // 设置为永续合约,注意币本位和USDT本位都存在永续
exchange.SetContractType("quarter")   // 设置为当季合约
exchange.SetContractType("next_quarter")  // 设置为次季合约

//BitMEX
exchange.SetContractType("XBTUSD")    // 设置为永续合约
exchange.SetContractType("XBTM19")  // 具体某个时间结算的合约,详情登录BitMEX查询各个合约代码

//GateIO
exchange.SetContractType("swap")      // 设置为永续合约,不设置默认为swap永续合约。 

//Deribit
exchange.SetContractType("BTC-27APR18")  // 具体某个时间结算的合约,详情参看Deribit官网。

GetPosition を保持する

現存情報リストを取得する. OKEX (OKCOIN) フューチャーは,取得する契約の種類を指定するパラメータを入力できます. 保有がない場合は空きリストを返します.[]取引の具体的分析を組み合わせる必要があります. 取引の具体的分析を組み合わせる必要があります.

データ型 変数名 解説
オブジェクト インフォ 取引所の元の構造に戻る
番号 マージンレベル OKCoinは10か20で,OKフューチャー全株モデルは,ネイティブAPIがサポートしていないため,固定10に戻ります.
番号 総額 保有量,OKCoinは契約の割合を表す ((整数で1より大きい)
番号 凍結した量 ポジション凍結量
番号 価格 持有する平均価格
番号 マージン 保証金凍結
番号 利益 コモディティ先物:持株市場損失,デジタル通貨: ((デジタル通貨単位:BTC/LTC,従来の先物単位:RMB,注:OKCoin先物では,全株で余剰を達成することを指し,持株ではなく,各株で持株損失を指す)
コスト タイプ PD_LONGは多頭ポジション (CTPではclosebuy_todayで平成),PD_SHORTは空頭ポジション (CTPではclosesell_todayで平成),PD_LONG_YDは昨日多頭ポジション (CTPフューチャーでは) (closebuyで平成),PD_SHORT_YDは昨日空頭ポジション (CTPではclosesellで平成)
文字列 契約型 商品先物 契約コード 株式 取引所コード 株式 コード 特定のパラメータ SetContractType の入力型
function main(){
    exchange.SetContractType("this_week");
    var position = exchange.GetPosition();
    if(position.length>0){ //特别要注意引用前要先判断position长度再引用,否则会出错
        Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
            position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type,"ContractType:", position[0].ContractType)
    }
}

フューチャー開場平成

ローバーの大きさや呼び出しの仕方を設定します.exchange.SetMarginLevel(10)10は10倍のレバレッジを表し,特定のサポートレバレッジの大きさを参照してください.取引所に設定されたレバレッジが,コードで取引所設定と一致するように注意してください.既定のレバーを使用して設定することもできます. 取引方向を設定し,呼び出し方法を設定します.exchange.SetDirection(Direction)オープン・ポジション平衡に対応する**は,先物とは異なり,永続契約が複数の空白を同時に保持していない場合,単一の保有を許可しない場合,多時間オープンを行う場合,自動的に複数の空白を平衡します.すべては設定する必要があります.buyそしてsell双方向収納がサポートされている場合,設定する必要があります.closebuy,closebuy◎** 具体的関係:

操作 SetDirection のパラメータ 下記関数
増殖する 交換.セットディレクション ((買い) 交換する.買える.
広場 交換.セットディレクション ((closebuy) 交換する.売る.
空き倉庫 交換.セットディレクション ((売る) 交換する.売る.
空き倉庫 交換.セットディレクション ((closesell) 交換する.買える.

最後に,特定の開場平仓コードがあり,下記の单元量は異なる取引所によって異なります.例えば,huobi先物はいくつか,1枚100ドルである.注意.先物再評価は市場価格单元をサポートしません.

function main(){
    exchange.SetContractType("this_week")    // 举例设置 为OKEX期货 当周合约
    price = exchange.GetTicker().Last
    exchange.SetMarginLevel(10) //设置杠杆为10倍 
    exchange.SetDirection("buy") //设置下单类型为做多 
    exchange.Buy(price+10, 20) // 合约数量为20下单 
    pos = exchange.GetPosition()
    Log(pos)
    Log(exchange.GetOrders()) //查看是否有未成交订单
    exchange.SetDirection("closebuy"); //如果是永续合约,直接设置exchange.SetDirection("sell")
    exchange.Sell(price-10, 20)
}

グラフに示されているのは,

function main(){
    while(true){
        var pos = exchange.GetPosition()
        var ticker = exchange.GetTicekr()
        if(!ticker){
            Log('无法获取ticker')
            return
        }
        if(!pos || pos.length == 0 ){
            Log('已无持仓')
            return
        }
        for(var i=0;i<pos.length;i++){
            if(pos[i].Type == PD_LONG){
                exchange.SetContractType(pos[i].ContractType)
                exchange.SetDirection('closebuy')
                exchange.Sell(ticker.Buy, pos[i].Amount - pos[i].FrozenAmount)
            }
            if(pos[i].Type == PD_SHORT){
                exchange.SetContractType(pos[i].ContractType)
                exchange.SetDirection('closesell')
                exchange.Buy(ticker.Sell, pos[i].Amount - pos[i].FrozenAmount)
            }
        }
        var orders = exchange.Getorders()
        Sleep(500)
        for(var j=0;j<orders.length;j++){
            if(orders[i].Status == ORDER_STATE_PENDING){
                exchange.CancelOrder(orders[i].Id)
            }
        }
    }
}

デジタル通貨のレバレッジ取引

暗号化してレバレッジ口座に切り替える必要もありますが,他のことは現金取引と同じです.

使用するexchange.IO("trade_margin") は,取引所のレバレッジインターフェイスにアクセスし,注文を押したり,口座資産を取得したりする,値アカウントモードに切り替える. 使用するexchange.IO("trade_normal") 普通のアカウントモードに戻る.

サポートされている取引所:

  • OKEX V3:レバレッジアカウントのモデルは,通常の取引対とは異なる.
  • コイン:レバレッジアカウントのモデルは,通常の取引対とは異なる.
  • ZB:QCでしか資金が流入できない,レバレッジ取引領域,異なる取引対間の資金独立,つまりETH_QC取引対の下にあるQCコインの数,BTC_QCでは見られません.
  • FCoin
  • ビナンス

商品先物取引

商品フューチャー取引とデジタル通貨フューチャー取引には大きな違いがある. まず,商品フューチャー取引時間は短く,デジタル通貨は24h取引.商品フューチャー取引のプロトコルは通常使用されるREST APIでもありません.商品フューチャー取引の頻度や挂注数制限は,デジタル通貨は緩いです.https://www.fmz.com/bbs-topic/325商品先物取引会社は追加:https://www.fmz.com/bbs-topic/371

商品先物と,2019年6月に実施された見通りの規制により,個人程序化個人利用者が必要な開設先物先物先の申請権限コード (具体申請に必要な情報模板は微信群またはQQ群でメッセージを送信できます) は,一般的に4-5日かかります. ステップはより繁忙です. FMZ量化プラットフォームは,程序化取引プロバイダーとして各先物先物先サービス業者にソフトウェアライセンスコードを申請し,ユーザーは直接使用する申請を必要とせず,追加先物先が検索している場合は,見通りのはFMZが申請しているリストを見ることができます. 具体的な参照投稿:https://www.fmz.com/bbs-topic/3860・あなたの先行業者がリストに載っていない場合,自分で申請するだけで,またはサポートされているトレーダーで再び開設するだけで,通常2日かかります. ・FMZは,国泰国安宏源先行業などのサービス提供者と深い提携関係を持ち,FMZプラットフォームの機関版を購入し,ユーザーに利用することができます.https://www.fmz.com/bbs-topic/506

FMZプラットフォームのアーキテクチャの優位性により,ユーザーは複数の先物取引アカウントを追加することも可能であり,他の商品先物取引プログラム化ソフトウェアが達成できない機能,例えば高周波ティックの合成を実現することも可能である.https://www.fmz.com/bbs-topic/1184

戦略的枠組み

まず,24h取引ではないので,登陸操作が必要なので,取引を行う前にリンクの状態を判断する必要があります.exchange.IO("status")ありがとうございました.true接続された取引所を表示します. 起動に失敗した場合はAPIを呼び出し,not loginボタンを提示しません. ポリシー開始後Sleep ((2000) を設定し,登入に一定の時間を与えることができます. また,再利用することができます._C(exchange.SetContractType,"MA888")登陸の成功を保証する.

商品フューチャーに対する市場取得と取引コードは,デジタル通貨フューチャーと同じであり,異なる点や注意点について説明します.

function main(){
    _C(exchange.SetContractType,"MA888") //没登陆成功是无法订阅合约的,最好重试一下
    while(true){
        if(exchange.IO("status")){
            var ticker = exchange.GetTicker()
            Log("MA888 ticker:", ticker)
            LogStatus(_D(), "已经连接CTP !")//_D获取事件
        } else {
            LogStatus(_D(), "未连接CTP !")
            Sleep(1000)
        }
    }
}

商品先物庫取引 (以下説明) を使用することをお勧めします.このとき,コードは非常にシンプルで,面倒な詳細を処理する必要はありません. ソースコードのコピーアドレス:https://www.fmz.com/strategy/57029

function main() {
    // 使用了商品期货类库的CTA策略框架
    $.CTA(Symbols, function(st) {
        var r = st.records
        var mp = st.position.amount
        var symbol = st.symbol
        /*
        r为K线, mp为当前品种持仓数量, 正数指多仓, 负数指空仓, 0则不持仓, symbol指品种名称
        返回值如为n: 
            n = 0 : 指全部平仓(不管当前持多持空)
            n > 0 : 如果当前持多仓,则加n个多仓, 如果当前为空仓则平n个空仓,如果n大于当前持仓, 则反手开多仓
            n < 0 : 如果当前持空仓,则加n个空仓, 如果当前为多仓则平n个多仓,如果-n大于当前持仓, 则反手开空仓
            无返回值表示什么也不做
        */
        if (r.length < SlowPeriod) {
            return
        }
        var cross = _Cross(TA.EMA(r, FastPeriod), TA.EMA(r, SlowPeriod));
        if (mp <= 0 && cross > ConfirmPeriod) {
            Log(symbol, "金叉周期", cross, "当前持仓", mp);
            return Lots * (mp < 0 ? 2 : 1)
        } else if (mp >= 0 && cross < -ConfirmPeriod) {
            Log(symbol, "死叉周期", cross, "当前持仓", mp);
            return -Lots * (mp > 0 ? 2 : 1)
        }
    });
}

CTPデータ取得モデル

商品先物貨はCTPプロトコルを使用し,すべての市場およびオーダー取引は変更後に通知されるが,注文,口座,保有を問い合わせることは主動的な問い合わせである.したがって,イベント駆動の書き込みに適した高周波戦略である.デフォルトモードでは,市場へのアクセスインターフェースは,GetTickerGetDepthGetRecordsキーボードは,キャッシュされたデータで最新のデータを取得するために,データがないときは常にデータがあるのを待つので,Sleepを使用することはできません. 市場の変更時,ticker,depth,recordsは更新されます. このとき,呼び出された任意のインターフェースは直ちに戻されます. 呼び出されたインターフェースの状態は更新の待機モードに置かれ,次の呼び出しと同じインターフェースは,新しいデータが戻るまで待っています.

市場を即時更新モードに切り替えることができます. 市場を即時更新モードに切り替えることができます.exchange.IO("mode", 0)この時点で,ポリシーはイベント駆動で記述できず,SLEEPイベントを追加する必要があり,急速な死循環を回避する.exchange.IO("mode", 1)キーボードの設定を変更する.

単一の契約を操作する際には,デフォルトモードを使用することもできます. しかし,複数の契約の場合,市場更新ができない契約が可能で,市場インターフェースへのアクセスが詰まり,他の契約市場更新が入手できない可能性があります. この問題を解決するには,即時更新モードを使用できますが,高周波戦略を書くのは不便です.exchange.IO("wait")■複数の取引所オブジェクトが追加されている場合,これは商品先物では稀で,使用できます.exchange.IO("wait_any")返したインデックスは返した取引所のインデックスを示します.

ティックの変更を押す:{Event:"tick", Index:交易所索引(按实盘上交易所添加顺序), Nano:事件纳秒级时间, Symbol:合约名称}注文は:{Event:"order", Index:交易所索引, Nano:事件纳秒级时间, Order:订单信息(与GetOrder获取一致)}

戦略構造は以下のように書ける:

function on_tick(symbol){
    Log("symbol update")
    exchange.SetContractType(symbol)
    Log(exchange.GetTicker())
}

function on_order(order){
    Log("order update", order)
}

function main(){
    while(true){
        if(exchange.IO("status")){ //判断链接状态
            exchange.IO("mode", 0)
            _C(exchange.SetContractType, "MA888")//订阅MA,只有第一次是真正的发出订阅请求,接下来都是程序切换,不耗时间。
            _C(exchange.SetContractType, "rb888")//订阅rb
            while(true){
                var e = exchange.IO("wait")
                if(e){
                    if(e.event == "tick"){
                        on_tick(e.Symbol)
                    }else if(e.event == "order"){
                        on_order(e.Order)
                    }
                }
           }
        }else{
            Sleep(10*1000)
        }
    }
}

商品先物とデジタル通貨の違い

また,商品先物とデジタル通貨取引所との違いも注意すべきである.例えばGetDepthは実際には深度が1ファイルのみである (深度5ファイルは費用が高く),GetTradesも取引履歴を入手できない (所有株の変動に基づいて模擬される,実際の取引記録がない).商品先物には停滞制限があり,停滞時に,深度セール・オードが1回の販売価格が停滞価格であり,注文量は0であり,停滞時に購入価格が停滞価格であり,注文量は0である.また,商品先物検索インターフェースの頻度,アカウント,注文,ポジションの取得の制限など,厳格な制限があります.通常は2sです.商品期貨の取り消しの制限などがあります.

契約の設定

exchange.IO("instruments"): 取引所のすべての契約のリストを{契約名:詳細}辞書形式で返します.実盤のみをサポートします.exchange.IO("products"): 取引所のすべての製品のリストを{製品名:詳細}辞書形式で返します.実盤のみをサポートします.exchange.IO("subscribed"): サブスクリプトされた市場での契約を返却し,同形式で,実盤のみをサポートします.

伝統的なCTPフューチャーContractType契約のIDは,大文字で区別します.exchange.SetContractType("au1506")・契約設定が成功した後,契約の詳細,例えば最低購入回数,手数料,配達時間等が返ってくる. ・複数の契約を購読する場合は,初めてのみ実際の購読要求を送信し,コードレベルで取引対を切り替えるだけで時間がかかりません. ・主要連続契約は888コードとしてMA888として,連続指数契約は000としてMA000として, 888と000は仮想契約の取引のみを回転をサポートし,実盤は取引のみを入手することをサポートします.しかし,マック言語は主力契約を操作できるので,プログラムは自動的に交換します.つまり,非主力ポジションを平ら化し,主力ポジションに新しいポジションを開きます.

ログイン失敗は契約を設定することができませんが,すぐに戻りますので,CTP ログインが完了していることを知るために_C で再試してください. ログインが成功すると,契約を再設定することは時間がかかりません.

オープン・平成

SetDirectionこのページのページをクリックするとbuy, closebuy, sell, closesell4つのパラメータで,商品先物が増えるclosebuy_todayそしてclosesell_todayは,現在,現在,現在,そして将来について,closebuy/closesell平昨期の為,前期の種類のみが平今と平昨期を区別し,手続費に影響を与える可能性があるため,平昨期を優先する必要があります.CTPの伝統的な先物については,第2パラメータを1または2または3と設定できます.具体的には,売買,ポジション取得,オーダー取得,撤収,口座取得などの操作は,デジタル通貨のフューチャー取引と同じである.上記を参照してください.

操作 SetDirection のパラメータ 下記関数
増殖する 交換.セットディレクション ((買い) 交換する.買える.
広場 交換.セットディレクション ((closebuy) 交換する.売る.
空き倉庫 交換.セットディレクション ((売る) 交換する.売る.
空き倉庫 交換.セットディレクション ((closesell) 交換する.買える.

以下の例は特定の平衡関数である.この例が単純すぎることを注意し,取引時間にあるかどうか,未完了取引のリハビリをどのように掛けるか,最大下注量は何であるか,頻度が高いか,特に滑り値か開盤なのかなど,一連の問題を考慮する. 参照のみ.リアルディスクのオープン平衡は,プラットフォームのパッケージされたクラスを使用することを推奨しています.https://www.fmz.com/strategy/12961クラスライブラリ章に詳しい説明があり,クラスライブラリのソースコードを学ぶこともお勧めします.

function Cover(contractType, amount, slide) {
    for (var i = 0; i < positions.length; i++) {
        if (positions[i].ContractType != contractType) {
            continue;
        }
        var depth = _C(e.GetDepth);
        if (positions[i].Type == PD_LONG || positions[i].Type == PD_LONG_YD) {
            exchange.SetDirection(positions[i].Type == PD_LONG ? "closebuy_today" : "closebuy");
            exchange.Sell(depth.Bids[0]-slide, amount, contractType, positions[i].Type == PD_LONG ? "平今" : "平昨", 'Bid', depth.Bids[0]);
        } else {
            exchange.SetDirection(positions[i].Type == PD_SHORT ? "closesell_today" : "closesell");
            exchange.Buy(depth.Asks[0]+slide, amount, contractType, positions[i].Type == PD_SHORT ? "平今" : "平昨", 'Ask', depth.Asks[0]);
        }
    }
}

コモディティ・フューチャーでは,カスタマイズされたオーダータイプ (実盤対応,リメート対応なし) をサポートし,式指定,_の後ろに追加します.

exchange.SetDirection("buy_ioc");
exchange.SetDirection("sell_gtd-20170111")

具体的には,以下のような結果が出ています.

  • ioc は即座に完了するか,THOST_FTDC_TC_IOC を撤回する
  • gfs このセクションは有効です THOST_FTDC_TC_GFS
  • gfd 当日有効である THOST_FTDC_TC_GFD
  • gtd 指定された日までに有効 THOST_FTDC_TC_GTD
  • gtc 撤回前に有効 THOST_FTDC_TC_GTC
  • gfa 集合入札有効 THOST_FTDC_TC_GFA

簡単にアクセスする

商品先物取引所では,CTPインターフェイスがデフォルトで開いているが,要求がある場合,EasyPayインターフェイスに変更できる. FMZのパッケージ化により,呼び出す方法は同じである. 違いはアカウント,オーダー,保有が推送モードであるため,托管者は現地でこのデータを維持し,対応するインターフェースを呼び出すときにすぐに返信し,実際には要求を行わない.

イーセン・プロトコルのカスタマイズされた注文タイプは以下のとおりです.

  • gfd 当日の有効 TAPI_ORDER_TIMEINFORCE_GFD
  • gtc は撤回される前に有効 TAPI_ORDER_TIMEINFORCE_GTC
  • gtd 指定された日までに有効 TAPI_ORDER_TIMEINFORCE_GTD
  • fakの一部を交付し,残りを撤回する TAPI_ORDER_TIMEINFORCE_FAK
  • ioc は即座に完了するか,TAPI_ORDER_TIMEINFORCE_FAK を撤回する
  • fok は完全には取引が完了せず,すべての TAPI_ORDER_TIMEINFORCE_FOK を撤回しました.

一般的に使用されるグローバル関数

ログログと微信推送

リアルディスクインターフェースでは,ログをログに,文字列の後ろに@文字を加えると,メッセージはプッシュキューに,微信またはテレグラムをリンクした後,直接プッシュされます.Log('推送到微信@')

ログの色もカスタマイズできますLog('这是一个红色字体的日志 #ff0000')#ff0000RGBの16進法表示

すべてのログファイルは,管理者が所在するディレクトリ内のリアルディスクのsqlitデータベース内に存在し,データベースソフトウェアを使用してダウンロードして開くこともできます. また,バックアップ復元 (データベース名とリアルディスクIDが同じ) をコピーするために使用することもできます.

LogProfitは収益を印刷しています

収益を記録し,実力盤インターフェイスで収益曲線を描き,実力盤を再起動したときに保存できます.LogProfit(1000)◎注意LogProfitこの項目は,任意の数値で,自己入力が必要です.

LogStatus 状態バー表示 (表を含む)

リアルディスク状態,ログログが保存され,常に更新されるため,保存されていない情報を表示するだけが必要な場合は,LogStatusこの関数は,LogStatus文字列で表の情報を表示するために使用できます.

特定のディスクの状態位置を示す表の例:

var table = {type: 'table', title: '持仓信息', cols: ['列1', '列2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}; 
LogStatus('`' + JSON.stringify(table) + '`'); // JSON序列化后两边加上`字符, 视为一个复杂消息格式(当前支持表格) 
LogStatus('第一行消息\n`' + JSON.stringify(table) + '`\n第三行消息'); // 表格信息也可以在多行中出现 
LogStatus('`' + JSON.stringify([table, table]) + '`'); // 支持多个表格同时显示, 将以TAB显示到一组里 
LogStatus('`' + JSON.stringify(tab1) + '`\n' + '`' + JSON.stringify(tab2) + '`\n'); // 上下排列显示多个表

スリープ

微分数で表示されます.Sleep(1000)休眠1秒. 取引のすべてのアクセス頻度が制限されているため,一般的戦略は,死回り中に休眠時間を追加することです.

_G データ保存

仮想ディスクを再起動すると,プログラムが再起動します._GJSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する上で,JSON の文字列を保存する._Gこの関数はonexit()この方法では,このポリシーを停止するたびに,必要な情報が自動的に保存されます. 格式化データをもっと保存したい場合は,_G関数はあまり使えません. Pythonで直接データベースに書き込むことができます.

function onexit(){
    _G('profit', profit)
}
function main(){
    _G("num", 1); // 设置一个全局变量num, 值为1 s
    _G("num", "ok"); // 更改一个全局变量num, 值为字符串ok 
    _G("num", null); // 删除全局变量 num 
    _G("num"); // 返回全局变量num的值,如果不存在返回null

    var profit = 0
    if(_G('profit')){
        profit = _G('profit')
    }
}

精度関数

注文時に価格と数値の精度を制御する傾向があるため,FMZは_N関数を組み込み,小数点位を保存することを決定します._N(4.253,2)答えは4.25でした.

_C 自動再試行

呼び出しの交換APIは,アクセスが成功するたびに保証できない. _Cは自動的に再試行する関数である. 指定された関数を成功まで呼び続けます (関数はnullまたはfalseを返します)._C(exchange.GetTicker)復習間隔は3秒で,復習間隔を制御するために_CDelay関数を呼び出すことができます.例えば_CDelay ((1000),C_C関数の復習間隔を1秒に変更することを推奨します.GetTicker(),exchange.GetDepth,GetTrade,GetRecords,GetAccount,GetOrders, GetOrder失敗したアクセスがプログラム中断を防ぐために_Cでエラーを許します.

CancelOrder_C関数を使用することはできません. キャンセル失敗には様々な理由があります. 一つの单元が取引されている場合,再キャンセルが失敗を返します.

_C関数は参数も伝達できるし,カスタム関数にも使われます.

function main(){
    var ticker = _C(exchange.GetTicker)
    var depth = _C(exchange.GetDepth)
    var records = _C(exchange.GetRecords, PERIOD_D1) //传入参数
}

_D 日付関数

直接電話_D()この文字列は,次の文字列を表示します.2019-08-15 03:46:14◎復習中の呼び出しの場合,復習時間を返します._D().slice(11) > '09:00:00':

_D(timestamp,fmt)時間の文字列に変換します._D(1565855310002)◎fmtパラメータは時間形式で,デフォルトでyyyy-MM-dd hh:mm:ss

TA指標関数

MA\MACD\KDJ\BOLLなどの一般的な指標機能には,FMZプラットフォームが直接内蔵されており,特定のサポートされた指標についてはAPIドキュメントを参照してください.

指数関数を使用する前に,K線長を判断するのが良い.前回のK線長が計算に必要な周期を満たさない場合,結果は:null◎入力されたK線長が100で,計算MAの周期が10である場合,最初の9値は0で,次の9値は正常に計算される.

JavaScriptは,タリブの完全なサポートもサポートしています.talib.CCI(records)参考までにhttp://ta-lib.org/function.html. Pythonではタリブを自分でインストールできますが,単純にpipでインストールできないため,コンパイルする必要があります.

インディケーター関数は,K線データに加えて任意の配列にも伝達できます.

function main(){
    var records = exchange.GetRecords(PERIOD_M30)
    if (records && records.length > 9) {
        var ma = TA.MA(records, 14)
        Log(ma)
    }
}

JavaScriptでよく使う関数

リアルディスクでよく使われるJavaScript関数について説明します.

  • Date.now()戻る
  • parseFloat()文字列を数字に変換します.parseFloat("123.21")
  • parseInt()文字列を整数に変換する
  • num.toString()数字を文字列に,numを数字変数に変換します
  • JSON.parse()JSON 文字列をフォーマットします.JSON.parse(exchange.GetRawJSON())
  • JavaScript は Math データベースの関数を自作していますMath.max(),Math.abs()常用数学操作など,参照:https://www.w3school.com.cn/jsref/jsref_obj_math.asp
  • FMZが引用しているJavaScriptの第三者数学データベースは,参照:https://mathjs.org/
  • FMZは,JavaScriptの第三者アンダースコアリバリを参考にしており,多くのJsの面倒な操作を容易にすることをお勧めしています.https://underscorejs.org/

テンプレート・クラス・ライブラリ

実盘戦略機能を書くには,考慮する必要がある状況が非常に多く,例えば5コインを購入するという単純な機能,我々は考慮する必要があります:現在の残高は十分ですか?下注の価格は何ですか?精度は何ですか?市場への衝撃を避けるために注文を分割する必要がないか?未完了注文をどう処理するか?など詳細.

JavaScriptのデジタル通貨取引クラスライブラリと商品フューチャー取引クラスライブラリは,デフォルトで組み込まれ,コピーする必要はありません.他のテンプレートクラスライブラリは,戦略広場で見つけることができます.https://www.fmz.com/square/20/1│ テンプレートクラスバックリをコピーして保存し,自分のポリシーを作成するときに使用するクラスバックリを選択できます。

JavaScriptのテンプレート関数は$Python は,Python の基本言語として,extスタート♪

デジタル通貨取引のカテゴリー

ソースコードアドレス:https://www.fmz.com/strategy/10989特定の関数の実装方法は,ソースコードを直接参照できます.

アカウント取得:

$.GetAccount(e)

Log($.GetAccount()); // 获取账户信息, 带容错功能
Log($.GetAcccount(exchanges[1]));

撤収状は以下のとおりです.

$.Buy/Sell(e, amount)
$.Buy(0.3); // 主交易所买入0.3个币
$.Sell(0.2); // 主交易所卖出0.2个币
$.Sell(exchanges[1], 0.1); // 次交易所卖出0.1个币
$.CancelPendingOrders(e, orderType)

$.CancelPendingOrders(); // 取消主交易所所有委托单
$.CancelPendingOrders(ORDER_TYPE_BUY); // 取消主交易所所有的买单
$.CancelPendingOrders(exchanges[1]); // 取消第二个交易所所有订单
$.CancelPendingOrders(exchanges[1], ORDER_TYPE_SELL); // 取消第二个交易所所有的卖单

批判は交差:

$.Cross(periodA, periodB) / $.Cross(arr1, arr2);

var n = $.Cross(15, 30);
var m = $.Cross([1,2,3,2.8,3.5], [3,1.9,2,5,0.6])
如果 n 等于 0, 指刚好15周期的EMA与30周期的EMA当前价格相等
如果 n 大于 0, 比如 5, 指15周期的EMA上穿了30周期的EMA 5个周期(Bar)
如果 n 小于 0, 比如 -12, 指15周期的EMA下穿了30周期的EMA 12个周期(Bar)
如果传给Cross不是数组, 则函数自动获取K线进行均线计算
如果传给Cross的是数组, 则直接进行比较

$.withdraw (e, currency, address, amount, fee, password) は,以下のように表示されています.

$.withdraw(exchange, "btc", "0x.........", 1.0, 0.0001, "***")

コモディティ・フューチャー取引のカテゴリー

商品フューチャー取引データベースの使用は安定しており,使用を推奨しています.https://www.fmz.com/strategy/12961◎ 組み込まれているので,コピーする必要はありません.

CTAデータベース

  • 物理ディスクは自動的にインデックスを主力連鎖にマッピングします.
  • 移動を自動的に処理します.
  • rb000/rb888 のようなマッピングを指定することができます. rb指数取引を主連鎖にマッピングします.
  • Rb000/MA888のような他のコントラクトにマップすることもできます. RbインデックスのK線を見て,MA主力連続で取引します.
function main() {
    $.CTA("rb000,M000", function(r, mp) {
        if (r.length < 20) {
            return
        }
        var emaSlow = TA.EMA(r, 20)
        var emaFast = TA.EMA(r, 5)
        var cross = $.Cross(emaFast, emaSlow);
        if (mp <= 0 && cross > 2) {
            Log("金叉周期", cross, "当前持仓", mp);
            return 1
        } else if (mp >= 0 && cross < -2) {
            Log("死叉周期", cross, "当前持仓", mp);
            return -1
        }
    });
}

データベースの呼び出し例

function main() {
    var p = $.NewPositionManager();
    p.OpenShort("MA609", 1);
    p.OpenShort("MA701", 1);
    Log(p.GetPosition("MA609", PD_SHORT));
    Log(p.GetAccount());
    Log(p.Account());
    Sleep(60000 * 10);
    p.CoverAll("MA609");
    LogProfit(p.Profit());
    Log($.IsTrading("MA609"));
    // 多品种时使用交易队列来完成非阻塞的交易任务
    var q = $.NewTaskQueue();
    q.pushTask(exchange, "MA701", "buy", 3, function(task, ret) {
        Log(task.desc, ret)
    })
    while (true) {
        // 在空闲时调用poll来完成未完成的任务
        q.poll()
        Sleep(1000)
    }
}

絵画図鑑

原始の図図機能が比較的複雑であるため,次のチュートリアルで紹介されるので,初心者は図図库を直接使用することをお勧めします.非常にシンプルな図図,K図などです.FMZはシンプルな図庫を組み込み,ポリシー編集ページで見ることができます.

img

Javascript版画図鑑のコピーアドレス:https://www.fmz.com/strategy/27293Pythonのプリントラインクラスタをコピーするアドレス:https://www.fmz.com/strategy/39066

具体例として:

function main() {
    while (true) {
        var ticker = exchange.GetTicker()
        if (ticker) {
            $.PlotLine('Last', ticker.Last) //可以同时画两条线,Last是这条线的名字
            $.PlotLine('Buy', ticker.Buy)
        }
        Sleep(6000)
    }
}

策略パラメータ設定

策略編集の下に,策略パラメータ設定があります. 策略のグローバル変数に対応し,コードの任意の位置からアクセスできます. 策略パラメータは,実体ディスクインターフェースで変更され,再起動時に有効になります. そのため,いくつかの変数をパラメータとして設定することができ,変更策略なしでパラメータを変更することができます.img

  • 変数名: 上の図の number、string、combox などは,戦略グループで直接使用できます.
  • 記述:パラメータの名前は,パラメータの意味を理解するのに便利です.
  • コメント:パラメータの詳細説明,マウスがパラメータに停まるとその記述が表示されます.
  • タイプこのパラメータの種類については,以下に詳細に説明します.
  • デフォルト値: このパラメータのデフォルト値である.

文字列型と数字型は理解しやすく,最も一般的なタイプです. 引き下げボックスはパラメータインターフェースでオプションの引き下げボックスを表示します. 例えば,引き下げボックスのSYMBOLパラメータ値を設定できます.BTC|USDT|ETH参数ページのダウンラグでUSDTを選択すると,SYMBOLの値がUSDTのインデックス1になります. 勾配は選択ボックスで,勾配はtrue,否则はfalseです.

参数もたくさん設定できます.https://www.fmz.com/bbs-topic/1306

戦略の復習

戦略の量化作業が完了すると,戦略が歴史データの中でどのように利益を得ているかを見るために,戦略を歴史的データでテストすることができます. 復習結果は参照のみです. FMZの量化プラットフォームは,デジタル通貨の現貨,先物,BitMEX永続契約商品,先物,デジタル通貨が主流種を支えるものの大部分の復習をサポートします. Javascript の復習はブラウザで行われ,Python の復習はホスト上で行われ,プラットフォームが公共のホストを提供することができる. Mac の復習はさらに多くのパラメータを設定する必要があります.

検定メカニズム

onbar回線メカニズムは,K線に基づくもので,各K線が回線時間点を生成し,この時間点では,現在のK線の高低回收価格,取引量などの情報,およびその時間点前の情報を得ることができる.


もっと

ガオエンチェアアピ

科学ローカルで実行するポリシーはどうですか? 私は簡単なログ出力文を書いて,文末操作に従います. まず,ノートPCをサーバーとして使い,管理者プログラムを起動します. ステップ2は,簡単なLogの出力情報 (FMZのAPIインタフェース機能) を test.pyプログラムに書き込む. 第3ステップは,文末のように,runfileを書いて,run.py でtest.py を呼び出します. /upload/asset/1add39483ef82d45b3ce3.png

ジプ9簡単にクラウド量化取引のコースを買ったのですが,どこへ行けばいいですか?

モヌラジャック沢山

モヌラジャックこんにちは

ブラッド・ミッチ学習する

はいGetAccountは,アカウントを取得します. 紹介では,FrozenStocksは,利用可能なバランスではなく,凍結されたバランスでなければならない.

雅少尉getorder outtime オーダーオーダーアウトタイム,okexの取引所,どうする?

オウミツァは高技を作った保証資産レートは 0%まで取得できないか 強制的に平衡される保証資産レート

シフェン2020Python の死回り の sleep time は 0.1s に設定できます. sleep ((100) です. ここで sleep ((10) を書いてあると思います. 0.1s は huobi の HM の API 制限を超えないのでしょうか?

東風化宇exchange.SetDirection (("closebuy"); //永続契約の場合,直接exchange.SetDirection (("sell") を設定する OKexの永続契約を試してみました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました.

東風化宇exchange.SetDirection (("closebuy"); //永続契約の場合,直接exchange.SetDirection (("sell") を設定する OKexの永続契約を試してみました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました. OKexの永続契約を OKexで試しました.

東風化宇GetOrders のコードには2つのスペルミスがあります。。。1つは function が fuction と書かれ,もう1つは for ループの条件に書かれています.

東風化宇間違っていたのは私だ. exchange.Buy ((-1, 0.5),取引対はETH_BTCで,市場価格表は0.5BTCのETHを購入することを表しています. exchange.Buy ((price, 0.5)) で,この価格表の場合,この価格表で 0.5ETH を購入します.

東風化宇exchange.Buy ((-1, 0.5),取引対はETH_BTCであり,市場価格で0.5BTCのETHを購入することを表しています. 市場価格の0.5ETHで購入したものです.

ジプ9ありがとうございました

小草オンラインで利用可能で,このサイトをご覧いただけます.

小草フェイスブックとTwitterは,

はい大変です. 公式の交流グループがありますか? ときどき問題が発生し,どこで質問したらいいのか分かりません.

小草変更しました

小草再び取得

小草ソースメッセージには,GetRawJSON またはInfoフィールドの情報を参照できます.

東風化宇管理者の返信もありました. 誤字が沢山あります. ハハ.

小草間違えを指摘してくれてありがとう.

小草Bitmexは,Bitmexの取引先である Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexに,Bitmexの取引先である Bitmexが,Bitmexの取引先である Bitmexの取引先である Bitmexが,Bitmexの取引先である.