skayn-trading-sdk
Version:
Professional Bitcoin trading strategy backtesting framework with institutional-grade architecture
238 lines (212 loc) • 6.99 kB
JavaScript
/**
* Skayn Trading SDK
* The easiest way to build Bitcoin trading strategies
* Focused on Bitcoin perpetuals and spot trading
*
* @example
* const { SDK } = require('skayn-trading-sdk');
*
* class MyStrategy extends SDK.Strategy {
* async analyze(data, portfolio) {
* return { action: 'BUY', confidence: 0.8 };
* }
* }
*
* const bot = SDK.create()
* .strategy(new MyStrategy())
* .dataProvider(myDataProvider)
* .backtest();
*/
// Core Interfaces - The building blocks
const IStrategy = require('./src/interfaces/IStrategy');
const IDataProvider = require('./src/interfaces/IDataProvider');
const IBacktestEngine = require('./src/interfaces/IBacktestEngine');
const IExchangeProvider = require('./src/interfaces/IExchangeProvider');
const IRiskManager = require('./src/interfaces/IRiskManager');
const IPositionManager = require('./src/interfaces/IPositionManager');
const IExecutionEngine = require('./src/interfaces/IExecutionEngine');
const INotificationProvider = require('./src/interfaces/INotificationProvider');
const IStorageProvider = require('./src/interfaces/IStorageProvider');
// Framework Components
const TradingFramework = require('./src/core/trading-framework');
const PluginRegistry = require('./src/core/plugin-registry');
// Utilities
const ErrorHandler = require('./src/utils/error-handler');
/**
* Main SDK Class - Your entry point to algorithmic trading
*/
class SkaynTradingSDK {
constructor(config = {}) {
this.framework = new TradingFramework(config);
this.registry = new PluginRegistry();
this.config = config;
}
/**
* Register a strategy plugin
* @param {IStrategy} strategy - Strategy implementation
* @returns {SkaynTradingSDK} Chainable
*/
strategy(strategy) {
this.framework.use('strategy', strategy);
return this;
}
/**
* Register a data provider plugin
* @param {IDataProvider} provider - Data provider implementation
* @returns {SkaynTradingSDK} Chainable
*/
dataProvider(provider) {
this.framework.use('dataProvider', provider);
return this;
}
/**
* Register an exchange provider plugin
* @param {IExchangeProvider} exchange - Exchange implementation
* @returns {SkaynTradingSDK} Chainable
*/
exchange(exchange) {
this.framework.use('executionEngine', exchange);
return this;
}
/**
* Register a backtest engine - use ours or plug in your own
* @param {IBacktestEngine} engine - Backtest engine implementation
* @returns {SkaynTradingSDK} Chainable
*/
backtestEngine(engine) {
this.framework.use('backtestEngine', engine);
return this;
}
/**
* Run backtest with current configuration
* @param {Object} config - Backtest configuration
* @returns {Promise<Object>} Backtest results
*/
async backtest(config = {}) {
// Set up required components if not provided
if (!this.framework.activeComponents.has('backtestEngine')) {
const SimpleBacktestEngine = require('./src/backtesting/engines/simple-backtest-engine');
this.framework.use('backtestEngine', new SimpleBacktestEngine(config));
}
if (!this.framework.activeComponents.has('positionManager')) {
const SimplePositionManager = require('./src/backtesting/managers/simple-position-manager');
this.framework.use('positionManager', new SimplePositionManager(config));
}
if (!this.framework.activeComponents.has('executionEngine')) {
// Mock execution engine for backtesting
const mockExecutionEngine = {
async execute(signal) {
return { success: true, executedPrice: 45000 };
}
};
this.framework.use('executionEngine', mockExecutionEngine);
}
return await this.framework.runBacktest(config);
}
/**
* Start live trading
* @param {Object} config - Live trading configuration
* @returns {Promise<void>}
*/
async live(config = {}) {
return await this.framework.startLiveTrading(config);
}
}
/**
* Quick start factory functions
*/
const SDK = {
/**
* Create a new SDK instance
* @param {Object} config - Initial configuration
* @returns {SkaynTradingSDK} SDK instance
*/
create(config = {}) {
return new SkaynTradingSDK(config);
},
// Base interfaces for extending
Strategy: IStrategy,
DataProvider: IDataProvider,
BacktestEngine: IBacktestEngine,
/**
* Create a strategy from a simple function
* @param {Function} analyzeFunction - Strategy logic
* @param {Object} metadata - Strategy metadata
* @returns {IStrategy} Strategy instance
*/
strategy(analyzeFunction, metadata = {}) {
return new (class extends IStrategy {
async analyze(data, portfolio) {
return await analyzeFunction(data, portfolio);
}
getRequiredWarmupPeriods() {
return metadata.warmupPeriods || 20; // Default 20 periods
}
getStrategyMetadata() {
return {
name: metadata.name || 'Custom Strategy',
version: metadata.version || '1.0.0',
description: metadata.description || 'User-defined strategy',
...metadata
};
}
})();
},
/**
* Create a data provider from a simple function
* @param {Function} getDataFunction - Data fetching logic
* @param {Object} metadata - Provider metadata
* @returns {IDataProvider} Data provider instance
*/
dataProvider(getDataFunction, metadata = {}) {
return new (class extends IDataProvider {
async getData(startDate, endDate, interval, symbol) {
return await getDataFunction(startDate, endDate, interval, symbol);
}
})();
},
/**
* Create a backtest engine from custom logic
* @param {Function} runBacktestFunction - Backtest execution logic
* @param {Object} metadata - Engine metadata
* @returns {IBacktestEngine} Backtest engine instance
*/
backtestEngine(runBacktestFunction, metadata = {}) {
return new (class extends IBacktestEngine {
async runBacktest(config) {
return await runBacktestFunction(config);
}
getBacktestEngineMetadata() {
return {
name: metadata.name || 'Custom Engine',
version: metadata.version || '1.0.0',
description: metadata.description || 'User-defined backtest engine',
...metadata
};
}
})();
}
};
// Export everything
module.exports = {
// Main SDK class
SDK,
SkaynTradingSDK,
// Base interfaces - Extend these to create plugins
Strategy: IStrategy,
DataProvider: IDataProvider,
BacktestEngine: IBacktestEngine,
ExchangeProvider: IExchangeProvider,
RiskManager: IRiskManager,
PositionManager: IPositionManager,
ExecutionEngine: IExecutionEngine,
NotificationProvider: INotificationProvider,
StorageProvider: IStorageProvider,
// Framework components
TradingFramework,
PluginRegistry,
// Utilities
ErrorHandler,
// Version info
version: '1.0.0'
};