Giter VIP home page Giter VIP logo

tensortrade's People

Contributors

abjunfan avatar abstractguy avatar afzalmushtaque avatar arunavo4 avatar carlogrisetti avatar cclauss avatar charlesedwards avatar codeninja avatar dahifi avatar dru-zod avatar grahlus avatar haakam21 avatar hohl avatar hugoch642 avatar industrial avatar k-kit avatar macd2 avatar marcograss avatar michaelquaman avatar mwbrulhardt avatar nicomon24 avatar notadamking avatar parthwaidya avatar pss1998 avatar raedshabbir avatar rhamnett avatar rshtirmer avatar saiwin123 avatar umbertov avatar yasserhassan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tensortrade's Issues

Bug: On Google Colab, KeyError: 'ppo_agent'

After:
strategy = TensorforceTradingStrategy(environment=environment, agent_spec=agent_spec, network_spec=network_spec)

I get the above error: KeyError: 'ppo_agent'

I think that in declaration of agent_spec, the "type" : "ppo_agent" should be replaced by "type": "ppo"

Testing Request: Create unit tests for components and documentation

Funding amount:
1.5 ETH (~$300)

Description:
Create fully-featured unit tests for each existing component in /tensortrade and the documentation in /docs.

Requirements:

  • Each component should be tested via pytest in its corresponding /tests/tensortrade/**/test_*.py file.
  • Each use case of each component should be 100% covered via the unit tests.
  • Each function parameter and class argument that affects a component's functionality should be covered by the unit tests.
  • Each documentation feature and page should be tested via pytest in its corresponding /docs/**/test_*.py file.
  • Each test should be passing.
  • Any bugs in components should be fixed during this process.
  • Note: You are not required to implement unimplemented methods that raise a NotImplementedError().

TensorTrade tutorial article

Update Request: Update Tensorforce support from 0.4.4 to 0.5.2

Funding:
0.25 ETH (~$50)

Description:
Update all TensorTrade components, documentation, and examples to support the latest version of Tensorforce (0.5.2 as of writing this).

Requirements:

  • Must update each component using tensorforce to be compatible with v0.5.2
  • Update all of the documentation to use the updated components
  • Update all of the examples to use the updated components

AttributeError: type object 'Agent' has no attribute 'from_spec'

Hi Adam,

I found the following exception, is that a version problem?
Thanks.

