Skip to main content

PiXiu - A trading backtesting tool similar to MT4/MT5

Project description

PiXiu - A Chinese mythological creature that brings fortune to people.

PiXiu

A trading backtesting tool similar to MT4/MT5.

It has a standard set of API definitions, and backtesting code written using these APIs can be run on www.TradePython.com without changes.

Install

pip install pixiu

If you have problems installing TA-Lib, please refer to https://github.com/mrjbq7/ta-lib

How to use

Parameters :

-c/--testconfig         test config
-n/--testname           test name (in the test configuration file)
-s/--scriptpath         script file
-o/--logpath            log file
-p/--printlogtype       print log type
-m/--multiprocessing    multiprocessing mode
-r/--compare            compare with the tags list
-t/--tag                tag
-l/--datafile           data file name

Basic

pixiu -c pixiu_sample.json -n testUSDCHF_TP -s pixiu_sample.py
pixiu -c pixiu_sample.json -n testUSDCHF_TP -s pixiu_sample.py
pixiu -c pixiu_sample.json -n testUSDCHF -s pixiu_sample2.py -o log.txt

Compare multiple strategies

pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 -s ../EA/EA_V2.10.0.py -p report -t 2.10.0 -l ea2_7.json
pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 -s ../EA/EA_V2.10.1.py -p report -t 2.10.1 -l ea2_7.json
pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 -s ../EA/EA_V2.10.2.py -p report -t 2.10.2 -l ea2_7.json

pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 -t 2.10.0 -r 2.10.1 2.10.2 -l ea2_7.json

Output:
+----+--------------------------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
|    |                                      | testAUDUSD_TP_Demo1 | testGBPUSD_TP_Demo1 | testNZDUSD_TP_Demo1 | testEURUSD_TP_Demo1 | testUSDCHF_TP_Demo1 | testUSDJPY_TP_Demo1 | testUSDCAD_TP_Demo1 | Total/Avg          |
+----+--------------------------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
| 1  | Init Balance(2.10.0)                 | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 35000.0 / 5000.0   |
| 1  | Init Balance(2.10.1)                 | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 35000.0 / 5000.0   |
| 1  | Init Balance(2.10.2)                 | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 35000.0 / 5000.0   |
...
| 7  | Balance(2.10.0)                      | 4988.31             | 5064.61             | 5041.77             | 5071.6              | 4994.96             | 4996.97             | 4996.94             | 35155.16 / 5022.17 |
| 7  | Balance(2.10.1)                      | 5003.42 ↑           | 5061.26 ↓           | 5000.58 ↓           | 4965.65 ↓           | 5009.12 ↑           | 5033.44 ↑           | 4931.17 ↓           | 35004.64 / 5000.66 |
| 7  | Balance(2.10.2)                      | 4981.59 ↓           | 5076.74 ↑           | 5000.58 ↓           | 4985.02 ↓           | 5023.02 ↑           | 5029.35 ↑           | 4965.34 ↓           | 35061.64 / 5008.81 |
| 8  | Total Net Profit(2.10.0)             | -11.69              | 64.61               | 41.77               | 71.6                | -5.05               | -3.02               | -3.05               | 155.17 / 22.17     |
| 8  | Total Net Profit(2.10.1)             | 3.42 ↑              | 61.26 ↓             | 0.58 ↓              | -34.35 ↓            | 9.14 ↑              | 33.44 ↑             | -68.84 ↓            | 4.65 / 0.66        |
| 8  | Total Net Profit(2.10.2)             | -18.41 ↓            | 76.74 ↑             | 0.58 ↓              | -14.98 ↓            | 23.04 ↑             | 29.35 ↑             | -34.68 ↓            | 61.64 / 8.81       |
| 9  | Total Net Profit Rate(2.10.0)        | -0.23 %             | 1.29 %              | 0.84 %              | 1.43 %              | -0.1 %              | -0.06 %             | -0.06 %             | 3.11 % / 0.44 %    |
| 9  | Total Net Profit Rate(2.10.1)        | 0.07 % ↑            | 1.23 % ↓            | 0.01 % ↓            | -0.69 % ↓           | 0.18 % ↑            | 0.67 % ↑            | -1.38 % ↓           | 0.09 % / 0.01 %    |
| 9  | Total Net Profit Rate(2.10.2)        | -0.37 % ↓           | 1.53 % ↑            | 0.01 % ↓            | -0.3 % ↓            | 0.46 % ↑            | 0.59 % ↑            | -0.69 % ↓           | 1.23 % / 0.18 %    |
...

