Jump to content
Co nového? Mé kurzy
Komunita:
Diskuze Sledované příspěvky Žebříčky
  • Statistiky uživatelů

    31 243
    Celkem uživatelů
    467
    Nejvíce online
    cybery
    Nejnovější uživatel
    cybery
    Registrace
  • Všechny poslední příspěvky

    • Zdravím vás, chtěl bych se zeptat když už mám práci s Amibrokerem hotovou, kde bych měl s vytvořenou a backtestovanou strategií dále pokračovat. Mám teď na mysli k jaké látce bych se měl přesunout. Děkuji za odpověď.
    • Zdravím, ze 14 strategií v obchodním deníku nemohu dostat 2 do analyzátoru. Jsou to obchody futures MNQ,MES,MYM. Můžete mně někdo poradit.   tr_FL.csv tr_FS.csv
    • Petře, děkuji za super reakci a shrnutí. Já jsem se do tohoto procesu zapojil trochu později, ale nyní vše doháním. Rozumím tomu, co píšete, postupu a rád přispěji i s nějakými svými testy. Měl jsem v hlavě při pročítání všech článků nějaké náměty, některé byly již zde testovány (rostoucí či klesající předchozí úsečka, Volume). Chci co nejdříve rozchodit TradeStation  a Option Omega a aktivněji se zapojit do diskuse, vývoje a testování. Pavel
    • Dobrý den, také jsem na tuto informaci narazil. V tuto chvíli se ale nic nemění, skript bude fungovat i na původní verzi knihovny dokud nedojde k nějaké zásadnější úpravě v TWS na straně IB. Nicméně další upgrade Autotraderu bude už zřejmě postavený na nové knihovně a doufejme, že nový tým provede stejně dobrou práci na vývoji jako předchůdce. B. 
    • Ty python kódy "edge finder" nejsou nějaké hotové programy, kde by stačilo  jen něco zapínat/vypínat. Je to řekněme základní nástřel výzkumného workflow, kterým lze trhy zkoumat bez toho aniž bychom museli dělat hned jemný backtest. Náš úkol je tento: Breakouty na ETF jednoznačně fungují. Takto například vypadá historický backtest SPY - breakout long/short na úrovni 0.3 * ATR(5), SL 0.3*ATR(5), výstup na konci dne (pokud není zasažen SL). Bez jakékoliv další logiky. Každý den max. jeden long a max jeden short: stejné pro QQQ: stejné pro USO (ropa): a takto v GLD (zlato): Vidíme tisíce obchodů, jednoznačné tendence že princip funguje. Potíž je v tom, že průměrný obchod bez další logiky je příliš nízký. Výše uvedené equity jsou bez komisí. Našim cílem je tak hledat principy, které nebudou do logiky moc zasahovat, ale vyfiltrují obchody, které mají pravděpodobnost nižší volatility. Tudíž nám zbudou ty s vyšší volatilitou = dostatečně vysokým průměrným obchodem. Ideální je nacházet obecnější principy, které mají stejný dopad na všechny trhy, kde funguje základní breakout (tedy to, co jsem např. ukázal  výše). Nepotřebujeme hledat komplikovaná pravidla obchodního systému, protože jak je vidět výše, funkční princip máme. Hledáme jen vhodný kontext, kdy pravidla exekuovat. Osobně toto řeším kombinací: rámcového testu v poskytnutém pythom worfklow, kde testuji různé další a další principy jemnějšího insample testu v TradeStation Proces vývoje systému není úplně mechanický, tj. je v něm pochopitelně složka určitého bádání a nejistoty. Jsem rád, že se zde pomalu na toto téma spouští diskuze a budu se snažit hlavní body sepsat do nějakého "minikurzu" tak jak se budou vyskytovat otázky, na které budeme hledat odpovědi.  
    • Zdravím, ano, také si myslím, že ten výpočet podmínky není stejný. V Colabu je podmínka  daily["Feature"] = daily["HL_MAD1"] / daily["HL_MAD2"] a HL_MAD se počítá:  daily["HL_MAD1"] = abs(daily["High"] - daily["Low"]).rolling(window=int(5)).mean().    A v emini-edge-finderu, který jsem si stáhnul dříve byla uvedena podmínka: return (dataframe['ATR'].shift(1) > 1*dataframe['ATR'].shift(2)).fillna(False) a ATR se počítá takto: Daily["ATR"]= daily.ta.atr(length=5).   Nyní, když jsem stáhnul emini-edge-finder, tak je tam jen podmínka Gapu: return (dataframe['Gap'] > 0.1*dataframe['ATR'].shift(1)).fillna(False). Když výsledek testu porovnám s testem Colabu se stejnou podmínkou, tak jsou výsledky shodné. Pavel  
    • Jupyter notebook sdílený zde: https://www.financnik.cz/forum/topic/5064-hledani-edge/?do=findComment&comment=319033 a Colab sdílený zde: https://www.financnik.cz/forum/topic/5064-hledani-edge/?do=findComment&comment=319069 jsou stejné nástroje. Jen Colab jsem pro sdílení trochu více dopracoval. Například tak, že jsou tam pravděpodobnosti rozřazené do binů. Proč jsou výsledky různé? Přijde mi, že porovnáváte různé principy. Např. abs(daily["High"] - daily["Low"]).rolling(window=int(5)).mean() - tj. průměr "high - low" za posledních pět úseček není to stejné jako daily.ta.atr(length=5) - tedy ATR(5).  Atr počítá volatilitu včetně gapů. Petr        
    • Zdravím Petře, porovnával jsem si výsledky testů pravděpodobností pomocí publikovaných 2 nástrojů: emini-edge-finder a notebook v Colabu. Vybral jsem stejné období dat na NQ 2010-2018. V Colabu mi při použití filtru daily["Feature"] = daily["HL_MAD1"] / daily["HL_MAD2"] vyšly stejné výsledky jako vám - viz screen. Když jsem v emini-edge-finder použil také podmínku volatility: return (dataframe['ATR'].shift(1) > 1*dataframe['ATR'].shift(2)).fillna(False), tak jsem dostal jiný výsledek - druhý obr. Čím to je? Tím, že se v notebooku v Colabu počítá volatilita takto: daily["HL_MAD1"] = abs(daily["High"] - daily["Low"]).rolling(window=int(5)).mean() a v  emini-edge-finder takto: daily["ATR"]= daily.ta.atr(length=5)? Základní podmínky dataframe['OC'] > 0.75*dataframe['ATR'].shift(1) jsou u obou nástrojů stejné: v Colabu 17,9% a v emini-edge-finderu 18%, což předpokládám je zaokrouhleno 17,9 na 18. I když jsem porovnával s podmínkou, že gap je větší než včerejší ATR, tak mi také oba nástroje dávaly různé výsledky.  Který nástroj na zkoumání pravděpodobnosti upřednostňujete? Ten notebook v Colabu, kde je vidět více škálovatelná pravděpodobnost a kde lze kombinovat více podmínek? Díky, Pavel
    • U nové strategie, která vychází z obchodování gapu (a na které dělám hlavní testy s 0TDE) opcemi mám při testu 4.1.2010 - 23.4.2024 a risku 300 průměrný obchod 68 USD. Hodnoty pro long a short jsou prakticky stejné). Jde o strategii, jejíž hlavní část jsem sdílel zde: https://www.financnik.cz/forum/topic/5064-hledani-edge/?do=findComment&comment=319149 (tuto strategii obchoduji živě s tím, že jsem si tam sám doplnil ještě drobný filtr zvyšující průměrný obchod). U "kompletní ukázkové intradenní breakout strategie" sdílené zde: https://www.financnik.cz/forum/topic/5064-hledani-edge/?do=findComment&comment=319202 je za stejné období průměrný obchod 58,10, což není o tolik méně (u této strategie vychází lépe shorty než longy). Ovšem rozdíl je v krátkodobém testu od 1.6.2022. První strategie (gap) má v SPY průměrný long/short obchod cca 188 dolarů, druhá strategie má ztrácející shorty a průměrný obchod je jen pár dolarů. Tedy určitě je potřeba snažit se ve volatilnějších období táhnout průměrný obchod spíše ke 100 dolarům/obchod (při risku 300) Pokud má strategie příliš nízký průměrný obchod, opce tomu nepomohou, naopak mohou výkonnost trochu zhoršit. Tedy bezesporu bude i u opcí ve finále záležet na aktuální výkonnosti "podkladové strategie". Sám v tuto chvíli preferuji obchodování vycházející z gapu, protože strategie je jednodušší, což mám radši. Na druhou stranu její poslední dobrá výkonnost může být jen důsledek přeoptimalizace a více se začne dařit "reverznímu breakoutu" - tj. "kompletní ukázkové intradenní breakout strategii". Nakonec tak předpokládám, že opět skončím u mixu několika přístupů, které budu obchodovat současně.    
    • Petře, jaký máte prosím average winning trade v dolarech v backtestu z tradestation při risku 300$ na obchod? Pokud správně rozumím opcím, potřebujeme raději méně více ziskových obchodů, než hodně málo ziskových. Jinak nám opce spíše uškodí (drobný pohyb našim směrem na podkladovém aktivu je v případě koupené opce ztráta kvůli nákladům na koupi této opce). Měl jsem v backtetsu podobnou výkonnost, jako Vy, ale backtest přes opce zdaleka tak pěkně nevychází, jako Vám. Nebo dělám někde chybu u testování obchodování přes opce short obchodů, short strana vychází nějak divně  Předpokládám, že vše je v OmegaOption stejné, jen při backtestu short obchodů nastavím Buy Put opci s deltou 55 místo Buy Call opci...
    • Zdravím, chtěl bych upozornit zdejší komunitu že project IB_INSYNC byl uzavřen z důvodu úmrtí autora a nahrazen novým IB_ASYNC, který vzešel z IB_INSYNC (https://ib-api-reloaded.github.io/ib_async/readme.html a https://github.com/ib-api-reloaded/ib_async). Neobsahuje pouze poslední update z ib_insync 0.9.86 ale byly provedeny některé jiné změny. Tomas M.
    • Petře děkuji, já se snažil použít and a or v okně kde definujeme podmínky , a absolutní slepota - změnit to tam kde píšete - tam jsem prostě myšlenkou nedošel.  Použití symbolu místo or ... totéž.
    • Dobře. V diary_v1.3 mi nefunguje buňka číslo 19, můžete poradit? Ten soubor se má někam uložit?
    • Zdravím, uvedená buňka pouze zobrazuje vybrané záznamy načtené z databáze a nemá vliv na rozsah zobrazení výsledků.   Nicméně výsledky se zpracují automaticky pro všechny systémy, u kterých byly ve vybraném období provedeny obchody. S omezením jsem při vývoji nepočítal, jedině je možné odstranit nechtěné sloupce z tabulky Portfolio pomocí funkce drop(), to však zruší pouze příslušnou linku z grafu, ale nepromítne se výpočtu celkové equity. B.
    • Zdravím, nemáte definované váhy pro zpracovávané strategie. Doporučuji shlédnout čtvrtou lekci minikurzu Obchodního deníku, tam je podrobněji popsaná práce s novou verzí diary.ipynb, které buňky spouštět, co nastavit a jak postupovat. B.
    • Zdravím, obchodní deník diary_v1.3 funguje a když stáhl diary_v1.5 tak nefunguje. Zpracování denních změn   z externiho XLSX souboru In [38]:         equities = diary.getEquities_XLS('data/Obchodni_denik_2024.xlsx', strategie = ['SMRUSA_L', 'SMRUSA_S', 'SMRCA_L', 'MOB']) equities       --------------------------------------------------------------------------- FileNotFoundError Traceback (most recent call last) Input In [38], in <cell line: 1>() ----> 1 equities = diary.getEquities_XLS('data/Obchodni_denik_2024.xlsx', strategie = ['SMRUSA_L', 'SMRUSA_S', 'SMRCA_L', 'MOB']) 2 equities File ~\Desktop\Denik nová verze\diary.py:704, in Diary.getEquities_XLS(self, source, datum_spusteni, strategie) 702 equities = {} 703 for s in strategie: --> 704 df = pd.read_excel(source, sheet_name=s,header=2) 705 df = df[df['Status'] == 'close'] 706 data = pd.DataFrame() File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\util\_decorators.py:311, in deprecate_nonkeyword_arguments.<locals>.decorate.<locals>.wrapper(*args, **kwargs) 305 if len(args) > num_allow_args: 306 warnings.warn( 307 msg.format(arguments=arguments), 308 FutureWarning, 309 stacklevel=stacklevel, 310 ) --> 311 return func(*args, **kwargs) File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\excel\_base.py:457, in read_excel(io, sheet_name, header, names, index_col, usecols, squeeze, dtype, engine, converters, true_values, false_values, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, parse_dates, date_parser, thousands, decimal, comment, skipfooter, convert_float, mangle_dupe_cols, storage_options) 455 if not isinstance(io, ExcelFile): 456 should_close = True --> 457 io = ExcelFile(io, storage_options=storage_options, engine=engine) 458 elif engine and engine != io.engine: 459 raise ValueError( 460 "Engine should not be specified when passing " 461 "an ExcelFile - ExcelFile already has the engine set" 462 ) File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\excel\_base.py:1376, in ExcelFile.__init__(self, path_or_buffer, engine, storage_options) 1374 ext = "xls" 1375 else: -> 1376 ext = inspect_excel_format( 1377 content_or_path=path_or_buffer, storage_options=storage_options 1378 ) 1379 if ext is None: 1380 raise ValueError( 1381 "Excel file format cannot be determined, you must specify " 1382 "an engine manually." 1383 ) File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\excel\_base.py:1250, in inspect_excel_format(content_or_path, storage_options) 1247 if isinstance(content_or_path, bytes): 1248 content_or_path = BytesIO(content_or_path) -> 1250 with get_handle( 1251 content_or_path, "rb", storage_options=storage_options, is_text=False 1252 ) as handle: 1253 stream = handle.handle 1254 stream.seek(0) File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\common.py:798, in get_handle(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options) 789 handle = open( 790 handle, 791 ioargs.mode, (...) 794 newline="", 795 ) 796 else: 797 # Binary mode --> 798 handle = open(handle, ioargs.mode) 799 handles.append(handle) 801 # Convert BytesIO or file objects passed with an encoding FileNotFoundError: [Errno 2] No such file or directory: 'data/Obchodni_denik_2024.xlsx'   z databáze In [39]:         equities = diary.getEquities(start='2024-02-20', end='2024-03-29') #equities = diary.getEquities() # zpracuje vsechny zaznamy nalezene v databazi #equities = diary.getEquities(start='2024-02-21', end='2024-03-29', account='Uxxxxxxx') equities       NOTICE: SQL query >SELECT substr(exitDate,1,11) as date, "NetP/L" FROM diary WHERE strategy="FS" AND exitDate>="2024-02-20" AND exitDate<"2024-03-29" ORDER BY exitDate< returned no data Out[39]: {'FinwinL': Return Date 2024-03-01 3.49 2024-03-04 105.27 2024-03-15 85.31, 'MR3000S': Return Date 2024-02-23 17.27 2024-02-26 117.83 2024-02-27 321.79 2024-02-29 384.18 2024-03-04 366.45 2024-03-05 356.29 2024-03-12 422.93 2024-03-14 564.77 2024-03-19 845.37 2024-03-28 891.69, 'MR3000L': Return Date 2024-02-22 120.75 2024-02-23 161.88 2024-03-06 134.17 2024-03-12 282.45 2024-03-14 135.57 2024-03-15 137.83 2024-03-18 157.86 2024-03-19 158.81 2024-03-26 161.25, 'FinwinS': Return Date 2024-03-04 -60.86 2024-03-05 -6.86 2024-03-07 -38.93 2024-03-08 11.83 2024-03-18 67.21 2024-03-19 52.23 2024-03-21 84.13, 'MicroBreakout': Return Date 2024-02-20 -309.220 2024-02-26 -400.520 2024-02-27 -624.990 2024-02-28 -591.470 2024-02-29 -793.150 2024-03-05 -813.550 2024-03-07 -836.690 2024-03-08 -984.440 2024-03-12 -1006.510 2024-03-13 -1233.920 2024-03-15 -1056.700 2024-03-22 -758.740 2024-03-25 -1086.656 2024-03-26 -1136.138 2024-03-28 128.588, 'MondayBuyer': Return Date 2024-02-26 -42.375 2024-03-28 55.515, 'FL': Return Date 2024-02-22 1130.86 2024-02-23 2429.62 2024-03-04 3288.38, 'TDMR1L': Return Date 2024-02-22 -84.57 2024-02-29 -771.27, 'SMRCA_L': Return Date 2024-02-22 -16.50 2024-02-26 -101.32 2024-02-27 -371.18 2024-03-01 -404.73 2024-03-18 -377.27 2024-03-19 -1053.43, 'SMO NDX': Return Date 2024-03-04 -579.32 2024-03-26 -503.55 2024-03-27 -497.96 2024-03-28 219.02, 'MRS2': Return Date 2024-02-23 -16.41 2024-03-05 2.11 2024-03-07 19.29 2024-03-08 34.17 2024-03-21 20.26, 'SMRR3000_L': Return Date 2024-02-22 -128.86 2024-02-23 -110.68 2024-02-26 -150.50 2024-02-29 -129.11 2024-03-01 -123.85 2024-03-05 -149.79 2024-03-07 -151.39 2024-03-19 -184.14 2024-03-21 -104.01, 'SMRR3000_S': Return Date 2024-02-22 -9.230 2024-02-23 -169.550 2024-02-26 -57.930 2024-03-07 2.500 2024-03-08 15.410 2024-03-12 -101.910 2024-03-14 -164.540 2024-03-15 -121.870 2024-03-18 -122.210 2024-03-19 -116.021 2024-03-20 -78.511 2024-03-21 -36.681 2024-03-26 -34.021 2024-03-28 -110.051}   Vypocet portfolia In [40]:         # definujeme celkovy kapital portfolia diary.setInitEquity(25000) # definujeme ticker pro benchmark benchmark="QQQ" # zobrazi obchodovane strategie, u kterych je nutne definovat vahu equities.keys()     Out[40]: dict_keys(['FinwinL', 'MR3000S', 'MR3000L', 'FinwinS', 'MicroBreakout', 'MondayBuyer', 'FL', 'TDMR1L', 'SMRCA_L', 'SMO NDX', 'MRS2', 'SMRR3000_L', 'SMRR3000_S']) In [41]:         diary.setStrategyValues({ 'SMRUSA_L': 5000, 'SMRUSA_S': 5000, 'SMRCA_L': 5000, 'MPL': 5000, 'MOB': 5000, })       In [42]:         portfolio = diary.getPortfolio(equities, inPercentage=True, benchmark=benchmark) #portfolio = diary.getPortfolio(equities, inPercentage=True, since='2024-01-01', systemEquity=True, benchmark=benchmark) portfolio.tail(3)       --------------------------------------------------------------------------- KeyError Traceback (most recent call last) Input In [42], in <cell line: 1>() ----> 1 portfolio = diary.getPortfolio(equities, inPercentage=True, benchmark=benchmark) 2 #portfolio = diary.getPortfolio(equities, inPercentage=True, since='2024-01-01', systemEquity=True, benchmark=benchmark) 3 portfolio.tail(3) File ~\Desktop\Denik nová verze\diary.py:456, in Diary.getPortfolio(self, equities, inPercentage, systemEquity, benchmark, since) 453 if inPercentage: 454 if self.__initEquity > 0: 455 #capital = self.getMarketValue(strategy=strategy) --> 456 capital = self.__strategyEquity[strategy] 457 if not systemEquity: 458 capital = self.__initEquity KeyError: 'FinwinL'   Grafy In [43]:         # vykonost jednotlivych systemu plt.figure(figsize=(10, 6)) diary.pct_plot(portfolio,grid=3)       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [43], in <cell line: 3>() 1 # vykonost jednotlivych systemu 2 plt.figure(figsize=(10, 6)) ----> 3 diary.pct_plot(portfolio,grid=3) NameError: name 'portfolio' is not defined   <Figure size 2000x1200 with 0 Axes> In [44]:         # vykonnost portfolia vs benchmark qs.plots.returns(portfolio["Total_chg"], benchmark) #qs.plots.log_returns(portfolio["Total_chg"], 'SPY')       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [44], in <cell line: 2>() 1 # vykonnost portfolia vs benchmark ----> 2 qs.plots.returns(portfolio["Total_chg"], benchmark) NameError: name 'portfolio' is not defined In [45]:         # drawdown hloubka + délka qs.plots.drawdown(portfolio["Total_chg"])       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [45], in <cell line: 2>() 1 # drawdown hloubka + délka ----> 2 qs.plots.drawdown(portfolio["Total_chg"]) NameError: name 'portfolio' is not defined In [46]:         diary.ddperiods_plot(portfolio["Total"])       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [46], in <cell line: 1>() ----> 1 diary.ddperiods_plot(portfolio["Total"]) NameError: name 'portfolio' is not defined In [47]:         # procentální denní pohyb portfolia qs.plots.daily_returns(portfolio["Total_chg"], benchmark)       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [47], in <cell line: 2>() 1 # procentální denní pohyb portfolia ----> 2 qs.plots.daily_returns(portfolio["Total_chg"], benchmark) NameError: name 'portfolio' is not defined   Statistiky In [48]:         qs.reports.metrics(portfolio["Total_chg"], benchmark)       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [48], in <cell line: 1>() ----> 1 qs.reports.metrics(portfolio["Total_chg"], benchmark) NameError: name 'portfolio' is not defined In [49]:         qs.plots.monthly_returns(portfolio["Total_chg"])       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [49], in <cell line: 1>() ----> 1 qs.plots.monthly_returns(portfolio["Total_chg"]) NameError: name 'portfolio' is not defined   Export dat In [50]:         # export deniku do csv souboru diary.export2CSV(delimiter=',')       In [51]:         # export deniku do xls souboru diary.export2EXCEL()       --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Input In [51], in <cell line: 2>() 1 # export deniku do xls souboru ----> 2 diary.export2EXCEL() AttributeError: 'Diary' object has no attribute 'export2EXCEL' In [52]:         # export deniku do Tradingroom Analyzeru diary.export2tradingroom(['MRL','MRS'])       NOTICE: SQL query >SELECT * FROM diary where strategy ="MRL" < returned no data   --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Input In [52], in <cell line: 2>() 1 # export deniku do Tradingroom Analyzeru ----> 2 diary.export2tradingroom(['MRL','MRS']) File ~\Desktop\Denik nová verze\diary.py:669, in Diary.export2tradingroom(self, strategies) 667 for strategy in strategies: 668 data = self.__db.query(sql='SELECT * FROM diary where strategy ="' + strategy + '" ', res2df=True) --> 669 data.rename(columns={'ticker': 'Symbol', 'possition': 'Trade', 'entryDate': 'Date', 'exitDate': 'Ex. Date', 'entryPrice': 'Price', 'exitPrice': 'Ex. Price', 'quantity': 'Shares'}, inplace=True) 670 data['Trade'] = data['Trade'].replace({'SHORT': 'Short', 'LONG': 'Long'}) 672 data['Date'] = pd.to_datetime(data['Date']) AttributeError: 'bool' object has no attribute 'rename' In [53]:         # export ddeniku do analyseru diary.export2analyser(portfolio)       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [53], in <cell line: 2>() 1 # export ddeniku do analyseru ----> 2 diary.export2analyser(portfolio) NameError: name 'portfolio' is not defined In [54]:         # export portfolia do csv souboru portfolio.to_csv("portfolio.csv")       --------------------------------------------------------------------------- NameError Traceback (most recent call last) Input In [54], in <cell line: 2>() 1 # export portfolia do csv souboru ----> 2 portfolio.to_csv("portfolio.csv") NameError: name 'portfolio' is not defined   Správa dat In [55]:         diary.getMissedTrades() #diary.getMissedTrades("M3L")     Out[55]:   id datetime acctNumber clientId ticker permId action quantity avgPrice netValue commission value orderRef timestamp price execId exchange realizedPNL processed 0 2984 2023-07-18 15:30:02+02:00 U7404397 0 HGBL 354010407 BOT 223 4.00 892.00 1.16 893.16 MicroBreakout 2023-07-18 20:07:54 4.00 00010129.64b65cb8.01.01 SMART 0 0 1 4494 2024-02-15 18:46:15+01:00 U7404397 0 CRWD 759296841 BOT 8 332.62 2660.96 0.34 2661.30 SMO NDX 2024-02-15 21:02:50 332.62 000100df.65ce2aab.01.01 SMART 0 0 2 4496 2024-02-15 19:30:00+01:00 U7404397 0 MES 1521297978 SLD 1 5100.00 5100.00 0.62 5100.62 FS 2024-02-15 21:02:50 5100.00 0000d8df.65cda627.01.01 CME 0 0 3 4655 2024-03-04 15:31:40+01:00 U7404397 0 MNQ 90554854 BOT 1 18550.00 18550.00 0.62 18550.62 FL 2024-03-04 21:02:17 18550.00 0000d94c.65e518d8.01.01 CME 0 0 4 4835 2024-03-28 14:30:00+01:00 U7404397 0 BRAG 1463457611 BOT 144 6.44 927.36 0.75 928.11 MicroBreakout 2024-03-28 20:19:35 6.44 000100df.66052db0.01.01 SMART 0 0 5 4836 2024-03-28 14:30:00+01:00 U7404397 0 GTH 1463457621 BOT 179 4.02 719.58 0.93 720.51 MicroBreakout 2024-03-28 20:19:35 4.02 00010129.66052b05.01.01 SMART 0 0 6 4837 2024-03-28 14:30:01+01:00 U7404397 0 EEX 1463457616 BOT 16 6.96 111.36 0.37 111.73 MicroBreakout 2024-03-28 20:19:35 6.96 00012dfa.66054537.01.01 SMART 0 0 7 4838 2024-03-28 14:30:01+01:00 U7404397 0 EEX 1463457616 BOT 114 6.96 793.44 0.24 793.68 MicroBreakout 2024-03-28 20:19:35 6.96 00012dfa.66054538.01.01 SMART 0 0 8 4839 2024-03-28 14:31:59+01:00 U7404397 0 W 1463457607 SLD 22 70.11 1542.42 0.34 1542.76 SMRR3000_S 2024-03-28 20:19:35 70.11 00012e19.660546fa.01.01 SMART 0 0 9 4895 2024-04-03 15:30:00+02:00 U7404397 0 GENC 1115859691 BOT 53 16.72 886.16 0.39 886.55 MicroBreakout 2024-04-03 20:01:39 16.72 00014460.660d07fe.01.01 SMART 0 0 In [ ]:        
    • Ahoj, díky, taky mám účet u FIO a vím, že je tam při tak malé platbě poplatek 500,- Kč. Nevíš nebo někdo jiný, jestli se to nedá poslat třeba přes Revolut bez poplatků? Pavel
    • Posílal jsem to Pavle jako zahraniční platbu z FIO banky, byl tam poplatek 500 Kč. Do toho SWIFT kódu jsem musel přidat XXX (to je zkratka pro hlavní centrálu každé banky), bez toho mi to nebralo. A rději jsem do zprávy vyplnil své jméno a číslo účtu. Tady je print screen.
    • Dobrá práce. Zkoumání volume jsem se zatím moc nevěnoval, určitě to může být také cesta. Co se podmínky nebo týče. V Colabu je použit kód pro kombinaci dvou podmínek s pomocí AND. To je tato finální část: daily["Condition"] = daily["Feature"].where(Filter1 & Filter2) & znamená AND Tuto podmínku lze zaměnit za nebo. V Pythonu se používá symbol "pipe". Takto vypadá finální podmínka s využitím nebo logiky: daily["Condition"] = daily["Feature"].where(Filter1 | Filter2) Osobně jsem zatím or v tomto kontextu nepoužíval. Postupuji takto: - Pomocí edge finderu hledám skutečně jen ty nejsilnější kontexty. V posledních týdnech jsem například takto postavil své nové intradenní breakout systémy, které jejichž nasazení živě jsem zde reportoval a ten kontext byl "velký gap". - Následně se přepínám do TradeStation a na striktně in-sample datech /např. 2017-2022/ sleduji, jak vypadají konkrétní parametry ultra jednoduchého systému s daným kontextem - tj. například "dnes je velký gap", otevírám long/short breakout atd.  - Vesměs je myšlenku třeba trochu dotáhnout, aby se zvýšil průměrný obchod. A zde již pracuji i s podmínkami nebo (např. ve stylu - trh včera uzavřel nad high nebo pod low předchozího dne atd). Hledám nuance, které budou v in-sample fungovat na všech indexech a také trzích jako ropa a zlato. Petr
×
×
  • Vytvořit...