[comment]: <> (![alt pixiu-icon](pixiu-128x128-8bit.png))
<p align="center">
<img width="128" height="128" src="https://raw.githubusercontent.com/tradepython/pixiu/main/pixiu-128x128-8bit.png">
</p>
<p align="center" style="font-size:xx-small;">PiXiu - A Chinese mythological creature that brings fortune to people.</p>
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:
```json
{
"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
```json
"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
```json
"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
```python
errid, order_uid = Buy(volume=volume, price=Ask())
errid, order_uid = Sell(volume=0.01, price=Bid())
```
2. Modify an order
```python
errid, order_uid = ModifyOrder(order_uid, stop_loss=stop_loss, take_profit=take_profit)
```
3. Close an order
```python
errid, order_uid = CloseOrder(order_uid, price=Ask(), volume=volume)
```
4. Get the current open order UIDs
```python
uids = GetOpenedOrderUIDs()
for uid in uids:
o = GetOrder(uid)
```
API
=======
```python
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 = DataScope.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 = DataScope.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 = DataScope.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.
GetSettings(self, name, default=None)
Returns the EA Settings value.
Parameters:
name (): The EA settings name.
default (int): The EA settings default value.
Returns:
The EA settings 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.
```
### [2023-12-07]
#### Version:
##### Package:
##### pixiu: 0.109.*.20231207
#####
#### **Descriptions:**
1.ea_taster.py:
1) __close_order__
Fix profit calculation error when closing partitioned volumes
### [2023-11-16]
#### Version:
##### Package:
##### pixiu: 0.108.*.20231116
#####
#### **Descriptions:**
1.main.py:
1) gen_report_row:
Add compare_item['value'] checking
### [2023-11-15]
#### Version:
##### Package:
##### pixiu: 0.107.*.20231115
#####
#### **Descriptions:**
1.ea_tester.py:
1) __close_order__:
Fix new order open_price error
2.ts_order_market.py:
1) Add from_uid, to_uid test
### [2023-11-14]
#### Version:
##### Package:
##### pixiu: 0.106.*.20231114
#####
#### **Descriptions:**
1.ea_tester.py:
1) Fix order_to_ndarray KeyError: 'magic_number'
2) __close_order__:
Change order comment from 'close by #xxx' to 'from #xxx'
Remove the tags of closed order
3) __add_market_order__:
Add comment checking
2.ts_order_market.py:
1) Add close partial order test
### [2023-06-23]
#### Version:
##### Package:
##### pixiu: 0.105.*.20230623
#####
#### **Descriptions:**
1.ea_tester.py:
1) Add tick_test_start_index in params
2) Add test_period in pixiu config file
### [2023-03-13]
#### Version:
##### Package:
##### pixiu: 0.104.*.20230313
#####
#### **Descriptions:**
1.pxtester.py:
1) Add get_tick_data_from_yfinance, covert_yfinance_data_to_json
### [2023-02-26]
#### Version:
##### Package:
##### pixiu: 0.103.*.20230226
#####
#### **Descriptions:**
1.main.py:
1) start_mp, start_sp: results add exception
### [2023-02-28]
#### Version:
##### Package:
##### pixiu: 0.102.*.20230228
#####
#### **Descriptions:**
1.ea_tester.py:
1) Remove parse_script, get_script_init_settings
2) execute_: Add ValidScriptSettings Error
3) __init__: self.log_file = open(self.log_path, mode='wt')
### [2023-02-22]
#### Version:
##### Package:
##### pixiu: 0.101.*.20230222
#####
#### **Descriptions:**
1.ea_tester.py:
1) Add script_settings output
### [2023-02-12]
#### Version:
##### Package:
##### pixiu: 0.100.*.20230212
#####
#### **Descriptions:**
1.ea_tester.py:
1) Fix get_api missing error.
### [2023-01-11]
#### Version:
##### Package:
##### pixiu: 0.99.*.20230111
#####
#### **Descriptions:**
1.ea_tester.py:
1) Fix self.current_tick_index exception in execute_(self, ticket)
### [2022-12-28]
#### Version:
##### Package:
##### pixiu: 0.98.*.20221228
#####
#### **Descriptions:**
1.Add global API:
PX_InitScriptSettings, PX_ValidScriptSettings
Call order:
PX_InitScriptSettings -> AddChart/AddParam -> PX_ValidScriptSettings
2.Add ts_settings.py
### [2022-12-19]
#### Version:
##### Package:
##### pixiu: 0.97.*.20221219
#####
#### **Descriptions:**
1.Add global API:
PX_InitScriptSettings, PX_ValidScriptSettings
Call order:
PX_InitScriptSettings -> AddChart/AddParam -> PX_ValidScriptSettings
### [2022-12-07]
#### Version:
##### Package:
##### pixiu: 0.96.*.20221207
#####
#### **Descriptions:**
1.api.py:
Add AddChart, AddParam
### [2022-12-06]
#### Version:
##### Package:
##### pixiu: 0.95.*.20221206
#####
#### **Descriptions:**
1.api.py:
Add AddChart, AddParam
### [2022-12-05]
#### Version:
##### Package:
##### pixiu: 0.94.*.20221205
#####
#### **Descriptions:**
1.pxtester.py:
1) Replace json with json5
### [2022-12-02]
#### Version:
##### Package:
##### pixiu: 0.93.*.20221202
#####
#### **Descriptions:**
1.pxtester.py:
1) Fix get_data_info tzinfo error
### [2022-11-04]
#### Version:
##### Package:
##### pixiu: 0.92.*.20221104
#####
#### **Descriptions:**
1.api_base.py:
1) Add _safe_import
### [2022-10-25]
#### Version:
##### Package:
##### pixiu: 0.91.*.20221025
#####
#### **Descriptions:**
1.ea_tester.py:
1)Add execute_script
### [2022-08-26]
#### Version:
##### Package:
##### pixiu: 0.90.*.20220826
#####
#### **Descriptions:**
1.test_pixiu.py:
1) test_ea_tester_func_base: datetime.utcfromtimestamp(new_a['t'][idx])
2) test_ea_tester_func_indicators: datetime.utcfromtimestamp(new_a['t'][idx])
2.ts_symbol_data.py:
1) Change
assertEqual(df['time'][valid_shift], get_timeframe_value_by_time(timeframe, c_time, "time").timestamp(),
f'@ {c_time}, {timeframe}')
to
assertEqual(df['time'][valid_shift], get_timeframe_value_by_time(timeframe, c_time, "time").replace(tzinfo=timezone('UTC')).timestamp(),
f'@ {c_time}, {timeframe}')
3.setup.py:
1) Add requires: dash, plotly
### [2022-08-02]
#### Version:
##### Package:
##### pixiu: 0.89.*.20220802
#####
#### **Descriptions:**
1.ea_tester.py:
1) Fix calculate_return_ratio return value error
### [2022-07-28]
#### Version:
##### Package:
##### pixiu: 0.88.*.20220728
#####
#### **Descriptions:**
1.pxtester.py:
1) Change datetime.fromtimestamp to datetime.utcfromtimestamp
2.account.py:
1) Change datetime.fromtimestamp to datetime.utcfromtimestamp
3.order.py:
1) Change datetime.fromtimestamp to datetime.utcfromtimestamp
4.symbol.py:
1) Change datetime.fromtimestamp to datetime.utcfromtimestamp
5.ea_tester.py:
1) Change datetime.fromtimestamp to datetime.utcfromtimestamp
6.test_pixiu.py:
1) Change datetime.fromtimestamp to datetime.utcfromtimestamp
### [2022-07-18]
#### Version:
##### Package:
##### pixiu: 0.87.*.20220718
#####
#### **Descriptions:**
1. Fix gen_report_row total_value bug
### [2022-06-20]
#### Version:
##### Package:
##### pixiu: 0.86.*.20220620
#####
#### **Descriptions:**
1.Add ea_tester_graph
support dash + plotly
### [2022-05-18]
#### Version:
##### Package:
##### pixiu: 0.85.*.20220518
#####
#### **Descriptions:**
1.ea_tester.py:
1) Fix calculate_returns calculation error
### [2022-04-26]
#### Version:
##### Package:
##### pixiu: 0.84.*.20220426
#####
#### **Descriptions:**
1.tester_api_v1.py:
1) Fix __get_indicator__ cache_name error
### [2022-04-24]
#### Version:
##### Package:
##### pixiu: 0.83.*.20220424
#####
#### **Descriptions:**
1.symbol.py:
1) SymbolIndicator, SymbolPrice, SymbolTime, SymbolData add getitem_index
2) SymbolPrice add:
< __lt__(self, other)
> __gt__(self, other)
<= __le__(self, other)
>= __ge__(self, other)
== __eq__(self, other)
!= __ne__(self, other)
+ __add__(self, other)
– __sub__(self, other)
* __mul__(self, other)
/ __truediv__(self, other)
// __floordiv__(self, other)
% __mod__(self, other)
** __pow__(self, other)
### [2022-04-23]
#### Version:
##### Package:
##### pixiu: 0.82.*.20220423
#####
#### **Descriptions:**
1.symbol.py:
1) Add to_dataframe
2.api_base.py:
1) env_dict add _iter_unpack_sequence_ # [abs(value - level) < ave for _, level in levels]
3.ea_node_transformer.py:
1) Add EARestrictingNodeTransformer
### [2022-04-22]
#### Version:
##### Package:
##### pixiu: 0.81.*.20220422
#####
#### **Descriptions:**
1.ea_tester.py:
1) Change min_volume initial value to None
2.pxtester.py:
1) Fix on_end_execute item['value'] None error
3.main.py:
1) Fix gen_report_row item['value'] None error
### [2022-04-21]
#### Version:
##### Package:
##### pixiu: 0.80.*.20220421
#####
#### **Descriptions:**
1.ea_tester.py:
1) report add max_volume
### [2022-04-20]
#### Version:
##### Package:
##### pixiu: 0.79.*.20220420
#####
#### **Descriptions:**
1.ea_tester.py:
1) Fix __valid_order__ pending order error
### [2022-04-18]
#### Version:
##### Package:
##### pixiu: 0.78.*.20220418
#####
#### **Descriptions:**
1.api_base.py:
1) env_dictAdd property
### [2022-04-07]
#### Version:
##### Package:
##### pixiu: 0.77.*.20220407
#####
#### **Descriptions:**
1.ea_tester.py:
1) Fix calculate_return_ratio error
2) Add sortino_ratio
### [2022-04-06]
#### Version:
##### Package:
##### pixiu: 0.76.*.20220406
#####
#### **Descriptions:**
1.ea_tester.py:
1) Add percent_str_to_float
2) Add calculate_sharpe_ratio
### [2022-04-03]
#### Version:
##### Package:
##### pixiu: 0.75.*.20220403
#####
#### **Descriptions:**
1.ea_tester.py:
1) Add margin_so_so, margin_so_call checking
### [2022-04-02]
#### Version:
##### Package:
##### pixiu: 0.74.*.20220402
#####
#### **Descriptions:**
1.ea_tester.py:
Fix modify_order order_log error
### [2022-03-30]
#### Version:
##### Package:
##### pixiu: 0.73.*.20220330
#####
#### **Descriptions:**
1.ea_tester.py:
__remove_pending_order__ pop add None
2.Add set:
env_dict["set"]
### [2022-03-10]
#### Version:
##### Package:
##### pixiu: 0.72.*.20220310
#####
#### **Descriptions:**
1.ts_order_buylimit.py,ts_order_buystop.py,ts_order_selllimit.py,ts_order_sellstop.py:
Add check order.status
2.api.py:
Add GetSettings
### [2022-03-09]
#### Version:
##### Package:
##### pixiu: 0.71.*.20220309
#####
#### **Descriptions:**
1.defines.py:
Add OrderStatus
2.order.py:
Add status
### [2022-03-05]
#### Version:
##### Package:
##### pixiu: 0.70.*.20220305
#####
#### **Descriptions:**
1.ea_tester.py:
1) __process_order__: Add parameters: ask, last_ask, bid, last_bid
2) __calculate_profit__: Update calculation m
3) __valid_order__: Add parameters: ask, bid
### [2022-03-04]
#### Version:
##### Package:
##### pixiu: 0.69.*.20220304
#####
#### **Descriptions:**
1.Add PositionType
2.Fix __valid_order__ pending order error
3.Fix __close_order__ close_time error
### [2022-03-02]
#### Version:
##### Package:
##### pixiu: 0.68.*.20220301
#####
#### **Descriptions:**
1.ea_tester.py: Add volume_precision
### [2022-03-01]
#### Version:
##### Package:
##### pixiu: 0.67.*.20220301
#####
#### **Descriptions:**
1.fix __remove_order__ pop bug
### [2022-02-26]
#### Version:
##### Package:
##### pixiu: 0.66.*.20220226
#####
#### **Descriptions:**
1.Add is_dirty method to order
2.API: add RunMode, CloseMultiOrders
3.Defines: add RunModeValue
### [2022-02-24]
#### Version:
##### Package:
##### pixiu: 0.65.*.20220224
#####
#### **Descriptions:**
1.Change error name: EID_EAT_MARGIN_CALL -> EID_EAT_NOT_ENOUGH_MONEY
### [2022-02-22]
#### Version:
##### Package:
##### pixiu: 0.64.*.20220222
#####
#### **Descriptions:**
1.Add tags in order data
### [2022-02-11]
#### Version:
##### Package:
##### pixiu: 0.63.*.20220211
#####
#### **Descriptions:**
1.Add new testing 'test_ea_tester_func_load_lib'
### [2022-02-10]
#### Version:
##### Package:
##### pixiu: 0.62.*.20220210
#####
#### **Descriptions:**
1.Add library function
###[lib|library]=["PriceAction==0.1.0"]
2.ea_base.py:
1)Add method parse_script
### [2022-02-09]
#### Version:
##### Package:
##### pixiu: 0.61.*.20220209
#####
#### **Descriptions:**
1.Remove OrderScope, using DataScope
### [2021-12-14]
#### Version:
##### Package:
##### pixiu: 0.60.*.20211114
#####
#### **Descriptions:**
1.EA script support timezone
2.ts_base: Add test_timezone
### [2021-12-11]
#### Version:
##### Package:
##### pixiu: 0.59.*.20211111
#####
#### **Descriptions:**
1.Support auto loading script from tag
pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 -s ../Test/Test_V2.11.18-3x.py -p report -t 2.11.18-3x -l ea2_7_211209.json
or
pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 -s ../Test -p report -t 2.11.18-3x -l ea2_7_211209.json
### [2021-11-26]
#### Version:K
##### Package:
##### pixiu: 0.58.*.20211126
#####
#### **Descriptions:**
1.Update README.md/README.zh.md
2.ea_tester.py:
Modify notify output format
### [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
Raw data
{
"_id": null,
"home_page": "https://github.com/tradepython/pixiu",
"name": "pixiu",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "Trading Backtest Forex Stocks MT4 MT5 MetaTrade",
"author": "tradepython",
"author_email": "tradepython@icloud.com",
"download_url": "https://files.pythonhosted.org/packages/a3/11/ad1696d3d07f378145fead1df11be5c9c631e535688666d29b277e7e8fa8/pixiu-0.109.0.tar.gz",
"platform": null,
"description": "[comment]: <> (![alt pixiu-icon](pixiu-128x128-8bit.png))\n\n<p align=\"center\">\n<img width=\"128\" height=\"128\" src=\"https://raw.githubusercontent.com/tradepython/pixiu/main/pixiu-128x128-8bit.png\">\n</p>\n<p align=\"center\" style=\"font-size:xx-small;\">PiXiu - A Chinese mythological creature that brings fortune to people.</p>\n\n\nPiXiu\n======\nA trading backtesting tool similar to MT4/MT5.\n\nIt has a standard set of API definitions, and backtesting code written using these APIs can be run on www.TradePython.com without changes.\n\nInstall\n=======\n```\npip install pixiu\n```\nIf you have problems installing TA-Lib, please refer to https://github.com/mrjbq7/ta-lib\n\n\n\nHow to use\n=======\nParameters :\n\n -c/--testconfig test config\n -n/--testname test name (in the test configuration file)\n -s/--scriptpath script file\n -o/--logpath log file\n -p/--printlogtype print log type\n -m/--multiprocessing multiprocessing mode\n -r/--compare compare with the tags list\n -t/--tag tag\n -l/--datafile data file name\n\n Basic\n\n pixiu -c pixiu_sample.json -n testUSDCHF_TP -s pixiu_sample.py\n pixiu -c pixiu_sample.json -n testUSDCHF_TP -s pixiu_sample.py\n pixiu -c pixiu_sample.json -n testUSDCHF -s pixiu_sample2.py -o log.txt\n\n Compare multiple strategies\n\n 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\n 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\n 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\n\n 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\n\n Output:\n +----+--------------------------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+--------------------+\n | | | testAUDUSD_TP_Demo1 | testGBPUSD_TP_Demo1 | testNZDUSD_TP_Demo1 | testEURUSD_TP_Demo1 | testUSDCHF_TP_Demo1 | testUSDJPY_TP_Demo1 | testUSDCAD_TP_Demo1 | Total/Avg |\n +----+--------------------------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+--------------------+\n | 1 | Init Balance(2.10.0) | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 35000.0 / 5000.0 |\n | 1 | Init Balance(2.10.1) | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 35000.0 / 5000.0 |\n | 1 | Init Balance(2.10.2) | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 35000.0 / 5000.0 |\n ...\n | 7 | Balance(2.10.0) | 4988.31 | 5064.61 | 5041.77 | 5071.6 | 4994.96 | 4996.97 | 4996.94 | 35155.16 / 5022.17 |\n | 7 | Balance(2.10.1) | 5003.42 \u2191 | 5061.26 \u2193 | 5000.58 \u2193 | 4965.65 \u2193 | 5009.12 \u2191 | 5033.44 \u2191 | 4931.17 \u2193 | 35004.64 / 5000.66 |\n | 7 | Balance(2.10.2) | 4981.59 \u2193 | 5076.74 \u2191 | 5000.58 \u2193 | 4985.02 \u2193 | 5023.02 \u2191 | 5029.35 \u2191 | 4965.34 \u2193 | 35061.64 / 5008.81 |\n | 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 |\n | 8 | Total Net Profit(2.10.1) | 3.42 \u2191 | 61.26 \u2193 | 0.58 \u2193 | -34.35 \u2193 | 9.14 \u2191 | 33.44 \u2191 | -68.84 \u2193 | 4.65 / 0.66 |\n | 8 | Total Net Profit(2.10.2) | -18.41 \u2193 | 76.74 \u2191 | 0.58 \u2193 | -14.98 \u2193 | 23.04 \u2191 | 29.35 \u2191 | -34.68 \u2193 | 61.64 / 8.81 |\n | 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 % |\n | 9 | Total Net Profit Rate(2.10.1) | 0.07 % \u2191 | 1.23 % \u2193 | 0.01 % \u2193 | -0.69 % \u2193 | 0.18 % \u2191 | 0.67 % \u2191 | -1.38 % \u2193 | 0.09 % / 0.01 % |\n | 9 | Total Net Profit Rate(2.10.2) | -0.37 % \u2193 | 1.53 % \u2191 | 0.01 % \u2193 | -0.3 % \u2193 | 0.46 % \u2191 | 0.59 % \u2191 | -0.69 % \u2193 | 1.23 % / 0.18 % |\n ...\n\n pixiu -c pixiu.json -n testUSDCAD_TP_Demo1 -t 2.10.0 -r 2.10.1 2.10.2 -l ea2_7.json\n Output:\n +----+--------------------------------------+---------------------+-------------------+\n | | | testUSDCAD_TP_Demo1 | Total/Avg |\n +----+--------------------------------------+---------------------+-------------------+\n | 1 | Init Balance(2.10.0) | 5000.0 | 5000.0 / 5000.0 |\n | 1 | Init Balance(2.10.1) | 5000.0 | 5000.0 / 5000.0 |\n | 1 | Init Balance(2.10.2) | 5000.0 | 5000.0 / 5000.0 |\n ...\n | 7 | Balance(2.10.0) | 4996.94 | 4996.94 / 4996.94 |\n | 7 | Balance(2.10.1) | 4931.17 \u2193 | 4931.17 / 4931.17 |\n | 7 | Balance(2.10.2) | 4965.34 \u2193 | 4965.34 / 4965.34 |\n | 8 | Total Net Profit(2.10.0) | -3.05 | -3.05 / -3.05 |\n | 8 | Total Net Profit(2.10.1) | -68.84 \u2193 | -68.84 / -68.84 |\n | 8 | Total Net Profit(2.10.2) | -34.68 \u2193 | -34.68 / -34.68 |\n | 9 | Total Net Profit Rate(2.10.0) | -0.06 % | -0.06 % / -0.06 % |\n | 9 | Total Net Profit Rate(2.10.1) | -1.38 % \u2193 | -1.38 % / -1.38 % |\n | 9 | Total Net Profit Rate(2.10.2) | -0.69 % \u2193 | -0.69 % / -0.69 % |\n ...\n\n\nTest configuration file format\n=======\nJSON format:\n\n```json\n{\n \"accounts\": {\n \"default\": {\n \"balance\": 10000.0,\n \"equity\": 10000.0,\n \"margin\": 0,\n \"free_margin\": 10000.0,\n \"credit\": 0.0,\n \"profit\": 0.0,\n \"margin_level\": 0,\n \"leverage\": 100,\n \"currency\": \"USD\",\n \"free_margin_mode\": 0,\n \"stop_out_level\": 0,\n \"stop_out_mode\": 0,\n \"company\": \"TradePython.com\",\n \"name\": \"PXTester\",\n \"number\": \"000\",\n \"server\": \"PXTester\",\n \"trade_mode\": 0,\n \"limit_orders\": 500,\n \"margin_so_mode\": 0,\n \"trade_allowed\": true,\n \"trade_expert\": 1,\n \"margin_so_call\": 0.0,\n \"margin_so_so\": 0.0,\n \"commission\": 0.0\n }\n },\n \"symbols\": {\n \"USDCHF\": {\n \"symbol\": \"USDCHF\",\n \"spread\": 2,\n \"digits\": 5,\n \"stop_level\": 0,\n \"volume_min\": 0.01,\n \"trade_contract_size\": 100000,\n \"point\": 0.00001,\n \"currency_profit\": \"CHF\",\n \"currency_base\": \"USD\",\n \"currency_margin\": \"USD\"\n }\n },\n \"tests\": {\n \"testUSDCHF\": {\n \"symbol\": \"USDCHF\",\n \"tick_data\": \"usdchf_m1_20210315-0415.csv\",\n \"start_time\": \"2021-03-15\",\n \"end_time\": \"2021-04-16\",\n \"max_tick\": 100,\n \"balance\": 10000,\n \"leverage\": 100,\n \"currency\": \"USD\",\n \"account\": \"default\",\n \"spread_point\": 15\n },\n \"testUSDCHF_TP\": {\n \"symbol\": \"USDCHF\",\n \"tick_data\": {\n \"channel\": \"tradepython.com\",\n \"api_token\": \"YOUR-API-TOKEN\",\n \"source\": \"12345678@PixiuServer01\",\n \"format\": \"json\",\n \"period\": 30,\n \"timeframe\": \"m1\"\n },\n \"max_tick\": 100,\n \"balance\": 10000,\n \"leverage\": 100,\n \"currency\": \"USD\",\n \"account\": \"default\",\n \"spread_point\": 15\n },\n \"testUSDCHF_TP2\": {\n \"symbol\": \"USDCHF\",\n \"tick_data\": {\n \"channel\": \"tradepython.com\",\n \"api_token\": \"YOUR-API-TOKEN\",\n \"source\": {\"type\": \"public\", \"name\": \"Demo1\"},\n \"format\": \"json\",\n \"period\": 30,\n \"start_time\": \"2021-03-15\",\n \"end_time\": \"2021-04-16\",\n \"timeframe\": \"m1\"\n },\n \"start_time\": \"2021-03-15\",\n \"end_time\": \"2021-04-16\",\n \"max_tick\": 100,\n \"balance\": 10000,\n \"leverage\": 100,\n \"currency\": \"USD\",\n \"account\": \"default\",\n \"spread_point\": 15\n }\n }\n}\n```\n\nTesting with csv files:\n\n symbol: product\n tick_data: tick data data file\n start_time: start time\n end_time: end time\n max_tick: the maximum number of ticks to test, which can reduce the test time\n balance: initial capital of the test account\n leverage: leverage of the test account\n account: the name of the test account (in the test profile accounts)\n spread_point: spread\n\n```json\n\"testUSDCHF\": {\n \"symbol\": \"USDCHF\",\n \"tick_data\": \"usdchf_m1_20210315-0415.csv\",\n \"start_time\": \"2021-03-15\",\n \"end_time\": \"2021-04-16\",\n \"max_tick\": 100,\n \"balance\": 10000,\n \"leverage\": 100,\n \"currency\": \"USD\",\n \"account\": \"default\",\n \"spread_point\": 15\n}\n```\n\nTest with tradepython data test\n\n source: Data account\n account@account-server\n Example:\n 12345678@PixiuServer01\n or: {\"type\": \"public\", \"name\": \"Demo1\"}\n type: public or private\n name: Account name\n\n period: data period (days)\n Example:\n 30 - the last 30 days of data\n\n timeframe: time frame, the following values\n s1 - 1 second\n m1 - 1 minute\n m5 - 1 minute\n m15 - 15 minutes\n m30 - 30 minutes\n h1 - 1 hour\n h4 - 1 hour\n d1 - 1 day\n w1 - 1 week\n mn1 - 1 month\n\n```json\n\"testUSDCHF_TP\": {\n ...\n \"tick_data\": {\n \"channel\": \"tradepython.com\",\n \"api_token\": \"YOUR-API-TOKEN\",\n \"source\": \"account@account-server\",\n \"format\": \"json\",\n \"period\": 30,\n \"timeframe\": \"m1\"\n },\n ...\n}\n```\n\nScript Samples\n=======\n1. Buy or sell a product\n ```python\n errid, order_uid = Buy(volume=volume, price=Ask())\n errid, order_uid = Sell(volume=0.01, price=Bid())\n ```\n\n2. Modify an order\n ```python\n errid, order_uid = ModifyOrder(order_uid, stop_loss=stop_loss, take_profit=take_profit)\n ```\n\n3. Close an order\n ```python\n errid, order_uid = CloseOrder(order_uid, price=Ask(), volume=volume)\n ```\n\n4. Get the current open order UIDs\n ```python\n uids = GetOpenedOrderUIDs()\n for uid in uids:\n o = GetOrder(uid)\n ```\n\n\nAPI\n=======\n\n```python\nAccountEquity(self)\n Returns the equity.\n\n Returns:\n The account equity.\n\nAccountFreeMargin(self)\n Returns the free margin.\n\n Returns:\n The free margin.\n\nAsk(self, shift=0, symbol=None) -> float\n Returns Ask price value for the default symbol with default timeframe and shift.\n\n Parameters:\n shift (int): Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n symbol (str): The symbol name.\n If None returns current symbol.\n\n Returns:\n Ask price.\n\nBid(self, shift=0, symbol=None) -> float\n Returns Bid price value for the default symbol with default timeframe and shift.\n\n Parameters:\n shift (int): Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n symbol (str): The symbol name.\n If None returns current symbol.\n\n Returns:\n Bid price.\n\nBuy(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>)\n Open a long order.\n\n Parameters:\n volume (float): Number of lots.\n type (OrderType): Order type.\n price (float): Order price. If price is None, price = Ask().\n stop_loss (float): Stop loss price.\n take_profit (float): Take profit price.\n magic_number (float): Order magic number.\n symbol (float): Symbol for trading.\n slippage (float): Maximum price slippage for trading.\n arrow_color (float): Color of the opening arrow on the MT4/5 chart.\n expiration (float): Order expiration time (for pending order only)\n tags (dict): Order tags\n\n Returns:\n ErrorID: If 0 success.\n OrderResult: The order result.\n\n\nSell(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>)\n Open a short order.\n\n Parameters:\n volume (float): Number of lots.\n type (OrderType): Order type.\n price (float): Order price. If price is None, price = Bid().\n stop_loss (float): Stop loss price.\n take_profit (float): Take profit price.\n magic_number (float): Order magic number.\n symbol (float): Symbol for trading.\n slippage (float): Maximum price slippage for trading.\n arrow_color (float): Color of the opening arrow on the MT4/5 chart.\n expiration (float): Order expiration time (for pending order only)\n tags (dict): Order tags\n\n Returns:\n ErrorID: If 0 success.\n OrderResult: The order result.\n\n\nModifyOrder(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>)\n Modify a order.\n\n Parameters:\n uid : The order UID.\n price (float): New open price. (for pending order only)\n stop_loss (float): New stop loss price.\n take_profit (float): New take profit price.\n arrow_color (float): New color of the opening arrow on the MT4/5 chart.\n expiration (float): New order expiration time (for pending order only)\n tags (dict): Order tags\n Returns:\n ErrorID: If 0 success.\n OrderResult: The order result.\n\nCloseOrder(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>)\n Close a order.\n\n Parameters:\n uid : The order UID.\n price (float): Close price.\n volume (float): Number of lots.\n slippage (float): Maximum price slippage for trading.\n arrow_color (float): New color of the opening arrow on the MT4/5 chart.\n tags (dict): Order tags\n\n Returns:\n ErrorID: If 0 success.\n OrderResult: The order result.\n\n\nClose(self, shift=0, symbol=None) -> float\n Returns Close price value for the default symbol with default timeframe and shift.\n\n Parameters:\n shift (int): Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n symbol (str): The symbol name.\n If None returns current symbol.\n\n Returns:\n Close price.\n\nDefaultTimeFrame(self)\n Returns the default time frame.\n\nGetAccount(self)\n Returns the account data.\n\n Returns:\n The account data.\n\nGetClosedOrderUIDs(self, symbol: str = None, scope: int = DataScope.EA)\n Returns the UIDs of current closed orders.\n\n Parameters:\n symbol: The symbol name.\n If None returns current symbol.\n If '*' returns all symbols.\n scope:\n EA: The current ea (default).\n ACCOUNT: The current account.\n EA_VERSION: The current ea version.\n\n Returns:\n The uid list.\n\nGetOpenedOrderUIDs(self, symbol: str = None, scope: int = DataScope.EA)\n Returns the UIDs of current opened orders.\n\n Parameters:\n symbol: The symbol name.\n If None returns current symbol.\n If '*' returns all symbols.\n scope:\n EA: The current ea (default).\n ACCOUNT: The current account.\n EA_VERSION: The current ea version.\n\n\n Returns:\n The uid list.\n\n\nGetPendingOrderUIDs(self, symbol: str = None, scope: int = DataScope.EA)\n Returns the UIDs of current pending orders.\n\n Parameters:\n symbol: The symbol name.\n If None returns current symbol.\n If '*' returns all symbols.\n scope:\n EA: The current ea (default).\n ACCOUNT: The current account.\n EA_VERSION: The current ea version.\n\n Returns:\n The uid list.\n\nGetOrder(self, order_uid: <function NewType.<locals>.new_type at 0x7fe122ed0940>)\n Returns the order object.\n\n Parameters:\n order_uid (): The order uid.\n\n Returns:\n The order object.\n\nGetParam(self, name, default=None)\n Returns the EA parameter value.\n\n Parameters:\n name (): The EA parameter name.\n default (int): The EA parameter default value.\n\n Returns:\n The EA parameter value.\n\n GetSettings(self, name, default=None)\n Returns the EA Settings value.\n\n Parameters:\n name (): The EA settings name.\n default (int): The EA settings default value.\n\n Returns:\n The EA settings value.\n\nGetSymbol(self, symbol=None)\n Returns the symbol properties.\n\n Parameters:\n symbol (str): The symbol name.\n\n Returns:\n The symbol properties\n\nGetSymbolData(self, symbol: str, timeframe: str, size: int)\n Get a symbol data.\n\n Parameters:\n symbol (str): Symbol name.\n timeframe (str): Timeframe. See the TimeFrame defining.\n size (int): Maximum size.\n\n Returns:\n Symbol data\n\nHigh(self, shift=0, symbol=None) -> float\n Returns High price value for the default symbol with default timeframe and shift.\n\n Parameters:\n shift (int): Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n symbol (str): The symbol name.\n If None returns current symbol.\n\n Returns:\n High price.\n\nLow(self, shift=0, symbol=None) -> float\n Returns Low price value for the default symbol with default timeframe and shift.\n\n Parameters:\n shift (int): Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n symbol (str): The symbol name.\n If None returns current symbol.\n\n Returns:\n Low price.\n\nOpen(self, shift=0, symbol=None) -> float\n Returns Open price value for the default symbol with default timeframe and shift.\n\n Parameters:\n shift (int): Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n symbol (str): The symbol name.\n If None returns current symbol.\n\n Returns:\n Open price.\n\nOrderStats(self, order_uids)\n Returns the order statistics.\n\n Parameters:\n order_uids : the list of order uids.\n\n Returns:\n The order statistics.\n\n\nStopTester(self, code: int = 0, message: str = None)\n Stop the EA tester. (For tester only.)\n\n Parameters:\n code (int): Error code.\n message (str): Error message.\n\n Returns:\n None\n\nSymbol(self) -> str\n Returns the current symbol name.\n\n Returns:\n The symbol name.\n\nSymbolInfo(self, item, symbol=None, default=None)\n Returns the symbol information.\n\n Parameters:\n item (str): The symbol item name.\n symbol (str): The symbol name.\n default (): The default value.\n\n Returns:\n The symbol information.\n\nTime(self, shift=0, symbol=None) -> datetime.datetime\n Returns time value for the default symbol with default timeframe and shift.\n\n Parameters:\n shift (int): Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n symbol (str): The symbol name.\n If None returns current symbol.\n\n Returns:\n Time.\n\nVolume(self, shift=0, symbol=None) -> float\n Returns volume value for the default symbol with default timeframe and shift.\n\n Parameters:\n shift (int): Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n symbol (str): The symbol name.\n If None returns current symbol.\n\n Returns:\n Volume price.\n\n__init__(self)\n Initialize self. See help(type(self)) for accurate signature.\n\niAD(self, symbol_data, shift=0)\n Chaikin A/D Line (Volume Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Chaikin A/D Line\n\niADX(self, symbol_data, timeperiod, shift=0)\n Average Directional Movement Index (Momentum Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Average Directional Movement Index\n\niATR(self, symbol_data, timeperiod, shift=0)\n Average True Range (Volatility Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Average True Range\n\niBands(self, symbol_data, timeperiod, nbdevup, nbdevdn, matype, shift=0)\n Bollinger Bands (Overlap Studies)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n nbdevup (int): 2\n nbdevdn (int): 2\n ma_type: 0 (Simple Moving Average) ,For details see the TA-LIB\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Bollinger Bands\n\niCCI(self, symbol_data, timeperiod, shift=0)\n Commodity Channel Index (Momentum Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Commodity Channel Index\n\niChaikin(self, symbol_data, fastperiod, slowperiod, shift=0)\n Chaikin A/D Oscillator (Volume Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n fastperiod (int): The fast period.\n slowperiod (int): The low period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Chaikin A/D Oscillator\n\niDEMA(self, symbol_data, timeperiod, shift=0)\n Double Exponential Moving Average (Overlap Studies)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Double Exponential Moving Average\n\niMA(self, price_data, period, ma_type, shift=0)\n Calculates the Moving Average indicator and returns its value.\n\n Parameters:\n price_data (object): The price data. (Close, Open, Low, etc...)\n period (int): Averaging period for calculation.\n ma_type: 0 (Simple Moving Average) ,For details see the TA-LIB\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Moving average value.\n\niMACD(self, symbol_data, fastperiod, slowperiod, signalperiod, shift=0)\n Moving Average Convergence/Divergence (Momentum Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n fastperiod (int): The fast period.\n slowperiod (int): The slow period.\n signalperiod (int): The signal period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Moving Average Convergence/Divergence\n\niMFI(self, symbol_data, timeperiod, shift=0)\n Money Flow Index (Momentum Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Money Flow Index\n\niMomentum(self, symbol_data, timeperiod, shift=0)\n Momentum (Momentum Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Momentum\n\niOBV(self, symbol_data, shift=0)\n On Balance Volume (Volume Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n On Balance Volume\n\niRSI(self, symbol_data, timeperiod, shift=0)\n Relative Strength Index (Momentum Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Relative Strength Index\n\niSAR(self, symbol_data, acceleration, maximum, shift=0)\n Parabolic SAR (Overlap Studies)\n\n Parameters:\n symbol_data (object): The symbol data.\n acceleration (int): 0.02\n maximum (int): 0.2\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Parabolic SAR\n\niStdDev(self, symbol_data, timeperiod, nbdev, shift=0)\n Standard Deviation (Statistic Functions)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n nbdev (int): 1\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Standard Deviation\n\niStochastic(self, symbol_data, fastk_period, slowk_period, slowk_matype, slowd_period, slowd_matype, shift=0)\n Stochastic (Momentum Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n fastk_period (int): 5\n slowk_period (int): 3\n slowk_matype (int): 0\n slowd_period (int): 3\n slowd_matype (int): 0\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Stochastic\n\niTEMA(self, symbol_data, timeperiod, shift=0)\n Triple Exponential Moving Average (Overlap Studies)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Triple Exponential Moving Average\n\niWPR(self, symbol_data, timeperiod, shift=0)\n Williams' %R (Momentum Indicators)\n\n Parameters:\n symbol_data (object): The symbol data.\n timeperiod (int): The time period.\n shift: Index of the value taken from the buffer\n (shift relative to the current the given amount of periods ago).\n\n Returns:\n Williams' %R\n\nWaitCommand(self, uid, timeout=120)\n Waiting for a asynchronous command execution\u3002\n\n Parameters:\n uid : The command UID.\n timeout : Timeout \uff08seconds\uff09\n Returns:\n ErrorID: If 0 success.\n CommandResult: If failed returns None.\n \n\n AcquireLock(self, name, timeout=60) -> bool:\n Acquire a lock\n\n Parameters:\n name : The lock name\n timeout : Lock timeout \uff08seconds\uff09\n Returns:\n If True success.\n \n\n ReleaseLock(self, name):\n Release a lock\n\n Parameters:\n name : The lock name\n \n\n Plot(self, series):\n Plot\n \n Parameters:\n series\n\n\n DeleteData(self, name, scope: int = DataScope.EA) -> ErrorID:\n Delete data\n\n Parameters:\n name : The data name\n scope : The data scope (current EA settings, EA version, EA, Account)\n Returns:\n The errorid.\n\n LoadData(self, name, scope: int = DataScope.EA, format='json'):\n Load data\n\n Parameters:\n name : The data name\n scope : The data scope (current EA settings, EA version, EA, Account)\n format: Only support JSON.\n Returns:\n data.\n \n SaveData(self, name, data, scope: int = DataScope.EA, format='json') -> ErrorID:\n Save data\n\n Parameters:\n name : The data name\n scope : The data scope (current EA settings, EA version, EA, Account)\n format: Only support JSON.\n Returns:\n The errorid.\n \n Notify(self, message) -> ErrorID:\n Send a notification\n\n Parameters:\n message: The content of notification\n Returns:\n The errorid.\n \n \n```\n\n\n\n### [2023-12-07]\n#### Version:\n##### Package:\n##### pixiu: 0.109.*.20231207\n#####\n#### **Descriptions\uff1a**\n 1.ea_taster.py:\n 1) __close_order__\n Fix profit calculation error when closing partitioned volumes \n \n\n### [2023-11-16]\n#### Version:\n##### Package:\n##### pixiu: 0.108.*.20231116\n#####\n#### **Descriptions\uff1a**\n 1.main.py:\n 1) gen_report_row: \n Add compare_item['value'] checking\n\n### [2023-11-15]\n#### Version:\n##### Package:\n##### pixiu: 0.107.*.20231115\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) __close_order__:\n Fix new order open_price error\n 2.ts_order_market.py:\n 1) Add from_uid, to_uid test\n\n### [2023-11-14]\n#### Version:\n##### Package:\n##### pixiu: 0.106.*.20231114\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix order_to_ndarray KeyError: 'magic_number'\n 2) __close_order__:\n Change order comment from 'close by #xxx' to 'from #xxx'\n Remove the tags of closed order\n 3) __add_market_order__:\n Add comment checking\n 2.ts_order_market.py:\n 1) Add close partial order test\n\n\n### [2023-06-23]\n#### Version:\n##### Package:\n##### pixiu: 0.105.*.20230623\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Add tick_test_start_index in params\n 2) Add test_period in pixiu config file\n\n### [2023-03-13]\n#### Version:\n##### Package:\n##### pixiu: 0.104.*.20230313\n#####\n#### **Descriptions\uff1a**\n 1.pxtester.py:\n 1) Add get_tick_data_from_yfinance, covert_yfinance_data_to_json \n\n### [2023-02-26]\n#### Version:\n##### Package:\n##### pixiu: 0.103.*.20230226\n#####\n#### **Descriptions\uff1a**\n 1.main.py:\n 1) start_mp, start_sp: results add exception \n\n### [2023-02-28]\n#### Version:\n##### Package:\n##### pixiu: 0.102.*.20230228\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Remove parse_script, get_script_init_settings\n 2) execute_: Add ValidScriptSettings Error\n 3) __init__: self.log_file = open(self.log_path, mode='wt')\n\n\n### [2023-02-22]\n#### Version:\n##### Package:\n##### pixiu: 0.101.*.20230222\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Add script_settings output\n\n### [2023-02-12]\n#### Version:\n##### Package:\n##### pixiu: 0.100.*.20230212\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix get_api missing error.\n\n### [2023-01-11]\n#### Version:\n##### Package:\n##### pixiu: 0.99.*.20230111\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix self.current_tick_index exception in execute_(self, ticket)\n\n### [2022-12-28]\n#### Version:\n##### Package:\n##### pixiu: 0.98.*.20221228\n#####\n#### **Descriptions\uff1a**\n 1.Add global API:\n PX_InitScriptSettings, PX_ValidScriptSettings\n Call order:\n PX_InitScriptSettings -> AddChart/AddParam -> PX_ValidScriptSettings\n 2.Add ts_settings.py\n\n### [2022-12-19]\n#### Version:\n##### Package:\n##### pixiu: 0.97.*.20221219\n#####\n#### **Descriptions\uff1a**\n 1.Add global API:\n PX_InitScriptSettings, PX_ValidScriptSettings\n Call order:\n PX_InitScriptSettings -> AddChart/AddParam -> PX_ValidScriptSettings\n\n### [2022-12-07]\n#### Version:\n##### Package:\n##### pixiu: 0.96.*.20221207\n#####\n#### **Descriptions\uff1a**\n 1.api.py:\n Add AddChart, AddParam\n\n### [2022-12-06]\n#### Version:\n##### Package:\n##### pixiu: 0.95.*.20221206\n#####\n#### **Descriptions\uff1a**\n 1.api.py:\n Add AddChart, AddParam\n\n### [2022-12-05]\n#### Version:\n##### Package:\n##### pixiu: 0.94.*.20221205\n#####\n#### **Descriptions\uff1a**\n 1.pxtester.py:\n 1) Replace json with json5\n\n### [2022-12-02]\n#### Version:\n##### Package:\n##### pixiu: 0.93.*.20221202\n#####\n#### **Descriptions\uff1a**\n 1.pxtester.py:\n 1) Fix get_data_info tzinfo error\n\n### [2022-11-04]\n#### Version:\n##### Package:\n##### pixiu: 0.92.*.20221104\n#####\n#### **Descriptions\uff1a**\n 1.api_base.py:\n 1) Add _safe_import\n\n### [2022-10-25]\n#### Version:\n##### Package:\n##### pixiu: 0.91.*.20221025\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1)Add execute_script\n\n### [2022-08-26]\n#### Version:\n##### Package:\n##### pixiu: 0.90.*.20220826\n#####\n#### **Descriptions\uff1a**\n 1.test_pixiu.py:\n 1) test_ea_tester_func_base: datetime.utcfromtimestamp(new_a['t'][idx])\n 2) test_ea_tester_func_indicators: datetime.utcfromtimestamp(new_a['t'][idx])\n 2.ts_symbol_data.py:\n 1) Change \n assertEqual(df['time'][valid_shift], get_timeframe_value_by_time(timeframe, c_time, \"time\").timestamp(),\n f'@ {c_time}, {timeframe}')\n to \n assertEqual(df['time'][valid_shift], get_timeframe_value_by_time(timeframe, c_time, \"time\").replace(tzinfo=timezone('UTC')).timestamp(),\n f'@ {c_time}, {timeframe}')\n 3.setup.py:\n 1) Add requires: dash, plotly\n\n\n### [2022-08-02]\n#### Version:\n##### Package:\n##### pixiu: 0.89.*.20220802\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix calculate_return_ratio return value error\n\n### [2022-07-28]\n#### Version:\n##### Package:\n##### pixiu: 0.88.*.20220728\n#####\n#### **Descriptions\uff1a**\n 1.pxtester.py:\n 1) Change datetime.fromtimestamp to datetime.utcfromtimestamp\n 2.account.py:\n 1) Change datetime.fromtimestamp to datetime.utcfromtimestamp\n 3.order.py:\n 1) Change datetime.fromtimestamp to datetime.utcfromtimestamp\n 4.symbol.py:\n 1) Change datetime.fromtimestamp to datetime.utcfromtimestamp\n 5.ea_tester.py:\n 1) Change datetime.fromtimestamp to datetime.utcfromtimestamp\n 6.test_pixiu.py:\n 1) Change datetime.fromtimestamp to datetime.utcfromtimestamp\n\n### [2022-07-18]\n#### Version:\n##### Package:\n##### pixiu: 0.87.*.20220718\n#####\n#### **Descriptions\uff1a**\n 1. Fix gen_report_row total_value bug\n\n### [2022-06-20]\n#### Version:\n##### Package:\n##### pixiu: 0.86.*.20220620\n#####\n#### **Descriptions\uff1a**\n 1.Add ea_tester_graph\n support dash + plotly\n \n\n### [2022-05-18]\n#### Version:\n##### Package:\n##### pixiu: 0.85.*.20220518\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix calculate_returns calculation error\n\n\n### [2022-04-26]\n#### Version:\n##### Package:\n##### pixiu: 0.84.*.20220426\n#####\n#### **Descriptions\uff1a**\n 1.tester_api_v1.py:\n 1) Fix __get_indicator__ cache_name error\n\n### [2022-04-24]\n#### Version:\n##### Package:\n##### pixiu: 0.83.*.20220424\n#####\n#### **Descriptions\uff1a**\n 1.symbol.py:\n 1) SymbolIndicator, SymbolPrice, SymbolTime, SymbolData add getitem_index\n 2) SymbolPrice add:\n <\t__lt__(self, other)\n >\t__gt__(self, other)\n <=\t__le__(self, other)\n >=\t__ge__(self, other)\n ==\t__eq__(self, other)\n !=\t__ne__(self, other)\n +\t__add__(self, other)\n \u2013\t__sub__(self, other)\n * __mul__(self, other)\n /\t__truediv__(self, other)\n //\t__floordiv__(self, other)\n %\t__mod__(self, other)\n **\t__pow__(self, other)\n\n### [2022-04-23]\n#### Version:\n##### Package:\n##### pixiu: 0.82.*.20220423\n#####\n#### **Descriptions\uff1a**\n 1.symbol.py:\n 1) Add to_dataframe\n 2.api_base.py:\n 1) env_dict add _iter_unpack_sequence_ # [abs(value - level) < ave for _, level in levels]\n 3.ea_node_transformer.py:\n 1) Add EARestrictingNodeTransformer\n\n### [2022-04-22]\n#### Version:\n##### Package:\n##### pixiu: 0.81.*.20220422\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Change min_volume initial value to None\n 2.pxtester.py:\n 1) Fix on_end_execute item['value'] None error\n 3.main.py:\n 1) Fix gen_report_row item['value'] None error\n\n### [2022-04-21]\n#### Version:\n##### Package:\n##### pixiu: 0.80.*.20220421\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) report add max_volume\n\n### [2022-04-20]\n#### Version:\n##### Package:\n##### pixiu: 0.79.*.20220420\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix __valid_order__ pending order error\n\n### [2022-04-18]\n#### Version:\n##### Package:\n##### pixiu: 0.78.*.20220418\n#####\n#### **Descriptions\uff1a**\n 1.api_base.py:\n 1) env_dictAdd property\n\n### [2022-04-07]\n#### Version:\n##### Package:\n##### pixiu: 0.77.*.20220407\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix calculate_return_ratio error\n 2) Add sortino_ratio\n\n### [2022-04-06]\n#### Version:\n##### Package:\n##### pixiu: 0.76.*.20220406\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Add percent_str_to_float\n 2) Add calculate_sharpe_ratio\n\n### [2022-04-03]\n#### Version:\n##### Package:\n##### pixiu: 0.75.*.20220403\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Add margin_so_so, margin_so_call checking\n\n### [2022-04-02]\n#### Version:\n##### Package:\n##### pixiu: 0.74.*.20220402\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n Fix modify_order order_log error\n\n### [2022-03-30]\n#### Version:\n##### Package:\n##### pixiu: 0.73.*.20220330\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n __remove_pending_order__ pop add None\n 2.Add set:\n env_dict[\"set\"]\n\n\n### [2022-03-10]\n#### Version:\n##### Package:\n##### pixiu: 0.72.*.20220310\n#####\n#### **Descriptions\uff1a**\n 1.ts_order_buylimit.py,ts_order_buystop.py,ts_order_selllimit.py,ts_order_sellstop.py:\n Add check order.status\n 2.api.py:\n Add GetSettings\n\n### [2022-03-09]\n#### Version:\n##### Package:\n##### pixiu: 0.71.*.20220309\n#####\n#### **Descriptions\uff1a**\n 1.defines.py:\n Add OrderStatus\n 2.order.py:\n Add status\n\n### [2022-03-05]\n#### Version:\n##### Package:\n##### pixiu: 0.70.*.20220305\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) __process_order__: Add parameters: ask, last_ask, bid, last_bid\n 2) __calculate_profit__: Update calculation m\n 3) __valid_order__: Add parameters: ask, bid\n\n### [2022-03-04]\n#### Version:\n##### Package:\n##### pixiu: 0.69.*.20220304\n#####\n#### **Descriptions\uff1a**\n 1.Add PositionType\n 2.Fix __valid_order__ pending order error\n 3.Fix __close_order__ close_time error\n\n### [2022-03-02]\n#### Version:\n##### Package:\n##### pixiu: 0.68.*.20220301\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py: Add volume_precision\n\n### [2022-03-01]\n#### Version:\n##### Package:\n##### pixiu: 0.67.*.20220301\n#####\n#### **Descriptions\uff1a**\n 1.fix __remove_order__ pop bug\n\n### [2022-02-26]\n#### Version:\n##### Package:\n##### pixiu: 0.66.*.20220226\n#####\n#### **Descriptions\uff1a**\n 1.Add is_dirty method to order\n 2.API: add RunMode, CloseMultiOrders\n 3.Defines: add RunModeValue\n\n### [2022-02-24]\n#### Version:\n##### Package:\n##### pixiu: 0.65.*.20220224\n#####\n#### **Descriptions\uff1a**\n 1.Change error name: EID_EAT_MARGIN_CALL -> EID_EAT_NOT_ENOUGH_MONEY\n\n### [2022-02-22]\n#### Version:\n##### Package:\n##### pixiu: 0.64.*.20220222\n#####\n#### **Descriptions\uff1a**\n 1.Add tags in order data \n\n### [2022-02-11]\n#### Version:\n##### Package:\n##### pixiu: 0.63.*.20220211\n#####\n#### **Descriptions\uff1a**\n 1.Add new testing 'test_ea_tester_func_load_lib'\n\n### [2022-02-10]\n#### Version:\n##### Package:\n##### pixiu: 0.62.*.20220210\n#####\n#### **Descriptions\uff1a**\n 1.Add library function \n ###[lib|library]=[\"PriceAction==0.1.0\"]\n 2.ea_base.py:\n 1)Add method parse_script\n \n\n\n### [2022-02-09]\n#### Version:\n##### Package:\n##### pixiu: 0.61.*.20220209\n#####\n#### **Descriptions\uff1a**\n 1.Remove OrderScope, using DataScope\n\n### [2021-12-14]\n#### Version:\n##### Package:\n##### pixiu: 0.60.*.20211114\n#####\n#### **Descriptions\uff1a**\n 1.EA script support timezone\n 2.ts_base: Add test_timezone\n\n### [2021-12-11]\n#### Version:\n##### Package:\n##### pixiu: 0.59.*.20211111\n#####\n#### **Descriptions\uff1a**\n 1.Support auto loading script from tag\n pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 -s ../Test/Test_V2.11.18-3x.py -p report -t 2.11.18-3x -l ea2_7_211209.json\n or\n pixiu -c pixiu.json -n testAUDUSD_TP_Demo1 -s ../Test -p report -t 2.11.18-3x -l ea2_7_211209.json\n\n\n### [2021-11-26]\n#### Version:K\n##### Package:\n##### pixiu: 0.58.*.20211126\n#####\n#### **Descriptions\uff1a**\n 1.Update README.md/README.zh.md\n 2.ea_tester.py:\n Modify notify output format\n\n### [2021-11-25]\n#### Version:\n##### Package:\n##### pixiu: 0.57.*.20211125\n#####\n#### **Descriptions\uff1a**\n 1.Update README.md/README.zh.md\n 2.ea_tester.py:\n Modify notify output format\n\n\n### [2021-11-24]\n#### Version:\n##### Package:\n##### pixiu: 0.56.*.20211124\n#####\n#### **Descriptions\uff1a**\n 1.api.py, tester_api_v1.py:\n Add Notify\n\n\n### [2021-11-16]\n#### Version:\n##### Package:\n##### pixiu: 0.55.*.20211116\n#####\n#### **Descriptions\uff1a**\n 1.Fix setup.py requires. \n\n### [2021-11-15]\n#### Version:\n##### Package:\n##### pixiu: 0.54.0.20211115\n#####\n#### **Descriptions\uff1a**\n 1.api.py, tester_api_v1.py:\n Add DeleteData, LoadData, SaveData\n Buy/Sell/ModifyOrder/CloseOrder add argument tags \n 2.tests:\n ts_base.py add data test\n ts_order_market.py add tags \n 3.api_base.py:\n Add uuid, hashlib \n\n### [2021-11-14]\n#### Version:\n##### Package:\n##### pixiu: 0.53.0.20211114\n#####\n#### **Descriptions\uff1a**\n 1.api.py, tester_api_v1.py:\n Ask, Bid, Time, Volume, Open, Close, Low, High add symbol\n 2.order.py:\n Add from_uid, to_uid\uff0c group_uid, tags\n\n### [2021-11-13]\n#### Version:\n##### Package:\n##### pixiu: 0.52.0.20211113\n#####\n#### **Descriptions\uff1a**\n 1.Add arguments : \n --compare-wit-tag/-r, --tag/-t, --datafile/-l\n sample:\n 1) \n 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\n 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\n 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\n \n 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\n +----+--------------------------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+--------------------+\n | | | testAUDUSD_TP_Demo1 | testGBPUSD_TP_Demo1 | testNZDUSD_TP_Demo1 | testEURUSD_TP_Demo1 | testUSDCHF_TP_Demo1 | testUSDJPY_TP_Demo1 | testUSDCAD_TP_Demo1 | Total/Avg |\n +----+--------------------------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+--------------------+\n | 1 | Init Balance(2.10.0) | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 35000.0 / 5000.0 |\n | 1 | Init Balance(2.10.1) | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 35000.0 / 5000.0 |\n | 1 | Init Balance(2.10.2) | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 5000.0 | 35000.0 / 5000.0 |\n ...\n | 7 | Balance(2.10.0) | 4988.31 | 5064.61 | 5041.77 | 5071.6 | 4994.96 | 4996.97 | 4996.94 | 35155.16 / 5022.17 |\n | 7 | Balance(2.10.1) | 5003.42 \u2191 | 5061.26 \u2193 | 5000.58 \u2193 | 4965.65 \u2193 | 5009.12 \u2191 | 5033.44 \u2191 | 4931.17 \u2193 | 35004.64 / 5000.66 |\n | 7 | Balance(2.10.2) | 4981.59 \u2193 | 5076.74 \u2191 | 5000.58 \u2193 | 4985.02 \u2193 | 5023.02 \u2191 | 5029.35 \u2191 | 4965.34 \u2193 | 35061.64 / 5008.81 |\n | 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 |\n | 8 | Total Net Profit(2.10.1) | 3.42 \u2191 | 61.26 \u2193 | 0.58 \u2193 | -34.35 \u2193 | 9.14 \u2191 | 33.44 \u2191 | -68.84 \u2193 | 4.65 / 0.66 |\n | 8 | Total Net Profit(2.10.2) | -18.41 \u2193 | 76.74 \u2191 | 0.58 \u2193 | -14.98 \u2193 | 23.04 \u2191 | 29.35 \u2191 | -34.68 \u2193 | 61.64 / 8.81 |\n | 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 % |\n | 9 | Total Net Profit Rate(2.10.1) | 0.07 % \u2191 | 1.23 % \u2193 | 0.01 % \u2193 | -0.69 % \u2193 | 0.18 % \u2191 | 0.67 % \u2191 | -1.38 % \u2193 | 0.09 % / 0.01 % |\n | 9 | Total Net Profit Rate(2.10.2) | -0.37 % \u2193 | 1.53 % \u2191 | 0.01 % \u2193 | -0.3 % \u2193 | 0.46 % \u2191 | 0.59 % \u2191 | -0.69 % \u2193 | 1.23 % / 0.18 % |\n ...\n\n pixiu -c pixiu.json -n testUSDCAD_TP_Demo1 -t 2.10.0 -r 2.10.1 2.10.2 -l ea2_7.json\n +----+--------------------------------------+---------------------+-------------------+\n | | | testUSDCAD_TP_Demo1 | Total/Avg |\n +----+--------------------------------------+---------------------+-------------------+\n | 1 | Init Balance(2.10.0) | 5000.0 | 5000.0 / 5000.0 |\n | 1 | Init Balance(2.10.1) | 5000.0 | 5000.0 / 5000.0 |\n | 1 | Init Balance(2.10.2) | 5000.0 | 5000.0 / 5000.0 |\n ...\n | 7 | Balance(2.10.0) | 4996.94 | 4996.94 / 4996.94 |\n | 7 | Balance(2.10.1) | 4931.17 \u2193 | 4931.17 / 4931.17 |\n | 7 | Balance(2.10.2) | 4965.34 \u2193 | 4965.34 / 4965.34 |\n | 8 | Total Net Profit(2.10.0) | -3.05 | -3.05 / -3.05 |\n | 8 | Total Net Profit(2.10.1) | -68.84 \u2193 | -68.84 / -68.84 |\n | 8 | Total Net Profit(2.10.2) | -34.68 \u2193 | -34.68 / -34.68 |\n | 9 | Total Net Profit Rate(2.10.0) | -0.06 % | -0.06 % / -0.06 % |\n | 9 | Total Net Profit Rate(2.10.1) | -1.38 % \u2193 | -1.38 % / -1.38 % |\n | 9 | Total Net Profit Rate(2.10.2) | -0.69 % \u2193 | -0.69 % / -0.69 % |\n ...\n\n\n\n\n\n### [2021-11-11]\n#### Version:\n##### Package:\n##### pixiu: 0.51.0.20211111\n#####\n#### **Descriptions\uff1a**\n 1.api_base:\n Add build-in function: max, min, all, any, ascii, bin, chr, divmod, enumerate, filter, format, hex, next, oct, ord, pow, reversed, sorted, sum\n 2.main.py:\n Add argument: multiprocessing\n\n### [2021-10-26]\n#### Version:\n##### Package:\n##### pixiu: 0.50.0.20211026\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix report currency bug\n\n### [2021-10-24]\n#### Version:\n##### Package:\n##### pixiu: 0.49.0.20211024\n#####\n#### **Descriptions\uff1a**\n 1.Using process pool\n\n### [2021-10-23]\n#### Version:\n##### Package:\n##### pixiu: 0.48.0.20211023\n#####\n#### **Descriptions\uff1a**\n 1.Add support multiple test names:\n 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 ...\n\n\n### [2021-10-19]\n#### Version:\n##### Package:\n##### pixiu: 0.47.0.20211019\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix report total_net_profit_rate error.\n 2.pxtester.py:\n 1) parse_test_config: Add custom account\n\n### [2021-10-18]\n#### Version:\n##### Package:\n##### pixiu: 0.46.0.20211018\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix modify_order bug, if take_profit or stop_loss is None\n\n### [2021-10-16]\n#### Version:\n##### Package:\n##### pixiu: 0.45.0.20211016\n#####\n#### **Descriptions\uff1a**\n 1.pxtester.py:\n 1) Report add win rate\n\n### [2021-10-15]\n#### Version:\n##### Package:\n##### pixiu: 0.44.0.20211015\n#####\n#### **Descriptions\uff1a**\n 1.pxtester.py:\n 1) Add argument: print_log_type = account|order|ea|report\n\n### [2021-10-14]\n#### Version:\n##### Package:\n##### pixiu: 0.43.0.20211014\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) Fix bugs: __process_order__, close_all_orders call close_order error\n 2) Fix bugs: max_drawdown calculation\n 2.pxtester.py:\n 1) on_end_execute: report output format\n\n### [2021-08-25]\n#### Version:\n##### Package:\n##### pixiu: 0.42.0.20210825\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1) __add_market_order__:\n new_order['comment'] = f\"cuid#{new_order['uid']}|\" \n to\n new_order['comment'] = f\"uid#{new_order['uid']}|\"\n\n### [2021-08-06]\n#### Version:\n##### Package:\n##### pixiu: 0.41.0.20210806\n#####\n#### **Descriptions\uff1a**\n 1.API 1 \n 1) Add Plot \n\n### [2021-08-04]\n#### Version:\n##### Package:\n##### pixiu: 0.40.0.20210804\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1).Change plot parameters to plot(chart_name, {series_name1: data, series_name2: data, ...})\n\n### [2021-07-20]\n#### Version:\n##### Package:\n##### pixiu: 0.39.0.20210720\n#####\n#### **Descriptions\uff1a**\n 1.ea_tester.py:\n 1).Add plot \n\n### [2021-07-16]\n#### Version:\n##### Package:\n##### pixiu: 0.38.0.20210716\n#####\n#### **Descriptions\uff1a**\n 1.Update API:\n 1) GetOpenedOrderUIDs, GetPendingOrderUIDs, GetClosedOrderUIDs\n Add parameter: scope\n\n### [2021-07-08]\n#### Version:\n##### Package:\n##### pixiu: 0.37.0.20210708\n#####\n#### **Descriptions\uff1a**\n 1.fix write_log bugs: parameters count\n\n\n### [2021-06-07]\n#### Version:\n##### Package:\n##### pixiu: 0.36.2.20210607\n#####\n#### **Descriptions\uff1a**\n 1.fix dependencies bugs\n remove oeoeweb library\n add pymongo library\n 2.fix sample.py, sample2.py errors.\n 3.API add AcquireLock, ReleaseLock \n\n \n### [2021-06-04]\n#### Version:\n##### Package:\n##### pixiu: 0.35.0.20210604\n#####\n#### **Descriptions\uff1a**\n 1.Modify API:\n 1) \n def CloseOrder(self, uid, price, volume: float, slippage=None, arrow_color=None) -> (ErrorID, OrderResult)\n ->\n def CloseOrder(self, uid, volume=None, price=None, slippage=None, arrow_color=None) -> (ErrorID, OrderResult)\n 2.fix:\n __valid_order__: EID_EAT_INVALID_ORDER_CLOSE_PRICE \n 3.Add:\n __order_close_price__\n\n\n### [2021-06-03]\n#### Version:\n##### Package:\n##### pixiu: 0.34.0.20210603\n#####\n#### **Descriptions\uff1a**\n 1.fix bugs GetSymbolData('*') \n 2. \n self.orders['ds'] -> order['__ds__']\n self.account_info['ds'] -> self.account_info['__ds__']\n 3.Add build-in :\n datetime, timedelta, random\n\n### [2021-06-01]\n#### Version:\n##### Package:\n##### pixiu: 0.33.0.20210601\n#####\n#### **Descriptions\uff1a**\n 1.add APIs:\n WaitCommand\n 2.modify APIs:\n Buy, Sell, CloseOrder, ModifyOrder return order_uid -> OrderResult\n\n### [2021-05-31]\n#### Version:\n##### Package:\n##### pixiu: 0.32.0.20210531\n#####\n#### **Descriptions\uff1a**\n 1.fix EATesterPrintCollector._call_print write_log bug\n\n### [2021-05-30]\n#### Version:\n##### Package:\n##### pixiu: 0.31.0.20210530\n#####\n#### **Descriptions\uff1a**\n 1. get_url_data add headers\n\n### [2021-05-29]\n#### Version:\n##### Package:\n##### pixiu: 0.30.0.20210529\n#####\n#### **Descriptions\uff1a**\n 1.Add output\n\n\n### [2021-05-28]\n#### Version:\n##### Package:\n##### pixiu: 0.29.0.20210528\n#####\n#### **Descriptions\uff1a**\n 1.Struct project directories\n 2.Complete README.txt\n\n\n### [2021-05-27]\n#### Version:\n##### Package:\n##### pixiu: 0.28.0.20210527\n#####\n#### **Descriptions\uff1a**\n 1.Add load channel\n\n\n### [2021-05-26]\n#### Version:\n##### Package:\n##### pixiu: 0.27.0.20210526\n#####\n#### **Descriptions\uff1a**\n 1.Add PXTester, main\n\n\n### [2021-05-24]\n#### Version:\n##### Package:\n##### pixiu: 0.26.0.20210524\n#####\n#### **Descriptions\uff1a**\n 1. api add help doc string\n\n\n### [2021-05-22]\n#### Version:\n##### Package:\n##### pixiu: 0.25.0.20210522\n#####\n#### **Descriptions\uff1a**\n 1.add language\n 2.fix sl/tp error:\n ds[((ds['sl'] > 0) & (ds['sl_p'] <= 0)) | ((ds['tp'] > 0) & (ds['tp_p'] >= 0))]\n 3.api:\n Dict - > UIDs\n def GetOpenedOrderUIDs(self, symbol: str = None)\n def GetPendingOrderUIDs(self, symbol: str = None)\n def GetClosedOrderUIDs(self, symbol: str = None)\n\n\n### [2021-05-19]\n#### Version:\n##### Package:\n##### pixiu: 0.24.0.20210519\n#####\n#### **Descriptions\uff1a**\n 1.add test_pixiu set_test_result\n\n### [2021-05-18]\n#### Version:\n##### Package:\n##### pixiu: 0.23.0.20210518\n#####\n#### **Descriptions\uff1a**\n\n### [2021-05-17]\n#### Version:\n##### Package:\n##### pixiu: 0.22.0.20210517\n#####\n#### **Descriptions\uff1a**\n 1.SymbolIndicator, SymbolPrice, SymbolTime, SymbolData arguments.\n\n\n### [2021-05-15]\n#### Version:\n##### Package:\n##### pixiu: 0.21.0.20210515\n#####\n#### **Descriptions\uff1a**\n\n\n### [2021-05-13]\n#### Version:\n##### Package:\n##### pixiu: 0.20.0.20210513\n#####\n#### **Descriptions\uff1a**\n\n\n\n### [2021-05-11]\n#### Version:\n##### Package:\n##### pixiu: 0.19.0.20210511\n#####\n#### **Descriptions\uff1a**\n 1.fix ea_tester some bugs\n\n\n### [2021-05-10]\n#### Version:\n##### Package:\n##### pixiu: 0.18.0.20210510\n#####\n#### **Descriptions\uff1a**\n\n### [2021-05-09]\n#### Version:\n##### Package:\n##### pixiu: 0.17.0.20210509\n#####\n#### **Descriptions\uff1a**\n 1. Buy, Sell, ModifyOrder remove arguments comment\n\n\n### [2021-05-08]\n#### Version:\n##### Package:\n##### pixiu: 0.16.0.20210508\n#####\n#### **Descriptions\uff1a**\n 1.\n\n### [2021-05-07]\n#### Version:\n##### Package:\n##### pixiu: 0.15.0.20210507\n#####\n#### **Descriptions\uff1a**\n 1. def GetSymbolData(self, symbol: str, timeframe: str, count: int)\n\n\n### [2021-05-06]\n#### Version:\n##### Package:\n##### pixiu: 0.14.0.20210506\n#####\n#### **Descriptions\uff1a**\n 1. some fixs\n\n\n### [2021-05-01]\n#### Version:\n##### Package:\n##### pixiu: 0.13.0.20210501\n#####\n#### **Descriptions\uff1a**\n 1.Add test open, modify, close in the EAT testing.\n\n### [2021-04-30]\n#### Version:\n##### Package:\n##### pixiu: 0.12.0.20210430\n#####\n#### **Descriptions\uff1a**\n 1.Finish EAT's 7 tests.\n\n### [2021-04-29]\n#### Version:\n##### Package:\n##### pixiu: 0.11.0.20210429\n#####\n#### **Descriptions\uff1a**\n 1.Add Account, Symbol Classes\n 2.Add ts_order, ts_base\n\n\n### [2021-04-28]\n#### Version:\n##### Package:\n##### pixiu: 0.10.0.20210428\n#####\n#### **Descriptions\uff1a**\n 1.Add some methods\n\n\n### [2021-04-27]\n#### Version:\n##### Package:\n##### pixiu: 0.9.0.20210427\n#####\n#### **Descriptions\uff1a**\n\n### [2021-04-26]\n#### Version:\n##### Package:\n##### pixiu: 0.8.0.20210426\n#####\n#### **Descriptions\uff1a**\n 1. Add test_ea_tester_func_indicators\n\n",
"bugtrack_url": null,
"license": "",
"summary": "PiXiu - A trading backtesting tool similar to MT4/MT5",
"version": "0.109.0",
"project_urls": {
"Bug Tracker": "https://github.com/tradepython/pixiu/issues",
"Homepage": "https://github.com/tradepython/pixiu"
},
"split_keywords": [
"trading",
"backtest",
"forex",
"stocks",
"mt4",
"mt5",
"metatrade"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9ebc1f61b3b0aeb088fc4e6b0cc828348cb41362fda129433e8912cbcf3c716a",
"md5": "78007b8e7b01e2e9b65861e67c504670",
"sha256": "510f1fea2e2d43d01adc337fe0c17636f134f681c53c320312052d73b35f8cc4"
},
"downloads": -1,
"filename": "pixiu-0.109.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "78007b8e7b01e2e9b65861e67c504670",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 68724,
"upload_time": "2023-12-07T08:41:56",
"upload_time_iso_8601": "2023-12-07T08:41:56.087537Z",
"url": "https://files.pythonhosted.org/packages/9e/bc/1f61b3b0aeb088fc4e6b0cc828348cb41362fda129433e8912cbcf3c716a/pixiu-0.109.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a311ad1696d3d07f378145fead1df11be5c9c631e535688666d29b277e7e8fa8",
"md5": "c11ceddf711a0ddaec273145e28cdf09",
"sha256": "9dff9ad9b7a9c6126b2f7e136358c3d3120836b67dfac240ac22b3b492f7544c"
},
"downloads": -1,
"filename": "pixiu-0.109.0.tar.gz",
"has_sig": false,
"md5_digest": "c11ceddf711a0ddaec273145e28cdf09",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 715262,
"upload_time": "2023-12-07T08:42:06",
"upload_time_iso_8601": "2023-12-07T08:42:06.020988Z",
"url": "https://files.pythonhosted.org/packages/a3/11/ad1696d3d07f378145fead1df11be5c9c631e535688666d29b277e7e8fa8/pixiu-0.109.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-07 08:42:06",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tradepython",
"github_project": "pixiu",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pixiu"
}