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

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

Nejaktivnější diskutující

Nejaktivnější diskutující

Publikované obrázky

Zdravim

bude nekdo od te dobroty a poradi s upravou strategie?

Mam pomoci wizardu nadefinovanou strategii , v pripade backtestu nastavim cas rekneme 15:30 - 18:00 a ve vysledku jsou znazornene vstupy , prubeh a profit target, v pripade ze se PT nevyplni do 18:00 je v grafu ukoncena pozice jako Exit on Close, cili za jakehokoliv stavu je pozice v 18:00 ukoncena.
Toto je v poradku a tak to i chci , problem nastava kdyz strategii pustim na zivy graf tak me automaticky naskoci otevrena pozice z minuleho dne, ktera uzavirala jako Exit on Close
Jak nastavit nebo upravit strategii aby prikaz exit on close byl bran v potaz jako ukoncena pozice a ne kdyz strategy pustim na zivy graf tak se me neotevrela pozice z minuleho dne.
Jde me o to ze chci nechat strategii jet na zivych datech a aby se pozice plnily a uzaviraly ve stanoveny cas.
Laicky receno , ve 15:00 zapnu strategii , 15:45 strategie zada pokyn na zaklade signalu pozice se drzi a neni dosazen PT do 18:00, pozice se v jakemkoliv stavu zavira v 18:00

Link to comment
Sdílet pomocí služby

PetrJansky:
Je to možné realizovat zadáním limitního příkazu: EnterShortStop(Low[0],"tvuj nazev vstupu"); ve funkci ti parametr Low[0] dosadi low posledni svice. V tvojem pripade predpokladam, ze budes chtit dosadit Low z časového intervalu který tě zajímá. Jen pozor na práci s stop a limitníma příkazama. Pokud zadáváš stop prikaz do shortu musí (logicky) být na nižší cenu než je aktuální - u longu opačně. Pokud zadavaš limit do longu, musi byt jeho cena nizší než aktuální cena - u shortu naopak. Snad tam nebude zádrhel, se stop příkazama nepracuji.

jrk:
Nevím přesně, musel bych to vidět. Možná je to v nastavení parametru Time in Force při spuštění strategie - měl by být "Day". Dále parametr nastavit na Exit On Close=True,
Já používám pro výstup v přesně stanovený čas něco takového:
if (Position.MarketPosition == MarketPosition.Long && ToTime(Time[0]) >= 180000) ExitLong();
if (Position.MarketPosition == MarketPosition.Short && ToTime(Time[0]) >= 180000) ExitShort();

Rozdíl je v tom, že nemusíš omezovat strategii z hlediska paramterů session begin a session ends - je to pak přehlednější i v případě grafu který se k běhu strategie zobrazuje (není uříznutý v 18:00 ale je vidět dále).

posun na BE:
//vstup do pozice
SetStopLoss(100);
if (moje podminky pro vstup) EnterLong();

double cenaVstupu=Close[0] //nastavuji zjednodusene na Close[0] / v reale to ale nemusi byt zcela presne pancto mame slipp
....
..
//ohlidani dosazeneho zisku a nasledny posun na BE
// Zpusobu je nekolik zde je kontrolovano, zda se zisk z pozice behem predchozi svicky dostal nad 200$ / potom se //posouva na BE
if (Position.GetProfitLoss(High[0],PerformanceUnit.Currency)>200) SetStopLoss(CalculationMode.Price, cenaVstupu);

Link to comment
Sdílet pomocí služby

Ahoj

to jkr:

#region Variables

bool FirstTrade = true;

#endregion

protected override void Initialize()

{
SetStopLoss("", CalculationMode.Ticks, 30, false);
SetProfitTarget(CalculationMode.Ticks, 30);
CalculateOnBarClose = true;
}

protected override void OnBarUpdate()
{
if (Bars.FirstBarOfSession) FirstTrade=true;

if(ToTime(Time[0]) >= 154500 )
{
if (Close[0]>Close[1] // příklad vstupní podmínky
&& Position.MarketPosition == MarketPosition.Flat
&& FirstTrade==true)
{
EnterLong(DefaultQuantity,"");
FirstTrade = false;
}

if (Close[0] && Position.MarketPosition == MarketPosition.Flat
&& FirstTrade==true)
{
EnterShort(DefaultQuantity, "");
FirstTrade = false;
}

}
if(ToTime(Time[0]) >= 180000 )
{
if (Position.MarketPosition == MarketPosition.Long) ExitLong("Exit Time Long","");
if (Position.MarketPosition == MarketPosition.Short) ExitShort("Exit Time Short","");
}
}





Link to comment
Sdílet pomocí služby

  • 2 týdny později...

Airmike
Programátor sice úplně nejsem ale;
Bohužel ne - záleží na tom, jestli jsou pozice otevřené v rámci jedné strategie, nebo pozice otvírá několik strategií.
Pokud jsou otevřeny v rámci jedné strategie mohlo by to vypadat takto:
double celkovyProfit=0; //promena drzi vypocteny celkovy profit
//cyklus ktery prochazi vsechny pozice.
//V poli Positions jsou drzeny vsechny pozice pro vsechny trhy se kterymi strategie pracuje
for (int i=0;i==Positions.GetLength(1);i++)
{
//soucet celkoveho profitu
//profit je pocitan k Close posledniho baru. Pokud mas ve strategii vice tf (BarsArray) mela by to byt ta aktualni - ale nemam vyzkouseno
celkovyProfit=+Positions[i].GetProfitLoss(Close[0],PerformanceUnit.Currency);
}

if (celkovyProfit>1000000) //pokud sem vydelal milion $ mam si pro dnesek padla a zaviram pozice
{
//...
ExitShort("SHT1");
//...
//...
}

Zkus použít, ale nemám to otestovaný, možná bude chtít doladit práce s cyklem, nevím co vrací funkce GetLength. Kdyžtak napiš...

Horší by bylo pokud pozice oteviráš z několika strategií.V runtime strategie máš přístup akorát k pozicím otevřeným v rámci této strategie - o pozicích ostatních strategií daná strategie neví nic.
Já jsem si dělal sledování otevřených pozic - abych mohl kontrolovat zda mám na trhu otevřenou pozici přes několik strategií. Dalo by se to použít ale už je to víc výzkumničiny.

Link to comment
Sdílet pomocí služby

Bop

dakujem za reakciu. niesom si uplne isty ci to dobre chapem, jedine co potrebujemje vediet, ci je mozne, ze ak otvorim rucne jeden kontrakt na trhu A a druhy kontrakt na trhu B. oba rucne tak mi zavrie profit ked bude ich rozdiel x tickov. popripade x dolarov v pluse. ziadna strategia , ziadne dalsie ordre, len takato jednoduchost.

v inych platformach to ide, v NT neviem , tak som sa chcel opytat. dakujem.

Link to comment
Sdílet pomocí služby

Airmike
Aha - tak v tom případě to sem s příspěvkem krapet mimo...
Tady ti asi nepomůžu. Tipoval bych, že je to možné řešit přes vlastní ATM strategie - ale s těmi jsem v NT zatím nepracoval...
Pokud na to někde narazíš hoď to prosím sem, rád bych se také ochytřil :)
Dík

Link to comment
Sdílet pomocí služby

  • 2 týdny později...

×
×
  • Vytvořit...