

programmer
Members-
Počet příspěvků
32 -
Registrace
-
Poslední návštěva
Poslední návštěvnící profilu
Seznam posledních návštěvníků profilu je vypnut a není zobrazován.
Dosažená komunitní hodnocení
Newbie (1/14)
0
Komunitní reputace
-
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
to R0nnIe: tak je potrebne v strategii do Initialize() pridat Add(PeriodType.Tick, 1); To zaruci, ze mozme pracovat s kazdym jednotlivim tickom.. potom do OnBarUpdate() pridate... double doBuyStop=0; if (BarsInProgress==1) { if (Close[0]==doBuyStop) { EnterLong(); doBuyStop=0; } } if (BarsInProgress==0) { if (// podmienka, po ktorech chcete urobit buystop) { doBuyStop=//hodnota, s ktorou chcete vykonat buy stop; } if (// podmienka, po ktorej chcete zrusit buy stop) { doBuyStop=0; } } to je taka ukazka na nekonkretnom priklade, ako sa da podobna situacia riesit. Pre konkretne riesenie je ale treba poznat konkretny problem, takze viac Vam zatial napisat nemozem :) -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
to Pavel K.: s tím Vám bohužel neumím poradit,.. já se zabývám programováním strategií a indikátorů v NinjaScriptu, abych mohl pro své zákazníky do NinjaTraderu implementovat různé obchodní strategie pro jejich bezpečné a rychlé testování, optimalozaci anebo automatizované obchodování, takže nějak moc dopodrobna jsem upravování detailních vlastností nějakého zobrazování nějakých cen v Chartu v NinjaTraderu vůbec nezkoumal, ale myslím, že by jste to mohli najít někde ve vlastnostech, nastavení zobrazování atd. anebo zkuste mrknout do manuálu.. -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
to [bold]Georg3[/bold] ano už chápem o čo ti ide, aj ja som momentálne narazil na tento problém pri backtestovaní a zdá sa, že je žialbohu neriešitelný. Totižto pri LIVE alebo REPLAY ninjatrader pracuje takto: Máš napr. 5tickový timeframe. Vytvára sa prvý bar. Príde prvý tick. Aby ti mal Ninja čo ponúknuť, tak vytvorí bar, ktorého "náplň" je zatiaľ len ten jeden tick. To je zároveň teda aj jeho Close cena. Príde další tick. Bar sa otvorí a nasype sa doň ten druhý tick a zasa sa zatvorí. Takže close cena baru je teraz ten druhý tick. Príde tick tretí tak sa bar znova otvorí, natrepe sa doň nový tick a bar sa zasa zatvorí a to až do piateho ticku, po ktorom sa zatvorí definitívne a vytvorí sa tak funkčný objekt Bar. Funkčným objektom Bar bol sídce už aj v dobe svojho vývoja, ale tam ešte nesplňoval podmienku TimeFrame a to, že musí byť zložený z 5 tickov. Ale ináč sa s ním dalo pracovať ako s každým iným objektom typu Bar. Bar sa musel takto vytvárať postupne, pretože Ninja nevie, ako bude v konečnom dosledku vyzerať ten bar (aké prídu ceny, pretože to je live,..nevidí do budúcna :) bohužial) takže ti musí zatiaľ zostrojiť tento nekompletný bar, aby ti mohol ponúkať aktuálne informácie. V historyckých dátach to je už ale iné. Tu sa vychádza z toho, že program pozná ako to dopadlo, keď sa 1.1.2007 začala vyvýjať cena 5tickového baru, pretože má všetky informácie až do 31.1.2007 Takže si prečíta všetky informácie, zostrojí Bary a tie ti potom ponúkne a ty s nimi možeš pracovať. Za každým jedným novým, ktorý ti ponúkne, sa zavolá metóda OnBarUpdate() a potom si Ninja načíta ďalších 5 tickov, vytvorí kompletný objekt Bar, nakreslí ti ho na obrazovku a zasa zavolá metódu OnBarUpdate() Z tohoto konceptu je jasné, že na historyckých datach intrabarové operácie nebudu fungovat. Je to celkom velká medzera-chyba pre NinjaTrader, ale bohužial (a aj mna to mrzí) je tam a nič sa nedá robiť. Možno skúsiť taký TradeStation. -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
to [bold]Georg3[/bold] ano, ked si nastavis atribut calculateOnBarClose = false tak ti to na realy bude fungovat, pretoze real este nevie, ako sa ten bar skonci. Takze bar sa zacne prvym tickom, ale to je zatial jedin informacia o nom. Ale ty by si ju rad vedel, tak sa vytvori bar, ktoreho close cena je prave ten prvy tick. Potom pride dalsi tick. A uzivatel by bol zasa celkom rad, keby o nom vedel :) takze sa ten bar chirurgicky otvori, natrepe sa donho novy tick a potom sa bar zasije. A tvari sa uz ako hotovy bar, ktory ma aj svoju close cenu (ktorou bol posledny tick), napriek tomu, ze tvoj TimeFrame je Tick50. Nemoze sa cakat polhodiny na 50tickov, ten bar sa bude vytvarat a dokreslovat postupne, avsak, aby sa s nim dalo pracovat, tak aj pocas jeho vyvoja, ho po kazdej dalsej zmene Ninja chape ako plne funkcny bar. Tak to vyslo z toho, co som vypozoroval. Sposob ako ale toto vstupovanie do obchodu vyriesit uz pocas vyvoja baru a to v historickych datach, teraz hladam aj ja, pretoze koncept NinjaTraderu je taky, ze ak mas historicke data a skusis ich zobrazit ako timeframe Tick5, tak jeden bar je jeden nedelitelny objekt, ktory si chcel. Tak preco vstupovat do baru? ...takze to je myslim si celkom velka chyba v Ninje... -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
oprava ,...nevrací Plot ale instanci DataSeries a to Values[0] -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
>> Já si sice myslím, že i v těch strategiích by se >> nějak mohlo dat kreslit, > >mas pravdu, jde to, ale ma to urcita omezeni (dale jsem nezkoumal) viz: >www.ninjatrader-support2.com/vb/showthread.php?t=6651 no tak je to způsob, jak může strategie vykreslit Plot do Chartu, ale když jsem koukal ty kódy tak to je vlastně obyčejný indikátor, který má jako jednu z metod getPlot() ve které vrací svůj vlastní plot. Pak jenom importuješ tento indikátor do strategie a nastavuješ v něm hodnotu value toho Plotu, ktery ti dává ten indikátor. (no doufám že je to srozumitelné) Normálně to funguje ale ne pro multi time framovové strategie. -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
to [bold]Georg3[/bold] no tak indikator svuj vypocet vyhodnoti vtedy, ked sa uzavre bar. Preotze jeho hlavna metoda OnBarUpdate(){...} sa zavola vzdy, ked graf vytvori novy bar. LIVE ani REPLAY neviem co je, som to este nepouzival,.. sak co s tym potrebujes vlastne?? -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
to [bold] W01554: [/bold] zakreslovat to zřejmě nepujde. Plot (ty čárečky v grafu, jaké zobrazuje třeba EMA) se dá použít jenom do indikátoru. Naprogramovat práci s dvěma rúznými TimeFrame zas múžu jenom Strategii (Protože deklarovat bary z jiného TimeFramu se může jenom ve strategijích jak jsem psal už víš). Tím pádem se očividně nedá sloučit deklarace předvoleného Timeframe a Plot v tom samém kódu inicializace. Takže pokud chceš, napiš mi, jak si zamýšlel aby ta strategie fungovala (kdy nakoupit, kdy prodat) a já ji udělám už rovnou s těma objednávkama pro obchodování a nemusí se tam nic kreslit. To si můžeš potom i otestovat na nějakých historických datech a sám uvidíš, jakou máš percentuální úspěšnost, kolik se na tom dá vydělat atd. Já si sice myslím, že i v těch strategiích by se nějak mohlo dat kreslit, ale zatím sem se k tomu nedostal, jestli to zas tak moc nutně nepotřebuješ, tak se na to kreslení těch čárek můžeme vykašlat a rovnou udělat strategii, která si bere informace z jednoho timeFrame, bere informace z druhého timeFrame a dělá výpočty a obchoduje.. to[bold] ROnnIe: [/bold] presne tak, v indikátore to možné nieje. to [bold] Pavel K. [/bold] nepochopil jsem o co ti jde... skus jěšte jednou jinými slovi a třeba to demonstruj i na nějakém konkrétním příkladě, snad to potom pochopím :) -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
to ROnnIe: To proto, žes to deklaroval v indikátoru. Add(PeriodType type, int period); musíš deklarovat v metodě Initialize() pouze pro strategii. Na to sem taky v dokumentaci narazil až před chvílí... -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
to Michal-administrator :: Zrovna já jsem jeden z těch šikovných studentú informatiky :) (sám se odhaduju za šikovného :P) Já neobchoduju ale brácha NinjaTrader používá tak jsem se kvúli němu naučil NinjaScript (v podstatě se jěšte stále učím) aby mu to šlo rychleji, konec koncú mě programování a nárh algoritmú stějně baví :) Akorát na financnik.cz nechodím moc často, klidně rád pomúžu víc lidem a zadarmo, pro mě to neni těžký, ale administrátoří by mi mohli dovolit zveřejnit si tu svúj mail a když bude někdo něco potřebovat tak mi múže rovnou poslat mail a já (pokud to samozřejmě budu vědet) klidně zadara pomúžu. Netvrdím, že umím všechno, já jsem Java programátor, C# (z kterého přebral NinjaScript syntax) znám též, takže když dostanu úkol z NinjaScript tak ho vždy zvládnu ;) Takže >používám RB12, kde mám zobrazeny EMA34 a 204 >do toho grafu bych chtěl zobrazit další EMA 34 a 204, ale z jiného tf - např.RB24 >Všechny EMA by se měly zobrazovat souběžně v jednom grafu a to RB12 (dle příkladu). Pokud rozumím, chcete si otevřít graf trhu který je zobrazen v TimeFramu RB12 a aby v něm byli robrazeny EMA34 a EMA204. Ale zároveň aby tam jěšte byli zobrazeny i EMA34 a EMA204 tak, jak by vypadali v RB24. Správně? Teď hned Vám sem nedám výsledek, jenom se chci ujistit, že to chcete tak, jak myslím. A až po výkendu vyztřílivým :D tak Vám sem hodím zdrojáky s návodem jak to spustit. to Georg3: > Neviem si s tymto radi a ak sa to neda vyriesit, povazujem to za fatalnu chybu Ninja traderu a vlastne nemoznosti robit presny backtest. Sorry, ospravedlňujem sa. Uskutočniť predaj môžete dokonca aj počas vývoja toho baru a nie vždy až po jeho uzatvorení. Napríklad taký stoploss. Predstavte si situáciu, kedy máte stoploss na cene 20$ a teraz sa vám otvorí nový bar. Otvorí sa na 50, klesá na 10, stúpne na 40 a zavre na 50. Stoploss uskutoční predaj už vo chvíli, kedy ste prekročili hranicu 20 smerom nadol a uzavrie obchod. Nečaká až sa zatvorí bar. -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
To je proto, že výpočet kódu se děje až po zavření nového baru. To znamená, máte nějaký graf kde se vyvýjejí ceny třeba každou minutu, a teď v průběhu týhle nový minuty se začala vyvýjet cena na 100$,za pár sekund poskočila na 130 a potom, v pětadevadesáté sekundě, stoupla na 150$ a BAR (ta svíčka co označuje cenu) se zavřel a začal se vyvýjet nový bar. Jenomže jak se teď tento bar zavřel, tak se začala počítat vašet strategie (vaše strategie je například "když zavírací cena stoupne nad 140$ tak kupuju"). A kód si řekne, ano cena je větší než 140 takže dám příkaz na koupení. Jenomže jak jsem řekl, tento výpočet se vám provádí až potom, co se bar uzavřel. Takže koupí se až na dalším následujícím baru. Vyladit by se tato chyba dala možná tak, že otevřete kód a najdete deklaraci CalculateOnBarClose = true; a změníte ji na CalculateOnBarClose = false; Mělo by to zabrat, záleží také ale od zbytku kódu a logiky vaší strategie, na čem má fungovat. Jinímy slovy, jestli změna toho, kdy se má vykonávat kód negativně neovlivní zas jiné části vaší strategie... -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
Teď, když si zpětně čtu svůj vlastní příspěvek, tak mi připadá zdlouhavý a myslím, že i přesto jsem jěšte něco zapoměl :) .. Syrius :: chtěl jsem títo vlastne poukázat na to, že to, že když si někdo neumí poradit třeba s tím, že definuje obchodní den jinak a ono mu to potom změní hodnotu průměru je třeba proto, že ten průměr se teď počítá jenom a jenom z těch barů, které se uskutečnili v rámci vašeho obchodního dne. A třeba to, že ceny v čase 15:00 zaznamenali prudký pokles si váš indikátor už nevšimne a nevyhodnotí, což vám způsobí celkem veliký zmatek v logice vaší strategie. Tady je třeba si ponechat definici obchodního dne takovou, jaká je (12:00AM - 12:00AM, tedy všechen čas,kdykoliv se něco může stát) a šáhnout do kódu a naprogramovat si booleavskou funkci, která mi řekne, zda právě obchodujeme s barem, který je v časovém rozmezí 15:30 - 22:15 a podle toho vrátí TRUE anebo FALSE Když tedy vrátí true, tak uskutečnujeme další kód... schématicky zhruba: protected override void OnBarUpdate() { if (Propper()) { ... ... váš další kód, co má strategie dělat ... ... } } public bool Propper() { bool bol=false; // rozhodne, zda aktualni bar je skutecne v rozmezi 15:30 - 22:15 DateTime dt = Time[0]; if ((((dt.Hour==15) && (dt.Minute>=30)) || ((dt.Hour==22) && (dt.Minute ((dt.Hour>15) && (dt.Hour bol = true;} // vyhodnoceni return bol; } Zkuste otevřít Tools > EditNinjaScript > Strategy ... vyberte Vaši strategii a doplňte kód tímto mojím a mohlo by to jít... pokud jsem Váš problém pochopil správně, tak to půjde. Jinak mám tu taky svůj mail. A pokud by ste chtěl, můžu Vám taky naprogramovat celou strategii, už nějakou dobu programuju ;) -
Ninja Trader - programování (strategie)
příspěvek: programmer odpověděl na příspěvek uživatele Jezinka ve vláknu NinjaTrader
Wizard je pomocník... když potřebujete naprogramovat něco jednoduché a jasné tak vám wizard postačí, aby jste tak banální věc nemuseli sami vyjadřovat trochu složitějším kódem... jsou ale věci (a těch je velice hodně) které ve Wizardu nikdy neuděláte. Tady se nabízejí tři možnosti: 1, Buď si zakoupit knihu o úvodě do programování (nejlepší by pro Vaše potřeby byla zřejmě nějaká 'C# - začínáme programovat') a začít studovat co jsou to algoritmy, podmínky, větvení, cykli, proměné, datové typy, objekty (i když NinjaScript ve skutečnosti není objektově orientovaný jazyk), jak s těmito podmínkami cykli atd. docílit aby program - kód vykonával nějakou logickou operaci nebo funkci atd... potom si sednout k anglickému tutorialu jazyka NinjaScript a učit se jednotlivé procedury metody a funkce, datové typy a všechny prvky specifické pro NinjaScript aby jste věděli normálně programovat a kdykoliv si naprogramovat jakoukoliv strategii která Vás kdy napadne a vzápětí si ji během pár sekund otestovat na historických datech a dozvědět se, jakou má vaše strategie úspěšnost, kolik by ste vydělali/prodělali atd... 2, Na Vaši strategii se vykašlete a raději si vymyslíte jinou, jednoduší, kterou dokáže vygenerovat wizard. 3, Rozdělíte si práci tak, že Vy uvažujete a přemýšlíte o tom, jaká strategie by byla nejlepší,..jak vymyslet dobrou strategii, nějaká ta matematika a logika ... ale samotné kódování programování této strategie a její následné testování necháte na někoho jiného. Ten Vám strategii naprogramuje a pošle a vy si ji potom můžete spouštět a hrát si s ní ve Vašem NinjaTraderu. Uvidíte ve Vašich grafech co Vám strategie právě radí udělat, připadně co sama automaticky udělá,..váš programátor může (pokud Vy nevíte jak na to) strategii také otestovat (backtesting) nebo její kód adekvátně upravit tomu, aby šla co nejvíce částí z ní customizovat (což se skvěle hodí pro optimalizaci) První možnost je zdlouhavá a namáhavá, ale jde to. Tu druhou bych Vám určitě nedoporučoval, tímto by jste nikdy nic pořádně neudělal a také by to mělo i výsledky. Ta třetí je časově nejefektivnější a nejjednoduší způsob, jak dosáhnout výsledků, které chcete. A tento bych Vám také nejvíce doporučoval (ostatně to je důvod, proč píšu tenhle příspěvek) :)