pixiu -c pixiu.json -n testUSDCAD_TP_Demo1 -t 2.10.0 -r 2.10.1 2.10.2 -l ea2_7.json
Output:
+----+--------------------------------------+---------------------+-------------------+
|    |                                      | testUSDCAD_TP_Demo1 | Total/Avg         |
+----+--------------------------------------+---------------------+-------------------+
| 1  | Init Balance(2.10.0)                 | 5000.0              | 5000.0 / 5000.0   |
| 1  | Init Balance(2.10.1)                 | 5000.0              | 5000.0 / 5000.0   |
| 1  | Init Balance(2.10.2)                 | 5000.0              | 5000.0 / 5000.0   |
...
| 7  | Balance(2.10.0)                      | 4996.94             | 4996.94 / 4996.94 |
| 7  | Balance(2.10.1)                      | 4931.17 ↓           | 4931.17 / 4931.17 |
| 7  | Balance(2.10.2)                      | 4965.34 ↓           | 4965.34 / 4965.34 |
| 8  | Total Net Profit(2.10.0)             | -3.05               | -3.05 / -3.05     |
| 8  | Total Net Profit(2.10.1)             | -68.84 ↓            | -68.84 / -68.84   |
| 8  | Total Net Profit(2.10.2)             | -34.68 ↓            | -34.68 / -34.68   |
| 9  | Total Net Profit Rate(2.10.0)        | -0.06 %             | -0.06 % / -0.06 % |
| 9  | Total Net Profit Rate(2.10.1)        | -1.38 % ↓           | -1.38 % / -1.38 % |
| 9  | Total Net Profit Rate(2.10.2)        | -0.69 % ↓           | -0.69 % / -0.69 % |
...

Test configuration file format

JSON format:

{
 "accounts": {
    "default": {
      "balance": 10000.0,
      "equity": 10000.0,
      "margin": 0,
      "free_margin": 10000.0,
      "credit": 0.0,
      "profit": 0.0,
      "margin_level": 0,
      "leverage": 100,
      "currency": "USD",
      "free_margin_mode": 0,
      "stop_out_level": 0,
      "stop_out_mode": 0,
      "company": "TradePython.com",
      "name": "PXTester",
      "number": "000",
      "server": "PXTester",
      "trade_mode": 0,
      "limit_orders": 500,
      "margin_so_mode": 0,
      "trade_allowed": true,
      "trade_expert": 1,
      "margin_so_call": 0.0,
      "margin_so_so": 0.0,
      "commission": 0.0
    }
  },
  "symbols": {
    "USDCHF": {
      "symbol": "USDCHF",
      "spread": 2,
      "digits": 5,
      "stop_level": 0,
      "volume_min": 0.01,
      "trade_contract_size": 100000,
      "point": 0.00001,
      "currency_profit": "CHF",
      "currency_base": "USD",
      "currency_margin": "USD"
    }
  },
  "tests": {
    "testUSDCHF": {
      "symbol": "USDCHF",
      "tick_data": "usdchf_m1_20210315-0415.csv",
      "start_time": "2021-03-15",
      "end_time": "2021-04-16",
      "max_tick": 100,
      "balance": 10000,
      "leverage": 100,
      "currency": "USD",
      "account": "default",
      "spread_point": 15
    },
    "testUSDCHF_TP": {
      "symbol": "USDCHF",
      "tick_data": {
         "channel": "tradepython.com",
         "api_token": "YOUR-API-TOKEN",
         "source": "12345678@PixiuServer01",
         "format": "json",
         "period": 30,
         "timeframe": "m1"
      },
      "max_tick": 100,
      "balance": 10000,
      "leverage": 100,
      "currency": "USD",
      "account": "default",
      "spread_point": 15
    },
    "testUSDCHF_TP2": {
      "symbol": "USDCHF",
      "tick_data": {
         "channel": "tradepython.com",
         "api_token": "YOUR-API-TOKEN",
         "source": {"type": "public", "name": "Demo1"},
         "format": "json",
         "period": 30,
         "start_time": "2021-03-15",
         "end_time": "2021-04-16",
         "timeframe": "m1"
      },
      "start_time": "2021-03-15",
      "end_time": "2021-04-16",
      "max_tick": 100,
      "balance": 10000,
      "leverage": 100,
      "currency": "USD",
      "account": "default",
      "spread_point": 15
    }
  }
}

Testing with csv files:

symbol: product
tick_data: tick data data file
start_time: start time
end_time: end time
max_tick: the maximum number of ticks to test, which can reduce the test time
balance: initial capital of the test account
leverage: leverage of the test account
account: the name of the test account (in the test profile accounts)
spread_point: spread
"testUSDCHF": {
  "symbol": "USDCHF",
  "tick_data": "usdchf_m1_20210315-0415.csv",
  "start_time": "2021-03-15",
  "end_time": "2021-04-16",
  "max_tick": 100,
  "balance": 10000,
  "leverage": 100,
  "currency": "USD",
  "account": "default",
  "spread_point": 15
}

Test with tradepython data test

source: Data account
  account@account-server
  Example:
      12345678@PixiuServer01
  or: {"type": "public", "name": "Demo1"}
  type: public or private
  name: Account name

period: data period (days)
  Example:
      30 - the last 30 days of data

timeframe: time frame, the following values
    s1 - 1 second
    m1 - 1 minute
    m5 - 1 minute
    m15 - 15 minutes
    m30 - 30 minutes
    h1 - 1 hour
    h4 - 1 hour
    d1 - 1 day
    w1 - 1 week
    mn1 - 1 month
