Skip to content

alfagen/gera

 
 

Repository files navigation

Gera

RSpec Tests

Multiple rates generator for crypto changers and markets.

Осуществляет

  • Регулярный (ежесекундный) сбор и хранение курсов (ExternalRate) из внешних источников (RateSource)
  • Построение и хранение матрицы базовых курсов (CurrencyRate) для поддерживаемых валют из курсов внешних истичников (ExternalRate) на основе установленного метода расчета (CurrencyRateMode) автоматически или через кросс-курсы.
  • Построение и хранение матрицы конечных курсов (DirectionRate) для поддерживаемых платежных сервисов (PaymentSystem) с установленной комиссией (ExchangeRate)
  • Регулярная группировка базовых и конечных курсов в N-минутные отрезки со свечками для истории (CurrencyRateHistoryInterval и DirectionRateHistoryInterval)
  • Регулярная очистка матриц ежесекундных курсов (за сутки накапливается несколько гигабайт)

Installation

Add this line to your application's Gemfile:

gem 'gera'

And then execute:

$ bundle

Or install it yourself as:

$ gem install gera

Configuration

Add ./config/initializers/gera.rb with this content:

Gera.configure do |config|
  config.cross_pairs = { kzt: :rub, eur: :rub }

  # Автокурс: ID нашего обменника в BestChange (для исключения из расчёта позиции)
  config.our_exchanger_id = 999

  # Автокурс: Порог аномальной комиссии для защиты от манипуляторов (по умолчанию 50%)
  config.anomaly_threshold_percent = 50.0
end

Autorate Calculator Types

Для каждого направления обмена (ExchangeRate) можно выбрать тип калькулятора автокурса:

# Legacy (по умолчанию) - старый алгоритм
exchange_rate.update!(calculator_type: 'legacy')

# PositionAware - новый алгоритм с защитой от перепрыгивания позиций
exchange_rate.update!(calculator_type: 'position_aware')

PositionAware гарантирует, что обменник займёт позицию внутри целевого диапазона (position_from..position_to), а не перепрыгнет выше. Поддерживает:

  • Адаптивный GAP для плотных рейтингов
  • Исключение своего обменника из расчёта
  • Защиту от манипуляторов с аномальными курсами

Supported external sources of basic rates

  • EXMO, Russian Central Bank, Bitfinex, Manual

Supported currencies

  • RUB, USD, BTC, LTC, ETH, DSH, KZT, XRP, ETC, XMR, BCH, EUR, NEO, ZEC

Database

SQL tables diagram - https://github.com/finfex/gera/blob/master/doc/erd.pdf

TODO

  • move Authority to application level
  • Remove STI from RateSource

Contributing

  • Fork
  • Create Pull Request

License

The gem is available as open source under the terms of the GPLv3.

About

Currency rates generator

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Ruby 87.2%
  • Slim 7.7%
  • HTML 4.3%
  • Other 0.8%