淺談合約量化系統(tǒng)開(kāi)發(fā)方案|量化合約系統(tǒng)開(kāi)發(fā)邏輯(Java)技
什么是量化交易機(jī)器人? 從本質(zhì)上說(shuō),交易機(jī)器人是一種軟件程序,它直接與金融交易所進(jìn)行交互(通常使用API獲取和解釋相關(guān)信息),并根據(jù)市場(chǎng)數(shù)據(jù)的解釋發(fā)出買(mǎi)賣(mài)訂單。這些機(jī)器人通過(guò)監(jiān)測(cè)市場(chǎng)價(jià)格走勢(shì),并根據(jù)一套預(yù)先設(shè)定和編程的規(guī)則做出反應(yīng),I8O量化2857交易8624系統(tǒng)開(kāi)發(fā)從而做出這些決定。通常,一個(gè)交易機(jī)器人會(huì)分析市場(chǎng)行為,例如交易量、訂單、價(jià)格和時(shí)間,它們通??梢愿鶕?jù)您自己的喜好進(jìn)行編程。 完整策略代碼 -- coding: utf-8 -- import time import json try: import md5 import urllib2 from urllib import urlencode except: import hashlib as md5 import urllib.request as urllib2 from urllib.parse import urlencode def api(method, *args): d = { ??'version': '1.0', ??'access_key': accessKey, ??'method': method, ??'args': json.dumps(list(args)), ??'nonce': int(time.time() * 1000), ??} d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest() return json.loads(urllib2.urlopen('https://www.fmz.com/api/v1', urlencode(d).encode('utf-8')).read().decode('utf-8')) RobotParams = json.loads(strRobotParams) def main(): 一旦我們創(chuàng)建了一個(gè)合約,我們必須編譯并且創(chuàng)建源代碼,這樣我們才能夠在我們的應(yīng)用中部署合約并調(diào)用它的函數(shù)。有關(guān) Solidity 編譯器的相關(guān)信息,可以查閱官方網(wǎng)站:https://remix.ethereum.org。 編譯合約并創(chuàng)建源代碼 Solidity 為編譯器提供了最新的 Docker 鏡像,正式版本標(biāo)記為stable,來(lái)自于開(kāi)發(fā)分支的不穩(wěn)定版本標(biāo)記為nightly。但是,Docker 鏡像只包含編譯器可執(zhí)行文件,因此我們必須將 Solidity 合約輸入文件進(jìn)行持久化卷掛載。假設(shè)這些文件在我們運(yùn)行 Docker 容器機(jī)器的目錄 /home/docker 下,我們可以使用以下命令進(jìn)行編譯。這個(gè)命令創(chuàng)建了兩個(gè)文件:一個(gè)二進(jìn)制文件 .bin,是 EVM 可以解釋的智能合約代碼,另外一個(gè)是應(yīng)用程序二進(jìn)制接口文件.abi,里面定義了智能合約方法。 $ docker run --rm -v /home/docker:/build ethereum/solc:stable /build/TransactionFee.sol --bin --abi --optimize -o /build 編譯輸出文件在容器的/build目錄下,并且持久化存儲(chǔ)在/home/docker目錄下。在編譯結(jié)束后,該容器被刪除,因?yàn)楝F(xiàn)在不需要它。我們可以使用 web3j 庫(kù)來(lái)從編譯后的智能合約文件中創(chuàng)建源代碼。web3j 的可執(zhí)行文件在${WEB3J_HOME}/bin目錄下,在創(chuàng)建源代碼時(shí),需要指定.bin 和 .abi文件的路徑,并且設(shè)定目標(biāo)包名和目錄。 $ web3j solidity generate /build/transactionfee.bin /build/transactionfee.abi -p pl.piomin.services.contract.model -o src/main/java/ Web3j 可執(zhí)行文件在給定的包名下創(chuàng)建了 Java 源文件,該類名為 Solidity 智能合約名,下面是我們創(chuàng)建出來(lái)的源代碼。 public class Transactionfee extends Contract { private static final String BINARY = "608060405234801561..." public static final String FUNC_GETRECEIVERBALANCE = "getReceiverB