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

TradeStation - programování


Doporučené příspěvky

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

Nejaktivnější diskutující

Nejaktivnější diskutující

Publikované obrázky

  • 2 týdny později...

Vedel by nekdo, jak se spravne programuje vztah mezi Daty1 a Daty2. Zkousim naprogramovat Elderuv TSS a nejak se mi to nedari. Respektive strategie je verifikovana uspesne, ale na chart se nic nezobrazuje (duvodem neni, ze se tam nenachazi situace dle podminek).

Priklad:
Entry> MACD histogram Weekly dela Uptick a MACD histogram Daily dela Uptick
Exit> MACD histogram Daily dela downtick

Program:
Inputs: Price1(Close), Price2(Close Data2),
FastLength (12), SlowLength (26), SigLength (9);

Vars: MyMACD2(0), MACDAvg2(0), MACDH2(0), // Data2 = Weekly
LongChartTrend(0),
MyMACD1(0), MACDAvg1(0), MACDH1(0); // Data1 = Daily

// MACD2 Function for Data2>
MyMACD2 = MACD(Price2, FastLength, SlowLength);
MACDAvg2 = XAverage (MyMACD2, SigLength);
MACDH2 = MyMACD2 - MACDAvg2;

If MACDH2[1] > MACDH2[2] then LongChartTrend = 1; // 1 = UpTrend
If MACDH2[1]
// MACD1 Function for Data1>
MyMACD1 = MACD(Price1, FastLength, SlowLength);
MACDAvg1 = XAverage (MyMACD1, SigLength);
MACDH1 = MyMACD1 - MACDAvg1;

// >>>> STRATEGY //Entry
If LongChartTrend = 1 and MACDH1 > MACDH1[1] then
Buy next bar at the market;
If LongChartTrend = 2 and MACDH1 SellShort next bar at the market;

//Exits
If MACDH1 Sell this bar on Close;
If MACDH1 > MACDH1[1] then
BuyToCover this bar on Close;

{ tohle je jedna z verzi- zkousel jsem take neurcovat trend na Weekly a dat to do podminky primo, ale vysledek je vzdy stejny. Program hlasi vse v poho, ale nic se nezobrazuje}

Dekuji za pomoc... P.

Link to comment
Sdílet pomocí služby

Alesi,

dekuji za odpoved. Data byla spravne, ale mel jsem spatne nastaveni MaxBarsBack. Spatne jsem si to vysvetlil a rapidne navysil hodnotu...
Mam, ale dalsi problem. Kdyz jsem zacal ty jednotlive obchody studovat, zjistil jsem, ze se mi tak generuje vic obchodu nez by melo...
Kdyz jsem si zobrazil oboje data a k nim oboje MACH histogramy, tak jsem zjisti na Weekly napr. histogram klesa, na Daily stoupa a strategie generuje Long obchody (napr. obdobi prosinec07 - leden08) ...

Existuje pro strategie nejaka funkce jako NoPlot pro ostatni studie?

Dekuji P.

Link to comment
Sdílet pomocí služby

Pepino710,

já jsem ten kod moc nestudoval. To že to generuje více obchodů může mít určitě řadu příčin. Napadá mě:

1. je vypnuta funkce: [IntrabarOrderGeneration = FALSE] ?
2. nevím jestli vstupy mají být na následujícím baru dle Daily grafu nebo Weekly?

upřímě řečeno s více TF v jednom grafu prozatím nepracuji, protože nejsou podporovány v případě Vol nebo Tick grafů.

Nerozumím té poslední otázce. Proč spouštět strategii, když by neměla ukazovat obchody. Aby to opticky "nepřekáželo" v grafu?

Aleš

Link to comment
Sdílet pomocí služby