"testUSDCHF_TP": {
   ...
  "tick_data": {
     "channel": "tradepython.com",
     "api_token": "YOUR-API-TOKEN",
     "source": "account@account-server",
     "format": "json",
     "period": 30,
     "timeframe": "m1"
  },
  ...
}

Script Samples

  1. Buy or sell a product

     errid, order_uid = Buy(volume=volume, price=Ask())
     errid, order_uid = Sell(volume=0.01, price=Bid())
    
  2. Modify an order

     errid, order_uid = ModifyOrder(order_uid, stop_loss=stop_loss, take_profit=take_profit)
    
  3. Close an order

     errid, order_uid = CloseOrder(order_uid, price=Ask(), volume=volume)
    
  4. Get the current open order UIDs

     uids = GetOpenedOrderUIDs()
     for uid in uids:
         o = GetOrder(uid)
    

API

AccountEquity(self)
   Returns the equity.

           Returns:
                   The account equity.

AccountFreeMargin(self)
   Returns the free margin.

           Returns:
                   The free margin.

Ask(self, shift=0, symbol=None) -> float
   Returns Ask price value for the default symbol with default timeframe and shift.

           Parameters:
                   shift (int): Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).
                   symbol (str): The symbol name.
                           If None returns current symbol.

           Returns:
                   Ask price.

Bid(self, shift=0, symbol=None) -> float
   Returns Bid price value for the default symbol with default timeframe and shift.

           Parameters:
                   shift (int): Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).
                   symbol (str): The symbol name.
                           If None returns current symbol.

           Returns:
                   Bid price.

Buy(self, volume: float, type=0, price=None, stop_loss=None, take_profit=None, magic_number=None, symbol=None, slippage=None, arrow_color=None, expiration=None, tags=None) -> (<function NewType.<locals>.new_type at 0x7fe120629dc0>, <function NewType.<locals>.new_type at 0x7fe122ed0940>)
   Open a long order.

           Parameters:
                   volume (float): Number of lots.
                   type (OrderType): Order type.
                   price (float): Order price. If price is None, price = Ask().
                   stop_loss (float): Stop loss price.
                   take_profit (float): Take profit price.
                   magic_number (float): Order magic number.
                   symbol (float): Symbol for trading.
                   slippage (float): Maximum price slippage for trading.
                   arrow_color (float): Color of the opening arrow on the MT4/5 chart.
                   expiration (float): Order expiration time (for pending order only)
                   tags (dict): Order tags

           Returns:
                   ErrorID: If 0 success.
                   OrderResult: The order result.


Sell(self, volume: float, type=0, price=None, stop_loss=None, take_profit=None, magic_number=None, symbol=None, slippage=None, arrow_color=None, expiration=None, tags=None) -> (<function NewType.<locals>.new_type at 0x7fe120629dc0>, <function NewType.<locals>.new_type at 0x7fe122ed0940>)
   Open a short order.

           Parameters:
                   volume (float): Number of lots.
                   type (OrderType): Order type.
                   price (float): Order price. If price is None, price = Bid().
                   stop_loss (float): Stop loss price.
                   take_profit (float): Take profit price.
                   magic_number (float): Order magic number.
                   symbol (float): Symbol for trading.
                   slippage (float): Maximum price slippage for trading.
                   arrow_color (float): Color of the opening arrow on the MT4/5 chart.
                   expiration (float): Order expiration time (for pending order only)
                   tags (dict): Order tags

           Returns:
                   ErrorID: If 0 success.
                   OrderResult: The order result.


ModifyOrder(self, uid, price=None, stop_loss=None, take_profit=None, arrow_color=None, expiration=None, tags=None) -> (<function NewType.<locals>.new_type at 0x7fe120629dc0>, <function NewType.<locals>.new_type at 0x7fe122ed0940>)
   Modify a order.

           Parameters:
                   uid : The order UID.
                   price (float): New open price. (for pending order only)
                   stop_loss (float): New stop loss price.
                   take_profit (float): New take profit price.
                   arrow_color (float): New color of the opening arrow on the MT4/5 chart.
                   expiration (float): New order expiration time (for pending order only)
                   tags (dict): Order tags
           Returns:
                   ErrorID: If 0 success.
                   OrderResult: The order result.

CloseOrder(self, uid, price, volume: float, slippage=None, arrow_color=None, tags=None) -> (<function NewType.<locals>.new_type at 0x7fe120629dc0>, <function NewType.<locals>.new_type at 0x7fe122ed0940>)
   Close a order.

           Parameters:
                   uid : The order UID.
                   price (float): Close price.
                   volume (float): Number of lots.
                   slippage (float): Maximum price slippage for trading.
                   arrow_color (float): New color of the opening arrow on the MT4/5 chart.
                   tags (dict): Order tags

           Returns:
                   ErrorID: If 0 success.
                   OrderResult: The order result.


