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.
Ahoj,
v task scheduleru na severu se snažím rozchodit automatizované generování *.csv souboru s vstupy do nových obchodů.
Amibroker mi na serveru běží a nevypínám ho.
Celý proces ještě ladím. Jednotlivé úlohy se zpracovávají přibližně takto:
- stažení aktuálních dat
- ověření zda amibroker běží, pokud ne zapnu ho
- přes dávky v amibrokeru vygeneruji *.csv file
- spustím autotrader
Pokud Amibroker běží a stáhnu aktuální data. Data se okamžitě nepropíší do Amibrokeru a *.csv file je generovaný z neaktuálních dat.
Je potřeba vždy po aktualizaci dat Amibroker restartovat nebo lze řešit jiným způsobem?
Děkuji
Jelikož nahrávání basket příkazů do TWS nefunguje vždy spolehlivě (občas se nevytvoří příslušné OCO vazby - tedy vztah mezi vstupním a výstupním příkazem), připravili jsme alternativní python skript, který příkazy nahrává přes API (což funguje spolehlivě).
Co skript dělá
BasketTrader stahuje příkazy z TradingRoom dashboardu a zadává je do Interactive Brokers (TWS nebo IB Gateway) jako bracket ordery (vstup + profit target + stop loss).
Požadavky
- Python 3.10 nebo novější (https://www.python.org/downloads/)
- Interactive Brokers TWS
- Nastavení "sledovat strategii" v Trading Room dashboardu - tj. strategie musí být zobrazena na hlavní stránce dashboardu: https://tradingroom.financnik.cz/dashboard
Instalace
1. Vytvoření virtuálního prostředí (venv) - Windows
Vytvořte si adresář - například BasketTrader. Otevřete příkazový řádek (cmd) ve složce BasketTrader a vytvořte Python virtuální prostředí:
python -m venv venv
venv\Scripts\activate
Po aktivaci uvidíte (venv) na začátku řádku.
2. Instalace knihoven
S aktivovaným venv spusťte:
pip install ib_async requests pyyaml
3. Nastavení TWS / IB Gateway
V TWS/Gateway je nutné povolit API připojení:
1. Otevřete TWS
2. Menu: Edit -> Global Configuration -> API -> Settings
3. Zaškrtněte Enable ActiveX and Socket Clients
4. Zkontrolujte Socket port (musí odpovídat `port` v config.yaml)
5. Přidejte Trusted IPs: 127.0.0.1
4. Konfigurace skriptu - soubor `config.yaml`
Otevřete `config.yaml` v textovém editoru a upravte:
port: 7497 - skutečný port v TWS (viz krok 3)
account - číslo účtu v IBKR
hash - kód, který si můžete zobrazit zde: https://www.financnik.cz/exe/tradingroom1/
systems - systémy, jejichž příkazy chcete přenášet. V konfigu jsou některé zahashované (#) ty se nepřenáší. Pozor: Systém musíte mít v Dashboardu přihlášený k odběru, abyste jej viděli na titulní stránce:
identifikátor systému naleznete v URL pro stažení csv:
Například MR3000S má URL https://tradingroom.financnik.cz/download/MR3000S/csv - pro stahování příkazů MR3000S tedy do konfiguračního souboru zadám:
MR3000S
Pozor, je potřeba respektovat přesné odražení tak, jak je to v ukázkovém konfiguračním souboru.
Spuštění
Nejprve aktivujte venv
a pak zadejte:
python basket_trader.py
Při každém spuštění skript nahraje do TWS příkazy, které našel u jednotlivých csv.
Takto vypadají přenesené příkazy:
Pokud má mít strategie připojený profit target, je zobrazen jako podmíněný - ve sloupci Key je zobrazeno číslo s desetinnou tečkou a ve sloupci OCA je číslo. Primární příkaz je ten bez desetinné tečky a bez čísla v OCA sloupci - jen tento příkaz čeká na exekuci. Pokud sloupce Key a OCA nevidíte, můžete si je do layoutu přidat (pravým tlačítkem myši klikněte do záhlaví tabulky a vyberte nastavit layout). Pokud by i profit targety (případně stop-lossy), tedy příkazy, které mají být v trhu jen pokud je vyplněn vstup, neměly desetinnou tečku v key a vyplněné OCA group, tak je to špatně - u takového příkazu může dojít ke vstupu na výstupním příkazu.
Příkazy lze zrušit kliknutím na Cancel. Jak je vidět na screenshotu po odeslání se příkazy přenesou do trhu - tj. pokud budou trhy otevřené, dojde k případnému vyplnění (už se nic nepotvrzuje).
Toto je skript v 0.1 - prosím vyzkoušejte a můžeme jej vylepšovat.
Skript je určen pro výukové účely - je v něm jasně demonstrováno, jak snadno lze pomocí skriptu zadávat komplexnější příkazy. Používejte na paper účtu.
Basket příkazy zadávají jen vstupy. Tento skript má stejnou funkcionalitu jako zadávání stahovaných basket příkazů přes basket funkcionalitu TWS, jen ji řeší přes API. Nejde o kompletní autotrader. Skript neví, kolik pozic je otevřeno v IBKR a proto nemůže z principu zadávat výstupy. Na to je případně potřeba komplexnější autotrader. Například ten, který sdílíme v TechLabu. Skript tedy řeší časově náročné zadávání množství potenciální limitních vstupů, které většinou nejsou vyplněné.
Soubory ke stažení: BasketTraderv01.zip
Tak už snad vyřešeno, nevím čím to bylo, čísla portu jsem měl stejná v TWS a příslušném souboru a nešlo to, pak jsem je znovu přepsal a už to funguje...
Dobrý den, přešel jsem s obchodováním na jiný počítač, kde se mi po spuštění skriptu objevuje chybová hláška, že vzdálený počítač odmítl síťové připojení, abych se ujistil, že API port v TWS je "open". Nevíte v čem by mohl být problém? API v TWS mám nastaveno, jak má být včetně čísla portu. Na původním počítači mi to fungovalo. Děkuji.
Jsem dnes v longu na MNQ. Mimo gapu mám ještě pár dalších price action setupů kdy vstupuju. Nevím to jistě, ale když se na to tak dívám, řekl bych, že vstoupil na základě strong close minulého dne.
Ďakujem za odpoveď. Neviem prečo, ale zdá sa mi, že chyby, ktoré vyzerajú zložito, sú často práve tie najjednoduchšie. Script diary som aktualizoval a už funguje. Tú druhú chybu budem sledovať a keď sa objaví, budem ju debugovať.
Ešte raz ďakujem za pomoc.
Timi
Dobrý den,
vidím zde dva problematické body, které ale přímo nesouvisí, takže řešením nebude oprava pouze jednoho z nich.
První se týká deníku a informace o chybějícím sloupci "position", tento sloupec je součástí tabulky Diary
respektive správný název je "possition", tedy nejdříve bych si otevřel SQL DB browser a podíval se zda v tabulce sloupec zcela chybí, nebo je pouze chyba v názvu a chybí jedno "s". Pokud sloupec chybí a tabulka je prázdná, což by bylo vzhledem k povaze chyby logické, pak doporučuji tabulku Diary smazat, skript deníku si tabulku při dalším spuštění vytvoří se správnou strukturou.
Chyba ve sloupci "possiton" nemá vliv na zpracování obchodů, Signal trader nepracuje přímo s tabulkou Diary a proto někde bude druhá chyba a tipuji, že nějak bude souviset se zpracováním výstupů, protože můj průběh skriptu 5.2. vypadal následovně a příkazy se provedly správně.
B.
Aktualizovaná výkonnost strategií dashboardu k 7.02.2026:
Velmi silný začátek roku. Má equity v IBKR je na nových maximech.
Kromě SMO NDX mi hodně vydělávají nyní long mean reversion strategie - zejména DeepDIP, byť tam jsou ve výše uvedené tabulce výkonnosti minimálně dva obchody, které se neobjevily v signálech (viz předchozí příspěvky v této diskuzi) a tudíž má live výkonnost není tak dobrá, jako se ukazuje v backtestu.
Co se long mean reversion týče - jak jsem zde již psal, long mean reversion strategie obchoduji v portfoliu tak, že celé skupině mám přiřazenou určitou maximální alokaci. Například mohou obchodovat čtyři systémy a každému počítat velikost pozice z 15% portfolio kapitálu. Ovšem současně mám pravidlo, že alokace celé skupiny nesmí být vyšší, než například 25%. Pokud jsou v trzích silné propady, tak se nedostane na všechny signály. Můj portfolio manager jednoduše postupuje po jednotlivých systémech, vybírá signály od nejsilnějších (tak jsou řazeny i signály v dashboardu) a počítá, kolik kapitálu signály zaberou v okamžiku kdy by všechny limity byly vyplněny. Na nejslabší signály se tak často nedostane. To má pozitiva i negativa. Pozitivem je především limitování risku - pokud by propad pokračoval, pak nebudu mít na účtu otevřenou extrémně velikou alokaci dlouhých pozic. Negativem je, že pokud se trh obrátí, vydělám méně.
A zrovna letos to zatím vychází tak, že například ztráty v MRZCA přišly z těch slabších signálů (na konci seznamu signálů), které jsem neotevíral. Můj export MRZ + MRZCA z IBKR vypadá tak následovně:
Takto pak vypadají mé exportované živé obchody (nikoliv backtest) MRZ + MRZCA + DEEPDIP:
Je patrné, že jednotlivé strategie se v portfoliu hezky doplňují.
Co se intradenního breakoutu týče. Letos mi jde equity zatím do strany.
Breakout na opcích vypadá následovně:
Export breakout obchodů na ETF takto:
Server od roku 2003 vydává
Centrum finančního vzdělávání, s.r.o. info@financnik.cz
Upozornění: Všechny informace poskytované na Financnik.cz jsou určeny výhradně ke studijním účelům témat týkajících se obchodování na burze a neslouží v žádném případě coby konkrétní investiční či obchodní doporučení. Provozovatel serveru ani jednotliví autoři nejsou registrovanými brokery či investičním poradcem ani makléřem. Jsou-li na stránkách zmiňovány konkrétní finanční produkty, komodity, akcie, forex či opce, vždy a pouze za účelem studia obchodování na burze. Vydavatel serveru není zodpovědný za konkrétní rozhodnutí jednotlivých uživatelů. Burzovní obchodování a investování s finančními instrumenty (a komoditami obzvláště) je vysoce rizikové. Rozhodnutí obchodovat komodity a akcie je odpovědností každého jednotlivce a jedině on sám nese za svá rozhodnutí plnou odpovědnost. Nikdy se nepouštějte do obchodů, jejichž podstatě plně nerozumíte. Pamatujte, že burza má svá pravidla, kterým je třeba porozumět, než začnu riskovat své vlastní peníze!