Pátek 19. duben 2024 05:56
reklama
Swissquote Bank
reklama
Fintokei ProTrader
reklama
Dukascopy new
reklama
Purple Ebook: Svíčkové a cenové formace

Parabolic SAR pouziti v AOS

Zdravim,

chtel bych Vas pozadat o radu:

Proc mi funkce iSAR vraci na aktulni svicce nespravnou hodnotu?

 

V 16:30 by mela byt na hodnote PSAR 0 (oznacene modre). ... Nebo ne...?

 

Time_frame = M15

vstup_podla_PSAR_krok = 1

vstup_podla_PSAR_maximum = 1

 

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 Parabolic SAR pouziti v AOS (21 odpovědí)
RE: Parabolic SAR pouziti v AOS 06.12.2017 19:43

Dobrý den,

funkci NormalizeDouble v tomto případě není třeba používat. Indikátor Vám vrátí správnou hodnotu se správným počtem číslic za desetinnou čárkou.

Jinak prolém bude asi v podmínce if(iVolume.......

Nemůžete v AOS cílit na konkrétní, jediný tick. Vystavujete se riziku, že AOS právě tento tick "přeskočí". Pokud chcete zjistit aktuální hodnotu indikátoru, nedávejte to do takto kontroverzní podmínky.

Tomáš Rozehnal a Patrik Polák - tým FXstreet.cz
adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: RE: Parabolic SAR pouziti v AOS 07.12.2017 09:51
Odpověď na: Vývojářský tým FXstreet.cz

Dobrý den,

funkci NormalizeDouble v tomto případě není třeba používat. Indikátor Vám vrátí správnou hodnotu se správným počtem číslic za desetinnou čárkou.

Jinak prolém bude asi v podmínce if(iVolume.......

Nemůžete v AOS cílit na konkrétní, jediný tick. Vystavujete se riziku, že AOS právě tento tick "přeskočí". Pokud chcete zjistit aktuální hodnotu indikátoru, nedávejte to do takto kontroverzní podmínky.

Dekuji za radu...

Podminku if(iVolume... tam mam kvuli tomu, aby kod v teto podmince probihal jen kdyz se zacne vykreslovat nova svicka na danem time frame.

Nebo mi muzete poradit jinou podminku, aby mi nejaka cast kodu neprobihala pri kazdem ticku?

rmnv3
Veteran member
avatar
Příspěvky: 1662
Více informací o uživateli >>
Re: Re: RE: Parabolic SAR pouziti v AOS 07.12.2017 10:26
Odpověď na: adrian

Dekuji za radu...

Podminku if(iVolume... tam mam kvuli tomu, aby kod v teto podmince probihal jen kdyz se zacne vykreslovat nova svicka na danem time frame.

Nebo mi muzete poradit jinou podminku, aby mi nejaka cast kodu neprobihala pri kazdem ticku?

do promenne si uloz hodnotu iBars (pocet baru) a hlidej kdy se to zmeni, pak jen v tom pripade proved kod

Ať už si myslíte, že něco dokážete, nebo si myslíte, že to nedokážete, v obou případech máte pravdu.
rmnv3
Veteran member
avatar
Příspěvky: 1662
Více informací o uživateli >>
Re: Re: Re: RE: Parabolic SAR pouziti v AOS 07.12.2017 10:28
Odpověď na: rmnv3

do promenne si uloz hodnotu iBars (pocet baru) a hlidej kdy se to zmeni, pak jen v tom pripade proved kod

Bars, ne iBars

Ať už si myslíte, že něco dokážete, nebo si myslíte, že to nedokážete, v obou případech máte pravdu.
adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 07.12.2017 14:40
Odpověď na: rmnv3

Bars, ne iBars

 diiiik ... za radu, ALE nepomohlo to

hodnota PSAR 0 je opet spatne...

Martyss
Nováček v diskuzi
avatar
Příspěvky: 33
Více informací o uživateli >>
Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 07.12.2017 16:33
Odpověď na: adrian

 diiiik ... za radu, ALE nepomohlo to

hodnota PSAR 0 je opet spatne...

Zkus do funkce iSAR vlozit hodnoty natvrdo NormalizeDouble(iSAR(NULL,0,1,1,0),5);NormalizeDouble(iSAR(NULL,0,1,1,1),5); a pustit to na timeframe M15.

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 08.12.2017 09:19
Odpověď na: Martyss

Zkus do funkce iSAR vlozit hodnoty natvrdo NormalizeDouble(iSAR(NULL,0,1,1,0),5);NormalizeDouble(iSAR(NULL,0,1,1,1),5); a pustit to na timeframe M15.

nepomohlo

udelal jsem pokus... funkce iSAR mi vrati spravny udaj na aktualni svicce cca 3min od zacatku jejiho vykreslovani

nerozumim proc se to u mne deje...???? nebo to je normalni, to je vlastnost funkce iSAR ???

danospanos
Silver member
avatar
Příspěvky: 106
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 08.12.2017 14:38
Odpověď na: adrian

nepomohlo

udelal jsem pokus... funkce iSAR mi vrati spravny udaj na aktualni svicce cca 3min od zacatku jejiho vykreslovani

nerozumim proc se to u mne deje...???? nebo to je normalni, to je vlastnost funkce iSAR ???

Čau, je to zvláštní undecided Dělá ti to jenom při zpětném testování, nebo i live?

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 08.12.2017 14:40
Odpověď na: danospanos

Čau, je to zvláštní undecided Dělá ti to jenom při zpětném testování, nebo i live?

cau, v testu ... jeste to nemam nasazeno

danospanos
Silver member
avatar
Příspěvky: 106
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 08.12.2017 14:57
Odpověď na: adrian

cau, v testu ... jeste to nemam nasazeno

 Zkouším tady replikovat něco podobnýho, ale funguje mi to :o) Asi sem budeš muset postnout více toho tvého kódu, jinak se obávám že ti nepomůžeme frown

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 08.12.2017 15:32
Odpověď na: danospanos

 Zkouším tady replikovat něco podobnýho, ale funguje mi to :o) Asi sem budeš muset postnout více toho tvého kódu, jinak se obávám že ti nepomůžeme frown

muzes mi poslat email? v pondeli bych ti poslal celej kod

nevim jak to nahrat sem ... poslal bych celej kod + popis co by to melo delat

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 08.12.2017 15:33
Odpověď na: adrian

muzes mi poslat email? v pondeli bych ti poslal celej kod

nevim jak to nahrat sem ... poslal bych celej kod + popis co by to melo delat

pokud ho sem nechces zverejnovat, tak mi odpovez na muj harnos@metrans.cz

danospanos
Silver member
avatar
Příspěvky: 106
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 08.12.2017 22:39
Odpověď na: adrian

muzes mi poslat email? v pondeli bych ti poslal celej kod

nevim jak to nahrat sem ... poslal bych celej kod + popis co by to melo delat

Zkus to nahrát sem, popřípadě dát nějaký odkaz. Takhle by se z toho nikdy nikdo nemohl v budoucnu poučit, kdybysme to řešili soukromě přes maily. :)

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 11.12.2017 09:55
Odpověď na: danospanos

Zkus to nahrát sem, popřípadě dát nějaký odkaz. Takhle by se z toho nikdy nikdo nemohl v budoucnu poučit, kdybysme to řešili soukromě přes maily. :)

//+------------------------------------------------------------------+
//| Pokus_Navrat_ceny_v1.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

#property copyright "tapir"
#property link ""
#property version "1.00"
#property strict

//+------------------------------------------------------------------+
//| Externé vstupné parametre strategie |
//+------------------------------------------------------------------+


extern int magic_number = 124; // magic_number: identifikacne cislo strategie

extern int vstup_od_hod = 16;
extern int vstup_od_min = 0;
extern int vstup_do_hod = 20;
extern int vstup_do_min = 0;

extern double velikost_pozice = 0.1;
extern int expirace_hod = 0; // ked dam nulu, tak sa budu brat do uvahy hodnoty z vstup_do_hod a vstup_do_min

extern int trailing_stop_bodov = 0; // trailing_stop_bodov: posuvanie SL ak sa trh vyda nasim smerom
extern int break_even_bodov = 0; // break_even_bodov: posunutie SL na VSTUP ak cena dosiahne nap. 10 pips zisku
extern int break_even_procenta = 0; // break_even_procenta: posunutie SL na VSTUP ak cena dosiahne napr. 50% z TP alebo co ja viem...

extern bool vstup_podla_BB = true;
extern int vstup_podla_BB_perioda = 200;
extern int vstup_podla_BB_odchylka = 1;
extern int vstup_podla_BB_posun = 1;
extern int vstup_podla_BB_MINvzdalenost_od_MAIN_bodov = 100; // vstup_podla_BB_MINvzdalenost_od_MAIN_bodov : povolit vstup ak bude cena napr. MIN 100 bodov od strednej krivky
extern int vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov = 500; // vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov : povolit vstup ak bude cena napr. MAX 500 bodov od strednej krivky

extern bool vstup_podla_PSAR = true;
extern double vstup_podla_PSAR_krok = 1;
extern double vstup_podla_PSAR_maximum = 1;

extern int vstup_rozestup_VSTUPov_bodov = 20; // vstup_rozestup_VSTUPov_bodov: za den mozem urobit viac vstupov a toto je vzdialenost medzi nimi

extern double koeficient_navysovani_pozic = 1.2; // koeficient_navysovani_pozic: vzdy dalsi obchod bude mat OrderSend_Volume = Volume predchadzajuceho obchodu * koeficient_navysovani_pozic

extern int max_pocet_otvorenych_obchodov_v_danom_dni = 0; // max_pocet_otvorenych_obchodov_v_danom_dni: napr. = 3, tak stvrty obchod v danom dni mi uz neotvori

extern int uzavrit_obchod_hod = 0; // uzavrit_obchod_hod: napr. o 17:00 nam zatvori otvorene obchody, uz neocakavame velky pohyb, tak nas to uz nezaujima
extern int uzavrit_obchod_min = 0; // uzavrit_obchod_min: !!! BACHA, pokial chcem uzavriet na konci dna, tak musim dat 23:55, ked som mal 23:59 tak mi to nezatvorilo bo premenna cas_kdy_se_uzavre_obchod sa mi vzdy na zaciatku kazdeho dna prepise na aktualny datum + cas kedy sa ma obchod zavret
extern bool uzavrit_obchod_na_konci_dne = false; // uzavrit_obchod_na_konci_dne: pokial chcem uzavriet na konci dna, tak musim dat 23:55 !!! ALE BACHA !!! v piatok sa konci uz 22:00
extern bool uzavrit_obchod_na_konci_nasledujiciho_dne = false; // uzavrit_obchod_na_konci_nasledujiciho_dne: pokial chcem uzavriet na konci nasledujuceho dna, tak musim dat 23:55 !!! ALE BACHA !!! v piatok sa konci uz 22:00

extern bool vystup_podla_EMA = true; // vystup_podla_EMA: ak sa cena dotkne bo prekrizi EMA, tak obchod zatvaram, napr. sa to bude dat pouzit ak by som obchodoval bez SL
extern int vystup_podla_EMA_max_zisk_v_bodoch = 0; // vystup_podla_EMA_max_zisk_v_bodoch: napr. pokial bol zisk len do 100 bodov, tak pri dotyku EMA vystupujem, zrejma nedojde k pohybu, ktory ocakavam
extern int vystup_podla_EMA_perioda = 200; // vystup_podla_EMA_perioda:
extern int vystup_podla_EMA_sviecky = PRICE_CLOSE; // vystup_podla_EMA_sviecky: PRICE_CLOSE: Close price // PRICE_TYPICAL: Typical price, (high + low + close)/3

// obchodujem iba vybrane dny, napr. v pondeli ze sa zacinaju preberat z vikendu (slabe pohyby, mala volatilita) a ctvrtek, patek byvaju silne fundamenty (silne pohyby, velka volatilita)
extern bool obchodovat_Pondeli = true;
extern bool obchodovat_Uteri = true;
extern bool obchodovat_Stredu = true;
extern bool obchodovat_Ctvrtek = true;
extern bool obchodovat_Patek = true;

extern bool NEobchodovat_prazdniny = false; // NEobchodovat_prazdniny: ci sa bude obchodovat cez prazdniny
bool obchodovanie_cez_prazdniny_zrusene = false;
datetime NEobchodovat_prazdniny_OD = StrToTime("2000.01.01 00:00:00");
datetime NEobchodovat_prazdniny_DO = StrToTime("2000.01.01 00:00:00");

int i, err, p_count;

int Time_frame = Period();

int Bars_pocet = 0;

int Den_v_roku = 0;
int Den_v_tyzdni = 0;

// na kontrolu ci uz bol v dany den zadany prikaz, ak ano, tak dalsi uz v danom dni nezadavam
int Den_zadania_prikazu_BUY = 0;
int Den_zadania_prikazu_SELL = 0;

datetime pasmo_VSTUP_OD = StrToTime("2000.01.01 00:00:00"); // tu si poskladama udaj z aktualneho datumu + vstup_od_hod + vstup_od_min
datetime pasmo_VSTUP_DO = StrToTime("2000.01.01 00:00:00"); // tu si poskladama udaj z aktualneho datumu + vstup_do_hod + vstup_do_min

double vstup_podla_BB_MAIN = 0;
double vstup_podla_BB_UPPER = 0;
double vstup_podla_BB_LOWER = 0;

double vstup_podla_PSAR_0 = 0;
double vstup_podla_PSAR_1 = 0;

double OrderSend_StopLoss = 0;
double OrderSend_TakeProfit = 0;
double OrderSend_Price = 0;
datetime OrderSend_Expirace = 0;
double OrderSend_Volume = 0;

int OP_ticket_BUY = 0;
int OP_ticket_SELL = 0;

int barva_prikazu = Yellow;

bool ukonci_obchod_BUY = false;
bool ukonci_obchod_SELL = false;

double vystup_podla_EMA_max_zisk_BUY = 0; // tu sa zapisuje max. dosiahnuta cena pro obchod BUY z ceny Ask
double vystup_podla_EMA_max_zisk_SELL = 0; // tu sa zapisuje max. dosiahnuta cena pro obchod SELL z ceny Bind
int vystup_podla_EMA_OP_ticket_BUY = 0;
int vystup_podla_EMA_OP_ticket_SELL = 0;

datetime cas_kdy_se_uzavre_obchod = StrToTime("2000.01.01 00:00:00"); // tu si poskladama udaj z aktualneho datumu + uzavrit_obchod_hod + uzavrit_obchod_min

bool moze_zadat_prikaz_BUY = true; // kontrola ci je zadany prikaz BUY
bool moze_zadat_prikaz_SELL = true; // kontrola ci je zadany prikaz SELL

int PocitadloArray = 0;

struct TicketClass {
int ticket;
double price;
string print;
string BE;
};

TicketClass TicketArray[1000000];

double p_OrderTicket_BE = 0;

 

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// !!! SendMail() function does not work in the Strategy Tester. !!!
SendMail("AOS - Experts_Pokus_Navrat_ceny_v1 - INIT - "+IntegerToString(magic_number), "spustenie strategie Navrat ceny - magic_number = "+IntegerToString(magic_number)); // posle email, ktory mame v MT4 nastaveny Nastroje/Moznosti/E-Mail
Alert("INIT - Alert - "+IntegerToString(magic_number));
Comment("INIT - Comment - "+IntegerToString(magic_number));

// ** na zaciatku si vypisem vsetky zadane parametre strategie ... toto tu je koli realnemu obchodovaniu
PrintParametre("INIT");