Alesi, IntrabarOrderGeneration mam vypnutou a navic jsem se docetl, ze tato funkce neni podporovana pro Multi Data. Abychom si usetrili cas, tak vam zkusim to vylozil konkretne. Rekneme, ze mam nasledujici EL Strategii, ktera je pouze pro Long positions (Inputs, Vars a MACD funkce viz nahore) //Entry If MACDH2[1] > MACDH2[2] and MACDH1 > MACDH1[1] then Buy next bar at the market; {Weekly> casovy posun je zde proto, ze chci mit zavreny signal (=UpTick), jinymi slovy nechci zahrnovat aktualni bar, ktera se teprve vyviji} {Daily> zde chci to same, ale osetril jsem to Buy Order, ktera kupuje na Open next bar} //Exits If MACDH1 Subgraph1> Data1 (Daily) Subgraph2> MACD pro Daily {delam si to jednoduche, a tak jsem si UpTicks obarvil zelene a DownTicks cervene} Subgraph3> Data2 (Weekly) + MACD pro Weekly {nahral jsem to do jednoho grafu kvuli uspore prostoru, je to trochu mismas, ale kdyz se zamerite na barvy, tak je to v poho} Obdobi (listopad07-leden08) jsem oznacil vertikalnima carama, ktere odpovidaji DownTrendu na Weekly. V tomto obdobi by program nemel generovat vubec zadne Long obchody. Podivejte, kolik jich tam mam? Teprve se ucim programovat, a tak nerozumim uplne presne programatorske logice. Myslel jsem, ze program jede bar po baru, a pokud najde specifikovanou akci, tak ji provede a pokud najde pripady ktere nejsou specifikovany, tak nedela nic. Anebo bych mel specifikovat vsechny pripady? A to souvisi s tou otazku na NoPlot, cimz jsem minil specifikaci pripadu, kdy nechci, aby se nejaka akce provedla. Napr.: If MACDH2[1] > MACDH2[2] and MACDH1 > MACDH[1] then Buy next bar at market else NoTrade; {NoPlot}; nebo If MACDH2[1] MACDH[1] then NoTrade; If MACDH2[1] = MACDH2[2] and MACDH1 > MACDH[1] then NoTrade; If MACDH2[1] > MACDH2[2] and MACDH1 = MACDH[1] then NoTrade; If MACDH2[1] > MACDH2[2] and MACDH1 5043

Link to comment
Sdílet pomocí služby

Alesi,
IntrabarOrderGeneration mam vypnutou a navic jsem se docetl, ze tato funkce neni podporovana pro Multi Data.

Abychom si usetrili cas, tak vam zkusim to vylozil konkretne. Rekneme, ze mam nasledujici EL Strategii, ktera je pouze pro Long positions (Inputs, Vars a MACD funkce viz nahore)

//Entry
If MACDH2[1] > MACDH2[2] and MACDH1 > MACDH1[1] then
Buy next bar at the market;
{Weekly> casovy posun je zde proto, ze chci mit zavreny signal (=UpTick), jinymi slovy nechci zahrnovat aktualni bar, ktera se teprve vyviji}
{Daily> zde chci to same, ale osetril jsem to Buy Order, ktera kupuje na Open next bar}

//Exits
If MACDH1 Sell this bar on Close;
{Vystup Daily pri DownTicku}

Prikladam obrazek, kde>
Subgraph1> Data1 (Daily)
Subgraph2> MACD pro Daily {delam si to jednoduche, a tak jsem si UpTicks obarvil zelene a DownTicks cervene}

Subgraph3> Data2 (Weekly) + MACD pro Weekly {nahral jsem to do jednoho grafu kvuli uspore prostoru, je to trochu mismas, ale kdyz se zamerite na barvy, tak je to v poho}

Obdobi (listopad07-leden08) jsem oznacil vertikalnima carama, ktere odpovidaji DownTrendu na Weekly. V tomto obdobi by program nemel generovat vubec zadne Long obchody. Podivejte, kolik jich tam mam?

Teprve se ucim programovat, a tak nerozumim uplne presne programatorske logice. Myslel jsem, ze program jede bar po baru, a pokud najde specifikovanou akci, tak ji provede a pokud najde pripady ktere nejsou specifikovany, tak nedela nic.
Anebo bych mel specifikovat vsechny pripady? A to souvisi s tou otazku na NoPlot, cimz jsem minil specifikaci pripadu, kdy nechci, aby se nejaka akce provedla.
Napr.:
If MACDH2[1] > MACDH2[2] and MACDH1 > MACDH[1] then
Buy next bar at market
else
NoTrade; {NoPlot};

nebo
If MACDH2[1] MACDH[1] then NoTrade;
If MACDH2[1] = MACDH2[2] and MACDH1 > MACDH[1] then NoTrade;
If MACDH2[1] > MACDH2[2] and MACDH1 = MACDH[1] then NoTrade;
If MACDH2[1] > MACDH2[2] and MACDH1
Pepino

