Alamat strategi:https://www.fmz.com/strategy/345
Dalam artikel ini, mari kita berlatih memindahkan strategi JavaScript yang mudah. Melalui pemindahan strategi, kita boleh menjadi lebih biasa dengan panggilan antara muka Platform Dagangan Kuantum FMZ, dan memahami sedikit perbezaan antara bahasa yang berbeza dalam strategi pembangunan platform. Sebenarnya, perbezaan antara versi JavaScript dan versi Python sangat sedikit, kerana panggilan antara muka pada dasarnya sama.
Penerangan dipetik dari versi JavaScript:
Ini memerlukan untuk membuka kedudukan. Sebagai contoh, jika akaun mempunyai 5000 yuan dan satu mata wang, jika nilai mata wang lebih besar daripada baki akaun 5000 yuan dan perbezaan harga melebihi nilai ambang, sebagai contoh, jika mata wang kini bernilai 6000 yuan, maka jual (6000-5000) / 6000/2 mata wang, menunjukkan bahawa mata wang telah menghargai dan kita boleh menukar wang kembali. Jika mata wang telah merosot, sebagai contoh, 4000 yuan, maka kita membeli (5000-4000) / 4000/2 mata wang. Jika mata wang menurun, beli beberapa. Jika ia naik lagi, jual lagi, Seperti baki, kedua-dua belah pihak mempunyai lindung nilai yang berbeza, jadi saya memanggilnya strategi keseimbangan
Prinsip strategi ini sangat mudah. Kod versi JavaScript tidak panjang, hanya lebih daripada 70 baris. Strategi bahasa Python dengan tatabahasa yang lebih ringkas ditransplantasikan, dan kodnya lebih pendek, yang sangat sesuai untuk pemula belajar. Terdapat banyak kod yang dikongsi oleh pemaju di Platform Dagangan Kuantum FMZ, dan bahasa ini menyokongJavaScript
/C++
/Python
Oleh itu, menguasai lebih banyak bahasa pembangunan bukan sahaja berguna untuk strategi pembelajaran, penyelidikan, dan pembangunan, tetapi juga biasa dengan pelbagai antara muka API platform.
'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''
InitAccount = None
def CancelPendingOrders():
ret = False
while True:
orders = _C(exchange.GetOrders)
if len(orders) == 0 :
return ret
for j in range(len(orders)):
exchange.CancelOrder(orders[j].Id)
ret = True
if j < len(orders) - 1:
Sleep(Interval)
return ret
def onTick():
acc = _C(exchange.GetAccount)
ticker = _C(exchange.GetTicker)
spread = ticker.Sell - ticker.Buy
diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2
ratio = diffAsset / acc.Balance
LogStatus("ratio:", ratio, _D())
if abs(ratio) < threshold:
return False
if ratio > 0 :
buyPrice = _N(ticker.Sell + spread, ZPrecision)
buyAmount = _N(diffAsset / buyPrice, XPrecision)
if buyAmount < MinStock:
return False
exchange.Buy(buyPrice, buyAmount, diffAsset, ratio)
else :
sellPrice = _N(ticker.Buy - spread, ZPrecision)
sellAmount = _N(-diffAsset / sellPrice, XPrecision)
if sellAmount < MinStock:
return False
exchange.Sell(sellPrice, sellAmount, diffAsset, ratio)
return True
def main():
global InitAccount, LoopInterval
InitAccount = _C(exchange.GetAccount)
LoopInterval = max(LoopInterval, 1)
while True:
if onTick():
Sleep(1000)
CancelPendingOrders()
Log(_C(exchange.GetAccount))
Sleep(LoopInterval * 1000)
Kod bermula dengan
'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''
Ia merujuk kepada konfigurasi backtesting, yang bermaksud bahawa konfigurasi backtesting (tetapan) disimpan dalam bentuk kod dan dikonfigurasikan secara automatik mengikut tetapan semasa backtesting. Bahagian ini boleh dipadam. Jika dipadam, kita perlu menetapkan maklumat konfigurasi backtesting pada halaman backtesting secara manual. Rujukan:https://www.fmz.com/bbs-topic/859
Parameter strategi ini sepenuhnya konsisten dengan versi JavaScript. Kod strategi juga dipindahkan ayat demi ayat. Struktur program tidak berubah. Anda boleh membandingkan strategi yang ditulis dalam bahasa yang berbeza ayat demi ayat.
Konfigurasi Parameter
Statistik
Alamat strategi:https://www.fmz.com/strategy/183374
Strategi ini adalah untuk rujukan, pembelajaran dan ujian belakang sahaja.