return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
SendMail("AOS - Experts_Pokus_Navrat_ceny_v1 - DEinit - "+IntegerToString(magic_number), "zastavenie strategie Navrat ceny - magic_number = "+IntegerToString(magic_number)); // posle email, ktory mame v MT4 nastaveny Nastroje/Moznosti/E-Mail
Alert("DEINIT - Alert - "+IntegerToString(magic_number));
Comment("DEINIT - Comment - "+IntegerToString(magic_number));

// ** na konci si vypisem vsetky zadane parametre strategie ... toto tu je koli testovaniu
PrintParametre("DEINIT");
}



//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick(void)
{
// http://www.forex-pro-zacatecniky.cz/news/zaklady-mql4-aneb-mimimum-pro-zahajeni-programovani-dil-2-/

barva_prikazu = Yellow;

ukonci_obchod_BUY = false;
ukonci_obchod_SELL = false;

moze_zadat_prikaz_BUY = true; // kontrola ci je zadany prikaz BUY, ak ano, tak dalsi uz neotvaram
moze_zadat_prikaz_SELL = true; // kontrola ci je zadany prikaz SELL, ak ano, tak dalsi uz neotvaram

if (Den_v_roku != DayOfYear())
{
zapisLOG("", "Account free margin", DoubleToString(AccountFreeMargin()));// kolik mam volnych prostredku

Den_v_tyzdni = DayOfWeek(); // zjistí den v týdnu (neděle=0 … pátek=5)
Den_v_roku = DayOfYear(); // (1 means 1 January,..,365(6) does 31 December)

Den_zadania_prikazu_BUY = 0; // na kontrolu ci uz bol v dany den zadany prikaz, ak ano, tak dalsi uz v danom dni nezadavam
Den_zadania_prikazu_SELL = 0;

OP_ticket_BUY = 0; // ak uz je druhy den, tak mozem znovu zadat BUY / SELL, preto si vynulujem hodnotu ticketu
OP_ticket_SELL = 0;

if ((vstup_od_hod > 0 || vstup_od_min > 0) && (vstup_do_hod > 0 || vstup_do_min > 0))
{
pasmo_VSTUP_OD = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_od_hod)+":"+IntegerToString(vstup_od_min)+":00");
pasmo_VSTUP_DO = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_do_hod)+":"+IntegerToString(vstup_do_min)+":00"); // zapisLOG("", "pasmo_VSTUP_OD", TimeToStr(pasmo_VSTUP_DO)); zapisLOG("", "pasmo_VSTUP_OD", TimeToStr(pasmo_VSTUP_OD));
}

if (uzavrit_obchod_hod > 0)
{
cas_kdy_se_uzavre_obchod = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(uzavrit_obchod_hod)+":"+IntegerToString(uzavrit_obchod_min)+":00");
}
else
{
if (uzavrit_obchod_na_konci_dne == true)
{
// v patek zaviera 22:00 a ostatne dny 24:00
if (Den_v_tyzdni == 5) { cas_kdy_se_uzavre_obchod = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 21:30");}
else { cas_kdy_se_uzavre_obchod = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 23:40");}

// v patek zaviera 21:00 a ostatne dny 22:00
if (Symbol() == "GOLDs.") { cas_kdy_se_uzavre_obchod = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 20:30");}
}
}

if (NEobchodovat_prazdniny == true) // ci sa bude obchodovat cez prazdniny
{
NEobchodovat_prazdniny_OD = StrToTime(IntegerToString(TimeYear(TimeCurrent()))+".07.01 00:00:00");
NEobchodovat_prazdniny_DO = StrToTime(IntegerToString(TimeYear(TimeCurrent()))+".09.01 00:00:00");
}

vystup_podla_EMA_max_zisk_BUY = 0; // mal by som pracovat iba s poslednym otvorenym obchodom
vystup_podla_EMA_max_zisk_SELL = 0;
vystup_podla_EMA_OP_ticket_BUY = 0; // aby mi to neosefovalo obchod, ktory presiel do druheho dna
vystup_podla_EMA_OP_ticket_SELL = 0;

obchodovanie_cez_prazdniny_zrusene = false;

if (PocitadloArray > 0)
{
// tu si zistim a zapisem k jednotlivym obchodom profit (zisk / strata)
for(i = 1; i <= PocitadloArray; i++)
{
if (TicketArray[i].print != "X")
{
if (OrderSelect(i, SELECT_BY_TICKET, MODE_HISTORY))
{
TicketArray[i].price = NormalizeDouble(OrderProfit(), 2);
TicketArray[i].print = "X";

if (TicketArray[i].BE == "X") {zapisLOG(DoubleToString(TicketArray[i].ticket, 0), "ZISK/STRAT - BE", DoubleToString(OrderProfit(), 2));}
else {zapisLOG(DoubleToString(TicketArray[i].ticket, 0), "ZISK/STRAT", DoubleToString(OrderProfit(), 2));}
}
}
}
}
}

// ** //
/*
if (Hour() == 16 && Minute() == 17 )
{
vstup_podla_BB_MAIN = iSAR(NULL, 0, 1, 1, 0);

createObject("BUY-HIGH", OBJ_TREND, clrBlack, TimeCurrent(), vstup_podla_BB_MAIN, TimeCurrent()+36000, vstup_podla_BB_MAIN, "BUY HIGH");
createObject("Bid_BB", OBJ_TEXT, clrBlack, TimeCurrent()+36000, vstup_podla_BB_MAIN, NULL, NULL, TimeToStr(TimeCurrent(), TIME_MINUTES));
}
*/

// ** tu si osefefujem otvorene obchody: trailing stop, break-even alebo ich zatvorit
for(i = 0; i <= OrdersTotal(); i++)
{
// U long příkazu jsme vstupovali za Ask a tedy vystupujeme za Bid cenu !!! u short zase opacne vstup za Bid, vystup za Ask

// OrderSelect se používá k výberu zadaného príkazu dle císla štítku nebo dle indexu.
// SELECT_BY_POS: vyber podla poradia pokynov.
// MODE_TRADES: výber z aktuálne zadaných i cakajucich príkazov. Tato hodnota je nastavena jako implicitní.

// OrderMagicNumber vrací magické císlo vybraného príkazu, zadané pomocí funkce OrderSend.

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic_number)
{

// ** na zaklade tychto podmienok sa uzavre obchod
filter_vystup();


if (StrToTime("2000.01.01 00:00:00") != cas_kdy_se_uzavre_obchod && TimeCurrent() > cas_kdy_se_uzavre_obchod) // ak je zadana hodina uzavreti prikazu, tak tu to vykonam
{
barva_prikazu = Green;
if (OrderType() == OP_BUY) ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY)-zadana hodina uzavreni prikazu, Bid = ", DoubleToString(Bid, Digits));
if (OrderType() == OP_SELL) ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL)-zadana hodina uzavreni prikazu, Ask = ", DoubleToString(Ask, Digits));
}

// ** na zaklade predchdzajucich podmienok sa uzavru obchody

// http://www.forex-pro-zacatecniky.cz/news/zadavame-pozici-short-dil-6-/
if(ukonci_obchod_BUY == true)
{
// OrderClose ( ticket, lots, price, slippage, color) co znamena slippage = 2 ???, mali to tak zadane natvrdo na webu
if(OrderClose(OrderTicket(), OrderLots(), Bid, 2, barva_prikazu) == false) // U long příkazu jsme vstupovali za Ask a tedy vystupujeme za Bid cenu
{Print("-----------------------------ERROR-OrderClose-OP_BUY-11---------------------------",""); Print("OP_BUY OrderClose failed error code is: ",GetLastError()); Print("-----------------------------ERROR-OrderClose-OP_BUY-12---------------------------","");}
}

if(ukonci_obchod_SELL == true)
{
// OrderClose ( ticket, lots, price, slippage, color) co znamena slippage = 2 ???, mali to tak zadane natvrdo na webu
if(OrderClose(OrderTicket(), OrderLots(), Ask, 2, barva_prikazu) == false) // U short příkazu jsme vstupovali za Bid a tedy vystupujeme za Ask cenu
{Print("-----------------------------ERROR-OrderClose-OP_SELL-11---------------------------",""); Print("OP_SELL OrderClose failed error code is: ",GetLastError()); Print("-----------------------------ERROR-OrderClose-OP_SELL-12---------------------------","");}
}

// !!! tu to treba asi premysliet ako zafunguje nasledovne riesenie TrailingStopu ak som obchod predoslim prikazom OrderClose() uzavrel

p_OrderTicket_BE = 0;

// http://www.forex-pro-zacatecniky.cz/news/zadani-podminek-pro-vstup-a-posunuti-na-break-even-dil-7-/
if (break_even_bodov > 0) // posunutie SL na VSTUP ak cena dosiahne nap. 10 pips zisku
{
// OrderStopLoss() < OrderOpenPrice(), aby EA neposuvala neustale SL na VSTUP, cize pokial bude SL = VSTUPU, tak uz neposuvaj SL
// OrderStopLoss() != OrderOpenPrice() nie je vhodne pouzit lebo ak by sme mali zaply TrailingStop, tak by nam EA neustale davala SL na VSTUP

if (OrderType() == OP_BUY && Bid >= (OrderOpenPrice() + (break_even_bodov * Point)) && OrderStopLoss() < OrderOpenPrice()) // pro pokyn typu BYU
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Blue) == false) {Print("-----------------------------ERROR-OrderModify-OP_BUY-11---------------------------",""); Print("OP_BUY OrderModify - break_even_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_BUY-12---------------------------","");}
else { p_OrderTicket_BE = OrderTicket(); zapisLOG(IntegerToString(OrderTicket()), "OP_BUY OrderModify - break_even_bodov > 0, Bid = ", DoubleToString(Bid, Digits));}
}

if (OrderType() == OP_SELL && Ask <= (OrderOpenPrice() - (break_even_bodov * Point)) && OrderStopLoss() > OrderOpenPrice()) // pro pokyn typu SELL
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Red) == false) {Print("-----------------------------ERROR-OrderModify-OP_SELL-11---------------------------",""); Print("OP_SELL OrderModify - break_even_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_SELL-12---------------------------","");}
else { p_OrderTicket_BE = OrderTicket(); zapisLOG(IntegerToString(OrderTicket()), "OP_SELL OrderModify - break_even_bodov > 0, Ask = ", DoubleToString(Ask, Digits));}
}
}

if (break_even_procenta > 0) // posunutie SL na VSTUP ak cena dosiahne nap. 50% TP alebo co ja viem...
{
if (OrderType() == OP_BUY)
{
if (Bid > ((((OrderTakeProfit() - OrderOpenPrice()) / 100) * break_even_procenta) + OrderOpenPrice()) && OrderStopLoss() < OrderOpenPrice()) // tu zistujem 50% zisku: ak je cena vacsia ako napr. 50% z TP, tak posunem na BE
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Blue) == false) {Print("-----------------------------ERROR-OrderModify-OP_BUY-11---------------------------",""); Print("OP_BUY OrderModify - break_even_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_BUY-12---------------------------","");}
else { p_OrderTicket_BE = OrderTicket(); zapisLOG(IntegerToString(OrderTicket()), "OP_BUY OrderModify - break_even_procenta > 0, Bid = ", DoubleToString(Bid, Digits));}
}
}

if (OrderType() == OP_SELL)
{
if (Ask < ((((OrderTakeProfit() - OrderOpenPrice()) / 100) * break_even_procenta) + OrderOpenPrice()) && OrderStopLoss() > OrderOpenPrice()) // tu zistujem 50% zisku: ak je cena vacsia ako napr. 50% z TP, tak posunem na BE
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Red) == false) {Print("-----------------------------ERROR-OrderModify-OP_SELL-11---------------------------",""); Print("OP_SELL OrderModify - break_even_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_SELL-12---------------------------","");}
else { p_OrderTicket_BE = OrderTicket(); zapisLOG(IntegerToString(OrderTicket()), "OP_SELL OrderModify - break_even_procenta > 0, Ask = ", DoubleToString(Ask, Digits));}
}
}
}

if (PocitadloArray > 0 && p_OrderTicket_BE > 0)
{
// tu si zistim a zapisem k jednotlivym obchodom profit (zisk / strata)
for(i = 1; i <= PocitadloArray; i++)
{
if (TicketArray[i].ticket == p_OrderTicket_BE) TicketArray[i].BE = "X";
}
}

// http://www.forex-pro-zacatecniky.cz/news/programujeme-trailing-stop-v-mql4-dil-8-/
if (trailing_stop_bodov > 0) // posuvanie SL ak sa trh vyda nasim smerom
{
if(OrderType() == OP_BUY && Bid - OrderStopLoss() > trailing_stop_bodov * Point && Bid - OrderOpenPrice() > trailing_stop_bodov * Point)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - trailing_stop_bodov * Point, Digits), OrderTakeProfit(), 0, Blue) == false) {Print("-----------------------------ERROR-OrderModify-OP_BUY-11---------------------------",""); Print("OP_BUY OrderModify - trailing_stop_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_BUY-12---------------------------","");}
else zapisLOG(IntegerToString(OrderTicket()), "OP_BUY OrderModify - trailing_stop_bodov > 0, Bid = ", DoubleToString(Bid, Digits));
}

if(OrderType() == OP_SELL && OrderStopLoss() - Ask > trailing_stop_bodov * Point && OrderOpenPrice() - Ask > trailing_stop_bodov * Point)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + trailing_stop_bodov * Point, Digits), OrderTakeProfit(), 0, Red) == false) {Print("-----------------------------ERROR-OrderModify-OP_SELL-11---------------------------",""); Print("OP_SELL OrderModify - trailing_stop_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_SELL-12---------------------------","");}
else zapisLOG(IntegerToString(OrderTicket()), "OP_SELL OrderModify - trailing_stop_bodov > 0, Ask = ", DoubleToString(Ask, Digits));
}
}

}
}


// ** osefovanie : ZADANI POKYNU

//if (iVolume(Symbol(), Time_frame, 0) == 1 && (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true))
// 7.12.17 som zacal pouzivat Bars() ... citace: Nemůžete v AOS cílit na konkrétní, jediný tick. Vystavujete se riziku, že AOS právě tento tick "přeskočí". Pokud chcete zjistit aktuální hodnotu indikátoru, nedávejte to do takto kontroverzní podmínky
// do promenne si uloz hodnotu Bars (pocet baru) a hlidej kdy se to zmeni, pak jen v tom pripade proved kod

if ((Bars_pocet != Bars(NULL, Time_frame)) && (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true))// ak budem napr. na Time_frame = M15, tak nasledujuci kod mi prebehne kazdych 15 min !!! bacha nie pri kazdom ticku
{
Bars_pocet = Bars(NULL, Time_frame);

// ** FILTER VSTUPu
filter_vstup();

if (moze_zadat_prikaz_BUY == true) zadani_prikazu("OP_BUY");

if (moze_zadat_prikaz_SELL == true) zadani_prikazu("OP_SELL");
}
}

 

//+------------------------------------------------------------------+
//| Expert start function |
//+------------------------------------------------------------------+
int start()
{

return(0);
}

 

