fixes/additional infos

This commit is contained in:
olli 2024-12-18 11:35:55 +01:00
parent 0ca094d353
commit 3cd119dda1
6 changed files with 208 additions and 104 deletions

252
README.md
View File

@ -13,7 +13,7 @@ It is still under development and is currently only partially functional.
## Copyright / License ## Copyright / License
Copyright (c) 2022-2024 Oliver Bohlen (aka olli) Copyright (c) 2022-2024 Oliver Bohlen (aka olli/egabosh)
The software provided here is called dabo (crypto bot) The software provided here is called dabo (crypto bot)
@ -25,14 +25,14 @@ You should have received a copy of the GNU General Public License along with dab
## Data sources ## Data sources
Various data sources such as finance.yahoo.com and crypto exchanges available via ccxt are used. Please check whether this is legal in your region before use. Various data sources such as finance.yahoo.com and crypto exchanges available via ccxt are used. Please check whether this is legal in your region before use.
- query1.finance.yahoo.com (economic data,...) - https://query1.finance.yahoo.com (economic data,...)
- api.coinmarketcap.com (crypto data) - https://api.coinmarketcap.com (crypto data)
- api.bls.gov (CPI, unemployment rate) - https://api.bls.gov (CPI, unemployment rate)
- fred.stlouisfed.org (fed funds rate) - https://fred.stlouisfed.org (fed funds rate)
- 30rates.com (forecast) - https://30rates.com (forecast)
- fapi.binance.com (OpenInterest,...) - https://fapi.binance.com (OpenInterest,...)
- api.alternative.me (Fear and Greed) - https://api.alternative.me (Fear and Greed)
- production.dataviz.cnn.io (Fear and Greed CNN) - https://production.dataviz.cnn.io (Fear and Greed CNN)
- https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js (TradingView Lightweitgt Charts) - https://unpkg.com/lightweight-charts/dist/lightweight-charts.standalone.production.js (TradingView Lightweitgt Charts)
- ... - ...
@ -41,7 +41,7 @@ Various data sources such as finance.yahoo.com and crypto exchanges available vi
- TradingView Lightweitgt Charts (https://www.tradingview.com/lightweight-charts/ | https://github.com/tradingview/lightweight-charts) - TradingView Lightweitgt Charts (https://www.tradingview.com/lightweight-charts/ | https://github.com/tradingview/lightweight-charts)
- bash, python - bash, python
- several default linux programs like bc, wget,... - several default linux programs like bc, wget,...
- gaboshlib (https://gitea.ds9.dedyn.io/olli/gaboshlib) - gaboshlib (https://github.com/egabosh/gaboshlib)
- ... - ...
## Objective ## Objective
@ -58,7 +58,7 @@ https://memory-alpha.fandom.com/wiki/Dabo
I thought this fits quite well to the cryptotrading world and that's why I chose this name ;-) I thought this fits quite well to the cryptotrading world and that's why I chose this name ;-)
## Structure ## Structure
The Bot is splitted in the following parts: The Bot is splitted in the following parts/containers:
- dabo-bot: Basic Bot with buy and sell decisions based on self-definable strategies - dabo-bot: Basic Bot with buy and sell decisions based on self-definable strategies
- dabo-symbols_ticker: Ticker for current symbols and prices - dabo-symbols_ticker: Ticker for current symbols and prices
@ -136,47 +136,57 @@ https://www.debian.org/download
https://www.raspberrypi.com/software/operating-systems/ https://www.raspberrypi.com/software/operating-systems/
### 2: Run Ansible Playbooks ### 2: Run Ansible Playbooks
On a clean Debian 12 system ypu can run my Ansible Playbooks to use the same environment the bot is developed and running. On a fresh Debian 12 system you can run my Ansible Playbooks to use the same environment the bot is developed and running.
Please have a look what exactly the playbooks are doing if you are unsure. Please have a look what exactly the playbooks are doing if you are unsure.
If the web interface (or matrix/turn) should be accessible via the internet, the server must be accessible on port 80/tcp (acme/letsencrypt) and 443/tcp.
For private/home internet access, this may require port forwarding on your router and registration with a dyndns (DDNS) service. The DDNS service should allow subdomains.
When using my playbooks and the services should be available to the internet, the hostname must correspond to the ddns name.
Here is an example for the dynu-DDNS service:
- DDNS name: myhost.mywire.com
- dabo-bot-name: dabo.myhost.mywire.com
- matrix-name: matrix.myhost.mywire.com
You also can use IPv6 if your ISP and router supports this and if you have multiple servers/services on Ports (80/443) but only one IPv4 address to the internet.
#### 2.1 Download basic install script #### 2.1 Download basic install script
``` ```
wget https://gitea.ds9.dedyn.io/olli/debian.ansible.basics/raw/branch/main/install.sh wget https://raw.githubusercontent.com/egabosh/linux-setups/refs/heads/main/debian/install.sh -O install.sh
``` ```
#### 2.2 define Playbooks #### 2.2 define Playbooks
- debian.ansible.basics (https://gitea.ds9.dedyn.io/olli/debian.ansible.basics) - Basic Debian configuration - debian/basics/basics.yml (https://github.com/egabosh/linux-setups/tree/main/debian/basics) - Basic Debian configuration
- Optional: debian.ansible.firewall (https://gitea.ds9.dedyn.io/olli/debian.ansible.firewall) - Firewall for the server based on ufw - Optional: debian/firewall/firewall.yml (https://github.com/egabosh/linux-setups/tree/main/debian/firewall) - Firewall for the server based on ufw
- Optional: debian.ansible.runchecks (https://gitea.ds9.dedyn.io/olli/debian.ansible.runchecks) - System checks and notification - Optional: debian/runchecks/runchecks.yml (https://github.com/egabosh/linux-setups/tree/main/debian/runchecks) - System checks and notification
- Optional: debian.ansible.backup (https://gitea.ds9.dedyn.io/olli/debian.ansible.backup/src/branch/main/backup.yml) - Backup framework - Optional: debian/backup/backup.yml (https://github.com/egabosh/linux-setups/tree/main/debian/backup) - Backup framework
- Optional: debian.ansible.autoupdate (https://gitea.ds9.dedyn.io/olli/debian.ansible.autoupdate) - Automatic System Updates - Optional: debian/autoupdate/autoupdate.yml (https://github.com/egabosh/linux-setups/tree/main/debian/autoupdate) - Automatic System Updates
- debian.ansible.docker (https://gitea.ds9.dedyn.io/olli/debian.ansible.docker/src/branch/main/docker.yml) - Docker Installation - debian/docker/docker.yml (https://github.com/egabosh/linux-setups/tree/main/debian/docker) - Docker Installation
- debian.ansible.traefik.server (https://gitea.ds9.dedyn.io/olli/debian.ansible.traefik.server) - Traefik Reverse Proxy for Web UI and Letsencrypt Certs - debian/traefik.server/traefik.yml (https://github.com/egabosh/linux-setups/tree/main/debian/traefik.server) - Traefik Reverse Proxy for Web UI and Letsencrypt Certs
- Optional: debian.ansible.turn.server (https://gitea.ds9.dedyn.io/olli/debian.ansible.turn.server) - Turn Server fpr Audio/Video conferences in Matrix - Optional: debian/turn.server/turn.yml (https://github.com/egabosh/linux-setups/tree/main/debian/turn.server) - Turn Server fpr Audio/Video conferences in Matrix
- Optional: debian.ansible.matrix.server (https://gitea.ds9.dedyn.io/olli/debian.ansible.matrix.server) - Notifications with own Martix Server - Optional: debian/matrix.server/matrix.yml (https://github.com/egabosh/linux-setups/tree/main/debian/matrix.server) - Notifications with own Martix Server
- dabo: The Bot itself - https://github.com/egabosh/dabo/raw/refs/heads/main/dabo-ansible.yml: The Bot itself
for example: for example:
``` ```
PLAYBOOKS="debian.ansible.basics PLAYBOOKS="debian/basics/basics.yml
debian.ansible.firewall debian/firewall/firewall.yml
debian.ansible.runchecks debian/runchecks/runchecks.yml
debian.ansible.backup debian/backup/backup.yml
debian.ansible.autoupdate debian/autoupdate/autoupdate.yml
debian.ansible.docker debian/docker/docker.yml
debian.ansible.traefik.server debian/traefik.server/traefik.yml
debian.ansible.turn.server https://github.com/egabosh/dabo/raw/refs/heads/main/dabo-ansible.yml"
debian.ansible.matrix.server
dabo"
export PLAYBOOKS export PLAYBOOKS
``` ```
#### 2.3 Install ansible and run Playbooks #### 2.3 Install ansible and run Playbooks
If you run this as user and not as root, the script will install sudo and enable the user to execute commands as root via sudo. To do this, the root password is requested (several times).
``` ```
bash install.sh bash install.sh
``` ```
### Download ### Download
Not necessary if you use the dabo Playbook Not necessary if you use the dabo Playbook
``` ```
git clone https://gitea.ds9.dedyn.io/olli/dabo.git git clone https://github.com/egabosh/dabo.git
cd dabo cd dabo
``` ```
@ -187,6 +197,8 @@ docker -l warn compose --ansi never build --progress=plain --pull --no-cache --f
``` ```
### 3. Configuration ### 3. Configuration
Not necessary if you use the dabo Playbook
Edit docker-compose.yml or create docker-compose.override.yml to fit yout needs e.g. domain and network settings or basic auth, e.g. for traefik and letsencrypt: Edit docker-compose.yml or create docker-compose.override.yml to fit yout needs e.g. domain and network settings or basic auth, e.g. for traefik and letsencrypt:
``` ```
echo ' echo '
@ -227,9 +239,9 @@ networks:
' >docker-compose.override.yml ' >docker-compose.override.yml
``` ```
### 4. Optional: Matrix connection
Optional: If you use matrix/matrix-commander (https://github.com/egabosh/linux-setups/tree/main/debian/matrix.server) and want do receive Matrix-Messages from the bot you can create an SSH-Key to allow sending Matrix-Messages e.g.:
Optional: If you use matrix/matrix-commander (https://gitea.ds9.dedyn.io/olli/debian.ansible.matrix.server) and want do receive Matrix-Messages from the bot you can create an SSH-Key to allow sending Matrix-Messages e.g.:
Automatically done by playbooks. Automatically done by playbooks.
``` ```
mkdir -p home/.ssh mkdir -p home/.ssh
@ -239,7 +251,7 @@ cat home/.ssh/id_ed25519.pub
``` ```
and add Key on your matrix-Server to the authorized_keys of the matrix-User and add Key on your matrix-Server to the authorized_keys of the matrix-User
### 5. Add Exchange
Create Secrets file for your API Key(s) Create Secrets file for your API Key(s)
- file: dabo/.CCXT-ID-secrets - file: dabo/.CCXT-ID-secrets
@ -262,54 +274,13 @@ chmod 400 dabo/.binance-secrets
Create Config Create Config
Especially set URL, STOCK_EXCHANGE, FEE, CURRENCY,... to fit your needs. Especially set URL, STOCK_EXCHANGE, FEE, CURRENCY,... to fit your needs.
If you want to use the a testnet of an exchnage if available use TESTNET=true which is the default
``` ```
vim dabo-bot.conf vim dabo-bot.conf
``` ```
Defaults in dabo/dabo-bot.conf Defaults in dabo/dabo-bot.conf
### 4. Prepare/Create a stretegy
IMPORTANT!!!
THE DEFAULT STRATEGY MAY NOT FIT YOUR NEEDS OR WORK PROPERLY. SO YOU CAN LOOSE ALL YOUR MONEY!!! USE ON YOUR OWN RISK!!!
TEST YOUR OWN STRATEGY COMPREHENSIVELY AND OVER A LOGNER PERIOD OF TIME WITH analyze.sh!!! USE ON YOUR OWN RISK!!!
Strategie files can be put in the "strategies"-directory the defaults
There is an example for a buy and a sell strategy file (deactivated by "return 0" in the forst line):
```
ls strategies/buy.example.conf
ls strategies/sell.example.conf
```
Aditional strategies can be created with Name
```
strategies/buy.<name>.conf
strategies/sell.<name>.conf
```
e.g named "mannover-sulu-1" for buy strategy and "command-kirk-3" for sell strategy
```
strategies/buy.mannover-sulu-1.conf
strategies/sell.command-kirk-3.conf
```
### Optional: Create individual watch-assets.csv
```
cp dabo/watch-assets.csv watch-assets.csv
```
Optional:
You can edit this file if you want do generate warnings or track your asstes/trades.
```
nano watch-assets.csv
```
### Set Rights
Set Rights (UID 10000 for non-root-User in running container):
```
chown -R 10000:10000 dabo data home strategies dabo-bot.conf watch-assets.csv
```
### Operational commands ### Operational commands
Run/Restart: Run/Restart:
``` ```
@ -317,7 +288,7 @@ docker compose down # if an old instance is running
docker compose up -d docker compose up -d
``` ```
Check List and state of containers:
``` ```
docker compose ps docker compose ps
``` ```
@ -326,27 +297,74 @@ Logs/Output:
``` ```
docker compose logs -f docker compose logs -f
``` ```
Logs/Oputput of a specific container for example dabo-bot:
```
docker compose logs -f dabo-bot
```
Update:
### Update
Not necessary if you use the playbooks Not necessary if you use the playbooks
``` ```
# Optinal: Remove local data # Optional: Remove local data
git reset --hard HEAD^ # Remove local commits git reset --hard HEAD^ # Remove local commits
git clean -fd # Remove local uncommited files git clean -fd # Remove local uncommited files
# Update and restart # Update and restart
git pull https://gitea.ds9.dedyn.io/olli/dabo.git main -f git pull https://github.com/egabosh/dabo.git main -f
docker compose down docker compose down
docker compose up -d docker compose up -d
``` ```
## Strategies ## Strategies
IMPORTANT!!!
THE EXAMPLE STRATEGIES MAY NOT FIT YOUR NEEDS OR WORK PROPERLY. SO YOU CAN LOOSE ALL YOUR MONEY!!! USE ON YOUR OWN RISK!!!
TEST YOUR OWN STRATEGY COMPREHENSIVELY AND OVER A LOGNER PERIOD OF TIME BEST RISK-FREE IN A TESTNET!!! USE ON YOUR OWN RISK!!!
Strategies are needed for the bot to trade.
Strategies are located in die stretegies subdir.
You can put your own code into the strategies it will be sourced by the bot. You can put your own code into the strategies it will be sourced by the bot.
If you want, you can also use other programming languages or binary code as a strategy and simply start it using your own strategy.
You can use available variables to read (and set) values. ### Example strategies
There are examples for strategy files (deactivated by "return 0" in the beginning):
```
cat strategies/example.strategy.sh
cat strategies/example_manage_positions.strategy.sh
```
"example.strategy.sh" creates a score by defined tests and opens a long or short order with stoploss and takeprofit if the score has a defined value.
### Variables with current market values "example_manage_positions.strategy.sh" watches open positions and switches the stoploss into profit if position is in profit to secure it.
You can use them and change them to fit your needs. To avoid resets on updates copy them to your own strategies for example:
```
cp -p strategies/example.strategy.sh strategies/my-own-trading.strategy.sh
cp -p strategies/example_manage_positions.strategy.sh strategies/my-own-position.strategy.sh
```
### Own strategies
Aditional strategies can be created with naming convention *.strategy.sh
```
strategies/my-new.strategy.sh
strategies/yet-another-new.strategy.sh
```
Strategy files should have specific rights - must be readable by the bot:
```
chown -R 10000:10000 strategies
chmod -R 640 strategies
```
### Variables during runtime of the strategies
You can use available variables/arrays during runtime to read (and set) values.
This arrays are available to runtime in the strategies
#### Large associative arrays v and vr (reverse) #### Large associative arrays v and vr (reverse)
@ -364,11 +382,12 @@ ${v[ECONOMY_SP500_rsi14_0]}
${v[ETHUSDT_1w_ema200_0]} ${v[ETHUSDT_1w_ema200_0]}
${v[ETHUSDT_1w_macd_histogram_signal_1]} ${v[ETHUSDT_1w_macd_histogram_signal_1]}
${v[SOLUSDT_levels_1d]} ${v[SOLUSDT_levels_1d]}
$v[$[SOLUSDT_levels_1d_next_up]} ${v[$[SOLUSDT_levels_1d_next_up]}
$v[$[ETHUSDT_levels_1w_next_down]} ${v[$[ETHUSDT_levels_1w_next_down]}
``` ```
You can find a complete list of available values in the file `data/botdata/values` whic is creates in the runtime of the bot. You can find a complete list of available values in the file `data/botdata/values` which is created in the runtime of the bot.
An example you can find in example-values. An long example list you can find in example-values. https://github.com/egabosh/dabo/blob/main/example-values
#### Current price from exchange #### Current price from exchange
${f_tickers_array[SYMBOL]} ${f_tickers_array[SYMBOL]}
@ -377,14 +396,60 @@ ${f_tickers_array[SOLUSDT]}
${f_tickers_array[ETH${CURRENCY}]} ${f_tickers_array[ETH${CURRENCY}]}
``` ```
#### Open Orders
```
${o[ETHUSDT_present]}=sl_close_long tp_close_long
${o[ETHUSDT_sl_close_long_amount]}=0
${o[ETHUSDT_sl_close_long_entry_price]}=null
${o[ETHUSDT_sl_close_long_id]}=36b2f404-0b20-4806-bdcc-0dad0daf57e9
${o[ETHUSDT_sl_close_long_side]}=sell
${o[ETHUSDT_sl_close_long_stoplossprice]}=0
${o[ETHUSDT_sl_close_long_stopprice]}=3305.98
${o[ETHUSDT_sl_close_long_takeprofitprice]}=0
${o[ETHUSDT_sl_close_long_type]}=Stop
${o[ETHUSDT_tp_close_long_amount]}=0
${o[ETHUSDT_tp_close_long_entry_price]}=null
${o[ETHUSDT_tp_close_long_id]}=850dd169-7387-4be3-ac68-bfce73cfa47d
${o[ETHUSDT_tp_close_long_side]}=sell
${o[ETHUSDT_tp_close_long_stoplossprice]}=0
${o[ETHUSDT_tp_close_long_stopprice]}=3710.04
${o[ETHUSDT_tp_close_long_takeprofitprice]}=0
${o[ETHUSDT_tp_close_long_type]}=MarketIfTouched
```
You can find a complete list of available values in the file `data/botdata/values-orders` which is created in the runtime of the bot.
#### Open Positions
```
${p[ETHUSDT_currency_amount]}=9509.25
${p[ETHUSDT_current_price]}=3573.79
${p[ETHUSDT_entry_price]}=3673.31
${p[ETHUSDT_leverage]}=5
${p[ETHUSDT_liquidation_price]}=2953.43
${p[ETHUSDT_pnl]}=-1288.50
${p[ETHUSDT_pnl_percentage]}=-13.55
${p[ETHUSDT_side]}=long
${p[ETHUSDT_stoploss_price]}=3305.98
${p[ETHUSDT_takeprofit_price]}=3710.04
```
You can find a complete list of available values in the file `data/botdata/values-positions` which is created in the runtime of the bot.
## Support/Community ## Support/Community
New Telegram group for the dabo comunity. New Telegram group for the dabo community.
https://t.me/dabobotcrypto https://t.me/dabobotcrypto
## Future ideas/featrues and todosa ## Future ideas/featrues and todos
- Partial StopLoss and TakeProfit - PSR Indicator https://de.tradingview.com/script/w4U2xUN7-Pivot-Support-Resistance/
- Fibonacci Levels - public order data if there is such a thing. At what price do people want to enter (limit order)? Where do they want to exit (TakePofit/StopLoss)? Maybe free Binance data helps (https://developers.binance.com/docs/derivatives/usds-margined-futures/market-data/rest-api/Order-Book)? https://www.coinglass.com/de/mergev2/BTC-USDT
- AI implementation. What data can be prepared for training?
- example Grid trading strategy (user specific)
- Fibonacci Levels (which timeframe(s)?)
- Forecasts - Forecasts
- Chart improvements - Chart improvements
- Volumeindicator and for example RSI on volume values - Volumeindicator and for example RSI on volume values
@ -395,3 +460,4 @@ https://t.me/dabobotcrypto
- Analysis tool for collected historical values to try out buy or sell conditions based on them - Analysis tool for collected historical values to try out buy or sell conditions based on them
- Consideration of trading and funding fees - Consideration of trading and funding fees
- Liquidation Heatmap (https://www.coinglass.com/pro/futures/LiquidationHeatMap) - Liquidation Heatmap (https://www.coinglass.com/pro/futures/LiquidationHeatMap)

View File

@ -2,16 +2,18 @@
# Webpage URL # Webpage URL
URL="mydabobot.mydomain" URL="mydabobot.mydomain"
URL="dabo.$(hostname)"
# The exchange we use for using the correct API (CCXI-ID see: https://github.com/ccxt/ccxt) # The exchange we use for using the correct API (CCXI-ID see: https://github.com/ccxt/ccxt)
# for Phemex it is "phemex" for example
STOCK_EXCHANGE="NONE" STOCK_EXCHANGE="NONE"
# Interval in seconds - Should not be lower then 300 # Interval in seconds - Should not be lower then 300 seconds (5m is the lowest timeframe
INTERVAL="300" INTERVAL="300"
## Currency used for trading ## Currency used for trading
CURRENCY="USDT" CURRENCY="USDT"
TRANSFER_CURRENCY="USD" TRANSFER_CURRENCY="EUR"
# symbols that should be traded # symbols that should be traded
SYMBOLS="ETH SOL" SYMBOLS="ETH SOL"
@ -19,16 +21,12 @@ SYMBOLS="ETH SOL"
## Signal Group for Notifications ## Signal Group for Notifications
NOTIFICATION_GROUP="Dabo-Bot" NOTIFICATION_GROUP="Dabo-Bot"
## Percent from balance per invest.
# Overwritten by MIN_NOTIONAL+X% from stock if lower
INVEST="5"
# Stop all trading and sell everything if the complete balance shrinks under this value in ${CURRENCY}
EMERGENCY_STOP="1000"
# Leverage # Leverage
LEVERAGE="" LEVERAGE="2"
# margin mode (isolated or cross) # margin mode (isolated or cross)
MARGIN_MODE="isolated" MARGIN_MODE="isolated"
# testnet of exchange if available (true or false). false for trades with real money
TESTNET=true

View File

@ -30,7 +30,7 @@ function run_strategies {
get_symbols_ticker get_symbols_ticker
get_values ${f_symbols_array_trade[*]} get_values ${f_symbols_array_trade[*]}
for f_strategy in $(find /dabo/strategies -type f -name "*strategy*" ! -name "\.*") for f_strategy in $(find /dabo/strategies -type f -name "*.strategy.sh" ! -name "\.*")
do do
if ! bash -n "${f_strategy}" >$g_tmp/strat_bash_error 2>&1 if ! bash -n "${f_strategy}" >$g_tmp/strat_bash_error 2>&1
then then

View File

@ -24,6 +24,7 @@ function webpage {
webpage_transactions webpage_transactions
get_symbols_ticker get_symbols_ticker
charts
# create status webpage # create status webpage
echo "<html> echo "<html>

View File

@ -1,3 +1,23 @@
#!/bin/bash
# Copyright (c) 2022-2024 olli
#
# This file is part of dabo (crypto bot).
#
# dabo is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# dabo is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with dabo. If not, see <http://www.gnu.org/licenses/>.
# Example strategy # Example strategy
g_echo_note "EXAMPLE Strategy" g_echo_note "EXAMPLE Strategy"

View File

@ -1,3 +1,22 @@
#!/bin/bash
# Copyright (c) 2022-2024 olli
#
# This file is part of dabo (crypto bot).
#
# dabo is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# dabo is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with dabo. If not, see <http://www.gnu.org/licenses/>.
# Example strategy for managing open positions # Example strategy for managing open positions
g_echo_note "EXAMPLE Strategy for managing open positions" g_echo_note "EXAMPLE Strategy for managing open positions"