-pybottrader
- -PyBotTrader - A library to build trader bots
- -To install:
- -pip install git+https://github.com/jailop/pybottrader.git
-
-diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml new file mode 100644 index 0000000..cdb966f --- /dev/null +++ b/.github/workflows/build_test.yml @@ -0,0 +1,120 @@ +name: Build and Test + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + release: + types: [created] + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install build dependencies (Ubuntu) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y build-essential cmake + + - name: Install build dependencies (macOS) + if: runner.os == 'macOS' + run: | + brew install cmake + + - name: Install build dependencies (Windows) + if: runner.os == 'Windows' + run: | + choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + python -m pip install pytest pytest-cov + python -m pip install -e .[dev] + + - name: Run tests + run: | + pytest tests/ --cov=pybottrader --cov-report=xml + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + file: ./coverage.xml + flags: unittests + fail_ci_if_error: true + + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install cibuildwheel + run: python -m pip install cibuildwheel + + - name: Build wheels + run: python -m cibuildwheel --output-dir wheelhouse + env: + CIBW_BUILD: cp38-* cp39-* cp310-* cp311-* + CIBW_SKIP: "*-win32 *-manylinux_i686" + CIBW_TEST_REQUIRES: pytest + CIBW_TEST_COMMAND: "pytest {project}/tests" + + - uses: actions/upload-artifact@v3 + with: + path: ./wheelhouse/*.whl + name: wheels-${{ matrix.os }}-${{ matrix.python-version }} + + publish: + needs: [test, build_wheels] + runs-on: ubuntu-latest + if: github.event_name == 'release' && github.event.action == 'created' + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build twine + + - name: Download artifacts + uses: actions/download-artifact@v3 + with: + path: dist + + - name: Publish to PyPI + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} + run: | + twine upload dist/*/*.whl diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml deleted file mode 100644 index 82f8dbd..0000000 --- a/.github/workflows/python-publish.yml +++ /dev/null @@ -1,70 +0,0 @@ -# This workflow will upload a Python Package to PyPI when a release is created -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries - -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -name: Upload Python Package - -on: - release: - types: [published] - -permissions: - contents: read - -jobs: - release-build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - - name: Build release distributions - run: | - # NOTE: put your own distribution build steps here. - python -m pip install build - python -m build - - - name: Upload distributions - uses: actions/upload-artifact@v4 - with: - name: release-dists - path: dist/ - - pypi-publish: - runs-on: ubuntu-latest - needs: - - release-build - permissions: - # IMPORTANT: this permission is mandatory for trusted publishing - id-token: write - - # Dedicated environments with protections for publishing are strongly recommended. - # For more information, see: https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules - environment: - name: pypi - # OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status: - # url: https://pypi.org/p/YOURPROJECT - # - # ALTERNATIVE: if your GitHub Release name is the PyPI project version string - # ALTERNATIVE: exactly, uncomment the following line instead: - # url: https://pypi.org/project/YOURPROJECT/${{ github.event.release.name }} - - steps: - - name: Retrieve release distributions - uses: actions/download-artifact@v4 - with: - name: release-dists - path: dist/ - - - name: Publish release distributions to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 - with: - packages-dir: dist/ diff --git a/CHANGES.txt b/CHANGES.txt index b367ef0..fdacf8a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -33,3 +33,8 @@ v0.0.6 2024-12-13 `data`. It is a Python dictionary provided by data streamers. - `process` method for the `Portfolio` class now receives as the argument a `StrategySignal` object. + +v0.0.7 2024-12-21 + +- Indicators module implemented in C++ +- ATR indicator added diff --git a/README.md b/README.md index 937aeb2..a4cf245 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,6 @@ decision-making rules to generate trading signals. A basic trader module is included for testing strategies, making the library a versatile framework for algorithmic trading experimentation. -## Features - ## Example Using this library looks like: @@ -91,3 +89,20 @@ pip install pybottrader ``` Shortly, I'm going to release more documentation and more examples. + +## Installation Requirements + +### Linux +- GCC/G++ compiler +- CMake 3.15 or higher +- Python development headers (python3-dev) + +### Windows +- Visual Studio 2019 or later with C++ build tools +- CMake 3.15 or higher +- Windows SDK + +### macOS +- Xcode Command Line Tools +- CMake 3.15 or higher + diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 3d11848..0000000 --- a/docs/index.html +++ /dev/null @@ -1,7 +0,0 @@ - - -
- - - - diff --git a/docs/pybottrader.html b/docs/pybottrader.html deleted file mode 100644 index f0a0a3b..0000000 --- a/docs/pybottrader.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - -To install:
- -pip install git+https://github.com/jailop/pybottrader.git
-
-Data Streamers
-1"""Data Streamers""" - 2 - 3from typing import Union - 4import pandas as pd - 5import yfinance - 6 - 7 - 8class DataStreamer: - 9 """A data streamer abstract class""" -10 -11 def __init__(self): -12 """Init method""" -13 -14 def next(self) -> Union[dict, None]: -15 """Next method""" -16 -17 -18class YFinanceStreamer(DataStreamer): -19 """Using Yahoo Finance to retrieve data""" -20 -21 index = 0 -22 data: pd.DataFrame -23 -24 def __init__(self, symbol, *args, **kwargs): -25 super().__init__() -26 ticker = yfinance.Ticker(symbol) -27 self.data = ticker.history(*args, **kwargs) -28 self.data.rename( -29 columns={ -30 "Open": "open", -31 "Close": "close", -32 "High": "high", -33 "Low": "low", -34 "Volume": "volume", -35 }, -36 inplace=True, -37 ) -38 self.data.index.names = ["time"] -39 self.data.reset_index(inplace=True) -40 -41 def next(self) -> Union[dict, None]: -42 if self.index >= len(self.data): -43 return None -44 result = self.data.iloc[self.index].to_dict() -45 result["time"] = result["time"].to_pydatetime() -46 self.index += 1 -47 return result -48 -49 -50class CSVFileStreamer(DataStreamer): -51 """ -52 An dataframe file streamer -53 """ -54 -55 data: pd.DataFrame -56 index: int -57 -58 def __init__(self, filename: str): -59 self.index = 0 -60 self.data = pd.read_csv(filename, parse_dates=True) -61 -62 def next(self) -> Union[dict, None]: -63 if self.index >= len(self.data): -64 return None -65 result = self.data.iloc[self.index].to_dict() -66 self.index += 1 -67 return result -
9class DataStreamer: -10 """A data streamer abstract class""" -11 -12 def __init__(self): -13 """Init method""" -14 -15 def next(self) -> Union[dict, None]: -16 """Next method""" -
A data streamer abstract class
-19class YFinanceStreamer(DataStreamer): -20 """Using Yahoo Finance to retrieve data""" -21 -22 index = 0 -23 data: pd.DataFrame -24 -25 def __init__(self, symbol, *args, **kwargs): -26 super().__init__() -27 ticker = yfinance.Ticker(symbol) -28 self.data = ticker.history(*args, **kwargs) -29 self.data.rename( -30 columns={ -31 "Open": "open", -32 "Close": "close", -33 "High": "high", -34 "Low": "low", -35 "Volume": "volume", -36 }, -37 inplace=True, -38 ) -39 self.data.index.names = ["time"] -40 self.data.reset_index(inplace=True) -41 -42 def next(self) -> Union[dict, None]: -43 if self.index >= len(self.data): -44 return None -45 result = self.data.iloc[self.index].to_dict() -46 result["time"] = result["time"].to_pydatetime() -47 self.index += 1 -48 return result -
Using Yahoo Finance to retrieve data
-25 def __init__(self, symbol, *args, **kwargs): -26 super().__init__() -27 ticker = yfinance.Ticker(symbol) -28 self.data = ticker.history(*args, **kwargs) -29 self.data.rename( -30 columns={ -31 "Open": "open", -32 "Close": "close", -33 "High": "high", -34 "Low": "low", -35 "Volume": "volume", -36 }, -37 inplace=True, -38 ) -39 self.data.index.names = ["time"] -40 self.data.reset_index(inplace=True) -
Init method
-42 def next(self) -> Union[dict, None]: -43 if self.index >= len(self.data): -44 return None -45 result = self.data.iloc[self.index].to_dict() -46 result["time"] = result["time"].to_pydatetime() -47 self.index += 1 -48 return result -
Next method
-51class CSVFileStreamer(DataStreamer): -52 """ -53 An dataframe file streamer -54 """ -55 -56 data: pd.DataFrame -57 index: int -58 -59 def __init__(self, filename: str): -60 self.index = 0 -61 self.data = pd.read_csv(filename, parse_dates=True) -62 -63 def next(self) -> Union[dict, None]: -64 if self.index >= len(self.data): -65 return None -66 result = self.data.iloc[self.index].to_dict() -67 self.index += 1 -68 return result -
An dataframe file streamer
-Moving Average -Implementation adopted from: -https://github.com/jailop/trading/tree/main/indicators-c++
-1""" - 2Moving Average - 3Implementation adopted from: - 4https://github.com/jailop/trading/tree/main/indicators-c++ - 5""" - 6 - 7import numpy as np - 8from attrs import define - 9 - 10 - 11class Indicator: - 12 """ - 13 Base class to build indicators. It provides a buffer to - 14 keep the last `mem_size` values and functions to push - 15 new values and retrieve using bracket notation or the - 16 function get. - 17 - 18 All derived classes, call the __init__ method of this class - 19 and when an update ocurrs, they push the new value - 20 into the memory buffer. - 21 - 22 Because this class is intended to be used for time series, - 23 indices go backwards, being `0` the last updated value, -1 - 24 the previous one, -2 the previous of the previos one... - 25 If a value is requested with a positive index or a negative - 26 index which absolute values is greater than `mem_size`, then - 27 an NAN value is returned. - 28 """ - 29 - 30 mem_pos: int - 31 mem_data: list - 32 mem_size: int - 33 - 34 def __init__(self, mem_size=1): - 35 """ - 36 @param mem_size: The size of the memory buffer. The - 37 default value is 1. - 38 """ - 39 self.mem_data = [np.nan] * mem_size - 40 self.mem_pos = 0 - 41 self.mem_size = mem_size - 42 - 43 def __getitem__(self, key): - 44 """ - 45 @param key: 0 for the most recent update - 46 a negative number for the n-previous updates - 47 - 48 A negative number less than -mem_size returns NAN. - 49 A positive number returns NAN. - 50 """ - 51 if key > 0 or -key >= self.mem_size: - 52 return np.nan - 53 real_pos = (self.mem_pos - key) % self.mem_size - 54 return self.mem_data[real_pos] - 55 - 56 def push(self, value): - 57 """ - 58 Stores in the buffer `value` as the more recent update. - 59 In the current implementation, a ring buffer is used - 60 to save these values. - 61 - 62 @param value: The most recent update - 63 """ - 64 self.mem_pos = (self.mem_pos - 1) % self.mem_size - 65 self.mem_data[self.mem_pos] = value - 66 - 67 def get(self, key=0) -> float: - 68 """The same as `__getitem__`""" - 69 return self[key] - 70 - 71 - 72class MA(Indicator): - 73 """Moving Average""" - 74 - 75 period: int - 76 prevs: np.ndarray - 77 length: int = 0 - 78 pos: int = 0 - 79 accum: float = 0.0 - 80 - 81 def __init__(self, period: int, *args, **kwargs): - 82 """ - 83 The number of period or window size is required to initialize a MA - 84 object. - 85 """ - 86 super().__init__(*args, **kwargs) - 87 self.period = period - 88 self.prevs = np.zeros(period, dtype=float) - 89 - 90 def update(self, value: float) -> float: - 91 """Aggregate a new value into the moving average""" - 92 if self.length < self.period: - 93 self.length += 1 - 94 else: - 95 self.accum -= self.prevs[self.pos] - 96 self.prevs[self.pos] = value - 97 self.accum += value - 98 self.pos = (self.pos + 1) % self.period - 99 if self.length < self.period: -100 self.push(np.nan) -101 else: -102 self.push(self.accum / self.period) -103 return self[0] -104 -105 -106class EMA(Indicator): -107 """Exponential Moving Average""" -108 -109 period: float -110 alpha: float -111 smooth_factor: float -112 length: int = 0 -113 prev: float = 0.0 -114 -115 def __init__(self, period: int, *args, **kwargs): -116 super().__init__(*args, **kwargs) -117 alpha = 2.0 if "alpha" not in kwargs else kwargs["alpha"] -118 self.period = period -119 self.alpha = alpha -120 self.smooth_factor = alpha / (1.0 + period) -121 -122 def update(self, value: float) -> float: -123 """Aggregate a new value into the moving average""" -124 self.length += 1 -125 if self.length < self.period: -126 self.prev += value -127 elif self.length == self.period: -128 self.prev += value -129 self.prev /= self.period -130 else: -131 self.prev = (value * self.smooth_factor) + self.prev * ( -132 1.0 - self.smooth_factor -133 ) -134 if self.length < self.period: -135 self.push(np.nan) -136 else: -137 self.push(self.prev) -138 return self[0] -139 -140 -141class ROI(Indicator): -142 """ -143 Return of investment for streaming data. -144 """ -145 -146 prev: float -147 -148 def __init__(self, *args, **kwargs): -149 super().__init__(*args, **kwargs) -150 self.prev = np.nan -151 -152 def update(self, value: float) -> float: -153 """ -154 Updates the indicator. If at least -155 a previous value has been updated before, -156 it starts reporting the return of the -157 investment. -158 """ -159 curr = roi(self.prev, value) -160 self.push(curr) -161 self.prev = value -162 return self[0] -163 -164 -165class RSI(Indicator): -166 gains: MA -167 losses: MA -168 -169 def __init__(self, period: int = 14, **kwargs): -170 args = [] -171 super().__init__(*args, **kwargs) -172 self.gains = MA(period=period) -173 self.losses = MA(period=period) -174 -175 def update(self, open_price: float, close_price: float) -> float: -176 diff = close_price - open_price -177 self.gains.update(diff if diff > 0.0 else 0.0) -178 self.losses.update(-diff if diff < 0.0 else 0.0) -179 if np.isnan(self.losses[0]): -180 self.push(np.nan) -181 else: -182 self.push(100.0 - 100.0 / (1 + self.gains[0] / self.losses[0])) -183 return self[0] -184 -185 -186@define -187class MACDResult: -188 macd: float -189 signal: float -190 hist: float -191 -192 -193class MACD(Indicator): -194 -195 short: EMA -196 long: EMA -197 diff: EMA -198 start: int -199 counter = 0 -200 -201 def __init__( -202 self, -203 short_period: float, -204 long_period: float, -205 diff_period: float, -206 *args, -207 **kwargs -208 ): -209 args = [] -210 super().__init__(*args, **kwargs) -211 self.short = EMA(period=short_period, *args, **kwargs) -212 self.long = EMA(period=long_period, *args, **kwargs) -213 self.diff = EMA(period=diff_period, *args, **kwargs) -214 self.start = long_period if long_period > short_period else short_period -215 -216 def update(self, value: float) -> float: -217 self.counter += 1 -218 self.short.update(value) -219 self.long.update(value) -220 if self.counter >= self.start: -221 diff = self.short[0] - self.long[0] -222 self.diff.update(diff) -223 hist = diff - self.diff[0] -224 self.push(MACDResult(macd=diff, signal=self.diff[0], hist=hist)) -225 else: -226 self.push(MACDResult(macd=np.nan, signal=np.nan, hist=np.nan)) -227 return self[0] -228 -229 -230def roi(initial_value, final_value): -231 """Return on investment""" -232 if initial_value == 0 or np.isnan(initial_value): -233 return np.nan -234 return final_value / initial_value - 1.0 -
12class Indicator: -13 """ -14 Base class to build indicators. It provides a buffer to -15 keep the last `mem_size` values and functions to push -16 new values and retrieve using bracket notation or the -17 function get. -18 -19 All derived classes, call the __init__ method of this class -20 and when an update ocurrs, they push the new value -21 into the memory buffer. -22 -23 Because this class is intended to be used for time series, -24 indices go backwards, being `0` the last updated value, -1 -25 the previous one, -2 the previous of the previos one... -26 If a value is requested with a positive index or a negative -27 index which absolute values is greater than `mem_size`, then -28 an NAN value is returned. -29 """ -30 -31 mem_pos: int -32 mem_data: list -33 mem_size: int -34 -35 def __init__(self, mem_size=1): -36 """ -37 @param mem_size: The size of the memory buffer. The -38 default value is 1. -39 """ -40 self.mem_data = [np.nan] * mem_size -41 self.mem_pos = 0 -42 self.mem_size = mem_size -43 -44 def __getitem__(self, key): -45 """ -46 @param key: 0 for the most recent update -47 a negative number for the n-previous updates -48 -49 A negative number less than -mem_size returns NAN. -50 A positive number returns NAN. -51 """ -52 if key > 0 or -key >= self.mem_size: -53 return np.nan -54 real_pos = (self.mem_pos - key) % self.mem_size -55 return self.mem_data[real_pos] -56 -57 def push(self, value): -58 """ -59 Stores in the buffer `value` as the more recent update. -60 In the current implementation, a ring buffer is used -61 to save these values. -62 -63 @param value: The most recent update -64 """ -65 self.mem_pos = (self.mem_pos - 1) % self.mem_size -66 self.mem_data[self.mem_pos] = value -67 -68 def get(self, key=0) -> float: -69 """The same as `__getitem__`""" -70 return self[key] -
Base class to build indicators. It provides a buffer to
-keep the last mem_size
values and functions to push
-new values and retrieve using bracket notation or the
-function get.
All derived classes, call the __init__ method of this class -and when an update ocurrs, they push the new value -into the memory buffer.
- -Because this class is intended to be used for time series,
-indices go backwards, being 0
the last updated value, -1
-the previous one, -2 the previous of the previos one...
-If a value is requested with a positive index or a negative
-index which absolute values is greater than mem_size
, then
-an NAN value is returned.
35 def __init__(self, mem_size=1): -36 """ -37 @param mem_size: The size of the memory buffer. The -38 default value is 1. -39 """ -40 self.mem_data = [np.nan] * mem_size -41 self.mem_pos = 0 -42 self.mem_size = mem_size -
@param mem_size: The size of the memory buffer. The - default value is 1.
-57 def push(self, value): -58 """ -59 Stores in the buffer `value` as the more recent update. -60 In the current implementation, a ring buffer is used -61 to save these values. -62 -63 @param value: The most recent update -64 """ -65 self.mem_pos = (self.mem_pos - 1) % self.mem_size -66 self.mem_data[self.mem_pos] = value -
Stores in the buffer value
as the more recent update.
-In the current implementation, a ring buffer is used
-to save these values.
@param value: The most recent update
-73class MA(Indicator): - 74 """Moving Average""" - 75 - 76 period: int - 77 prevs: np.ndarray - 78 length: int = 0 - 79 pos: int = 0 - 80 accum: float = 0.0 - 81 - 82 def __init__(self, period: int, *args, **kwargs): - 83 """ - 84 The number of period or window size is required to initialize a MA - 85 object. - 86 """ - 87 super().__init__(*args, **kwargs) - 88 self.period = period - 89 self.prevs = np.zeros(period, dtype=float) - 90 - 91 def update(self, value: float) -> float: - 92 """Aggregate a new value into the moving average""" - 93 if self.length < self.period: - 94 self.length += 1 - 95 else: - 96 self.accum -= self.prevs[self.pos] - 97 self.prevs[self.pos] = value - 98 self.accum += value - 99 self.pos = (self.pos + 1) % self.period -100 if self.length < self.period: -101 self.push(np.nan) -102 else: -103 self.push(self.accum / self.period) -104 return self[0] -
Moving Average
-82 def __init__(self, period: int, *args, **kwargs): -83 """ -84 The number of period or window size is required to initialize a MA -85 object. -86 """ -87 super().__init__(*args, **kwargs) -88 self.period = period -89 self.prevs = np.zeros(period, dtype=float) -
The number of period or window size is required to initialize a MA -object.
-91 def update(self, value: float) -> float: - 92 """Aggregate a new value into the moving average""" - 93 if self.length < self.period: - 94 self.length += 1 - 95 else: - 96 self.accum -= self.prevs[self.pos] - 97 self.prevs[self.pos] = value - 98 self.accum += value - 99 self.pos = (self.pos + 1) % self.period -100 if self.length < self.period: -101 self.push(np.nan) -102 else: -103 self.push(self.accum / self.period) -104 return self[0] -
Aggregate a new value into the moving average
-107class EMA(Indicator): -108 """Exponential Moving Average""" -109 -110 period: float -111 alpha: float -112 smooth_factor: float -113 length: int = 0 -114 prev: float = 0.0 -115 -116 def __init__(self, period: int, *args, **kwargs): -117 super().__init__(*args, **kwargs) -118 alpha = 2.0 if "alpha" not in kwargs else kwargs["alpha"] -119 self.period = period -120 self.alpha = alpha -121 self.smooth_factor = alpha / (1.0 + period) -122 -123 def update(self, value: float) -> float: -124 """Aggregate a new value into the moving average""" -125 self.length += 1 -126 if self.length < self.period: -127 self.prev += value -128 elif self.length == self.period: -129 self.prev += value -130 self.prev /= self.period -131 else: -132 self.prev = (value * self.smooth_factor) + self.prev * ( -133 1.0 - self.smooth_factor -134 ) -135 if self.length < self.period: -136 self.push(np.nan) -137 else: -138 self.push(self.prev) -139 return self[0] -
Exponential Moving Average
-116 def __init__(self, period: int, *args, **kwargs): -117 super().__init__(*args, **kwargs) -118 alpha = 2.0 if "alpha" not in kwargs else kwargs["alpha"] -119 self.period = period -120 self.alpha = alpha -121 self.smooth_factor = alpha / (1.0 + period) -
@param mem_size: The size of the memory buffer. The - default value is 1.
-123 def update(self, value: float) -> float: -124 """Aggregate a new value into the moving average""" -125 self.length += 1 -126 if self.length < self.period: -127 self.prev += value -128 elif self.length == self.period: -129 self.prev += value -130 self.prev /= self.period -131 else: -132 self.prev = (value * self.smooth_factor) + self.prev * ( -133 1.0 - self.smooth_factor -134 ) -135 if self.length < self.period: -136 self.push(np.nan) -137 else: -138 self.push(self.prev) -139 return self[0] -
Aggregate a new value into the moving average
-142class ROI(Indicator): -143 """ -144 Return of investment for streaming data. -145 """ -146 -147 prev: float -148 -149 def __init__(self, *args, **kwargs): -150 super().__init__(*args, **kwargs) -151 self.prev = np.nan -152 -153 def update(self, value: float) -> float: -154 """ -155 Updates the indicator. If at least -156 a previous value has been updated before, -157 it starts reporting the return of the -158 investment. -159 """ -160 curr = roi(self.prev, value) -161 self.push(curr) -162 self.prev = value -163 return self[0] -
Return of investment for streaming data.
-149 def __init__(self, *args, **kwargs): -150 super().__init__(*args, **kwargs) -151 self.prev = np.nan -
@param mem_size: The size of the memory buffer. The - default value is 1.
-153 def update(self, value: float) -> float: -154 """ -155 Updates the indicator. If at least -156 a previous value has been updated before, -157 it starts reporting the return of the -158 investment. -159 """ -160 curr = roi(self.prev, value) -161 self.push(curr) -162 self.prev = value -163 return self[0] -
Updates the indicator. If at least -a previous value has been updated before, -it starts reporting the return of the -investment.
-166class RSI(Indicator): -167 gains: MA -168 losses: MA -169 -170 def __init__(self, period: int = 14, **kwargs): -171 args = [] -172 super().__init__(*args, **kwargs) -173 self.gains = MA(period=period) -174 self.losses = MA(period=period) -175 -176 def update(self, open_price: float, close_price: float) -> float: -177 diff = close_price - open_price -178 self.gains.update(diff if diff > 0.0 else 0.0) -179 self.losses.update(-diff if diff < 0.0 else 0.0) -180 if np.isnan(self.losses[0]): -181 self.push(np.nan) -182 else: -183 self.push(100.0 - 100.0 / (1 + self.gains[0] / self.losses[0])) -184 return self[0] -
Base class to build indicators. It provides a buffer to
-keep the last mem_size
values and functions to push
-new values and retrieve using bracket notation or the
-function get.
All derived classes, call the __init__ method of this class -and when an update ocurrs, they push the new value -into the memory buffer.
- -Because this class is intended to be used for time series,
-indices go backwards, being 0
the last updated value, -1
-the previous one, -2 the previous of the previos one...
-If a value is requested with a positive index or a negative
-index which absolute values is greater than mem_size
, then
-an NAN value is returned.
170 def __init__(self, period: int = 14, **kwargs): -171 args = [] -172 super().__init__(*args, **kwargs) -173 self.gains = MA(period=period) -174 self.losses = MA(period=period) -
@param mem_size: The size of the memory buffer. The - default value is 1.
-176 def update(self, open_price: float, close_price: float) -> float: -177 diff = close_price - open_price -178 self.gains.update(diff if diff > 0.0 else 0.0) -179 self.losses.update(-diff if diff < 0.0 else 0.0) -180 if np.isnan(self.losses[0]): -181 self.push(np.nan) -182 else: -183 self.push(100.0 - 100.0 / (1 + self.gains[0] / self.losses[0])) -184 return self[0] -
194class MACD(Indicator): -195 -196 short: EMA -197 long: EMA -198 diff: EMA -199 start: int -200 counter = 0 -201 -202 def __init__( -203 self, -204 short_period: float, -205 long_period: float, -206 diff_period: float, -207 *args, -208 **kwargs -209 ): -210 args = [] -211 super().__init__(*args, **kwargs) -212 self.short = EMA(period=short_period, *args, **kwargs) -213 self.long = EMA(period=long_period, *args, **kwargs) -214 self.diff = EMA(period=diff_period, *args, **kwargs) -215 self.start = long_period if long_period > short_period else short_period -216 -217 def update(self, value: float) -> float: -218 self.counter += 1 -219 self.short.update(value) -220 self.long.update(value) -221 if self.counter >= self.start: -222 diff = self.short[0] - self.long[0] -223 self.diff.update(diff) -224 hist = diff - self.diff[0] -225 self.push(MACDResult(macd=diff, signal=self.diff[0], hist=hist)) -226 else: -227 self.push(MACDResult(macd=np.nan, signal=np.nan, hist=np.nan)) -228 return self[0] -
Base class to build indicators. It provides a buffer to
-keep the last mem_size
values and functions to push
-new values and retrieve using bracket notation or the
-function get.
All derived classes, call the __init__ method of this class -and when an update ocurrs, they push the new value -into the memory buffer.
- -Because this class is intended to be used for time series,
-indices go backwards, being 0
the last updated value, -1
-the previous one, -2 the previous of the previos one...
-If a value is requested with a positive index or a negative
-index which absolute values is greater than mem_size
, then
-an NAN value is returned.
202 def __init__( -203 self, -204 short_period: float, -205 long_period: float, -206 diff_period: float, -207 *args, -208 **kwargs -209 ): -210 args = [] -211 super().__init__(*args, **kwargs) -212 self.short = EMA(period=short_period, *args, **kwargs) -213 self.long = EMA(period=long_period, *args, **kwargs) -214 self.diff = EMA(period=diff_period, *args, **kwargs) -215 self.start = long_period if long_period > short_period else short_period -
@param mem_size: The size of the memory buffer. The - default value is 1.
-217 def update(self, value: float) -> float: -218 self.counter += 1 -219 self.short.update(value) -220 self.long.update(value) -221 if self.counter >= self.start: -222 diff = self.short[0] - self.long[0] -223 self.diff.update(diff) -224 hist = diff - self.diff[0] -225 self.push(MACDResult(macd=diff, signal=self.diff[0], hist=hist)) -226 else: -227 self.push(MACDResult(macd=np.nan, signal=np.nan, hist=np.nan)) -228 return self[0] -
231def roi(initial_value, final_value): -232 """Return on investment""" -233 if initial_value == 0 or np.isnan(initial_value): -234 return np.nan -235 return final_value / initial_value - 1.0 -
Return on investment
-TRADING PORTFOLIO MODELS
- -This module has beed adapted from: -https://github.com/jailop/trading/tree/main/indicators-c%2B%2B
-1""" - 2TRADING PORTFOLIO MODELS - 3 - 4This module has beed adapted from: - 5https://github.com/jailop/trading/tree/main/indicators-c%2B%2B - 6""" - 7 - 8from datetime import datetime - 9from .strategies import Position -10from .indicators import roi -11 -12 -13class Portfolio: -14 """Base Portfolio Class""" -15 -16 initial_cash: float -17 last_position: Position -18 last_exchange: str -19 last_price: float -20 last_ticker: str -21 -22 def __init__(self, cash: float = 1000.0): -23 """Init method""" -24 self.initial_cash = cash -25 self.last_position = Position.STAY -26 self.last_price = 0.0 -27 self.last_ticker = "" -28 self.last_exchange = "" -29 -30 def process( -31 self, -32 time: datetime = datetime.now(), -33 exchange: str = "", -34 ticker: str = "", -35 position: Position = Position.STAY, -36 price: float = 0.0, -37 ): -38 """Process signal""" -39 self.last_ticker = ticker -40 self.last_price = price -41 self.last_position = position -42 self.last_exchange = exchange -43 -44 def valuation(self) -> float: -45 """Default valuation method""" -46 return self.initial_cash -47 -48 def accumulated_return(self) -> float: -49 """Accumulated ROI""" -50 return roi(self.initial_cash, self.valuation()) -51 -52 -53class DummyPortfolio(Portfolio): -54 """ -55 Dummy portfolio is the most basic portfolio model. -56 It works with only one asset. When it receives the buy signal, -57 it uses all the available cash to buy the asset. When it receives -58 the sell signal, it sells all the shares of the asset. -59 """ -60 -61 cash: float -62 share_units: float -63 share_price: float -64 -65 def __init__(self, cash: float = 1000.0): -66 super().__init__(cash) -67 self.cash = cash -68 self.share_units = 0.0 -69 self.share_price = 0.0 -70 -71 def process( -72 self, -73 time: datetime = datetime.now(), -74 exchange: str = "", -75 ticker: str = "", -76 position: Position = Position.STAY, -77 price: float = 0.0, -78 ): -79 super().process(ticker=ticker, position=position, price=price) -80 if position == Position.BUY: -81 if self.cash == 0.0: -82 return -83 self.share_units = self.cash / price -84 self.share_price = price -85 self.cash = 0.0 -86 elif position == Position.SELL: -87 if self.share_units == 0.0: -88 return -89 self.cash = self.share_units * price -90 self.share_price = price -91 self.share_units = 0.0 -92 -93 def valuation(self) -> float: -94 return self.cash if self.cash > 0.0 else (self.share_price * self.share_units) -
14class Portfolio: -15 """Base Portfolio Class""" -16 -17 initial_cash: float -18 last_position: Position -19 last_exchange: str -20 last_price: float -21 last_ticker: str -22 -23 def __init__(self, cash: float = 1000.0): -24 """Init method""" -25 self.initial_cash = cash -26 self.last_position = Position.STAY -27 self.last_price = 0.0 -28 self.last_ticker = "" -29 self.last_exchange = "" -30 -31 def process( -32 self, -33 time: datetime = datetime.now(), -34 exchange: str = "", -35 ticker: str = "", -36 position: Position = Position.STAY, -37 price: float = 0.0, -38 ): -39 """Process signal""" -40 self.last_ticker = ticker -41 self.last_price = price -42 self.last_position = position -43 self.last_exchange = exchange -44 -45 def valuation(self) -> float: -46 """Default valuation method""" -47 return self.initial_cash -48 -49 def accumulated_return(self) -> float: -50 """Accumulated ROI""" -51 return roi(self.initial_cash, self.valuation()) -
Base Portfolio Class
-23 def __init__(self, cash: float = 1000.0): -24 """Init method""" -25 self.initial_cash = cash -26 self.last_position = Position.STAY -27 self.last_price = 0.0 -28 self.last_ticker = "" -29 self.last_exchange = "" -
Init method
-31 def process( -32 self, -33 time: datetime = datetime.now(), -34 exchange: str = "", -35 ticker: str = "", -36 position: Position = Position.STAY, -37 price: float = 0.0, -38 ): -39 """Process signal""" -40 self.last_ticker = ticker -41 self.last_price = price -42 self.last_position = position -43 self.last_exchange = exchange -
Process signal
-54class DummyPortfolio(Portfolio): -55 """ -56 Dummy portfolio is the most basic portfolio model. -57 It works with only one asset. When it receives the buy signal, -58 it uses all the available cash to buy the asset. When it receives -59 the sell signal, it sells all the shares of the asset. -60 """ -61 -62 cash: float -63 share_units: float -64 share_price: float -65 -66 def __init__(self, cash: float = 1000.0): -67 super().__init__(cash) -68 self.cash = cash -69 self.share_units = 0.0 -70 self.share_price = 0.0 -71 -72 def process( -73 self, -74 time: datetime = datetime.now(), -75 exchange: str = "", -76 ticker: str = "", -77 position: Position = Position.STAY, -78 price: float = 0.0, -79 ): -80 super().process(ticker=ticker, position=position, price=price) -81 if position == Position.BUY: -82 if self.cash == 0.0: -83 return -84 self.share_units = self.cash / price -85 self.share_price = price -86 self.cash = 0.0 -87 elif position == Position.SELL: -88 if self.share_units == 0.0: -89 return -90 self.cash = self.share_units * price -91 self.share_price = price -92 self.share_units = 0.0 -93 -94 def valuation(self) -> float: -95 return self.cash if self.cash > 0.0 else (self.share_price * self.share_units) -
Dummy portfolio is the most basic portfolio model. -It works with only one asset. When it receives the buy signal, -it uses all the available cash to buy the asset. When it receives -the sell signal, it sells all the shares of the asset.
-66 def __init__(self, cash: float = 1000.0): -67 super().__init__(cash) -68 self.cash = cash -69 self.share_units = 0.0 -70 self.share_price = 0.0 -
Init method
-72 def process( -73 self, -74 time: datetime = datetime.now(), -75 exchange: str = "", -76 ticker: str = "", -77 position: Position = Position.STAY, -78 price: float = 0.0, -79 ): -80 super().process(ticker=ticker, position=position, price=price) -81 if position == Position.BUY: -82 if self.cash == 0.0: -83 return -84 self.share_units = self.cash / price -85 self.share_price = price -86 self.cash = 0.0 -87 elif position == Position.SELL: -88 if self.share_units == 0.0: -89 return -90 self.cash = self.share_units * price -91 self.share_price = price -92 self.share_units = 0.0 -
Process signal
-94 def valuation(self) -> float: -95 return self.cash if self.cash > 0.0 else (self.share_price * self.share_units) -
Default valuation method
-Strategies
-1"""Strategies""" - 2 - 3from enum import Enum - 4from datetime import datetime - 5from attrs import define - 6 - 7 - 8class Position(Enum): - 9 """Trading Positions""" -10 -11 STAY = 1 -12 BUY = 2 -13 SELL = 3 -14 -15 -16@define -17class StrategySignal: -18 """To report computations of an strategy""" -19 -20 time: datetime = datetime.now() -21 position: Position = Position.STAY -22 price: float = 0.0 -23 ticker: str = "" -24 exchange: str = "" -25 -26 -27class Strategy: -28 """Base class for strategies""" -29 -30 def __init__(self, *args, **kwargs): -31 """ -32 Init Method. Included for future support. -33 """ -34 -35 def evaluate(self, *args, **kwargs) -> StrategySignal: -36 """ -37 Evaluate method. Include for future support -38 """ -39 # The default position is STAY -40 return StrategySignal() -
Trading Positions
-17@define -18class StrategySignal: -19 """To report computations of an strategy""" -20 -21 time: datetime = datetime.now() -22 position: Position = Position.STAY -23 price: float = 0.0 -24 ticker: str = "" -25 exchange: str = "" -
To report computations of an strategy
-2def __init__(self, time=attr_dict['time'].default, position=attr_dict['position'].default, price=attr_dict['price'].default, ticker=attr_dict['ticker'].default, exchange=attr_dict['exchange'].default): -3 self.time = time -4 self.position = position -5 self.price = price -6 self.ticker = ticker -7 self.exchange = exchange -
Method generated by attrs for class StrategySignal.
-28class Strategy: -29 """Base class for strategies""" -30 -31 def __init__(self, *args, **kwargs): -32 """ -33 Init Method. Included for future support. -34 """ -35 -36 def evaluate(self, *args, **kwargs) -> StrategySignal: -37 """ -38 Evaluate method. Include for future support -39 """ -40 # The default position is STAY -41 return StrategySignal() -
Base class for strategies
-31 def __init__(self, *args, **kwargs): -32 """ -33 Init Method. Included for future support. -34 """ -
Init Method. Included for future support.
-A collection of bottraders
-1"""A collection of bottraders""" - 2 - 3from typing import Union - 4from datetime import datetime - 5from attrs import define, asdict - 6from .datastreamers import DataStreamer - 7from .portfolios import Portfolio - 8from .strategies import Strategy, Position, StrategySignal - 9from .indicators import roi -10 -11 -12@define -13class TradingIteration: -14 """Used to report results from a trading iteration""" -15 -16 signal: StrategySignal -17 data: dict -18 roi: Union[float, None] -19 portfolio_value: float -20 accumulated_roi: Union[float, None] -21 -22 -23class Trader: -24 """Base class""" -25 -26 portfolio: Portfolio -27 datastream: DataStreamer -28 strategy: Strategy -29 last_result: Union[TradingIteration, None] = None -30 last_valuation: float = 0.0 -31 -32 def __init__( -33 self, -34 strategy: Strategy, -35 portfolio: Portfolio, -36 datastream: DataStreamer, -37 ): -38 """Init method""" -39 self.datastream = datastream -40 self.portfolio = portfolio -41 self.strategy = strategy -42 -43 def next(self) -> bool: -44 """Perfoms a trading iteration""" -45 obs = self.datastream.next() -46 if obs is None: -47 return False -48 signal = self.strategy.evaluate(**obs) -49 self.portfolio.process(**asdict(signal)) -50 self.last_result = TradingIteration( -51 signal=signal, -52 data=obs, -53 roi=roi(self.last_valuation, self.portfolio.valuation()), -54 portfolio_value=self.portfolio.valuation(), -55 accumulated_roi=self.portfolio.accumulated_return(), -56 ) -57 self.last_valuation = self.portfolio.valuation() -58 return True -59 -60 def status(self) -> TradingIteration: -61 """Trader last result""" -62 return self.last_result -63 -64 def run(self): -65 """A default runner""" -66 # A nice header -67 print( -68 "{:26} {:4} {:>10} {:>10} {:>10} {:>10}".format( # pylint: disable=consider-using-f-string -69 "Time", "Pos.", "Price", "ROI", "Valuation", "Accum.ROI" -70 ) -71 ) -72 # Run the back-testing -73 while self.next(): -74 status = self.status() -75 if status.signal.position != Position.STAY: -76 # A nice output -77 print( -78 f"{status.signal.time} {status.signal.position.name:4} {status.data['close']:10.2f} " -79 + f"{status.roi * 100.0:10.2f}% {status.portfolio_value:10.2f} " -80 + f"{status.accumulated_roi * 100.0:10.2f}%" -81 ) -
13@define -14class TradingIteration: -15 """Used to report results from a trading iteration""" -16 -17 signal: StrategySignal -18 data: dict -19 roi: Union[float, None] -20 portfolio_value: float -21 accumulated_roi: Union[float, None] -
Used to report results from a trading iteration
-2def __init__(self, signal, data, roi, portfolio_value, accumulated_roi): -3 self.signal = signal -4 self.data = data -5 self.roi = roi -6 self.portfolio_value = portfolio_value -7 self.accumulated_roi = accumulated_roi -
Method generated by attrs for class TradingIteration.
-24class Trader: -25 """Base class""" -26 -27 portfolio: Portfolio -28 datastream: DataStreamer -29 strategy: Strategy -30 last_result: Union[TradingIteration, None] = None -31 last_valuation: float = 0.0 -32 -33 def __init__( -34 self, -35 strategy: Strategy, -36 portfolio: Portfolio, -37 datastream: DataStreamer, -38 ): -39 """Init method""" -40 self.datastream = datastream -41 self.portfolio = portfolio -42 self.strategy = strategy -43 -44 def next(self) -> bool: -45 """Perfoms a trading iteration""" -46 obs = self.datastream.next() -47 if obs is None: -48 return False -49 signal = self.strategy.evaluate(**obs) -50 self.portfolio.process(**asdict(signal)) -51 self.last_result = TradingIteration( -52 signal=signal, -53 data=obs, -54 roi=roi(self.last_valuation, self.portfolio.valuation()), -55 portfolio_value=self.portfolio.valuation(), -56 accumulated_roi=self.portfolio.accumulated_return(), -57 ) -58 self.last_valuation = self.portfolio.valuation() -59 return True -60 -61 def status(self) -> TradingIteration: -62 """Trader last result""" -63 return self.last_result -64 -65 def run(self): -66 """A default runner""" -67 # A nice header -68 print( -69 "{:26} {:4} {:>10} {:>10} {:>10} {:>10}".format( # pylint: disable=consider-using-f-string -70 "Time", "Pos.", "Price", "ROI", "Valuation", "Accum.ROI" -71 ) -72 ) -73 # Run the back-testing -74 while self.next(): -75 status = self.status() -76 if status.signal.position != Position.STAY: -77 # A nice output -78 print( -79 f"{status.signal.time} {status.signal.position.name:4} {status.data['close']:10.2f} " -80 + f"{status.roi * 100.0:10.2f}% {status.portfolio_value:10.2f} " -81 + f"{status.accumulated_roi * 100.0:10.2f}%" -82 ) -
Base class
-33 def __init__( -34 self, -35 strategy: Strategy, -36 portfolio: Portfolio, -37 datastream: DataStreamer, -38 ): -39 """Init method""" -40 self.datastream = datastream -41 self.portfolio = portfolio -42 self.strategy = strategy -
Init method
-44 def next(self) -> bool: -45 """Perfoms a trading iteration""" -46 obs = self.datastream.next() -47 if obs is None: -48 return False -49 signal = self.strategy.evaluate(**obs) -50 self.portfolio.process(**asdict(signal)) -51 self.last_result = TradingIteration( -52 signal=signal, -53 data=obs, -54 roi=roi(self.last_valuation, self.portfolio.valuation()), -55 portfolio_value=self.portfolio.valuation(), -56 accumulated_roi=self.portfolio.accumulated_return(), -57 ) -58 self.last_valuation = self.portfolio.valuation() -59 return True -
Perfoms a trading iteration
-65 def run(self): -66 """A default runner""" -67 # A nice header -68 print( -69 "{:26} {:4} {:>10} {:>10} {:>10} {:>10}".format( # pylint: disable=consider-using-f-string -70 "Time", "Pos.", "Price", "ROI", "Valuation", "Accum.ROI" -71 ) -72 ) -73 # Run the back-testing -74 while self.next(): -75 status = self.status() -76 if status.signal.position != Position.STAY: -77 # A nice output -78 print( -79 f"{status.signal.time} {status.signal.position.name:4} {status.data['close']:10.2f} " -80 + f"{status.roi * 100.0:10.2f}% {status.portfolio_value:10.2f} " -81 + f"{status.accumulated_roi * 100.0:10.2f}%" -82 ) -
A default runner
-To install:
\n\npip install git+https://github.com/jailop/pybottrader.git\n
\n"}, "pybottrader.datastreamers": {"fullname": "pybottrader.datastreamers", "modulename": "pybottrader.datastreamers", "kind": "module", "doc": "Data Streamers
\n"}, "pybottrader.datastreamers.DataStreamer": {"fullname": "pybottrader.datastreamers.DataStreamer", "modulename": "pybottrader.datastreamers", "qualname": "DataStreamer", "kind": "class", "doc": "A data streamer abstract class
\n"}, "pybottrader.datastreamers.DataStreamer.__init__": {"fullname": "pybottrader.datastreamers.DataStreamer.__init__", "modulename": "pybottrader.datastreamers", "qualname": "DataStreamer.__init__", "kind": "function", "doc": "Init method
\n", "signature": "()"}, "pybottrader.datastreamers.DataStreamer.next": {"fullname": "pybottrader.datastreamers.DataStreamer.next", "modulename": "pybottrader.datastreamers", "qualname": "DataStreamer.next", "kind": "function", "doc": "Next method
\n", "signature": "(self) -> Optional[dict]:", "funcdef": "def"}, "pybottrader.datastreamers.YFinanceStreamer": {"fullname": "pybottrader.datastreamers.YFinanceStreamer", "modulename": "pybottrader.datastreamers", "qualname": "YFinanceStreamer", "kind": "class", "doc": "Using Yahoo Finance to retrieve data
\n", "bases": "DataStreamer"}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"fullname": "pybottrader.datastreamers.YFinanceStreamer.__init__", "modulename": "pybottrader.datastreamers", "qualname": "YFinanceStreamer.__init__", "kind": "function", "doc": "Init method
\n", "signature": "(symbol, *args, **kwargs)"}, "pybottrader.datastreamers.YFinanceStreamer.index": {"fullname": "pybottrader.datastreamers.YFinanceStreamer.index", "modulename": "pybottrader.datastreamers", "qualname": "YFinanceStreamer.index", "kind": "variable", "doc": "\n", "default_value": "0"}, "pybottrader.datastreamers.YFinanceStreamer.data": {"fullname": "pybottrader.datastreamers.YFinanceStreamer.data", "modulename": "pybottrader.datastreamers", "qualname": "YFinanceStreamer.data", "kind": "variable", "doc": "\n", "annotation": ": pandas.core.frame.DataFrame"}, "pybottrader.datastreamers.YFinanceStreamer.next": {"fullname": "pybottrader.datastreamers.YFinanceStreamer.next", "modulename": "pybottrader.datastreamers", "qualname": "YFinanceStreamer.next", "kind": "function", "doc": "Next method
\n", "signature": "(self) -> Optional[dict]:", "funcdef": "def"}, "pybottrader.datastreamers.CSVFileStreamer": {"fullname": "pybottrader.datastreamers.CSVFileStreamer", "modulename": "pybottrader.datastreamers", "qualname": "CSVFileStreamer", "kind": "class", "doc": "An dataframe file streamer
\n", "bases": "DataStreamer"}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"fullname": "pybottrader.datastreamers.CSVFileStreamer.__init__", "modulename": "pybottrader.datastreamers", "qualname": "CSVFileStreamer.__init__", "kind": "function", "doc": "Init method
\n", "signature": "(filename: str)"}, "pybottrader.datastreamers.CSVFileStreamer.data": {"fullname": "pybottrader.datastreamers.CSVFileStreamer.data", "modulename": "pybottrader.datastreamers", "qualname": "CSVFileStreamer.data", "kind": "variable", "doc": "\n", "annotation": ": pandas.core.frame.DataFrame"}, "pybottrader.datastreamers.CSVFileStreamer.index": {"fullname": "pybottrader.datastreamers.CSVFileStreamer.index", "modulename": "pybottrader.datastreamers", "qualname": "CSVFileStreamer.index", "kind": "variable", "doc": "\n", "annotation": ": int"}, "pybottrader.datastreamers.CSVFileStreamer.next": {"fullname": "pybottrader.datastreamers.CSVFileStreamer.next", "modulename": "pybottrader.datastreamers", "qualname": "CSVFileStreamer.next", "kind": "function", "doc": "Next method
\n", "signature": "(self) -> Optional[dict]:", "funcdef": "def"}, "pybottrader.indicators": {"fullname": "pybottrader.indicators", "modulename": "pybottrader.indicators", "kind": "module", "doc": "Moving Average\nImplementation adopted from:\nhttps://github.com/jailop/trading/tree/main/indicators-c++
\n"}, "pybottrader.indicators.Indicator": {"fullname": "pybottrader.indicators.Indicator", "modulename": "pybottrader.indicators", "qualname": "Indicator", "kind": "class", "doc": "Base class to build indicators. It provides a buffer to\nkeep the last mem_size
values and functions to push\nnew values and retrieve using bracket notation or the\nfunction get.
All derived classes, call the __init__ method of this class\nand when an update ocurrs, they push the new value\ninto the memory buffer.
\n\nBecause this class is intended to be used for time series,\nindices go backwards, being 0
the last updated value, -1\nthe previous one, -2 the previous of the previos one...\nIf a value is requested with a positive index or a negative\nindex which absolute values is greater than mem_size
, then\nan NAN value is returned.
@param mem_size: The size of the memory buffer. The\n default value is 1.
\n", "signature": "(mem_size=1)"}, "pybottrader.indicators.Indicator.mem_pos": {"fullname": "pybottrader.indicators.Indicator.mem_pos", "modulename": "pybottrader.indicators", "qualname": "Indicator.mem_pos", "kind": "variable", "doc": "\n", "annotation": ": int"}, "pybottrader.indicators.Indicator.mem_data": {"fullname": "pybottrader.indicators.Indicator.mem_data", "modulename": "pybottrader.indicators", "qualname": "Indicator.mem_data", "kind": "variable", "doc": "\n", "annotation": ": list"}, "pybottrader.indicators.Indicator.mem_size": {"fullname": "pybottrader.indicators.Indicator.mem_size", "modulename": "pybottrader.indicators", "qualname": "Indicator.mem_size", "kind": "variable", "doc": "\n", "annotation": ": int"}, "pybottrader.indicators.Indicator.push": {"fullname": "pybottrader.indicators.Indicator.push", "modulename": "pybottrader.indicators", "qualname": "Indicator.push", "kind": "function", "doc": "Stores in the buffer value
as the more recent update.\nIn the current implementation, a ring buffer is used\nto save these values.
@param value: The most recent update
\n", "signature": "(self, value):", "funcdef": "def"}, "pybottrader.indicators.Indicator.get": {"fullname": "pybottrader.indicators.Indicator.get", "modulename": "pybottrader.indicators", "qualname": "Indicator.get", "kind": "function", "doc": "The same as __getitem__
Moving Average
\n", "bases": "Indicator"}, "pybottrader.indicators.MA.__init__": {"fullname": "pybottrader.indicators.MA.__init__", "modulename": "pybottrader.indicators", "qualname": "MA.__init__", "kind": "function", "doc": "The number of period or window size is required to initialize a MA\nobject.
\n", "signature": "(period: int, *args, **kwargs)"}, "pybottrader.indicators.MA.period": {"fullname": "pybottrader.indicators.MA.period", "modulename": "pybottrader.indicators", "qualname": "MA.period", "kind": "variable", "doc": "\n", "annotation": ": int"}, "pybottrader.indicators.MA.prevs": {"fullname": "pybottrader.indicators.MA.prevs", "modulename": "pybottrader.indicators", "qualname": "MA.prevs", "kind": "variable", "doc": "\n", "annotation": ": numpy.ndarray"}, "pybottrader.indicators.MA.length": {"fullname": "pybottrader.indicators.MA.length", "modulename": "pybottrader.indicators", "qualname": "MA.length", "kind": "variable", "doc": "\n", "annotation": ": int", "default_value": "0"}, "pybottrader.indicators.MA.pos": {"fullname": "pybottrader.indicators.MA.pos", "modulename": "pybottrader.indicators", "qualname": "MA.pos", "kind": "variable", "doc": "\n", "annotation": ": int", "default_value": "0"}, "pybottrader.indicators.MA.accum": {"fullname": "pybottrader.indicators.MA.accum", "modulename": "pybottrader.indicators", "qualname": "MA.accum", "kind": "variable", "doc": "\n", "annotation": ": float", "default_value": "0.0"}, "pybottrader.indicators.MA.update": {"fullname": "pybottrader.indicators.MA.update", "modulename": "pybottrader.indicators", "qualname": "MA.update", "kind": "function", "doc": "Aggregate a new value into the moving average
\n", "signature": "(self, value: float) -> float:", "funcdef": "def"}, "pybottrader.indicators.EMA": {"fullname": "pybottrader.indicators.EMA", "modulename": "pybottrader.indicators", "qualname": "EMA", "kind": "class", "doc": "Exponential Moving Average
\n", "bases": "Indicator"}, "pybottrader.indicators.EMA.__init__": {"fullname": "pybottrader.indicators.EMA.__init__", "modulename": "pybottrader.indicators", "qualname": "EMA.__init__", "kind": "function", "doc": "@param mem_size: The size of the memory buffer. The\n default value is 1.
\n", "signature": "(period: int, *args, **kwargs)"}, "pybottrader.indicators.EMA.period": {"fullname": "pybottrader.indicators.EMA.period", "modulename": "pybottrader.indicators", "qualname": "EMA.period", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.indicators.EMA.alpha": {"fullname": "pybottrader.indicators.EMA.alpha", "modulename": "pybottrader.indicators", "qualname": "EMA.alpha", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.indicators.EMA.smooth_factor": {"fullname": "pybottrader.indicators.EMA.smooth_factor", "modulename": "pybottrader.indicators", "qualname": "EMA.smooth_factor", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.indicators.EMA.length": {"fullname": "pybottrader.indicators.EMA.length", "modulename": "pybottrader.indicators", "qualname": "EMA.length", "kind": "variable", "doc": "\n", "annotation": ": int", "default_value": "0"}, "pybottrader.indicators.EMA.prev": {"fullname": "pybottrader.indicators.EMA.prev", "modulename": "pybottrader.indicators", "qualname": "EMA.prev", "kind": "variable", "doc": "\n", "annotation": ": float", "default_value": "0.0"}, "pybottrader.indicators.EMA.update": {"fullname": "pybottrader.indicators.EMA.update", "modulename": "pybottrader.indicators", "qualname": "EMA.update", "kind": "function", "doc": "Aggregate a new value into the moving average
\n", "signature": "(self, value: float) -> float:", "funcdef": "def"}, "pybottrader.indicators.ROI": {"fullname": "pybottrader.indicators.ROI", "modulename": "pybottrader.indicators", "qualname": "ROI", "kind": "class", "doc": "Return of investment for streaming data.
\n", "bases": "Indicator"}, "pybottrader.indicators.ROI.__init__": {"fullname": "pybottrader.indicators.ROI.__init__", "modulename": "pybottrader.indicators", "qualname": "ROI.__init__", "kind": "function", "doc": "@param mem_size: The size of the memory buffer. The\n default value is 1.
\n", "signature": "(*args, **kwargs)"}, "pybottrader.indicators.ROI.prev": {"fullname": "pybottrader.indicators.ROI.prev", "modulename": "pybottrader.indicators", "qualname": "ROI.prev", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.indicators.ROI.update": {"fullname": "pybottrader.indicators.ROI.update", "modulename": "pybottrader.indicators", "qualname": "ROI.update", "kind": "function", "doc": "Updates the indicator. If at least\na previous value has been updated before,\nit starts reporting the return of the\ninvestment.
\n", "signature": "(self, value: float) -> float:", "funcdef": "def"}, "pybottrader.indicators.RSI": {"fullname": "pybottrader.indicators.RSI", "modulename": "pybottrader.indicators", "qualname": "RSI", "kind": "class", "doc": "Base class to build indicators. It provides a buffer to\nkeep the last mem_size
values and functions to push\nnew values and retrieve using bracket notation or the\nfunction get.
All derived classes, call the __init__ method of this class\nand when an update ocurrs, they push the new value\ninto the memory buffer.
\n\nBecause this class is intended to be used for time series,\nindices go backwards, being 0
the last updated value, -1\nthe previous one, -2 the previous of the previos one...\nIf a value is requested with a positive index or a negative\nindex which absolute values is greater than mem_size
, then\nan NAN value is returned.
@param mem_size: The size of the memory buffer. The\n default value is 1.
\n", "signature": "(period: int = 14, **kwargs)"}, "pybottrader.indicators.RSI.gains": {"fullname": "pybottrader.indicators.RSI.gains", "modulename": "pybottrader.indicators", "qualname": "RSI.gains", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.indicators.MA"}, "pybottrader.indicators.RSI.losses": {"fullname": "pybottrader.indicators.RSI.losses", "modulename": "pybottrader.indicators", "qualname": "RSI.losses", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.indicators.MA"}, "pybottrader.indicators.RSI.update": {"fullname": "pybottrader.indicators.RSI.update", "modulename": "pybottrader.indicators", "qualname": "RSI.update", "kind": "function", "doc": "\n", "signature": "(self, open_price: float, close_price: float) -> float:", "funcdef": "def"}, "pybottrader.indicators.MACDResult": {"fullname": "pybottrader.indicators.MACDResult", "modulename": "pybottrader.indicators", "qualname": "MACDResult", "kind": "class", "doc": "\n"}, "pybottrader.indicators.MACDResult.__init__": {"fullname": "pybottrader.indicators.MACDResult.__init__", "modulename": "pybottrader.indicators", "qualname": "MACDResult.__init__", "kind": "function", "doc": "Method generated by attrs for class MACDResult.
\n", "signature": "(macd: float, signal: float, hist: float)"}, "pybottrader.indicators.MACDResult.macd": {"fullname": "pybottrader.indicators.MACDResult.macd", "modulename": "pybottrader.indicators", "qualname": "MACDResult.macd", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.indicators.MACDResult.signal": {"fullname": "pybottrader.indicators.MACDResult.signal", "modulename": "pybottrader.indicators", "qualname": "MACDResult.signal", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.indicators.MACDResult.hist": {"fullname": "pybottrader.indicators.MACDResult.hist", "modulename": "pybottrader.indicators", "qualname": "MACDResult.hist", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.indicators.MACD": {"fullname": "pybottrader.indicators.MACD", "modulename": "pybottrader.indicators", "qualname": "MACD", "kind": "class", "doc": "Base class to build indicators. It provides a buffer to\nkeep the last mem_size
values and functions to push\nnew values and retrieve using bracket notation or the\nfunction get.
All derived classes, call the __init__ method of this class\nand when an update ocurrs, they push the new value\ninto the memory buffer.
\n\nBecause this class is intended to be used for time series,\nindices go backwards, being 0
the last updated value, -1\nthe previous one, -2 the previous of the previos one...\nIf a value is requested with a positive index or a negative\nindex which absolute values is greater than mem_size
, then\nan NAN value is returned.
@param mem_size: The size of the memory buffer. The\n default value is 1.
\n", "signature": "(\tshort_period: float,\tlong_period: float,\tdiff_period: float,\t*args,\t**kwargs)"}, "pybottrader.indicators.MACD.short": {"fullname": "pybottrader.indicators.MACD.short", "modulename": "pybottrader.indicators", "qualname": "MACD.short", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.indicators.EMA"}, "pybottrader.indicators.MACD.long": {"fullname": "pybottrader.indicators.MACD.long", "modulename": "pybottrader.indicators", "qualname": "MACD.long", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.indicators.EMA"}, "pybottrader.indicators.MACD.diff": {"fullname": "pybottrader.indicators.MACD.diff", "modulename": "pybottrader.indicators", "qualname": "MACD.diff", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.indicators.EMA"}, "pybottrader.indicators.MACD.start": {"fullname": "pybottrader.indicators.MACD.start", "modulename": "pybottrader.indicators", "qualname": "MACD.start", "kind": "variable", "doc": "\n", "annotation": ": int"}, "pybottrader.indicators.MACD.counter": {"fullname": "pybottrader.indicators.MACD.counter", "modulename": "pybottrader.indicators", "qualname": "MACD.counter", "kind": "variable", "doc": "\n", "default_value": "0"}, "pybottrader.indicators.MACD.update": {"fullname": "pybottrader.indicators.MACD.update", "modulename": "pybottrader.indicators", "qualname": "MACD.update", "kind": "function", "doc": "\n", "signature": "(self, value: float) -> float:", "funcdef": "def"}, "pybottrader.indicators.roi": {"fullname": "pybottrader.indicators.roi", "modulename": "pybottrader.indicators", "qualname": "roi", "kind": "function", "doc": "Return on investment
\n", "signature": "(initial_value, final_value):", "funcdef": "def"}, "pybottrader.portfolios": {"fullname": "pybottrader.portfolios", "modulename": "pybottrader.portfolios", "kind": "module", "doc": "TRADING PORTFOLIO MODELS
\n\nThis module has beed adapted from:\nhttps://github.com/jailop/trading/tree/main/indicators-c%2B%2B
\n"}, "pybottrader.portfolios.Portfolio": {"fullname": "pybottrader.portfolios.Portfolio", "modulename": "pybottrader.portfolios", "qualname": "Portfolio", "kind": "class", "doc": "Base Portfolio Class
\n"}, "pybottrader.portfolios.Portfolio.__init__": {"fullname": "pybottrader.portfolios.Portfolio.__init__", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.__init__", "kind": "function", "doc": "Init method
\n", "signature": "(cash: float = 1000.0)"}, "pybottrader.portfolios.Portfolio.initial_cash": {"fullname": "pybottrader.portfolios.Portfolio.initial_cash", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.initial_cash", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.portfolios.Portfolio.last_position": {"fullname": "pybottrader.portfolios.Portfolio.last_position", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.last_position", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.strategies.Position"}, "pybottrader.portfolios.Portfolio.last_exchange": {"fullname": "pybottrader.portfolios.Portfolio.last_exchange", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.last_exchange", "kind": "variable", "doc": "\n", "annotation": ": str"}, "pybottrader.portfolios.Portfolio.last_price": {"fullname": "pybottrader.portfolios.Portfolio.last_price", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.last_price", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.portfolios.Portfolio.last_ticker": {"fullname": "pybottrader.portfolios.Portfolio.last_ticker", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.last_ticker", "kind": "variable", "doc": "\n", "annotation": ": str"}, "pybottrader.portfolios.Portfolio.process": {"fullname": "pybottrader.portfolios.Portfolio.process", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.process", "kind": "function", "doc": "Process signal
\n", "signature": "(\tself,\ttime: datetime.datetime = datetime.datetime(2024, 12, 8, 13, 50, 29, 829525),\texchange: str = '',\tticker: str = '',\tposition: pybottrader.strategies.Position = <Position.STAY: 1>,\tprice: float = 0.0):", "funcdef": "def"}, "pybottrader.portfolios.Portfolio.valuation": {"fullname": "pybottrader.portfolios.Portfolio.valuation", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.valuation", "kind": "function", "doc": "Default valuation method
\n", "signature": "(self) -> float:", "funcdef": "def"}, "pybottrader.portfolios.Portfolio.accumulated_return": {"fullname": "pybottrader.portfolios.Portfolio.accumulated_return", "modulename": "pybottrader.portfolios", "qualname": "Portfolio.accumulated_return", "kind": "function", "doc": "Accumulated ROI
\n", "signature": "(self) -> float:", "funcdef": "def"}, "pybottrader.portfolios.DummyPortfolio": {"fullname": "pybottrader.portfolios.DummyPortfolio", "modulename": "pybottrader.portfolios", "qualname": "DummyPortfolio", "kind": "class", "doc": "Dummy portfolio is the most basic portfolio model.\nIt works with only one asset. When it receives the buy signal,\nit uses all the available cash to buy the asset. When it receives\nthe sell signal, it sells all the shares of the asset.
\n", "bases": "Portfolio"}, "pybottrader.portfolios.DummyPortfolio.__init__": {"fullname": "pybottrader.portfolios.DummyPortfolio.__init__", "modulename": "pybottrader.portfolios", "qualname": "DummyPortfolio.__init__", "kind": "function", "doc": "Init method
\n", "signature": "(cash: float = 1000.0)"}, "pybottrader.portfolios.DummyPortfolio.cash": {"fullname": "pybottrader.portfolios.DummyPortfolio.cash", "modulename": "pybottrader.portfolios", "qualname": "DummyPortfolio.cash", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.portfolios.DummyPortfolio.share_units": {"fullname": "pybottrader.portfolios.DummyPortfolio.share_units", "modulename": "pybottrader.portfolios", "qualname": "DummyPortfolio.share_units", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.portfolios.DummyPortfolio.share_price": {"fullname": "pybottrader.portfolios.DummyPortfolio.share_price", "modulename": "pybottrader.portfolios", "qualname": "DummyPortfolio.share_price", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.portfolios.DummyPortfolio.process": {"fullname": "pybottrader.portfolios.DummyPortfolio.process", "modulename": "pybottrader.portfolios", "qualname": "DummyPortfolio.process", "kind": "function", "doc": "Process signal
\n", "signature": "(\tself,\ttime: datetime.datetime = datetime.datetime(2024, 12, 8, 13, 50, 29, 829535),\texchange: str = '',\tticker: str = '',\tposition: pybottrader.strategies.Position = <Position.STAY: 1>,\tprice: float = 0.0):", "funcdef": "def"}, "pybottrader.portfolios.DummyPortfolio.valuation": {"fullname": "pybottrader.portfolios.DummyPortfolio.valuation", "modulename": "pybottrader.portfolios", "qualname": "DummyPortfolio.valuation", "kind": "function", "doc": "Default valuation method
\n", "signature": "(self) -> float:", "funcdef": "def"}, "pybottrader.strategies": {"fullname": "pybottrader.strategies", "modulename": "pybottrader.strategies", "kind": "module", "doc": "Strategies
\n"}, "pybottrader.strategies.Position": {"fullname": "pybottrader.strategies.Position", "modulename": "pybottrader.strategies", "qualname": "Position", "kind": "class", "doc": "Trading Positions
\n", "bases": "enum.Enum"}, "pybottrader.strategies.Position.STAY": {"fullname": "pybottrader.strategies.Position.STAY", "modulename": "pybottrader.strategies", "qualname": "Position.STAY", "kind": "variable", "doc": "\n", "default_value": "<Position.STAY: 1>"}, "pybottrader.strategies.Position.BUY": {"fullname": "pybottrader.strategies.Position.BUY", "modulename": "pybottrader.strategies", "qualname": "Position.BUY", "kind": "variable", "doc": "\n", "default_value": "<Position.BUY: 2>"}, "pybottrader.strategies.Position.SELL": {"fullname": "pybottrader.strategies.Position.SELL", "modulename": "pybottrader.strategies", "qualname": "Position.SELL", "kind": "variable", "doc": "\n", "default_value": "<Position.SELL: 3>"}, "pybottrader.strategies.StrategySignal": {"fullname": "pybottrader.strategies.StrategySignal", "modulename": "pybottrader.strategies", "qualname": "StrategySignal", "kind": "class", "doc": "To report computations of an strategy
\n"}, "pybottrader.strategies.StrategySignal.__init__": {"fullname": "pybottrader.strategies.StrategySignal.__init__", "modulename": "pybottrader.strategies", "qualname": "StrategySignal.__init__", "kind": "function", "doc": "Method generated by attrs for class StrategySignal.
\n", "signature": "(\ttime: datetime.datetime = datetime.datetime(2024, 12, 8, 13, 50, 29, 829062),\tposition: pybottrader.strategies.Position = <Position.STAY: 1>,\tprice: float = 0.0,\tticker: str = '',\texchange: str = '')"}, "pybottrader.strategies.StrategySignal.time": {"fullname": "pybottrader.strategies.StrategySignal.time", "modulename": "pybottrader.strategies", "qualname": "StrategySignal.time", "kind": "variable", "doc": "\n", "annotation": ": datetime.datetime"}, "pybottrader.strategies.StrategySignal.position": {"fullname": "pybottrader.strategies.StrategySignal.position", "modulename": "pybottrader.strategies", "qualname": "StrategySignal.position", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.strategies.Position"}, "pybottrader.strategies.StrategySignal.price": {"fullname": "pybottrader.strategies.StrategySignal.price", "modulename": "pybottrader.strategies", "qualname": "StrategySignal.price", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.strategies.StrategySignal.ticker": {"fullname": "pybottrader.strategies.StrategySignal.ticker", "modulename": "pybottrader.strategies", "qualname": "StrategySignal.ticker", "kind": "variable", "doc": "\n", "annotation": ": str"}, "pybottrader.strategies.StrategySignal.exchange": {"fullname": "pybottrader.strategies.StrategySignal.exchange", "modulename": "pybottrader.strategies", "qualname": "StrategySignal.exchange", "kind": "variable", "doc": "\n", "annotation": ": str"}, "pybottrader.strategies.Strategy": {"fullname": "pybottrader.strategies.Strategy", "modulename": "pybottrader.strategies", "qualname": "Strategy", "kind": "class", "doc": "Base class for strategies
\n"}, "pybottrader.strategies.Strategy.__init__": {"fullname": "pybottrader.strategies.Strategy.__init__", "modulename": "pybottrader.strategies", "qualname": "Strategy.__init__", "kind": "function", "doc": "Init Method. Included for future support.
\n", "signature": "(*args, **kwargs)"}, "pybottrader.strategies.Strategy.evaluate": {"fullname": "pybottrader.strategies.Strategy.evaluate", "modulename": "pybottrader.strategies", "qualname": "Strategy.evaluate", "kind": "function", "doc": "Evaluate method. Include for future support
\n", "signature": "(self, *args, **kwargs) -> pybottrader.strategies.StrategySignal:", "funcdef": "def"}, "pybottrader.traders": {"fullname": "pybottrader.traders", "modulename": "pybottrader.traders", "kind": "module", "doc": "A collection of bottraders
\n"}, "pybottrader.traders.TradingIteration": {"fullname": "pybottrader.traders.TradingIteration", "modulename": "pybottrader.traders", "qualname": "TradingIteration", "kind": "class", "doc": "Used to report results from a trading iteration
\n"}, "pybottrader.traders.TradingIteration.__init__": {"fullname": "pybottrader.traders.TradingIteration.__init__", "modulename": "pybottrader.traders", "qualname": "TradingIteration.__init__", "kind": "function", "doc": "Method generated by attrs for class TradingIteration.
\n", "signature": "(\tsignal: pybottrader.strategies.StrategySignal,\tdata: dict,\troi: Optional[float],\tportfolio_value: float,\taccumulated_roi: Optional[float])"}, "pybottrader.traders.TradingIteration.signal": {"fullname": "pybottrader.traders.TradingIteration.signal", "modulename": "pybottrader.traders", "qualname": "TradingIteration.signal", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.strategies.StrategySignal"}, "pybottrader.traders.TradingIteration.data": {"fullname": "pybottrader.traders.TradingIteration.data", "modulename": "pybottrader.traders", "qualname": "TradingIteration.data", "kind": "variable", "doc": "\n", "annotation": ": dict"}, "pybottrader.traders.TradingIteration.roi": {"fullname": "pybottrader.traders.TradingIteration.roi", "modulename": "pybottrader.traders", "qualname": "TradingIteration.roi", "kind": "variable", "doc": "\n", "annotation": ": Optional[float]"}, "pybottrader.traders.TradingIteration.portfolio_value": {"fullname": "pybottrader.traders.TradingIteration.portfolio_value", "modulename": "pybottrader.traders", "qualname": "TradingIteration.portfolio_value", "kind": "variable", "doc": "\n", "annotation": ": float"}, "pybottrader.traders.TradingIteration.accumulated_roi": {"fullname": "pybottrader.traders.TradingIteration.accumulated_roi", "modulename": "pybottrader.traders", "qualname": "TradingIteration.accumulated_roi", "kind": "variable", "doc": "\n", "annotation": ": Optional[float]"}, "pybottrader.traders.Trader": {"fullname": "pybottrader.traders.Trader", "modulename": "pybottrader.traders", "qualname": "Trader", "kind": "class", "doc": "Base class
\n"}, "pybottrader.traders.Trader.__init__": {"fullname": "pybottrader.traders.Trader.__init__", "modulename": "pybottrader.traders", "qualname": "Trader.__init__", "kind": "function", "doc": "Init method
\n", "signature": "(\tstrategy: pybottrader.strategies.Strategy,\tportfolio: pybottrader.portfolios.Portfolio,\tdatastream: pybottrader.datastreamers.DataStreamer)"}, "pybottrader.traders.Trader.portfolio": {"fullname": "pybottrader.traders.Trader.portfolio", "modulename": "pybottrader.traders", "qualname": "Trader.portfolio", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.portfolios.Portfolio"}, "pybottrader.traders.Trader.datastream": {"fullname": "pybottrader.traders.Trader.datastream", "modulename": "pybottrader.traders", "qualname": "Trader.datastream", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.datastreamers.DataStreamer"}, "pybottrader.traders.Trader.strategy": {"fullname": "pybottrader.traders.Trader.strategy", "modulename": "pybottrader.traders", "qualname": "Trader.strategy", "kind": "variable", "doc": "\n", "annotation": ": pybottrader.strategies.Strategy"}, "pybottrader.traders.Trader.last_result": {"fullname": "pybottrader.traders.Trader.last_result", "modulename": "pybottrader.traders", "qualname": "Trader.last_result", "kind": "variable", "doc": "\n", "annotation": ": Optional[pybottrader.traders.TradingIteration]", "default_value": "None"}, "pybottrader.traders.Trader.last_valuation": {"fullname": "pybottrader.traders.Trader.last_valuation", "modulename": "pybottrader.traders", "qualname": "Trader.last_valuation", "kind": "variable", "doc": "\n", "annotation": ": float", "default_value": "0.0"}, "pybottrader.traders.Trader.next": {"fullname": "pybottrader.traders.Trader.next", "modulename": "pybottrader.traders", "qualname": "Trader.next", "kind": "function", "doc": "Perfoms a trading iteration
\n", "signature": "(self) -> bool:", "funcdef": "def"}, "pybottrader.traders.Trader.status": {"fullname": "pybottrader.traders.Trader.status", "modulename": "pybottrader.traders", "qualname": "Trader.status", "kind": "function", "doc": "Trader last result
\n", "signature": "(self) -> pybottrader.traders.TradingIteration:", "funcdef": "def"}, "pybottrader.traders.Trader.run": {"fullname": "pybottrader.traders.Trader.run", "modulename": "pybottrader.traders", "qualname": "Trader.run", "kind": "function", "doc": "A default runner
\n", "signature": "(self):", "funcdef": "def"}}, "docInfo": {"pybottrader": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 23}, "pybottrader.datastreamers": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 4}, "pybottrader.datastreamers.DataStreamer": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 7}, "pybottrader.datastreamers.DataStreamer.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 4, "bases": 0, "doc": 4}, "pybottrader.datastreamers.DataStreamer.next": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 4}, "pybottrader.datastreamers.YFinanceStreamer": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 8}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 23, "bases": 0, "doc": 4}, "pybottrader.datastreamers.YFinanceStreamer.index": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.datastreamers.YFinanceStreamer.data": {"qualname": 2, "fullname": 4, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.datastreamers.YFinanceStreamer.next": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 4}, "pybottrader.datastreamers.CSVFileStreamer": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 6}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 4}, "pybottrader.datastreamers.CSVFileStreamer.data": {"qualname": 2, "fullname": 4, "annotation": 5, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.datastreamers.CSVFileStreamer.index": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.datastreamers.CSVFileStreamer.next": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 4}, "pybottrader.indicators": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 12}, "pybottrader.indicators.Indicator": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 128}, "pybottrader.indicators.Indicator.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 15, "bases": 0, "doc": 17}, "pybottrader.indicators.Indicator.mem_pos": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.Indicator.mem_data": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.Indicator.mem_size": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.Indicator.push": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 36}, "pybottrader.indicators.Indicator.get": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 10}, "pybottrader.indicators.MA": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 4}, "pybottrader.indicators.MA.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 17}, "pybottrader.indicators.MA.period": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MA.prevs": {"qualname": 2, "fullname": 4, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MA.length": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MA.pos": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MA.accum": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MA.update": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 10}, "pybottrader.indicators.EMA": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 5}, "pybottrader.indicators.EMA.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 17}, "pybottrader.indicators.EMA.period": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.EMA.alpha": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.EMA.smooth_factor": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.EMA.length": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.EMA.prev": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.EMA.update": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 10}, "pybottrader.indicators.ROI": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 9}, "pybottrader.indicators.ROI.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 18, "bases": 0, "doc": 17}, "pybottrader.indicators.ROI.prev": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.ROI.update": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 24}, "pybottrader.indicators.RSI": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 128}, "pybottrader.indicators.RSI.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 17}, "pybottrader.indicators.RSI.gains": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.RSI.losses": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.RSI.update": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 3}, "pybottrader.indicators.MACDResult": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACDResult.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 34, "bases": 0, "doc": 10}, "pybottrader.indicators.MACDResult.macd": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACDResult.signal": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACDResult.hist": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACD": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 128}, "pybottrader.indicators.MACD.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 56, "bases": 0, "doc": 17}, "pybottrader.indicators.MACD.short": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACD.long": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACD.diff": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACD.start": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACD.counter": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.indicators.MACD.update": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 3}, "pybottrader.indicators.roi": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 18, "bases": 0, "doc": 5}, "pybottrader.portfolios": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 18}, "pybottrader.portfolios.Portfolio": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 5}, "pybottrader.portfolios.Portfolio.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 4}, "pybottrader.portfolios.Portfolio.initial_cash": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.portfolios.Portfolio.last_position": {"qualname": 3, "fullname": 5, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.portfolios.Portfolio.last_exchange": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.portfolios.Portfolio.last_price": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.portfolios.Portfolio.last_ticker": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.portfolios.Portfolio.process": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 191, "bases": 0, "doc": 4}, "pybottrader.portfolios.Portfolio.valuation": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 5}, "pybottrader.portfolios.Portfolio.accumulated_return": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 4}, "pybottrader.portfolios.DummyPortfolio": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 47}, "pybottrader.portfolios.DummyPortfolio.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 4}, "pybottrader.portfolios.DummyPortfolio.cash": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.portfolios.DummyPortfolio.share_units": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.portfolios.DummyPortfolio.share_price": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.portfolios.DummyPortfolio.process": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 191, "bases": 0, "doc": 4}, "pybottrader.portfolios.DummyPortfolio.valuation": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 5}, "pybottrader.strategies": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.Position": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 4}, "pybottrader.strategies.Position.STAY": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.Position.BUY": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.Position.SELL": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.StrategySignal": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 8}, "pybottrader.strategies.StrategySignal.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 183, "bases": 0, "doc": 10}, "pybottrader.strategies.StrategySignal.time": {"qualname": 2, "fullname": 4, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.StrategySignal.position": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.StrategySignal.price": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.StrategySignal.ticker": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.StrategySignal.exchange": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.strategies.Strategy": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 6}, "pybottrader.strategies.Strategy.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 18, "bases": 0, "doc": 9}, "pybottrader.strategies.Strategy.evaluate": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 38, "bases": 0, "doc": 8}, "pybottrader.traders": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 6}, "pybottrader.traders.TradingIteration": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 10}, "pybottrader.traders.TradingIteration.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 83, "bases": 0, "doc": 10}, "pybottrader.traders.TradingIteration.signal": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.TradingIteration.data": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.TradingIteration.roi": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.TradingIteration.portfolio_value": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.TradingIteration.accumulated_roi": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.Trader": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 4}, "pybottrader.traders.Trader.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 67, "bases": 0, "doc": 4}, "pybottrader.traders.Trader.portfolio": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.Trader.datastream": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.Trader.strategy": {"qualname": 2, "fullname": 4, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.Trader.last_result": {"qualname": 3, "fullname": 5, "annotation": 4, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.Trader.last_valuation": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}, "pybottrader.traders.Trader.next": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 6}, "pybottrader.traders.Trader.status": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 5}, "pybottrader.traders.Trader.run": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 5}}, "length": 113, "save": true}, "index": {"qualname": {"root": {"docs": {"pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 16, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.traders.TradingIteration.data": {"tf": 1}}, "df": 4, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.traders.Trader.datastream": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.DataStreamer": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.next": {"tf": 1}}, "df": 3}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"pybottrader.indicators.MACD.diff": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}}, "df": 7}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 16, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.index": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.Indicator.get": {"tf": 1}}, "df": 7}}}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}}, "df": 4}}}}, "y": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.index": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.MACD.counter": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1}}, "df": 2}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1}}, "df": 3}}, "a": {"docs": {"pybottrader.indicators.MA": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.MA.period": {"tf": 1}, "pybottrader.indicators.MA.prevs": {"tf": 1}, "pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}, "pybottrader.indicators.MA.accum": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}}, "df": 8, "c": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MACDResult.macd": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.indicators.MACD.short": {"tf": 1}, "pybottrader.indicators.MACD.long": {"tf": 1}, "pybottrader.indicators.MACD.diff": {"tf": 1}, "pybottrader.indicators.MACD.start": {"tf": 1}, "pybottrader.indicators.MACD.counter": {"tf": 1}, "pybottrader.indicators.MACD.update": {"tf": 1}}, "df": 9, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACDResult": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACDResult.macd": {"tf": 1}, "pybottrader.indicators.MACDResult.signal": {"tf": 1}, "pybottrader.indicators.MACDResult.hist": {"tf": 1}}, "df": 5}}}}}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.strategies.Position": {"tf": 1}, "pybottrader.strategies.Position.STAY": {"tf": 1}, "pybottrader.strategies.Position.BUY": {"tf": 1}, "pybottrader.strategies.Position.SELL": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}}, "df": 6}}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.portfolios.Portfolio": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}, "pybottrader.traders.Trader.portfolio": {"tf": 1}}, "df": 12}}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MA.period": {"tf": 1}, "pybottrader.indicators.EMA.period": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {"pybottrader.indicators.EMA.prev": {"tf": 1}, "pybottrader.indicators.ROI.prev": {"tf": 1}}, "df": 2, "s": {"docs": {"pybottrader.indicators.MA.prevs": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}, "pybottrader.strategies.StrategySignal.price": {"tf": 1}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}}, "df": 2}}}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator.mem_size": {"tf": 1}}, "df": 1}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.indicators.MACDResult.signal": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}}, "df": 2}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.EMA.smooth_factor": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACD.short": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}}, "df": 2}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACD.start": {"tf": 1}}, "df": 1}}, "y": {"docs": {"pybottrader.strategies.Position.STAY": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.traders.Trader.status": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.strategies.Strategy": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}}, "df": 4, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.strategies.StrategySignal": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.time": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}, "pybottrader.strategies.StrategySignal.price": {"tf": 1}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1}}, "df": 7}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.strategies.Position.SELL": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator.get": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.RSI.gains": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.EMA.length": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.RSI.losses": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.indicators.MACD.long": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.traders.Trader.last_result": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}}, "df": 6}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.indicators.MA.accum": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}}, "df": 2}}}}}}}}}}, "l": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.indicators.EMA.alpha": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI.update": {"tf": 1}, "pybottrader.indicators.MACD.update": {"tf": 1}}, "df": 5}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.indicators.EMA": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.period": {"tf": 1}, "pybottrader.indicators.EMA.alpha": {"tf": 1}, "pybottrader.indicators.EMA.smooth_factor": {"tf": 1}, "pybottrader.indicators.EMA.length": {"tf": 1}, "pybottrader.indicators.EMA.prev": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}}, "df": 8}}, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1}}, "df": 2}}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.EMA.smooth_factor": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {"pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.ROI.prev": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}}, "df": 7}}, "s": {"docs": {}, "df": 0, "i": {"docs": {"pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.gains": {"tf": 1}, "pybottrader.indicators.RSI.losses": {"tf": 1}, "pybottrader.indicators.RSI.update": {"tf": 1}}, "df": 5}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.traders.Trader.last_result": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders.Trader.run": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACDResult.hist": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1}}, "df": 2}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.strategies.StrategySignal.time": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders.TradingIteration": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}, "pybottrader.traders.TradingIteration.data": {"tf": 1}, "pybottrader.traders.TradingIteration.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}}, "df": 7}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.traders.Trader": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}, "pybottrader.traders.Trader.portfolio": {"tf": 1}, "pybottrader.traders.Trader.datastream": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}, "pybottrader.traders.Trader.last_result": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}, "pybottrader.traders.Trader.status": {"tf": 1}, "pybottrader.traders.Trader.run": {"tf": 1}}, "df": 10}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}}, "df": 3}}}}}, "e": {"docs": {"pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.strategies.Position.BUY": {"tf": 1}}, "df": 1}}}}}, "fullname": {"root": {"docs": {"pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 16, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader": {"tf": 1}, "pybottrader.datastreamers": {"tf": 1}, "pybottrader.datastreamers.DataStreamer": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.index": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}, "pybottrader.indicators": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.Indicator.get": {"tf": 1}, "pybottrader.indicators.MA": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.MA.period": {"tf": 1}, "pybottrader.indicators.MA.prevs": {"tf": 1}, "pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}, "pybottrader.indicators.MA.accum": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.period": {"tf": 1}, "pybottrader.indicators.EMA.alpha": {"tf": 1}, "pybottrader.indicators.EMA.smooth_factor": {"tf": 1}, "pybottrader.indicators.EMA.length": {"tf": 1}, "pybottrader.indicators.EMA.prev": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.ROI.prev": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.gains": {"tf": 1}, "pybottrader.indicators.RSI.losses": {"tf": 1}, "pybottrader.indicators.RSI.update": {"tf": 1}, "pybottrader.indicators.MACDResult": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACDResult.macd": {"tf": 1}, "pybottrader.indicators.MACDResult.signal": {"tf": 1}, "pybottrader.indicators.MACDResult.hist": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.indicators.MACD.short": {"tf": 1}, "pybottrader.indicators.MACD.long": {"tf": 1}, "pybottrader.indicators.MACD.diff": {"tf": 1}, "pybottrader.indicators.MACD.start": {"tf": 1}, "pybottrader.indicators.MACD.counter": {"tf": 1}, "pybottrader.indicators.MACD.update": {"tf": 1}, "pybottrader.indicators.roi": {"tf": 1}, "pybottrader.portfolios": {"tf": 1}, "pybottrader.portfolios.Portfolio": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}, "pybottrader.strategies": {"tf": 1}, "pybottrader.strategies.Position": {"tf": 1}, "pybottrader.strategies.Position.STAY": {"tf": 1}, "pybottrader.strategies.Position.BUY": {"tf": 1}, "pybottrader.strategies.Position.SELL": {"tf": 1}, "pybottrader.strategies.StrategySignal": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.time": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}, "pybottrader.strategies.StrategySignal.price": {"tf": 1}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1}, "pybottrader.strategies.Strategy": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders": {"tf": 1}, "pybottrader.traders.TradingIteration": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}, "pybottrader.traders.TradingIteration.data": {"tf": 1}, "pybottrader.traders.TradingIteration.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}, "pybottrader.traders.Trader": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}, "pybottrader.traders.Trader.portfolio": {"tf": 1}, "pybottrader.traders.Trader.datastream": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}, "pybottrader.traders.Trader.last_result": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}, "pybottrader.traders.Trader.status": {"tf": 1}, "pybottrader.traders.Trader.run": {"tf": 1}}, "df": 113}}}}}}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.strategies.Position": {"tf": 1}, "pybottrader.strategies.Position.STAY": {"tf": 1}, "pybottrader.strategies.Position.BUY": {"tf": 1}, "pybottrader.strategies.Position.SELL": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}}, "df": 6}}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.portfolios.Portfolio": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}, "pybottrader.traders.Trader.portfolio": {"tf": 1}}, "df": 12, "s": {"docs": {"pybottrader.portfolios": {"tf": 1}, "pybottrader.portfolios.Portfolio": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}}, "df": 18}}}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MA.period": {"tf": 1}, "pybottrader.indicators.EMA.period": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {"pybottrader.indicators.EMA.prev": {"tf": 1}, "pybottrader.indicators.ROI.prev": {"tf": 1}}, "df": 2, "s": {"docs": {"pybottrader.indicators.MA.prevs": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}, "pybottrader.strategies.StrategySignal.price": {"tf": 1}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}}, "df": 2}}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.traders.TradingIteration.data": {"tf": 1}}, "df": 4, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.traders.Trader.datastream": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.DataStreamer": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.next": {"tf": 1}}, "df": 3, "s": {"docs": {"pybottrader.datastreamers": {"tf": 1}, "pybottrader.datastreamers.DataStreamer": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.index": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}}, "df": 14}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"pybottrader.indicators.MACD.diff": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}}, "df": 7}}}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 16, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.index": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.Indicator.get": {"tf": 1}}, "df": 7, "s": {"docs": {"pybottrader.indicators": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.Indicator.get": {"tf": 1}, "pybottrader.indicators.MA": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.MA.period": {"tf": 1}, "pybottrader.indicators.MA.prevs": {"tf": 1}, "pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}, "pybottrader.indicators.MA.accum": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.period": {"tf": 1}, "pybottrader.indicators.EMA.alpha": {"tf": 1}, "pybottrader.indicators.EMA.smooth_factor": {"tf": 1}, "pybottrader.indicators.EMA.length": {"tf": 1}, "pybottrader.indicators.EMA.prev": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.ROI.prev": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.gains": {"tf": 1}, "pybottrader.indicators.RSI.losses": {"tf": 1}, "pybottrader.indicators.RSI.update": {"tf": 1}, "pybottrader.indicators.MACDResult": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACDResult.macd": {"tf": 1}, "pybottrader.indicators.MACDResult.signal": {"tf": 1}, "pybottrader.indicators.MACDResult.hist": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.indicators.MACD.short": {"tf": 1}, "pybottrader.indicators.MACD.long": {"tf": 1}, "pybottrader.indicators.MACD.diff": {"tf": 1}, "pybottrader.indicators.MACD.start": {"tf": 1}, "pybottrader.indicators.MACD.counter": {"tf": 1}, "pybottrader.indicators.MACD.update": {"tf": 1}, "pybottrader.indicators.roi": {"tf": 1}}, "df": 47}}}}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}}, "df": 4}}}}, "y": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.index": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.MACD.counter": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1}}, "df": 2}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1}}, "df": 3}}, "a": {"docs": {"pybottrader.indicators.MA": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.MA.period": {"tf": 1}, "pybottrader.indicators.MA.prevs": {"tf": 1}, "pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}, "pybottrader.indicators.MA.accum": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}}, "df": 8, "c": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MACDResult.macd": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.indicators.MACD.short": {"tf": 1}, "pybottrader.indicators.MACD.long": {"tf": 1}, "pybottrader.indicators.MACD.diff": {"tf": 1}, "pybottrader.indicators.MACD.start": {"tf": 1}, "pybottrader.indicators.MACD.counter": {"tf": 1}, "pybottrader.indicators.MACD.update": {"tf": 1}}, "df": 9, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACDResult": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACDResult.macd": {"tf": 1}, "pybottrader.indicators.MACDResult.signal": {"tf": 1}, "pybottrader.indicators.MACDResult.hist": {"tf": 1}}, "df": 5}}}}}}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator.mem_size": {"tf": 1}}, "df": 1}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.indicators.MACDResult.signal": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}}, "df": 2}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.EMA.smooth_factor": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACD.short": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}}, "df": 2}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACD.start": {"tf": 1}}, "df": 1}}, "y": {"docs": {"pybottrader.strategies.Position.STAY": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.traders.Trader.status": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.strategies": {"tf": 1}, "pybottrader.strategies.Position": {"tf": 1}, "pybottrader.strategies.Position.STAY": {"tf": 1}, "pybottrader.strategies.Position.BUY": {"tf": 1}, "pybottrader.strategies.Position.SELL": {"tf": 1}, "pybottrader.strategies.StrategySignal": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.time": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}, "pybottrader.strategies.StrategySignal.price": {"tf": 1}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1}, "pybottrader.strategies.Strategy": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 15}}}, "y": {"docs": {"pybottrader.strategies.Strategy": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}}, "df": 4, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.strategies.StrategySignal": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.time": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}, "pybottrader.strategies.StrategySignal.price": {"tf": 1}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1}}, "df": 7}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.strategies.Position.SELL": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator.get": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.RSI.gains": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.EMA.length": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.RSI.losses": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.indicators.MACD.long": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.traders.Trader.last_result": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}}, "df": 6}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.indicators.MA.accum": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}}, "df": 2}}}}}}}}}}, "l": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.indicators.EMA.alpha": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI.update": {"tf": 1}, "pybottrader.indicators.MACD.update": {"tf": 1}}, "df": 5}}}}}, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.indicators.EMA": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.period": {"tf": 1}, "pybottrader.indicators.EMA.alpha": {"tf": 1}, "pybottrader.indicators.EMA.smooth_factor": {"tf": 1}, "pybottrader.indicators.EMA.length": {"tf": 1}, "pybottrader.indicators.EMA.prev": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}}, "df": 8}}, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1}}, "df": 2}}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.EMA.smooth_factor": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {"pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.ROI.prev": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}}, "df": 7}}, "s": {"docs": {}, "df": 0, "i": {"docs": {"pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.gains": {"tf": 1}, "pybottrader.indicators.RSI.losses": {"tf": 1}, "pybottrader.indicators.RSI.update": {"tf": 1}}, "df": 5}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.traders.Trader.last_result": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders.Trader.run": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACDResult.hist": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1}}, "df": 2}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.strategies.StrategySignal.time": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.traders.Trader": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}, "pybottrader.traders.Trader.portfolio": {"tf": 1}, "pybottrader.traders.Trader.datastream": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}, "pybottrader.traders.Trader.last_result": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}, "pybottrader.traders.Trader.status": {"tf": 1}, "pybottrader.traders.Trader.run": {"tf": 1}}, "df": 10, "s": {"docs": {"pybottrader.traders": {"tf": 1}, "pybottrader.traders.TradingIteration": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}, "pybottrader.traders.TradingIteration.data": {"tf": 1}, "pybottrader.traders.TradingIteration.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}, "pybottrader.traders.Trader": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}, "pybottrader.traders.Trader.portfolio": {"tf": 1}, "pybottrader.traders.Trader.datastream": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}, "pybottrader.traders.Trader.last_result": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}, "pybottrader.traders.Trader.status": {"tf": 1}, "pybottrader.traders.Trader.run": {"tf": 1}}, "df": 18}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders.TradingIteration": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}, "pybottrader.traders.TradingIteration.data": {"tf": 1}, "pybottrader.traders.TradingIteration.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}}, "df": 7}}}}}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}}, "df": 3}}}}}, "e": {"docs": {"pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.strategies.Position.BUY": {"tf": 1}}, "df": 1}}}}}, "annotation": {"root": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1}, "pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1}, "pybottrader.indicators.MA.period": {"tf": 1}, "pybottrader.indicators.MA.prevs": {"tf": 1}, "pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}, "pybottrader.indicators.MA.accum": {"tf": 1}, "pybottrader.indicators.EMA.period": {"tf": 1}, "pybottrader.indicators.EMA.alpha": {"tf": 1}, "pybottrader.indicators.EMA.smooth_factor": {"tf": 1}, "pybottrader.indicators.EMA.length": {"tf": 1}, "pybottrader.indicators.EMA.prev": {"tf": 1}, "pybottrader.indicators.ROI.prev": {"tf": 1}, "pybottrader.indicators.RSI.gains": {"tf": 1}, "pybottrader.indicators.RSI.losses": {"tf": 1}, "pybottrader.indicators.MACDResult.macd": {"tf": 1}, "pybottrader.indicators.MACDResult.signal": {"tf": 1}, "pybottrader.indicators.MACDResult.hist": {"tf": 1}, "pybottrader.indicators.MACD.short": {"tf": 1}, "pybottrader.indicators.MACD.long": {"tf": 1}, "pybottrader.indicators.MACD.diff": {"tf": 1}, "pybottrader.indicators.MACD.start": {"tf": 1}, "pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}, "pybottrader.strategies.StrategySignal.time": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}, "pybottrader.strategies.StrategySignal.price": {"tf": 1}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}, "pybottrader.traders.TradingIteration.data": {"tf": 1}, "pybottrader.traders.TradingIteration.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}, "pybottrader.traders.Trader.portfolio": {"tf": 1}, "pybottrader.traders.Trader.datastream": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}, "pybottrader.traders.Trader.last_result": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}}, "df": 49, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}}, "df": 2}}}}}, "y": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.RSI.gains": {"tf": 1}, "pybottrader.indicators.RSI.losses": {"tf": 1}, "pybottrader.indicators.MACD.short": {"tf": 1}, "pybottrader.indicators.MACD.long": {"tf": 1}, "pybottrader.indicators.MACD.diff": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}, "pybottrader.traders.Trader.portfolio": {"tf": 1}, "pybottrader.traders.Trader.datastream": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}}, "df": 11}}}}}}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.traders.Trader.portfolio": {"tf": 1}}, "df": 1, "s": {"docs": {"pybottrader.traders.Trader.portfolio": {"tf": 1}}, "df": 1}}}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}}, "df": 2}}}}, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MA.accum": {"tf": 1}, "pybottrader.indicators.EMA.period": {"tf": 1}, "pybottrader.indicators.EMA.alpha": {"tf": 1}, "pybottrader.indicators.EMA.smooth_factor": {"tf": 1}, "pybottrader.indicators.EMA.prev": {"tf": 1}, "pybottrader.indicators.ROI.prev": {"tf": 1}, "pybottrader.indicators.MACDResult.macd": {"tf": 1}, "pybottrader.indicators.MACDResult.signal": {"tf": 1}, "pybottrader.indicators.MACDResult.hist": {"tf": 1}, "pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1}, "pybottrader.strategies.StrategySignal.price": {"tf": 1}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1}}, "df": 17}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.traders.Trader.datastream": {"tf": 1}}, "df": 1, "s": {"docs": {"pybottrader.traders.Trader.datastream": {"tf": 1}}, "df": 1}}}}}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.strategies.StrategySignal.time": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.traders.TradingIteration.data": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1}, "pybottrader.indicators.Indicator.mem_pos": {"tf": 1}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1}, "pybottrader.indicators.MA.period": {"tf": 1}, "pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}, "pybottrader.indicators.EMA.length": {"tf": 1}, "pybottrader.indicators.MACD.start": {"tf": 1}}, "df": 8}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.RSI.gains": {"tf": 1}, "pybottrader.indicators.RSI.losses": {"tf": 1}, "pybottrader.indicators.MACD.short": {"tf": 1}, "pybottrader.indicators.MACD.long": {"tf": 1}, "pybottrader.indicators.MACD.diff": {"tf": 1}}, "df": 5}}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator.mem_data": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.indicators.MA.prevs": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.indicators.MA.prevs": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.indicators.RSI.gains": {"tf": 1}, "pybottrader.indicators.RSI.losses": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.indicators.MACD.short": {"tf": 1}, "pybottrader.indicators.MACD.long": {"tf": 1}, "pybottrader.indicators.MACD.diff": {"tf": 1}}, "df": 3}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1}}, "df": 4, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.Portfolio.last_position": {"tf": 1}, "pybottrader.strategies.StrategySignal.position": {"tf": 1}, "pybottrader.traders.TradingIteration.signal": {"tf": 1}, "pybottrader.traders.Trader.strategy": {"tf": 1}}, "df": 4}}}, "y": {"docs": {"pybottrader.traders.Trader.strategy": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.traders.TradingIteration.signal": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.traders.TradingIteration.roi": {"tf": 1}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.traders.Trader.last_result": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.traders.Trader.last_result": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders.Trader.last_result": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}, "default_value": {"root": {"0": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.index": {"tf": 1}, "pybottrader.indicators.MA.length": {"tf": 1}, "pybottrader.indicators.MA.pos": {"tf": 1}, "pybottrader.indicators.MA.accum": {"tf": 1.4142135623730951}, "pybottrader.indicators.EMA.length": {"tf": 1}, "pybottrader.indicators.EMA.prev": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD.counter": {"tf": 1}, "pybottrader.traders.Trader.last_valuation": {"tf": 1.4142135623730951}}, "df": 8}, "1": {"docs": {"pybottrader.strategies.Position.STAY": {"tf": 1}}, "df": 1}, "2": {"docs": {"pybottrader.strategies.Position.BUY": {"tf": 1}}, "df": 1}, "3": {"docs": {"pybottrader.strategies.Position.SELL": {"tf": 1}}, "df": 1}, "docs": {"pybottrader.strategies.Position.STAY": {"tf": 1.4142135623730951}, "pybottrader.strategies.Position.BUY": {"tf": 1.4142135623730951}, "pybottrader.strategies.Position.SELL": {"tf": 1.4142135623730951}}, "df": 3, "l": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.strategies.Position.STAY": {"tf": 1}, "pybottrader.strategies.Position.BUY": {"tf": 1}, "pybottrader.strategies.Position.SELL": {"tf": 1}}, "df": 3}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.strategies.Position.STAY": {"tf": 1}, "pybottrader.strategies.Position.BUY": {"tf": 1}, "pybottrader.strategies.Position.SELL": {"tf": 1}}, "df": 3}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.strategies.Position.STAY": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.strategies.Position.SELL": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.strategies.Position.STAY": {"tf": 1}, "pybottrader.strategies.Position.BUY": {"tf": 1}, "pybottrader.strategies.Position.SELL": {"tf": 1}}, "df": 3}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.strategies.Position.BUY": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.traders.Trader.last_result": {"tf": 1}}, "df": 1}}}}}}, "signature": {"root": {"0": {"docs": {"pybottrader.indicators.Indicator.get": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1.4142135623730951}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1.4142135623730951}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1.4142135623730951}}, "df": 6}, "1": {"0": {"0": {"0": {"docs": {"pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "2": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}, "3": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}, "4": {"docs": {"pybottrader.indicators.RSI.__init__": {"tf": 1}}, "df": 1}, "docs": {"pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 4}, "2": {"0": {"2": {"4": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "9": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "3": {"9": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 2}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 2}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 2}}, "df": 3}, "docs": {}, "df": 0}, "5": {"0": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "8": {"2": {"9": {"0": {"6": {"2": {"docs": {"pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "5": {"2": {"5": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "3": {"5": {"docs": {"pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}, "docs": {"pybottrader.datastreamers.DataStreamer.__init__": {"tf": 2}, "pybottrader.datastreamers.DataStreamer.next": {"tf": 4.123105625617661}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 4.47213595499958}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 4.123105625617661}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 3.4641016151377544}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 4.123105625617661}, "pybottrader.indicators.Indicator.__init__": {"tf": 3.4641016151377544}, "pybottrader.indicators.Indicator.push": {"tf": 3.7416573867739413}, "pybottrader.indicators.Indicator.get": {"tf": 4.47213595499958}, "pybottrader.indicators.MA.__init__": {"tf": 4.898979485566356}, "pybottrader.indicators.MA.update": {"tf": 4.47213595499958}, "pybottrader.indicators.EMA.__init__": {"tf": 4.898979485566356}, "pybottrader.indicators.EMA.update": {"tf": 4.47213595499958}, "pybottrader.indicators.ROI.__init__": {"tf": 4}, "pybottrader.indicators.ROI.update": {"tf": 4.47213595499958}, "pybottrader.indicators.RSI.__init__": {"tf": 4.898979485566356}, "pybottrader.indicators.RSI.update": {"tf": 5.291502622129181}, "pybottrader.indicators.MACDResult.__init__": {"tf": 5.291502622129181}, "pybottrader.indicators.MACD.__init__": {"tf": 6.708203932499369}, "pybottrader.indicators.MACD.update": {"tf": 4.47213595499958}, "pybottrader.indicators.roi": {"tf": 3.7416573867739413}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 4.242640687119285}, "pybottrader.portfolios.Portfolio.process": {"tf": 12.529964086141668}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 3.4641016151377544}, "pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 3.4641016151377544}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 4.242640687119285}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 12.529964086141668}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 3.4641016151377544}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 12.24744871391589}, "pybottrader.strategies.Strategy.__init__": {"tf": 4}, "pybottrader.strategies.Strategy.evaluate": {"tf": 5.656854249492381}, "pybottrader.traders.TradingIteration.__init__": {"tf": 8.18535277187245}, "pybottrader.traders.Trader.__init__": {"tf": 7.416198487095663}, "pybottrader.traders.Trader.next": {"tf": 3.4641016151377544}, "pybottrader.traders.Trader.status": {"tf": 4.47213595499958}, "pybottrader.traders.Trader.run": {"tf": 3.1622776601683795}}, "df": 36, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "f": {"docs": {"pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.Indicator.get": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI.update": {"tf": 1}, "pybottrader.indicators.MACD.update": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}, "pybottrader.traders.Trader.status": {"tf": 1}, "pybottrader.traders.Trader.run": {"tf": 1}}, "df": 19}}}, "y": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1.4142135623730951}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1.4142135623730951}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1.4142135623730951}}, "df": 4, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 6}}}, "y": {"docs": {"pybottrader.traders.Trader.__init__": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator.__init__": {"tf": 1}}, "df": 1}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 2}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1.4142135623730951}}, "df": 4}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.RSI.update": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 4}}, "f": {"docs": {}, "df": 0, "f": {"docs": {"pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 2}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 2}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 2}}, "df": 3}}}}}, "a": {"docs": {"pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 7}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 8}}}}}, "e": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.indicators.Indicator.get": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.indicators.roi": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator.get": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1.4142135623730951}, "pybottrader.indicators.EMA.update": {"tf": 1.4142135623730951}, "pybottrader.indicators.ROI.update": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI.update": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD.update": {"tf": 1.4142135623730951}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1.7320508075688772}}, "df": 17}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.indicators.Indicator.__init__": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MACDResult.__init__": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.MACD.update": {"tf": 1}, "pybottrader.indicators.roi": {"tf": 1.4142135623730951}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 7}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1.7320508075688772}}, "df": 4}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.RSI.update": {"tf": 1.4142135623730951}, "pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 4}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1.7320508075688772}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1.7320508075688772}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1.7320508075688772}}, "df": 3}}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {"pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 1}}}}}}}}}, "y": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1.7320508075688772}, "pybottrader.traders.Trader.status": {"tf": 1}}, "df": 7}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}}, "df": 3}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.indicators.roi": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.RSI.update": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}}, "df": 2}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACDResult.__init__": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 1}}}, "t": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}}, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.traders.Trader.status": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders.Trader.status": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}}}}}}}}, "g": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 3}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {"pybottrader.traders.TradingIteration.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.traders.Trader.next": {"tf": 1}}, "df": 1}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.MA": {"tf": 1}, "pybottrader.indicators.EMA": {"tf": 1}, "pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 5}}}}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.strategies.Position": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "doc": {"root": {"0": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}, "1": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 8}, "2": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}, "docs": {"pybottrader": {"tf": 3}, "pybottrader.datastreamers": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.DataStreamer": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.DataStreamer.next": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.YFinanceStreamer": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.YFinanceStreamer.index": {"tf": 1.7320508075688772}, "pybottrader.datastreamers.YFinanceStreamer.data": {"tf": 1.7320508075688772}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.CSVFileStreamer": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.CSVFileStreamer.data": {"tf": 1.7320508075688772}, "pybottrader.datastreamers.CSVFileStreamer.index": {"tf": 1.7320508075688772}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1.4142135623730951}, "pybottrader.indicators": {"tf": 2}, "pybottrader.indicators.Indicator": {"tf": 3.872983346207417}, "pybottrader.indicators.Indicator.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.Indicator.mem_pos": {"tf": 1.7320508075688772}, "pybottrader.indicators.Indicator.mem_data": {"tf": 1.7320508075688772}, "pybottrader.indicators.Indicator.mem_size": {"tf": 1.7320508075688772}, "pybottrader.indicators.Indicator.push": {"tf": 2.6457513110645907}, "pybottrader.indicators.Indicator.get": {"tf": 2.449489742783178}, "pybottrader.indicators.MA": {"tf": 1.4142135623730951}, "pybottrader.indicators.MA.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.MA.period": {"tf": 1.7320508075688772}, "pybottrader.indicators.MA.prevs": {"tf": 1.7320508075688772}, "pybottrader.indicators.MA.length": {"tf": 1.7320508075688772}, "pybottrader.indicators.MA.pos": {"tf": 1.7320508075688772}, "pybottrader.indicators.MA.accum": {"tf": 1.7320508075688772}, "pybottrader.indicators.MA.update": {"tf": 1.4142135623730951}, "pybottrader.indicators.EMA": {"tf": 1.4142135623730951}, "pybottrader.indicators.EMA.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.EMA.period": {"tf": 1.7320508075688772}, "pybottrader.indicators.EMA.alpha": {"tf": 1.7320508075688772}, "pybottrader.indicators.EMA.smooth_factor": {"tf": 1.7320508075688772}, "pybottrader.indicators.EMA.length": {"tf": 1.7320508075688772}, "pybottrader.indicators.EMA.prev": {"tf": 1.7320508075688772}, "pybottrader.indicators.EMA.update": {"tf": 1.4142135623730951}, "pybottrader.indicators.ROI": {"tf": 1.7320508075688772}, "pybottrader.indicators.ROI.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.ROI.prev": {"tf": 1.7320508075688772}, "pybottrader.indicators.ROI.update": {"tf": 1.7320508075688772}, "pybottrader.indicators.RSI": {"tf": 3.872983346207417}, "pybottrader.indicators.RSI.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.RSI.gains": {"tf": 1.7320508075688772}, "pybottrader.indicators.RSI.losses": {"tf": 1.7320508075688772}, "pybottrader.indicators.RSI.update": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACDResult": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACDResult.macd": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACDResult.signal": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACDResult.hist": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD": {"tf": 3.872983346207417}, "pybottrader.indicators.MACD.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD.short": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD.long": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD.diff": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD.start": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD.counter": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD.update": {"tf": 1.7320508075688772}, "pybottrader.indicators.roi": {"tf": 1.4142135623730951}, "pybottrader.portfolios": {"tf": 2.449489742783178}, "pybottrader.portfolios.Portfolio": {"tf": 1.4142135623730951}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1.4142135623730951}, "pybottrader.portfolios.Portfolio.initial_cash": {"tf": 1.7320508075688772}, "pybottrader.portfolios.Portfolio.last_position": {"tf": 1.7320508075688772}, "pybottrader.portfolios.Portfolio.last_exchange": {"tf": 1.7320508075688772}, "pybottrader.portfolios.Portfolio.last_price": {"tf": 1.7320508075688772}, "pybottrader.portfolios.Portfolio.last_ticker": {"tf": 1.7320508075688772}, "pybottrader.portfolios.Portfolio.process": {"tf": 1.4142135623730951}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1.4142135623730951}, "pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1.4142135623730951}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1.7320508075688772}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1.4142135623730951}, "pybottrader.portfolios.DummyPortfolio.cash": {"tf": 1.7320508075688772}, "pybottrader.portfolios.DummyPortfolio.share_units": {"tf": 1.7320508075688772}, "pybottrader.portfolios.DummyPortfolio.share_price": {"tf": 1.7320508075688772}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1.4142135623730951}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1.4142135623730951}, "pybottrader.strategies": {"tf": 1.4142135623730951}, "pybottrader.strategies.Position": {"tf": 1.4142135623730951}, "pybottrader.strategies.Position.STAY": {"tf": 1.7320508075688772}, "pybottrader.strategies.Position.BUY": {"tf": 1.7320508075688772}, "pybottrader.strategies.Position.SELL": {"tf": 1.7320508075688772}, "pybottrader.strategies.StrategySignal": {"tf": 1.4142135623730951}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1.7320508075688772}, "pybottrader.strategies.StrategySignal.time": {"tf": 1.7320508075688772}, "pybottrader.strategies.StrategySignal.position": {"tf": 1.7320508075688772}, "pybottrader.strategies.StrategySignal.price": {"tf": 1.7320508075688772}, "pybottrader.strategies.StrategySignal.ticker": {"tf": 1.7320508075688772}, "pybottrader.strategies.StrategySignal.exchange": {"tf": 1.7320508075688772}, "pybottrader.strategies.Strategy": {"tf": 1.4142135623730951}, "pybottrader.strategies.Strategy.__init__": {"tf": 1.7320508075688772}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1.4142135623730951}, "pybottrader.traders": {"tf": 1.4142135623730951}, "pybottrader.traders.TradingIteration": {"tf": 1.4142135623730951}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1.7320508075688772}, "pybottrader.traders.TradingIteration.signal": {"tf": 1.7320508075688772}, "pybottrader.traders.TradingIteration.data": {"tf": 1.7320508075688772}, "pybottrader.traders.TradingIteration.roi": {"tf": 1.7320508075688772}, "pybottrader.traders.TradingIteration.portfolio_value": {"tf": 1.7320508075688772}, "pybottrader.traders.TradingIteration.accumulated_roi": {"tf": 1.7320508075688772}, "pybottrader.traders.Trader": {"tf": 1.4142135623730951}, "pybottrader.traders.Trader.__init__": {"tf": 1.4142135623730951}, "pybottrader.traders.Trader.portfolio": {"tf": 1.7320508075688772}, "pybottrader.traders.Trader.datastream": {"tf": 1.7320508075688772}, "pybottrader.traders.Trader.strategy": {"tf": 1.7320508075688772}, "pybottrader.traders.Trader.last_result": {"tf": 1.7320508075688772}, "pybottrader.traders.Trader.last_valuation": {"tf": 1.7320508075688772}, "pybottrader.traders.Trader.next": {"tf": 1.4142135623730951}, "pybottrader.traders.Trader.status": {"tf": 1.4142135623730951}, "pybottrader.traders.Trader.run": {"tf": 1.4142135623730951}}, "df": 113, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader": {"tf": 1}}, "df": 1}}}}}}}}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {"pybottrader": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}}, "df": 4}}, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.strategies.Position": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.portfolios": {"tf": 1}, "pybottrader.portfolios.Portfolio": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1.4142135623730951}}, "df": 3}}}}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 6}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.traders.Trader.next": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {"pybottrader": {"tf": 1}, "pybottrader.datastreamers.DataStreamer": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 2}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 2}, "pybottrader.indicators.MACD": {"tf": 2}, "pybottrader.traders": {"tf": 1}, "pybottrader.traders.TradingIteration": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}, "pybottrader.traders.Trader.run": {"tf": 1}}, "df": 14, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.DataStreamer": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}}, "n": {"docs": {"pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}, "pybottrader.strategies.StrategySignal": {"tf": 1}}, "df": 5, "d": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.7320508075688772}, "pybottrader.indicators.RSI": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD": {"tf": 1.7320508075688772}}, "df": 3}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators": {"tf": 1}, "pybottrader.indicators.MA": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}}, "df": 5}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.portfolios": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1.4142135623730951}}, "df": 4}}, "s": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.Indicator.get": {"tf": 1}}, "df": 2, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1.7320508075688772}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}}, "df": 2}}}}}}}}, "t": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 3}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}}, "df": 1}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}, "pybottrader.traders.Trader.status": {"tf": 1}}, "df": 4}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader": {"tf": 1.4142135623730951}, "pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 2}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 2}, "pybottrader.indicators.MACD": {"tf": 2}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1}, "pybottrader.strategies.StrategySignal": {"tf": 1}, "pybottrader.traders.TradingIteration": {"tf": 1}}, "df": 10}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader": {"tf": 1}, "pybottrader.traders.Trader.status": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.portfolios": {"tf": 1}, "pybottrader.strategies.Position": {"tf": 1}, "pybottrader.traders.TradingIteration": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}}, "df": 4, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 3}, "pybottrader.indicators.Indicator.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.Indicator.push": {"tf": 2}, "pybottrader.indicators.Indicator.get": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.ROI.update": {"tf": 1.7320508075688772}, "pybottrader.indicators.RSI": {"tf": 3}, "pybottrader.indicators.RSI.__init__": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD": {"tf": 3}, "pybottrader.indicators.MACD.__init__": {"tf": 1.7320508075688772}, "pybottrader.portfolios.DummyPortfolio": {"tf": 2.6457513110645907}}, "df": 15, "y": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}, "n": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}, "s": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}, "pybottrader.portfolios": {"tf": 1}}, "df": 4}}, "a": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 4}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1.4142135623730951}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 9}}}}, "y": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1.4142135623730951}}, "df": 1}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.traders": {"tf": 1}}, "df": 1}}}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.portfolios.Portfolio": {"tf": 1}, "pybottrader.strategies.Strategy": {"tf": 1}, "pybottrader.traders.Trader": {"tf": 1}}, "df": 6}, "i": {"docs": {}, "df": 0, "c": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}}, "df": 1}, "d": {"docs": {"pybottrader.portfolios": {"tf": 1}}, "df": 1}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {"pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 3}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 10, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}}, "df": 1, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}}, "df": 3}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 5}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.roi": {"tf": 1}}, "df": 3}}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 1, "d": {"docs": {"pybottrader.strategies.Strategy.__init__": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 2}}}}}}}}}}}}}, "t": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 2.23606797749979}}, "df": 5, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders.TradingIteration": {"tf": 1}, "pybottrader.traders.Trader.next": {"tf": 1}}, "df": 2}}}}}}}}, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 2}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 2}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 2}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 11}, "f": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 4}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader": {"tf": 1}}, "df": 1, "+": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"pybottrader": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.indicators.Indicator.get": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 3}}}}}}}}, "o": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}}, "c": {"docs": {"pybottrader.indicators": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader": {"tf": 1}}, "df": 1}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators": {"tf": 1}, "pybottrader.portfolios": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.strategies.StrategySignal": {"tf": 1}}, "df": 1}}}}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.traders": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.datastreamers.DataStreamer": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1.7320508075688772}, "pybottrader.indicators.RSI": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1.7320508075688772}, "pybottrader.portfolios.Portfolio": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}, "s": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 1}}}}}}, "%": {"2": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "%": {"2": {"docs": {}, "df": 0, "b": {"docs": {"pybottrader.portfolios": {"tf": 1}}, "df": 1}}, "docs": {}, "df": 0}}}, "docs": {}, "df": 0}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pybottrader.datastreamers": {"tf": 1}, "pybottrader.datastreamers.DataStreamer": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.indicators.ROI": {"tf": 1}}, "df": 4, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}, "pybottrader.traders.Trader.run": {"tf": 1}}, "df": 8}}}}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.datastreamers.DataStreamer": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}}, "df": 2, "s": {"docs": {"pybottrader.datastreamers": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.indicators.ROI": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.strategies": {"tf": 1}, "pybottrader.strategies.Strategy": {"tf": 1}}, "df": 2}}}, "y": {"docs": {"pybottrader.strategies.StrategySignal": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.strategies.StrategySignal.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.Indicator.__init__": {"tf": 1.4142135623730951}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1.4142135623730951}, "pybottrader.indicators.ROI.__init__": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI.__init__": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD.__init__": {"tf": 1.4142135623730951}}, "df": 9}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.portfolios.Portfolio.process": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1.4142135623730951}, "pybottrader.portfolios.DummyPortfolio.process": {"tf": 1}}, "df": 3}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1, "s": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 1}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator.get": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 2}}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.datastreamers.DataStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.__init__": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.portfolios.Portfolio.__init__": {"tf": 1}, "pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}, "pybottrader.traders.Trader.__init__": {"tf": 1}}, "df": 19}}}}, "m": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 8, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 8}}}}}, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.indicators": {"tf": 1}, "pybottrader.indicators.MA": {"tf": 1}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}}, "df": 5}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 2}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1, "s": {"docs": {"pybottrader.portfolios": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.portfolios": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MACDResult.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.datastreamers.DataStreamer.next": {"tf": 1}, "pybottrader.datastreamers.YFinanceStreamer.next": {"tf": 1}, "pybottrader.datastreamers.CSVFileStreamer.next": {"tf": 1}}, "df": 3}}, "w": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}}, "df": 5}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 4}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.traders.TradingIteration": {"tf": 1}}, "df": 5}, "s": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 4, "d": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 4}, "s": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}}, "df": 1}}}}}}}, "y": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {"pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.datastreamers.CSVFileStreamer": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pybottrader.indicators": {"tf": 1}, "pybottrader.portfolios": {"tf": 1}, "pybottrader.traders.TradingIteration": {"tf": 1}}, "df": 3}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACDResult.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.strategies.StrategySignal.__init__": {"tf": 1}, "pybottrader.strategies.Strategy": {"tf": 1}, "pybottrader.strategies.Strategy.__init__": {"tf": 1}, "pybottrader.strategies.Strategy.evaluate": {"tf": 1}, "pybottrader.traders.TradingIteration.__init__": {"tf": 1}}, "df": 10}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.datastreamers.YFinanceStreamer": {"tf": 1}, "pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 4}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.roi": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1.4142135623730951}}, "df": 1}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.strategies.StrategySignal": {"tf": 1}, "pybottrader.traders.TradingIteration": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.traders.Trader.status": {"tf": 1}}, "df": 1, "s": {"docs": {"pybottrader.traders.TradingIteration": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pybottrader.indicators.Indicator.push": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "i": {"docs": {"pybottrader.portfolios.Portfolio.accumulated_return": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.traders.Trader.run": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"pybottrader.indicators": {"tf": 1}, "pybottrader.portfolios": {"tf": 1}}, "df": 2}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.portfolios": {"tf": 1}}, "df": 2}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 2}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.Indicator.push": {"tf": 1.4142135623730951}, "pybottrader.indicators.MA.update": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.update": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 2}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 2}, "pybottrader.indicators.MACD.__init__": {"tf": 1}}, "df": 12, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.7320508075688772}, "pybottrader.indicators.Indicator.push": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1.7320508075688772}, "pybottrader.indicators.MACD": {"tf": 1.7320508075688772}}, "df": 4}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.portfolios.Portfolio.valuation": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio.valuation": {"tf": 1}}, "df": 2}}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}}, "df": 4}, "f": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.Indicator.__init__": {"tf": 1}, "pybottrader.indicators.MA.__init__": {"tf": 1}, "pybottrader.indicators.EMA.__init__": {"tf": 1}, "pybottrader.indicators.ROI": {"tf": 1}, "pybottrader.indicators.ROI.__init__": {"tf": 1}, "pybottrader.indicators.ROI.update": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI.__init__": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD.__init__": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1}, "pybottrader.strategies.StrategySignal": {"tf": 1}, "pybottrader.traders": {"tf": 1}}, "df": 14}, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}}, "n": {"docs": {"pybottrader.indicators.roi": {"tf": 1}}, "df": 1, "e": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1.4142135623730951}, "pybottrader.indicators.RSI": {"tf": 1.4142135623730951}, "pybottrader.indicators.MACD": {"tf": 1.4142135623730951}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 4}, "l": {"docs": {}, "df": 0, "y": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1.4142135623730951}}, "df": 4}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}}, "df": 3}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pybottrader.indicators.Indicator": {"tf": 1}, "pybottrader.indicators.RSI": {"tf": 1}, "pybottrader.indicators.MACD": {"tf": 1}, "pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 4}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"pybottrader.indicators.MA.__init__": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"pybottrader.portfolios.DummyPortfolio": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pybottrader.indicators.EMA": {"tf": 1}}, "df": 1}}}}}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pybottrader.strategies.Strategy.evaluate": {"tf": 1}}, "df": 1}}}}}}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true}; - - // mirrored in build-search-index.js (part 1) - // Also split on html tags. this is a cheap heuristic, but good enough. - elasticlunr.tokenizer.setSeperator(/[\s\-.;&_'"=,()]+|<[^>]*>/); - - let searchIndex; - if (docs._isPrebuiltIndex) { - console.info("using precompiled search index"); - searchIndex = elasticlunr.Index.load(docs); - } else { - console.time("building search index"); - // mirrored in build-search-index.js (part 2) - searchIndex = elasticlunr(function () { - this.pipeline.remove(elasticlunr.stemmer); - this.pipeline.remove(elasticlunr.stopWordFilter); - this.addField("qualname"); - this.addField("fullname"); - this.addField("annotation"); - this.addField("default_value"); - this.addField("signature"); - this.addField("bases"); - this.addField("doc"); - this.setRef("fullname"); - }); - for (let doc of docs) { - searchIndex.addDoc(doc); - } - console.timeEnd("building search index"); - } - - return (term) => searchIndex.search(term, { - fields: { - qualname: {boost: 4}, - fullname: {boost: 2}, - annotation: {boost: 2}, - default_value: {boost: 2}, - signature: {boost: 2}, - bases: {boost: 2}, - doc: {boost: 1}, - }, - expand: true - }); -})(); \ No newline at end of file diff --git a/src/pybottrader/__init__.py b/pybottrader/__init__.py similarity index 93% rename from src/pybottrader/__init__.py rename to pybottrader/__init__.py index 6ac4efd..4e9db6c 100644 --- a/src/pybottrader/__init__.py +++ b/pybottrader/__init__.py @@ -18,3 +18,5 @@ pip install pybottrader ``` """ + +from .indicators import * # Import the C++ module directly diff --git a/src/pybottrader/datastreamers/__init__.py b/pybottrader/datastreamers/__init__.py similarity index 100% rename from src/pybottrader/datastreamers/__init__.py rename to pybottrader/datastreamers/__init__.py diff --git a/src/pybottrader/datastreamers/yfinance.py b/pybottrader/datastreamers/yfinance.py similarity index 100% rename from src/pybottrader/datastreamers/yfinance.py rename to pybottrader/datastreamers/yfinance.py diff --git a/pybottrader/indicators/CMakeLists.txt b/pybottrader/indicators/CMakeLists.txt new file mode 100644 index 0000000..f12fdf6 --- /dev/null +++ b/pybottrader/indicators/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required(VERSION 3.15) +project(indicators) + +if(NOT TARGET pybind11::module) + find_package(pybind11 REQUIRED) +endif() + +# Platform specific flags +if(MSVC) + # Windows-specific flags + add_compile_options(/W4 /EHsc) +else() + # Linux/macOS flags + add_compile_options(-Wall -Wextra) +endif() + +# Create module +pybind11_add_module(_indicators + src/bindings.cpp +) + +# Include directories +target_include_directories(_indicators + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +# Platform-specific link options +if(APPLE) + target_link_options(_indicators PRIVATE -undefined dynamic_lookup) +endif() + +install(TARGETS _indicators + LIBRARY DESTINATION pybottrader/indicators +) diff --git a/pybottrader/indicators/__init__.py b/pybottrader/indicators/__init__.py new file mode 100644 index 0000000..ac2106a --- /dev/null +++ b/pybottrader/indicators/__init__.py @@ -0,0 +1 @@ +from ._indicators import * # This will import ATR and other symbols directly into indicators namespace diff --git a/pybottrader/indicators/include/indicators.hpp b/pybottrader/indicators/include/indicators.hpp new file mode 100644 index 0000000..84c0ad9 --- /dev/null +++ b/pybottrader/indicators/include/indicators.hpp @@ -0,0 +1,208 @@ +/** + * Library of indicators + * + */ + +#pragma once +#include