Close(self, shift=0, symbol=None) -> float
   Returns Close price value for the default symbol with default timeframe and shift.

           Parameters:
                   shift (int): Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).
                    symbol (str): The symbol name.
                            If None returns current symbol.

           Returns:
                   Close price.

DefaultTimeFrame(self)
   Returns the default time frame.

GetAccount(self)
   Returns the account data.

           Returns:
                   The account data.

GetClosedOrderUIDs(self, symbol: str = None, scope: int = OrderScope.EA)
   Returns the UIDs of current closed orders.

           Parameters:
                   symbol: The symbol name.
                           If None returns current symbol.
                           If '*' returns all symbols.
                   scope:
                           EA: The current ea (default).
                           ACCOUNT: The current account.
                           EA_VERSION: The current ea version.

           Returns:
                   The uid list.

GetOpenedOrderUIDs(self, symbol: str = None, scope: int = OrderScope.EA)
   Returns the UIDs of current opened orders.

           Parameters:
                   symbol: The symbol name.
                           If None returns current symbol.
                           If '*' returns all symbols.
                   scope:
                           EA: The current ea (default).
                           ACCOUNT: The current account.
                           EA_VERSION: The current ea version.


           Returns:
                   The uid list.


GetPendingOrderUIDs(self, symbol: str = None, scope: int = OrderScope.EA)
   Returns the UIDs of current pending orders.

           Parameters:
                   symbol: The symbol name.
                           If None returns current symbol.
                           If '*' returns all symbols.
                   scope:
                           EA: The current ea (default).
                           ACCOUNT: The current account.
                           EA_VERSION: The current ea version.

           Returns:
                   The uid list.

GetOrder(self, order_uid: <function NewType.<locals>.new_type at 0x7fe122ed0940>)
   Returns the order object.

           Parameters:
                   order_uid (): The order uid.

           Returns:
                   The order object.

GetParam(self, name, default=None)
   Returns the EA parameter value.

           Parameters:
                   name (): The EA parameter name.
                   default (int): The EA parameter default value.

           Returns:
                   The EA parameter value.

GetSymbol(self, symbol=None)
   Returns the symbol properties.

           Parameters:
                   symbol (str): The symbol name.

           Returns:
                   The symbol properties

GetSymbolData(self, symbol: str, timeframe: str, size: int)
   Get a symbol data.

           Parameters:
                   symbol (str): Symbol name.
                   timeframe (str): Timeframe. See the TimeFrame defining.
                   size (int): Maximum size.

           Returns:
                   Symbol data

High(self, shift=0, symbol=None) -> float
   Returns High price value for the default symbol with default timeframe and shift.

           Parameters:
                   shift (int): Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).
                   symbol (str): The symbol name.
                           If None returns current symbol.

           Returns:
                   High price.

Low(self, shift=0, symbol=None) -> float
   Returns Low price value for the default symbol with default timeframe and shift.

           Parameters:
                   shift (int): Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).
                   symbol (str): The symbol name.
                           If None returns current symbol.

           Returns:
                   Low price.

Open(self, shift=0, symbol=None) -> float
   Returns Open price value for the default symbol with default timeframe and shift.

           Parameters:
                   shift (int): Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).
                   symbol (str): The symbol name.
                           If None returns current symbol.

           Returns:
                   Open price.

OrderStats(self, order_uids)
   Returns the order statistics.

           Parameters:
                   order_uids : the list of order uids.

           Returns:
                   The order statistics.


StopTester(self, code: int = 0, message: str = None)
   Stop the EA tester. (For tester only.)

           Parameters:
                   code (int): Error code.
                   message (str): Error message.

           Returns:
                   None

Symbol(self) -> str
   Returns the current symbol name.

           Returns:
                   The symbol name.

SymbolInfo(self, item, symbol=None, default=None)
   Returns the symbol information.

           Parameters:
                   item (str): The symbol item name.
                   symbol (str): The symbol name.
                   default (): The default value.

           Returns:
                   The symbol information.

Time(self, shift=0, symbol=None) -> datetime.datetime
   Returns time value for the default symbol with default timeframe and shift.

           Parameters:
                   shift (int): Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).
                   symbol (str): The symbol name.
                           If None returns current symbol.

           Returns:
                   Time.

Volume(self, shift=0, symbol=None) -> float
   Returns volume value for the default symbol with default timeframe and shift.

           Parameters:
                   shift (int): Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).
                   symbol (str): The symbol name.
                           If None returns current symbol.

           Returns:
                   Volume price.

__init__(self)
   Initialize self.  See help(type(self)) for accurate signature.

