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

Ladousek:

Tak na vykresleni sipky mas metody DrawArrowUp/DrawArrowDown a na text DrawText.
Tezko rict co mas spatne v kodu, ale nemelo by to byt nic sloziteho. Zkus pohledat co presne tahle chyba znamena (obvykle k tomu byva i ukazkovy priklad kodu jak takova chyba vznikne).
Zkus si projit tutorialy v helpu jak vytvorit indikator. Potom bys mel mit jasneji.

D.

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


> jirib, v NT sú v menu Tools/Edit
> Ninjascript/Strategy nejaké ukážkové základné
> stratégie, skús pozrieť stratégiu
> SampleMaCrossOver na oboznámenie so stavbou
> stratégie + help.
>

Díky BobSK, přesně tohle jsem potřeboval, abych věděl kde to začít rozplétat.

Díky i za tip na zaokrouhlování.


Link to comment
Sdílet pomocí služby

davidoff77:

Ano, kdyz je close posledniho baru mezi SMA5 a SMA25. A kdyz je close vyse nez SMA5 a nize nez SMA25, tak aby se nad tim barem zobrazil maly trojuhelnik smerem dolu (nebo klidne nejaky jiny maly smerovaci symbol). A kdyz je close vyse nez SMA25 a nize nez SMA5, tak uplne to same, ale akorat se symbolem smerem nahoru umistenym pod barem.

Diky moc.

Link to comment
Sdílet pomocí služby

JacobX:

neco takoveho by melo zafungovat:

if(Close[0] > SMA(5)[0] && Close[0] {
DrawTriangleDown("Down"+down++, true, 0, High[0] + TickSize, Color.Green);
}
else if (Close[0] SMA(25)[0])
{
DrawTriangleUp("Up"+up++, true, 0, Low[0] - TickSize, Color.Red);
}

Ale pokud nevis kam tohle dat a co jeste doplnit, tak si radsi jeste nastuduj zaklady :) A jestli jsou tam drobne chybicky, tak se omlouvam, pisu to z hlavy.

D.

Link to comment
Sdílet pomocí služby

  • 4 týdny později...

Ahoj. Prosím o radu s pomocným skriptem pro backtestování. O co mi jde? Dejme tomu, že mám v grafu zobrazeny stovky signálů nějakého patternu (např. 0/v). Dokázal by někdo naprogramovat indikátor, který bude na stisknutí klávesy skákat od jednoho signálu k druhému bez nutného ručního posouvání grafu? Při diskréčním posuzování takových signálů se mi stává, že přejedu signál a tím pádem už vidím co následovalo - chtěl bych opravdu co nejlépe vyhodnotit mé diskréční posuzování patternů a vzhledem k velkému množství obchodů by ruční scrollování zabralo nepoměrně více času. Signál - líbí/nelíbí - další signál. Určitě by se to hodilo více obchodníkům.

Jak bych postupoval?

1. Při načtení historického grafu se podsvítí a načtou do pole indexy těch barů, které splňují podmínku patternu.
2. Při stisknutí klávesy se pravý okraj grafu nastaví na index baru, který je v poli na řadě.

Vše mám vyřešené (stisk klávesy, detekci patternu, načítání do pole) kromě nějaké metody na posun grafu. Něco jako:

gotoBar(idBaru);

Pokud by někdo věděl, jak tento posun zařídit budu rád. Mělo by to nějak jít, když lze posouvat grafem na stisk kláves (PgUp, PgDown, atd.).

Děkuji za pomoc, v případě úspěchu samozřejmě kód poskytnu.

Link to comment
Sdílet pomocí služby

Zdravím, nedávno jsem si nainstaloval Ninjatrader a testuju si programování skriptů a nemůžu rozlousknout jeden problém. Zkoušel jsem si udělat strategii na odečítání indikátoru RSS. Přes wizard to jde normálně naprogramovat, žádný problém to nehlásí. Při backtestu to ale nevykreslí naprosto nic. Podmínky jsou de facto cross abowe/below, které taky nejely, proto jsem to ještě přepsal takto. Jinak mi všechny strategie doposud fungovaly a to i s indikátorem do třetí úrovně. Nevím, co s tím. Kód je níž:

///


/// This method is used to configure the strategy and is called once before any strategy method is called.
///

protected override void Initialize()
{
Add(RSS(A, B, C));
Add(RSS(A, B, C));
Add(RSS(A, B, C));
Add(RSS(A, B, C));

CalculateOnBarClose = true;
}

///
/// Called on each bar update event (incoming tick)
///

