Wiadomości Forex Filmy Forex Eksperci Forex I Wskaźniki Dla Metatrader compra de oro bitcoin en la India

Zastosowanie #include ENUM_DAY_OF_WEEK] StartDay = 1; // dzień rozpoczęcia ENUM_DAY_OF_WEEK EndDay = 5; // Fin del día napis StartTime = "12:30" ; // Czas rozpoczęcia napis EndTime = "14:30" ; // Czas końcowy // Tworzenie harmonogramu Harmonogram s (StartDay, StartTime, EndDay, EndTime); // Wyświetlanie angielskiego opisu harmonogramu. [195] Drukuj ( "Harmonograma:" , s.ToString ()); // Tworzenie pewnych datetimes w celu sprawdzenia względem harmonogramu datetime ted0 = StrToTime (StringConcatenate ( "2018.06.10" , (cadena) (s.TimeEnd. Hora), ":" , (napis) (s.TimeEnd. Minuta))); datetime ted1 = StrToTime [17] (StringConcatenate ( "2018.06.11" , (cadena) (s.TimeEnd. Hora), " : ", (cadena) (s.TimeEnd. Minuto))); // dzień tygodnia jest poza harmonogramem, harmonogram nie powinien być active if (s.IsActive (ted0)) Drukuj ( "Niepowodzenie harmonogramu w" ted0 "=" [17], s.IsActive (ted0)); // dzień tygodnia i czas mieszczą się w harmonogramie, harmonogram powinien być aktywny, jeśli (! S.IsActive (ted1)) Drukuj ( "Niepowodzenie! Harmonogram aktywny w "ted1 " = ", s.IsActive (ted1));

Poręczne funkcje do porównywania liczb zmiennoprzecinkowych bool EQ (doble a, doble b, int [17] dígitos = 8); bool GT (doble a, doble b, dígitos int = [18] 8); bool LT (doble a, doble b, dígitos int = 8]); bool NE (double a, double b, int dígitos = 8); ] bool GE (doble a, doble b, dígitos int = 8); bool LE (doble a, doble b, dígitos int = 8);

Poręczne funkcje zaokrąglania liczb zmiennoprzecinkowych podwójnych RoundToDigit (podwójnych liczb, int cyfr); podwójnych RoundToDigitUp (número doble, dígitos int); doble RoundToDigitDown (número doble, dígitos int) podwójne RoundToStep (podwójne numer, podwójne krok); podwójne RoundToStepUp (podwójne numer,] doble paso); doble RoundToStepDown (número doble, doble paso); RoundPrice doble (double [17] pPrice, cadena pSymbol = NULL); doble RoundVolume (doble pVolume, string pSymbol = [190] NULL);

Czasami przy porównywaniu dwóch podwójnych liczb, które zakładają, że s równe, ale osiągnięte poprzez różne obliczenia, porównanie idzie źle. W rzeczywistości A może różnić się od B w bardzo małej ilości (w miejscu dziesiętnym po przecinku) z powodu błędnych błędów zaokrąglania, więc dokładnechow > , > =, OrderStopLoss ()) if (new_sl = HiddenTakeProfit), jeśli (Zapytaj virtual_stopLoss)

istnieje wiele wersji funkcji iBarShift dla MetaTrader 5. Ta wersja jest jednak wyjątkowo prosta, szybka i poprawna. int iBarShift (const string Symb, const ENUM_TIMEFRAMES TimeFrame, datetime czas, bool exact = false) {int Res = iBars (Symb, TimeFrame, time + 1, UINT_MAX); jeśli (dokładny) jeśli ((TimeFrame! = PERIOD_MN1 || czas> TimeCurrent ()) && Res == iBars (Symb, TimeFrame, time- PeriodSeconds (TimeFrame) + 1, UINT_MAX)) return (-] 1); retorno (Res); }