iAD(self, symbol_data, shift=0)
   Chaikin A/D Line (Volume Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Chaikin A/D Line

iADX(self, symbol_data, timeperiod, shift=0)
   Average Directional Movement Index (Momentum Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Average Directional Movement Index

iATR(self, symbol_data, timeperiod, shift=0)
   Average True Range (Volatility Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Average True Range

iBands(self, symbol_data, timeperiod, nbdevup, nbdevdn, matype, shift=0)
   Bollinger Bands (Overlap Studies)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   nbdevup (int): 2
                   nbdevdn (int): 2
                   ma_type: 0 (Simple Moving Average) ,For details see the TA-LIB
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Bollinger Bands

iCCI(self, symbol_data, timeperiod, shift=0)
   Commodity Channel Index (Momentum Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Commodity Channel Index

iChaikin(self, symbol_data, fastperiod, slowperiod, shift=0)
   Chaikin A/D Oscillator (Volume Indicators)

          Parameters:
                  symbol_data (object): The symbol data.
                  fastperiod (int): The fast period.
                  slowperiod (int): The low period.
                  shift: Index of the value taken from the buffer
                  (shift relative to the current the given amount of periods ago).

          Returns:
                  Chaikin A/D Oscillator

iDEMA(self, symbol_data, timeperiod, shift=0)
   Double Exponential Moving Average (Overlap Studies)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Double Exponential Moving Average

iMA(self, price_data, period, ma_type, shift=0)
   Calculates the Moving Average indicator and returns its value.

           Parameters:
                   price_data (object): The price data. (Close, Open, Low, etc...)
                   period (int): Averaging period for calculation.
                   ma_type: 0 (Simple Moving Average) ,For details see the TA-LIB
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Moving average value.

iMACD(self, symbol_data, fastperiod, slowperiod, signalperiod, shift=0)
   Moving Average Convergence/Divergence (Momentum Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   fastperiod (int): The fast period.
                   slowperiod (int): The slow period.
                   signalperiod (int): The signal period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Moving Average Convergence/Divergence

iMFI(self, symbol_data, timeperiod, shift=0)
   Money Flow Index (Momentum Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Money Flow Index

iMomentum(self, symbol_data, timeperiod, shift=0)
   Momentum (Momentum Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Momentum

iOBV(self, symbol_data, shift=0)
   On Balance Volume (Volume Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   On Balance Volume

iRSI(self, symbol_data, timeperiod, shift=0)
   Relative Strength Index (Momentum Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Relative Strength Index

iSAR(self, symbol_data, acceleration, maximum, shift=0)
   Parabolic SAR (Overlap Studies)

           Parameters:
                   symbol_data (object): The symbol data.
                   acceleration (int): 0.02
                   maximum (int): 0.2
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Parabolic SAR

iStdDev(self, symbol_data, timeperiod, nbdev, shift=0)
   Standard Deviation (Statistic Functions)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   nbdev (int): 1
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Standard Deviation

iStochastic(self, symbol_data, fastk_period, slowk_period, slowk_matype, slowd_period, slowd_matype, shift=0)
   Stochastic (Momentum Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   fastk_period (int): 5
                   slowk_period (int): 3
                   slowk_matype (int): 0
                   slowd_period (int): 3
                   slowd_matype (int): 0
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Stochastic

iTEMA(self, symbol_data, timeperiod, shift=0)
   Triple Exponential Moving Average (Overlap Studies)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Triple Exponential Moving Average

iWPR(self, symbol_data, timeperiod, shift=0)
   Williams' %R (Momentum Indicators)

           Parameters:
                   symbol_data (object): The symbol data.
                   timeperiod (int): The time period.
                   shift: Index of the value taken from the buffer
                   (shift relative to the current the given amount of periods ago).

           Returns:
                   Williams' %R

WaitCommand(self, uid, timeout=120)
   Waiting for a asynchronous command execution

          Parameters:
                  uid : The command UID.
                  timeout : Timeout seconds
          Returns:
                  ErrorID: If 0 success.
                  CommandResult: If failed returns None.
                  

 AcquireLock(self, name, timeout=60) -> bool:
     Acquire a lock

             Parameters:
                     name : The lock name
                     timeout : Lock timeout seconds
             Returns:
                     If True success.
     

 ReleaseLock(self, name):
     Release a lock

             Parameters:
                     name : The lock name
     

 Plot(self, series):
     Plot
     
             Parameters:
                     series


 DeleteData(self, name, scope: int = DataScope.EA) -> ErrorID:
     Delete data

             Parameters:
                     name : The data name
                     scope : The data scope (current EA settings, EA version, EA, Account)
             Returns:
                     The errorid.

 LoadData(self, name, scope: int = DataScope.EA, format='json'):
     Load data

             Parameters:
                     name : The data name
                     scope : The data scope (current EA settings, EA version, EA, Account)
                     format: Only support JSON.
             Returns:
                     data.
 
 SaveData(self, name, data, scope: int = DataScope.EA, format='json') -> ErrorID:
     Save data

             Parameters:
                     name : The data name
                     scope : The data scope (current EA settings, EA version, EA, Account)
                     format: Only support JSON.
             Returns:
                     The errorid.
 
 Notify(self, message) -> ErrorID:
     Send a notification

             Parameters:
                     message: The content of notification
             Returns:
                     The errorid.
                  
                   

[2021-11-25]

Version:

Package:
pixiu: 0.57.*.20211125

Descriptions:

1.Update README.md/README.zh.md
2.ea_tester.py:
  Modify notify output format

[2021-11-24]

Version:

Package:
pixiu: 0.56.*.20211124

Descriptions:

1.api.py, tester_api_v1.py:
  Add Notify

[2021-11-16]

Version:

Package:
pixiu: 0.55.*.20211116

Descriptions:

1.Fix setup.py requires. 

[2021-11-15]

Version:

Package:
pixiu: 0.54.0.20211115

Descriptions:

1.api.py, tester_api_v1.py:
  Add DeleteData, LoadData, SaveData
  Buy/Sell/ModifyOrder/CloseOrder add argument tags 
2.tests:
  ts_base.py add data test
  ts_order_market.py add tags 
3.api_base.py:
  Add uuid, hashlib 

[2021-11-14]

Version:

Package:
pixiu: 0.53.0.20211114

Descriptions:

1.api.py, tester_api_v1.py:
  Ask, Bid, Time, Volume, Open, Close, Low, High add symbol
2.order.py:
  Add from_uid, to_uid, group_uid, tags

[2021-11-13]

Version:

Package:
pixiu: 0.52.0.20211113

Descriptions:

1.Add arguments : 
    --compare-wit-tag/-r, --tag/-t, --datafile/-l
  sample:
        1)  
           pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 -s ../EA/EA_V2.10.0.py -p report -t 2.10.0 -l ea2_7.json
           pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 -s ../EA/EA_V2.10.1.py -p report -t 2.10.1 -l ea2_7.json
           pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 -s ../EA/EA_V2.10.2.py -p report -t 2.10.2 -l ea2_7.json
           
           pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 -t 2.10.0 -r 2.10.1 2.10.2 -l ea2_7.json
            +----+--------------------------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
            |    |                                      | testAUDUSD_TP_Demo1 | testGBPUSD_TP_Demo1 | testNZDUSD_TP_Demo1 | testEURUSD_TP_Demo1 | testUSDCHF_TP_Demo1 | testUSDJPY_TP_Demo1 | testUSDCAD_TP_Demo1 | Total/Avg          |
            +----+--------------------------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+--------------------+
            | 1  | Init Balance(2.10.0)                 | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 35000.0 / 5000.0   |
            | 1  | Init Balance(2.10.1)                 | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 35000.0 / 5000.0   |
            | 1  | Init Balance(2.10.2)                 | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 5000.0              | 35000.0 / 5000.0   |
            ...
            | 7  | Balance(2.10.0)                      | 4988.31             | 5064.61             | 5041.77             | 5071.6              | 4994.96             | 4996.97             | 4996.94             | 35155.16 / 5022.17 |
            | 7  | Balance(2.10.1)                      | 5003.42 ↑           | 5061.26 ↓           | 5000.58 ↓           | 4965.65 ↓           | 5009.12 ↑           | 5033.44 ↑           | 4931.17 ↓           | 35004.64 / 5000.66 |
            | 7  | Balance(2.10.2)                      | 4981.59 ↓           | 5076.74 ↑           | 5000.58 ↓           | 4985.02 ↓           | 5023.02 ↑           | 5029.35 ↑           | 4965.34 ↓           | 35061.64 / 5008.81 |
            | 8  | Total Net Profit(2.10.0)             | -11.69              | 64.61               | 41.77               | 71.6                | -5.05               | -3.02               | -3.05               | 155.17 / 22.17     |
            | 8  | Total Net Profit(2.10.1)             | 3.42 ↑              | 61.26 ↓             | 0.58 ↓              | -34.35 ↓            | 9.14 ↑              | 33.44 ↑             | -68.84 ↓            | 4.65 / 0.66        |
            | 8  | Total Net Profit(2.10.2)             | -18.41 ↓            | 76.74 ↑             | 0.58 ↓              | -14.98 ↓            | 23.04 ↑             | 29.35 ↑             | -34.68 ↓            | 61.64 / 8.81       |
            | 9  | Total Net Profit Rate(2.10.0)        | -0.23 %             | 1.29 %              | 0.84 %              | 1.43 %              | -0.1 %              | -0.06 %             | -0.06 %             | 3.11 % / 0.44 %    |
            | 9  | Total Net Profit Rate(2.10.1)        | 0.07 % ↑            | 1.23 % ↓            | 0.01 % ↓            | -0.69 % ↓           | 0.18 % ↑            | 0.67 % ↑            | -1.38 % ↓           | 0.09 % / 0.01 %    |
            | 9  | Total Net Profit Rate(2.10.2)        | -0.37 % ↓           | 1.53 % ↑            | 0.01 % ↓            | -0.3 % ↓            | 0.46 % ↑            | 0.59 % ↑            | -0.69 % ↓           | 1.23 % / 0.18 %    |
            ...

           pixiu -c pixiu.json -n testUSDCAD_TP_Demo1 -t 2.10.0 -r 2.10.1 2.10.2 -l ea2_7.json
            +----+--------------------------------------+---------------------+-------------------+
            |    |                                      | testUSDCAD_TP_Demo1 | Total/Avg         |
            +----+--------------------------------------+---------------------+-------------------+
            | 1  | Init Balance(2.10.0)                 | 5000.0              | 5000.0 / 5000.0   |
            | 1  | Init Balance(2.10.1)                 | 5000.0              | 5000.0 / 5000.0   |
            | 1  | Init Balance(2.10.2)                 | 5000.0              | 5000.0 / 5000.0   |
            ...
            | 7  | Balance(2.10.0)                      | 4996.94             | 4996.94 / 4996.94 |
            | 7  | Balance(2.10.1)                      | 4931.17 ↓           | 4931.17 / 4931.17 |
            | 7  | Balance(2.10.2)                      | 4965.34 ↓           | 4965.34 / 4965.34 |
            | 8  | Total Net Profit(2.10.0)             | -3.05               | -3.05 / -3.05     |
            | 8  | Total Net Profit(2.10.1)             | -68.84 ↓            | -68.84 / -68.84   |
            | 8  | Total Net Profit(2.10.2)             | -34.68 ↓            | -34.68 / -34.68   |
            | 9  | Total Net Profit Rate(2.10.0)        | -0.06 %             | -0.06 % / -0.06 % |
            | 9  | Total Net Profit Rate(2.10.1)        | -1.38 % ↓           | -1.38 % / -1.38 % |
            | 9  | Total Net Profit Rate(2.10.2)        | -0.69 % ↓           | -0.69 % / -0.69 % |
            ...

[2021-11-11]

Version:

Package:
pixiu: 0.51.0.20211111

Descriptions:

1.api_base:
  Add build-in function: max, min, all, any, ascii, bin, chr, divmod, enumerate, filter, format, hex, next, oct, ord, pow, reversed, sorted, sum
2.main.py:
  Add argument: multiprocessing

[2021-10-26]

Version:

Package:
pixiu: 0.50.0.20211026

Descriptions:

1.ea_tester.py:
    1) Fix report currency bug

[2021-10-24]

Version:

Package:
pixiu: 0.49.0.20211024

Descriptions:

1.Using process pool

[2021-10-23]

Version:

Package:
pixiu: 0.48.0.20211023

Descriptions:

1.Add support multiple test names:
 pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 testGBPUSD_TP_Demo1 testNZDUSD_TP_Demo1 testEURUSD_TP_Demo1 testUSDCHF_TP_Demo1 testUSDJPY_TP_Demo1 testUSDCAD_TP_Demo1 ...

[2021-10-19]

Version:

Package:
pixiu: 0.47.0.20211019

Descriptions:

1.ea_tester.py:
 1) Fix report total_net_profit_rate error.
2.pxtester.py:
 1) parse_test_config: Add custom account

[2021-10-18]

Version:

Package:
pixiu: 0.46.0.20211018

Descriptions:

1.ea_tester.py:
 1) Fix modify_order bug, if take_profit or stop_loss is None

[2021-10-16]

Version:

Package:
pixiu: 0.45.0.20211016

Descriptions:

1.pxtester.py:
  1) Report add win rate

[2021-10-15]

Version:

Package:
pixiu: 0.44.0.20211015

Descriptions:

1.pxtester.py:
  1) Add argument: print_log_type = account|order|ea|report

[2021-10-14]

Version:

Package:
pixiu: 0.43.0.20211014

Descriptions:

1.ea_tester.py:
  1) Fix bugs: __process_order__, close_all_orders call close_order error
  2) Fix bugs: max_drawdown calculation
2.pxtester.py:
  1) on_end_execute: report output format

