Заработать на ФОРЕКС
Пятница, 31.03.2017, 01:34
Всё для прибыльной торговли на FOREX!
Главная | Добавить в избранное | Сделать стартовойфорекс советники
Меню сайта
Категории раздела
Торгуем прибыльно с Price Action и VSA [27]
Учимся прибыльно торговать с помощью методики Price Action и VSA
Форекс видео уроки [14]
Форекс видео уроки
Основы Финансового Рынка - Азбука Инвестора форекс видео [41]
Форекс видео уроки для трейдеров и инвесторов - Азбука Инвестора
Лучшие брокеры
заработок в интернете форекс бесплатно Виртуальный выделенный сервер для Форекс Виртуальный выделенный сервер для Форекс Виртуальный выделенный сервер для Форекс Виртуальный выделенный сервер для Форекс заработок в интернете заработок на форекс заработок в интернете заработок в интернете заработок в интернете заработок в интернете Виртуальный выделенный сервер для Форекс
Радио Forex
Друзья сайта
Поиск
Наш опрос
Рейтинг брокеров
Всего ответов: 1917
Термины ФОРЕКС
<a href="http://instaforex.com/ru/" rel="nofollow">Форекс портал</a>

Основы языка MQL4. Технические индикаторы и встроенные функции

Часть 1

Введение

Это третья статья из цикла "Основы языка MQL4". В первых двух статьях мы познакомились с основами языка MQL4, фундаментом дальнейшего развития. Сейчас мы будем разбираться, как использовать встроенные функции и функции для работы с техническими индикаторами. Последние будут жизненно необходимы при разработке в дальнейшем ваших советников и индикаторов. Кроме того, мы на простом примере посмотрим, как можно отслеживать торговые сигналы для входа в рынок, что бы вы поняли, как правильно использовать индикаторы. А в конце статьи вы узнаете кое-что новенькое и интересное про сам язык.

Математические функции

Начнем с наиболее простых, но все же используемых и полезных математических функций.

MathAbs

Прототип функции:

double MathAbs(double value)

Очень простая функция, которая возвращает абсолютное значение (модуль числа). Это значит, что, если вы, например, примените ее к отрицательному числу, то в результате получите положительное число.
Примеры использования:

int a=-10;
double b=-20.0;
double c=7.0;
 
a=MathAbs(a); // теперь a равно 10
b=MathAbs(b); // теперь b равно 20.0
c=MathAbs(c); // значение c не изменится, так как, оно и так было положительно

MathCeil, MathFloor и MathRound

Прототипы функций:

double MathCeil(double x)
double MathFloor(double x)
double MathRound(double value)

Эти три функции очень похожи между собой: все они округляют число до целого. Но у каждой своя маленькая особенность:
MathCeil округляет таким образом, что, если имеется даже одна тысячная целого (например, 1.001), то это уже считается целым числом. То есть округление происходит в сторону, где получим большее значение. Например:

double a;
a=MathCeil(1.001);  // a=2.0, даже одна тысячная округляется до целого
a=MathCeil(1.999);  // a=2.0
a=MathCeil(-1.001); // a=-1.0, все правильно, так как, -1.0 больше чем -1.001
a=MathCeil(-1.999); // a=-1.0, правильно, -1.0 больше чем -1.999

MathFloor делает тоже, что и MathCeil, с точностью до наоборот. То есть, если нужно округлить положительное число, то оно просто лишиться дробной части:

double a;
a=MathFloor(1.999); // a=1.0, какой бы большой не была дробная часть, она убирается
a=MathFloor(1.001); // a=1.0
a=MathFloor(-1.001); // a=-2.0, верно, так как, -2.0 меньше чем -1.001
a=MathFloor(-1.999); // a=-2.0, все верно, -2.0 меньше -1.999

MathRound позволяет округлить число в привычном для нас с вами смысле. То есть, если дробная часть достаточно большая (0.5 и более), то она будет округлена до 1. Если дробная часть мала (меньше 0.5), то она будет округлена до 0, то есть она просто исчезнет. Примеры:

double a;
a=MathRound(1.1);  // a=1.0, дробная часть слишком мала (0.1)
a=MathRound(1.57); // a=2.0, дробная часть достаточна, что бы быть округленной до 1
a=MathRound(-3.1); // a=-3.0 недостаточно
a=MathRound(-6.99); // a=-7.0 достаточно

MathMax

MathMin

Прототипы функций:

double MathMax(double value1, double value2)
double MathMin(double value1, double value2)

Это 2 очень похожие функции, которые принимают 2 аргумента, а возвращают соответственно наибольший и наименьший. Примеры:

double a;
a=MathMax(50.0,1.0); // a=50.0
a=MathMin(10.0,12.0); // a=10.0

MathPow

Прототип функции:

double MathPow(double base, double exponent)

Эта функция позволяет возвести число base в степень exponent. Примеры:

double a;
a=MathPow(5.0,2.0); // a=25.0, 5 во 2-ой степени
a=MathPow(2.0,8.0); // a=256.0, 2 в 8-ой степени
a=MathPow(25.0,0.5); // a=5.0, вы же знали, что число в степи 0.5 это его квадратный корень?

