Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Overriding signal_features #6

Closed
dancydancy opened this issue Dec 2, 2021 · 5 comments
Closed

Overriding signal_features #6

dancydancy opened this issue Dec 2, 2021 · 5 comments

Comments

@dancydancy
Copy link

Hi Amin,

On gym-anytradnig it's possible to override _process_data and add your own custom indicators (from Finta etc).

Is it possible to do the same with mtsim - or how should I be thinking about this? Currently I can't even see how to add and format my own training data.

@AminHP
Copy link
Owner

AminHP commented Dec 2, 2021

Hi @dancydancy,

You can override this function in order to add your own indicators.

You can download data from MetaTrader using the download_data method of MtSimulator. Here is an example code. In case you want to put your own data frames into the simulator instead of downloading from MetaTrader, it might be helpful to read the source code of the download_data.

@dancydancy
Copy link
Author

Thank-you :)

@He1nr1chK
Copy link

Hi @AminHP, could you provide an example of how to override the _process_data function with a simple indicator like MACD if you get a chance. I am having a lot of trouble figuring out how to add the data produced by the indicator to the signal_features being returned. Thanks in advance

@AminHP
Copy link
Owner

AminHP commented Jan 13, 2023

@He1nr1chK

You should also override _get_prices to store OHLC data.

    def _get_prices(self, keys: List[str]=['Open', 'High', 'Low', 'Close']) -> Dict[str, np.ndarray]:
        prices = {}

        for symbol in self.trading_symbols:
            get_price_at = lambda time: \
                self.original_simulator.price_at(symbol, time)[keys]

            if self.multiprocessing_pool is None:
                p = list(map(get_price_at, self.time_points))
            else:
                p = self.multiprocessing_pool.map(get_price_at, self.time_points)

            prices[symbol] = np.array(p)

        return prices


    def _process_data(self) -> np.ndarray:
        data = self.prices

        macd_features = []
        for pair, ohlc_data in data.items():
            open = ohlc_data[:, 0]
            high = ohlc_data[:, 1]
            low = ohlc_data[:, 2]
            close = ohlc_data[:, 3]
            pair_macd = calculate_macd_from_ohlc(open, high, low, close)
            macd_features.append(pair_macd)

        signal_features = np.column_stack(macd_features)
        return signal_features

@He1nr1chK
Copy link

He1nr1chK commented Feb 25, 2023

When I do exactly this I get the error: AttributeError: 'NoneType' object has no attribute 'shape'. Any ideas? Sorry if this is a stupid question, my python knowledge is rather limited

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants