Pátek 29. březen 2024 07:21
reklama
InstaForex Autochartist
reklama
Fintokei SwiftTrader
reklama
Fintokei ProTrader
reklama
InstaForex Ebook

AOS - Probmém s časom pri backtestovaní

Dobrý deň, vie mi niekto prosím poradiť, čo zmeniť, doplniť, ... v skripte, aby mi fungoval správne pri backestovaní?
V skriptoch a AOS som začiatočník.
Nižšie prikladám kód.
Ide o to, aby program vypísal počet sviečok za určité obdobie. V tomto prípade to je od 05:00 do 06:59 v daný deň.
Pokiaľ to spustím v platforme na deme, funguje to správne.
Keď to spustím v testeri stratégii a nastavím otestovať v aktuálny deň, taktiež to funguje správne.
Avšak keď to dám otestovať v dni o jeden, dva, tri, ... dozadu od aktuálneho dňa, už to nefunguje. Taktiež keď vezmem nejaké obdobie z histórie, tak to nefunguje.
Vopred ďakujem za každú radu.

---------------------------------------------------------------------

int start(){

datetime zaciatok_obdobia = D'05:00';
datetime koniec_obdobia = D'6:59';
int den = TimeDay(TimeCurrent());

int pocet_sviecok = Bars(NULL,PERIOD_M1,zaciatok_obdobia,koniec_obdobia);

datetime aktualny_cas = TimeCurrent();
string text = StringConcatenate("Aktuálny čas je: ",TimeDay(aktualny_cas),".",TimeMonth(aktualny_cas),". ",TimeHour(aktualny_cas),":",TimeMinute(aktualny_cas));
text = StringConcatenate(text,"\n Deň: ",den);
text = StringConcatenate(text,"\n Začiatok obdobia: ",TimeToStr(zaciatok_obdobia)," Koniec obdobia: ",TimeToStr(koniec_obdobia));
text = StringConcatenate(text,"\n Počet sviečok: ",pocet_sviecok);
text = StringConcatenate(text,"\n Aktuálny čas: ",aktualny_cas);

Print(text);
return(0);

}

Jste na diskusním fóru jako nepřihlášený uživatel a Vaše funkce jsou tak omezené. Pro neomezený přístup je nutné být registrovaný a přihlášený uživatel. Nejste-li registrován/a klikněte pro bezplatnou registraci. Jednoduchá registrace vám otevře cestu k profesionálním informacím.

Registrací na FXstreet.cz můžete získat:

  • Možnost diskutovat s ostatními tradery.
  • Vkládání nových příspěvků a zakládání nových témat v diskusním fóru.
  • Možnost vyhledávání v tomto velmi rozsáhlém diskusním fóru.
  • Přístup k uzamčeným odborným článkům, sekcím a školy forexu.
  • Ebooky, manuály a obchodní systémy zdarma.
  • Zasílání newsletterů a informací o nových akcích a aktivitách portálu FXstreet.cz
  • Možnost psát vlastní blogy a články.
  • Možnost objednání tradingových knih, seminářů nebo VIP zóny.
  • Další přínosné informace z oblasti obchodování na forexu.
Autor AOS - Probmém s časom pri backtestovaní (8 odpovědí)
PeterR
Gold member
avatar
Příspěvky: 708
Více informací o uživateli >>
AOS vs skript 19.12.2016 20:12

Ahoj, nejsem si jistý, ale podle mě skript se nedá backtestovat, ten vyvolá je jednu akci při spuštění a pak skončí.

Vykuk
Veteran member
avatar
Příspěvky: 1271
Více informací o uživateli >>
Přesně tak 20.12.2016 17:32

Přesně tak, jak píše nademnou PeterR. Script nejde backtestovat. To jde jen indikátr a AOS. Jediné co možná jde je, že pustíš backtester s vizuálním zobrazováním a tam přetáhneš script do grafu. To by až tak nevadilo...

Nerozumím proč tam vkládáš TimeDay(aktualny_cas) a proměnnou den, která je to samé - int den = TimeDay(TimeCurrent());, pak nechápu ten rozklad na TimeDay, TimeMonth...