//+------------------------------------------------------------------+
//| FILTRE VSTUPU |
//+------------------------------------------------------------------+
double filter_vstup()
{
// VSTUPujeme za Bid lebo tato hodnota nam vykresluje sviecky, High Low, indikatory
// kedze vstupujeme za Bid, tak aj bude vystupovat

//ak v predoslych podmienkach zistim, ze je cena mimo range, tak dalsie testovanie na VSTUP je zbytocne
if (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true)
{
// ** // kontrola ci mozny VSTUP na zaklade zadanych hodin + minut
if (TimeCurrent() < pasmo_VSTUP_OD || TimeCurrent() > pasmo_VSTUP_DO)
{
moze_zadat_prikaz_BUY = false;
moze_zadat_prikaz_SELL = false;
}


// ** //
if (NEobchodovat_prazdniny == true) // ci sa bude obchodovat cez prazdniny
{
if (TimeCurrent() > NEobchodovat_prazdniny_OD && TimeCurrent() < NEobchodovat_prazdniny_DO)
{
moze_zadat_prikaz_BUY = false;
moze_zadat_prikaz_SELL = false;

obchodovanie_cez_prazdniny_zrusene = true;
}
}



// ** // Den = den v týdnu (neděle=0 … pátek=5) ... obchodujem iba vybrane dny, napr. v pondeli ze sa zacinaju preberat z vikendu (slabe pohyby, mala volatilita) a ctvrtek, patek byvaju silne fundamenty (silne pohyby, velka volatilita)
if ((obchodovat_Pondeli == false && Den_v_tyzdni == 1) ||
(obchodovat_Uteri == false && Den_v_tyzdni == 2) ||
(obchodovat_Stredu == false && Den_v_tyzdni == 3) ||
(obchodovat_Ctvrtek == false && Den_v_tyzdni == 4) ||
(obchodovat_Patek == false && Den_v_tyzdni == 5) ||
Den_v_tyzdni == 6 || Den_v_tyzdni == 0)
{
moze_zadat_prikaz_BUY = false;
moze_zadat_prikaz_SELL = false;
}

 

// * * //
if (max_pocet_otvorenych_obchodov_v_danom_dni > 0)
{
p_count = 0;

for(i = OrdersTotal(); i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic_number)
{
if (StrToTime((TimeToStr(OrderOpenTime(), TIME_DATE))) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))))
{
p_count = p_count + 1;
}
}
}

if (p_count >= max_pocet_otvorenych_obchodov_v_danom_dni)
{
moze_zadat_prikaz_BUY = false;
moze_zadat_prikaz_SELL = false; zapisLOG("", "jiz je : max_pocet_otvorenych_obchodov_v_danom_dni", "");
}
}

// ** // napr. vstup_rozestup_VSTUPov_bodov = 20, tak nasledujuci VSTUP od predosleho musi byt vzdialeny min 20 bodov
if (vstup_rozestup_VSTUPov_bodov > 0)
{
if (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true)
{
if (OrdersTotal() > 0)
{
// tu si nacitam posledny otvoreny obchod
if (OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic_number)
{
if (OrderOpenPrice() > Bid)
{
if (((OrderOpenPrice() - Bid) / Point) < vstup_rozestup_VSTUPov_bodov)
{
if (OrderType() == OP_BUY) {moze_zadat_prikaz_BUY = false; zapisLOG("", "BUY vdalenost od predchoziho VSTUPu je < vstup_rozestup_VSTUPov_bodov", "");}
if (OrderType() == OP_SELL) {moze_zadat_prikaz_SELL = false; zapisLOG("", "SELL vdalenost od predchoziho VSTUPu je < vstup_rozestup_VSTUPov_bodov", "");}
}
}
else
{
if (((Bid - OrderOpenPrice()) / Point) < vstup_rozestup_VSTUPov_bodov)
{
if (OrderType() == OP_BUY) {moze_zadat_prikaz_BUY = false; zapisLOG("", "BUY vdalenost od predchoziho VSTUPu je < vstup_rozestup_VSTUPov_bodov", "");}
if (OrderType() == OP_SELL) {moze_zadat_prikaz_SELL = false; zapisLOG("", "SELL vdalenost od predchoziho VSTUPu je < vstup_rozestup_VSTUPov_bodov", "");}
}
}
}
}
}
}



// ** //
if (vstup_podla_BB == true)
{
if (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true)
{
vstup_podla_BB_MAIN = iBands(NULL, Time_frame, vstup_podla_BB_perioda, vstup_podla_BB_odchylka, vstup_podla_BB_posun, PRICE_CLOSE, MODE_MAIN, 0);
vstup_podla_BB_UPPER = iBands(NULL, Time_frame, vstup_podla_BB_perioda, vstup_podla_BB_odchylka, vstup_podla_BB_posun, PRICE_CLOSE, MODE_UPPER, 0);
vstup_podla_BB_LOWER = iBands(NULL, Time_frame, vstup_podla_BB_perioda, vstup_podla_BB_odchylka, vstup_podla_BB_posun, PRICE_CLOSE, MODE_LOWER, 0);
}

// ** // Long: Bid < BB spodni pasmo (MODE_LOWER)

if (moze_zadat_prikaz_BUY == true)
{
if ((Bid < vstup_podla_BB_LOWER) == true)
{
// ak je napr. cena vo zdialenosti od strednej krivky (MAIN) vacsia ako 100 bodov a mensia ako 500 bodov, tak povolim VSTUP
if ((((vstup_podla_BB_MAIN - Bid) / Point) > vstup_podla_BB_MINvzdalenost_od_MAIN_bodov &&
((vstup_podla_BB_MAIN - Bid) / Point) < vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov) == false)
{
moze_zadat_prikaz_BUY = false; zapisLOG("", "Long: Bid < BB spodni pasmo (MODE_LOWER) a vzdalenost od stredni krivky (MODE_MAIN) je ",DoubleToString((vstup_podla_BB_MAIN - Bid) / Point));
}
}
else
{
moze_zadat_prikaz_BUY = false;
}
}

// ** // Short: Bid > BB horni pasmo (MODE_UPPER)

if (moze_zadat_prikaz_SELL == true)
{
if ((Bid > vstup_podla_BB_UPPER) == true)
{
// ak je napr. cena vo zdialenosti od strednej krivky (MAIN) vacsia ako 100 bodov a mensia ako 500 bodov, tak povolim VSTUP
if ((((Bid - vstup_podla_BB_MAIN) / Point) > vstup_podla_BB_MINvzdalenost_od_MAIN_bodov &&
((Bid - vstup_podla_BB_MAIN) / Point) < vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov) == false)
{
moze_zadat_prikaz_SELL = false; zapisLOG("", "Short: Bid > BB horni pasmo (MODE_UPPER) a vzdalenost od stredni krivky (MODE_MAIN) je ",DoubleToString((Bid - vstup_podla_BB_MAIN) / Point));
}
}
else
{
moze_zadat_prikaz_SELL = false;
}
}
}

if (vstup_podla_PSAR == true) // !!! funkce iSAR mi nespravne vracia hodnotu na aktualnej sviecke !!! asi by som to moc nepouzival
{
if (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true)
{
vstup_podla_PSAR_0 = iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 1);
vstup_podla_PSAR_1 = iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 2);

/*zapisLOG("", "vstup_podla_PSAR_1",DoubleToString(vstup_podla_PSAR_1));
zapisLOG("", "vstup_podla_PSAR_0",DoubleToString(vstup_podla_PSAR_0));*/
}


if (moze_zadat_prikaz_BUY == true)
{
// Long: Bid > PSAR 0 a PSAR 0 < PSAR 1

//zapisLOG("", "Long: Bid > PSAR 0 a PSAR 0 < PSAR 1 ... Bid = ",DoubleToString(Bid));

if ((Bid > vstup_podla_PSAR_0 && vstup_podla_PSAR_0 < vstup_podla_PSAR_1) == true)
{
createObject("Bid_BB", OBJ_TEXT, clrBlack, TimeCurrent(), Bid, NULL, NULL, "Long: "+TimeToStr(TimeCurrent(), TIME_MINUTES));
}
else
{
moze_zadat_prikaz_BUY = false; zapisLOG("", "Long: Bid > PSAR 0 a PSAR 0 < PSAR 1","false");
}
}

if (moze_zadat_prikaz_SELL == true)
{
// Short: Bid < PSAR 0 a PSAR 0 > PSAR 1

//zapisLOG("", "Short: Bid < PSAR 0 a PSAR 0 > PSAR 1 ... Bid = ",DoubleToString(Bid));

if ((Bid < vstup_podla_PSAR_0 && vstup_podla_PSAR_0 > vstup_podla_PSAR_1) == true)
{
createObject("Bid_BB", OBJ_TEXT, clrBlack, TimeCurrent(), Bid, NULL, NULL, "Short : "+TimeToStr(TimeCurrent(), TIME_MINUTES));
}
else
{
moze_zadat_prikaz_SELL = false; zapisLOG("", "Short: Bid < PSAR 0 a PSAR 0 > PSAR 1","false");
}
}
}



// ** // konec funkce : filter_vstup()
//Print("moze_zadat_prikaz_BUY = ",moze_zadat_prikaz_BUY);
//Print("moze_zadat_prikaz_SELL = ",moze_zadat_prikaz_SELL);
}

return(0);
}

 

//+------------------------------------------------------------------+
//| FILTRE VYSTUP |
//+------------------------------------------------------------------+
double filter_vystup()
{
// VSTUPujeme za Bid lebo tato hodnota nam vykresluje sviecky, High Low, indikatory
// kedze vstupujeme za Bid, tak aj bude vystupovat

if (vystup_podla_EMA == true) // ak sa cena dotkne bo prekrizi EMA, tak obchod zatvaram
{
if (vystup_podla_EMA_max_zisk_v_bodoch > 0) // napr. pokial bol zisk len do 100 bodov, tak pri dotyku EMA vystupujem, zrejma nedojde k pohybu, ktory ocakavam
{
if (vystup_podla_EMA_max_zisk_BUY >= 0 && vystup_podla_EMA_OP_ticket_BUY > 0)
{
// tu sa zapisuje max. dosiahnuta cena predchadzajucej sviecky pro obchod BUY
if (OrderType() == OP_BUY && OrderTicket() == vystup_podla_EMA_OP_ticket_BUY && vystup_podla_EMA_max_zisk_BUY < Bid) vystup_podla_EMA_max_zisk_BUY = Bid;

// mal by som tu osefovat posledny otvoreny obchod ... preto v podmienke OrderTicket() == vystup_podla_EMA_OP_ticket_BUY
if (OrderType() == OP_BUY && OrderTicket() == vystup_podla_EMA_OP_ticket_BUY && Bid < NormalizeDouble(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0), 5))
{
if ((vystup_podla_EMA_max_zisk_BUY - OrderOpenPrice()) <= (vystup_podla_EMA_max_zisk_v_bodoch * Point))
{
barva_prikazu = Magenta;
ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BYU)-vystup_podla_EMA == true : napr.zisk bol 100 bodov, pri dotyku EMA vystupujem", DoubleToString(vystup_podla_EMA_max_zisk_BUY));
}
// stalo sa to, ze ked cena presla prvy krat cez EMA, tak zisk bol vacsi ako sme mali nastavene v vystup_podla_EMA_max_zisk_v_bodoch
// a ked presla podruhy krat, tak mi obchod zavrelo ... mna zaujima iba prvotny pohyb hned po otvoreni obchodu
else vystup_podla_EMA_max_zisk_BUY = -1;
}
}

if (vystup_podla_EMA_max_zisk_SELL >= 0 && vystup_podla_EMA_OP_ticket_SELL > 0)
{
if (OrderType() == OP_SELL && OrderTicket() == vystup_podla_EMA_OP_ticket_SELL && (vystup_podla_EMA_max_zisk_SELL > Bid || vystup_podla_EMA_max_zisk_SELL == 0)) vystup_podla_EMA_max_zisk_SELL = Bid;

if (OrderType() == OP_SELL && OrderTicket() == vystup_podla_EMA_OP_ticket_SELL && Bid > NormalizeDouble(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0), 5))
{
if ((OrderOpenPrice() - vystup_podla_EMA_max_zisk_SELL) <= (vystup_podla_EMA_max_zisk_v_bodoch * Point))
{
barva_prikazu = Magenta;
ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL)-vystup_podla_EMA == true : napr.zisk bol 100 bodov, pri dotyku EMA vystupujeme", DoubleToString(vystup_podla_EMA_max_zisk_SELL));
}
else vystup_podla_EMA_max_zisk_SELL = -1; //
}
}
}

else // tu je robeny vystup na zaklade toho, ze cena protla EMA
{
barva_prikazu = DeepPink;

// kedze robime navrat, tak zavreme ked cena prejde cez EMA zo SPODU na HOR
if (OrderType() == OP_BUY && Bid > NormalizeDouble(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0), 5))
{ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY)-vystup_podla_EMA- Bid > iMA == true : cena Bid protla EMA, Bid = ", DoubleToString(Bid)+" > "+DoubleToString(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0)));}

// kedze robime navrat, tak zavreme ked cena prejde cez EMA z VRCHU na DOL
if (OrderType() == OP_SELL && Bid < NormalizeDouble(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0), 5))
{ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL)-vystup_podla_EMA- Bid < iMA == true : cena Bid protla EMA, Bid = ", DoubleToString(Bid)+" < "+DoubleToString(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0)));}
}
}


// * * // kedze mam pasmo VSTUPu od 16:00 do 20:00, tak ked tak budem zatvarat az na konci nasledujuceho dena
// 2017 na EURUSD to moc uspechu neprinieslo
if (uzavrit_obchod_na_konci_nasledujiciho_dne == true)
{
// v patek zaviera 22:00 a ostatne dny 24:00
if (Den_v_tyzdni == 5) {
if ((StrToTime(TimeToStr((OrderOpenTime() + 86400), TIME_DATE)) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE)))) &&
(TimeCurrent() >= StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 21:30")))
{
if (OrderType() == OP_BUY) {ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
if (OrderType() == OP_SELL) {ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
}
}

else {
if ((StrToTime(TimeToStr((OrderOpenTime() + 86400), TIME_DATE)) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE)))) &&
(TimeCurrent() >= StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 24:40")))
{
if (OrderType() == OP_BUY) {ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
if (OrderType() == OP_SELL) {ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
}
}

// v patek zaviera 21:00 a ostatne dny 22:00
if (Symbol() == "GOLDs.") {
//if ((OrderOpenTime() + 86400) <= StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 20:30"))
if ((StrToTime(TimeToStr((OrderOpenTime() + 86400), TIME_DATE)) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE)))) &&
(TimeCurrent() >= StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 20:30")))
{
if (OrderType() == OP_BUY) {ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
if (OrderType() == OP_SELL) {ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
}
}
}


return(0);
}

//+------------------------------------------------------------------+
//| VYPOCET HODNOT PRO ZADANI CEKAJICICH PRIKAZU |
//+------------------------------------------------------------------+
void vypocet_OrderSend_hodnot(string p_BUY_SELL, string p_free)
{
// http://www.forex-pro-zacatecniky.cz/news/zadani-pokynu-typu-stop-a-limit-dil-9-/
// na strankach este pricital k VSTUPnej cene 2 pips, aby nevstupoval hned na maxime pasma, cize HIGH + 2*Point
// k cene VSTUPu by sme mali este pricitat Spread = MarketInfo(Symbol(),MODE_SPREAD) * Point
// potom by bola cena na vstup pre BUY = HIGH + 2*Point + Spread

OrderSend_StopLoss = 0;
OrderSend_TakeProfit = 0;
OrderSend_Price = 0;
OrderSend_Volume = velikost_pozice; // !!! BACHA !!! napr. pri EURGBP musi byt velkost pozice min. 0.1 lotu
OrderSend_Expirace = expirace_hod;

//if (OrderSend_Expirace == 0) OrderSend_Expirace = ((((StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_do_hod)+":"+IntegerToString(vstup_do_min)+":00")) - StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_od_hod)+":"+IntegerToString(vstup_od_min)+":00"))) / 3600);
if (OrderSend_Expirace == 0) OrderSend_Expirace = ((pasmo_VSTUP_DO - pasmo_VSTUP_OD) / 3600);

//if (OrderSend_Expirace > 0) OrderSend_Expirace = (StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_od_hod)+":"+IntegerToString(vstup_od_min)+":00")) + (OrderSend_Expirace * 3600);
if (OrderSend_Expirace > 0) OrderSend_Expirace = pasmo_VSTUP_OD + (OrderSend_Expirace * 3600);

if (koeficient_navysovani_pozic > 0)
{
if (OrdersTotal() > 0)
{
// tu si nacitam posledny otvoreny obchod
if (OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic_number)
{
// koeficien bude pouzity len ak v danom dni bol otvoreny predosly obchod, podmienka je tu, aby mi nebralo do uvahy obchody otvorene v predoslych dnoch
if (StrToTime((TimeToStr(OrderOpenTime(), TIME_DATE))) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))))
{
OrderSend_Volume = OrderLots() * koeficient_navysovani_pozic; zapisLOG("", "OrderSend_Volume = ",DoubleToString(OrderSend_Volume));
}
}
}
}


// ked som to nemal prevedene, tak mi to hazelo chybu : OrderSend Error 4107 .... invalid price 1.39103000 for OrderSend function
// If your Forex broker uses 4 digits after the dot in quotes and you are trying to use 5 digits in your orders, then you’ll be getting error 4107 during backtesting. The best solution here is to always normalize all the price doubles using the standard MetaTrader function before passing them to OrderSend():
OrderSend_Price = NormalizeDouble(OrderSend_Price, Digits);
OrderSend_StopLoss = NormalizeDouble(OrderSend_StopLoss, Digits);
OrderSend_TakeProfit = NormalizeDouble(OrderSend_TakeProfit, Digits);

if (p_free == "zadani_prikazu")
{
if (p_BUY_SELL == "BUY")
{
zapisLOG("", "TakeProfit",DoubleToString((OrderSend_TakeProfit - OrderSend_Price)/Point));
zapisLOG("", "StopLoss",DoubleToString((OrderSend_Price - OrderSend_StopLoss)/Point));
}

if (p_BUY_SELL == "SELL")
{
zapisLOG("", "TakeProfit",DoubleToString((OrderSend_Price - OrderSend_TakeProfit)/Point));
zapisLOG("", "StopLoss",DoubleToString((OrderSend_StopLoss - OrderSend_Price)/Point));
}
}
}

//+------------------------------------------------------------------+
//| ZADANI PRIKAZU |
//+------------------------------------------------------------------+
void zadani_prikazu(string p_typ_prikazu)
{
// p_typ_prikazu: CMD : napr. OP_BUY je cakajuci prikaz, OP_BUY za Market cenu
// U long příkazu vstupujeme za Ask a tedy vystupujeme za Bid cenu !!! u short zase opacne vstup za Bid, vystup za Ask

if (p_typ_prikazu == "OP_BUY")
{
vypocet_OrderSend_hodnot("BUY", "zadani_prikazu");

OP_ticket_BUY = OrderSend(Symbol(), // SYMBOL : definuje menovy par/index cize instrument, na ktorom obchodujeme
OP_BUY, // CMD : typ prikazu: napr. OP_BUYSTOP je cakajuci prikaz, OP_BUY za Market cenu
OrderSend_Volume, // VOLUME : velkost pozice: napr. 0.01 lotu
Ask, // PRICE : cena, za ktoru budeme nakupovat ... Pokud chceme vstoupit za MARKET (OP_BUY / OP_SELL) volíme buď cenu Ask (pro buy/long) a nebo Bid (pro sell/short).
10, // SLIPPAGE : max. pozadovana odchylka pri exekuci prikazu ... ASI v BODOCH ??? treba zistit
OrderSend_StopLoss, // STOPLOSS :
OrderSend_TakeProfit, // TAKEPROFIT : Pokud nechceme stanovit žádný PT, můžeme doplnit pouze 0.
IntegerToString(magic_number)+" - OP_BUY", // COMMENT :
magic_number, // MAGIC : identifikacne cislo strategie
OrderSend_Expirace, // EXPIRATION : platnost prikazu
Blue); // ARROW_COLOR : barva prikazu

zapisLOG(IntegerToString(OP_ticket_BUY), "OP_BUY", DoubleToString(Ask));

// http://www.forex-pro-zacatecniky.cz/news/errory-pri-pouzivani-ea-dil-12-/
if (OP_ticket_BUY > 0)
{
// na kontrolu ci uz bol v dany den zadany prikaz, ak ano, tak dalsi uz v danom dni nezadavam
Den_zadania_prikazu_BUY = DayOfYear(); // (1 means 1 January,..,365(6) does 31 December)

vystup_podla_EMA_OP_ticket_BUY = OP_ticket_BUY; // aby mi to neosefovalo obchod, ktory presiel do druheho dna

PocitadloArray = PocitadloArray + 1;
TicketArray[PocitadloArray].ticket = OP_ticket_BUY;
TicketArray[PocitadloArray].price = 0;
}
else
{err=GetLastError();
Print("-----------------------------ERROR-OP_BUY-11---------------------------","");
Print("Send error OP_BUY(",err,")_",""); Print("Ask = ",Ask); Print("OrderSend_Volume = ",OrderSend_Volume); Print("OrderSend_Price = ",OrderSend_Price); Print("OrderSend_StopLoss = ",OrderSend_StopLoss); Print("OrderSend_TakeProfit = ",OrderSend_TakeProfit); Print("OrderSend_Expirace = ",OrderSend_Expirace);
Print("-----------------------------ERROR-OP_BUY-12---------------------------","");
}
}


if (p_typ_prikazu == "OP_SELL")
{
vypocet_OrderSend_hodnot("SELL", "zadani_prikazu");

OP_ticket_SELL = OrderSend(Symbol(),
OP_SELL,
OrderSend_Volume,
Bid,
10,
OrderSend_StopLoss,
OrderSend_TakeProfit,
IntegerToString(magic_number)+" - OP_SELL",
magic_number,
OrderSend_Expirace,
Red);

zapisLOG(IntegerToString(OP_ticket_SELL), "OP_SELL", DoubleToString(Bid));

// http://www.forex-pro-zacatecniky.cz/news/errory-pri-pouzivani-ea-dil-12-/
if (OP_ticket_SELL > 0)
{
// na kontrolu ci uz bol v dany den zadany prikaz, ak ano, tak dalsi uz v danom dni nezadavam
Den_zadania_prikazu_SELL = DayOfYear(); // (1 means 1 January,..,365(6) does 31 December)

vystup_podla_EMA_OP_ticket_SELL = OP_ticket_SELL; // aby mi to neosefovalo obchod, ktory presiel do druheho dna

PocitadloArray = PocitadloArray + 1;
TicketArray[PocitadloArray].ticket = OP_ticket_SELL;
TicketArray[PocitadloArray].price = 0;
}
else
{err=GetLastError();
Print("-----------------------------ERROR-OP_SELL-11---------------------------","");
Print("Send error OP_SELL(",err,")_",""); Print("Bid = ",Bid); Print("OrderSend_Volume = ",OrderSend_Volume); Print("OrderSend_Price = ",OrderSend_Price); Print("OrderSend_StopLoss = ",OrderSend_StopLoss); Print("OrderSend_TakeProfit = ",OrderSend_TakeProfit); Print("OrderSend_Expirace = ",OrderSend_Expirace);
Print("-----------------------------ERROR-OP_SELL-12---------------------------","");
}

}

}

//+------------------------------------------------------------------+
//| VYKRESLENIE dacoho do grafu |
//+------------------------------------------------------------------+
void createObject(string object_name, int object_typ, color object_color, datetime object_cas1, double object_cena1, datetime object_cas2, double object_cena2, string object_text)
{
string p_object_name = "";
bool object_created = false;

//Print("-----------------------------object_typ---------------------------",object_typ);
// object_typ = OBJ_RECTANGLE = 16
// object_typ = OBJ_TREND = 2
// object_typ = OBJ_TEXT = 21

if (object_typ == 16) p_object_name = object_name+"-RECTANGLE-"+IntegerToString(MathRand());
else if (object_typ == 2) p_object_name = object_name+"-TREND-"+IntegerToString(MathRand());
else if (object_typ == 21) p_object_name = object_name+"-TEXT-"+IntegerToString(MathRand());
else p_object_name = object_name+"-"+IntegerToString(MathRand());

if(ObjectFind(p_object_name) <= 0) // kontrola, zda objekt neexistuje
{
if (object_typ == 16) object_created = ObjectCreate(0, p_object_name, OBJ_RECTANGLE, 0, object_cas1, object_cena1, object_cas2, object_cena2);
else if (object_typ == 2) object_created = ObjectCreate(0, p_object_name, OBJ_TREND, 0, object_cas1, object_cena1, object_cas2, object_cena1);
else if (object_typ == 21) object_created = ObjectCreate(0, p_object_name, OBJ_TEXT, 0, object_cas1, object_cena1);

if(object_created == true)
{
/*
if (object_name == "BUY-VSTUP-TP")
{
Print("-----------------------------ObjectCreate---------------------------",p_object_name);
Print("-----------------------------ObjectCreate-object_cena2--------------------------",object_cena2);
Print("-----------------------------ObjectCreate-object_cas2--------------------------",object_cas2);
Print("-----------------------------ObjectCreate-object_cena1--------------------------",object_cena1);
Print("-----------------------------ObjectCreate-object_cas1--------------------------",object_cas1);
}*/

ObjectSet(p_object_name, OBJPROP_COLOR, object_color);
ObjectSet(p_object_name, OBJPROP_TIMEFRAMES, OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30|OBJ_PERIOD_H1|OBJ_PERIOD_H4|OBJ_PERIOD_D1);

if (object_typ == 21)
{
ObjectSetText(p_object_name, object_text, 0, NULL, object_color);
ObjectSetDouble(0, p_object_name, OBJPROP_ANGLE, 90);
}

if (object_typ == 2)
{
ObjectSetInteger(0, p_object_name, OBJPROP_RAY_RIGHT, false);
}
}
}
}




//+---------------------------------------------------------------------+
//| jednotny zapis do DENNIKu ... usnadni pracu napr. s excelom, DB atd.|
//+---------------------------------------------------------------------+
void zapisLOG(string ticket_do_LOGu, string text_do_LOGu, string hodnota_do_LOGu)
{
Print("#"+IntegerToString(magic_number)+"#"+ticket_do_LOGu+"#----------------#"+text_do_LOGu+"#---------------------------#",hodnota_do_LOGu);
}



//+------------------------------------------------------------------+
//| PrintParametre function |
//+------------------------------------------------------------------+
double PrintParametre(string odkud_se_vola)
{
//PrintFormat("Bars = %d, i = %d",Bars,i);

Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------Time_frame--------------------------",Time_frame);

if (vstup_do_hod > 0 || vstup_do_min > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_do_hod-vstup_do_min-------------------------",TimeToString(pasmo_VSTUP_DO, TIME_MINUTES));
if (vstup_od_hod > 0 || vstup_od_min > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_od_hod-vstup_od_min-------------------------",TimeToString(pasmo_VSTUP_OD, TIME_MINUTES));

if (velikost_pozice > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------velikost_pozice--------------------------",velikost_pozice);

if (expirace_hod > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------expirace_hod--------------------------",expirace_hod); // ked som mal takto pomenovanu premennu "platnost_prikazu_hod", tak sa mi niekde nulovala

if (vstup_rozestup_VSTUPov_bodov > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_rozestup_VSTUPov_bodov--------------------------",vstup_rozestup_VSTUPov_bodov);

if (koeficient_navysovani_pozic > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------koeficient_navysovani_pozic--------------------------",koeficient_navysovani_pozic);

if (max_pocet_otvorenych_obchodov_v_danom_dni > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------max_pocet_otvorenych_obchodov_v_danom_dni--------------------------",max_pocet_otvorenych_obchodov_v_danom_dni);

if (vstup_podla_PSAR == true)
{
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_PSAR_maximum--------------------------",vstup_podla_PSAR_maximum);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_PSAR_krok--------------------------",vstup_podla_PSAR_krok);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_PSAR--------------------------",vstup_podla_PSAR);
}

if (vstup_podla_BB == true)
{
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_MINvzdalenost_od_MAIN_bodov--------------------------",vstup_podla_BB_MINvzdalenost_od_MAIN_bodov);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov--------------------------",vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_posun--------------------------",vstup_podla_BB_posun);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_odchylka--------------------------",vstup_podla_BB_odchylka);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_perioda--------------------------",vstup_podla_BB_perioda);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB--------------------------",vstup_podla_BB);
}

if (trailing_stop_bodov > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------trailing_stop_bodov--------------------------",trailing_stop_bodov); // posuvanie SL ak sa trh vyda nasim smerom
if (break_even_bodov > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------break_even_bodov--------------------------",break_even_bodov); // posunutie SL na VSTUP ak cena dosiahne nap. 10 pips zisku
if (break_even_procenta > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------break_even_procenta--------------------------",break_even_procenta); // posunutie SL na VSTUP ak cena dosiahne napr. 50% z TP alebo co ja viem...

if (uzavrit_obchod_hod > 0 || uzavrit_obchod_min > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------uzavrit_obchod_hod-uzavrit_obchod_min-------------------------",IntegerToString(uzavrit_obchod_hod)+":"+IntegerToString(uzavrit_obchod_min));
if (uzavrit_obchod_na_konci_dne == true) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------uzavrit_obchod_na_konci_dne--------------------------",uzavrit_obchod_na_konci_dne); //
if (uzavrit_obchod_na_konci_nasledujiciho_dne == true) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------uzavrit_obchod_na_konci_nasledujiciho_dne--------------------------",uzavrit_obchod_na_konci_nasledujiciho_dne); //

if (vystup_podla_EMA == true)
{
if (vystup_podla_EMA_max_zisk_v_bodoch > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vystup_podla_EMA_max_zisk_v_bodoch--------------------------",vystup_podla_EMA_max_zisk_v_bodoch); // napr. pokial bol zisk len do 100 bodov, tak pri dotyku EMA vystupujem, zrejma nedojde k pohybu, ktory ocakavam
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vystup_podla_EMA_sviecky--------------------------",vystup_podla_EMA_sviecky);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vystup_podla_EMA_perioda--------------------------",vystup_podla_EMA_perioda);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vystup_podla_EMA--------------------------",vystup_podla_EMA); // ak sa cena dotkne bo prekrizi EMA, tak obchod zatvaram, napr. sa to bude dat pouzit ak by som obchodoval bez SL
}

// obchodujem iba vybrane dny, napr. v pondeli ze sa zacinaju preberat z vikendu (slabe pohyby, mala volatilita) a ctvrtek, patek byvaju silne fundamenty (silne pohyby, velka volatilita)
if (obchodovat_Pondeli == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Pondeli--------------------------",obchodovat_Pondeli);
if (obchodovat_Uteri == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Uteri--------------------------",obchodovat_Uteri);
if (obchodovat_Stredu == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Stredu--------------------------",obchodovat_Stredu);
if (obchodovat_Ctvrtek == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Ctvrtek--------------------------",obchodovat_Ctvrtek);
if (obchodovat_Patek == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Patek--------------------------",obchodovat_Patek);

if (NEobchodovat_prazdniny == true) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------NEobchodovat_prazdniny--------------------------",NEobchodovat_prazdniny); // ci sa bude obchodovat cez prazdniny

return(0);
}

 

OK, tak to posilam sem

 

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 11.12.2017 11:32
Odpověď na: danospanos

Zkus to nahrát sem, popřípadě dát nějaký odkaz. Takhle by se z toho nikdy nikdo nemohl v budoucnu poučit, kdybysme to řešili soukromě přes maily. :)

 tak jsem to nahral i na google disk

https://drive.google.com/open?id=1joQR8UiZvnmg_DvmlypIEmZvOf5VKZFb

 

danospanos
Silver member
avatar
Příspěvky: 106
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 11.12.2017 11:36
Odpověď na: adrian

//+------------------------------------------------------------------+
//| Pokus_Navrat_ceny_v1.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

#property copyright "tapir"
#property link ""
#property version "1.00"
#property strict

//+------------------------------------------------------------------+
//| Externé vstupné parametre strategie |
//+------------------------------------------------------------------+


extern int magic_number = 124; // magic_number: identifikacne cislo strategie

extern int vstup_od_hod = 16;
extern int vstup_od_min = 0;
extern int vstup_do_hod = 20;
extern int vstup_do_min = 0;

extern double velikost_pozice = 0.1;
extern int expirace_hod = 0; // ked dam nulu, tak sa budu brat do uvahy hodnoty z vstup_do_hod a vstup_do_min

extern int trailing_stop_bodov = 0; // trailing_stop_bodov: posuvanie SL ak sa trh vyda nasim smerom
extern int break_even_bodov = 0; // break_even_bodov: posunutie SL na VSTUP ak cena dosiahne nap. 10 pips zisku
extern int break_even_procenta = 0; // break_even_procenta: posunutie SL na VSTUP ak cena dosiahne napr. 50% z TP alebo co ja viem...

extern bool vstup_podla_BB = true;
extern int vstup_podla_BB_perioda = 200;
extern int vstup_podla_BB_odchylka = 1;
extern int vstup_podla_BB_posun = 1;
extern int vstup_podla_BB_MINvzdalenost_od_MAIN_bodov = 100; // vstup_podla_BB_MINvzdalenost_od_MAIN_bodov : povolit vstup ak bude cena napr. MIN 100 bodov od strednej krivky
extern int vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov = 500; // vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov : povolit vstup ak bude cena napr. MAX 500 bodov od strednej krivky

extern bool vstup_podla_PSAR = true;
extern double vstup_podla_PSAR_krok = 1;
extern double vstup_podla_PSAR_maximum = 1;

extern int vstup_rozestup_VSTUPov_bodov = 20; // vstup_rozestup_VSTUPov_bodov: za den mozem urobit viac vstupov a toto je vzdialenost medzi nimi

extern double koeficient_navysovani_pozic = 1.2; // koeficient_navysovani_pozic: vzdy dalsi obchod bude mat OrderSend_Volume = Volume predchadzajuceho obchodu * koeficient_navysovani_pozic

extern int max_pocet_otvorenych_obchodov_v_danom_dni = 0; // max_pocet_otvorenych_obchodov_v_danom_dni: napr. = 3, tak stvrty obchod v danom dni mi uz neotvori

extern int uzavrit_obchod_hod = 0; // uzavrit_obchod_hod: napr. o 17:00 nam zatvori otvorene obchody, uz neocakavame velky pohyb, tak nas to uz nezaujima
extern int uzavrit_obchod_min = 0; // uzavrit_obchod_min: !!! BACHA, pokial chcem uzavriet na konci dna, tak musim dat 23:55, ked som mal 23:59 tak mi to nezatvorilo bo premenna cas_kdy_se_uzavre_obchod sa mi vzdy na zaciatku kazdeho dna prepise na aktualny datum + cas kedy sa ma obchod zavret
extern bool uzavrit_obchod_na_konci_dne = false; // uzavrit_obchod_na_konci_dne: pokial chcem uzavriet na konci dna, tak musim dat 23:55 !!! ALE BACHA !!! v piatok sa konci uz 22:00
extern bool uzavrit_obchod_na_konci_nasledujiciho_dne = false; // uzavrit_obchod_na_konci_nasledujiciho_dne: pokial chcem uzavriet na konci nasledujuceho dna, tak musim dat 23:55 !!! ALE BACHA !!! v piatok sa konci uz 22:00

extern bool vystup_podla_EMA = true; // vystup_podla_EMA: ak sa cena dotkne bo prekrizi EMA, tak obchod zatvaram, napr. sa to bude dat pouzit ak by som obchodoval bez SL
extern int vystup_podla_EMA_max_zisk_v_bodoch = 0; // vystup_podla_EMA_max_zisk_v_bodoch: napr. pokial bol zisk len do 100 bodov, tak pri dotyku EMA vystupujem, zrejma nedojde k pohybu, ktory ocakavam
extern int vystup_podla_EMA_perioda = 200; // vystup_podla_EMA_perioda:
extern int vystup_podla_EMA_sviecky = PRICE_CLOSE; // vystup_podla_EMA_sviecky: PRICE_CLOSE: Close price // PRICE_TYPICAL: Typical price, (high + low + close)/3

// obchodujem iba vybrane dny, napr. v pondeli ze sa zacinaju preberat z vikendu (slabe pohyby, mala volatilita) a ctvrtek, patek byvaju silne fundamenty (silne pohyby, velka volatilita)
extern bool obchodovat_Pondeli = true;
extern bool obchodovat_Uteri = true;
extern bool obchodovat_Stredu = true;
extern bool obchodovat_Ctvrtek = true;
extern bool obchodovat_Patek = true;

extern bool NEobchodovat_prazdniny = false; // NEobchodovat_prazdniny: ci sa bude obchodovat cez prazdniny
bool obchodovanie_cez_prazdniny_zrusene = false;
datetime NEobchodovat_prazdniny_OD = StrToTime("2000.01.01 00:00:00");
datetime NEobchodovat_prazdniny_DO = StrToTime("2000.01.01 00:00:00");

int i, err, p_count;

int Time_frame = Period();

int Bars_pocet = 0;

int Den_v_roku = 0;
int Den_v_tyzdni = 0;

// na kontrolu ci uz bol v dany den zadany prikaz, ak ano, tak dalsi uz v danom dni nezadavam
int Den_zadania_prikazu_BUY = 0;
int Den_zadania_prikazu_SELL = 0;

datetime pasmo_VSTUP_OD = StrToTime("2000.01.01 00:00:00"); // tu si poskladama udaj z aktualneho datumu + vstup_od_hod + vstup_od_min
datetime pasmo_VSTUP_DO = StrToTime("2000.01.01 00:00:00"); // tu si poskladama udaj z aktualneho datumu + vstup_do_hod + vstup_do_min

double vstup_podla_BB_MAIN = 0;
double vstup_podla_BB_UPPER = 0;
double vstup_podla_BB_LOWER = 0;

double vstup_podla_PSAR_0 = 0;
double vstup_podla_PSAR_1 = 0;

double OrderSend_StopLoss = 0;
double OrderSend_TakeProfit = 0;
double OrderSend_Price = 0;
datetime OrderSend_Expirace = 0;
double OrderSend_Volume = 0;

int OP_ticket_BUY = 0;
int OP_ticket_SELL = 0;

int barva_prikazu = Yellow;

bool ukonci_obchod_BUY = false;
bool ukonci_obchod_SELL = false;

double vystup_podla_EMA_max_zisk_BUY = 0; // tu sa zapisuje max. dosiahnuta cena pro obchod BUY z ceny Ask
double vystup_podla_EMA_max_zisk_SELL = 0; // tu sa zapisuje max. dosiahnuta cena pro obchod SELL z ceny Bind
int vystup_podla_EMA_OP_ticket_BUY = 0;
int vystup_podla_EMA_OP_ticket_SELL = 0;

datetime cas_kdy_se_uzavre_obchod = StrToTime("2000.01.01 00:00:00"); // tu si poskladama udaj z aktualneho datumu + uzavrit_obchod_hod + uzavrit_obchod_min

bool moze_zadat_prikaz_BUY = true; // kontrola ci je zadany prikaz BUY
bool moze_zadat_prikaz_SELL = true; // kontrola ci je zadany prikaz SELL

int PocitadloArray = 0;

struct TicketClass {
int ticket;
double price;
string print;
string BE;
};

TicketClass TicketArray[1000000];

double p_OrderTicket_BE = 0;

 

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// !!! SendMail() function does not work in the Strategy Tester. !!!
SendMail("AOS - Experts_Pokus_Navrat_ceny_v1 - INIT - "+IntegerToString(magic_number), "spustenie strategie Navrat ceny - magic_number = "+IntegerToString(magic_number)); // posle email, ktory mame v MT4 nastaveny Nastroje/Moznosti/E-Mail
Alert("INIT - Alert - "+IntegerToString(magic_number));
Comment("INIT - Comment - "+IntegerToString(magic_number));

// ** na zaciatku si vypisem vsetky zadane parametre strategie ... toto tu je koli realnemu obchodovaniu
PrintParametre("INIT");

return(INIT_SUCCEEDED);
}


//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
SendMail("AOS - Experts_Pokus_Navrat_ceny_v1 - DEinit - "+IntegerToString(magic_number), "zastavenie strategie Navrat ceny - magic_number = "+IntegerToString(magic_number)); // posle email, ktory mame v MT4 nastaveny Nastroje/Moznosti/E-Mail
Alert("DEINIT - Alert - "+IntegerToString(magic_number));
Comment("DEINIT - Comment - "+IntegerToString(magic_number));

// ** na konci si vypisem vsetky zadane parametre strategie ... toto tu je koli testovaniu
PrintParametre("DEINIT");
}



//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick(void)
{
// http://www.forex-pro-zacatecniky.cz/news/zaklady-mql4-aneb-mimimum-pro-zahajeni-programovani-dil-2-/

barva_prikazu = Yellow;

ukonci_obchod_BUY = false;
ukonci_obchod_SELL = false;

moze_zadat_prikaz_BUY = true; // kontrola ci je zadany prikaz BUY, ak ano, tak dalsi uz neotvaram
moze_zadat_prikaz_SELL = true; // kontrola ci je zadany prikaz SELL, ak ano, tak dalsi uz neotvaram

if (Den_v_roku != DayOfYear())
{
zapisLOG("", "Account free margin", DoubleToString(AccountFreeMargin()));// kolik mam volnych prostredku

Den_v_tyzdni = DayOfWeek(); // zjistí den v týdnu (neděle=0 … pátek=5)
Den_v_roku = DayOfYear(); // (1 means 1 January,..,365(6) does 31 December)

Den_zadania_prikazu_BUY = 0; // na kontrolu ci uz bol v dany den zadany prikaz, ak ano, tak dalsi uz v danom dni nezadavam
Den_zadania_prikazu_SELL = 0;

OP_ticket_BUY = 0; // ak uz je druhy den, tak mozem znovu zadat BUY / SELL, preto si vynulujem hodnotu ticketu
OP_ticket_SELL = 0;

if ((vstup_od_hod > 0 || vstup_od_min > 0) && (vstup_do_hod > 0 || vstup_do_min > 0))
{
pasmo_VSTUP_OD = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_od_hod)+":"+IntegerToString(vstup_od_min)+":00");
pasmo_VSTUP_DO = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_do_hod)+":"+IntegerToString(vstup_do_min)+":00"); // zapisLOG("", "pasmo_VSTUP_OD", TimeToStr(pasmo_VSTUP_DO)); zapisLOG("", "pasmo_VSTUP_OD", TimeToStr(pasmo_VSTUP_OD));
}

if (uzavrit_obchod_hod > 0)
{
cas_kdy_se_uzavre_obchod = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(uzavrit_obchod_hod)+":"+IntegerToString(uzavrit_obchod_min)+":00");
}
else
{
if (uzavrit_obchod_na_konci_dne == true)
{
// v patek zaviera 22:00 a ostatne dny 24:00
if (Den_v_tyzdni == 5) { cas_kdy_se_uzavre_obchod = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 21:30");}
else { cas_kdy_se_uzavre_obchod = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 23:40");}

// v patek zaviera 21:00 a ostatne dny 22:00
if (Symbol() == "GOLDs.") { cas_kdy_se_uzavre_obchod = StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 20:30");}
}
}

if (NEobchodovat_prazdniny == true) // ci sa bude obchodovat cez prazdniny
{
NEobchodovat_prazdniny_OD = StrToTime(IntegerToString(TimeYear(TimeCurrent()))+".07.01 00:00:00");
NEobchodovat_prazdniny_DO = StrToTime(IntegerToString(TimeYear(TimeCurrent()))+".09.01 00:00:00");
}

vystup_podla_EMA_max_zisk_BUY = 0; // mal by som pracovat iba s poslednym otvorenym obchodom
vystup_podla_EMA_max_zisk_SELL = 0;
vystup_podla_EMA_OP_ticket_BUY = 0; // aby mi to neosefovalo obchod, ktory presiel do druheho dna
vystup_podla_EMA_OP_ticket_SELL = 0;

obchodovanie_cez_prazdniny_zrusene = false;

if (PocitadloArray > 0)
{
// tu si zistim a zapisem k jednotlivym obchodom profit (zisk / strata)
for(i = 1; i <= PocitadloArray; i++)
{
if (TicketArray[i].print != "X")
{
if (OrderSelect(i, SELECT_BY_TICKET, MODE_HISTORY))
{
TicketArray[i].price = NormalizeDouble(OrderProfit(), 2);
TicketArray[i].print = "X";

if (TicketArray[i].BE == "X") {zapisLOG(DoubleToString(TicketArray[i].ticket, 0), "ZISK/STRAT - BE", DoubleToString(OrderProfit(), 2));}
else {zapisLOG(DoubleToString(TicketArray[i].ticket, 0), "ZISK/STRAT", DoubleToString(OrderProfit(), 2));}
}
}
}
}
}

// ** //
/*
if (Hour() == 16 && Minute() == 17 )
{
vstup_podla_BB_MAIN = iSAR(NULL, 0, 1, 1, 0);

createObject("BUY-HIGH", OBJ_TREND, clrBlack, TimeCurrent(), vstup_podla_BB_MAIN, TimeCurrent()+36000, vstup_podla_BB_MAIN, "BUY HIGH");
createObject("Bid_BB", OBJ_TEXT, clrBlack, TimeCurrent()+36000, vstup_podla_BB_MAIN, NULL, NULL, TimeToStr(TimeCurrent(), TIME_MINUTES));
}
*/

// ** tu si osefefujem otvorene obchody: trailing stop, break-even alebo ich zatvorit
for(i = 0; i <= OrdersTotal(); i++)
{
// U long příkazu jsme vstupovali za Ask a tedy vystupujeme za Bid cenu !!! u short zase opacne vstup za Bid, vystup za Ask

// OrderSelect se používá k výberu zadaného príkazu dle císla štítku nebo dle indexu.
// SELECT_BY_POS: vyber podla poradia pokynov.
// MODE_TRADES: výber z aktuálne zadaných i cakajucich príkazov. Tato hodnota je nastavena jako implicitní.

// OrderMagicNumber vrací magické císlo vybraného príkazu, zadané pomocí funkce OrderSend.

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic_number)
{

// ** na zaklade tychto podmienok sa uzavre obchod
filter_vystup();


if (StrToTime("2000.01.01 00:00:00") != cas_kdy_se_uzavre_obchod && TimeCurrent() > cas_kdy_se_uzavre_obchod) // ak je zadana hodina uzavreti prikazu, tak tu to vykonam
{
barva_prikazu = Green;
if (OrderType() == OP_BUY) ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY)-zadana hodina uzavreni prikazu, Bid = ", DoubleToString(Bid, Digits));
if (OrderType() == OP_SELL) ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL)-zadana hodina uzavreni prikazu, Ask = ", DoubleToString(Ask, Digits));
}

// ** na zaklade predchdzajucich podmienok sa uzavru obchody

// http://www.forex-pro-zacatecniky.cz/news/zadavame-pozici-short-dil-6-/
if(ukonci_obchod_BUY == true)
{
// OrderClose ( ticket, lots, price, slippage, color) co znamena slippage = 2 ???, mali to tak zadane natvrdo na webu
if(OrderClose(OrderTicket(), OrderLots(), Bid, 2, barva_prikazu) == false) // U long příkazu jsme vstupovali za Ask a tedy vystupujeme za Bid cenu
{Print("-----------------------------ERROR-OrderClose-OP_BUY-11---------------------------",""); Print("OP_BUY OrderClose failed error code is: ",GetLastError()); Print("-----------------------------ERROR-OrderClose-OP_BUY-12---------------------------","");}
}

if(ukonci_obchod_SELL == true)
{
// OrderClose ( ticket, lots, price, slippage, color) co znamena slippage = 2 ???, mali to tak zadane natvrdo na webu
if(OrderClose(OrderTicket(), OrderLots(), Ask, 2, barva_prikazu) == false) // U short příkazu jsme vstupovali za Bid a tedy vystupujeme za Ask cenu
{Print("-----------------------------ERROR-OrderClose-OP_SELL-11---------------------------",""); Print("OP_SELL OrderClose failed error code is: ",GetLastError()); Print("-----------------------------ERROR-OrderClose-OP_SELL-12---------------------------","");}
}

// !!! tu to treba asi premysliet ako zafunguje nasledovne riesenie TrailingStopu ak som obchod predoslim prikazom OrderClose() uzavrel

p_OrderTicket_BE = 0;

// http://www.forex-pro-zacatecniky.cz/news/zadani-podminek-pro-vstup-a-posunuti-na-break-even-dil-7-/
if (break_even_bodov > 0) // posunutie SL na VSTUP ak cena dosiahne nap. 10 pips zisku
{
// OrderStopLoss() < OrderOpenPrice(), aby EA neposuvala neustale SL na VSTUP, cize pokial bude SL = VSTUPU, tak uz neposuvaj SL
// OrderStopLoss() != OrderOpenPrice() nie je vhodne pouzit lebo ak by sme mali zaply TrailingStop, tak by nam EA neustale davala SL na VSTUP

if (OrderType() == OP_BUY && Bid >= (OrderOpenPrice() + (break_even_bodov * Point)) && OrderStopLoss() < OrderOpenPrice()) // pro pokyn typu BYU
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Blue) == false) {Print("-----------------------------ERROR-OrderModify-OP_BUY-11---------------------------",""); Print("OP_BUY OrderModify - break_even_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_BUY-12---------------------------","");}
else { p_OrderTicket_BE = OrderTicket(); zapisLOG(IntegerToString(OrderTicket()), "OP_BUY OrderModify - break_even_bodov > 0, Bid = ", DoubleToString(Bid, Digits));}
}

if (OrderType() == OP_SELL && Ask <= (OrderOpenPrice() - (break_even_bodov * Point)) && OrderStopLoss() > OrderOpenPrice()) // pro pokyn typu SELL
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Red) == false) {Print("-----------------------------ERROR-OrderModify-OP_SELL-11---------------------------",""); Print("OP_SELL OrderModify - break_even_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_SELL-12---------------------------","");}
else { p_OrderTicket_BE = OrderTicket(); zapisLOG(IntegerToString(OrderTicket()), "OP_SELL OrderModify - break_even_bodov > 0, Ask = ", DoubleToString(Ask, Digits));}
}
}

if (break_even_procenta > 0) // posunutie SL na VSTUP ak cena dosiahne nap. 50% TP alebo co ja viem...
{
if (OrderType() == OP_BUY)
{
if (Bid > ((((OrderTakeProfit() - OrderOpenPrice()) / 100) * break_even_procenta) + OrderOpenPrice()) && OrderStopLoss() < OrderOpenPrice()) // tu zistujem 50% zisku: ak je cena vacsia ako napr. 50% z TP, tak posunem na BE
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Blue) == false) {Print("-----------------------------ERROR-OrderModify-OP_BUY-11---------------------------",""); Print("OP_BUY OrderModify - break_even_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_BUY-12---------------------------","");}
else { p_OrderTicket_BE = OrderTicket(); zapisLOG(IntegerToString(OrderTicket()), "OP_BUY OrderModify - break_even_procenta > 0, Bid = ", DoubleToString(Bid, Digits));}
}
}

if (OrderType() == OP_SELL)
{
if (Ask < ((((OrderTakeProfit() - OrderOpenPrice()) / 100) * break_even_procenta) + OrderOpenPrice()) && OrderStopLoss() > OrderOpenPrice()) // tu zistujem 50% zisku: ak je cena vacsia ako napr. 50% z TP, tak posunem na BE
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Red) == false) {Print("-----------------------------ERROR-OrderModify-OP_SELL-11---------------------------",""); Print("OP_SELL OrderModify - break_even_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_SELL-12---------------------------","");}
else { p_OrderTicket_BE = OrderTicket(); zapisLOG(IntegerToString(OrderTicket()), "OP_SELL OrderModify - break_even_procenta > 0, Ask = ", DoubleToString(Ask, Digits));}
}
}
}

if (PocitadloArray > 0 && p_OrderTicket_BE > 0)
{
// tu si zistim a zapisem k jednotlivym obchodom profit (zisk / strata)
for(i = 1; i <= PocitadloArray; i++)
{
if (TicketArray[i].ticket == p_OrderTicket_BE) TicketArray[i].BE = "X";
}
}

// http://www.forex-pro-zacatecniky.cz/news/programujeme-trailing-stop-v-mql4-dil-8-/
if (trailing_stop_bodov > 0) // posuvanie SL ak sa trh vyda nasim smerom
{
if(OrderType() == OP_BUY && Bid - OrderStopLoss() > trailing_stop_bodov * Point && Bid - OrderOpenPrice() > trailing_stop_bodov * Point)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - trailing_stop_bodov * Point, Digits), OrderTakeProfit(), 0, Blue) == false) {Print("-----------------------------ERROR-OrderModify-OP_BUY-11---------------------------",""); Print("OP_BUY OrderModify - trailing_stop_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_BUY-12---------------------------","");}
else zapisLOG(IntegerToString(OrderTicket()), "OP_BUY OrderModify - trailing_stop_bodov > 0, Bid = ", DoubleToString(Bid, Digits));
}

if(OrderType() == OP_SELL && OrderStopLoss() - Ask > trailing_stop_bodov * Point && OrderOpenPrice() - Ask > trailing_stop_bodov * Point)
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + trailing_stop_bodov * Point, Digits), OrderTakeProfit(), 0, Red) == false) {Print("-----------------------------ERROR-OrderModify-OP_SELL-11---------------------------",""); Print("OP_SELL OrderModify - trailing_stop_bodov: ",GetLastError()); Print("-----------------------------ERROR-OrderModify-OP_SELL-12---------------------------","");}
else zapisLOG(IntegerToString(OrderTicket()), "OP_SELL OrderModify - trailing_stop_bodov > 0, Ask = ", DoubleToString(Ask, Digits));
}
}

}
}


// ** osefovanie : ZADANI POKYNU

//if (iVolume(Symbol(), Time_frame, 0) == 1 && (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true))
// 7.12.17 som zacal pouzivat Bars() ... citace: Nemůžete v AOS cílit na konkrétní, jediný tick. Vystavujete se riziku, že AOS právě tento tick "přeskočí". Pokud chcete zjistit aktuální hodnotu indikátoru, nedávejte to do takto kontroverzní podmínky
// do promenne si uloz hodnotu Bars (pocet baru) a hlidej kdy se to zmeni, pak jen v tom pripade proved kod

if ((Bars_pocet != Bars(NULL, Time_frame)) && (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true))// ak budem napr. na Time_frame = M15, tak nasledujuci kod mi prebehne kazdych 15 min !!! bacha nie pri kazdom ticku
{
Bars_pocet = Bars(NULL, Time_frame);

// ** FILTER VSTUPu
filter_vstup();

if (moze_zadat_prikaz_BUY == true) zadani_prikazu("OP_BUY");

if (moze_zadat_prikaz_SELL == true) zadani_prikazu("OP_SELL");
}
}

 

//+------------------------------------------------------------------+
//| Expert start function |
//+------------------------------------------------------------------+
int start()
{

return(0);
}

 

//+------------------------------------------------------------------+
//| FILTRE VSTUPU |
//+------------------------------------------------------------------+
double filter_vstup()
{
// VSTUPujeme za Bid lebo tato hodnota nam vykresluje sviecky, High Low, indikatory
// kedze vstupujeme za Bid, tak aj bude vystupovat

//ak v predoslych podmienkach zistim, ze je cena mimo range, tak dalsie testovanie na VSTUP je zbytocne
if (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true)
{
// ** // kontrola ci mozny VSTUP na zaklade zadanych hodin + minut
if (TimeCurrent() < pasmo_VSTUP_OD || TimeCurrent() > pasmo_VSTUP_DO)
{
moze_zadat_prikaz_BUY = false;
moze_zadat_prikaz_SELL = false;
}


// ** //
if (NEobchodovat_prazdniny == true) // ci sa bude obchodovat cez prazdniny
{
if (TimeCurrent() > NEobchodovat_prazdniny_OD && TimeCurrent() < NEobchodovat_prazdniny_DO)
{
moze_zadat_prikaz_BUY = false;
moze_zadat_prikaz_SELL = false;

obchodovanie_cez_prazdniny_zrusene = true;
}
}



// ** // Den = den v týdnu (neděle=0 … pátek=5) ... obchodujem iba vybrane dny, napr. v pondeli ze sa zacinaju preberat z vikendu (slabe pohyby, mala volatilita) a ctvrtek, patek byvaju silne fundamenty (silne pohyby, velka volatilita)
if ((obchodovat_Pondeli == false && Den_v_tyzdni == 1) ||
(obchodovat_Uteri == false && Den_v_tyzdni == 2) ||
(obchodovat_Stredu == false && Den_v_tyzdni == 3) ||
(obchodovat_Ctvrtek == false && Den_v_tyzdni == 4) ||
(obchodovat_Patek == false && Den_v_tyzdni == 5) ||
Den_v_tyzdni == 6 || Den_v_tyzdni == 0)
{
moze_zadat_prikaz_BUY = false;
moze_zadat_prikaz_SELL = false;
}

 

// * * //
if (max_pocet_otvorenych_obchodov_v_danom_dni > 0)
{
p_count = 0;

for(i = OrdersTotal(); i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic_number)
{
if (StrToTime((TimeToStr(OrderOpenTime(), TIME_DATE))) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))))
{
p_count = p_count + 1;
}
}
}

if (p_count >= max_pocet_otvorenych_obchodov_v_danom_dni)
{
moze_zadat_prikaz_BUY = false;
moze_zadat_prikaz_SELL = false; zapisLOG("", "jiz je : max_pocet_otvorenych_obchodov_v_danom_dni", "");
}
}

// ** // napr. vstup_rozestup_VSTUPov_bodov = 20, tak nasledujuci VSTUP od predosleho musi byt vzdialeny min 20 bodov
if (vstup_rozestup_VSTUPov_bodov > 0)
{
if (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true)
{
if (OrdersTotal() > 0)
{
// tu si nacitam posledny otvoreny obchod
if (OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic_number)
{
if (OrderOpenPrice() > Bid)
{
if (((OrderOpenPrice() - Bid) / Point) < vstup_rozestup_VSTUPov_bodov)
{
if (OrderType() == OP_BUY) {moze_zadat_prikaz_BUY = false; zapisLOG("", "BUY vdalenost od predchoziho VSTUPu je < vstup_rozestup_VSTUPov_bodov", "");}
if (OrderType() == OP_SELL) {moze_zadat_prikaz_SELL = false; zapisLOG("", "SELL vdalenost od predchoziho VSTUPu je < vstup_rozestup_VSTUPov_bodov", "");}
}
}
else
{
if (((Bid - OrderOpenPrice()) / Point) < vstup_rozestup_VSTUPov_bodov)
{
if (OrderType() == OP_BUY) {moze_zadat_prikaz_BUY = false; zapisLOG("", "BUY vdalenost od predchoziho VSTUPu je < vstup_rozestup_VSTUPov_bodov", "");}
if (OrderType() == OP_SELL) {moze_zadat_prikaz_SELL = false; zapisLOG("", "SELL vdalenost od predchoziho VSTUPu je < vstup_rozestup_VSTUPov_bodov", "");}
}
}
}
}
}
}



// ** //
if (vstup_podla_BB == true)
{
if (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true)
{
vstup_podla_BB_MAIN = iBands(NULL, Time_frame, vstup_podla_BB_perioda, vstup_podla_BB_odchylka, vstup_podla_BB_posun, PRICE_CLOSE, MODE_MAIN, 0);
vstup_podla_BB_UPPER = iBands(NULL, Time_frame, vstup_podla_BB_perioda, vstup_podla_BB_odchylka, vstup_podla_BB_posun, PRICE_CLOSE, MODE_UPPER, 0);
vstup_podla_BB_LOWER = iBands(NULL, Time_frame, vstup_podla_BB_perioda, vstup_podla_BB_odchylka, vstup_podla_BB_posun, PRICE_CLOSE, MODE_LOWER, 0);
}

// ** // Long: Bid < BB spodni pasmo (MODE_LOWER)

if (moze_zadat_prikaz_BUY == true)
{
if ((Bid < vstup_podla_BB_LOWER) == true)
{
// ak je napr. cena vo zdialenosti od strednej krivky (MAIN) vacsia ako 100 bodov a mensia ako 500 bodov, tak povolim VSTUP
if ((((vstup_podla_BB_MAIN - Bid) / Point) > vstup_podla_BB_MINvzdalenost_od_MAIN_bodov &&
((vstup_podla_BB_MAIN - Bid) / Point) < vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov) == false)
{
moze_zadat_prikaz_BUY = false; zapisLOG("", "Long: Bid < BB spodni pasmo (MODE_LOWER) a vzdalenost od stredni krivky (MODE_MAIN) je ",DoubleToString((vstup_podla_BB_MAIN - Bid) / Point));
}
}
else
{
moze_zadat_prikaz_BUY = false;
}
}

// ** // Short: Bid > BB horni pasmo (MODE_UPPER)

if (moze_zadat_prikaz_SELL == true)
{
if ((Bid > vstup_podla_BB_UPPER) == true)
{
// ak je napr. cena vo zdialenosti od strednej krivky (MAIN) vacsia ako 100 bodov a mensia ako 500 bodov, tak povolim VSTUP
if ((((Bid - vstup_podla_BB_MAIN) / Point) > vstup_podla_BB_MINvzdalenost_od_MAIN_bodov &&
((Bid - vstup_podla_BB_MAIN) / Point) < vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov) == false)
{
moze_zadat_prikaz_SELL = false; zapisLOG("", "Short: Bid > BB horni pasmo (MODE_UPPER) a vzdalenost od stredni krivky (MODE_MAIN) je ",DoubleToString((Bid - vstup_podla_BB_MAIN) / Point));
}
}
else
{
moze_zadat_prikaz_SELL = false;
}
}
}

if (vstup_podla_PSAR == true) // !!! funkce iSAR mi nespravne vracia hodnotu na aktualnej sviecke !!! asi by som to moc nepouzival
{
if (moze_zadat_prikaz_BUY == true || moze_zadat_prikaz_SELL == true)
{
vstup_podla_PSAR_0 = iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 1);
vstup_podla_PSAR_1 = iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 2);

/*zapisLOG("", "vstup_podla_PSAR_1",DoubleToString(vstup_podla_PSAR_1));
zapisLOG("", "vstup_podla_PSAR_0",DoubleToString(vstup_podla_PSAR_0));*/
}


if (moze_zadat_prikaz_BUY == true)
{
// Long: Bid > PSAR 0 a PSAR 0 < PSAR 1

//zapisLOG("", "Long: Bid > PSAR 0 a PSAR 0 < PSAR 1 ... Bid = ",DoubleToString(Bid));

if ((Bid > vstup_podla_PSAR_0 && vstup_podla_PSAR_0 < vstup_podla_PSAR_1) == true)
{
createObject("Bid_BB", OBJ_TEXT, clrBlack, TimeCurrent(), Bid, NULL, NULL, "Long: "+TimeToStr(TimeCurrent(), TIME_MINUTES));
}
else
{
moze_zadat_prikaz_BUY = false; zapisLOG("", "Long: Bid > PSAR 0 a PSAR 0 < PSAR 1","false");
}
}