Traceback (most recent call last):
File "train_and_evaluation.py", line 62, in
strategy = TensorforceTradingStrategy(environment=environment, agent_spec=agent_spec, network_spec=network_spec)
File "/home/simon/anaconda3/lib/python3.6/site-packages/tensortrade/strategies/tensorforce_trading_strategy.py", line 50, in init
self._agent = Agent.from_spec(spec=agent_spec,
AttributeError: type object 'Agent' has no attribute 'from_spec'

Feature Request: Replace TA-lib features with bukosabino/ta

Funding:
0.25 ETH (~$50 USD)

Description:
Replace TALibIndicator component in /tensortrade/features/indicators with a component called TaIndicator, that uses the bukosabino/ta package rather than TA-lib.

Requirements:

  • Replace the TALibIndicator with a TAIndicator.
  • Remove the SimpleMovingAverage indicator, and replace its usage in all examples with the corresponding TAIndicator feature.
  • Create the necessary parameters and kwargs to use all indicators in the bukosabino/ta package within a feature pipeline.

bukosabino/ta GitHub
TensorTrade tutorial article

example TensorTrade_Tutorial.ipynb contains a few compile errors

Hi:

Would you mind take a look at Github tensortrade / examples / TensorTrade_Tutorial.ipynb? (the jupyter notebook file). There are already a few compile-time errors in the original tutorial. I tried to follow the "Trade and Invest Smarter — The Reinforcement Learning Way" article, but failed to finish a simplest beginning example at all. Would you mind to make a workable simplest example for the TensorTrade library? It looks like a very great trading library. It will be too bad not having good help for interested beginners (like me).
Another problem is, if I start from "Putting it All Together" in TensorTrade_Tutorial.ipynb, I will get an error:
KeyError: 'ppo_agent'
at the line:
strategy = TensorforceTradingStrategy(environment=environment,
agent_spec=agent_spec,
network_spec=network_spec)
Please refer to the attached image.
ppo_agent-error

Thanks!

AttributeError: module 'tensorflow' has no attribute 'function'

System information

  • OS Platform and Distribution: Ubuntu 18.04.2 LTS
  • TensorTrade version: 0.0.1
  • TensorFlow version: 1.13.1
  • Python version: 3.6.7

Describe the current behavior
I try to execute the code of the example TensorTrade_Tutorial.ipynb and the following error occurs:
AttributeError: module 'tensorflow' has no attribute 'function'

Describe the expected behavior
I expected no errors during import of the module.

Code to reproduce the issue
from tensortrade.strategies import TensorforceTradingStrategy

Other info / logs
I started a Docker container and executed the commands, c.f.
trace.txt

Simulated Exchange does not pre transform dataframe if it's set in object initialization.

Please make sure that this is a Bug or a Feature Request and provide all applicable information asked by the template.
If your issue is an implementation question, please ask your question on StackOverflow or [on the TensorTrade Gitter channel]((https://gitter.im/tensortrade-framework/community/) instead of opening a GitHub issue.

System information

  • Have I written custom code (as opposed to using example directory):
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
  • TensorTrade version:
  • TensorFlow version:
  • Python version:
  • CUDA/cuDNN version:
  • GPU model and memory:

You can obtain the TensorFlow version with:
python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"

Describe the current behavior
When instantiating the simulated exchange with a dataframe the dataframe setter skips pre transformation because the transformation objects are set after initialization.

exchange = Exchange(data_frame=df,
                    should_pretransform_obs = True,...)

environment.exchange.data_frame.head()

image

Describe the expected behavior
The data frame should be transformed, as it is when the dataframe is added after the initialization.
image

Code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate the problem.

Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.

Bug: Feature transforms are very slow

MinMaxNormalizer.transform: 0.4 sec on 5 feature columns

FractionalDifference takes almost 2s to transform 5 feature columns
History size was about 1000 elements at this moment, see log below

-- FractionalDifference: transform

-- FractionalDifference: fractional_difference
-- FractionalDifference: difference_weights size: 936 took 0.000429
-- FractionalDifference: fractional_difference: took 0.255751

-- FractionalDifference: fractional_difference
-- FractionalDifference: difference_weights size: 936 took 0.000367
-- FractionalDifference: fractional_difference: took 0.258471

-- FractionalDifference: fractional_difference
-- FractionalDifference: difference_weights size: 936 took 0.000366
-- FractionalDifference: fractional_difference: took 0.255252

-- FractionalDifference: fractional_difference
-- FractionalDifference: difference_weights size: 936 took 0.000413
-- FractionalDifference: fractional_difference: took 0.253747

-- FractionalDifference: fractional_difference
-- FractionalDifference: difference_weights size: 936 took 0.000382
-- FractionalDifference: fractional_difference: took 0.256269

-- FractionalDifference transform: took 1.836753

trading_environment.py fix

In environments/trading_environment.py the line

observation = self._feature_pipeline.transform(observation)

should be

observation = self._feature_pipeline._transform(observation)

Feature Request: Create a simple way to manage context across all components.

Funding:
2 ETH (~$400 USD)

Description:
Create a simple way to manage framework-wide context such as API keys, component defaults, etc. in a single file or dictionary.

Requirements:

  • Must be able to set context framework-wide via tensortrade.set_context(context).
  • The context argument can either be a dict or a json/yaml file (whichever is easier) of context variables/objects.
  • Each component should be able to inject the context into self.context by adding a class decorator called tensortrade.component.
  • All existing components should have the tensortrade.component decorator added.
  • Unit tests should be created to confirm correct behavior.

TensorTrade tutorial article

Is tutorial working?

Hi,
great job! I have installed tensortrade using git so my version is 0.0.1a4
conda dedicated venv, on ubuntu, my bug is:
agent_spec = { "type": "ppo_agent", "step_optimizer": { "type": "adam", "learning_rate": 1e-4 }, "discount": 0.99, "likelihood_ratio_clipping": 0.2, } network_spec = [ dict(type='dense', size=64, activation="tanh"), dict(type='dense', size=32, activation="tanh") ] from tensortrade.strategies import TensorforceTradingStrategy strategy = TensorforceTradingStrategy(environment=environment, agent_spec=agent_spec, network_spec=network_spec)

returns:

`AttributeError                            Traceback (most recent call last)

in
2 strategy = TensorforceTradingStrategy(environment=environment,
3 agent_spec=agent_spec,
----> 4 network_spec=network_spec)

~/anaconda3/envs/tensortrade/lib/python3.7/site-packages/tensortrade/strategies/tensorforce_trading_strategy.py in init(self, environment, agent_spec, network_spec, **kwargs)
49 self._network_spec = network_spec
50
---> 51 self._agent = Agent.from_spec(spec=agent_spec,
52 kwargs=dict(network=network_spec,
53 states=environment.states,

AttributeError: type object 'Agent' has no attribute 'from_spec'`

Am i missing something from the package? should i import from tensorforce? i've read they are changing some naming conventions

bye :)

Feature Request: Initialization of components by string

Explanation

The purpose of this feature is to make commonly used components accessible by string in the context of initializing trading environments or trading strategies. This is similar in spirit to compiling models in keras by setting loss and optimizers to be a string such as:

model.compile(loss='mse', optimizer='adam')

This will make it easy for people to start using TensorTrade quickly and will also help more advanced users perform fast experimentation without having to do a lot of imports for common functionalities.

Example

One example would be the following:

from tensortrade.exchanges.simulated import FBMExchange
from tensortrade.rewards import SimpleProfitStrategy
from tensortrade.actions import DiscreteActionStrategy
from tensortrade.environments import TradingEnvironment

exchange = FBMExchange(base_instrument='BTC', timeframe='1h')
reward_strategy = SimpleProfitStrategy()
action_strategy = DiscreteActionStrategy(n_actions=20, instrument_symbol='USD/BTC')

environment = TradingEnvironment(exchange=exchange,
                                 action_strategy=action_strategy,
                                 reward_strategy=reward_strategy)

This would be a common configuration to run and with string initialization it would look like the following:

from tensortrade.environments import TradingEnvironment

environment = TradingEnvironment(exchange='fbm', 
                                 action_strategy='discrete', 
                                 reward_strategy='simple')

Exchanges will not always be so simple so this example is good for getting people started with tensortrade. However, a more common use case would be making a complex exchange configuration, and then initializing the actions and rewards using strings:

from tensortrade.exchanges.simulated import FBMExchange
from tensortrade.rewards import SimpleProfitStrategy
from tensortrade.actions import DiscreteActionStrategy
from tensortrade.environments import TradingEnvironment

exchange = FBMExchange(base_instrument='BTC', timeframe='1h')

environment = TradingEnvironment(exchange=exchange,
                                 action_strategy='discrete',
                                 reward_strategy='simple')

I already have a pull request with the implementation and would want to upgrade the tutorials to reflect this updated method of initialization.

Upgrade to Tensorforce 0.5.1

With the release of Tensorforce 0.5.1 there are some major refactors needed. This issue request will track the work towards that goal.

A brief overview of the work required.

  • Tensorforce architectural changes, method changes, and refactors will necessitate the restructuring of the environment and strategy classes as some methods and interactions have moved around.
  • TF now has a new interface for OpenAIGym methods.
  • Various example and tutorial scrips will need to be adjusted.

ImportError: cannot import name 'Space'

In the https://github.com/notadamking/tensortrade/blob/master/examples/TensorTrade_Tutorial.ipynb
this is the output of the cell

ModuleNotFoundError Traceback (most recent call last)
in
----> 1 from tensortrade.strategies import TensorforceTradingStrategy
2
3 agent_spec = {
4 "type": "ppo_agent",
5 "step_optimizer": {

~/Desktop/Hedger/tensortrade/tensortrade/strategies/init.py in
----> 1 from .trading_strategy import TradingStrategy
2 from .tensorforce_strategy import TensorforceStrategy

~/Desktop/Hedger/tensortrade/tensortrade/strategies/trading_strategy.py in
19 from typing import Union, Callable, List
20
---> 21 from tensortrade.environments.trading_environment import TradingEnvironment
22 from tensortrade.features.feature_pipeline import FeaturePipeline
23

~/Desktop/Hedger/tensortrade/tensortrade/environments/init.py in
----> 1 from .trading_environment import TradingEnvironment

~/Desktop/Hedger/tensortrade/tensortrade/environments/trading_environment.py in
13 # limitations under the License.
14
---> 15 import gym
16 import logging
17 import pandas as pd

ModuleNotFoundError: No module named 'gym'

Documentation Request: Document the existing codebase using ReadTheDocs and Sphinx

Funding amount:
2 ETH (~$400)

Description:
Document each component described in the article, as well as each existing feature in the codebase (Each file in the /tensortrade directory).

  • Write a complete description of each component and file in the /tensortrade directory.
  • Include example usage of each use case and its possible solutions.
  • Briefly define and explain any variables or parameters.
  • Documentation must be publishable via Readthedocs.org using the Sphinx framework.
  • Documentation should be brief, yet complete. It should be simple and easy to read.

Use the TensorTrade tutorial article as a reference for describing components and defining their usage.

Dataframe is set and transformed multiple times.

Please make sure that this is a Bug or a Feature Request and provide all applicable information asked by the template.
If your issue is an implementation question, please ask your question on StackOverflow or on the TensorTrade Discord #help-desk channel instead of opening a GitHub issue.

System information
current master

You can obtain the TensorFlow version with:
python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"
TF 1.3

Describe the current behavior
image

The data frame is set, and transformed, multiple times in a single run.

Describe the expected behavior
The data frame should only be set and transformed a single time.

Code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate the problem.

Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.

Bug: import TradingEnvironment throws SyntaxError in Jupyter tutorial

Please make sure that this is a Bug or a Feature Request and provide all applicable information asked by the template.
If your issue is an implementation question, please ask your question on StackOverflow or [on the TensorTrade Gitter channel]((https://gitter.im/tensortrade-framework/community/) instead of opening a GitHub issue.

System information

  • Have I written custom code (as opposed to using example directory):
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
  • TensorTrade version: 0.0.1a11
  • TensorFlow version: 1.13.1
  • Python version: 3.5.5
  • CUDA/cuDNN version:
  • GPU model and memory:

You can obtain the TensorFlow version with:
python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"

Describe the current behavior

Running [In: 3]
Got File "my-environment/lib/python3.5/site-packages/tensortrade/environments/trading_environment.py", line 169 reward: float = self._reward_strategy.get_reward( ^ SyntaxError: invalid syntax

Describe the expected behavior

Running without error

Code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate the problem.
From file TensorTrade_Tutorial.ipynb

Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.

Feature Request: Implement ActionStrategy and InstrumentExchange to support Equities markets

I realize that this library is primarily aimed at crypto markets, but I do a lot of equities trading and would like to help contribute.

I see that Adam has a stub for the IBKR API, but it doesn't look like there's been much action on it. There also doesn't seem to be much in the way of IB-related packages out there. The closest thing I can find is the Bankroll project. https://github.com/bankroll-py/bankroll. Downside to this library is that it appears to be read-only.

Putting this issue up as a temperature check to see if anyone's aware of any other suitable candidates for integrating into this package, and to gauge interest in incorporating it into this library.

As an aside, I've been using an Alpha Vantage module to pull equities data into Pandas, so this could serve as another data source that could be integrated.

Feature Request: Create the render method for a TradingEnvironment.

Funding:
1.5 ETH (~300 USD)

Description:
Create a useful visualization of the TradingEnvironment in the render method.

Requirements:

  • Implement a useful visualization of the TradingEnvironment and the underlying the learning agent's interactions with the environment's InstrumentExchange.
  • Display the exchange balance, and all exchange observations/agent trades during each episode in a useful manner.
  • Display the total P/L, sharpe ratio, largest drawdown %, and any metrics you see as useful.
  • The rendered visualization should use a performant, well-designed charting application such as Bokeh or Dash

Use the RLTrader Github and the corresponding Medium article as a reference.

Bug: file inconsistency between the example code and the repo file

Bug: the example/data/.csv file is inconsistent with the file used in TensorTrade_Tutorial.ipynb. This causes a ValueError when running the example code

Code to reproduce the issue

import pandas as pd
from tensortrade.exchanges.simulated import SimulatedExchange

df = pd.read_csv('data/Coinbase_BTCUSD_1h.csv', skiprows=1)
exchange = SimulatedExchange(data_frame=df, base_instrument='USD', should_pretransform_obs=True)

exchange.data_frame

Other info / logs

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-37-e16e49ec63df> in <module>
      3 
      4 df = pd.read_csv('data/Coinbase_BTCUSD_1h.csv', skiprows=1)
----> 5 exchange = SimulatedExchange(data_frame=df, base_instrument='USD', should_pretransform_obs=True)
      6 
      7 exchange.data_frame

C:\ProgramData\Anaconda3\lib\site-packages\tensortrade\exchanges\simulated\simulated_exchange.py in __init__(self, data_frame, **kwargs)
     41 
     42         if data_frame is not None:
---> 43             self.data_frame = data_frame.astype(self._dtype)
     44 
     45         self._commission_percent = kwargs.get('commission_percent', 0.3)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors, **kwargs)
   5881             # else, only a single dtype is given
   5882             new_data = self._data.astype(
-> 5883                 dtype=dtype, copy=copy, errors=errors, **kwargs
   5884             )
   5885             return self._constructor(new_data).__finalize__(self)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, **kwargs)
    579 
    580     def astype(self, dtype, **kwargs):
--> 581         return self.apply("astype", dtype=dtype, **kwargs)
    582 
    583     def convert(self, **kwargs):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, axes, filter, do_integrity_check, consolidate, **kwargs)
    436                     kwargs[k] = obj.reindex(b_items, axis=axis, copy=align_copy)
    437 
--> 438             applied = getattr(b, f)(**kwargs)
    439             result_blocks = _extend_blocks(applied, result_blocks)
    440 

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors, values, **kwargs)
    555 
    556     def astype(self, dtype, copy=False, errors="raise", values=None, **kwargs):
--> 557         return self._astype(dtype, copy=copy, errors=errors, values=values, **kwargs)
    558 
    559     def _astype(self, dtype, copy=False, errors="raise", values=None, **kwargs):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\blocks.py in _astype(self, dtype, copy, errors, values, **kwargs)
    639                     # _astype_nansafe works fine with 1-d only
    640                     vals1d = values.ravel()
--> 641                     values = astype_nansafe(vals1d, dtype, copy=True, **kwargs)
    642 
    643                 # TODO(extension)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)
    727     if copy or is_object_dtype(arr) or is_object_dtype(dtype):
    728         # Explicit copy, or required since NumPy can't view from / to object.
--> 729         return arr.astype(dtype, copy=True)
    730 
    731     return arr.view(dtype)

ValueError: could not convert string to float: '2019-10-16'
​
exchange = SimulatedExchange(data_frame=df, base_instrument='USD', should_pretransform_obs=True)
​
exchange.data_frame
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-34-39bb0049e577> in <module>
      1 df = pd.read_csv('data/Coinbase_BTCUSD_1h.csv', skiprows=1)
----> 2 exchange = SimulatedExchange(data_frame=df, base_instrument='USD', should_pretransform_obs=True)
      3 
      4 exchange.data_frame

C:\ProgramData\Anaconda3\lib\site-packages\tensortrade\exchanges\simulated\simulated_exchange.py in __init__(self, data_frame, **kwargs)
     41 
     42         if data_frame is not None:
---> 43             self.data_frame = data_frame.astype(self._dtype)
     44 
     45         self._commission_percent = kwargs.get('commission_percent', 0.3)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors, **kwargs)
   5881             # else, only a single dtype is given
   5882             new_data = self._data.astype(
-> 5883                 dtype=dtype, copy=copy, errors=errors, **kwargs
   5884             )
   5885             return self._constructor(new_data).__finalize__(self)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, **kwargs)
    579 
    580     def astype(self, dtype, **kwargs):
--> 581         return self.apply("astype", dtype=dtype, **kwargs)
    582 
    583     def convert(self, **kwargs):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, axes, filter, do_integrity_check, consolidate, **kwargs)
    436                     kwargs[k] = obj.reindex(b_items, axis=axis, copy=align_copy)
    437 