Potom řídek int pocet_sviecok = Bars(NULL,PERIOD_M1,zaciatok_obdobia,koniec_obdobia); bude sám o sobě problém a divím se, že to vůbec projde kompilátorem. Bars není fukce a nevolá se se závorkama. A její hodnota je počet svíček na aktuálním grafu. Pak je obdobná iBars, ale výsledek je stejný. Nemůžeš ji takto zadat parametry.

Poslední problém budou řádky datetime zaciatok_obdobia = D'05:00'; a ten další. Pokud vytvoříš proměnnou datetima, tak vždy krom času obsahuje i datum. Respektive obsahuje počet vteřin uplynulých od 1.1.1970 a to přepočte na datum. Pokud mu datum nezadáš, tak si sám vloží datum kompilace.

Takže to bude chtít jít na to jinak wink

| Broker: IC Markets (live) | FX od 2012 |
walto
Nováček v diskuzi
avatar
Příspěvky: 9
Více informací o uživateli >>
Re: Přesně tak 20.12.2016 23:32
Odpověď na: Vykuk

Přesně tak, jak píše nademnou PeterR. Script nejde backtestovat. To jde jen indikátr a AOS. Jediné co možná jde je, že pustíš backtester s vizuálním zobrazováním a tam přetáhneš script do grafu. To by až tak nevadilo...

Nerozumím proč tam vkládáš TimeDay(aktualny_cas) a proměnnou den, která je to samé - int den = TimeDay(TimeCurrent());, pak nechápu ten rozklad na TimeDay, TimeMonth...

Potom řídek int pocet_sviecok = Bars(NULL,PERIOD_M1,zaciatok_obdobia,koniec_obdobia); bude sám o sobě problém a divím se, že to vůbec projde kompilátorem. Bars není fukce a nevolá se se závorkama. A její hodnota je počet svíček na aktuálním grafu. Pak je obdobná iBars, ale výsledek je stejný. Nemůžeš ji takto zadat parametry.

Poslední problém budou řádky datetime zaciatok_obdobia = D'05:00'; a ten další. Pokud vytvoříš proměnnou datetima, tak vždy krom času obsahuje i datum. Respektive obsahuje počet vteřin uplynulých od 1.1.1970 a to přepočte na datum. Pokud mu datum nezadáš, tak si sám vloží datum kompilace.

Takže to bude chtít jít na to jinak wink

Samozrejme, obaja (PeterR. aj Vykuk) máte pravdu. Zle som sa vyjadril, moja chyba. Nie je to skript, ako uvádzam, pretože, ako píšete, ten sa vykoná len raz. Je to kód z EA.
Tým rozkladom som chcel docieliť výpis dátumu a času v tvare: deň.mesiac. hodina:minúta (napr.: 3.4. 20:33)
Zatiaľ to neviem spraviť inak len takýmto spôsobom. Možno na to existuje jednoduchší zápis, ale zatiaľ ho nepoznám :) Ešte sa len učím. Ale rád sa nechám poučiť a budem vďačný za každú radu.
Všetky tie zápisy sú len pomocné a snažil som sa prísť na to, ako dostať počet sviečok za určité, mnou zadané obdobie.
Áno, Bars dáva počet sviečok na grafe, ale mala by to byť aj funkcia, aspoň podľa referenčnej príručky:
Bars

int Bars(
string symbol_name, // symbol name
ENUM_TIMEFRAMES timeframe, // period
datetime start_time, // start date and time
datetime stop_time // end date and time
);

A aj vracia počet sviečok za požadované obdobie, ale funguje to len v aktuálnom dni. Akonáhle spustím EA v testeri a nastavím mu čo i len včerajší deň, tak to už nefunguje.
Možno to nie je vhodný spôsob, ale strávil som niekoľko dní hľadaním na webe, akým spôsobom zistiť počet sviečok za požadované obdobie a nič iné som nenašiel. A ani to, prečo nefunguje tento zápis.

 

Vykuk
Veteran member
avatar
Příspěvky: 1271
Více informací o uživateli >>
Re: Re: Přesně tak 21.12.2016 07:14
Odpověď na: walto

