Path: blob/master/ invest-robot-contest_TradingCompetition2022-main/models/ARIMAdeMarkLongHFT.py
5925 views
from models.ARIMAdeMarkLong import ARIMAdeMarkLong1from models.ModelChecks import ModelChecks2from decimal import Decimal3from logger.BusinessLogger import BusinessLogger4from logger.LoggerFactory import LoggerFactory567class ARIMAdeMarkLongHFT(ARIMAdeMarkLong):8# { Model checks name9_PRICE_TAKE_PROFIT = "PRICE_TAKE_PROFIT"10_PRICE_GR_PREV_PRICE = "PRICE_GR_PREV_PRICE"11# Model checks name }1213def __init__(self, ticker, config):14super(ARIMAdeMarkLongHFT, self).__init__(ticker, config)1516# DeMark Low and High level17self._DeMark_low = None18self._DeMark_high = None19self._arima_predict_close = None2021# This model available only for LONG orders22self._long_available = True23self._short_available = False2425self._take_profit_percent = Decimal(self.get_config('take_profit_percent'))26self._take_profit_value = None2728def _generate_check(self):29""" Specifying all checks """3031check = self._check_handler32# Adding check for OPEN LONG orders33# Check 1 (OPEN LONG) Is price falls below LOW POINT of DeMark?34check.add_check(ModelChecks.OPEN_LONG, self._LOW_POINT, self._is_price_low_point)35check.add_check(ModelChecks.OPEN_LONG, self._PRICE_GR_PREV_PRICE, self.is_last_price_gr_prev_price)3637# Adding check for CLOSE LONG orders38# Check 1 (CLOSE LONG) Is price up to take profit?39check.add_check(ModelChecks.CLOSE_LONG, self._PRICE_TAKE_PROFIT, self._is_price_take_profit)4041def _is_price_take_profit(self):42""" Check price is eq take profit or arima predict close"""43if self._avg_price == 0:44return False45delta = self._avg_price * self._take_profit_percent / 10046self._take_profit_value = self._avg_price + delta47if self.last_price > self._take_profit_value or self.last_price > self._arima_predict_close:48# Log data49LoggerFactory.get_business_logger_instance().add_event(BusinessLogger.TAKE_PROFIT,50self._ticker, self.last_price)51return True52else:53return False5455def is_last_price_gr_prev_price(self):56""" Check is last price grader then prev price"""57if self.last_price is None or self._prev_price is None:58return False59if self.last_price > self._prev_price:60return True61else:62return False636465