--> 438             applied = getattr(b, f)(**kwargs)
    439             result_blocks = _extend_blocks(applied, result_blocks)
    440 

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors, values, **kwargs)
    555 
    556     def astype(self, dtype, copy=False, errors="raise", values=None, **kwargs):
--> 557         return self._astype(dtype, copy=copy, errors=errors, values=values, **kwargs)
    558 
    559     def _astype(self, dtype, copy=False, errors="raise", values=None, **kwargs):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals\blocks.py in _astype(self, dtype, copy, errors, values, **kwargs)
    639                     # _astype_nansafe works fine with 1-d only
    640                     vals1d = values.ravel()
--> 641                     values = astype_nansafe(vals1d, dtype, copy=True, **kwargs)
    642 
    643                 # TODO(extension)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)
    727     if copy or is_object_dtype(arr) or is_object_dtype(dtype):
    728         # Explicit copy, or required since NumPy can't view from / to object.
--> 729         return arr.astype(dtype, copy=True)
    730 
    731     return arr.view(dtype)

ValueError: could not convert string to float: '2019-10-16'

Window Size Indexing Bug In Simulated Exchange Results in First Observation Being Input Twice Into Feature Transformer

Please make sure that this is a Bug or a Feature Request and provide all applicable information asked by the template.
If your issue is an implementation question, please ask your question on StackOverflow or on the TensorTrade Discord #help-desk channel instead of opening a GitHub issue.

