Адрес стратегии:https://www.fmz.com/strategy/345
В этой статье мы будем практиковать перенос простой стратегии JavaScript. Благодаря переносу стратегии мы сможем лучше ознакомиться с вызовом интерфейса FMZ Quant Trading Platform и понять незначительные различия между различными языками в стратегии разработки платформы. На самом деле, разница между версией JavaScript и версией Python очень мала, потому что вызовы интерфейса в основном одинаковы.
Описание приведено из версии JavaScript:
Это требует открытия позиции. Например, если на счете есть 5000 юаней и одна валюта, если стоимость валюты больше, чем баланс на счете 5000 юаней, и разница в цене превышает пороговое значение, например, если валюта сейчас стоит 6000 юаней, то продавайте (6000-5000)/6000/2 валюты, что указывает на то, что валюта подорожала, и мы можем конвертировать деньги обратно. Если валюта обесценилась, например, 4000 юаней, то мы покупаем (5000-4000)/4000/2 валюты. Если валюта снижается, покупайте некоторые. Если она снова растет, снова продавайте, как и баланс, у двух сторон разные хеджировки, поэтому я называю это стратегией равновесия.
Принцип стратегии очень прост. Код версии JavaScript не длинный, всего более 70 строк. Стратегия языка Python с более лаконичной грамматикой трансплантируется, а код намного короче, что очень подходит для обучения новичков.JavaScript
/C++
/Python
Таким образом, освоение большего количества языков разработки не только полезно для обучения, исследований и стратегий разработки, но и знакомо с различными интерфейсами API платформы.
'''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)
Код начинается с:
'''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}]
'''
Это относится к конфигурации бэкстестинга, что означает, что конфигурация бэкстестинга (настройки) сохраняется в виде кода и настраивается автоматически в соответствии с настройкой во время бэкстестинга. Эта часть может быть удалена. Если она удалена, нам нужно установить информацию конфигурации бэкстестинга на странице бэкстестинга вручную. Ссылка:https://www.fmz.com/bbs-topic/859
Параметры этой стратегии полностью согласуются с версией JavaScript. Код стратегии также трансплантируется предложение за предложением. Структура программы не изменилась. Вы можете сравнить стратегии, написанные на разных языках предложение за предложением.
Конфигурация параметров
Статистика
Адрес стратегии:https://www.fmz.com/strategy/183374
Стратегия предназначена только для ссылки, обучения и обратного тестирования.