bugfixy highlight + batchid v dttbls

This commit is contained in:
David Brazda
2023-10-19 20:54:30 +02:00
parent 9bd4a84d2a
commit d5ebfee762
11 changed files with 14039 additions and 50 deletions

View File

@ -51,7 +51,7 @@ Hlavní loop:
"""
def next(data, state: StrategyState):
print(10*"*","NEXT START",10*"*")
##print(10*"*","NEXT START",10*"*")
# important vars state.avgp, state.positions, state.vars, data
#indicators moved to call_next in upper class

View File

@ -48,7 +48,8 @@ from joblib import load
#9. jiny pristup by byl ucit model na konkretnich chunkach, ktere chci aby mi identifikoval. Např. určité úseky. Vymyslet. Buď nyni jako test intervaly, ale v budoucnu to treba jen nejak oznacit a poslat k nauceni. Pripadne pak udelat nejaky vycuc.
#10. mozna správným výběrem targetu, můžu taky naučit jen určité věci. Specializace. Stačí když se jednou dvakrát denně aktivuje.
# 11. udelat si go IN model, ktery pomuze strategii generovat vstup - staci jen aby mel trochu lepsi edge nez conditiony, o zbytek se postara logika strategie
# 12. model pro neagregované nebo jen filtroné či velmi lehce agregované trady?
# 12. model pro neagregované nebo jen filtroné či velmi lehce agregované trady? - tickprice
# 13. jako featury pouzit Fourierovo transformaci, na sekundovem baru nebo tickprice
#DULEZITE
# soustredit se v modelech na predikci nasledujici hodnoty, ideálně nějaký vektor ukazující směr (např. 0 - 1, kde nula nebude růst, 1 - bude růst strmě)

View File

@ -177,7 +177,7 @@
<label data-bs-toggle="collapse" data-bs-target="#runner-table-inner">
<h4>Running Strategies</h4>
</label>
<div id="runner-table-inner" class="collapse show" style="width:70%">
<div id="runner-table-inner" class="collapse show" style="width:58%">
<div id="controls">
<label>API-KEY: <input type="password" id="api-key" autocomplete="off"/></label>
<button onclick="store_api_key(event)" id="bt-store" class="btn btn-outline-success btn-sm">Store</button>
@ -236,7 +236,7 @@
<label data-bs-toggle="collapse" data-bs-target="#archive-table-inner">
<h4>Past Runs</h4>
</label>
<div id="archive-table-inner" class="collapse show" style="width:70%">
<div id="archive-table-inner" class="collapse show" style="width:58%">
<!-- <div id="archive-chart">
<div id="chartArchive" style="position: relative;"></div>
<div class="legend" id="legendArchive"></div>
@ -272,8 +272,9 @@
<th>profit</th>
<th>trade</th>
<th>pos</th>
<th>pos_avgp</th>
<th>metrics</th>
<th>avgp</th>
<th>metrics</th>
<th>batchid</th>
</tr>
</thead>
<tbody></tbody>
@ -345,7 +346,7 @@
<label data-bs-toggle="collapse" data-bs-target="#stratin-table-inner">
<h4>Strategies</h4>
</label>
<div id="stratin-table-inner" class="collapse show" style="width:70%">
<div id="stratin-table-inner" class="collapse show" style="width:58%">
<div id="controlsStratin">
<button id="button_add" class="btn btn-outline-success btn-sm">Add</button>
<button id="button_add_json" class="btn btn-outline-success btn-sm">Add JSON</button>

View File

@ -969,14 +969,14 @@ function display_log(iterLogList, timestamp) {
hdr = logLine.time + " " + logLine.event + ' - '+ (logLine.message == undefined ? "" : logLine.message)
hdr = Prism.highlight(hdr, Prism.languages.log, 'log');
row = '<div data-bs-toggle="collapse" class="'+ highlighted + ' shj-lang-log" onclick="set_timestamp(' + logLine.time + ')" data-bs-target="#rec'+logcnt+'">'
row = '<div data-bs-toggle="collapse" class="'+ highlighted + '" onclick="set_timestamp(' + logLine.time + ')" data-bs-target="#rec'+logcnt+'">'
+hdr + '</div>'
str_row = JSON.stringify(logLine.details, null, 2)
//row_detail = '<div id="rec'+logcnt+'" data-toggle="collapse" data-target="#rec'+logcnt+'"class="collapse pidi"><pre>' + str_row + '</pre></div>'
const html = Prism.highlight(str_row, Prism.languages.json, 'json');
//console.log("tady", html)
row_detail = '<div id="rec'+logcnt+'" class="collapse pidi shj-lang-log"><pre><code class="language-log">' + html + '</code></pre></div>'
row_detail = '<div id="rec'+logcnt+'" class="collapse pidi"><pre><code class="language-log">' + html + '</code></pre></div>'
var lines = document.getElementById('lines')
var line = document.createElement('div')

View File

@ -614,12 +614,14 @@ var archiveRecords =
{data: 'end_positions', visible: true},
{data: 'end_positions_avgp', visible: true},
{data: 'metrics', visible: true},
{data: 'batch_id', visible: true},
],
paging: false,
processing: false,
columnDefs: [{
targets: [0,1],
targets: [0,1,17],
render: function ( data, type, row ) {
if (!data) return data
return '<div class="tdnowrap" title="'+data+'">'+data+'</i>'
},
},
@ -695,11 +697,12 @@ var archiveRecords =
{
targets: [16],
render: function ( data, type, row ) {
//console.log("metrics", data)
try {
data = JSON.parse(data)
}
catch (error) {
//console.log(error)
}
var res = JSON.stringify(data)
var unquoted = res.replace(/"([^"]+)":/g, '$1:')

File diff suppressed because one or more lines are too long

View File

@ -24,7 +24,7 @@ Prism.languages.log = {
'level': [
{
pattern: /\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE|-----)\b/,
pattern: /\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE|CONF|-----)\b/,
alias: ['error', 'important']
},
{
@ -36,7 +36,7 @@ Prism.languages.log = {
alias: ['info', 'keyword']
},
{
pattern: /\b(?:DBG|DEBUG|FINE|REVERSE|ADD|EXITADD|SIGNAL)\b/,
pattern: /\b(?:DBG|DEBUG|FINE|REVERSE|ADD|EXITADD|SIGNAL|PRECOND)\b/,
alias: ['debug', 'keyword']
},
{

View File

@ -51,7 +51,7 @@ pre[class*=language-] {
}
.token.boolean {
color: #c39375;
color: #7c7630;
}
.token.function {
@ -63,15 +63,21 @@ pre[class*=language-] {
}
.token.class-name,.token.constant,.token.property,.token.symbol {
color: #f29599;
color: #ae4b86;
}
.token.atrule,.token.builtin,.token.important,.token.selector {
.token.atrule,.token.builtin,.token.selector {
color: #cc99cd
}
.token.important{
color: #be6db7
/* color: #82b3b0 */
}
.token.keyword{
color: #9d8c98
color: #ca7474
/* color: #9d8c98 */
}
.token.attr-value,.token.char,.token.regex,.token.string,.token.variable {

View File

@ -61,6 +61,7 @@ function initialize_statusheader() {
var rows = 2;
var columns = 4;
console.log("initialiting statusheader")
console.log(JSON.stringify(statusBarConfig))
// Create the grid table
@ -262,7 +263,8 @@ function initialize_chart() {
layout: {
background: {
type: 'solid',
color: '#2a2e39',
// color: '#2a2e39',
color: '#151824'
},
textColor: '#d1d4dc',
},

View File

@ -11,7 +11,8 @@
color-scheme: dark;
--bs-body-color: #787b86;
--bs-body-color-rgb: 173,181,189;
--bs-body-bg: #2a2e39;
/* --bs-body-bg: #2a2e39; */
--bs-body-bg: #121722;
--bs-body-bg-rgb: 33,37,41;
--bs-emphasis-color: #adb5bd;
--bs-emphasis-color-rgb: 255,255,255;
@ -225,7 +226,7 @@ html {
flex-basis: auto;
align-self: auto;
order: 0;
margin-inline-start: 50px;
margin-inline-start: 23px;
padding-bottom: 10px;
}
@ -236,7 +237,7 @@ html {
.legend {
position: absolute;
color: #050505;
left: 115px;
left: 100px;
top: 195px;
z-index: 1;
font-size: 12px;
@ -254,19 +255,12 @@ html {
display: flex;
}
#msgContainer {
display: inline-block;
/* overflow: auto; */
height: 596px;
/* width: 32%; */
}
.clearbutton {
margin-left: 29px;
}
/* na male obrazovce je log pod grafem, zobrazujeme tedy prvni logy nahore */
@media (max-width : 1680px) {
@media (max-width : 2000px) {
.msgContainerInner {
display: flex;
overflow: auto;
@ -275,16 +269,29 @@ html {
margin-left: 14px;
width: 100%;
}
#msgContainer {
display: inline-block;
/* overflow: auto; */
height: 600px;
width: 40%;
}
}
@media (min-width: 1681px) {}
.msgContainerInner {
display: flex;
overflow: auto;
height: 568px;
flex-direction: column-reverse;
margin-left: 14px;
width: 130%;
@media (min-width: 2001px) {
.msgContainerInner {
display: flex;
overflow: auto;
height: 568px;
flex-direction: column-reverse;
margin-left: 14px;
width: 130%;
}
#msgContainer {
display: inline-block;
/* overflow: auto; */
height: 600px;
width: max-content;
}
}
#lowercontainer {
@ -405,20 +412,37 @@ pre {
outline: none;
} */
.switcher-item {
/* .switcher-item {
cursor: pointer;
text-decoration: none;
display: inline-block;
padding: 3px 6px;
font-size: 14px;
/* color: #262b3e; */
/* background-color: #818581; */
background-color: #0202022e;;
margin-right: 8px;
margin-bottom: 6px;
border: none;
border-radius: 5px;
outline: none;
} */
.switcher-item {
/* cursor: pointer; */
text-decoration: double;
display: inline-block;
padding: 1px 6px;
font-size: 14px;
/* color: #262b3e; */
/* background-color: #818581; */
background-color: #0202022e;
margin-right: 8px;
margin-bottom: 6px;
/* border: 1px; */
border-radius: 4px;
outline: solid 1px;
outline-color: #323232;
/* outline-width: 1px; */
border-style: none;
}
.switcher-item:hover {

View File

@ -45,8 +45,18 @@ def populate_all_indicators(data, state: StrategyState):
conf_bar = data['confirmed']
last_update_delta, avg_delta = process_delta()
state.ilog(lvl=1,e=f"----- {data['index']}-{conf_bar}--delta:{last_update_delta}---AVGdelta:{avg_delta}", data=data)
conf = "-----"
if conf_bar == 1:
conf = "CONF"
lp = data['close']
state.ilog(lvl=1,e=f"{conf} {data['index']}-{conf_bar}--delta:{last_update_delta}---AVGdelta:{avg_delta}", data=data)
#TODO tento lof patri spis do nextu classic SL - je poplatny typu stratefie
#TODO na toto se podivam, nejak moc zajasonovani a zpatky
#PERF PROBLEM
state.ilog(lvl=1,e="ENTRY", msg=f"LP:{lp} P:{state.positions}/{round(float(state.avgp),3)} SL:{state.vars.activeTrade.stoploss_value if state.vars.activeTrade is not None else None} profit:{round(float(state.profit),2)} Trades:{len(state.tradeList)} pend:{state.vars.pending}", activeTrade=json.loads(json.dumps(state.vars.activeTrade, default=json_serial)), prescribedTrades=json.loads(json.dumps(state.vars.prescribedTrades, default=json_serial)), pending=str(state.vars.pending))
#kroky pro CONFIRMED BAR only
if conf_bar == 1:
#logika pouze pro potvrzeny bar
@ -65,12 +75,7 @@ def populate_all_indicators(data, state: StrategyState):
#populate indicators, that have type in stratvars.indicators
populate_dynamic_indicators(data, state)
lp = data['close']
#TODO na toto se podivam, nejak moc zajasonovani a zpatky
#PERF PROBLEM
state.ilog(lvl=1,e="ENTRY", msg=f"LP:{lp} P:{state.positions}/{round(float(state.avgp),3)} SL:{state.vars.activeTrade.stoploss_value if state.vars.activeTrade is not None else None} profit:{round(float(state.profit),2)} Trades:{len(state.tradeList)} pend:{state.vars.pending}", activeTrade=json.loads(json.dumps(state.vars.activeTrade, default=json_serial)), prescribedTrades=json.loads(json.dumps(state.vars.prescribedTrades, default=json_serial)), pending=str(state.vars.pending))
#vytiskneme si indikatory
inds = get_last_ind_vals()
state.ilog(lvl=1,e="Indikatory", **inds)