protected override void OnBarUpdate()
{
// Condition set 1
if (RSS(A, B, C)[0] > Lo
&& RSS(A, B, C)[1] {
DrawArrowUp("My up arrow" + CurrentBar, true, 0, Low[0], Color.Lime);
EnterLong(DefaultQuantity, "");
}

// Condition set 2
if (RSS(A, B, C)[0] && RSS(A, B, C)[1] > High)
{
DrawArrowDown("My down arrow" + CurrentBar, true, 0, Low[0], Color.Red);
ExitLong("", "");
}

// Condition set 3
if (RSS(A, B, C)[0] && RSS(A, B, C)[1] > Mid)
{
DrawArrowDown("My down arrow" + CurrentBar, true, 0, Low[0], Color.Red);
ExitLong("", "");
}

// Condition set 4
if (RSS(A, B, C)[0] && RSS(A, B, C)[1] > Lo)
{
DrawArrowDown("My down arrow" + CurrentBar, true, 0, Low[0], Color.Red);
ExitLong("", "");
}
}
Předem díky za rady.

Jonth

Link to comment
Sdílet pomocí služby

2Jonth:
Tak za prve, nevidim nikde definovane variables Lo, Mid, High. ALE hlavne vidim hlavni problem v tom, ze pristupujes na bar o jeden zpet a nekontrolujes si jestli mas vic jak jeden bar. Kdyz by sis otevrel okno output, tak bys videl pristup mimo pole. Cili dej na zacatek neco takoveho:

if(CurrentBar
A melo by to jet.

D.

Link to comment
Sdílet pomocí služby

Tak bohužel, v output win. to nic neukázalo, ale vyhodilo to hlášku: "Error on running optimizer: Hodnota nemůže být NULL; Název parametru: value" po formální stránce mi celý skript přijde v pořádku. Původně tam byla podmínka cross above/below, ani to nejelo.
tady je hlavní část kódu:

public class RSSpokus4 : Strategy
{
#region Variables
// Wizard generated variables
private int a = 10; // Default setting for A
private int b = 40; // Default setting for B
private int c = 5; // Default setting for C
private int stop = 10; // Default setting for Stop
private int trail = 10; // Default setting for Trail
private int lo = 20; // Default setting for Lo
private int mid = 30; // Default setting for Mid
private int high = 80; // Default setting for High
// User defined variables (add any user defined variables below)
#endregion

///


/// This method is used to configure the strategy and is called once before any strategy method is called.
///

protected override void Initialize()
{
Add(RSS(A, B, C));
Add(RSS(A, B, C));
Add(RSS(A, B, C));
Add(RSS(A, B, C));

CalculateOnBarClose = true;
}

///
/// Called on each bar update event (incoming tick)
///

protected override void OnBarUpdate()
{
if(CurrentBar
// Condition set 1
if (RSS(A, B, C)[0] > Lo
&& RSS(A, B, C)[1] {
DrawArrowUp("My up arrow" + CurrentBar, true, 0, Low[0], Color.Lime);
EnterLong(DefaultQuantity, "");
}

// Condition set 2
if (RSS(A, B, C)[0] && RSS(A, B, C)[1] > High)
{
DrawArrowDown("My down arrow" + CurrentBar, true, 0, Low[0], Color.Red);
ExitLong("", "");
}

// Condition set 3
if (RSS(A, B, C)[0] && RSS(A, B, C)[1] > Mid)
{
DrawArrowDown("My down arrow" + CurrentBar, true, 0, Low[0], Color.Red);
ExitLong("", "");
}

// Condition set 4
if (RSS(A, B, C)[0] && RSS(A, B, C)[1] > Lo)
{
DrawArrowDown("My down arrow" + CurrentBar, true, 0, Low[0], Color.Red);
ExitLong("", "");
}
}

#region Properties
[Description("")]
[GridCategory("Parameters")]
public int A
{
get { return a; }
set { a = Math.Max(1, value); }
}

[Description("")]
[GridCategory("Parameters")]
public int B
{
get { return b; }
set { b = Math.Max(1, value); }
}

[Description("")]
[GridCategory("Parameters")]
public int C
{
get { return c; }
set { c = Math.Max(1, value); }
}

[Description("")]
[GridCategory("Parameters")]
public int Stop
{
get { return stop; }
set { stop = Math.Max(1, value); }
}

[Description("")]
[GridCategory("Parameters")]
public int Trail
{
get { return trail; }
set { trail = Math.Max(1, value); }
}

[Description("")]
[GridCategory("Parameters")]
public int Lo
{
get { return lo; }
set { lo = Math.Max(1, value); }
}

[Description("")]
[GridCategory("Parameters")]
public int Mid
{
get { return mid; }
set { mid = Math.Max(1, value); }
}

[Description("")]
[GridCategory("Parameters")]
public int High
{
get { return high; }
set { high = Math.Max(1, value); }
}
#endregion

Link to comment
Sdílet pomocí služby

  • 2 týdny později...

Dobry den. Po delsi pripravne dobe, kdy jsem si vytvoril celou radu ninja-scriptu, ktere jsem i intenzivne proveril
v Strategy analyzer, jsem chtel tyto dnes pustit live.
Prisla vsak obratem chybova hlaska s okamzitym ukonceni programu.
Hlaska je: .... Order Rejected. Strategy has send cancel requests, attempted to close the position and terminated itself.

Program je vcelku jednoduchy a close je nastaveno na vecerni hodinu nebo je vazano na jeden parametr.
Tento program pracuje v Strategy analyzer bez problemu. Neopomnel jsem neco nekde nastavit? Za kazdou radu budu
vdecny. Dekuji.

Link to comment
Sdílet pomocí služby

Zdravim tez a dekuji. Prohledl jsem si jak trace- tak i log-file.

Nakonec pomohlo:

Graph - Strategies (Ikona)
- General
pole: Account musi byt nastaven na 'Livecode'
pole: Enable musi byt nastaveno na 'falls'
- Order Properties
pole: TimeInForce musi byt nastaveno na 'Day'

Pro vsechny pripady je zapotrebi jeste:
ControlCenter - File - GlobalSimulationMode (nesmi byt oznaceno)
ControlCenter - Orders
pole: TIF nastavit na 'Gtd'
pole: Account nastavit na 'Livecode'
SupperDom
pole: TIF nastavit na 'Day'
pole: Account nastavit na 'Livecode'

Link to comment
Sdílet pomocí služby


×
×
  • Vytvořit...