System information

  • Have I written custom code (as opposed to using example directory):
  • OS Platform and Distribution (e.g. Mac Sierra, Windows 10, Linux Ubuntu 16.04):
  • TensorTrade version:
  • TensorFlow version:
  • Python version:

You can obtain the TensorFlow version with:
python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"

Describe the current behavior

Describe the expected behavior

Code to reproduce the issue
Current Implementation

lower_range = max((self._current_step - self._window_size, 0)) upper_range = max(min(self._current_step, len(self._data_frame)), 1) obs = self._data_frame.iloc[lower_range:upper_range]
window size = 10
so current_step = 0
lower_range = 0
upper_range = 1

current_step = 1
lower_range = 0
upper_range = 1

Hence the same index is passed

proposed solution:
lower_range = max((self._current_step - self._window_size, 0)) upper_range = min(self._current_step, self._current_step, len(self._data_frame)) obs = self._data_frame.iloc[lower_range:upper_range+1]
Can push the solution, maintains a consistent spacing and window size

Feature Request: Create an action strategy w/ profit target and stop loss levels

Funding:
1 ETH (~$200 USD)

Description:
Create a TargetStopActionStrategy, which creates trades by determining the profit target and a stop loss for that specific entry position.

Requirements:

  • The strategy must be capable of trading a single asset at a time.
  • The strategy must be set a profit target and a stop loss for each trade suggested.
    • The strategy must sell a trade position if either the stop loss or profit target level is hit for that trade.
    • The profit target must be above the entry price, the stop loss must be below the entry price.
  • The strategy must determine the size of the trade dynamically (as in SimpleDiscreteActionStrategy) or through a constant position_size initialization parameter, which is a percentage of the total net worth.

