请先前往oanda官网注册账号获取token和ID。由于计算复杂度,目前只支持美元货币对。


In [3]:
# oandakey.py  
access_token = ''
accountID = ''

先要安装oanda api

pip install oandapyV20


In [1]:
# 多线程保存数据
from oandakey import access_token, accountID
from OnePy.builtin_module.mongodb_saver import oanda_saver
from OnePy.builtin_module.mongodb_saver.utils import MongoDBFunc
from OnePy.utils.awesome_func import run_multiprocessing, run_multithreading

# 多个
ticker_list = ['EUR_USD', 'AUD_USD', 'GBP_USD', 'USD_CAD', 'USD_JPY']
ticker_list = ['EUR_USD']

# period_list = ['M5',  'M30', 'H1', 'H2', 'H3', 'H4', 'H6', 'H12', 'D', 'W']
period_list = ['M30']


oanda_saver.multi_oanda_candles_to_mongodb(accountID, access_token,
                                           ticker_list,
                                           period_list,
                                           fromdate='2015-01-01')

MongoDBFunc().drop_duplicates(ticker_list, period_list, 'oanda')


Start!
['EUR_USD'],M30 all set!!!!!
<<EUR_USD, M30>> has been drop 76961 duplicates!

In [2]:
import OnePy as op
from OnePy.custom_module.cleaner_sma import SMA


class SmaStrategy(op.StrategyBase):

    def __init__(self):

        super().__init__()
        self.sma1 = SMA(3, 40).calculate
        self.sma2 = SMA(5, 40).calculate

    def handle_bar(self):
        for ticker in self.env.tickers:

            if self.sma1(ticker) > self.sma2(ticker):

                self.buy(100, ticker, takeprofit=15,
                         stoploss=100)
            else:
                self.sell(100, ticker)

                

START, END = "2016-01-05", "2016-02-05"
FREQUENCY = "M30"
TICKER_LIST = ["EUR_USD"]
INITIAL_CASH = 20000

SmaStrategy()

go = op.backtest.forex(TICKER_LIST, FREQUENCY, INITIAL_CASH, START, END, "oanda")

In [3]:
go.sunny(show_process=True)


正在初始化OnePy
=============== OnePy初始化成功! ===============
开始寻找OnePiece之旅~~~
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [97%]

+--------------------------------+
|Fromdate           |  2016-01-05|
|Todate             |  2016-02-05|
|Initial_Value      |   $20000.00|
|Final_Value        |   $21973.31|
|Total_Return       |      9.867%|
|Max_Drawdown       |      4.143%|
|Max_Duration       |     22 days|
|Max_Drawdown_Date  |  2016-01-31|
|Sharpe_Ratio       |        3.79|
+--------------------------------+

In [4]:
go.output.plot('EUR_USD')


/Users/chandler/anaconda/lib/python3.6/site-packages/matplotlib/figure.py:2362: UserWarning:

This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.


In [5]:
go.output.trade_log()