if (moze_zadat_prikaz_SELL == true)
{
// Short: Bid < PSAR 0 a PSAR 0 > PSAR 1

//zapisLOG("", "Short: Bid < PSAR 0 a PSAR 0 > PSAR 1 ... Bid = ",DoubleToString(Bid));

if ((Bid < vstup_podla_PSAR_0 && vstup_podla_PSAR_0 > vstup_podla_PSAR_1) == true)
{
createObject("Bid_BB", OBJ_TEXT, clrBlack, TimeCurrent(), Bid, NULL, NULL, "Short : "+TimeToStr(TimeCurrent(), TIME_MINUTES));
}
else
{
moze_zadat_prikaz_SELL = false; zapisLOG("", "Short: Bid < PSAR 0 a PSAR 0 > PSAR 1","false");
}
}
}



// ** // konec funkce : filter_vstup()
//Print("moze_zadat_prikaz_BUY = ",moze_zadat_prikaz_BUY);
//Print("moze_zadat_prikaz_SELL = ",moze_zadat_prikaz_SELL);
}

return(0);
}

 

//+------------------------------------------------------------------+
//| FILTRE VYSTUP |
//+------------------------------------------------------------------+
double filter_vystup()
{
// VSTUPujeme za Bid lebo tato hodnota nam vykresluje sviecky, High Low, indikatory
// kedze vstupujeme za Bid, tak aj bude vystupovat

if (vystup_podla_EMA == true) // ak sa cena dotkne bo prekrizi EMA, tak obchod zatvaram
{
if (vystup_podla_EMA_max_zisk_v_bodoch > 0) // napr. pokial bol zisk len do 100 bodov, tak pri dotyku EMA vystupujem, zrejma nedojde k pohybu, ktory ocakavam
{
if (vystup_podla_EMA_max_zisk_BUY >= 0 && vystup_podla_EMA_OP_ticket_BUY > 0)
{
// tu sa zapisuje max. dosiahnuta cena predchadzajucej sviecky pro obchod BUY
if (OrderType() == OP_BUY && OrderTicket() == vystup_podla_EMA_OP_ticket_BUY && vystup_podla_EMA_max_zisk_BUY < Bid) vystup_podla_EMA_max_zisk_BUY = Bid;

// mal by som tu osefovat posledny otvoreny obchod ... preto v podmienke OrderTicket() == vystup_podla_EMA_OP_ticket_BUY
if (OrderType() == OP_BUY && OrderTicket() == vystup_podla_EMA_OP_ticket_BUY && Bid < NormalizeDouble(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0), 5))
{
if ((vystup_podla_EMA_max_zisk_BUY - OrderOpenPrice()) <= (vystup_podla_EMA_max_zisk_v_bodoch * Point))
{
barva_prikazu = Magenta;
ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BYU)-vystup_podla_EMA == true : napr.zisk bol 100 bodov, pri dotyku EMA vystupujem", DoubleToString(vystup_podla_EMA_max_zisk_BUY));
}
// stalo sa to, ze ked cena presla prvy krat cez EMA, tak zisk bol vacsi ako sme mali nastavene v vystup_podla_EMA_max_zisk_v_bodoch
// a ked presla podruhy krat, tak mi obchod zavrelo ... mna zaujima iba prvotny pohyb hned po otvoreni obchodu
else vystup_podla_EMA_max_zisk_BUY = -1;
}
}

if (vystup_podla_EMA_max_zisk_SELL >= 0 && vystup_podla_EMA_OP_ticket_SELL > 0)
{
if (OrderType() == OP_SELL && OrderTicket() == vystup_podla_EMA_OP_ticket_SELL && (vystup_podla_EMA_max_zisk_SELL > Bid || vystup_podla_EMA_max_zisk_SELL == 0)) vystup_podla_EMA_max_zisk_SELL = Bid;

if (OrderType() == OP_SELL && OrderTicket() == vystup_podla_EMA_OP_ticket_SELL && Bid > NormalizeDouble(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0), 5))
{
if ((OrderOpenPrice() - vystup_podla_EMA_max_zisk_SELL) <= (vystup_podla_EMA_max_zisk_v_bodoch * Point))
{
barva_prikazu = Magenta;
ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL)-vystup_podla_EMA == true : napr.zisk bol 100 bodov, pri dotyku EMA vystupujeme", DoubleToString(vystup_podla_EMA_max_zisk_SELL));
}
else vystup_podla_EMA_max_zisk_SELL = -1; //
}
}
}

else // tu je robeny vystup na zaklade toho, ze cena protla EMA
{
barva_prikazu = DeepPink;

// kedze robime navrat, tak zavreme ked cena prejde cez EMA zo SPODU na HOR
if (OrderType() == OP_BUY && Bid > NormalizeDouble(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0), 5))
{ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY)-vystup_podla_EMA- Bid > iMA == true : cena Bid protla EMA, Bid = ", DoubleToString(Bid)+" > "+DoubleToString(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0)));}

// kedze robime navrat, tak zavreme ked cena prejde cez EMA z VRCHU na DOL
if (OrderType() == OP_SELL && Bid < NormalizeDouble(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0), 5))
{ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL)-vystup_podla_EMA- Bid < iMA == true : cena Bid protla EMA, Bid = ", DoubleToString(Bid)+" < "+DoubleToString(iMA(NULL, Time_frame, vystup_podla_EMA_perioda, 0, MODE_EMA, vystup_podla_EMA_sviecky, 0)));}
}
}


// * * // kedze mam pasmo VSTUPu od 16:00 do 20:00, tak ked tak budem zatvarat az na konci nasledujuceho dena
// 2017 na EURUSD to moc uspechu neprinieslo
if (uzavrit_obchod_na_konci_nasledujiciho_dne == true)
{
// v patek zaviera 22:00 a ostatne dny 24:00
if (Den_v_tyzdni == 5) {
if ((StrToTime(TimeToStr((OrderOpenTime() + 86400), TIME_DATE)) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE)))) &&
(TimeCurrent() >= StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 21:30")))
{
if (OrderType() == OP_BUY) {ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
if (OrderType() == OP_SELL) {ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
}
}

else {
if ((StrToTime(TimeToStr((OrderOpenTime() + 86400), TIME_DATE)) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE)))) &&
(TimeCurrent() >= StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 24:40")))
{
if (OrderType() == OP_BUY) {ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
if (OrderType() == OP_SELL) {ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
}
}

// v patek zaviera 21:00 a ostatne dny 22:00
if (Symbol() == "GOLDs.") {
//if ((OrderOpenTime() + 86400) <= StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 20:30"))
if ((StrToTime(TimeToStr((OrderOpenTime() + 86400), TIME_DATE)) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE)))) &&
(TimeCurrent() >= StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" 20:30")))
{
if (OrderType() == OP_BUY) {ukonci_obchod_BUY = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(BUY) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
if (OrderType() == OP_SELL) {ukonci_obchod_SELL = true; zapisLOG(IntegerToString(OrderTicket()), "OrderClose(SELL) - uzavrit_obchod_na_konci_nasledujiciho_dne == true", "");}
}
}
}


return(0);
}

//+------------------------------------------------------------------+
//| VYPOCET HODNOT PRO ZADANI CEKAJICICH PRIKAZU |
//+------------------------------------------------------------------+
void vypocet_OrderSend_hodnot(string p_BUY_SELL, string p_free)
{
// http://www.forex-pro-zacatecniky.cz/news/zadani-pokynu-typu-stop-a-limit-dil-9-/
// na strankach este pricital k VSTUPnej cene 2 pips, aby nevstupoval hned na maxime pasma, cize HIGH + 2*Point
// k cene VSTUPu by sme mali este pricitat Spread = MarketInfo(Symbol(),MODE_SPREAD) * Point
// potom by bola cena na vstup pre BUY = HIGH + 2*Point + Spread

OrderSend_StopLoss = 0;
OrderSend_TakeProfit = 0;
OrderSend_Price = 0;
OrderSend_Volume = velikost_pozice; // !!! BACHA !!! napr. pri EURGBP musi byt velkost pozice min. 0.1 lotu
OrderSend_Expirace = expirace_hod;

//if (OrderSend_Expirace == 0) OrderSend_Expirace = ((((StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_do_hod)+":"+IntegerToString(vstup_do_min)+":00")) - StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_od_hod)+":"+IntegerToString(vstup_od_min)+":00"))) / 3600);
if (OrderSend_Expirace == 0) OrderSend_Expirace = ((pasmo_VSTUP_DO - pasmo_VSTUP_OD) / 3600);

//if (OrderSend_Expirace > 0) OrderSend_Expirace = (StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))+" "+IntegerToString(vstup_od_hod)+":"+IntegerToString(vstup_od_min)+":00")) + (OrderSend_Expirace * 3600);
if (OrderSend_Expirace > 0) OrderSend_Expirace = pasmo_VSTUP_OD + (OrderSend_Expirace * 3600);

if (koeficient_navysovani_pozic > 0)
{
if (OrdersTotal() > 0)
{
// tu si nacitam posledny otvoreny obchod
if (OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == magic_number)
{
// koeficien bude pouzity len ak v danom dni bol otvoreny predosly obchod, podmienka je tu, aby mi nebralo do uvahy obchody otvorene v predoslych dnoch
if (StrToTime((TimeToStr(OrderOpenTime(), TIME_DATE))) == StrToTime((TimeToStr(TimeCurrent(), TIME_DATE))))
{
OrderSend_Volume = OrderLots() * koeficient_navysovani_pozic; zapisLOG("", "OrderSend_Volume = ",DoubleToString(OrderSend_Volume));
}
}
}
}


// ked som to nemal prevedene, tak mi to hazelo chybu : OrderSend Error 4107 .... invalid price 1.39103000 for OrderSend function
// If your Forex broker uses 4 digits after the dot in quotes and you are trying to use 5 digits in your orders, then you’ll be getting error 4107 during backtesting. The best solution here is to always normalize all the price doubles using the standard MetaTrader function before passing them to OrderSend():
OrderSend_Price = NormalizeDouble(OrderSend_Price, Digits);
OrderSend_StopLoss = NormalizeDouble(OrderSend_StopLoss, Digits);
OrderSend_TakeProfit = NormalizeDouble(OrderSend_TakeProfit, Digits);

if (p_free == "zadani_prikazu")
{
if (p_BUY_SELL == "BUY")
{
zapisLOG("", "TakeProfit",DoubleToString((OrderSend_TakeProfit - OrderSend_Price)/Point));
zapisLOG("", "StopLoss",DoubleToString((OrderSend_Price - OrderSend_StopLoss)/Point));
}

if (p_BUY_SELL == "SELL")
{
zapisLOG("", "TakeProfit",DoubleToString((OrderSend_Price - OrderSend_TakeProfit)/Point));
zapisLOG("", "StopLoss",DoubleToString((OrderSend_StopLoss - OrderSend_Price)/Point));
}
}
}

//+------------------------------------------------------------------+
//| ZADANI PRIKAZU |
//+------------------------------------------------------------------+
void zadani_prikazu(string p_typ_prikazu)
{
// p_typ_prikazu: CMD : napr. OP_BUY je cakajuci prikaz, OP_BUY za Market cenu
// U long příkazu vstupujeme za Ask a tedy vystupujeme za Bid cenu !!! u short zase opacne vstup za Bid, vystup za Ask

if (p_typ_prikazu == "OP_BUY")
{
vypocet_OrderSend_hodnot("BUY", "zadani_prikazu");

OP_ticket_BUY = OrderSend(Symbol(), // SYMBOL : definuje menovy par/index cize instrument, na ktorom obchodujeme
OP_BUY, // CMD : typ prikazu: napr. OP_BUYSTOP je cakajuci prikaz, OP_BUY za Market cenu
OrderSend_Volume, // VOLUME : velkost pozice: napr. 0.01 lotu
Ask, // PRICE : cena, za ktoru budeme nakupovat ... Pokud chceme vstoupit za MARKET (OP_BUY / OP_SELL) volíme buď cenu Ask (pro buy/long) a nebo Bid (pro sell/short).
10, // SLIPPAGE : max. pozadovana odchylka pri exekuci prikazu ... ASI v BODOCH ??? treba zistit
OrderSend_StopLoss, // STOPLOSS :
OrderSend_TakeProfit, // TAKEPROFIT : Pokud nechceme stanovit žádný PT, můžeme doplnit pouze 0.
IntegerToString(magic_number)+" - OP_BUY", // COMMENT :
magic_number, // MAGIC : identifikacne cislo strategie
OrderSend_Expirace, // EXPIRATION : platnost prikazu
Blue); // ARROW_COLOR : barva prikazu

zapisLOG(IntegerToString(OP_ticket_BUY), "OP_BUY", DoubleToString(Ask));

// http://www.forex-pro-zacatecniky.cz/news/errory-pri-pouzivani-ea-dil-12-/
if (OP_ticket_BUY > 0)
{
// na kontrolu ci uz bol v dany den zadany prikaz, ak ano, tak dalsi uz v danom dni nezadavam
Den_zadania_prikazu_BUY = DayOfYear(); // (1 means 1 January,..,365(6) does 31 December)

vystup_podla_EMA_OP_ticket_BUY = OP_ticket_BUY; // aby mi to neosefovalo obchod, ktory presiel do druheho dna

PocitadloArray = PocitadloArray + 1;
TicketArray[PocitadloArray].ticket = OP_ticket_BUY;
TicketArray[PocitadloArray].price = 0;
}
else
{err=GetLastError();
Print("-----------------------------ERROR-OP_BUY-11---------------------------","");
Print("Send error OP_BUY(",err,")_",""); Print("Ask = ",Ask); Print("OrderSend_Volume = ",OrderSend_Volume); Print("OrderSend_Price = ",OrderSend_Price); Print("OrderSend_StopLoss = ",OrderSend_StopLoss); Print("OrderSend_TakeProfit = ",OrderSend_TakeProfit); Print("OrderSend_Expirace = ",OrderSend_Expirace);
Print("-----------------------------ERROR-OP_BUY-12---------------------------","");
}
}


if (p_typ_prikazu == "OP_SELL")
{
vypocet_OrderSend_hodnot("SELL", "zadani_prikazu");

OP_ticket_SELL = OrderSend(Symbol(),
OP_SELL,
OrderSend_Volume,
Bid,
10,
OrderSend_StopLoss,
OrderSend_TakeProfit,
IntegerToString(magic_number)+" - OP_SELL",
magic_number,
OrderSend_Expirace,
Red);

zapisLOG(IntegerToString(OP_ticket_SELL), "OP_SELL", DoubleToString(Bid));

// http://www.forex-pro-zacatecniky.cz/news/errory-pri-pouzivani-ea-dil-12-/
if (OP_ticket_SELL > 0)
{
// na kontrolu ci uz bol v dany den zadany prikaz, ak ano, tak dalsi uz v danom dni nezadavam
Den_zadania_prikazu_SELL = DayOfYear(); // (1 means 1 January,..,365(6) does 31 December)

vystup_podla_EMA_OP_ticket_SELL = OP_ticket_SELL; // aby mi to neosefovalo obchod, ktory presiel do druheho dna

PocitadloArray = PocitadloArray + 1;
TicketArray[PocitadloArray].ticket = OP_ticket_SELL;
TicketArray[PocitadloArray].price = 0;
}
else
{err=GetLastError();
Print("-----------------------------ERROR-OP_SELL-11---------------------------","");
Print("Send error OP_SELL(",err,")_",""); Print("Bid = ",Bid); Print("OrderSend_Volume = ",OrderSend_Volume); Print("OrderSend_Price = ",OrderSend_Price); Print("OrderSend_StopLoss = ",OrderSend_StopLoss); Print("OrderSend_TakeProfit = ",OrderSend_TakeProfit); Print("OrderSend_Expirace = ",OrderSend_Expirace);
Print("-----------------------------ERROR-OP_SELL-12---------------------------","");
}

}

}