TensorTrade tutorial article

'data type not understood' error in cctx_exchange.py

When I try to run TensorTrade_Tutorial I am getting a 'data type not understood ' error.

In exchanges/live/ccxt_exchange.py it has
return Box(low=low, high=high, shape=obs, dtype=dtypes)
where dtypes is an array of data types but gym Box expect dtype to be a single datatype:

self.dtype = np.dtype(dtype)
and get a 'data type not understood error' at this line when I run the tutorial

Installation Error

Hi AdamKing,

         I understand the current status of this project is just providing a "dummy scaffolding" for the immediate future with no Exchange selected.  I though I would give you a quick feedback on my latest approach to run it today (Monday, August 12, 2019), since the previous attempt/version produced no error.

          I just uploaded the project file into Colab, unzipped it, "%cd /content/tensortrade-master" to the working dir, and then cut and pasted the "https://github.com/notadamking/tensortrade/blob/master/examples/Development.ipynb"

file into the next Colab cell. I received an "AttributeError" as shown below when running that last cell:

.......
.......

**AttributeError Traceback (most recent call last)
in ()
20 agent = PPO2(MlpLnLstmPolicy, env, verbose=1, nminibatches=1)
21
---> 22 agent.learn(7500)
23
24 obs = env.reset()

6 frames
/content/tensortrade-master/tensortrade/exchanges/simulated/generated_exchange.py in next_observation(self)
165 scaled_frame = scaler.fit_transform(self.data_frame.values)
166
--> 167 return scaled_frame.values[-1].astype(self.dtype)

AttributeError: 'numpy.ndarray' object has no attribute 'values'**

How can I correct this error???

ModuleNotFoundError: No module named 'talib'

System information
Mac OS Mojave 10.14

  • Have I written custom code (as opposed to using example directory):
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
  • TensorTrade version: 0.0.1a17
  • TensorFlow version: 1.13.2
  • Python version:3.7
  • CUDA/cuDNN version:
  • GPU model and memory:

Hello,
I have been trying to run the Tensortrade examples both locally and on Google Colab but I have been getting this error:
ModuleNotFoundError: No module named 'talib'
please how do I resolve this immediately. Thanks

More comment in example - dumb agent

Hi @notadamking
Super cool library!
great work!
I think this is going to be used for years to come.
I am going to get a start on another Jupyter notebook.
I was wondering if there could be some comments on the example notebook.
How the agent is trained (look back period) and what rules it is making its trading decision.
Also maybe a portfolio visual on the current amount.
Also add in the model for trading costs.

I will try and throw something together over the weekend.

Best and kind regards,
Andrew

Feature Request: ActionStrategy and InstrumentExchange for Futures trading

I am glad to meet a so great project. when I do some test. I find some new requirements.

  1. I want to use this project for Future and I find that discrete_action_strategy is not support for shorting. So it's possible to add more type of action strategy in the future? and what's more, the exchange may need update.
  2. For TradeType, I think the limit or market order type should be config as a env parameter. Such agent action would be simple to create.
  3. For actions, the system defined as following, can we make it more simpler? just let 1=buy,2=sell,0=hold? and for the trade amounts, can be add by next signal. (up limit to max_amounts set by user)
For example, 1 = LIMIT_BUY|0.25, 2 = MARKET_BUY|0.25, 6 = LIMIT_BUY|0.5, 7 = MARKET_BUY|0.5, etc.

Thanks in advance.

AttributeError: type object 'OpenAIGym' has no attribute 'state_from_space'

