-
Notifications
You must be signed in to change notification settings - Fork 26
/
pivothl_backtest.py
47 lines (34 loc) · 1.43 KB
/
pivothl_backtest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -*- coding: utf-8 -*-
import pandas as pd
from backtest import Backtest, BacktestReport, BacktestIteration
from hyperopt import hp
from indicator import *
def pivot_backtest(ohlcv, leftbars, rightbars):
ignore = int(leftbars + rightbars)
# ピボットハイ&ロー
stop_buy_entry = pivothigh(ohlcv.high, leftbars, rightbars).ffill()
stop_sell_entry = pivotlow(ohlcv.low, leftbars, rightbars).ffill()
stop_buy_exit = stop_sell_entry
stop_sell_exit = stop_buy_entry
stop_buy_entry[:ignore] = 0
stop_buy_exit[:ignore] = 0
stop_sell_entry[:ignore] = 0
stop_sell_exit[:ignore] = 0
# バックテスト実施
# entry_exit = pd.DataFrame({'close':ohlcv.close, 'high':ohlcv.high, 'low':ohlcv.low,
# 'stop_sell_entry':stop_sell_entry, 'short_entry':short_entry, 'stop_sell_exit':stop_sell_exit, 'short_exit':short_exit})
# entry_exit.to_csv('entry_exit.csv')
return Backtest(**locals())
if __name__ == '__main__':
# テストデータ読み込み
ohlcv = pd.read_csv('csv/bitmex_2018_1h.csv', index_col='timestamp', parse_dates=True)
default_parameters = {
'ohlcv': ohlcv,
'leftbars':14,
'rightbars':19,
}
hyperopt_parameters = {
'leftbars': hp.quniform('leftbars', 1, 300, 1),
'rightbars': hp.quniform('rightbars', 1, 300, 1),
}
best, report = BacktestIteration(pivot_backtest, default_parameters, hyperopt_parameters, 300)