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,5k
      7,5k příspěvků
      • 4fx
    2. Trading Room

      Diskuzní skupina v rámci Trading Roomu.

      557
      557 příspěvků
      • petr
    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 239
    Celkem uživatelů
    467
    Nejvíce online
    RobinF
    Nejnovější uživatel
    RobinF
    Registrace
  • Všechny poslední příspěvky

    • Díky za otázky. je jasné, že TS může být pro řadu z vás nové prostředí a pokud budu vědět, budu se snažit v tomto ohledu odpovídat. ad) V definici proměnných je na začátku jednou jestli uvedeme v závorkách False nebo True? Každou proměnnou je třeba v TS inicializovat. Tj. první řádek jen říká s jakou hodnotou proměnná startuje. V kontextu skriptu tam není nic podstatného, protože hned po startu se všechny proměnné nastavují znovu. Bez toho, aniž by s  nějakou hodnotou byly promenné vypsané (deklarované) na začátku, by skript  nefungoval. ad kód: If Date <> Date[1] Then Begin tradeTakenToday = False; End; Tato část kódu resetuje proměnnou tradeTakenToday na začátku každého dne. Tedy zajišťuje, že se v jeden obchodní den zobchoduje jen jeden obchod. ad HL_MAD1 a HL_MAD2: zápis je správně - bere se průměrná cena počítaná funkcí Average za 5 dnů. Hodnota v hranaté závorce [1] říká, že chceme získat hodnotu za předchozí den. ad ATR(5)/C - zápis ATRC = YesterdaysATR / BuyPrice; normalizuje ATR vůči nákupní ceně. Určitě by šlo použít i  ATRC = YesterdaysATR / YesterdayClose a výsledky budou jistě velmi podobné. Je to jen záležitost konkrétní implementace. ad MarketPosition = 0 (znamená není pozice) and not tradeTakenToday - to znamená jen jeden obchod denně?  Ano, toto zajistí, že se příkaz zadá jen pokud není otevřena žádná pozice a pokud nebyla dnes žádná pozice otevřena (protože pak se tradeTakenToday nastaví na True). ad YesterdaysATR>0 - tato podmínka by měla být vždy kladná... je potřeba ji zadávat?  Je to trochu přebytečné, defacto je to taková pojistka, která se jistí, že máme správně načtená data za předchozí den.      
    • Dobrý den, Petře, snažím se pochopit uvedený kód pro TS, ale u některých částí kódu bych potřeboval bližší popis nebo objasnění. Děkuji. V definici proměnných je na začátku jednou jestli uvedeme v závorkách False nebo True? Vars: BuyPrice(0), BuyStopPrice(0),YesterdaysATR(0),YesterdayClose(0),YesterdayOpen(0), HL(0),HL_MAD(0),HL_MAD1(0),HL_MAD2(0),ShortPrice(0),ShortStopPrice(0),tradeTakenToday(False),VolCond(True),ATRC(0); Tento zápis znamená, že není a nebyl otevřen žádný obchod? If Date <> Date[1] Then Begin     tradeTakenToday = False; End;   V níže uvedeném kódu jde o podmínku HL_MAD1>HL_MAD2 (průměrný rozkmit úsečky H-L za posledních 5 dnů je vyšší než průměrný rozkmit předchozí den). HL_MAD1 = Average((High-Low),5) of data2; HL_MAD2 = Average((High-Low),5)[1] of data2; Nerozumím tomu, že HL_MAD2 je také počítáno za posledních 5 dnů? Byl by tento zápis špatně? HL_MAD1 = AvgTrueRange( 5 ) of data2; HL_MAD2 = ( ;   S druhoutnou podmínkou, kdy vyhledávám normalizovanou volatilitu ATR(5)/C alespoň 0.008 ..... If BuyPrice>0 then begin ATRC = YesterdaysATR / BuyPrice; end Else begin ATRC=0; end; VolCond = ATRC>0.008; end; Nerozumím proč se ATRC vypočítá  ATRC = YesterdaysATR / BuyPrice; když má byt ATR(5)/C  Jestliže mám definovanou proměnou ATRC (0), nestačilo by zapsat takto: ATRC = YesterdaysATR / YesterdayClose; VolCond = ATRC > 0.008;    MarketPosition = 0 (znamená není pozice) and not tradeTakenToday - to znamená jen jeden obchod denně? YesterdaysATR>0 - tato podmínka by měla být vždy kladná... je potřeba ji zadávat?  If Time > 0940 and time<1530 and MarketPosition = 0 and YesterdayClose<YesterdayOpen and HL_MAD1>HL_MAD2 and not tradeTakenToday and VolCond and YesterdaysATR>0 t        
    • Dobrý den, pro filtrování záznamů je třeba nejdříve uložit obsah tabulky do proměnné denik = diary.getDiary() denik[denik.strategy == 'IMR'] Uvedený zápis umožňuje výběr dat pouze jednoho systému. B.
    • ano, mel jsem na mysli PDT. Super, jestli je to jak pisete. Zkousel jsem to nejak dohledat na IB strankach, ale je to tam matouci. Dekuji za odpoved, Petre.
    • To netuším, ale moc se mi to nezdá. Opce lze obchodovat s malým kapitálem, netuším proč by byl vyžadován účet 25000. Pokud myslíte kvůli "pattern daytrader" - omezení daytradovat akcie, tak ten se na rezidenty EU už delší dobu nevztahuje.
    • Dobry den, otazka na Petra nebo jine zkusenejsi kolegy. Predpokladam, ze pokud bych chtel vyhledove obchodovat ODTE opce, tak u interactive brokers budu muset prepnout na cash type ucet (pokud nebudu mit 25000 USD). Je muj predpoklad spravny? dekuji. Pavel
    • S jsou Soybeans - také trh používaný často pro breakouty. Celý balík dat jsem aktualizoval a doplnil jak ETF, tak NQ. P
    • Zdravím, funkce vrací obchody za daný den. Pro uvedený nebyl v databázi nalezen žádný obchod, tedy zkuste si změnit datum.  B.
    • Petře, prosím, v tomto příspěvku jste dával k dispozici ke stažení 5 minutová data různých futures pro testování edge Mezi nimi je soubor @S-5min-UTC.csv - o jaký trh se prosím jedná? A neměl byste prosím i 5 minutová data na e-mini NASDAQ 100? Ta jsem tam bohužel nenašel. Děkuji.
    • IZM měla FEERATE 9.4. na hodně 113,.9. Osobně shortuji tuším do 15, ale práh jsem nastavil pocitově. Přikládám hodnoty FEERATE pro 9.4. z IB: ibFees20240409.csv Takto lze soubor stahovat od IB z jejich FTP. @illk ukládám si je sám, z IB podle mě stahovat nejdou.  
    • V této buňce jsou pak zahashovane jiné názvy než diary: diary.getDiary().tail()                                                               #  nacteni vsech zaznamu diary[diary.strategy == 'PS','PL']                                                      #  omezeni zaznamu na konkretni strategii # denik[denik.exitDate >= '2024-01-01'].tail()                                        #  zobrazi zaznamy od data # denik[(denik.exitDate >= '2024-01-01') & (denik.exitDate < '2024-01-29')]           #  zobrazit zaznamu v rozmezi od-do   a když chci pustit omezení na vybrané strategie, tak dostanu následující chybu: --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In[19], line 2 1 diary.getDiary().tail() # nacteni vsech zaznamu ----> 2 diary[diary.strategy == 'PS','PL'] # omezeni zaznamu na konkretni strategii 3 # denik[denik.exitDate >= '2024-01-01'].tail() # zobrazi zaznamy od data 4 # denik[(denik.exitDate >= '2024-01-01') & (denik.exitDate < '2024-01-29')] # zobrazit zaznamu v rozmezi od-do AttributeError: 'Diary' object has no attribute 'strategy'
    • Jen dodávám info pro ostatní, fundoval jsem 50 $  a bylo to postačující. Nyní už jde aplikace stáhnout.
    • Dobrý den, děkuji za update Deníku. Při načtení celé databáze je to OK, ale když načtu fills a diary skrze "getFills('2024-01-01').tail()", tak dostanu chybu (v databázi mám za letošek desítky obchodů): NOTICE: SQL query >SELECT * FROM fills WHERE substr(datetime,1,10)="2024-01-01" ORDER BY datetime< returned no data --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In[6], line 2 1 # diary.getFills().tail() # nacteni vsech zaznamu ----> 2 diary.getFills('2024-01-01').tail() # nacte zaznamy od uvedeneho data (format datumu '2024-01-16') AttributeError: 'bool' object has no attribute 'tail'  
    • Hezlý den Petře, ještě otázka, dá se short fee backtestovat? Resp. jsou někde uloženy historické hodnoty?
    • Zdravím Petře, jakou hodnotu pro short fee používáte, do 1% nebo raději ještě méně? Nevíte, jaká hodnota short fee byla v IZM v den vstupu 9.4.? Díky, Pavel
    • Dobrý deň Petře,  vďaka za ďalšie super video. K samotnému testovaniu a práci na vylepšovaní systému som sa však ešte nedostal, lebo čakám kým mi dorazia peniaze na účet Tradestation. Momentálne totiž nie je možné platformu stiahnuť, kým na účte nie sú aspoň nejaké peniaze. Celý proces založenia účtu, kým si človek môže stiahnuť platformu, tak trvá trošku dlhšie. 
    • Dobrý den, připravili jsme novou verzi deníku, která zjednodušuje používání a zužuje způsob zobrazení všech grafů do jednoho pohledu. Soubory verze 1.5 jsou připravené ke stažení v úvodním příspěvku. B.
    • Dobrý den, publikovali jsme čtvrtou lekci minikurzu. B.
    • V intradenním obchodování čelíme coby obchodníci mnoha výzvám. Musíme najít edge, který přihraje pravděpodobnosti na naši stranu, současně ale musí být edge dostatečně výrazný, abychom pokryli náklady a ještě vydělali.  Jeden z klíčových parametrů, který u intradenních systémů zkoumám před jejich nasazením živě je hodnota průměrného obchodu. Například při obchodování e-mini S&P 500 chci určitě vidět hodnotu průměrného obchodu mezi 50 - 100 dolary na kontrakt. Často se stane, že nalezneme systém, který bez komisí vytváří krásné rostoucí equity křivky, ale průměrný obchod je příliš malý na to, aby se takový systém dal nasadit živě. To je příklad ukázkového kódu, na kterém jsem ukazoval práci s gapem: https://www.financnik.cz/forum/topic/5064-hledani-edge/?do=findComment&comment=319149 Systém v publikované podobě jednoznačně disponuje solidním edge, ale v dané podobě jej nelze díky příliš malému průměrnému obchodu reálně obchodovat. Z mé zkušenosti je potřeba v systému ještě přijít na nějaké drobné filtry, které pomohou průměrný obchod zvýšit. Dnešní kód představuje systém, který patří mezi několik systémů, se ktreými pracuji živě. A solidně ilustruje, jak jsem šel na zvýšení průměrného obchodu. Obchod pracuje s edge, kdy vyšší volatilitu v trhu můžeme podle testů očekávat v momentě, kdy v trhu volatilita roste. V níže uvedeném kódu jde o podmínku HL_MAD1>HL_MAD2 (průměrný rozkmit úsečky H-L za posledních 5 dnů je vyšší než průměrný rozkmit předchozí den). Tato podmínka sama o sobě vydělává, ale průměrný zisk je nízký. Při testování na akcii QQQ  (ETF na Nasdaq 100) a risku 300 dolarů na obchod vypadají při započítání komisí výsledky od roku 2010 následovně: Strategie vydělává long i short, oběma směry má solidní počet obchodů (564 a 617), ale průměrná velikost obchodu je na můj vkus příliš nízká. Testoval jsem tak edge dál a přišel na to, že volatilnější dny přicházejí v momentě, kdy jde trh proti předcházejícímu pohybu. Tj. shorty po rostoucím dni a nákupy po klesajících dnech (defacto tedy obchoduji mean reversion na denních grafech kombinovaný s intradenním breakoutem). S druhoutnou podmínku, kdy vyhledávám normalizovanou volatilitu ATR(5)/C alespoň 0.008 vypadají výsledky následovně: Equity křivka: Časování intradenního breakoutu do kontextu reverzu jednoznačně pomáhá zvyšovat hodnotu průměrného obchodu. Celý kód systému: Vars: BuyPrice(0), BuyStopPrice(0),YesterdaysATR(0),YesterdayClose(0),YesterdayOpen(0), HL(0),HL_MAD(0),HL_MAD1(0),HL_MAD2(0),ShortPrice(0),ShortStopPrice(0),tradeTakenToday(False),VolCond(True),ATRC(0); If Date <> Date[1] Then Begin tradeTakenToday = False; End; YesterdaysATR = AvgTrueRange( 5 ) of Data2; HL_MAD1 = Average((High-Low),5) of data2; HL_MAD2 = Average((High-Low),5)[1] of data2; YesterdayClose = Close of data2; YesterdayOpen = Open of data2; If Time = 0935 then begin BuyPrice = OpenD(0) + 0.5*YesterdaysATR; BuyStopPrice = BuyPrice - 0.4*YesterdaysATR; ShortPrice = OpenD(0) - 0.5*YesterdaysATR; ShortStopPrice = ShortPrice + 0.4*YesterdaysATR; If BuyPrice>0 then begin ATRC = YesterdaysATR / BuyPrice; end Else begin ATRC=0; end; VolCond = ATRC>0.008; end; If Time > 0940 and time<1530 and MarketPosition = 0 and YesterdayClose<YesterdayOpen and HL_MAD1>HL_MAD2 and not tradeTakenToday and VolCond and YesterdaysATR>0 then begin Buy ("LongOR") (300 / (0.4*YesterdaysATR)) shares next bar at BuyPrice stop; end; If MarketPosition = 1 then begin Sell ("ORL SL2") next bar at BuyStopPrice stop; tradeTakenToday = True; end; If Time > 0940 and time<1530 and MarketPosition = 0 and YesterdayClose>YesterdayOpen and HL_MAD1>HL_MAD2 and not tradeTakenToday and VolCond and YesterdaysATR>0 then begin Sellshort ("ShortOR")(300 / (0.4*YesterdaysATR)) shares next bar at ShortPrice stop; end; If MarketPosition = -1 then begin Buytocover ("ORS") next bar at ShortStopPrice stop; tradeTakenToday = True; end; SetExitOnClose; Podobnými úpravami jsem se dostal i k podobě mého živého intradenního systému, který vychází se sdílené šablony obchodující gap. Tím si myslím, že můžeme uzavřít kapitolu samotného skládání intradenních systémů. Máme konkrétní edge, na který se můžeme pokusit aplikovat obchodování opcí. To budeme provádět na dnes sdíleném systému. Pokud to s intradenním obchodování breakoutů myslíte vážně, je ale určitě dobré, abyste vyšli ze sdílených šablon a postupně testoval své vlastní myšlenky v podobném duchu, jako to dělám já.  
×
×
  • Vytvořit...