Link to comment
Sdílet pomocí služby

Pepino710,

předně já taky nejsem ždáný programátor a s TS se teprve seznamuji :-)

Řekl bych, že chyba bude někde v logice té podmínky. Trochu mě zaráží jedna věc. V té podmínce používáte hodnoty MACD z Weekly dat a rozhoduje se podle hodnot 1 a 2 týdny starých. Tady mi to přijde trochu divné.

Ono je to někdy dost těžké, při napsání nějaké podmínky, v hlavě vyhodnotit všechny alternativy které mohou nastat, respektive za jakých okolností ty podmínky jsou splněny. Často se něco přehlédne.

K tomu problému s "NoTrade", udělal bych takové vstupní podmínky, aby tam podobné věci byly zakomponované. Lze přece těch podmínek přidat daleko více. Takže neřešil bych kdy neobchodovat, ale naopak kdy jsou skutečně splněny všechny vstupní podmínky pro obchod. Všechny 4 podmínky kdy neobchodovat jdou přeci zahrnout jako vstupní filtr.

Napsal bych to:

Condition1 = .............
Condition2 = .............
Condition3 = .............

If Condition1 and Condition2 and Condition3 ....... then begin
Buy next bar at market;
end;

Osobně používám takovou malou pomůcku, pokud se mi nezdá vyhodnocení vstupu do obchodu, dám si vypsat sledované hodnoty do Output Baru (do PrintLogu) a tam se na to podívám s jakými hodnotamy v tu danou chvíli program pracoval.

Print(D , T, hodnota1, hodnota2, hodnota3, condition1, condition2, condition3 ......);

Tento řádek vložím někam do programu a každým průchodem kódu se vypíšou hodnoty. Vidím tak i jejich datum a čas a mohu si určit k čemu patří. Ke kterému baru.


Aleš

Link to comment
Sdílet pomocí služby

Alesi,

chtel bych vam velmi podekovat!
Asi to bude znit srandovne pro ostatni zkusenejsi lidi v programovani, ale vyuziti informaci z output bar diky prikazum (print a commentary) mi pomohly cely problem vyresit.
Stale jsem si lamal hlavou s logikou vztahu mezi daty1(daily) a daty2 (weekly), vymyslel jsem ruzne slozite a jeste slozitejsi vzorce a hledal chybu tam, kde celou dobu nebyla.

Zpetnym sledovanim vystupni dat jsem zjistil, ze chyba nebyla ve vzorcich, ale v tom, jak je vztah dat1 a 2 osetren technicky. Pokud tedy mame data1 jako daily, pak data2(weekly) jsou v outputu zahrnuty 5x. Maji sice zpetny datum a zpetne hodnoty, ale jsou tam 5x (1x za kazdy den), a pokud nasledne vstupuji do funkci jako napr. MACD nebo Mov.Avg, tak tyto funkce ve finale pracuji s uplne jinymi daty a samozrejme outputs diky tomu vyhazuji falesna data.

Staci tedy pouze vynasobit Inputy pro Data2 5x a razem vse funguje :) (tu)

Pokud tedy nekdo pracuje s Daty1(4-hour) a Data2(weekly), pak musi inputs vynasobit 30x apod...

Trvalo mi to tedy cely den nez jsem na to prisel, ale konecne vidim, co chci videt...

Jeste jednou dekuji... Pepino

Link to comment
Sdílet pomocí služby

Pepino,

jsem rád, že to pomohlo :-)

bez následného sledování co ve skutečnosti program přesně dělá, jaké hodnoty získá a jak je vyhodnotí, se asi neobejde žádný programátor.

Jinak ta Vaše pomůcka s násobením weekly hodnot mě nepřijde úplně správná, ale podstatné je jestli Vám to funguje. Za předpokladu, že člověk přesně chápe co se vlastně děje, jak se jednotlivé hodnoty vytvářejí je to potom asi jedno.

P.S: ne vždy musí být logicky přesné a správné řešení pro strategii to nejlepší :-) ale to je na osobním uvážení jak se kdo rozhodne

Aleš

Link to comment
Sdílet pomocí služby


×
×
  • Vytvořit...