MathSqrt

Прототип функции:

double MathSqrt(double x)


Но квадратные корни лучше извлекать с помощью этой функции, так как это ее прямое назначение. Но не вздумайте узнавать корень отрицательного числа, так как вам будет возвращен нуль. Примеры:

double a;
a=MathSqrt(9.0);  // a=3.0
a=MathSqrt(25.0);  // a=5.0
a=MathSqrt(-256.0); // a=0.0, я предупреждал

MathLog

Прототип функции:

double MathLog(double x)

Еще кто-то помнит, что такое логарифм? Логарифм числа a по основанию b равен показателю степени, в которую нужно возвести число b, чтобы получить число a. Широкое применение нашли логарифмы по основаниям e (число Эйлера) — натуральные логарифмы (lna) и по основанию 10 — десятичные логарифмы (lg a). Что бы вспомнить больше, а возможно и узнать что-то новенькое, воспользуйтесь этой ссылкой:
http://ru.wikipedia.org/wiki/Логарифм
Так вот, функция MathLog предназначена для извлечения натурального логарифма из числа х. Не нужно узнавать натуральный логарифм отрицательных чисел или нуля. В таком случае вы получите -1. Примеры использования:

double a;
a=MathLog(10.0);  // a=2.30258509
a=MathLog(0.0);  // a=-1.0, неправильно
a=MathLog(-10.0); // a=-1.0, неверно

MathExp

Прототип функции:

double MathExp(double d)

Эта функция возвращает число e, возведенное в степень d. Многие наверняка не помнят про это число.
e — математическая константа, основание натурального логарифма, иррациональное и трансцендентное число. e = 2,718281828459045… Иногда число e называют числом Эйлера или неперовым числом. Играет важную роль в дифференциальном и интегральном исчислении. Узнать больше про число Эйлера можно по этой ссылке:
http://ru.wikipedia.org/wiki/Число_Эйлера
Если вы укажите слишком большую степень, то произойдет переполнение и будет возвращен нуль. Насколько большой должна быть степень, что бы произошла ошибка? Давайте узнаем это и проделаем небольшой эксперимент:

double exponent=1.0; // тут будем хранить показатель степени
double result=1.0;  // возвращаемый функцией результат
int i=0; // количество итераций цикла
 
while(result!=0.0) // пока результат не равен нулю(пока не произошло переполнение)
{
 result=MathExp(exponent); // запоминаем очередной результат
 exponent*=10.0;  // увеличиваем показатель степени
 i++;  // очередная итерация пройдена
}
MessageBox("i="+i); // результат эксперимента

А происходит следующее: каждый раз мы пытаемся вызвать функцию MathExp и с каждой итерацией степень увеличивается в 10 раз, пока, в конце концов, не произойдет переполнение и не будет возвращен нуль. В результате я получил i=310, что означает: в качестве степени вы можете использовать числа 1*10 в 309 степени (только представьте себе число длиной в 309 цифр!!). Поэтому, я думаю, что про переполнение вы можете не беспокоится.

MathMod

Прототип функции:

double MathMod(double value,double value2)

Эта функция позволяет узнать остаток от деления двух чисел. Например, 5 поделить на 2 равно 2 и остаток равен 1. Первый аргумент value – что делим, второй value2 – на что. И возвращается остаток. Примеры:

double a;
 
a=MathExp(5,2); // a=1.0
a=MathExp(10,3); // a=1.0, все правильно
a=MathExp(50,10); // a=0.0, делится без остатка

MathRand и MathSrand

Прототипы функций:

int MathRand()
void MathSrand(int seed)

MathRand возвращает одно за другим псевдослучайные целые числа в диапазоне от 0 до 32767. Тут у вас возникает куча вопросов: что значит приставка «псевдо»? Что за странный диапазон, а если мне надо от 5 до 10? Почему именно 32767? Отвечаю по порядку:
«Псевдо» означает, что числа не совсем случайные и все же зависят от чего-то. Допустим, вы написали скрипт, который выдает 5 псевдослучайных чисел, например, так:

int a=0;
 
while(a<5)
{
 MessageBox(random=”+MathRand());
 a++;
}

Так вот, числа действительно будут случайными, но запустив скрипт еще раз, вы заметите, что последовательность будет постоянно повторяться. Это все потому, что существует число, от которого отталкивается функция MathRand. Будем называть его начальным числом. Что бы его изменить, нужно воспользоваться другой функцией – MathSrand. Эта функция принимает единственный аргумент – начальное число, от которого будут зависеть все псевдослучайные числа. Представьте себе, что начальное число – это плод, из которого вырастет дерево (случайные числа). По умолчанию начальное число равно единице. Таким образом, что бы получить действительно случайную последовательность нам нужно сначала присвоить начальному числу уникальное значение. Как это сделать? Есть еще одна функция TimeLocal, которая не имеет аргументов и возвращает количество секунд, прошедших после 00:00 1 января 1970 года. Эта функция идеально подходит, так как в большинстве случаев получим уникальное число. Ну как, еще не запутались? Вот как это выглядит:

int a=0;
MathSrand(TimeLocal()); // присваиваем начальному числу уникальное значение
 
while(a<5)
{
 MessageBox(random=”+MathRand());
 a++;
}

Теперь каждый раз будем получать новую последовательность. Поехали дальше.
От 0 до 32767. Почему 32767? Смотрите: максимальное значение, которое может принимать int равно 2 в степени 16 (потому что значение переменной типа int занимает 16 бит в памяти компьютера, без учета знака) равно 32768, но так как мы считаем с нуля, то нужно отнять единицу. Вот и получили 32767.
Что бы получить любой нужный вам диапазон, нужно воспользоваться оператором % - остаток от деления. Например, если нужно получить случайные числа в диапазоне от 0 до 5:

int a=0;
MathSrand(TimeLocal());
while(a<5)
{
 MessageBox(random=”+MathRand()%6);
 a++;
}

Обратите внимание, что мы написали MathRand()%6, а не MathRand()%5, это потому, что наш диапазон начинается с нуля, то есть нужно добавить еще единицу. Теперь, допустим, вам нужны случайные числа в диапазоне от 5 до 10:

MessageBox(random=”+MathRand()%6+5); // просто добавляем нужное нам смещение

Аналогично можно получить и диапазон с отрицательными числами, например, от -5 до 5:

MessageBox(random=”+MathRand()%11-5);

Если вам нужны только отрицательные числа, то умножьте результат на -1. Например, нужен диапазон от -10 до -20:

MessageBox(random=”+(MathRand()%11+10)*(-1));

Если вам нужно получить случайное дробное число, например, в диапазоне от 0.0 до 1.0 с точностью до тысячной, то воспользуйтесь таким кодом:

MessageBox(random=”+MathRand()%1001/1000.0);

Сначала мы создаем случайное число в диапазоне от 0 до 1000, а потом делим его на 1000.0. Обратите внимание, что делить нужно именно на 1000.0 (с плавающей запятой), а не на 1000(целое). В противном случае получим нуль, так как будет произведено округление.

 



Наш выбор брокеров
forex4you roboforex форекс бесплатно заработать на форекс instaforex nordfx

Копирование
VPS для Форекс
vps сервер для форекс
Заработать на ФОРЕКС
памм инвестирование
Форекс обзор
<a href="http://instaforex.com/ru/" rel="nofollow">Форекс портал</a>
Наша кнопка
Установите нашу кнопку себе на сайт

Форекс советники

Торговые сессии
Котировки Sell/Buy
vps для форекс
Журнал
FOREX MAGAZINE
Форекс рассылки
FxMail.ru
Рекомендуемые Форекс рассылки
Форма входа
Статистика
vps для форекс сервер для форекс
Онлайн всего: 2
Гостей: 2
Пользователей: 0
Календарь
«  Март 2017  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Торговля на финансовых рынках сопряжена с риском. Все материалы носят исключительно ознакомительный характер. Администрация сайта не несет ответственности за принимаемые Вами решения.
Copyright Profit © 2010 - 2017

Облако тегов: форекс для начинающих форекс для начинающих видео форекс для новичков форекс для тебя форекс для чайников форекс анализ технический анализ форекс прогноз форекс аналитика рейтинг форекс брокеров форекс видео брокеры форекс лучшие брокеры форекс надежный брокер форекс форекс брокеры отзывы самый лучший форекс брокер MQL4 Волновой форекс анализ и прогноз mql4 com язык mql4 mql4 программирование mql4 учебник Форекс аналитика от Trading Central трейдер VSA форекс вебинар бесплатные советники форекс советники форекс бесплатно vps для форекс форекс сервер советники форекс ПАММ памм счета стратегии форекс торговые стратегии форекс зaрaботaть нa форекс волновой анализ форекс волновой анализ рынка форекс волновой анализ волновой анализ рынка волновой анализ эллиотта волновой анализ элиота аналитика рынка форекс аналитика форекс аналитика форекс на каждый день форекс аналитика прогнозы trading central аналитика аналитика форекс на сегодня trading central заработок на форекс форекс советники vps лучшие советники форекс форекс советники бесплатно Форекс советник аналитика форекс прогноз ежедневная форекс аналитика форекс новости аналитика советники форекс 2014 прибыльные советники форекс советники форекс скачать скачать советник форекс советники форекс 2015 аналитика форекс евро форекс аналити лучшая аналитика форекс импульсный уровень форекс аналитика форекс евро доллар trading central отзывы прогнозы от trading central технический анализ форекс анализ рынка форекс фундаментальный анализ форекс Анализ Форекс нелинейный волновой анализ упрощенн волновой анализ эл волновой анализ eur usd теория волн технический анализ рынка прогноз доллара форекс прогноз рынка форекс форекс прогноз евро доллар аналитика форекс прогнозы прогноз форекс на сегодня аналитика рынка аналитика евро форекс аналитика форекс евро дол прогноз аналитика форекс графический анализ форекс свечной анализ на форекс Фундаментальный анализ форекс на сегодня прогноз рынка форек фундаменталь прогноз форекс 2016 форекс прогноз евро технический анали технический анализ для начинающих технический анализ трейдеров