根据交易信号和数据文件,处理数据. return data['high_profits', 'low_profit', 'exit_profit', 'period', 'return', 'entry_nbar_bests', 'entry_nbar_worsts', 'exit_nbar_bests', 'exit_nbar_worsts', 'islong', 'entry_n', 'exit_n' ]
(tradeinfo, pricefname, n=10, intraday=False)
| 180 | |
| 181 | |
| 182 | def deal_tradeinfo(tradeinfo, pricefname, n=10, intraday=False): |
| 183 | """ 根据交易信号和数据文件,处理数据. |
| 184 | return data['high_profits', 'low_profit', 'exit_profit', 'period', 'return', |
| 185 | 'entry_nbar_bests', 'entry_nbar_worsts', 'exit_nbar_bests', |
| 186 | 'exit_nbar_worsts', 'islong', 'entry_n', 'exit_n' |
| 187 | ] |
| 188 | """ |
| 189 | PRICE = 'close' |
| 190 | data = pd.DataFrame(tradeinfo.ix[:,0:2]) |
| 191 | price_data = csv2frame(pricefname) |
| 192 | high_profits = [] |
| 193 | low_profits = [] |
| 194 | exit_profits = [] |
| 195 | |
| 196 | periods = [] |
| 197 | entry_nbar_bests = [] |
| 198 | entry_nbar_worsts = [] |
| 199 | exit_nbar_bests = [] |
| 200 | exit_nbar_worsts = [] |
| 201 | islongs = [] |
| 202 | returns = [] |
| 203 | entry_Nlist = [] |
| 204 | exit_Nlist = [] |
| 205 | for i in range(len(data)): |
| 206 | startt = tradeinfo.index[i] |
| 207 | startpos = price_data.index.searchsorted(startt) |
| 208 | endt = tradeinfo.ix[i, ['exit_datetime']][0] |
| 209 | endpos = price_data.index.searchsorted(endt) |
| 210 | tradingdf = price_data.truncate(before=tradeinfo.index[i], after = endt) |
| 211 | |
| 212 | onetrade = tradeinfo.ix[i, :] |
| 213 | # high/low |
| 214 | if len(tradingdf) > 1: |
| 215 | hp = tradingdf.ix[:-1, :][PRICE].max() |
| 216 | lp = tradingdf.ix[:-1, :][PRICE].min() |
| 217 | t = tradingdf.ix[:-1, :][PRICE].tolist() |
| 218 | t.append(float(onetrade['exit_price'])) |
| 219 | returns.append(max_return(t, onetrade['islong'])) |
| 220 | else: |
| 221 | hp = tradingdf.ix[:, :][PRICE].max() |
| 222 | lp = tradingdf.ix[:, :][PRICE].min() |
| 223 | if onetrade['islong']: |
| 224 | returns.append(max(onetrade['entry_price']-onetrade['exit_price'], 0)) |
| 225 | else: |
| 226 | returns.append(max(onetrade['exit_price']-onetrade['entry_price'], 0)) |
| 227 | hp = onetrade['exit_price'] if onetrade['exit_price'] > hp else hp |
| 228 | hp = onetrade['entry_price'] if onetrade['entry_price'] > hp else hp |
| 229 | lp = onetrade['exit_price'] if onetrade['exit_price'] < lp else lp |
| 230 | lp = onetrade['entry_price'] if onetrade['entry_price'] < lp else lp |
| 231 | hp = hp - onetrade['entry_price'] |
| 232 | lp = lp - onetrade['entry_price'] |
| 233 | high_profits.append(hp if onetrade['islong'] else 0-hp) |
| 234 | low_profits.append(lp if onetrade['islong'] else 0-lp) |
| 235 | # exit |
| 236 | ep = onetrade['exit_price'] - onetrade['entry_price'] |
| 237 | exit_profits.append(ep if onetrade['islong'] else 0-ep) |
| 238 | # period |
| 239 | periods.append(endpos - startpos + 1) |
no test coverage detected