Skip to content

๐Ÿฆ™ A cute and cuddly multi-platform cryptocurrency quant trading engine.

Notifications You must be signed in to change notification settings

anthonykrivonos/guanaco

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Guanaco

A cute and cuddly cryptocurrency quant trading engine in TypeScript.

The guanaco (Lama guanicoe) (from Quechua "Wanaku", via Spanish) is a camelid native to South America, closely related to the llama. Its name comes from the Quechua word huanaco (modern spelling wanaku). - Wikipedia

โœจ Features

  • Live, schedule-based trading
  • Algorithm backtesting
  • Same source code for all clients
  • ... and many more to come!

๐Ÿ“ฆ Installation

npm install --save guanaco

or

yarn add guanaco

โœ… It's Easy AF

Live Trading Example with Gemini

  1. yarn add gaunaco
  2. Paste and start trading like a badass.
import { GeminiClient, Scheduler } from 'guanaco'

const geminiClient = GeminiClient({
    key: 'my-key',
    secret: 'my-secret'
})

let lastPrice = 0

// Schedule every hour
Scheduler.hourInterval(() => {
    geminiClient.info('btcusd').then((info) => {
        // Not-so-great strategy here
        const change = (info.ticker.last - lastPrice)/lastPrice
        if (change > 0.05) {
            geminiClient.sell('btcusd', 20, 50)
        }
        lastPrice = info.ticker.last
    })
}, 1)

๐Ÿ•— Backtesting Example

  1. yarn add gaunaco
  2. Determine your start date and interval of trading.
  3. Run your algorithm with the starting portfolio of your choice (here, we start with $2400).
  4. Asynchronously get your results!
import { Backtester, BacktestClient, BacktestClientPortfolio, BacktestInterval, OrderType } from '../../src';

const lastMonth = new Date(2019, 7, 30)
const backtestInterval = BacktestInterval.ONE_DAY

let backtester = new Backtester(lastMonth, backtestInterval)

let lastAskPrice = null
backtester.run({ usd: 2400 }, (client:BacktestClient) => {
    const info = client.info('btcusd')
    if (lastAskPrice && lastAskPrice > info.ticker.ask) {
        client.buy('btcusd', 0.25, info.ticker.ask, OrderType.MARKET)
        lastAskPrice = info.ticker.ask
    }
}).then((result) => {
    console.log(`We earned ${result.usd!}!`)
})

๐Ÿ’ธ Supported Clients

Current

Future

๐Ÿ‘ซ Collaboration

If you're interested in collaborating and adding onto the available clients and functionality, please feel free to submit pull requests.

๐Ÿ“ Authors

Anthony Krivonos - Portfolio | GitHub