2 个不稳定版本

0.1.0 2023年8月26日
0.0.1 2023年6月15日

#5 in #coinbase

Apache-2.0

130KB
1K SLoC

oscillatorsetups

财务技术分析库

oscillatorsetups 是一个基于 Rust 的财务技术分析库,旨在确定各种技术振荡器的最盈利配置。
它提供了广泛金融数据的处理能力,使其适用于股票、商品、外汇和加密货币。

主要模块:

  • 振荡器:对交易数据进行技术分析计算。
  • 盈亏模拟:分析各种振荡器配置的潜在盈亏。
  • 数据获取:虽然这不是它的主要焦点,但该库可以从加密货币交易所获取交易数据,作为辅助工具帮助进行振荡器分析。

由于易于获取和免费的 API 选项,选择了加密货币的 OHLCV 烛台数据,这有助于高效的测试和开发。
但是,也可以使用任何其他股票指数、商品、外汇数据进行分析。

当前分析能力

  • 随机分析:该库目前支持对金融数据的随机振荡器分析。
  • 开发中:目前正在开发其他技术指标的分析,如 MACD、RSI 等,将在未来的版本中引入。

安装

要将 oscillatorsetups 包含到您的项目中,请在您的 Cargo.toml 文件中添加以下内容:

[dependencies]
oscillatorsetups = "0.1.0"

使用

分析振荡器配置

以下是使用库确定盈利的随机振荡器配置的方法。

use oscillatorsetups::exchange::chart_data::klines::{Intervals, KlineParams};
use oscillatorsetups::pnl_simulator::stochastic::{PnlParams, Stochastic};

fn main() {
    let stochastic = match Stochastic::new(
        "binance",  // or "coinbase"
        KlineParams {
            base_asset  : "ETH",
            quote_asset : "USDT",
            interval    : Intervals::H4, // Refer to exchange api for correct intervals set values
            limit       : 1000,
            base_url    : None, // Defaults: binance is https://api.binance.us or coinbase is "https://api.exchange.coinbase.com"
            source      : Some("api"),
        }) {
        Ok(s) => s
            .exchange_fee(0.00075)  // Default None
            .min_qty(0.0001)        // Default None
            .min_price(0.01),       // Default None
        Err(e) => {
            eprintln!("Failed to create Stochastic: {}", e);
            return;
        }
    };
    stochastic.top_net_profit(PnlRange { k_length:5..=42, k_smoothing:3..=42, d_length:3..=42, });
    
    /* At the time of analyzing, above results were:
    Net profit: 416.82, Parameters: PnlParams { k_length:  7, k_smoothing: 41, d_length: 24 }
    Net profit: 418.47, Parameters: PnlParams { k_length: 11, k_smoothing: 40, d_length: 17 }
    Net profit: 424.65, Parameters: PnlParams { k_length:  8, k_smoothing: 41, d_length: 21 }
    Net profit: 426.67, Parameters: PnlParams { k_length:  8, k_smoothing: 41, d_length: 24 }
    Net profit: 427.69, Parameters: PnlParams { k_length: 23, k_smoothing: 8, d_length: 41 }
    Net profit: 435.26, Parameters: PnlParams { k_length:  8, k_smoothing: 40, d_length: 16 }
    Net profit: 437.07, Parameters: PnlParams { k_length:  6, k_smoothing: 42, d_length: 15 }
    Net profit: 440.80, Parameters: PnlParams { k_length:  8, k_smoothing: 41, d_length: 23 }
    Net profit: 444.60, Parameters: PnlParams { k_length:  8, k_smoothing: 40, d_length: 24 }
    Net profit: 456.35, Parameters: PnlParams { k_length: 42, k_smoothing: 3, d_length: 4 }
    */
    
    // Further to get full breakdown of most profitable configurations
    let pnl = stochastic.pnl(PnlParams { k_length: 42, k_smoothing: 3, d_length: 4, });
    println!("{:#?}",pnl);
    
    /* Prints 
    PnL { 
        net_profit: 456.35, 
        gross_profit: 1143.09, 
        gross_loss: -686.74, 
        buy_and_hold_return: 102.81, 
        profit_factor: 1.665, 
        commission_paid: Some(191.792,), 
        total_closed_trades: 94, 
        num_winning_trades: 36, 
        num_losing_trades: 58, 
        percent_profitable: 38.3, 
        avg_winning_trade: 31.75, 
        avg_losing_trade: -11.84, 
        ratio_avg_win_loss: 2.682, 
        largest_winning_trade: 130.9, 
        largest_losing_trade: -39.92, 
        avg_ticks_in_winning_trades: 7.36, 
        avg_ticks_in_losing_trades: 3.65, 
    } 
    */
}

交易所费用信息

每个交易所都有自己的费用结构,费用计算可能因交易量、订单类型、会员级别以及使用原生交易所代币等因素而不同。

以 Coinbase 为例,典型的费用层级从 0.50% 的 Taker 费用和 0.50% 的 Maker 费用开始,对于高量交易者可以降低至 0.04% 的 Taker 费用和 0.00% 的 Maker 费用。
假设您在 Coinbase Pro 上购买价值 1000 美元的资产,交易费率为 0.50%,您可以按照以下方式计算费用:

Coinbase

费用百分比将以小数形式表示,0.50% = 0.005(因为 0.50 ÷ 100 = 0.005)
费用 = $1000(资产价值)x 0.005(小数形式的费用百分比)= $5.00

Binance

标准费用 = $1000(资产价值)x 0.001(标准费用百分比,以小数形式表示)
标准费用 = $1
25% BNB 折扣费用 = $0.75
注意:自本篇帖子起,Binance 对美国地区的 Tier 0 对的比特币和 以太坊 交易提供 0% 费率。费率 - Binance US

测试

要运行库的测试,请使用以下命令:cargo test

常见问题和解决方案

  1. 创建随机失败:解码响应体错误:行 1 列 0 无效类型:map,期望一个序列
    请确保您查询的交易所支持指定的间隔。请检查并修改以下配置中的间隔
KlineParams {
    base_asset  : "ETH",
    quote_asset : "USDT",
    interval    : Intervals::M15, // Refer to the exchange API for the correct set of interval values.
    limit       : 1000,
    base_url    : None, // Defaults: Binance is "https://api.binance.us" and Coinbase is "https://api.exchange.coinbase.com"
    source      : Some("api"),
}

贡献

欢迎并感谢您的贡献!

  1. 复制存储库。
  2. 创建您的功能分支(git checkout -b feature/YourFeatureName)。
  3. 提交您的更改(git commit -am '添加一些功能')。
  4. 将更改推送到分支(git push origin feature/YourFeatureName)。
  5. 发起一个拉取请求。

对于重大更改,建议先打开一个问题来讨论拟议的修改。

免责声明

本库提供基于历史市场数据的技术分析工具。请理解其局限性

  • 过去与未来:分析结果基于历史数据,不能保证未来的结果。
  • 无预测保证:虽然基于已建立的经济理论,但本库不保证市场预测。
  • 多样化策略:不要仅依赖此工具。将其输出与其他策略和见解合并是明智的。
  • 负责任投资:特别是对于新手交易或技术分析,请从小额投资开始,以掌握市场动态。

您的交易和投资决策应始终基于全面的研究。如有疑问,请寻求财务专家的意见。

许可证

本项目根据 Apache License 2.0 许可证授权。有关更多信息,请参阅 LICENSE 文件。

依赖关系

~9–21MB
~333K SLoC