Please make sure that this is a Bug or a Feature Request and provide all applicable information asked by the template.
If your issue is an implementation question, please ask your question on StackOverflow or [on the TensorTrade Gitter channel]((https://gitter.im/tensortrade-framework/community/) instead of opening a GitHub issue.

System information

  • Have I written custom code (as opposed to using example directory):
    No, running the example

  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
    Windows 10

  • TensorTrade version:
    tensortrade 0.0.1a11 pypi_0 pypi

  • TensorFlow version:
    tensorflow 1.13.1 pypi_0 pypi

  • Python version:
    python 3.7.4 h5263a28_0

  • CUDA/cuDNN version:

  • GPU model and memory:
    EVGA 2080TI 11gb ram

You can obtain the TensorFlow version with:
python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"

Describe the current behavior
When running the example code from the tutorial I am receiving an error from within the trading_environment.py when trying to set OpenAIGym.state_from_space

AttributeError: type object 'OpenAIGym' has no attribute 'state_from_space'

Describe the expected behavior
OpenAI should have it's space updated.

Code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate the problem.

# simulated exchange for our trainer
from tensortrade.exchanges.simulated import SimulatedExchange
# features, scalers, and normalizers
from tensortrade.features.scalers import MinMaxNormalizer
from tensortrade.features.stationarity import FractionalDifference
from tensortrade.features import FeaturePipeline

# Reward strategy
from tensortrade.rewards import SimpleProfitStrategy

# Action Strategy
from tensortrade.actions import DiscreteActionStrategy

# Trading Environment
from tensortrade.environments import TradingEnvironment

# Other imports
import pandas as pd
import numpy as np
from time import time

#*** standard OHLCV data at 1 hour intervals... 
data_file ='./data/processed/binance/btc_usdt_1h.csv' 
df = pd.read_csv(data_file, index_col=[0])

exchange = SimulatedExchange(base_instrument='USDT', 
                                        data_frame=df[-300:],
                                        timeframe='1h',
                                        commission_percent=0.005,
                                        window_size=1,
                                        max_allowed_slippage_percent=3.0,
                                        min_order_amount=1E-4,
                                        min_trade_amount=1E-4
                                       )

normalize_price = MinMaxNormalizer(['open', 'high', 'low', 'close', 'volume'])

difference = FractionalDifference(difference_order=0.6, 
                                  inplace=True, 
                                  all_column_names=["open", "high", "low", "close"])

feature_pipeline = FeaturePipeline(steps=[normalize_price, difference])

reward_strategy = SimpleProfitStrategy()

action_strategy = DiscreteActionStrategy(n_actions=20, instrument_symbol='BTC/USDT')

environment = TradingEnvironment(exchange=exchange,
                                 feature_pipeline=feature_pipeline,
                                 action_strategy=action_strategy,
                                 reward_strategy=reward_strategy)

# TF Agent or something here
agent_spec = {
    "type": "ppo",
    "step_optimizer": {
        "type": "adam",
        "learning_rate": 1e-4
    },
    "discount": 0.99,
    "likelihood_ratio_clipping": 0.2,
}

network_spec = [
    dict(type='dense', size=64, activation="tanh"),
    dict(type='dense', size=32, activation="tanh")
]

from tensortrade.strategies import TensorforceTradingStrategy

strategy = TensorforceTradingStrategy(environment=environment,
                                      agent_spec=agent_spec,
                                      network_spec=network_spec)

Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.

AttributeError                            Traceback (most recent call last)
<ipython-input-7-578d30e37888> in <module>
      3 strategy = TensorforceTradingStrategy(environment=environment,
      4                                       agent_spec=agent_spec,
----> 5                                       network_spec=network_spec)

~\Anaconda3\envs\tensortrade\lib\site-packages\tensortrade\strategies\tensorforce_trading_strategy.py in __init__(self, environment, agent_spec, network_spec, **kwargs)
     50         self._agent = Agent.create(spec=agent_spec,
     51                                       kwargs=dict(network=network_spec,
---> 52                                                   states=environment.states,
     53                                                   actions=environment.actions))
     54 

~\Anaconda3\envs\tensortrade\lib\site-packages\tensortrade\environments\trading_environment.py in states(self)
    118         """
    119         from tensorforce.environments.openai_gym import OpenAIGym
--> 120         return OpenAIGym.state_from_space(self.observation_space)
    121 
    122     @property

AttributeError: type object 'OpenAIGym' has no attribute 'state_from_space'```

Issues with makefile & docker

When I run the make run-notebook I got the following issue :

Step 5/7 : RUN pip install -e .[tf,docs,tests,baselines,tensorforce,ccxt,fbm]
 ---> Running in edc493a5b8fe
ERROR: File "setup.py" not found. Directory cannot be installed in editable mode: /
The command '/bin/sh -c pip install -e .[tf,docs,tests,baselines,tensorforce,ccxt,fbm]' returned a non-zero code: 1
make[1]: *** [build-cpu] Error 1
make: *** [build-cpu-if-not-built] Error 2

Can't even fix it, do you have any idea please ?

Thanks

why net_worth charts are different between posted article and github notebook file?

hi,

I appreciate the TensorTrade_Tutorial.ipynb file got fixed, and I may run it myself. However, I have a question about the content. The networth chart, what we really care about as the final result, is different between the one in the Medium article (title: "Trade and Invest Smarter -- The Reinforcement Learning Way) and the one (actually two) in TensorTrade_Tutorial.ipynb file.

The networth chart in Medium article, rise slowly and smoothly. Refer to MediumArticle.png
And the two networth charts in TensorTrade_Tutorial.ipynb, just fall all the way (1st one) or rise shortly then fall. Refer to github-chart1.png and github-chart2

So what went wrong? What is different? It is not easy for us to choose a trading strategy to all the way lose, unless the tradebot completely trade OPPOSITE TO THE OPTIMIZED STRATEGY. Do you mind to take a look?

github-chart2
github-chart1
MediumArticle

.png

Improve confusing terminology

The variables symbol, base_symbol and output_symbol are not used consistently in the code and it reduces the readability. actually base_symbol and output_symbol are the same. output_symbol should be renamed to base_symbol because this is more intuitive. Somewhere in the code variable name symbol is used where base_symbol is meant actually.

Those changes are implemented in #6

Documentation Request: Create Docker infrastructure for tutorial, documentation, and testing

Funding amount:
0.15 ETH (~$40)

Description:
Create the necessary Docker infrastructure for running the full tutorial, running and updating the documentation locally, and running and updating tests locally.

Requirements:

  • Create a Dockerfile in /Dockerfile, which creates the necessary environment to run TensorTrade with all of its features and components. (E.g. Tensorflow, Tensorforce, etc.).
  • Add entry to /Makefile for running the tutorial Jupyter notebook using Docker.
  • Add entry to /Makefile for running the documentation locally using Docker.
  • Add entry to /Makefile for running the tests locally using Pytest and Docker.
  • Document how to run the full tutorial, run and update documentation locally, and run and update tests locally using Docker in the /README.md.
  • Document how to run the full tutorial, run and update documentation locally, and run and update tests locally using Docker in the /docs documentation.

KeyError: "Registering two gradient with name 'LSTMBlockCell'!

Traceback (most recent call last)
 in 
      1 import ccxt
      2 
----> 3 from tensortrade.strategies import TensorforceTradingStrategy

~/Desktop/tensortrade-master/tensortrade/strategies/__init__.py in 
      1 from .trading_strategy import TradingStrategy
----> 2 from .stable_baselines_strategy import StableBaselinesTradingStrategy
      3 from .tensorforce_trading_strategy import TensorforceTradingStrategy
      4 
      5 

~/Desktop/tensortrade-master/tensortrade/strategies/stable_baselines_strategy.py in 
     26 from stable_baselines.common.policies import BasePolicy
     27 from stable_baselines.common.base_class import BaseRLModel
---> 28 from stable_baselines import DQN
     29 
     30 from tensortrade.environments.trading_environment import TradingEnvironment

~/anaconda3/lib/python3.6/site-packages/stable_baselines/__init__.py in 
      2 from stable_baselines.acer import ACER
      3 from stable_baselines.acktr import ACKTR
----> 4 from stable_baselines.deepq import DQN
      5 from stable_baselines.her import HER
      6 from stable_baselines.ppo2 import PPO2

~/anaconda3/lib/python3.6/site-packages/stable_baselines/deepq/__init__.py in 
----> 1 from stable_baselines.deepq.policies import MlpPolicy, CnnPolicy, LnMlpPolicy, LnCnnPolicy
      2 from stable_baselines.deepq.build_graph import build_act, build_train  # noqa
      3 from stable_baselines.deepq.dqn import DQN
      4 from stable_baselines.deepq.replay_buffer import ReplayBuffer, PrioritizedReplayBuffer  # noqa
      5 

~/anaconda3/lib/python3.6/site-packages/stable_baselines/deepq/policies.py in 
      1 import tensorflow as tf
----> 2 import tensorflow.contrib.layers as tf_layers
      3 import numpy as np
      4 from gym.spaces import Discrete
      5 

~/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/__init__.py in 
     35 from tensorflow.contrib import copy_graph
     36 from tensorflow.contrib import crf
---> 37 from tensorflow.contrib import cudnn_rnn
     38 from tensorflow.contrib import data
     39 from tensorflow.contrib import deprecated

~/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/cudnn_rnn/__init__.py in 
     36 
     37 # pylint: disable=unused-import,wildcard-import
---> 38 from tensorflow.contrib.cudnn_rnn.python.layers import *
     39 # pylint: enable=unused-import,wildcard-import
     40 

~/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/cudnn_rnn/python/layers/__init__.py in 
     21 
     22 # pylint: disable=unused-import,wildcard-import
---> 23 from tensorflow.contrib.cudnn_rnn.python.layers.cudnn_rnn import *
     24 # pylint: enable=unused-import,wildcard-import
     25 

~/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/cudnn_rnn/python/layers/cudnn_rnn.py in 
     18 from __future__ import print_function
     19 
---> 20 from tensorflow.contrib.cudnn_rnn.python.ops import cudnn_rnn_ops
     21 from tensorflow.python.framework import dtypes
     22 from tensorflow.python.framework import ops

~/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/cudnn_rnn/python/ops/cudnn_rnn_ops.py in 
     20 import os
     21 from tensorflow.contrib.checkpoint.python import split_dependency
---> 22 from tensorflow.contrib.rnn.python.ops import lstm_ops
     23 from tensorflow.python.framework import dtypes
     24 from tensorflow.python.framework import ops

~/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/rnn/python/ops/lstm_ops.py in 
    236 
    237 
--> 238 @ops.RegisterGradient("LSTMBlockCell")
    239 def _LSTMBlockCellGrad(op, *grad):
    240   """Gradient for LSTMBlockCell."""

~/anaconda3/lib/python3.6/site-packages/tensorflow_core/python/framework/ops.py in __call__(self, f)

~/anaconda3/lib/python3.6/site-packages/tensorflow_core/python/framework/registry.py in register(self, candidate, name)

KeyError: "Registering two gradient with name 'LSTMBlockCell'! (Previous registration was in register /home/simon/anaconda3/lib/python3.6/site-packages/tensorflow_core/python/framework/registry.py:66)"

Feature Request: Keep the main package dependencies to the minimum

Summary
Do not include the TensorforceTradingStrategy and the StableBaselineTradingStrategy in the main Tensortrade package. Right now, one has to install Tensorforce and Stable-Baselines packages even if he would use something total different (like a PyTorch-based implementation), just because all strategies get initialized when loading the tensortrade module.

System information
Not relevant for this issue.

Describe the current behavior
Right now tensorflow, tensorforce and stable-baselines packages need to be installed just to load the tensortrade module. Even if you are not going to use them, for example, when you want to use your own trading strategy based on PyTorch.

Describe the expected behavior
Split tensortrade into multiple PyPi-packages. tensortrade could be the main package and tensortrade-tensorforce could implement the tensorforce-based trading strategy.

Another solution would be to just not automatically initialize all available trading strategies when loading the module. Or, check whether the dependency is installed before registering the corresponding trading strategy.

Code to reproduce the issue
Not relevant for this issue.

Feature Request: Support observing and trading multiple assets at a time

Funding:
1.5 ETH (~$300 USD)

Description:
Create the necessary components to support observing multiple assets from an exchange, applying a feature pipeline to those assets, and making a trade on any of those assets.

Requirements:

  • Create the necessary InstrumentExchange components (or update existing components) to support observing/trading multiple assets on both a simulated and live exchange.
  • Ensure the exchanges support feeding their observations through a simple feature pipeline.
  • Create the necessary ActionStrategy component(s) to support trading multiple assets at a time.
  • Create the necessary RewardStrategy component(s) for rewarding multiple concurrent trades.
  • Create the necessary unit tests to confirm the new components are working as expected.

TensorTrade tutorial article

Bug: Net Worth / Reward break when Pre_Tranform_Obs is off

Please make sure that this is a Bug or a Feature Request and provide all applicable information asked by the template.
If your issue is an implementation question, please ask your question on StackOverflow or [on the TensorTrade Gitter channel]((https://gitter.im/tensortrade-framework/community/) instead of opening a GitHub issue.

System information

  • Have I written custom code (as opposed to using example directory): Turned off should_pretransform_obs in Exchange (FBM)
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Ubuntu 16.04
  • TensorTrade version: master branch
  • TensorFlow version: requirements.txt
  • Python version: 3.7
  • CUDA/cuDNN version: N/A
  • GPU model and memory: N/A

Describe the current behavior
When turning off pre_tranform_obs, the net_worth and reward gets amplified heavily. For example, on a recent run I had rewards that looked like this: -7787365042.09

Describe the expected behavior
Net Worth and rewards should be in line with initial_balance.

Code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate the problem.

exchange = FBMExchange(base_instrument='BTC',
                       timeframe='1h',
                       should_pretransform_obs=False)

Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.
N/A

Feature Request: Forex exchange implementation using Meta Trader 4

Funding:
1.75 ETH (~$450 USD)

Description:
Create an implementation of Exchange capable of trading any forex pair on the MetaTrader 4 (MT4) platform.

Requirements:

  • The exchange implementation must be completely interoperable with MT4, including spinning up any necessary ZeroMQ infrastructure.
  • The exchange must fully implement the Exchange class, including the ability to list balance, net worth, asset valuations, trade history, etc.
  • The exchange must be capable of returning observations from OHLCV, indicators, signals, and other data from the MT4 platform.
  • The exchange must be capable of executing live trades on the MT4 platform, with either live or demo accounts.
  • Must include an example with an agent trading using a demo account.

General question - Custom InstrumentExchange and ActionStrategy

@notadamking I am not reporting an issue. I do have though two questions :

  • how do you instantiate a trading environment with your own observations (maybe a constructor for InstrumentExchange ?)
    -For actionstrategy can you do anything else then hold buy or sell. Can you for instance fix the volatility of your portfolio ?

Let me know if I need to clarify my question.

Feature Request: Tuning your strategy

Hello, I get an error when I try to optimize hyperparameters.
TUNE

Traceback:

<ipython-input-62-6011190cb82f> in <module>()
      7 strategy.environment = environment
      8 
----> 9 tuned_performance = strategy.tune(episodes=10)
/usr/local/lib/python3.6/dist-packages/tensortrade/strategies/stable_baselines_strategy.py in tune(self, steps, episodes, callback)
     81 
     82     def tune(self, steps: int = None, episodes: int = None, callback: Callable[[pd.DataFrame], bool] = None) -> pd.DataFrame:
---> 83         raise NotImplementedError
     85     def run(self, steps: int = None, episodes: int = None, episode_callback: Callable[[pd.DataFrame], bool] = None) -> pd.DataFrame:
NotImplementedError

Git: v1.15.0-rc3-22-g590d6ee
TensorFlow: 1.15.0
OS: Mac OS Catalina (but it doesn’t matter, I run on Google Colab)

What could be the problem?
I tried to do everything exactly as in the example.

By the way, here are 4 more questions:

  1. How much does the GPU speed up the learning process?
  2. Is tensorflow-gpu needed like in RLTrader?
  3. Should I use TPU instead of GPU?

@notadamking, thanks for the excellent work!

Tutorial Fail to run

While Running inside Jupyter Notebook 'TensorTrade_Tutorial.ipynb' file, I get this error and can't continue:

from tensortrade.actions import DiscreteActionStrategy
action_strategy = DiscreteActionStrategy(n_actions=20, instrument_symbol='BTC')

ERROR:

ImportError Traceback (most recent call last)
in
----> 1 from tensortrade.actions import DiscreteActionStrategy
2
3 action_strategy = DiscreteActionStrategy(n_actions=20, instrument_symbol='BTC')

ImportError: cannot import name 'DiscreteActionStrategy' from 'tensortrade.actions' (/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensortrade/actions/init.py)

Does anyone have the same problem?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.