Samozrejme, obaja (PeterR. aj Vykuk) máte pravdu. Zle som sa vyjadril, moja chyba. Nie je to skript, ako uvádzam, pretože, ako píšete, ten sa vykoná len raz. Je to kód z EA.
Tým rozkladom som chcel docieliť výpis dátumu a času v tvare: deň.mesiac. hodina:minúta (napr.: 3.4. 20:33)
Zatiaľ to neviem spraviť inak len takýmto spôsobom. Možno na to existuje jednoduchší zápis, ale zatiaľ ho nepoznám :) Ešte sa len učím. Ale rád sa nechám poučiť a budem vďačný za každú radu.
Všetky tie zápisy sú len pomocné a snažil som sa prísť na to, ako dostať počet sviečok za určité, mnou zadané obdobie.
Áno, Bars dáva počet sviečok na grafe, ale mala by to byť aj funkcia, aspoň podľa referenčnej príručky:
Bars

int Bars(
string symbol_name, // symbol name
ENUM_TIMEFRAMES timeframe, // period
datetime start_time, // start date and time
datetime stop_time // end date and time
);

A aj vracia počet sviečok za požadované obdobie, ale funguje to len v aktuálnom dni. Akonáhle spustím EA v testeri a nastavím mu čo i len včerajší deň, tak to už nefunguje.
Možno to nie je vhodný spôsob, ale strávil som niekoľko dní hľadaním na webe, akým spôsobom zistiť počet sviečok za požadované obdobie a nič iné som nenašiel. A ani to, prečo nefunguje tento zápis.

 

Vidím, že jsi pilný student, tak jen tak dál. Máš pravdu, funkce Bars je tam taky, nevšiml jsem si jí. A dělá přesně to co chceš. Co se týče toho, že si chceš přeformátovat datum tak jak vyhovuje tobě, tak taky ok. A k tomu problému - teď už tam bude jediný problém a to inicializace těch proměnných datetime zaciatok_obdobia = D'05:00'; a datetime koniec_obdobia = D'6:59';. Protože když EA kompiluješ 21.12.2016 tak se ti do těch proměnných zapíše 2016.12.21 05:00:00 a tento čas se aplikuje pro každý den, jenže pokaždé s datumem 21.12.2016. Takže zkus vymyslet něco flexibilnějšícho - něco kde do té proměnné zapíšeš čas s aktuálním datem... Něco jako že použiješ aktuální datum a přičteš 5 hodin. Jak se vrátím k PC, tak zkusím napsat víc, pokud na to zatím nepřijdeš sám wink

| Broker: IC Markets (live) | FX od 2012 |
Vykuk
Veteran member
avatar
Příspěvky: 1271
Více informací o uživateli >>
Re: Re: Přesně tak 21.12.2016 08:12
Odpověď na: walto

Samozrejme, obaja (PeterR. aj Vykuk) máte pravdu. Zle som sa vyjadril, moja chyba. Nie je to skript, ako uvádzam, pretože, ako píšete, ten sa vykoná len raz. Je to kód z EA.
Tým rozkladom som chcel docieliť výpis dátumu a času v tvare: deň.mesiac. hodina:minúta (napr.: 3.4. 20:33)
Zatiaľ to neviem spraviť inak len takýmto spôsobom. Možno na to existuje jednoduchší zápis, ale zatiaľ ho nepoznám :) Ešte sa len učím. Ale rád sa nechám poučiť a budem vďačný za každú radu.
Všetky tie zápisy sú len pomocné a snažil som sa prísť na to, ako dostať počet sviečok za určité, mnou zadané obdobie.
Áno, Bars dáva počet sviečok na grafe, ale mala by to byť aj funkcia, aspoň podľa referenčnej príručky:
Bars

int Bars(
string symbol_name, // symbol name
ENUM_TIMEFRAMES timeframe, // period
datetime start_time, // start date and time
datetime stop_time // end date and time
);

A aj vracia počet sviečok za požadované obdobie, ale funguje to len v aktuálnom dni. Akonáhle spustím EA v testeri a nastavím mu čo i len včerajší deň, tak to už nefunguje.
Možno to nie je vhodný spôsob, ale strávil som niekoľko dní hľadaním na webe, akým spôsobom zistiť počet sviečok za požadované obdobie a nič iné som nenašiel. A ani to, prečo nefunguje tento zápis.

 

