Jump to content
Co nového? Mé kurzy
Komunita:
Diskuze Sledované příspěvky Žebříčky
  1. Otevřená sekce

    1. 15
      15 příspěvků
  2. Uzavřené diskuze pro absolventy kurzů Finančníka

    1. TechLab

      Pracovní skupina poskytovaná tradery pro tradery. Naleznete v ní odpovědi na své technické otázky týkající se programů Amibroker, Python, InteractiveBrokers TWS a TradeStation Global.

      7,6k
      7,6k příspěvků
    2. Trading Room

      Diskuzní skupina v rámci Trading Roomu.

      574
      574 příspěvků
      • illk
    3. 422
      422 příspěvků
    4. Základy práce s programem Amibroker

      Uzavřená diskuze pro účastníky online kurzu Základy práce s programem Amibroker.

      189
      189 příspěvků
      • petr
    5. FIMS A–Z: Profesionální daytrading orderflow

      Diskuze o intradenním obchodování v rámci informací prezentovaných v kurzu FIMS A–Z: Profesionální daytrading orderflow.

      29,3k
      29,3k příspěvků
      • Jack
  3. Archiv původních anonymních diskuzích

    1. 201,1k
      201,1k příspěvků
  • Statistiky uživatelů

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

    • 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
    • Ty kódy jsem vytvářel samostatně a různé roky, tj. podobné drobné odchylky tam být mohou. Není v tom v zásadě žádný rozdíl. Je určitě lepší pracovat s časem >=0935. Já vesměs vstupuji trochu dál od vstupní ceny a nebývá to na první úsečce. A dřívější ukončování obchodů. Také jsem to zkoumal. Ale zdá se mi, že u indexů se vyplatí obchodovat průrazy i odpoledne. Občas přijde zajímavý obchod.
    • Děkuji za odpověď. Existuje tedy, prosím, nějaká možnost, jak si zobrazit výsledky jen pro vybrané strategie, ne jen buď pro jednu anebo pro všechny? Děkuji a mějte se.
    • Zdravím, zakládám účet u TS, prosím tě, jak jsi provedl platbu 50$, stačily k tomu tyto údaje SWIFT BIC a Account Number? A samozřejmě adresa příjemce. Fundoval jsi to bankovním převodem nebo je nějak jinak? Díky, Pavel.
    • Dobrý den, jedná se o funkci export2tradingroom(), viz poslední lekce minikurzu. B.
    • Zdravím, uvedená funkce a upgrade už funguje? Můžete mě nasměrovat? Děkuji.
    • Porovnával jsem Petře nyní kódy uvedené v tomto vláknu, jeden pro vstup na základě GAP podmínky a druhý na základě rostoucí volatility. Při udávání vstupů máte v každém kódu jiné časové podmínky If Time >= 0935 and time<1500 If Time > 0940 and time<1530 Je to čistě jen otázka preference nebo to má nějaký hlubší smysl? Jinak další tip pro zvýšení průměrné velikosti obchodu, můžeme končit vstupy dříve, např. v 13:00, stejně jako u FINWIN.
    • aktuálně zkouším podmínky ke zvýšení pravděpodobnosti volatilních dnů, zatím mi dává smysl jedna, kdy porovnávám  volume předchozího dne s mean hodnotou za předcházejícíh 5 dnů daily["Feature"] = daily["Volume"] /daily["Volume mean5"].shift(1)   a spojením dvou pdmínek, té nahoře a originál Petrova daily["Feature2"] = daily["HL_MAD1"] / daily["HL_MAD2"]     zde už se omezuje počet obchodů, ale snad ještě únosně   dotaz .- inspirace - na Petra rád bych vyzkoušel situaci, kdy je splněna jedna, NEBO druhá podmínka. Současný colab chápu tak, že musí být splněny obě podmínky . Předpokládám , že by se zvýšil počet obchodů a pravděpodobnost by byla někd mezi těma dvěmi podmínkami. (pokud to považujete za neužitečné tak pryč od toho ...). Možná, že tato varianta pak bude na obchodování méně užitečná, ale nedokážu to posoudit.
    • Dobrý den, otevřené pozice se v publikované verzi prozatím nezohledňují, nová tabulka v databázi je přípravou pro další práce na deníku. B.
    • Dobrý den, nedaří se mi v deníku (ipynb) zobrazit výsledky včetně otevřených pozic. Výsledkem je, že stav portfolia mi zobrazuje pouze uzavřené pozice, není tedy přesný.  V tradebook.db3 v tabulce open_positions jsem si všiml, že u otevřených pozic nemám sloupec order ref, může to být příčina? Jak to případně napravit? děkuji za radu…
    • Možnost vytvářet výstupy html je daná novou strukturou příkazů, kde můžeme jednoznačně definovat parametry portfolia a volat funkce jejichž výsledky se do html uloží. Na toto téma plánuji připravit tutoriál. B.  
    • Bogdane jestě jedna žádost k minikurzu. na začátku jste zmínil možnost "Automatizace vytváření výstupů v HTML". Ale v samotném kurzu na ní odkaz nebyl. Mohl byste k tomu napsat pár řádek. Určitě nejsem sám koho by to zajímalo. Děkuiji za odpověď
    • Dobry den prosel jsen cely novy Jupyter NB a moc se mi líbí 🙂 Jak je videt výše, trochu jsem se potrápil s připojením starého Obchodního deníku, abych měl data kompletní, ale i to se nakonec podařilo. Mám radost. Jen pro kolegy , kteří ještě nezkoušeli Export dat Aspoň u mě, aby fungoval:  diary.export2CSV(delimiter=',') tak jsem musel v diary.py odstranit line terminator: def export2CSV(self, delimiter=';', decimal=','): data = self.__db.query(sql='SELECT * FROM diary', res2df=True) csv = data.to_csv(sep=delimiter, decimal=decimal, index=False, ) #line_terminator='\n' f = open(r'data/diary.csv', 'w') f.write(csv) f.close() Nevím jestli je to verzí pandas, ale pomohlo to a u : diary.export2EXCEL() tak zde tato funkce zatím není v diary definována Snad Vám to pomůže  
    • risk grafy jsou z Think or swim, které mám k dispozici u Schwab trading účtu. Ad skript. Zde je: import pandas as pd import os # Directory settings input_directory = "xls" output_directory = "amibroker" open_datetime_directory = "trades_OO" def load_and_prepare(file_path): settings = pd.read_excel(file_path, sheet_name=7) settings.set_index("Unnamed: 0", inplace=True) symbol = settings.iloc[1][0] trades = pd.read_excel(file_path, sheet_name=2, header=2) trades['Date/Time'] = pd.to_datetime(trades['Date/Time'], dayfirst=True) trades['Date'] = trades['Date/Time'].dt.strftime('%d.%m.%Y') # Just the date for trading logic trades = trades.dropna(subset=['Type']) return trades, symbol def process_and_convert(trades, symbol): results = [] cumulative_profit = 0.0 for i in range(0, len(trades) - 1, 2): entry, exit = trades.iloc[i], trades.iloc[i+1] if entry['Type'] not in ['Buy', 'Sell Short'] or exit['Type'] not in ['Sell', 'Buy to Cover']: continue profit = (exit['Price'] - entry['Price']) * entry['Shares/Ctrts/Units - Profit/Loss'] - (entry['Comm.'] + exit['Comm.']) percent_profit = (profit / (entry['Shares/Ctrts/Units - Profit/Loss'] * entry['Price'])) * 100 cumulative_profit += profit trade = { 'Symbol': symbol, 'Trade': 'Long' if entry['Type'] == 'Buy' else 'Short', 'Date': entry['Date'], # Use formatted date 'Date/Time': entry['Date/Time'].strftime('%Y-%m-%d %H:%M'), # Preserve original datetime for OPEN_DATETIME 'Price': f"{entry['Price']:,.2f}".replace(',', 'X').replace('.', ',').replace('X', '.'), 'Ex. date': exit['Date'], 'Ex. Price': f"{exit['Price']:,.2f}".replace(',', 'X').replace('.', ',').replace('X', '.'), '% chg': f"{((exit['Price'] - entry['Price']) / entry['Price']) * 100:.2f}%", 'Profit': f"{profit:,.2f}".replace(',', 'X').replace('.', ',').replace('X', '.'), '% Profit': f"{percent_profit:.2f}%".replace('.', ','), 'Shares': entry['Shares/Ctrts/Units - Profit/Loss'], 'Position value': f"{entry['Shares/Ctrts/Units - Profit/Loss'] * entry['Price']:,.2f}".replace(',', 'X').replace('.', ',').replace('X', '.'), 'Cum. Profit': f"{cumulative_profit:,.2f}".replace(',', 'X').replace('.', ',').replace('X', '.'), '# bars': 0, 'Profit/bar': 0, 'MAE': 0, 'MFE': 0, 'Scale In/Out': '0/0' } results.append(trade) df = pd.DataFrame(results) if not df.empty: if 'Date/Time' in df.columns: df_for_csv = df.drop(columns=['Date/Time']) else: df_for_csv = df df_long = df[df['Trade'] == 'Long'] df_short = df[df['Trade'] == 'Short'] if not df_long.empty: df_for_csv[df['Trade'] == 'Long'].to_csv(f"{output_directory}/{symbol}_L.csv", index=False, sep=";") save_open_datetime(df_long, symbol, 'long') if not df_short.empty: df_for_csv[df['Trade'] == 'Short'].to_csv(f"{output_directory}/{symbol}_S.csv", index=False, sep=";") save_open_datetime(df_short, symbol, 'short') return df def save_open_datetime(df, symbol, trade_type): open_datetime_df = pd.DataFrame({ 'OPEN_DATETIME': df['Date/Time'] # Use the complete datetime }) output_file_path = f"{open_datetime_directory}/{symbol}_{trade_type}.csv" open_datetime_df.to_csv(output_file_path, index=False) def main(): # Automatically find all .xlsx files in the directory files = [f for f in os.listdir(input_directory) if f.endswith('.xlsx')] for file_name in files: ticker = os.path.splitext(file_name)[0] # Remove the file extension to get the ticker file_path = os.path.join(input_directory, file_name) trades, symbol = load_and_prepare(file_path) df = process_and_convert(trades, symbol) if not df.empty: print(f"Processed trades for {ticker} successfully.") else: print(f"No valid trades processed for {ticker}.") if __name__ == "__main__": main() Skript vezme Excel uložený z TradeStation a připraví import jak do Analyzátoru trading room, tak do Option omega. Říkám si, že jej zkusíme integrovat do dashboardu jako samostatný nástroj, aby pro jeho používání nebyl nutný python.
    • Čísla vypadají určitě dobře. Navíc píšete, že jste zvyšoval váhy, takže už tušíte jak se strategie chovají v živých trzích a co od nich reálně můžete očekávat. Osobně jsem s váhami nejvíce opatrný u swingových short strategií. Přeci  jen zde vždy existuje šance nějakého většího gapu. A velký rozdíl dnes vnímám to, jestli budu shortovat např. akcii SP100 nebo nějakou menší společnost mimo indexy. Takhle jako celek to na mě působí určitě solidně vyváženě a realisticky.
    • Přesně ty, co jsem vypsal, protože používám u různých strategiích buď výstup podle časového SL, standardního SL a nebo to byly ještě otevřené obchody, takže: Open Long, Long (max loss) a Long (n-bar), a to samé do shortu: Open Short, Short (max loss) a Short (n-bar). Pavel
    • Tušíte, jaké všechny typy jste odstraňoval? Zkuste mi je vypsat, ať to ošetříme přímo v importeru. Díky P
    • Tak beru vse zpet 🙂 Chyba je v excelu , kde list je MBO a u jednotlivych obchodu je uvedeno MOB🙉 dekuji
×
×
  • Vytvořit...