|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +from flyerbots.strategy import Strategy |
| 3 | +from flyerbots.indicator import * |
| 4 | +from datetime import datetime, time |
| 5 | + |
| 6 | +no_trade_time_range = [ |
| 7 | + (time(18,55), time(19, 55)),# JST 03:55-04:55 Bitflyerメンテナンスタイム |
| 8 | +] |
| 9 | + |
| 10 | +class inago: |
| 11 | + |
| 12 | + def __init__(self): |
| 13 | + pass |
| 14 | + |
| 15 | + def loop(self, ticker, ohlcv, strategy, **other): |
| 16 | + if len(ohlcv.close)<4: |
| 17 | + return |
| 18 | + |
| 19 | + # メンテナンス時刻 |
| 20 | + t = datetime.utcnow().time() |
| 21 | + coffee_break = False |
| 22 | + for s, e in no_trade_time_range: |
| 23 | + if t >= s and t <= e: |
| 24 | + logger.info('Coffee break ...') |
| 25 | + coffee_break = True |
| 26 | + break |
| 27 | + |
| 28 | + # エントリー |
| 29 | + if not coffee_break: |
| 30 | + # イナゴ指標 |
| 31 | + buychg = ohlcv.high[-1]-ohlcv.high[-4] |
| 32 | + sellchg = ohlcv.low[-1]-ohlcv.low[-4] |
| 33 | + |
| 34 | + # quadratic1 |
| 35 | + maxsize = 0.05 |
| 36 | + delta_pos = strategy.position_size |
| 37 | + if delta_pos>=maxsize: |
| 38 | + buysize = 0 |
| 39 | + elif delta_pos<-maxsize: |
| 40 | + buysize = maxsize |
| 41 | + else: |
| 42 | + buysize = (-maxsize/4)*(((delta_pos+maxsize)/maxsize)**2)+maxsize |
| 43 | + if delta_pos<=-maxsize: |
| 44 | + sellsize = 0 |
| 45 | + elif delta_pos>maxsize: |
| 46 | + sellsize = maxsize |
| 47 | + else: |
| 48 | + sellsize = (-maxsize/4)*(((-delta_pos+maxsize)/maxsize)**2)+maxsize |
| 49 | + |
| 50 | + buy = ticker.best_bid |
| 51 | + sell = ticker.best_ask |
| 52 | + if buysize>=0.01 and buychg>500: |
| 53 | + strategy.order('L', 'buy', qty=buysize, limit=buy) |
| 54 | + if sellsize>=0.01 and sellchg<-500: |
| 55 | + strategy.order('S', 'sell', qty=sellsize, limit=sell) |
| 56 | + |
| 57 | +if __name__ == "__main__": |
| 58 | + import settings |
| 59 | + import logging |
| 60 | + import logging.config |
| 61 | + |
| 62 | + logging.config.dictConfig(settings.loggingConf('inago.log')) |
| 63 | + logger = logging.getLogger("inago") |
| 64 | + |
| 65 | + strategy = Strategy(inago().loop, 5) |
| 66 | + strategy.settings.apiKey = settings.apiKey |
| 67 | + strategy.settings.secret = settings.secret |
| 68 | + strategy.settings.disable_rich_ohlcv = True |
| 69 | + strategy.risk.max_position_size = 0.1 |
| 70 | + strategy.start() |
0 commit comments