Ptrade Quantitative Trading API

repository·main·Indexed 41 days ago

https://github.com/kay-ou/ptradeapi

Documentation for the Ptrade quantitative trading API, featuring usage guides and comparative analysis across four major versions, including V005 (Community Maintained), V016 (Guosheng Securities), and V041 (Dongguan Securities). Includes API references for core frameworks, trading interfaces (stocks, futures, options, margin), market and financial data interfaces, and technical indicators.

Tokens
218.5K
Snippets
505
Records
726
Agent score
40%

What's inside Ptrade

  1. Overview of Industry and Concept Classification Data

    main
    The Ptrade platform provides several types of classification data for market analysis, including official regulatory industries, professional investment-focused industries, regional sectors, and thematic concept sectors. This data is used to group stocks for sector analysis, thematic investing, and regional strategy applications.
  2. Overview of Ptrade API Documentation

    main

    The Ptrade API documentation provides a comprehensive guide for developing quantitative trading strategies on the Hundsun (恒生) investment research platform. It covers strategy development, backtesting, and live trading across various asset classes including stocks, convertible bonds, ETFs, futures, and options.

    Key areas of the documentation include:

    • Strategy Lifecycle: Understanding how to implement mandatory and optional lifecycle methods like initialize, handle_data, and before_trading_start.
    • API Reference: Detailed documentation for setting strategy parameters, retrieving market data (historical, tick, snapshots), and executing trades.
    • Asset-Specific Functions: Specialized APIs for Margin Trading (融资融券), Futures (期货), and Options (期权).
    • Technical Indicators: Built-in functions for calculating indicators like MACD, KDJ, RSI, and CCI.
    • Practical Examples: Implementation patterns for common strategies like Dual Moving Average or MACD-based strategies.
  3. Overview of Ptrade API Structure

    main

    The Ptrade API is a comprehensive framework for quantitative trading, research, and strategy execution. It is organized into several functional domains:

    • Strategy Engine: Core lifecycle methods (initialize, handle_data, etc.) that drive strategy execution.
    • Strategy Configuration: Functions to set parameters like universe, benchmark, commission, and slippage.
    • Information Retrieval: APIs for fetching market data (history, snapshots, ticks), stock information (names, status, fundamentals), and market lists.
    • Trading Operations:
      • Stock Trading: Functions for orders, target-based trading, and IPO subscriptions.
      • Public Trading: Common functions like cancel_order and get_positions.
      • Margin Trading (融资融券): Specialized functions for margin buying, selling, and collateral management.
      • Futures & Options: Dedicated interfaces for futures contracts and option exercises/strategies.
    • Technical Indicators: Built-in calculation functions for MACD, KDJ, RSI, and CCI.
    • Utility Functions: Logging, email sending, and directory management.
  4. Access Ptrade API documentation and resources

    main

    Depending on your expertise and needs, use the following entry points:

    For Beginners

    • Getting Started (入门指南): Follow the initial setup and usage guides.
    • Strategy Examples (策略示例): View practical implementations of trading strategies.

    For Developers

    • API Reference (API参考): Access the complete technical documentation for all functions and classes.
    • Supported Libraries (支持的库): Confirm dependency availability.
    • Version Changes (版本变更记录): Understand API evolution and breaking changes.

    For Version Comparison

    • Version Differences (版本差异): Compare major version differences.
    • Version Details (版本详情): Detailed functional comparisons between versions.
    • Original Documentation (原始文档): Access the raw API documentation for specific versions.
  5. Explore Ptrade API documentation structure

    main

    The documentation is organized into several key directories:

    • docs/getting-started/: Guides for new users and quick start instructions.
    • docs/api-reference/: Detailed descriptions of API modules (e.g., stock-trading.md, market-data.md, technical-indicators.md).
    • docs/examples.md: A library of strategy code examples.
    • docs/api-classification.md: A quick reference index of functions by category.
    • docs/versions/: Comparison tables and selection guides for different brokerage versions.
    • docs/version-differences.md: Analysis of technical differences between versions.
    • docs/advanced/: FAQ and advanced feature documentation.
  6. Navigate the Ptrade API Documentation

    main

    The Ptrade API documentation is organized into four primary functional modules. Use these modules to locate specific interfaces for your quantitative trading strategy:

    🏗️ Core Framework

    • Framework Basics (framework.md): Strategy frameworks, lifecycles, and event handling.
    • Data Objects (objects.md): Definitions for core objects like Order, Position, and Security.
    • Utility Functions (utilities.md): Helper tools for logging, time management, and data conversion.

    📈 Trading Interfaces

    • Stock Trading (stock-trading.md): Spot trading for stocks, ETFs, and convertible bonds.
    • Futures Trading (futures.md): Futures contract trading and position management.
    • Options Trading (options.md): Options contract trading and exercise functions.
    • Margin Trading (margin-trading.md): Margin buying, short selling, and collateral management.

    📊 Data Interfaces

    • Market Data (market-data.md): K-line data, real-time quotes, and L2 data.
    • Stock Information (stock-info.md): Basic stock info and financial data queries.
    • Financial Data (financial-data.md): Financial statements and indicators.
    • Basic Information (basic-info.md): Trading calendars, stock lists, etc.

    🔧 Analysis Tools

    • Technical Indicators (technical-indicators.md): Calculation of MACD, KDJ, RSI, etc.
    • System Settings (settings.md): Parameter configuration, notifications, and system management.
  7. Navigate the Ptrade API Reference Documentation

    main

    The Ptrade API documentation is organized into four functional modules to help you find the right interfaces for your quantitative trading strategy:

    🏗️ Core Framework

    • Framework Basics: Covers strategy framework, lifecycle, and event handling.
    • Data Objects: Definitions for core objects like Order, Position, and Security.
    • Utility Functions: Auxiliary tools for logging, time, and data conversion.

    📈 Trading Interfaces

    • Stock Trading: Spot trading for stocks, ETFs, and convertible bonds.
    • Futures Trading: Futures contract trading and position management.
    • Options Trading: Options contract trading and exercise interfaces.
    • Margin Trading: Margin buying, short selling, and collateral management.

    📊 Data Interfaces

    • Market Data: K-line, real-time quotes, and Level 2 data.
    • Stock Information: Basic stock info and financial data queries.
    • Financial Data: Financial statements and indicators.
    • Basic Information: Trading calendars and stock lists.

    🔧 Analysis Tools

    • Technical Indicators: Calculations for MACD, KDJ, RSI, etc.
    • System Settings: Parameter configuration and notification settings.
  8. How the Ptrade event-driven framework works

    main

    Ptrade uses an event-driven architecture where the strategy lifecycle is managed through predefined event handlers (functions). A complete trading day typically follows this sequence:

    1. initialize(context): Executed once at startup for global configuration.
    2. before_trading_start(context, data): Executed once before the market opens each day.
    3. handle_data(context, data): The main loop that executes during trading hours based on your set frequency (daily or minute).
    4. after_trading_end(context, data): Executed once after the market closes each day.

    Additional flexible event handlers include:

    • tick_data(context, data): For Tick-level logic.
    • run_daily() / run_interval(): Scheduled tasks (daily or custom second-level intervals).
    • on_order_response() / on_trade_response(): Real-time push events for order and trade status updates.
  9. Understand get_history return types and versions

    main

    The return type of get_history depends on the security_list provided and the Python version being used:

    1. Dictionary Format (is_dict=True)

    Returns an OrderedDict where keys are stock codes and values are arrays containing [datetime, open, high, low, close, volume, money, price].

    2. Non-Dictionary Formats (Pandas/Panel)

    Python 3.5 & 3.11 (Single Stock)

    If security_list is a single string (e.g., '600570.SS'), it returns a pandas.DataFrame where the index is datetime.datetime and columns are the requested fields.

    Python 3.11 (Multiple Stocks)

    If security_list is a list (e.g., ['600570.SS', '600571.SS']), it returns a pandas.DataFrame with a datetime.datetime index and columns including code and the requested fields. Use .query('code in ["xxxxxx.SS"]') to filter for a specific stock.

    Python 3.5 (Multiple Stocks - Single Field)

    If security_list is a list and field is a single string, it returns a pandas.DataFrame where the index is datetime.datetime and columns are the stock codes.

    Python 3.5 (Multiple Stocks - Multiple Fields)

    If security_list is a list and field is a list, it returns a pandas.Panel. The items axis contains the fields (e.g., 'open'). You can swap axes to make stock codes the primary index: panel_info.swapaxes("minor_axis", "items").

  10. Handle data persistence for simulated and live trading

    main

    To protect against server exceptions or strategy optimizations, you must persist global variables (g) to prevent data loss when a strategy restarts.

    Framework Persistence

    • The framework automatically triggers persistence after before_trading_start(), handle_data(), and after_trading_end().
    • When a restart occurs, the framework runs initialize() first, then restores variables from the persisted state. Restored variables will overwrite those initialized in initialize().
    • Private Variables: Variables in g starting with __ (e.g., g.__test_class) are treated as private and will not be saved.
    • Non-serializable objects: IO objects (files, class instances) cannot be serialized via pickle.

    Manual Persistence with Pickle

    You can manually save complex state (like a dictionary of holding days) using the pickle module.

    import pickle
    from collections import defaultdict
    
    def initialize(context):
        g.notebook_path = get_research_path()
        try:
            with open(g.notebook_path + 'hold_days.pkl', 'rb') as f:
                g.hold_days = pickle.load(f)
        except:
            g.hold_days = defaultdict(list)
        g.security = '600570.SS'
        set_universe(g.security)
    
    def before_trading_start(context, data):
        if g.hold_days:
            g.hold_days[g.security] += 1
    
    def handle_data(context, data):
        # ... logic ...
        with open(g.notebook_path + 'hold_days.pkl', 'wb') as f:
            pickle.dump(g.hold_days, f, -1)
    import pickle
    from collections import defaultdict
    
    '''
    持仓N日后卖出,仓龄变量每日pickle进行保存,重启策略后可以保证逻辑连贯
    '''
    def initialize(context):
        g.notebook_path = get_research_path()
        #尝试启动pickle文件
        try:
            with open(g.notebook_path+'hold_days.pkl','rb')as f:
                g.hold_days = pickle.load(f)
        #定义空的全局字典变量
        except:
            g.hold_days = defaultdict(list)
        g.security ='600570.SS'
        set_universe(g.security)
    
    # 仓龄增加一天
    def before_trading_start(context, data):
        if g.hold_days:
            g.hold_days[g.security]+=1
    
    # 每天将存储仓龄的字典对象进行pickle保存
    def handle_data(context, data):
        if g.security notin list(context.portfolio.positions.keys())and g.security notin g.hold_days:
            order(g.security,100)
            g.hold_days[g.security]=1
        if g.hold_days:
            if g.hold_days[g.security]>5:
                order(g.security,-100)
                del g.hold_days[g.security]
        with open(g.notebook_path+'hold_days.pkl','wb')as f:
            pickle.dump(g.hold_days,f,-1)
  11. Define strategy lifecycle with core callback functions

    main

    Ptrade strategies are driven by specific callback functions that the engine calls at different stages of the trading lifecycle.

    Required Functions

    • initialize(context): Runs once when the strategy starts. Use this for setup, parameter initialization, and registering periodic tasks.
    • handle_data(context, data): The main logic loop. Executes on every bar (daily or minute) depending on your strategy settings.

    Optional Functions

    • before_trading_start(context, data): Runs once every day before the market opens.
    • after_trading_end(context, data): Runs once every day after the market closes.
    • tick_data(context, data): Processes Tick-level data (available in trading environments only).
    • on_order_response(context, order_list): Triggered when an order status changes (trading environments only).
    • on_trade_response(context, trade_list): Triggered when a trade execution occurs (trading environments only).
    def initialize(context):
        # Setup code here
        pass
    
    def handle_data(context, data):
        # Main strategy logic here
        pass
  12. Get position details with the `Position` object

    main

    The Position object provides information about a specific held security.

    Key attributes:

    • sid: Security code.
    • enable_amount: Available quantity.
    • amount: Total position quantity.
    • last_sale_price: Latest price.
    • cost_basis: Position cost price (not supported for futures).
    • today_amount: Quantity opened today (backtesting only, not supported for futures).

    Futures-specific fields:

    • delivery_date: Delivery date.
    • today_short_amount: Today's short opening quantity.
    • today_long_amount: Today's long opening quantity.
    • long_cost_basis: Long position cost.
    • short_cost_basis: Short position cost.
    • margin_rate: Margin ratio.
    • contract_multiplier: Contract multiplier.
    • long_amount: Total long position.
    • short_amount: Total short position.
    • long_pnl: Long floating PnL.
    • short_pnl: Short floating PnL.
    • long_enable_amount: Long available quantity.
    • short_enable_amount: Short available quantity.
    • business_type: Business type.
    def handle_data(context, data):
        order(g.security, 1000)
        position = get_position(g.security)
        log.info(position)