Add controls boilerplate to main page
This commit is contained in:
parent
d2e0137c8d
commit
2aac7d1bb5
|
@ -202,3 +202,6 @@ class BaseExchange(object):
|
|||
|
||||
def get_all_positions(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def close_all_positions(self):
|
||||
raise NotImplementedError
|
||||
|
|
|
@ -105,3 +105,13 @@ class OANDAExchange(BaseExchange):
|
|||
item["unrealized_pl"] = float(item["unrealized_pl"])
|
||||
items.append(item)
|
||||
return items
|
||||
|
||||
def close_all_positions(self):
|
||||
# all_positions = self.get_all_positions()
|
||||
|
||||
# for position in all_positions["itemlist"]:
|
||||
# print("POS ITER", position)
|
||||
r = positions.PositionClose(accountID=self.account_id)
|
||||
response = self.call(r)
|
||||
print("CLOSE ALL POSITIONS", response)
|
||||
return response
|
||||
|
|
|
@ -4,7 +4,20 @@
|
|||
{% block outer_content %}
|
||||
|
||||
<div class="grid-stack" id="grid-stack-main">
|
||||
<div class="grid-stack-item" gs-w="7" gs-h="25" gs-y="0" gs-x="1">
|
||||
<div class="grid-stack-item" gs-w="5" gs-h="14" gs-y="0" gs-x="1">
|
||||
<div class="grid-stack-item-content">
|
||||
<nav class="panel">
|
||||
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
||||
<i class="fa-solid fa-arrows-up-down-left-right has-text-grey-light"></i>
|
||||
Controls
|
||||
</p>
|
||||
<article class="panel-block is-active">
|
||||
{% include 'window-content/controls.html' %}
|
||||
</article>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid-stack-item" gs-w="4" gs-h="25" gs-y="0" gs-x="6">
|
||||
<div class="grid-stack-item-content">
|
||||
<nav class="panel">
|
||||
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
||||
|
@ -17,7 +30,22 @@
|
|||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid-stack-item" gs-w="5" gs-h="14" gs-y="14" gs-x="1">
|
||||
<div class="grid-stack-item-content">
|
||||
<nav class="panel">
|
||||
<p class="panel-heading" style="padding: .2em; line-height: .5em;">
|
||||
<i class="fa-solid fa-arrows-up-down-left-right has-text-grey-light"></i>
|
||||
Offset
|
||||
</p>
|
||||
<article class="panel-block is-active">
|
||||
{% include 'window-content/offset.html' %}
|
||||
</article>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
var grid = GridStack.init({
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
<p class="subtitle">Close positions</p>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-delete="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
hx-swap="innerHTML"
|
||||
hx-confirm="Are you sure you wish to close all positions?"
|
||||
class="button is-danger is-fullwidth">
|
||||
<span class="icon-text">
|
||||
<span class="icon">
|
||||
<i class="fa-solid fa-xmark"></i>
|
||||
</span>
|
||||
<span>All</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="column">
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-delete="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
hx-swap="innerHTML"
|
||||
hx-confirm="Are you sure you wish to close all profitable positions?"
|
||||
class="button is-success is-fullwidth">
|
||||
<span class="icon-text">
|
||||
<span class="icon">
|
||||
<i class="fa-solid fa-xmark"></i>
|
||||
</span>
|
||||
<span>Winners</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="column">
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-delete="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
hx-swap="innerHTML"
|
||||
hx-confirm="Are you sure you wish to close all losing positions?"
|
||||
class="button is-danger is-fullwidth">
|
||||
<span class="icon-text">
|
||||
<span class="icon">
|
||||
<i class="fa-solid fa-xmark"></i>
|
||||
</span>
|
||||
<span>Losers</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="subtitle">Break even</p>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-delete="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
hx-swap="innerHTML"
|
||||
hx-confirm="Are you sure you wish set all the SLs for profitable positions to the entry price, and all the TPs for losing positions to the entry price"
|
||||
class="button is-info is-fullwidth">
|
||||
<span class="icon-text">
|
||||
<span class="icon">
|
||||
<i class="fa-solid fa-xmark"></i>
|
||||
</span>
|
||||
<span>All</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="column">
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-delete="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
hx-swap="innerHTML"
|
||||
hx-confirm="Are you sure you wish set all the SLs for profitable positions to the entry price?"
|
||||
class="button is-success is-fullwidth">
|
||||
<span class="icon-text">
|
||||
<span class="icon">
|
||||
<i class="fa-solid fa-xmark"></i>
|
||||
</span>
|
||||
<span>Winners</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="column">
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-delete="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
hx-swap="innerHTML"
|
||||
hx-confirm="Are you sure you wish set all the TPs for losing positions to the entry price?"
|
||||
class="button is-warning is-fullwidth">
|
||||
<span class="icon-text">
|
||||
<span class="icon">
|
||||
<i class="fa-solid fa-xmark"></i>
|
||||
</span>
|
||||
<span>Losers</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
|
@ -1,5 +1,3 @@
|
|||
<p class="title">Management panel</p>
|
||||
|
||||
<table class="table is-fullwidth is-hoverable">
|
||||
<thead>
|
||||
<th>name</th>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
class="button is-info">
|
||||
<span class="icon-text">
|
||||
<span class="icon">
|
||||
<i class="fa-solid fa-plus"></i>
|
||||
<i class="fa-solid fa-xmark"></i>
|
||||
</span>
|
||||
<span>Delete all {{ context_object_name }} </span>
|
||||
</span>
|
||||
|
|
|
@ -0,0 +1,253 @@
|
|||
<table class="table is-fullwidth is-hoverable">
|
||||
<thead>
|
||||
<th>-</th>
|
||||
<th>All</th>
|
||||
<th>Winners</th>
|
||||
<th>Losers</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Both</th>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-info is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP and SL for all in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-info is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP and SL for all from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-success is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP and SL for winners in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-success is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP and SL for winners from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-danger is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP and SL for losers in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-danger is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP and SL for losers from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>TP</th>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-info is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP for all in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-info is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP for all from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-success is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP for winners in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-success is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP for winners from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-danger is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP for losers in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-danger is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="TP for losers from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>SL</th>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-info is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="SL for all in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-info is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="SL for all from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-success is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="SL for winners in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-success is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="SL for winners from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-danger is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="SL for losers in %">
|
||||
<i class="fa-solid fa-percent"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'
|
||||
hx-get="#"
|
||||
hx-trigger="click"
|
||||
hx-target="#modals-here"
|
||||
class="button is-danger is-small">
|
||||
<span class="icon-text">
|
||||
<span class="icon" data-tooltip="SL for losers from current price in %">
|
||||
<i class="fa-solid fa-money-bill"></i>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
Loading…
Reference in New Issue