Out[5]:
ticker entry_date entry_price entry_type size exit_date exit_price exit_type pl_points re_pnl comm holding_period drawdown run_up returns_diff
0 EUR_USD 2016-01-05 01:00:00 1.08348 Market Buy 100 2016-01-05 02:30:00 1.08240 Market Sell -0.00108 -1.08 0.015 1:30:00 0.001791 0.000378 -0.000997
1 EUR_USD 2016-01-05 01:30:00 1.08248 Market Buy 100 2016-01-05 03:00:00 1.08170 Market Sell -0.00078 -0.78 0.015 1:30:00 0.000887 0.000924 -0.000721
2 EUR_USD 2016-01-05 04:30:00 1.08226 Market Buy 100 2016-01-05 07:30:00 1.08064 Market Sell -0.00162 -1.62 0.015 3:00:00 0.001709 0.001294 -0.001497
3 EUR_USD 2016-01-05 05:00:00 1.08296 Market Buy 100 2016-01-05 08:00:00 1.08088 Market Sell -0.00208 -2.08 0.015 3:00:00 0.002355 0.000646 -0.001921
4 EUR_USD 2016-01-05 05:30:00 1.08312 Market Buy 100 2016-01-05 08:30:00 1.08060 Market Sell -0.00252 -2.52 0.015 3:00:00 0.004210 0.000499 -0.002327
5 EUR_USD 2016-01-05 06:00:00 1.08301 Market Buy 100 2016-01-05 09:00:00 1.07898 Market Sell -0.00403 -4.03 0.015 3:00:00 0.004377 0.000600 -0.003721
6 EUR_USD 2016-01-05 06:30:00 1.08272 Market Buy 100 2016-01-05 09:30:00 1.07898 Market Sell -0.00374 -3.74 0.015 3:00:00 0.005034 0.000351 -0.003454
7 EUR_USD 2016-01-05 17:00:00 1.07355 Market Buy 100 2016-01-05 19:30:00 1.07369 Market Sell 0.00014 0.14 0.015 2:30:00 0.000214 0.001220 0.000130
8 EUR_USD 2016-01-05 17:30:00 1.07459 Market Buy 100 2016-01-05 20:00:00 1.07438 Market Sell -0.00021 -0.21 0.015 2:30:00 0.001182 0.000251 -0.000195
9 EUR_USD 2016-01-05 18:00:00 1.07439 Market Buy 100 2016-01-06 00:30:00 1.07446 Market Sell 0.00007 0.07 0.015 6:30:00 0.000996 0.001359 0.000065
10 EUR_USD 2016-01-05 18:30:00 1.07334 Market Buy 100 2016-01-06 01:00:00 1.07448 Market Sell 0.00114 1.14 0.015 6:30:00 0.000019 0.003689 0.001062
11 EUR_USD 2016-01-05 20:00:00 1.07438 Market Buy 100 2016-01-06 01:30:00 1.07674 Market Sell 0.00236 2.36 0.015 5:30:00 0.000428 0.002718 0.002197
12 EUR_USD 2016-01-05 20:30:00 1.07499 Market Buy 100 2016-01-06 03:30:00 1.07516 Market Sell 0.00017 0.17 0.015 7:00:00 0.000995 0.002149 0.000158
13 EUR_USD 2016-01-05 21:00:00 1.07503 Market Buy 100 2016-01-06 04:00:00 1.07456 Market Sell -0.00047 -0.47 0.015 7:00:00 0.001033 0.002112 -0.000437
14 EUR_USD 2016-01-05 21:30:00 1.07467 Market Buy 100 2016-01-06 04:30:00 1.07486 Market Sell 0.00019 0.19 0.015 7:00:00 0.000698 0.002447 0.000177
15 EUR_USD 2016-01-05 22:00:00 1.07516 Market Buy 100 2016-01-06 05:00:00 1.07492 Market Sell -0.00024 -0.24 0.015 7:00:00 0.001153 0.001990 -0.000223
16 EUR_USD 2016-01-05 22:30:00 1.07538 Market Buy 100 2016-01-06 05:30:00 1.07444 Market Sell -0.00094 -0.94 0.015 7:00:00 0.001358 0.001785 -0.000874
17 EUR_USD 2016-01-05 23:00:00 1.07554 Market Buy 100 2016-01-06 06:00:00 1.07444 Market Sell -0.00110 -1.10 0.015 7:00:00 0.001506 0.001636 -0.001023
18 EUR_USD 2016-01-05 23:30:00 1.07510 Market Buy 100 2016-01-06 06:30:00 1.07519 Market Sell 0.00009 0.09 0.015 7:00:00 0.001098 0.002046 0.000084
19 EUR_USD 2016-01-06 01:30:00 1.07616 Market Buy 100 2016-01-06 07:30:00 1.07342 Market Sell -0.00274 -2.74 0.015 6:00:00 0.003931 0.000836 -0.002546
20 EUR_USD 2016-01-06 02:00:00 1.07642 Market Buy 100 2016-01-06 08:00:00 1.07300 Market Sell -0.00342 -3.42 0.015 6:00:00 0.004171 0.000595 -0.003177
21 EUR_USD 2016-01-06 02:30:00 1.07641 Market Buy 100 2016-01-06 08:30:00 1.07320 Market Sell -0.00321 -3.21 0.015 6:00:00 0.004162 0.000557 -0.002982
22 EUR_USD 2016-01-06 06:30:00 1.07450 Market Buy 100 2016-01-06 09:00:00 1.07356 Market Sell -0.00094 -0.94 0.015 2:30:00 0.002392 0.000949 -0.000875
23 EUR_USD 2016-01-06 09:30:00 1.07346 Market Buy 100 2016-01-06 10:30:00 1.07328 Market Sell -0.00018 -0.18 0.015 1:00:00 0.001099 0.000307 -0.000168
24 EUR_USD 2016-01-06 10:30:00 1.07357 Market Buy 100 2016-01-06 14:00:00 1.07396 Market Sell 0.00039 0.39 0.015 3:30:00 0.001910 0.002263 0.000363
25 EUR_USD 2016-01-06 11:00:00 1.07440 Market Buy 100 2016-01-06 14:30:00 1.07392 Market Sell -0.00048 -0.48 0.015 3:30:00 0.002681 0.001489 -0.000447
26 EUR_USD 2016-01-06 11:30:00 1.07490 Market Buy 100 2016-01-06 19:00:00 1.07558 Market Sell 0.00068 0.68 0.015 7:30:00 0.003144 0.004689 0.000633
27 EUR_USD 2016-01-06 12:00:00 1.07547 Market Buy 100 2016-01-06 22:00:00 1.07807 Market Sell 0.00260 2.60 0.015 10:00:00 0.003673 0.004156 0.002418
28 EUR_USD 2016-01-06 12:30:00 1.07430 Market Buy 100 2016-01-06 22:30:00 1.07805 Market Sell 0.00375 3.75 0.015 10:00:00 0.002588 0.005250 0.003491
29 EUR_USD 2016-01-06 13:00:00 1.07430 Market Buy 100 2016-01-06 23:00:00 1.07742 Market Sell 0.00312 3.12 0.015 10:00:00 0.002588 0.005250 0.002904
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
554 EUR_USD 2016-02-03 19:30:00 1.10937 Market Buy 100 None NaN None 0.01052 10.52 0.015 1008 days, 3:14:24.250020 0.000596 0.031196 0.027563
555 EUR_USD 2016-02-03 21:00:00 1.11015 Market Buy 100 None NaN None 0.00974 9.74 0.015 1008 days, 1:44:24.252845 0.000596 0.031196 0.027563
556 EUR_USD 2016-02-03 21:30:00 1.11056 Market Buy 100 None NaN None 0.00933 9.33 0.015 1008 days, 1:14:24.255557 0.000596 0.031196 0.027563
557 EUR_USD 2016-02-04 00:00:00 1.11102 Market Buy 100 None NaN None 0.00887 8.87 0.015 1007 days, 22:44:24.258263 0.000596 0.031196 0.027563
558 EUR_USD 2016-02-04 00:30:00 1.11111 Market Buy 100 None NaN None 0.00878 8.78 0.015 1007 days, 22:14:24.261205 0.000596 0.031196 0.027563
559 EUR_USD 2016-02-04 01:00:00 1.10924 Market Buy 100 None NaN None 0.01065 10.65 0.015 1007 days, 21:44:24.264659 0.000596 0.031196 0.027563
560 EUR_USD 2016-02-04 03:30:00 1.10913 Market Buy 100 None NaN None 0.01076 10.76 0.015 1007 days, 19:14:24.267997 0.000596 0.031196 0.027563
561 EUR_USD 2016-02-04 04:00:00 1.10850 Market Buy 100 None NaN None 0.01139 11.39 0.015 1007 days, 18:44:24.271346 0.000596 0.031196 0.027563
562 EUR_USD 2016-02-04 04:30:00 1.10871 Market Buy 100 None NaN None 0.01118 11.18 0.015 1007 days, 18:14:24.274196 0.000596 0.031196 0.027563
563 EUR_USD 2016-02-04 08:00:00 1.11265 Market Buy 100 None NaN None 0.00724 7.24 0.015 1007 days, 14:44:24.276903 0.000596 0.031196 0.027563
564 EUR_USD 2016-02-04 08:30:00 1.11331 Market Buy 100 None NaN None 0.00658 6.58 0.015 1007 days, 14:14:24.279598 0.000596 0.031196 0.027563
565 EUR_USD 2016-02-04 09:00:00 1.11577 Market Buy 100 None NaN None 0.00412 4.12 0.015 1007 days, 13:44:24.282315 0.000596 0.031196 0.027563
566 EUR_USD 2016-02-04 09:30:00 1.11628 Market Buy 100 None NaN None 0.00361 3.61 0.015 1007 days, 13:14:24.285016 0.000596 0.031196 0.027563
567 EUR_USD 2016-02-04 10:00:00 1.11611 Market Buy 100 None NaN None 0.00378 3.78 0.015 1007 days, 12:44:24.287718 0.000596 0.031196 0.027563
568 EUR_USD 2016-02-04 10:30:00 1.11817 Market Buy 100 None NaN None 0.00172 1.72 0.015 1007 days, 12:14:24.290421 0.000596 0.031196 0.027563
569 EUR_USD 2016-02-04 11:00:00 1.11838 Market Buy 100 None NaN None 0.00151 1.51 0.015 1007 days, 11:44:24.293186 0.000596 0.031196 0.027563
570 EUR_USD 2016-02-04 11:30:00 1.11718 Market Buy 100 None NaN None 0.00271 2.71 0.015 1007 days, 11:14:24.295881 0.000596 0.031196 0.027563
571 EUR_USD 2016-02-04 12:00:00 1.11797 Market Buy 100 None NaN None 0.00192 1.92 0.015 1007 days, 10:44:24.298576 0.000596 0.031196 0.027563
572 EUR_USD 2016-02-04 13:00:00 1.12202 Market Buy 100 None NaN None -0.00213 -2.13 0.015 1007 days, 9:44:24.301272 0.000596 0.031196 0.027563
573 EUR_USD 2016-02-04 13:30:00 1.12026 Market Buy 100 None NaN None -0.00037 -0.37 0.015 1007 days, 9:14:24.304001 0.000596 0.031196 0.027563
574 EUR_USD 2016-02-04 14:00:00 1.11884 Market Buy 100 None NaN None 0.00105 1.05 0.015 1007 days, 8:44:24.306750 0.000596 0.031196 0.027563
575 EUR_USD 2016-02-04 17:00:00 1.11881 Market Buy 100 None NaN None 0.00108 1.08 0.015 1007 days, 5:44:24.309452 0.000596 0.031196 0.027563
576 EUR_USD 2016-02-04 17:30:00 1.11974 Market Buy 100 None NaN None 0.00015 0.15 0.015 1007 days, 5:14:24.312156 0.000596 0.031196 0.027563
577 EUR_USD 2016-02-04 18:00:00 1.12050 Market Buy 100 None NaN None -0.00061 -0.61 0.015 1007 days, 4:44:24.314855 0.000596 0.031196 0.027563
578 EUR_USD 2016-02-04 18:30:00 1.12113 Market Buy 100 None NaN None -0.00124 -1.24 0.015 1007 days, 4:14:24.317541 0.000596 0.031196 0.027563
579 EUR_USD 2016-02-04 19:00:00 1.12208 Market Buy 100 None NaN None -0.00219 -2.19 0.015 1007 days, 3:44:24.320242 0.000596 0.031196 0.027563
580 EUR_USD 2016-02-04 19:30:00 1.12120 Market Buy 100 None NaN None -0.00131 -1.31 0.015 1007 days, 3:14:24.322986 0.000596 0.031196 0.027563
581 EUR_USD 2016-02-04 20:00:00 1.12023 Market Buy 100 None NaN None -0.00034 -0.34 0.015 1007 days, 2:44:24.325686 0.000596 0.031196 0.027563
582 EUR_USD 2016-02-04 21:30:00 1.12070 Market Buy 100 None NaN None -0.00081 -0.81 0.015 1007 days, 1:14:24.328395 0.000596 0.031196 0.027563
583 EUR_USD 2016-02-04 22:00:00 1.12008 Market Buy 100 None NaN None -0.00019 -0.19 0.015 1007 days, 0:44:24.331094 0.000596 0.031196 0.027563

584 rows × 15 columns


In [ ]: