quiet mode support ready2live

This commit is contained in:
David Brazda
2023-04-20 13:26:34 +02:00
parent 6a0b395c64
commit 7a9b005cf5
9 changed files with 55 additions and 16 deletions

View File

@ -4,10 +4,10 @@ from v2realbot.strategy.base import StrategyState
from v2realbot.strategy.StrategyOrderLimitVykladaci import StrategyOrderLimitVykladaci from v2realbot.strategy.StrategyOrderLimitVykladaci import StrategyOrderLimitVykladaci
from v2realbot.enums.enums import RecordType, StartBarAlign, Mode, Account, OrderSide from v2realbot.enums.enums import RecordType, StartBarAlign, Mode, Account, OrderSide
from v2realbot.indicators.indicators import ema from v2realbot.indicators.indicators import ema
from v2realbot.utils.utils import ltp, isrising, isfalling,trunc,AttributeDict, zoneNY, price2dec, dict_replace_value from v2realbot.utils.utils import ltp, isrising, isfalling,trunc,AttributeDict, zoneNY, price2dec, dict_replace_value, print
from datetime import datetime from datetime import datetime
from icecream import install, ic from icecream import install, ic
from rich import print #from rich import print
from threading import Event from threading import Event
from msgpack import packb, unpackb from msgpack import packb, unpackb
import asyncio import asyncio
@ -119,7 +119,7 @@ def next(data, state: StrategyState):
qty = qty + int(state.vars.chunk) qty = qty + int(state.vars.chunk)
else: else:
state.buy_l(price=price, size=qty) state.buy_l(price=price, size=qty)
print(i,"BUY limitka - delta",curve[i]," cena:", price, "mnozstvi:", qty) #print(i,"BUY limitka - delta",curve[i]," cena:", price, "mnozstvi:", qty)
qty = int(state.vars.chunk) qty = int(state.vars.chunk)
last_price = price last_price = price
state.vars.blockbuy = 1 state.vars.blockbuy = 1
@ -174,10 +174,10 @@ def next(data, state: StrategyState):
slope = ((state.bars.close[-1] - lookbackprice)/lookbackprice)*100 slope = ((state.bars.close[-1] - lookbackprice)/lookbackprice)*100
state.indicators.slope.append(slope) state.indicators.slope.append(slope)
state.statinds.angle = dict(time=state.bars.time[-1], price=state.bars.close[-1], lookbacktime=state.bars.time[-slope_lookback], lookbackprice=lookbackprice) state.statinds.angle = dict(time=state.bars.time[-1], price=state.bars.close[-1], lookbacktime=state.bars.time[-slope_lookback], lookbackprice=lookbackprice, minimum_slope=minimum_slope)
#state.indicators.roc.append(roc) #state.indicators.roc.append(roc)
print("slope", state.indicators.slope[-5:]) #print("slope", state.indicators.slope[-5:])
state.ilog(e="Slope "+str(slope), msg="lookback price:"+str(lookbackprice), lookbackoffset=lookback_offset, minimum_slope=minimum_slope, last_slopes=state.indicators.slope[-5:]) state.ilog(e="Slope "+str(slope), msg="lookback price:"+str(lookbackprice), lookbackoffset=lookback_offset, minimum_slope=minimum_slope, last_slopes=state.indicators.slope[-5:])
else: else:
state.ilog(e="Slope - not enough data", slope_lookback=slope_lookback) state.ilog(e="Slope - not enough data", slope_lookback=slope_lookback)
@ -200,7 +200,7 @@ def next(data, state: StrategyState):
#print(orderlist) #print(orderlist)
pendingbuys_new = {} pendingbuys_new = {}
limitka_old = state.vars.limitka limitka_old = state.vars.limitka
print("Puvodni LIMITKA", limitka_old) #print("Puvodni LIMITKA", limitka_old)
#zaciname s cistym stitem #zaciname s cistym stitem
state.vars.limitka = None state.vars.limitka = None
state.vars.limitka_price = None state.vars.limitka_price = None
@ -208,7 +208,7 @@ def next(data, state: StrategyState):
limitka_qty = 0 limitka_qty = 0
for o in orderlist: for o in orderlist:
if o.side == OrderSide.SELL: if o.side == OrderSide.SELL:
print("Nalezena LIMITKA") #print("Nalezena LIMITKA")
limitka_found = True limitka_found = True
state.vars.limitka = o.id state.vars.limitka = o.id
state.vars.limitka_price = o.limit_price state.vars.limitka_price = o.limit_price
@ -233,7 +233,7 @@ def next(data, state: StrategyState):
#snad to nespadne, kdyztak pridat exception handling #snad to nespadne, kdyztak pridat exception handling
state.vars.limitka = asyncio.run(state.interface.repl(price=state.vars.limitka_price, orderid=state.vars.limitka, size=int(state.positions))) state.vars.limitka = asyncio.run(state.interface.repl(price=state.vars.limitka_price, orderid=state.vars.limitka, size=int(state.positions)))
limitka_qty = int(state.positions) limitka_qty = int(state.positions)
state.ilog(e="Změněna limitka", limitka=str(state.vars.limitka), limitka_price=state.vars.limitka_price) state.ilog(e="Změněna limitka", limitka=str(state.vars.limitka), limitka_price=state.vars.limitka_price, limitka_qty=limitka_qty)
if pendingbuys_new != state.vars.pendingbuys: if pendingbuys_new != state.vars.pendingbuys:
state.ilog(e="Rozdilna PB prepsana", pb_new=pendingbuys_new, pb_old = state.vars.pendingbuys) state.ilog(e="Rozdilna PB prepsana", pb_new=pendingbuys_new, pb_old = state.vars.pendingbuys)

View File

@ -2,6 +2,7 @@ from alpaca.data.enums import DataFeed
from v2realbot.enums.enums import Mode, Account from v2realbot.enums.enums import Mode, Account
from appdirs import user_data_dir from appdirs import user_data_dir
QUIET_MODE = True
COUNT_API_REQUESTS = False COUNT_API_REQUESTS = False
STRATVARS_UNCHANGEABLES = ['pendingbuys', 'blockbuy', 'jevylozeno', 'limitka'] STRATVARS_UNCHANGEABLES = ['pendingbuys', 'blockbuy', 'jevylozeno', 'limitka']
DATA_DIR = user_data_dir("v2realbot") DATA_DIR = user_data_dir("v2realbot")

View File

@ -182,7 +182,7 @@ function connect(event) {
for (const [klic, hodnota] of Object.entries(statinds)) { for (const [klic, hodnota] of Object.entries(statinds)) {
console.log(JSON.stringify(klic)) console.log(JSON.stringify(klic))
console.log(JSON.stringify(hodnota)) console.log(JSON.stringify(hodnota))
//TODO predelat na configuracni klice vizualizacni dotahovane z backendu, ktere namapuji vybrane stratvars na typ vizualizace
if (klic === "angle") { if (klic === "angle") {
//nejsou vsechny hodnoty //nejsou vsechny hodnoty
@ -233,13 +233,35 @@ function connect(event) {
if (searchObject == undefined) { if (searchObject == undefined) {
//console.log("object new - init and add") //console.log("object new - init and add")
var obj = {name: key, series: null} var obj = {name: key, series: null}
//predelat configuracne
//inicializace indicatoru
//momentum
if (momentumIndicatorNames.includes(key)) { if (momentumIndicatorNames.includes(key)) {
obj.series = chart.addLineSeries({ obj.series = chart.addLineSeries({
priceScaleId: 'left', priceScaleId: 'left',
title: key, title: key,
lineWidth: 1 lineWidth: 1
}); });
//natvrdo nakreslime lajnu pro min angle
//TODO predelat na configuracne
const minSlopeLineOptopns = {
price: parsed_data.statinds.angle.minimum_slope,
color: '#b67de8',
lineWidth: 2,
lineStyle: 2, // LineStyle.Dotted
axisLabelVisible: true,
title: "max:",
};
const minSlopeLine = obj.series.createPriceLine(minSlopeLineOptopns);
} }
//ostatni
else { else {
obj.series = chart.addLineSeries({ obj.series = chart.addLineSeries({
//title: key, //title: key,

View File

@ -2,12 +2,12 @@
Strategy base class Strategy base class
""" """
from datetime import datetime from datetime import datetime
from v2realbot.utils.utils import AttributeDict, zoneNY, is_open_rush, is_close_rush, json_serial from v2realbot.utils.utils import AttributeDict, zoneNY, is_open_rush, is_close_rush, json_serial, print
from v2realbot.utils.tlog import tlog from v2realbot.utils.tlog import tlog
from v2realbot.enums.enums import RecordType, StartBarAlign, Mode, Order, Account from v2realbot.enums.enums import RecordType, StartBarAlign, Mode, Order, Account
from v2realbot.config import BT_DELAYS, get_key, HEARTBEAT_TIMEOUT from v2realbot.config import BT_DELAYS, get_key, HEARTBEAT_TIMEOUT
import queue import queue
from rich import print #from rich import print
from v2realbot.loader.aggregator import TradeAggregator2Queue, TradeAggregator2List, TradeAggregator from v2realbot.loader.aggregator import TradeAggregator2Queue, TradeAggregator2List, TradeAggregator
from v2realbot.loader.order_updates_streamer import LiveOrderUpdatesStreamer from v2realbot.loader.order_updates_streamer import LiveOrderUpdatesStreamer
from v2realbot.loader.trade_offline_streamer import Trade_Offline_Streamer from v2realbot.loader.trade_offline_streamer import Trade_Offline_Streamer
@ -39,6 +39,8 @@ class Strategy:
self.state: StrategyState = None self.state: StrategyState = None
self.bt: Backtester = None self.bt: Backtester = None
self.debug = False self.debug = False
self.debug_target_iter = 0
self.debug_iter_cnt = 0
#skip morning or closing rush #skip morning or closing rush
self.open_rush = open_rush self.open_rush = open_rush
self.close_rush = close_rush self.close_rush = close_rush
@ -169,8 +171,18 @@ class Strategy:
ic('time updated') ic('time updated')
def strat_loop(self, item): def strat_loop(self, item):
##TODO do samostatne funkce
if self.debug: if self.debug:
a = input("Press key before next iteration") self.debug_iter_cnt += 1
if (self.debug_iter_cnt >= self.debug_target_iter):
try:
cnt = int(input("Press enter for next iteration or number to skip"))
self.debug_target_iter = self.debug_iter_cnt + cnt
except ValueError:
self.debug_target_iter = self.debug_iter_cnt + 1
self.update_times(item) self.update_times(item)
## BT - execute orders that should have been filled until this time ## BT - execute orders that should have been filled until this time

View File

@ -4,7 +4,7 @@ from queue import Queue
from datetime import datetime, timezone, time, timedelta, date from datetime import datetime, timezone, time, timedelta, date
import pytz import pytz
from dateutil import tz from dateutil import tz
from rich import print from rich import print as richprint
import decimal import decimal
from icecream import ic from icecream import ic
from v2realbot.enums.enums import RecordType, Mode, StartBarAlign from v2realbot.enums.enums import RecordType, Mode, StartBarAlign
@ -13,7 +13,7 @@ import os
from v2realbot.common.model import StrategyInstance, Runner from v2realbot.common.model import StrategyInstance, Runner
from typing import List from typing import List
import tomli import tomli
from v2realbot.config import DATA_DIR from v2realbot.config import DATA_DIR, QUIET_MODE
import requests import requests
from uuid import UUID from uuid import UUID
@ -67,7 +67,11 @@ qu = Queue()
zoneNY = tz.gettz('America/New_York') zoneNY = tz.gettz('America/New_York')
def print(*args, **kwargs): def print(*args, **kwargs):
ic(*args, **kwargs) if QUIET_MODE:
pass
else:
#ic(*args, **kwargs)
richprint(*args, **kwargs)
def price2dec(price: float) -> float: def price2dec(price: float) -> float:
""" """