Tak ještě lepší bude použít StrToTime. Tam když použiješ pouze čas, tak se použije aktuální datum. To bude nejjednodužší...

datetime zaciatok_obdobia = StrToTime "05:00";

datetime koniec_obdobia = StrToTime "06:59";

| Broker: IC Markets (live) | FX od 2012 |
Vykuk
Veteran member
avatar
Příspěvky: 1271
Více informací o uživateli >>
Re: Re: Přesně tak 21.12.2016 08:29
Odpověď na: walto

Samozrejme, obaja (PeterR. aj Vykuk) máte pravdu. Zle som sa vyjadril, moja chyba. Nie je to skript, ako uvádzam, pretože, ako píšete, ten sa vykoná len raz. Je to kód z EA.
Tým rozkladom som chcel docieliť výpis dátumu a času v tvare: deň.mesiac. hodina:minúta (napr.: 3.4. 20:33)
Zatiaľ to neviem spraviť inak len takýmto spôsobom. Možno na to existuje jednoduchší zápis, ale zatiaľ ho nepoznám :) Ešte sa len učím. Ale rád sa nechám poučiť a budem vďačný za každú radu.
Všetky tie zápisy sú len pomocné a snažil som sa prísť na to, ako dostať počet sviečok za určité, mnou zadané obdobie.
Áno, Bars dáva počet sviečok na grafe, ale mala by to byť aj funkcia, aspoň podľa referenčnej príručky:
Bars

int Bars(
string symbol_name, // symbol name
ENUM_TIMEFRAMES timeframe, // period
datetime start_time, // start date and time
datetime stop_time // end date and time
);

A aj vracia počet sviečok za požadované obdobie, ale funguje to len v aktuálnom dni. Akonáhle spustím EA v testeri a nastavím mu čo i len včerajší deň, tak to už nefunguje.
Možno to nie je vhodný spôsob, ale strávil som niekoľko dní hľadaním na webe, akým spôsobom zistiť počet sviečok za požadované obdobie a nič iné som nenašiel. A ani to, prečo nefunguje tento zápis.

 

A co se týče pak toho formátování data a času, tak je na to dobré printf, nebo PrintFormat. A koukni v referenční příručce na MqlDateTime.

| Broker: IC Markets (live) | FX od 2012 |
walto
Nováček v diskuzi
avatar
Příspěvky: 9
Více informací o uživateli >>
Funguje 21.12.2016 21:09
Odpověď na: Vykuk

Tak ještě lepší bude použít StrToTime. Tam když použiješ pouze čas, tak se použije aktuální datum. To bude nejjednodužší...

datetime zaciatok_obdobia = StrToTime "05:00";

datetime koniec_obdobia = StrToTime "06:59";

Áno, tými pomocnými zápismi sa mi podarilo zistiť, že dátum sa vždy načíta aktuálny, ale nikde sa mi nepodarilo nájsť, akým spôsobom to zapísať tak, aby v backteste bralo dátumy jednotlivých dní.
Málo skúseností a vedomostí, inak to nevidím smile
Každopádne tvoja rada Vykuk, mi veľmi pomohla a vyriešila môj problém, ďakujem smile
So zápisom:
datetime zaciatok_obdobia = StrToTime ("05:00");
datetime koniec_obdobia = StrToTime ("06:59");
to funguje presne tak, ako má thumbsup

Mrknem sa aj na tie zápisy formátovania času.
Ešte raz ďakujem.

Vykuk
Veteran member
avatar
Příspěvky: 1271
Více informací o uživateli >>
Re: Funguje 22.12.2016 07:22
Odpověď na: walto

Áno, tými pomocnými zápismi sa mi podarilo zistiť, že dátum sa vždy načíta aktuálny, ale nikde sa mi nepodarilo nájsť, akým spôsobom to zapísať tak, aby v backteste bralo dátumy jednotlivých dní.
Málo skúseností a vedomostí, inak to nevidím smile
Každopádne tvoja rada Vykuk, mi veľmi pomohla a vyriešila môj problém, ďakujem smile
So zápisom:
datetime zaciatok_obdobia = StrToTime ("05:00");
datetime koniec_obdobia = StrToTime ("06:59");
to funguje presne tak, ako má thumbsup