[2021-08-25]

Version:

Package:
pixiu: 0.42.0.20210825

Descriptions:

1.ea_tester.py:
  1) __add_market_order__:
    new_order['comment'] = f"cuid#{new_order['uid']}|" 
    to
    new_order['comment'] = f"uid#{new_order['uid']}|"

[2021-08-06]

Version:

Package:
pixiu: 0.41.0.20210806

Descriptions:

1.API 1 
  1) Add Plot 

[2021-08-04]

Version:

Package:
pixiu: 0.40.0.20210804

Descriptions:

1.ea_tester.py:
    1).Change plot parameters to plot(chart_name, {series_name1: data, series_name2: data, ...})

[2021-07-20]

Version:

Package:
pixiu: 0.39.0.20210720

Descriptions:

1.ea_tester.py:
    1).Add plot 

[2021-07-16]

Version:

Package:
pixiu: 0.38.0.20210716

Descriptions:

1.Update API:
 1) GetOpenedOrderUIDs, GetPendingOrderUIDs, GetClosedOrderUIDs
   Add parameter: scope

[2021-07-08]

Version:

Package:
pixiu: 0.37.0.20210708

Descriptions:

1.fix write_log bugs: parameters count

[2021-06-07]

Version:

Package:
pixiu: 0.36.2.20210607

Descriptions:

1.fix dependencies bugs
   remove oeoeweb library
   add pymongo library
2.fix sample.py, sample2.py errors.
3.API add AcquireLock, ReleaseLock 

[2021-06-04]

Version:

Package:
pixiu: 0.35.0.20210604

Descriptions:

1.Modify API:
 1) 
   def CloseOrder(self, uid, price, volume: float, slippage=None, arrow_color=None) -> (ErrorID, OrderResult)
   ->
   def CloseOrder(self, uid, volume=None, price=None, slippage=None, arrow_color=None) -> (ErrorID, OrderResult)
2.fix:
  __valid_order__: EID_EAT_INVALID_ORDER_CLOSE_PRICE 
3.Add:
  __order_close_price__

[2021-06-03]

Version:

Package:
pixiu: 0.34.0.20210603

Descriptions:

1.fix bugs GetSymbolData('*') 
2. 
  self.orders['ds'] -> order['__ds__']
  self.account_info['ds'] -> self.account_info['__ds__']
3.Add build-in :
  datetime, timedelta, random

[2021-06-01]

Version:

Package:
pixiu: 0.33.0.20210601

Descriptions:

1.add APIs:
  WaitCommand
2.modify APIs:
  Buy, Sell, CloseOrder, ModifyOrder return order_uid -> OrderResult