//+------------------------------------------------------------------+
//| VYKRESLENIE dacoho do grafu |
//+------------------------------------------------------------------+
void createObject(string object_name, int object_typ, color object_color, datetime object_cas1, double object_cena1, datetime object_cas2, double object_cena2, string object_text)
{
string p_object_name = "";
bool object_created = false;

//Print("-----------------------------object_typ---------------------------",object_typ);
// object_typ = OBJ_RECTANGLE = 16
// object_typ = OBJ_TREND = 2
// object_typ = OBJ_TEXT = 21

if (object_typ == 16) p_object_name = object_name+"-RECTANGLE-"+IntegerToString(MathRand());
else if (object_typ == 2) p_object_name = object_name+"-TREND-"+IntegerToString(MathRand());
else if (object_typ == 21) p_object_name = object_name+"-TEXT-"+IntegerToString(MathRand());
else p_object_name = object_name+"-"+IntegerToString(MathRand());

if(ObjectFind(p_object_name) <= 0) // kontrola, zda objekt neexistuje
{
if (object_typ == 16) object_created = ObjectCreate(0, p_object_name, OBJ_RECTANGLE, 0, object_cas1, object_cena1, object_cas2, object_cena2);
else if (object_typ == 2) object_created = ObjectCreate(0, p_object_name, OBJ_TREND, 0, object_cas1, object_cena1, object_cas2, object_cena1);
else if (object_typ == 21) object_created = ObjectCreate(0, p_object_name, OBJ_TEXT, 0, object_cas1, object_cena1);

if(object_created == true)
{
/*
if (object_name == "BUY-VSTUP-TP")
{
Print("-----------------------------ObjectCreate---------------------------",p_object_name);
Print("-----------------------------ObjectCreate-object_cena2--------------------------",object_cena2);
Print("-----------------------------ObjectCreate-object_cas2--------------------------",object_cas2);
Print("-----------------------------ObjectCreate-object_cena1--------------------------",object_cena1);
Print("-----------------------------ObjectCreate-object_cas1--------------------------",object_cas1);
}*/

ObjectSet(p_object_name, OBJPROP_COLOR, object_color);
ObjectSet(p_object_name, OBJPROP_TIMEFRAMES, OBJ_PERIOD_M1|OBJ_PERIOD_M5|OBJ_PERIOD_M15|OBJ_PERIOD_M30|OBJ_PERIOD_H1|OBJ_PERIOD_H4|OBJ_PERIOD_D1);

if (object_typ == 21)
{
ObjectSetText(p_object_name, object_text, 0, NULL, object_color);
ObjectSetDouble(0, p_object_name, OBJPROP_ANGLE, 90);
}

if (object_typ == 2)
{
ObjectSetInteger(0, p_object_name, OBJPROP_RAY_RIGHT, false);
}
}
}
}




//+---------------------------------------------------------------------+
//| jednotny zapis do DENNIKu ... usnadni pracu napr. s excelom, DB atd.|
//+---------------------------------------------------------------------+
void zapisLOG(string ticket_do_LOGu, string text_do_LOGu, string hodnota_do_LOGu)
{
Print("#"+IntegerToString(magic_number)+"#"+ticket_do_LOGu+"#----------------#"+text_do_LOGu+"#---------------------------#",hodnota_do_LOGu);
}



//+------------------------------------------------------------------+
//| PrintParametre function |
//+------------------------------------------------------------------+
double PrintParametre(string odkud_se_vola)
{
//PrintFormat("Bars = %d, i = %d",Bars,i);

Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------Time_frame--------------------------",Time_frame);

if (vstup_do_hod > 0 || vstup_do_min > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_do_hod-vstup_do_min-------------------------",TimeToString(pasmo_VSTUP_DO, TIME_MINUTES));
if (vstup_od_hod > 0 || vstup_od_min > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_od_hod-vstup_od_min-------------------------",TimeToString(pasmo_VSTUP_OD, TIME_MINUTES));

if (velikost_pozice > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------velikost_pozice--------------------------",velikost_pozice);

if (expirace_hod > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------expirace_hod--------------------------",expirace_hod); // ked som mal takto pomenovanu premennu "platnost_prikazu_hod", tak sa mi niekde nulovala

if (vstup_rozestup_VSTUPov_bodov > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_rozestup_VSTUPov_bodov--------------------------",vstup_rozestup_VSTUPov_bodov);

if (koeficient_navysovani_pozic > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------koeficient_navysovani_pozic--------------------------",koeficient_navysovani_pozic);

if (max_pocet_otvorenych_obchodov_v_danom_dni > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------max_pocet_otvorenych_obchodov_v_danom_dni--------------------------",max_pocet_otvorenych_obchodov_v_danom_dni);

if (vstup_podla_PSAR == true)
{
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_PSAR_maximum--------------------------",vstup_podla_PSAR_maximum);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_PSAR_krok--------------------------",vstup_podla_PSAR_krok);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_PSAR--------------------------",vstup_podla_PSAR);
}

if (vstup_podla_BB == true)
{
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_MINvzdalenost_od_MAIN_bodov--------------------------",vstup_podla_BB_MINvzdalenost_od_MAIN_bodov);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov--------------------------",vstup_podla_BB_MAXvzdalenost_od_MAIN_bodov);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_posun--------------------------",vstup_podla_BB_posun);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_odchylka--------------------------",vstup_podla_BB_odchylka);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB_perioda--------------------------",vstup_podla_BB_perioda);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vstup_podla_BB--------------------------",vstup_podla_BB);
}

if (trailing_stop_bodov > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------trailing_stop_bodov--------------------------",trailing_stop_bodov); // posuvanie SL ak sa trh vyda nasim smerom
if (break_even_bodov > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------break_even_bodov--------------------------",break_even_bodov); // posunutie SL na VSTUP ak cena dosiahne nap. 10 pips zisku
if (break_even_procenta > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------break_even_procenta--------------------------",break_even_procenta); // posunutie SL na VSTUP ak cena dosiahne napr. 50% z TP alebo co ja viem...

if (uzavrit_obchod_hod > 0 || uzavrit_obchod_min > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------uzavrit_obchod_hod-uzavrit_obchod_min-------------------------",IntegerToString(uzavrit_obchod_hod)+":"+IntegerToString(uzavrit_obchod_min));
if (uzavrit_obchod_na_konci_dne == true) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------uzavrit_obchod_na_konci_dne--------------------------",uzavrit_obchod_na_konci_dne); //
if (uzavrit_obchod_na_konci_nasledujiciho_dne == true) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------uzavrit_obchod_na_konci_nasledujiciho_dne--------------------------",uzavrit_obchod_na_konci_nasledujiciho_dne); //

if (vystup_podla_EMA == true)
{
if (vystup_podla_EMA_max_zisk_v_bodoch > 0) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vystup_podla_EMA_max_zisk_v_bodoch--------------------------",vystup_podla_EMA_max_zisk_v_bodoch); // napr. pokial bol zisk len do 100 bodov, tak pri dotyku EMA vystupujem, zrejma nedojde k pohybu, ktory ocakavam
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vystup_podla_EMA_sviecky--------------------------",vystup_podla_EMA_sviecky);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vystup_podla_EMA_perioda--------------------------",vystup_podla_EMA_perioda);
Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------vystup_podla_EMA--------------------------",vystup_podla_EMA); // ak sa cena dotkne bo prekrizi EMA, tak obchod zatvaram, napr. sa to bude dat pouzit ak by som obchodoval bez SL
}

// obchodujem iba vybrane dny, napr. v pondeli ze sa zacinaju preberat z vikendu (slabe pohyby, mala volatilita) a ctvrtek, patek byvaju silne fundamenty (silne pohyby, velka volatilita)
if (obchodovat_Pondeli == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Pondeli--------------------------",obchodovat_Pondeli);
if (obchodovat_Uteri == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Uteri--------------------------",obchodovat_Uteri);
if (obchodovat_Stredu == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Stredu--------------------------",obchodovat_Stredu);
if (obchodovat_Ctvrtek == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Ctvrtek--------------------------",obchodovat_Ctvrtek);
if (obchodovat_Patek == false) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------obchodovat_Patek--------------------------",obchodovat_Patek);

if (NEobchodovat_prazdniny == true) Print("#"+IntegerToString(magic_number)+"#"+"--------------------"+odkud_se_vola+"---------NEobchodovat_prazdniny--------------------------",NEobchodovat_prazdniny); // ci sa bude obchodovat cez prazdniny

return(0);
}

 

OK, tak to posilam sem

 

Ty ses s tím teda nemazal :D Nevěděl jsem že sem nejde vložit soubor :o)

Jen jsem to prolítl, chceš aktuální hodnotu, ale máš tam shift o 1.

vstup_podla_PSAR_0 = iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 1);
vstup_podla_PSAR_1 = iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 2);

V úterý budu mít čas, tak si to hodím do platformy a zkusím replikovat tu výše popisovanou chyb smile

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 11.12.2017 12:10
Odpověď na: danospanos

Ty ses s tím teda nemazal :D Nevěděl jsem že sem nejde vložit soubor :o)

Jen jsem to prolítl, chceš aktuální hodnotu, ale máš tam shift o 1.

vstup_podla_PSAR_0 = iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 1);
vstup_podla_PSAR_1 = iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 2);

V úterý budu mít čas, tak si to hodím do platformy a zkusím replikovat tu výše popisovanou chyb smile

:-) hmm ... je tu i odkaz na google disk

 https://drive.google.com/open?id=1joQR8UiZvnmg_DvmlypIEmZvOf5VKZFb

shift 1 a 2 jsem tam dal, ze to vyskousim jak by se to chovalo ...

v odkazu je to jiz s shift 0 a 1

danospanos
Silver member
avatar
Příspěvky: 106
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 12.12.2017 21:36
Odpověď na: adrian

:-) hmm ... je tu i odkaz na google disk

 https://drive.google.com/open?id=1joQR8UiZvnmg_DvmlypIEmZvOf5VKZFb

shift 1 a 2 jsem tam dal, ze to vyskousim jak by se to chovalo ...

v odkazu je to jiz s shift 0 a 1

Sorry, že jsem to nenapsal hned mohli jsme oba ušetřit spousty času. On se totiž SAR překresluje, tzn. že když jde cena pod tečku, překreslí ji nahoru. Proto jsi pozoroval změnu té tečky, kolem nějaké minuty během té 15ti minutovky :) Tady příklad na obrázku.




Tohle můžeš ignorovat, nechci nikoho poučovat, ale...

1) Nauč se nějaký styl a ten v celém kódu dodržuj. Zlepší to čitelnost pro ostatní, ale i pro tebe, až se k tomu kódu vrátíš po roce. Například tohle je styl pro jádro linuxu, c je podobné mql. https://www.kernel.org/doc/html/v4.10/process/coding-style.html Hlavně tato část je důležitá: "The limit on the length of lines is 80 columns and this is a strongly preferred limit."

2) Používáš moc globálních proměnných. Teď když máš kód v hlavě, tak ti to nepřipadá nijak na obtíž, ale až se budeš chvíli věnovat nečemu jinému, uvítal bys proměnné spíše uvnitř funkci, s čímž souvisí 3.

3) Nás vždycky učili, že funkce, která je delší, než výška tvé obrazovky, je funkce k ničemu. Je špatně čitelná, je nepřehledná, špatně se v ní hledá případná chybička. Zkus ten kód dělit do více funkcí. Opět bude kód přehlednější a také se ti lépe budou psát testy na jednotlivé funkce.

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 13.12.2017 12:17
Odpověď na: danospanos

Sorry, že jsem to nenapsal hned mohli jsme oba ušetřit spousty času. On se totiž SAR překresluje, tzn. že když jde cena pod tečku, překreslí ji nahoru. Proto jsi pozoroval změnu té tečky, kolem nějaké minuty během té 15ti minutovky :) Tady příklad na obrázku.




Tohle můžeš ignorovat, nechci nikoho poučovat, ale...

1) Nauč se nějaký styl a ten v celém kódu dodržuj. Zlepší to čitelnost pro ostatní, ale i pro tebe, až se k tomu kódu vrátíš po roce. Například tohle je styl pro jádro linuxu, c je podobné mql. https://www.kernel.org/doc/html/v4.10/process/coding-style.html Hlavně tato část je důležitá: "The limit on the length of lines is 80 columns and this is a strongly preferred limit."

2) Používáš moc globálních proměnných. Teď když máš kód v hlavě, tak ti to nepřipadá nijak na obtíž, ale až se budeš chvíli věnovat nečemu jinému, uvítal bys proměnné spíše uvnitř funkci, s čímž souvisí 3.

3) Nás vždycky učili, že funkce, která je delší, než výška tvé obrazovky, je funkce k ničemu. Je špatně čitelná, je nepřehledná, špatně se v ní hledá případná chybička. Zkus ten kód dělit do více funkcí. Opět bude kód přehlednější a také se ti lépe budou psát testy na jednotlivé funkce.

ano, to jsem si take vsiml, ze SAR se nevykresli na zacatku nove 15min svicky

ALE jak mam pouzit funkci iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 0); aby jsem na zacatku vykresleni 15min svicky dostal spravnou hodnotu? a ne az po nejakem case cca 4min

z toho mi vypliva, ze funkce iSAR s parametrem 0, je nepouzitelna...

 

danospanos
Silver member
avatar
Příspěvky: 106
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 13.12.2017 20:31
Odpověď na: adrian

ano, to jsem si take vsiml, ze SAR se nevykresli na zacatku nove 15min svicky

ALE jak mam pouzit funkci iSAR(NULL, Time_frame, vstup_podla_PSAR_krok, vstup_podla_PSAR_maximum, 0); aby jsem na zacatku vykresleni 15min svicky dostal spravnou hodnotu? a ne az po nejakem case cca 4min

z toho mi vypliva, ze funkce iSAR s parametrem 0, je nepouzitelna...

 

On se na začátku vykreslí, ale překreslí se, když jde cena nad/pod něj, viz. obrázek.

Kdybys chtěl tu hodnotu z konce 15M svíčky, na začátku 15M, tak se musíš dívat do budoucnosti a to jaksi v reálu nepůjde. A pokud bys něco takovýho chtěl použít v backtestu tak by byl vzdálen daleko od reality.

Záleží asi od způsobu použití, ale v tvém případě, si troufám tvrdit, že ano - nepoužitelná.

adrian
Nováček v diskuzi
avatar
Příspěvky: 11
Více informací o uživateli >>
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RE: Parabolic SAR pouziti v AOS 14.12.2017 09:26
Odpověď na: danospanos

On se na začátku vykreslí, ale překreslí se, když jde cena nad/pod něj, viz. obrázek.

Kdybys chtěl tu hodnotu z konce 15M svíčky, na začátku 15M, tak se musíš dívat do budoucnosti a to jaksi v reálu nepůjde. A pokud bys něco takovýho chtěl použít v backtestu tak by byl vzdálen daleko od reality.

Záleží asi od způsobu použití, ale v tvém případě, si troufám tvrdit, že ano - nepoužitelná.

hmm... tak to jsi mne nepotesil

kazdopadne, diiik za pomoc

budu muset pouzit na otoceni trendu jiny indikator

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
Swissquote Bank