Mrknem sa aj na tie zápisy formátovania času.
Ešte raz ďakujem.

Rádo se stalo. Na ty věci určitě mrkni. Je dobré mít o tom povědomí i když ti to většinou bude k ničemu. Například já když vypisuji datetime abych zjistil co je v něm, tak používám třeba jen obyčejný print( "Datum: " + promenna_ve_ktere_je_datetime ); Udělá to sice při kompilaci warning kvůli konverzi na string, ale to mi při ladění nevadí a ve výpisu je vše co potřebuješ.

| Broker: IC Markets (live) | FX od 2012 |

Předchozí témata

Následující témata

Forex - doporučené články:

Co je FOREX?
Základní informace o finančním trhu FOREX. Forex je obchodování s cizími měnami (forex trading) a je zároveň největším a také nejlikvidnějším finančním trhem na světě.
Forex pro začátečníky
Forex je celosvětová burzovní síť, v jejímž rámci se obchoduje se všemi světovými měnami, včetně české koruny. Na forexu obchodují banky, fondy, pojišťovny, brokeři a podobné instituce, ale také jednotlivci, je otevřený všem.
1. část - Co to vlastně forex je?
FOREX = International Interbank FOReign EXchange. Mezinárodní devizový trh - jednoduše obchodování s cizími měnami - obchodování se směnnými kurzy.
VIP zóna - Forex Asistent
Nabízíme vám jedinečnou příležitost stát se součástí týmu elitních obchodníků FXstreet.cz. Ve spolupráci s předními úspěšnými obchodníky jsme pro vás připravili unikátní VIP skupinu (speciální uzavřená sekce na webu), až doposud využívanou pouze několika profesionálními tradery, a k tomu i exkluzivní VIP indikátory, doposud úspěšně používané pouze k soukromým účelům. Nyní se vám otevírá možnost stát se součástí této VIP skupiny, díky které získáte jedinečné know-how pro obchodování na forexu, výjimečné VIP indikátory, a tím také náskok před drtivou většinou ostatních účastníků trhu.
Forex brokeři - jak správně vybrat
V podstatě každého, kdo by chtěl obchodovat forex, čeká jednou rozhodování o tom, s jakým brokerem (přeloženo jako makléř/broker nebo zprostředkovatel) by chtěl mít co do činění a svěřil mu své finance určené k obchodování. Velmi rád bych vám přiblížil problematiku výběru brokera, rozdíl mezi jednotlivými typy brokerů a v neposlední řadě uvedu několik příkladů nejznámějších z nich.
Forex robot (AOS): Automatický obchodní systém
Snem některých obchodníků je obchodovat bez nutnosti jakéhokoliv zásahu do obchodu. Je to pouhá fikce nebo reálná záležitost? Kolik z nás věří, že "roboti" mohou profitabilně obchodovat? Na jakých principech fungují?
Forex volatilita
Forex volatilita, co je volatilita? Velmi užitečným nástrojem je ukazatel volatility na forexu. Grafy v této sekci ukazují volatilitu vybraného měnových párů v průběhu aktuální obchodní seance.
Forex zůstává největším trhem na světě
V dnešním článku se podíváme na nejnovější statistiky globálního obchodování na forexu. Banka pro mezinárodní vyrovnání plateb (BIS) totiž před pár týdny zveřejnila svůj pravidelný tříletý přehled, ve kterém detailně analyzuje vývoj na měnovém trhu. BIS je označována jako "centrální banka centrálních bank". Je nejstarší mezinárodní finanční organizací a hraje klíčovou roli při spolupráci centrálních bank a dalších institucí z finančního sektoru. Dnešní vzdělávací článek sice nebude zcela zaměřen na praktické informace z pohledu běžného tradera, ale i přesto přinese zajímavé a důležité poznatky.

Nejnovější články:


Naposledy čtené:

reklama
Fintokei ProTrader