[2021-05-31]

Version:

Package:
pixiu: 0.32.0.20210531

Descriptions:

1.fix EATesterPrintCollector._call_print write_log bug

[2021-05-30]

Version:

Package:
pixiu: 0.31.0.20210530

Descriptions:

1. get_url_data add headers

[2021-05-29]

Version:

Package:
pixiu: 0.30.0.20210529

Descriptions:

1.Add output

[2021-05-28]

Version:

Package:
pixiu: 0.29.0.20210528

Descriptions:

1.Struct project directories
2.Complete README.txt

[2021-05-27]

Version:

Package:
pixiu: 0.28.0.20210527

Descriptions:

1.Add load channel

[2021-05-26]

Version:

Package:
pixiu: 0.27.0.20210526

Descriptions:

1.Add PXTester, main

[2021-05-24]

Version:

Package:
pixiu: 0.26.0.20210524

Descriptions:

1. api add help doc string

[2021-05-22]

Version:

Package:
pixiu: 0.25.0.20210522

Descriptions:

1.add language
2.fix sl/tp error:
  ds[((ds['sl'] > 0) & (ds['sl_p'] <= 0)) | ((ds['tp'] > 0) & (ds['tp_p'] >= 0))]
3.api:
    Dict - > UIDs
    def GetOpenedOrderUIDs(self, symbol: str = None)
    def GetPendingOrderUIDs(self, symbol: str = None)
    def GetClosedOrderUIDs(self, symbol: str = None)

[2021-05-19]

Version:

Package:
pixiu: 0.24.0.20210519

Descriptions:

1.add test_pixiu set_test_result

[2021-05-18]

Version:

Package:
pixiu: 0.23.0.20210518

Descriptions:

[2021-05-17]

Version:

Package:
pixiu: 0.22.0.20210517

Descriptions:

1.SymbolIndicator, SymbolPrice, SymbolTime, SymbolData arguments.

[2021-05-15]

Version:

Package:
pixiu: 0.21.0.20210515

Descriptions:

[2021-05-13]

Version:

Package:
pixiu: 0.20.0.20210513

Descriptions:

[2021-05-11]

Version:

Package:
pixiu: 0.19.0.20210511

Descriptions:

1.fix ea_tester some bugs

[2021-05-10]

Version:

Package:
pixiu: 0.18.0.20210510

Descriptions:

[2021-05-09]

Version:

Package:
pixiu: 0.17.0.20210509

Descriptions:

1. Buy, Sell, ModifyOrder remove arguments comment

[2021-05-08]

Version:

Package:
pixiu: 0.16.0.20210508

Descriptions:

1.

[2021-05-07]

Version:

Package:
pixiu: 0.15.0.20210507

Descriptions:

1. def GetSymbolData(self, symbol: str, timeframe: str, count: int)

[2021-05-06]

Version:

Package:
pixiu: 0.14.0.20210506

Descriptions:

1. some fixs

[2021-05-01]

Version:

Package:
pixiu: 0.13.0.20210501

Descriptions:

1.Add test open, modify, close in the EAT testing.

[2021-04-30]

Version:

Package:
pixiu: 0.12.0.20210430

Descriptions:

1.Finish EAT's 7 tests.

[2021-04-29]

Version:

Package:
pixiu: 0.11.0.20210429

Descriptions:

1.Add Account, Symbol Classes
2.Add ts_order, ts_base

[2021-04-28]

Version:

Package:
pixiu: 0.10.0.20210428

Descriptions:

1.Add some methods

[2021-04-27]

Version:

Package:
pixiu: 0.9.0.20210427

Descriptions:

[2021-04-26]

Version:

Package:
pixiu: 0.8.0.20210426

Descriptions:

1. Add test_ea_tester_func_indicators

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pixiu-0.57.0.tar.gz (687.4 kB view hashes)

Uploaded Source

Built Distribution

pixiu-0.57.0-py3-none-any.whl (47.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page