
Alamat strategi: https://www.fmz.com/strategy/345
Dalam artikel ini, mari kita berlatih porting strategi JavaScript sederhana. Dengan mencangkok strategi, Anda akan menjadi lebih akrab dengan panggilan antarmuka Platform Perdagangan Kuantitatif Inventor dan memahami sedikit perbedaan antara berbagai bahasa saat mengembangkan strategi di platform. Faktanya, perbedaan antara strategi versi JavaScript dan versi Python strateginya sangat kecil karena panggilan antarmuka pada dasarnya sama.
Mengutip dari versi JavaScript dari instruksi:
Ini memerlukan pembukaan posisi. Misalnya, jika akun memiliki 5.000 yuan dan 1 koin, jika nilai koin lebih besar dari saldo akun 5.000 dan perbedaan harga melebihi ambang batas, misalnya, koin sekarang bernilai 6.000 yuan, kemudian jual (6.000-5.000)/6.000. /2 koin, itu berarti koin telah dihargai, tukarkan uangnya kembali, jika koin terdepresiasi, misalnya, menjadi 4000 yuan, beli (5000-4000)/4000/2 koin, beli kembali sebagian saat koin jatuh, jika naik lagi, saya akan menjualnya lagi, seperti keseimbangan, dengan lindung nilai yang berbeda di kedua sisi, jadi saya menyebutnya strategi seimbang.
Prinsip strateginya sangat sederhana, dan versi kode JavaScript-nya tidak panjang, hanya lebih dari 70 baris. Ditransplantasikan ke strategi bahasa Python dengan sintaksis yang lebih ringkas, kodenya lebih pendek dan sangat cocok untuk dipelajari oleh pemula. Ada banyak kode yang dibagikan oleh pengembang di Inventor Quantitative Trading Platform, dan bahasanya mendukungJavaScript/C++/PythonDll., jadi menguasai satu bahasa pengembangan lagi tidak hanya membantu strategi pembelajaran, penelitian, dan pengembangan, tetapi juga memungkinkan Anda menjadi lebih akrab dengan berbagai antarmuka API pada platform tersebut.
'''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 adalah konfigurasi backtest, artinya konfigurasi backtest (pengaturan) disimpan dalam bentuk kode, dan backtest secara otomatis dikonfigurasikan sesuai dengan pengaturan ini. Bagian ini dapat dihapus. Jika dihapus, Anda perlu mengatur informasi konfigurasi backtest secara manual pada halaman backtest selama backtesting. Referensi: https://www.fmz.com/bbs-topic/859
Parameter strategi ini sama persis dengan versi JavaScript. Kode strategi juga ditransplantasikan kalimat demi kalimat, dan struktur programnya tidak berubah. Anda dapat membandingkannya kalimat demi kalimat untuk melihat perbedaan antara strategi yang ditulis dalam bahasa yang berbeda. bahasa.
Konfigurasi parameter

Statistik


Alamat strategi: https://www.fmz.com/strategy/183374
Strategi ini hanya untuk referensi, pengujian ulang dan pengujian. Jika Anda tertarik, Anda dapat mengoptimalkan dan meningkatkannya.