Alamat strategi:https://www.fmz.com/strategy/345
Dalam artikel ini, mari kita latih porting strategi JavaScript sederhana. Melalui porting strategi, kita dapat menjadi lebih akrab dengan panggilan antarmuka FMZ Quant Trading Platform, dan memahami sedikit perbedaan antara bahasa yang berbeda dalam strategi pengembangan platform.
Deskripsi dikutip dari versi JavaScript:
Ini membutuhkan untuk membuka posisi. Misalnya, jika akun memiliki 5000 yuan dan satu mata uang, jika nilai mata uang lebih besar dari saldo akun 5000 yuan dan perbedaan harga melebihi nilai ambang batas, misalnya, jika mata uang sekarang bernilai 6000 yuan, maka jual (6000-5000)/6000/2 mata uang, menunjukkan bahwa mata uang telah meningkat dan kita dapat mengubah uang kembali. Jika mata uang telah mengalami penurunan nilai, misalnya, 4000 yuan, maka kita membeli (5000-4000)/4000/2 mata uang. Jika mata uang menurun, beli beberapa. Jika naik lagi, jual lagi, Seperti saldo, kedua belah pihak memiliki lindung nilai yang berbeda, jadi saya menyebutnya strategi keseimbangan
Prinsip strategi sangat sederhana. Kode versi JavaScript tidak panjang, hanya lebih dari 70 baris. Strategi bahasa Python dengan tata bahasa yang lebih ringkas ditransplantasikan, dan kode jauh lebih pendek, yang sangat cocok untuk pemula untuk dipelajari. Ada banyak kode yang dibagikan oleh pengembang di FMZ Quant Trading Platform, dan bahasa ini mendukungJavaScript
/C++
/Python
Oleh karena itu, menguasai lebih banyak bahasa pengembangan tidak hanya bermanfaat untuk strategi pembelajaran, penelitian, dan pengembangan, tetapi juga akrab dengan berbagai antarmuka 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)
Kode dimulai 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}]
'''
Ini mengacu pada konfigurasi backtesting, yang berarti bahwa konfigurasi backtesting (pengaturan) disimpan dalam bentuk kode dan dikonfigurasi secara otomatis sesuai dengan pengaturan selama backtesting. Bagian ini dapat dihapus. Jika dihapus, kita perlu mengatur informasi konfigurasi backtesting di halaman backtesting secara manual. Referensi:https://www.fmz.com/bbs-topic/859
Parameter strategi ini sepenuhnya konsisten dengan versi JavaScript. Kode strategi juga ditransplantasikan kalimat demi kalimat. Struktur program tidak berubah. Anda dapat membandingkan strategi yang ditulis dalam bahasa yang berbeda kalimat demi kalimat.
Konfigurasi parameter
Statistik
Alamat strategi:https://www.fmz.com/strategy/183374
Strategi ini hanya untuk referensi, pembelajaran dan back testing saja.