Type/to search
8
Follow
1364
Followers
Versão Python da estratégia de equilíbrio de plataforma única
Discussions
Created 2020-02-05 10:02:03  Updated 2023-10-12 21:20:47
 1
 2965

img

Versão Python da estratégia de equilíbrio de plataforma única

Versão JavaScript

Endereço estratégico: https://www.fmz.com/strategy/345

Neste artigo, vamos praticar a portabilidade de uma estratégia simples de JavaScript. Ao transplantar estratégias, você se familiarizará mais com as chamadas da interface da Inventor Quantitative Trading Platform e entenderá as pequenas diferenças entre diferentes linguagens ao desenvolver estratégias na plataforma. Na verdade, a diferença entre a estratégia da versão JavaScript e a versão Python a estratégia é muito pequena porque as chamadas de interface são basicamente as mesmas.

Descrição da estratégia

Citando a versão JavaScript das instruções:

Isso requer a abertura de uma posição. Por exemplo, se a conta tiver 5.000 yuans e 1 moeda, se o valor da moeda for maior que o saldo da conta de 5.000 e a diferença de preço exceder o limite, por exemplo, a moeda agora vale 6.000 yuan, então venda (6.000-5.000)/6.000. /2 moedas, significa que a moeda se valorizou, troque o dinheiro de volta, se a moeda se desvalorizar, por exemplo, para 4.000 yuan, compre (5.000-4.000)/4.000/2 moedas, compre algumas de volta quando a moeda cair, se ela subir novamente, eu a venderei novamente, assim como um equilíbrio, com diferentes proteções em ambos os lados, então eu a chamei de estratégia equilibrada.

O princípio da estratégia é muito simples, e a versão JavaScript do código não é longa, apenas mais de 70 linhas. Transplantado para a estratégia da linguagem Python com sintaxe mais concisa, o código é mais curto e muito adequado para iniciantes aprenderem. Há muitos códigos compartilhados por desenvolvedores na Inventor Quantitative Trading Platform, e a linguagem suportaJavaScript/C++/PythonEtc., portanto, dominar mais uma linguagem de desenvolvimento não é útil apenas para estratégias de aprendizado, pesquisa e desenvolvimento, mas também permite que você se familiarize mais com as diversas interfaces de API da plataforma.

Código de estratégia

'''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)

O código começa com

'''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}] '''

É a configuração do backtest, o que significa que a configuração do backtest (configurações) é salva na forma de código, e o backtest é configurado automaticamente de acordo com essa configuração. Esta parte pode ser excluída. Se excluída, você precisará definir manualmente as informações de configuração do backtest na página do backtest durante o backtesting.
Referência: https://www.fmz.com/bbs-topic/859

Os parâmetros desta estratégia são exatamente os mesmos da versão JavaScript. O código da estratégia também é transplantado frase por frase, e a estrutura do programa não mudou. Você pode compará-los frase por frase para ver as diferenças entre as estratégias escritas em diferentes línguas.

Testes retrospectivos

Configuração de parâmetros
img

Estatísticas
img

img

Endereço estratégico: https://www.fmz.com/strategy/183374

A estratégia é apenas para referência, backtesting e teste. Se você estiver interessado, pode otimizá-la e atualizá-la.

Related Recommendations
Comment
All comments (1)

    好牛啊

    4 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)