1.ea_taster.py:
1) __close_order__
Fix profit calculation error when closing partitioned volumes
1.main.py:
1) gen_report_row:
Add compare_item['value'] checking
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
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
1.ea_tester.py:
1) Add tick_test_start_index in params
2) Add test_period in pixiu config file
1.pxtester.py:
1) Add get_tick_data_from_yfinance, covert_yfinance_data_to_json
1.main.py:
1) start_mp, start_sp: results add exception
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')
1.ea_tester.py:
1) Add script_settings output
1.ea_tester.py:
1) Fix get_api missing error.
1.ea_tester.py:
1) Fix self.current_tick_index exception in execute_(self, ticket)
1.Add global API:
PX_InitScriptSettings, PX_ValidScriptSettings
Call order:
PX_InitScriptSettings -> AddChart/AddParam -> PX_ValidScriptSettings
2.Add ts_settings.py
1.Add global API:
PX_InitScriptSettings, PX_ValidScriptSettings
Call order:
PX_InitScriptSettings -> AddChart/AddParam -> PX_ValidScriptSettings
1.api.py:
Add AddChart, AddParam
1.api.py:
Add AddChart, AddParam
1.pxtester.py: 1) Replace json with json5
1.pxtester.py: 1) Fix get_data_info tzinfo error
1.api_base.py:
1) Add _safe_import
1.ea_tester.py:
1)Add execute_script
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
1.ea_tester.py:
1) Fix calculate_return_ratio return value error
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
1. Fix gen_report_row total_value bug
1.Add ea_tester_graph
support dash + plotly
1.ea_tester.py:
1) Fix calculate_returns calculation error
1.tester_api_v1.py:
1) Fix __get_indicator__ cache_name error
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)
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
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
1.ea_tester.py:
1) report add max_volume
1.ea_tester.py:
1) Fix __valid_order__ pending order error
1.api_base.py:
1) env_dictAdd property
1.ea_tester.py:
1) Fix calculate_return_ratio error
2) Add sortino_ratio
1.ea_tester.py:
1) Add percent_str_to_float
2) Add calculate_sharpe_ratio
1.ea_tester.py:
1) Add margin_so_so, margin_so_call checking
1.ea_tester.py:
Fix modify_order order_log error
1.ea_tester.py:
__remove_pending_order__ pop add None
2.Add set:
env_dict["set"]
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
1.defines.py:
Add OrderStatus
2.order.py:
Add status
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
1.Add PositionType
2.Fix __valid_order__ pending order error
3.Fix __close_order__ close_time error
1.ea_tester.py: Add volume_precision
1.fix __remove_order__ pop bug
1.Add is_dirty method to order
2.API: add RunMode, CloseMultiOrders
3.Defines: add RunModeValue
1.Change error name: EID_EAT_MARGIN_CALL -> EID_EAT_NOT_ENOUGH_MONEY
1.Add tags in order data
1.Add new testing 'test_ea_tester_func_load_lib'
1.Add library function
###[lib|library]=["PriceAction==0.1.0"]
2.ea_base.py:
1)Add method parse_script
1.Remove OrderScope, using DataScope
1.EA script support timezone
2.ts_base: Add test_timezone
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
1.Update README.md/README.zh.md
2.ea_tester.py:
Modify notify output format
1.Update README.md/README.zh.md
2.ea_tester.py:
Modify notify output format
1.api.py, tester_api_v1.py:
Add Notify
1.Fix setup.py requires.
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
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
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 % |
...
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
1.ea_tester.py:
1) Fix report currency bug
1.Using process pool
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 ...
1.ea_tester.py:
1) Fix report total_net_profit_rate error.
2.pxtester.py:
1) parse_test_config: Add custom account
1.ea_tester.py:
1) Fix modify_order bug, if take_profit or stop_loss is None
1.pxtester.py:
1) Report add win rate
1.pxtester.py:
1) Add argument: print_log_type = account|order|ea|report
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
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']}|"
1.API 1
1) Add Plot
1.ea_tester.py:
1).Change plot parameters to plot(chart_name, {series_name1: data, series_name2: data, ...})
1.ea_tester.py:
1).Add plot
1.Update API:
1) GetOpenedOrderUIDs, GetPendingOrderUIDs, GetClosedOrderUIDs
Add parameter: scope
1.fix write_log bugs: parameters count
1.fix dependencies bugs
remove oeoeweb library
add pymongo library
2.fix sample.py, sample2.py errors.
3.API add AcquireLock, ReleaseLock
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__
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
1.add APIs:
WaitCommand
2.modify APIs:
Buy, Sell, CloseOrder, ModifyOrder return order_uid -> OrderResult
1.fix EATesterPrintCollector._call_print write_log bug
1. get_url_data add headers
1.Add output
1.Struct project directories
2.Complete README.txt
1.Add load channel
1.Add PXTester, main
1. api add help doc string
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)
1.add test_pixiu set_test_result
1.SymbolIndicator, SymbolPrice, SymbolTime, SymbolData arguments.
1.fix ea_tester some bugs
1. Buy, Sell, ModifyOrder remove arguments comment
1.
1. def GetSymbolData(self, symbol: str, timeframe: str, count: int)
1. some fixs
1.Add test open, modify, close in the EAT testing.
1.Finish EAT's 7 tests.
1.Add Account, Symbol Classes
2.Add ts_order, ts_base
1.Add some methods
1. Add test_ea_tester_func_indicators