Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_TradingCompetition2022-main/models/ARIMAdeMarkLongHFT.py
5925 views
1
from models.ARIMAdeMarkLong import ARIMAdeMarkLong
2
from models.ModelChecks import ModelChecks
3
from decimal import Decimal
4
from logger.BusinessLogger import BusinessLogger
5
from logger.LoggerFactory import LoggerFactory
6
7
8
class ARIMAdeMarkLongHFT(ARIMAdeMarkLong):
9
# { Model checks name
10
_PRICE_TAKE_PROFIT = "PRICE_TAKE_PROFIT"
11
_PRICE_GR_PREV_PRICE = "PRICE_GR_PREV_PRICE"
12
# Model checks name }
13
14
def __init__(self, ticker, config):
15
super(ARIMAdeMarkLongHFT, self).__init__(ticker, config)
16
17
# DeMark Low and High level
18
self._DeMark_low = None
19
self._DeMark_high = None
20
self._arima_predict_close = None
21
22
# This model available only for LONG orders
23
self._long_available = True
24
self._short_available = False
25
26
self._take_profit_percent = Decimal(self.get_config('take_profit_percent'))
27
self._take_profit_value = None
28
29
def _generate_check(self):
30
""" Specifying all checks """
31
32
check = self._check_handler
33
# Adding check for OPEN LONG orders
34
# Check 1 (OPEN LONG) Is price falls below LOW POINT of DeMark?
35
check.add_check(ModelChecks.OPEN_LONG, self._LOW_POINT, self._is_price_low_point)
36
check.add_check(ModelChecks.OPEN_LONG, self._PRICE_GR_PREV_PRICE, self.is_last_price_gr_prev_price)
37
38
# Adding check for CLOSE LONG orders
39
# Check 1 (CLOSE LONG) Is price up to take profit?
40
check.add_check(ModelChecks.CLOSE_LONG, self._PRICE_TAKE_PROFIT, self._is_price_take_profit)
41
42
def _is_price_take_profit(self):
43
""" Check price is eq take profit or arima predict close"""
44
if self._avg_price == 0:
45
return False
46
delta = self._avg_price * self._take_profit_percent / 100
47
self._take_profit_value = self._avg_price + delta
48
if self.last_price > self._take_profit_value or self.last_price > self._arima_predict_close:
49
# Log data
50
LoggerFactory.get_business_logger_instance().add_event(BusinessLogger.TAKE_PROFIT,
51
self._ticker, self.last_price)
52
return True
53
else:
54
return False
55
56
def is_last_price_gr_prev_price(self):
57
""" Check is last price grader then prev price"""
58
if self.last_price is None or self._prev_price is None:
59
return False
60
if self.last_price > self._prev_price:
61
return True
62
else:
63
return False
64
65