Comments (5)
Apologies, I was confused, this is not what i wanted to suggest, here is my action space:
# spaces
self.action_space = spaces.Box(
low=-np.inf, high=np.inf,
shape=(len(self.trading_symbols) * (self.symbol_max_orders + 3),)
) # symbol -> [close_order_i(logit), hold(logit), volume]
the third dimension here will be reserved for the leverage and i can deal with it the same way you deal with the volume (take abs then use np.clip to keep the values within a specific range([1-10])
observation space:
self.observation_space = spaces.Dict({
'balance': spaces.Box(low=-np.inf, high=np.inf, shape=(1,)),
'equity': spaces.Box(low=-np.inf, high=np.inf, shape=(1,)),
'margin': spaces.Box(low=-np.inf, high=np.inf, shape=(1,)),
'features': spaces.Box(low=-np.inf, high=np.inf, shape=self.features_shape),
'orders': spaces.Box(
low=-np.inf, high=np.inf,
shape=(len(self.trading_symbols), self.symbol_max_orders, 4)
) # symbol, order_i -> [entry_price, volume, profit]
})
The 4th dimension here is used to represent leverage on the order level (in addition to entry price, volume and profit).
I have my reservations on the above approach, i will try to come up with another one which includes using Discrete action space instead of Box
from gym-mtsim.
Hi @sadimoodi,
Before I released this project, I implemented order-level leverage. But then I realized that MetaTrader does not allow it. So I removed it. Anyway, your idea sounds interesting and I think it is worth trying.
from gym-mtsim.
Hello @AminHP ,
thank you for your answer, many of the other platforms allow specifying leverage on the order level, which i think is a HUGE advantage and would surely result in a more profitable agent.
Going towards this goal, I included another dimension inside the action space, (say leverage was allowed up to 10x), to be Discrete(10) as follows:
self.observation_space = spaces.Dict({
'balance': spaces.Box(low=-np.inf, high=np.inf, shape=(1,)),
'equity': spaces.Box(low=-np.inf, high=np.inf, shape=(1,)),
'margin': spaces.Box(low=-np.inf, high=np.inf, shape=(1,)),
'features': spaces.Box(low=-np.inf, high=np.inf, shape=self.features_shape),
'leverage': spaces.Discrete(10),
'orders': spaces.Box(
low=-np.inf, high=np.inf,
shape=(len(self.trading_symbols), self.symbol_max_orders, 3)
) # symbol, order_i -> [entry_price, volume, profit]
})
from gym-mtsim.
I don't understand why leverage should be part of the observation space. Every order has its own leverage. So, I think it should only be part of the action space. The effect of leverage is implicitly considered by equity and margin.
from gym-mtsim.
Some prop firms implement different leverage for different asset classes eg 100 for Forex, 30 for Indices etc so it is probably right to implement it at the order level... Perhaps as a dict at the environment to look up when placing a trade, against the asset class...
from gym-mtsim.
Related Issues (20)
- Symbol Data Download HOT 2
- A Complete Example using stable-baselines HOT 5
- Stop Loss & Take Profit HOT 5
- Run on MT5 HOT 1
- Possible to train the bot on 1H or 4H instead of D1? HOT 4
- How can I add technical indicators ? HOT 1
- example: environment with custom parameters HOT 3
- is it possible to use this code to live trading via MT5? HOT 2
- pyfolio HOT 2
- Should use open price instead of close price HOT 2
- AssertionError: Continuous action space must have a finite lower and upper bound HOT 4
- Check if market is closed HOT 3
- Incompatibility with Linux systems HOT 2
- Feature Request: update from gym to gymnasium HOT 3
- Set lots(volume) HOT 3
- Fee is not the same as spread HOT 1
- The new models and the issues caused by signal_features. HOT 1
- Error running using the environment HOT 4
- A question about calculate balance HOT 3
- Composite Spaces HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gym-mtsim.