Strategieadresse:https://www.fmz.com/strategy/345
In diesem Artikel werden wir die Portierung einer einfachen JavaScript-Strategie üben. Durch die Portierung der Strategie können wir uns besser mit dem Aufruf der FMZ Quant Trading Platform-Schnittstelle vertraut machen und die leichten Unterschiede zwischen verschiedenen Sprachen in der Plattformentwicklungsstrategie verstehen.
Beschreibung aus der JavaScript-Version:
Dies erfordert die Eröffnung einer Position. Zum Beispiel, wenn das Konto 5000 Yuan und eine Währung hat, wenn der Wert der Währung größer ist als der Kontostand von 5000 Yuan und die Preisdifferenz den Schwellenwert übersteigt, zum Beispiel, wenn die Währung jetzt 6000 Yuan wert ist, dann verkaufen (6000-5000) / 6000/2 Währungen, was bedeutet, dass die Währung aufgestiegen ist und wir das Geld zurückwandeln können. Wenn die Währung abgewertet hat, zum Beispiel 4000 Yuan, dann kaufen wir (5000-4000) / 4000/2 Währungen. Wenn die Währung sinkt, kaufen einige. Wenn sie wieder steigt, verkaufen Sie wieder, wie der Saldo, haben die beiden Seiten unterschiedliche Absicherungen, also nenne ich es die Gleichgewichtsstrategie
Das Prinzip der Strategie ist sehr einfach. Der Code der JavaScript-Version ist nicht lang, nur mehr als 70 Zeilen. Die Python-Sprachstrategie mit präziserer Grammatik wird transplantiert und der Code ist viel kürzer, was für Anfänger sehr geeignet ist.JavaScript
/C++
/Python
Daher ist die Beherrschung mehrerer Entwicklungssprachen nicht nur hilfreich für Lern-, Forschungs- und Entwicklungsstrategien, sondern auch für die Kenntnis der verschiedenen API-Schnittstellen der Plattform.
'''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)
Der Code beginnt mit
'''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}]
'''
Es bezieht sich auf die Backtesting-Konfiguration, was bedeutet, dass die Backtesting-Konfiguration (Einstellungen) in Form von Code gespeichert und automatisch entsprechend der Einstellung während des Backtestings konfiguriert wird. Dieser Teil kann gelöscht werden. Wenn er gelöscht wird, müssen wir die Backtesting-Konfigurationsinformationen auf der Backtesting-Seite manuell einstellen. Referenz:https://www.fmz.com/bbs-topic/859
Die Parameter dieser Strategie entsprechen vollständig der JavaScript-Version. Der Strategiecode wird auch Satz für Satz transplantiert. Die Programmstruktur hat sich nicht geändert. Sie können die in verschiedenen Sprachen geschriebenen Strategien Satz für Satz vergleichen.
Konfiguration der Parameter
Statistiken
Strategieadresse:https://www.fmz.com/strategy/183374
Die Strategie ist nur für Referenz, Lernen und Rücktest.