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

Ninja Trader - programování (strategie)


Jezinka

Doporučené příspěvky

Chcem v stratégii použiť denný rozsah z predošlých 7 dní na výpočet stoplossu a na to použijem funkcie ako napríklad GetSessionBar alebo 1440- minútový graf... dá sa to rôznymi cestami, len v každom prípade mám jeden problém. Definícia obchodného dňa vždy závisí od toho, ako si v Properties na platforme nastavíte začiatok a koniec obchodného dňa (Session begins, Session ends), defaultne je tam 12:00 AM až 12:00 AM. Lenže ja chcem použiť denný rozsah od 15:30 do 22:15, a tak musím tieto hodnoty zmeniť. Keď ich však zmením, zmení sa exponenciálny priemer a vôbec všetky indikátory (lebo graf bude nespojitý a indikátory potom vyzerajú dosť kostrbato), čím sa úplne zmenia výsledky stratégie. Preto je lepšie mať nastavenie 12:00 AM až 12:00 AM. Čo s tým...

Link to comment
Sdílet pomocí služby

  • Odpovědí 718
  • Vytvořeno
  • Poslední

Nejaktivnější diskutující

Nejaktivnější diskutující

Publikované obrázky

  • 3 týdny později...

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) :)

Link to comment
Sdílet pomocí služby

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 ;)

Link to comment
Sdílet pomocí služby

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...

Link to comment
Sdílet pomocí služby

Ako spustim backtest na niejaku strategiu, chcel by som skusit nieco naprogramovat, ale neviem ako spustim backtest, aby som to mohol aj otestovat. Ked otvorim graf, a aplikujem nan strategiu, ukazu sa mi vstupy a vystupy, ale ked v Strategy analizery kliknem na b-backtest, nic sa nespusti, okrem okna kde sa nastavuju podrobnosti, no neviem ako to spustit tak, aby som mohol vydiet vysledky, zisk ,stratu, a ostatne statistiky . Dakujem Vam

Link to comment
Sdílet pomocí služby

Prijemne nedelne popoludnie prajem

Prosim Vas, vedel by mi niekto poradit ako mozem strategiu "konvertovat" na indikator? Viem ze je to mozne, len neviam ako to urobit. Je to o tom ze na rozdiel od strategii sa indikatory zobrazuju v grafe aj ked je spusteny chart trader.
Skusal som strategiu vlozit medzi indikatory ale tak to nefunguje a na ninja skript si netrufam.
Strategia je jednoducha- (mozno trochu simplexna) - viac-menej informativna:

// Condition set 1
if (EMA(1)[0] > EMA(34)[0]
&& CCI(14)[0] > 100
&& CrossAbove(CCI(50), 0, 1))
{
DrawArrowUp("My up arrow" + CurrentBar, true, 0, Low[0] + -1 * TickSize, Color.Blue);
DrawText("My text" + CurrentBar, "Buy", 0, Low[0] + -2 * TickSize, Color.Blue);
}

// Condition set 2
if (EMA(1)[0] && CCI(14)[0] && CrossBelow(CCI(50), 0, 1))
{
DrawArrowDown("My down arrow" + CurrentBar, true, 0, High[0] + 1 * TickSize, Color.Brown);
DrawText("My text" + CurrentBar, "Sell", 0, High[0] + 2 * TickSize, Color.Brown);

P.S: Mozno trochu mimo link, ale vsimol som si ze sa to opakovali prispevky s pripojenim. Mal som problem s proxy serverom vo firme a pomohlo mi toto:
www.ninjatrader-support2.com/vb/showthread.php?t=15017&highlight=behind+proxy+server
Tym som spojaznil ninju. Dalsie chybove hlasenie bolo sposobene portom - po odblokovani portu spravcom je vsetko. Abrams

Link to comment
Sdílet pomocí služby

Mna by zaujmalo, ako vytvorit indikator, tak , aby pozeral na inom tameframe. Konkretne, chcem pouzit OS triple screen. Graf volume 10000, kde na zaklade MACD urcim trend a graf volume 2000, kde budem obchodovat, ide o to , ze aby som sa nemusel stale pozerat na vol10000 , chcem vytvorit indikator, ktory bude v grafe 2000 ukazovat zmenu trendu, napriklad mi tam zobrazi sipku. Naprogramujem si to sam, len potrebujem vediet, ako zadefinujem ze to chcem pozret na inom timeframe.

Priklad : if (MACD[0]. [bold]Timeframe10000 [/bold]>MACD[1]. [bold]Timeframe10000 [/bold] { ....... }

Zaujmalo by ma, ako zadefinovat to timeframe. Dakujem Vam.

Link to comment
Sdílet pomocí služby

To ROnnIe
Najprv si musis v Initialize zadefinovat doticny TF, tie potom automaticky dostanu indexi podla poradia ako si ich definoval. Index 0 je vzdy TF v ktorom mas otvoreny graf alebo strategiu. Samozrejme mozes definovat aj volume, tick atd..

protected override void Initialize()
{
Add(PeriodType.Minute, 5);
Add(PeriodType.Minute, 30);
}


protected override void OnBarUpdate()
{
if (BarsInProgress == 0)
{
Q = CCI(20) [0]; //toto je cci z aktualneho TF (na ktory sa pozeras v okne grafu)
}
if (BarsInProgress == 1)
{
Q = CCI(20) [0]; //toto je cci z 5 min TF
}
if (BarsInProgress == 2)
{
Q = CCI(20) [0]; //toto je cci z 30 min TF
}
............................
alebo inak, kde nemusis davat podmienky BarsInProgress
Q = CCI(BarsArray[1], 20) [0] //toto je cci z 5 min TF

Link to comment
Sdílet pomocí služby

Reagujem nato co tu napisal
programmer 5 prispevkov pred.


Neviem si s tymto radi a ak sa to neda vyriesit, povazujem to za fatalnu chybu Ninja traderu a vlastne nemoznosti robit presny backtest.
Obchodujem napr. na 5 min grafu. Mam strategiu ked chcem vstupit do obchodu pocas vykreslovania posledneho 5min baru.
Nechcem cakat az sa bar vykresly cely a vstupit az na close (resp. open dalsieho), to by uz bolo neskoro.
Preto som si v Strategii nastavil dva timeframy 5 min a 1 tickovy.
Strategia sa teda vykonava kazdy 1 tick a zaroven viem pracovat s 5min indikatormi CCI(x)[0], EMA(x)[0] (ktore preratavaju hodnoty kazdy tick pre posledny 5min bar).
Nato treba mat nastavene CalculateOnBarClose = false.

Vsetko funguje perfektne a ja na 5min bare viem presne na tick vstupovat do obchodov. (napr. v strede vykreslovania baru na zaklade CCI paternu)
Problem je ze to funguje len ako LIVE alebo na REPLAY.
Ked to pustim ako backtest cez strategy analizer (a historicke data mam samozrejme tickove)
Ninja neni schopna tieto data analizovat spravne a 5min TF sa vykonava uz len na close !!!!!!
Takze PRIEBEZNE ZMENY HODNOT INDIKATOROV POCAS VYKRESLOVANIA BARU SU NEDOSTUPNE.
Backtest prebehne ale vstupy a vystupy su tym padom uz len na Close (resp. open). Presnost je ta tam.

Prosim ak mate niekto s tymto skusenost, poradte ako to riesite.
Dik Georg3

Link to comment
Sdílet pomocí služby

to All

Je tady nějaký programátor, který by uměl naprogramovat v NT do jednoho grafu s Range bars, EMA z jiného Range bars?

Příklad :

- 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).

Link to comment
Sdílet pomocí služby

[bold] pro vsechny: [/bold]

prosim, pomahejme si navzajem..jeden rozumi, tomu, druhy tomu - pokud se oba podeli verejne a bezplatne, maji uzitek nejen oni dva, ale vsichni na foru..

nedelejme z tohoto vlakna trziste, kde se bude pomahat za penize..z predchozich prispevku lze vypozorovat, ze se tady urcite najdou ochotni lide, kteri radi pomuzou a poradi zadarmo...az budou potrebovat sami, budou zase oni radi za pomoc..

pokud nekdo vyzaduje specialni sluzby, s nimiz mu diskutujici nepomuzou na foru, necht zkusi stesti na nejake skole u sikovnych studentu informatiky, nebo oslovi napriklad specializovanou firmu..ale nedelejme z tohoto vlakna vlakno inzertni..

diky za pochopeni..

michal

Link to comment
Sdílet pomocí služby

W01554 Napsal:
-------------------------------------------------------
> - 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

z toho co jsem zjistil pri psani indikatoru "akusticke upozorneni" mam pocit, ze to jde. Provedu blizsi pruzkum a dam vedet.
Jirka


Link to comment
Sdílet pomocí služby


×
×
  • Vytvořit...