Funkcja iBars zawarta w tym pliku zawiera obie te niedogodności i działa znacznie szybciej dzięki algorytmowi zapisywania poprzednich wartości. int [17] iBars (string symbol_name, ENUM_TIMEFRAMES Przedział Czasu, datetime start_time, datetime stop_time) // stop_time> start_time {cadena estática LastSymb = NULL; estática ENUM_TIMEFRAMES LastTimeFrame = 0; fecha / hora estática LastTime = 0; fecha / hora estática LastTime0 = 0; static int PerSec = 0; static int PreBars = 0, PreBarsS = 0, PreBarsF = 0; fecha y hora estática LastBAR = 0; fecha y hora estática LastTimeCur = 0; bandera bool estática = verdadero; static int max_bars = TerminalInfoInteger (TERMINAL_MAXBARS); datetime TimeCur; if (timeeframe == 0) timeeframe = _Period; const bool changeTF = LastTimeFrame! = Marco de tiempo; const bool changeSymb = LastSymb! = Symbol_name; const bool change = changeTF || changeSymb || flaga LastTimeFrame = ramy czasowe; LastSymb = nazwa_ symboliczna; if (changeTF) PerSec = :: PeriodSeconds (timeframe); jeżeli (PerSec == 0) {flaga = prawda; return (0);} if (stop_time if (changeSymb) {if (! SymbolInfoInteger (nazwa symbolu, SYMBOL_SELECT)) {SymbolWybierz (nazwa_ symboliczna true); ChartRedraw ();}} TimeCurent = TimeCurrent (); if (Przedział Czasu == PERIODO_W1) TimeCur – = (TimeCur + 345600)% PerSec; // 01.01.1970 – czwartek. Menos 4 dni. Si (Przedział Czasu TimeCur) {flaga = prawda; return (0);} if (timeeframe == PERIOD_MN1) {MqlDateTime dt; TimeToStruct (TimeCur, dt); TimeCur = dt.rok * 12 + dt.mon; } if (changeTF || changeSymb || TimeCur! = LastTimeCur) LastBAR = (datetime) SeriesInfoInteger (nazwa symbolu, Przedział Czasu, SERIES_LASTBAR_DATE); LastTimeCur = TimeCur; jeśli (start_time> LastBAR) {flaga = prawda; return (0);} datetime tS, tF = 0; jeśli (Przedział Czasu == PERIODO_W1) tS = czas_ rozpoczęcia – (początek_czasu + 345599)% PerSec- 1; else if (przedział czasowy = max_bars) PreBars = Bars (nazwa_ symbolu, przedział czasu, czas_początkowy, czas_końcowy); else {if (przedział czasu < PERIOD_W1) tF = stop_time- (stop_time)% PerSec; else if (timeeframe == PERIOD_W1) tF = stop_time- (stop_time + 345600)% PerSec; else // PERIOD_MN1 {MqlDateTime dt0; TimeToStruct (stop_time- 1, dt0); tF = dt0.rok * 12 + dt0.mon; } if (change || tF! = LastTime0) {PreBarsF = Bars (nazwa_ symboliczna, Przedział Czasu, stop_time + 1, UINT_MAX); LastTime0 = tF; } PreBars = PreBarsS-PreBarsF; }} else else PreBars = PreBarsS; bandera = falso; retorno (PreBars); } // + —————————————– —– ——————– + int iBars (ciąg symbol_name, ENUM_TIMEFRAMES ramy czasowe) {powrót (bary (nazwa_znacznika, przedział czasowy));} // + — – ————————————————- – ———— +

W module sygnałów musimy połączyć series de tiempo w konstruktorze: // + —————————– ——— —————————- + // | Constructor // + ————————————- ———- ——————- + CSignalMA :: CSignalMA (void): m_reverse (false), m_ma_period (12), m_ma_shift (0), m_ma_method (MODE_SMA), m_ma_applied ( PRICE_CLOSE [17]), m_pattern_0 (80), m_size_current_bar (40), m_size_previous_bar (20) {// — inicjalizacja chronione dane m_used_series_compañamiento de personas / niños / mujeres }

Pracujemy z tymi obiektami w CSignalMA :: LongCondition] // + ————————————- —- ————————- + // | "Głosowanie", że cena wzrośnie. | // + ————————————– ——— ——————- + int CSignalMA :: LongCondition (void) {if (m_type_trade == 1) // m_type_trade: enum typ handlu: 0 -> KUP, 1 -> SPRZEDAJ, 2 -> KUP i SPRZEDAJ retorno (0); int resultado = 0; int idx = StartIndex (); // — if (m_close.GetData (idx + 1) -m_open.GetData (idx + 1) return (0); jeśli (m_close.GetData (idx) -m_open.GetData (idx) return (0); [ 19] // — przeanalizuj związek między pozycją bliską a ceną wskaźnik na pierwszym analizowanym pasku

и в CSignalMA :: ShortCondition // + ——— ——————————– —————— ——- + // | "Głosowanie", że cena spadnie. | // + ————————————– ——— ——————- + int CSignalMA :: ShortCondition (void) {// — m_type_trade: enum typ handlu: 0 -> KUP, 1 -> SPRZEDAJ, 2 -> KUP i SPRZEDAJ, jeśli (m_type_trade == 0) powrót (0); int resultado = 0; int idx = StartIndex (); // — if (m_open.GetData (idx + 1) -m_close.GetData (idx + 1) return (0); jeśli (m_open.GetData (idx) -m_close.GetData (idx) return (0); [ 19] // — przeanalizuj zależność pozycji ceny zamknięcia i wskaźnika przy pierwszym analizowanym pasku

Jeśli w Expert Advisor TestSignalMAAboveBelow3.mq5 wygenerowany w kreator MQL5 // + ———————————– —————————— + // | Wejścia | // + ————————————— ——– ——————- + // — dane wejściowe dla eksperta dane wejściowe [17] string Expert_Title = "TestSignalMAAboveBelow3" ; // Nazwa dokumentu ulong Expert_MagicNumber = 20884; // bool Expert_EveryTick = false; // // — wejścia dla głównego sygnału

banner