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

Doporučené příspěvky

Odesláno

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.

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

Nejaktivnější diskutující

Nejaktivnější diskutující

Publikované obrázky

Odesláno

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


Odesláno

Ahoj!

Potreboval bych pomoct s naprogramovani jedne trivialni veci. Chtel bych, jak by se uzavrel bar mezi SMA 5 a SMA 25, tak aby se mi v grafu zobrazil nejaky symbol. Nemohl jsem na to prijd jak to napsat a ani ve wizardu jsem na to neprisel. Snad mi nekdo poradi. Diky

Odesláno

Jacobx:

Jakoze chces zobrazit nejaky symbol ve chvili kdy je close posledniho baru mezi SMA(5) a SMA(25)? A chces aby se zobrazil kdyz je close vyse nez SMA5 a nize nez SMA25 nebo naopak? Jaky symbol? Sipka nahoru/ dolu? Kde ho chces zobrazit? Podle odpovedi na tyto otazky se uz da neco vymyslet :)

D.

Odesláno

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.

Odesláno

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.

  • 4 týdny později...
Odesláno

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.

Odesláno

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

Odesláno

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.

Odesláno

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

Odesláno

Aha, predtim jsem si toho nevsiml. Mate tam property High, to uz je nadefinove (Je to data series high cen baru. Uff nejak mi nejde kombinovat anglictina s cestinou :) ). Pojmenujte property treba Hi a pojede to (vcetne vsech vyskytu ve skriptu).

D.

  • 2 týdny později...
Odesláno

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.

Odesláno

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'


×
×
  • Vytvořit...