Подписаться на мою рассылку



Материалы в категории ""


На главную страницу

May 12, 2007

Эксперт по теории Хаоса Б.Вильямса: как анализировать только сформировавшиеся бары (исходный код)

В этом выпуске я выложу получившийся исходный код.


May 11, 2007

Эксперт по теории Хаоса Б.Вильямса: как анализировать только сформировавшиеся бары

В этом выпуске я расскажу, как анализировать только сформировавшиеся бары. Я считаю, что совершенно бесполезно, и даже вредно, смотреть на показатели индикаторов бара, который еще не сформировался. Дело в том, что может быть в эту секунду индикаторы и сигнализируют о медвежьих настроениях, но уже через небольшое время на том же баре показатели индикаторов будут совершенно противоположными.

Именно по этой причине я никогда не смотрю на последний, несформировавшийся бар. Своей традиции я не изменю и при написании нашего эксперта по теории хаоса. Я буду выходить из функции start(), если мы последний сформировавшийся бар уже анализировали.


May 5, 2007

Эксперт по теории Хаоса Б.Вильямса: определение текущего состояния (исходный код)

В прошлом выпуске я рассказал о том, как при запуске эксперта определить его состояние, т.е. стоим ли мы в покупку, или же мы медвежим, или же мы квадратные (т.е. без открытых позиций).

В этом выпуске я выложу полный исходный код того, что у нас на данном этапе получилось.


May 4, 2007

Эксперт по теории Хаоса Б.Вильямса: определение текущего состояния

В прошлом выпуске я рассказал о том, как мы будем рассчитывать магическое число для нашего эксперта, чтобы отличать позиции, открытые нашим экспертом на определенном тайм-фрейме, от позиций, открытых другими экспертами или на других временных периодах.

В этом выпуске я расскажу о том, как при запуске эксперта определить его состояние, т.е. стоим ли мы в покупку, или же мы медвежим, или же мы квадратные (т.е. без открытых позиций).


April 22, 2007

Вышел 167-й номер журнала для трейдеров FOREX MAGAZINE



  Журнал распространяется бесплатно.
  • Формат: PDF
  • Размер файла: 3.90 Mb

СКАЧАТЬ ЖУРНАЛ !

Архив номеров FOREX MAGAZINE

Лицензия Минпечати Эл No ФС 77-20968
ООО "ФорексМагазин"

Читайте в номере от 23 марта 2007 года:


April 15, 2007

Эксперт по теории Хаоса Б.Вильямса: магическое число

В прошлом выпуске я начал написание эксперта, торгующего по теории Хаоса Б.Вильямса. Я разбил большую задачу написания эксперта на несколько маленьких блоков и тем самым заложил план или структуру нашего эксперта.

Этим выпуском я начинаю практическую реализацию каждого блока. Вначале реализуем алгоритм вычисления магического числа, уникального для этого эксперта и периода графика.


April 4, 2007

Эксперт по теории хаоса Билла Вильямса: обзор

Сегодняшним постом я начинаю публикацию своих действий по созданию эксперта, который будет торговать в соответствии с теорией хаоса Билла Вильямса. У этого эксперта будет только ограничение: он не будет использовать сигналы из пятого измерения.

Я очень долго думал, в каком формате провести это практическое занятие в рамках моего блога, и пришел к выводу, что наилучшим выходом будет, если я каждый день буду дополнять код моего эксперта, начав с абсолютного нуля. В этом случае Вы сможете шаг за шагом пройти через все этапы, через которые обычно проходит создатель экспертов. Вместе со мной Вы сможете повторить все мои ошибки и почувствовать ход моей мысли. Даже если он будет иногда идти в неправильном направлении.

Это будет своего рода онлайн дневник по созданию эксперта. Сразу хочу предупредить, что зачастую первоначальные мысли через несколько дней могут измениться или быть оптимизированы. В результате этого часто приходится выкидывать в корзину весь предыдущий код. Поэтому прошу в любом случае не кидать в меня помидоры, а пройти со мной весь этот непростой, но очень приятный путь создания эксперта с самого начала и до этапа тестирования его на исторических данных.

Итак, начнем...


March 31, 2007

iBWMFI() - функция в эксперте для расчета значения Market Facilitation Index (BW MFI)

В прошлом выпуске я рассказал, как рассчитывается Индекс Облегчения Рынка (Market Facilitation Index, BW MFI) и какие сигналы он подает.

В этом выпуске я расскажу, как этот индикатор можно использовать в Ваших экспертах.


March 27, 2007

Индекс Облегчения Рынка (Market Facilitation Index, BW MFI)

Индикатор рассчитывается по формуле:

BW MFI = (HIGH - LOW) / VOLUME


March 23, 2007

Как выходить из рынка, захватив не менее 80% движения

Чувствительная к ценовой динамике методика выхода из рынка позволяет зафиксировать прибыль в последних 10% тренда, захватив не менее 80% движения (со слов Б.Вильямса).

Билл Вильямс предложил несколько способов установки Stop Loss ордеров:


March 21, 2007

Пятое измерение: сигнал на продажу выше Линии Баланса

По сути своей сигнал на продажу выше Линии Баланса очень похож на сигнал на покупку ниже Линии Баланса. В обоих случаях ставка делается на "приближение" цены к Линии Баланса, т.е. цена будет "подниматься на гору".


March 16, 2007

Пятое измерение: сигнал на продажу ниже Линии Баланса

Сигнал на продажу ниже Линии Баланса очень похож по своей сути на сигнал на покупку выше Линии Баланса. В обоих случаях ставка делается на "удаление" цены от Линии Баланса.

Согласно правилу №4 нам нужен всего один минимум для формирования сигнала:

  1. Для покупки (продажи) необходим еще один новый максимум (минимум), если Вы идете от Линии Баланса, и два новых максимума (минимума), если Вы приближаетесь к Линии Баланса.


March 15, 2007

Пятое измерение рынка: сигнал на покупку ниже Линии Баланса

В прошлых выпусках я рассказал о том, как определить базовый бар и о сигнале на покупку выше Линии Баланса. В этом выпуске я подробно опишу сигнал на покупку ниже Линии Баланса.


March 8, 2007

Пятое измерение рынка: сигнал на покупку выше Линии Баланса

В прошлом выпуске я рассказал, как определить базовый бар на покупку или продажу. О второй необходимой составляющей - поиске момента покупки или продажи Линии Баланса я начну рассказывать в этом выпуске. Начну с сигнала на покупку выше Линии Баланса.


March 2, 2007

Пятое измерение рынка: торговля Линий Баланса

Линия Баланса – это линия, на которой бы находилась цена, если бы не поступало новой информации (Хаоса), влияющей на рынок в настоящей момент. Б.Вильямс попытался с помощью сложнейших математических расчетов и моделирования на компьютере найти эту Линию Баланса и построить гистограмму, которая показывала бы расстояние между ценой и Линией Баланса. К его удивлению оказалось, что это расстояние очень хорошо и с достаточной степенью достоверности описывается гистограммой Awesome Oscillator.


March 1, 2007

Зональная торговля - четвертое измерение рынка Б.Вильямса

Когда движущая сила (Awesome Oscillator - АО) и ускорение (Acceleration/Deceleration - АС) направлены в одну сторону (оба зеленые или оба красные) - это означает, что движущая сила не только движется в этом направлении, но и еще ускоряется. На этом принципе базируется зональная торговля (четвертое измерение Б.Вильямса).


February 28, 2007

Acceleration/Deceleration Oscillator (AC): сигналы на покупку "ниже нулевой линии" / на продажу "выше нулевой линии"

В прошлом выпуске я рассказал о сигналах индикатора Acceleration/Deceleration Oscillator (AC) на покупку "выше нулевой линии" / на продажу "ниже нулевой линии". В этом выпуске я расскажу о сигналах Acceleration/Deceleration Oscillator (AC) на покупку "ниже нулевой линии" / на продажу "выше нулевой линии".

Если гистограмма AC ниже ноля, то сигнал на покупку "ниже нулевой линии" образуется, когда появилось три последовательных столбца с более высокими значениями, чем самый последний наименьший столбец.


February 22, 2007

iAC(): Acceleration/Deceleration Oscillator (AC) - третье измерение рынка

Индикатор Ускорения/Замедления (Acceleration/Deceleration, AC) измеряет ускорение и замедление движущей силы (третье измерение).

Предположим, мяч катится по улице (с помощью Awesome Oscillator можно определить его движущую силу). Если дорога пойдет в гору, то мяч начнет замедляться (т.е. у него появится обратное ускорение), и хотя Awesome Oscillator (AO) будет по-прежнему правильно определять движущую силу мяча, скоро наступит момент, когда мяч остановится. Чтобы этот момент не застал трейдера врасплох, Б.Вильямс предлагает использовать индикатор Acceleration/Deceleration (АС) для измерения этого ускорения. Прежде, чем поменяется динамика цены, изменится движущая сила. А еще раньше изменится ускорение. Поэтому индикатор Acceleration/Deceleration – важная составляющая успешной торговли.


February 21, 2007

Awesome Oscillator (AO): сигнал на покупку/продажу два пика

В предыдущих выпусках я рассмотрел первые два сигнала индикатора Awesome Oscillator (AO):

В этом выпуске я расскажу о третьем виде сигнала индикатора Awesome Oscillator (AO): сигнале на покупку/продажу "два пика".


February 15, 2007

Awesome Oscillator (AO): сигналы на покупку/продажу "пересечение нулевой линии"

Сигнал на покупку (продажу) "пересечение нулевой линии" появляется, когда гистограмма пересекает линию ноля снизу вверх (сверху вниз) – см. рис. 1.

В этом случае также выставляем отложенный ордер Buy Stop (Sell Stop) на 1 пипс выше максимума (ниже минимума) сигнального бара.

В случае сигнала на покупку "пересечение нулевой линии" столбец "B" (сигнальный) обязательно зеленый, а в случае сигнала на продажу – красный.


February 14, 2007

Awesome Oscillator (AO): сигналы на покупку/продажу "блюдце"

Сигнал на покупку "блюдце"

Сигнал возникает, когда гистограмма, расположенная выше нулевой линии, меняет направление с нисходящего на восходящее (рис. 1).

Столбец "A" должен быть выше столбца "B" и может быть любого цвета. Столбец "B" должен быть красным. Столбец "C" (сигнальный) должен быть зеленым.

Сигнальный бар - бар, на котором образовался сигнальный столбец.


February 9, 2007

iAO(): Волшебный Осциллятор Билла Вильямса (Awesome Oscillator - AO) - второе измерение рынка

Волшебный осциллятор (Awesome Oscillator - AO) определяет движущую силу рынка (второе измерение) в данный момент по 5 последним барам, сравнивая их с движущей силой на последних 34 барах.

Awesome Oscillator – это разница, полученная вычитанием 34-периодного простого скользящего среднего, построенного по центральным значениям баров (H+L)/2, из 5-периодной SMA по центральным значениям баров (H+L)/2. На графике индикатор представляется в виде гистограммы (рис. 1).


February 8, 2007

iFractals(): фракталы Б.Вильямса - первое измерение рынка

Фрактал на покупку – серия из пяти последовательных баров, в которой перед самым высоким максимумом и за ним находятся по два бара с более низкими максимумами.

Фрактал на продажу – серия из пяти последовательных баров, в которой перед самым низким минимумом и за ним находятся по два бара с более высокими минимумами.


February 7, 2007

iGator() - определение периодов сна и бодроствования Аллигатора с помощью Gator Oscillator

Gator Oscillator показывает степень схождения/расхождения Линий Баланса (рис. 1).

Для добавления индикатора Gator на график платформы MetaTrader 4 выберите пункт меню "Вставка -> Индикаторы -> Билла Вильямса - Gator Oscillator".


February 2, 2007

iAlligator() - Аллигатор Билла Вильямса (Alligator)

Рассмотрение функций языка MQL4, с помощью которых Вы можете использовать встроенные индикаторы технического анализа в своих экспертах, я начну с функции iAlligator().

С помощью этой функции можно получить значения Аллигатора Билла Вильямса (Alligator).

Думаю, будет нелишним сначала рассказать о самом идикаторе.


February 1, 2007

Стандартные индикаторы технического анализа в MQL4

Этим постом я начинаю рассматривать стандартные индикаторы технического анализа, которые можно использовать в экспертах.

MetaTrader 4 - один из лучших клиентских терминалов, с очень большим списком встроенных индикаторов технического анализа.

В своих предыдущих выпусках, посвященных техническому анализу, теории хаоса Б.Вильямса, индикатору Ишимоку и теории Демарка, я рассказал почти о каждом из них.

Вот полный список функций языка MQL4, с помощью которых Вы можете использовать встроенные индикаторы технического анализа в своих экспертах:


January 30, 2007

Пример работы функции Sort() - сортировки методом пузырька

В прошлом выпуске я привел исходный код функции Sort() глобального массива, которая осуществляет сортировку методом пузырька.

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


January 25, 2007

Исходный код функции сортировки методом пузырька

В прошлом выпуске я рассказал о сортировке методом пузырька. В этом выпуске я приведу исходный код функции, которая сортирует массив таким методом.


January 23, 2007

Сортировка методом пузырька

В прошлых выпусках я начал рассмотрение способа реализации глобальных массивов и рассказал о функциях Count(), AddItem(), SearchItem(), GetItem() и DeleteItem().

В этом выпуске я расскажу о том, как можно отсортировать глобальный массив по возрастанию или убыванию. Один из наиболее простых в реализации, но медленных по скорости методов сортировки - метод пузырька.


January 19, 2007

Эксперт, торгующий в ночное время: реализация трейлинг стопа

На данный момент я разобрал практически весь код "ночного" эксперта. Мне осталось рассказать лишь о реализации трейлинг-стопа.

Напомню, что Trailing Stop (трейлинг стоп) – это алгоритм управления уровнем Stop Loss ордера. После выставления трейлинг-стопа (например, на Х пипсов) происходит следующее:

  • MetaTrader не предпринимает никаких действий до того момента, пока по открытой позиции не образуется прибыль в Х пипсов. После этого MetaTrader выставляет Stop Loss ордер на расстоянии Х пипсов от текущей цены (в данном случае - на уровне безубыточности).

  • После выполнения первого шага MetaTrader посылает команду на изменение уровня Stop Loss ордера на расстояние Х пипсов от текущей котировки каждый раз, когда расстояние между ней и старым уровнем ордера превысит Х пипсов. В результате этого Stop Loss ордер «подтягивается» к текущей цене.


January 17, 2007

Эксперт, торгующий в ночное время: функция start() - продолжение

В прошлом выпуске я начал рассмотрение того, как реализована функция start() "ночного" эксперта. В этом выпуске я рассмотрю оставшиеся части кода эксперта.


January 16, 2007

Эксперт, торгующий в ночное время: функция start()

В этом выпуске я расскажу о том, как работает функция start() "ночного" эксперта, который был описан в прошлых выпусках.


January 12, 2007

Эксперт, торгующий в ночное время: функция init()

В прошлом выпуске я разместил код эксперта, торгующего в ночное время. Давайте разберем, как же этот эксперт работает. Начнем с функции init().


January 9, 2007

Торговля в ночное время

Что-то все так мне и не получается приступить к рассмотрению способов сортировки глобальных массивов. Сегодня я получил очередное письмо от читателя моего блога с просьбой помочь в реализации ночной торговли на языке MQL4. Данное письмо мне показалось интересным и я написал эксперта, который так интересовал автора письма.

Основная идея эксперта заключается в том, что определенное время (задается параметром StartTime) эксперт выставляет buy limit ордер на BuyLimit_Diff пипсов ниже Bid и sell limit ордер на SellLimit_Diff пипсов выше цены Ask. Дата эксперации ордеров задается в минутах в параметре Expiration. Если один из отложенных ордеров срабатывает, то второй удаляется (т.е. они OCO ордера - One Cancells Other). Stop Loss ордер выставляется на расстоянии BuyLimit_SL и SellLimit_SL пипсов от цены ордера соответственно.

Величина трейлинг стопа задается в параметре TrailingStop.


January 5, 2007

Пример ограничения числа одновременно открытых позиций

В прошлом выпуске я описал функции StartTrading() и StopTrading(), с помощью которых можно ограничить количество одновременно открытых позиций и выставленных ордеров.

В этом выпуске я приведу пример использования этих функций. Напишем простого эксперта, который на каждом тике открывает новую позицию на покупку. Максимально возможное число открытых позиций пусть будет 3.


January 4, 2007

Как ограничить количество одновременно открытых позиций/отложенных ордеров

По плану в этом выпуске у меня было изложение теории сортировки глобального массива методом пузырька (медленным методом, но простым в реализации), после вчерашнего письма от клиента мне показалось, что читателям моего блога будет интересно узнать, как можно ограничить количество одновременно открытых позиций и выставленных отложенных ордеров.

Дело в том, что если просто проверять количество позиций с помощью функции OrdersTotal() и сразу же открытие новой позиции, то в случае, когда эксперт прикреплен на графики разных периодов, но по одному и тому же инструменту, мы получим "лишние" открытые позиции. Чтобы избежать этого, надо использовать критические секции.


December 28, 2006

Глобальные массивы: функция DeleteItem()

В этом выпуске я расскажу о функции DeleteItem(), с помощью которой Вы сможете удалить элемент с индексом index из массива array:

   bool DeleteItem(string array, int index, bool &is_sorted) 

Функция возвращает true в случае успешного удаления и false - в случае ошибки.


December 27, 2006

Глобальные массивы: функция GetItem()

Очень полезной функцией для работы с глобальным массивом может стать функция GetItem():

   bool GetItem(string array, int index, double &result) 

Эта функция пытается получить значение элемента с индексом index и вернуть это значение через переменную result в переменную, указанную в качестве третьего параметра при вызове этой функции.


December 22, 2006

Глобальные массивы: технология поиска

В прошлом выпуске я привел код функции SearchItem(), с помощью которой можно найти элемент в массиве.

Эта функция возвращает:

  • индекс найденного элемента в массиве, если элемент найден; или
  • 0 - если элемента в массиве нет; или
  • -1 - если произошла какая-то ошибка.

Для того, чтобы понять принцип работы этой функции, будет полезно рассказать о различных технологиях поиска.


December 21, 2006

Глобальные массивы: функция SearchItem()

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

Технология поиска будет зависеть от того, упорядочен ли наш массив:

  • Если массив неупорядоченный, то самым очевидным методом найти какой-нибудь элемент будет простой перебор всех элементов массива.
  • Если массив упорядоченный, то наилучшим решением (наиболее оптимальным по скорости поиска) будет двоичный поиск.

Итак, напишем функцию SearchItem(), которая осуществляет поиск в массиве и возвращает:

  • индекс найденного элемента в массиве, если элемент найден; или
  • 0 - если элемента в массиве нет; или
  • -1 - если произошла какая-то ошибка.


December 19, 2006

Глобальные массивы: функция AddItem()

В этомы выпуске я опишу функцию AddItem(), которую мы будем использовать для добавления нового элемента в массив.


December 15, 2006

Реализация глобального массива: обзор задачи

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

Очень часто перед трейдером стоит задача сохранения массивов данных (список тикеров позиций, открытых этим экспертом, и т.д.) в глобальных переменных.

Конечно, можно все данные хранить в переменных эксперта, но при перезапуске клиентского терминала они будут потеряны, поэтому лучше критические данные, которые нельзя потерять ни в коем случае, хранить не в памяти, а сразу в глобальных переменных.


December 14, 2006

GlobalVariablesDeleteAll() - удаление глобальных переменных

В прошлых выпусках мы рассмотрели огромное количество функций, которые используются при работе с глобальными переменными, а также я привел большое количество полезных примеров практического использования этих функций.

Фактически только одна функция осталась неописанной - GlobalVariablesDeleteAll().


December 8, 2006

GlobalVariableName(): имя глобальной переменной

В этом выпуске я расскажу о функции GlobalVariableName():

   string GlobalVariableName(int index)

Функция GlobalVariableName() возвращает имя глобальной переменной с номером index. Порядковый номер переменной должен быть большим или равным нулю, но меньше, чем значение, возвращаемое функцией GlobalVariablesTotal().


December 7, 2006

GlobalVariablesTotal() - количество глобальных переменных

В прошлых выпусках я рассказал об очень полезных функциях, предназначенных для работы с глобальными переменными:

Рассмотренных ранее функций вполне достаточно, чтобы выполнить любое действие с глобальной переменной, если известно ее имя. Однако иногда Вы можете не знать имени глобальной переменной и Вам захочется ее найти среди других переменных.

В этом Вам помогут функции GlobalVariablesTotal() и GlobalVariableName().


December 6, 2006

"Критическая секция": функции Lock() и Unlock()

В прошлом выпуске я начал рассказывать о критических секциях и привел исходный код функций, с помощью которых эти критические секции реализуются: Lock() и Unlock().

В этом выпуске я хотел остановится на этих функциях подробнее.


December 1, 2006

"Критическая секция": разграничение доступа к ресурсу

В этом выпуске я расскажу о способе организации "критической секции" в советнике.

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

Для того, чтобы избежать этого, мы создадим объект "критическая секция", который может находиться в двух состояниях:

  1. "зеленый свет" (-1); и
  2. "красный свет" (1).

В каждый конкретный момент только один советник может получить доступ к данным. Пока советник получает данные, будет гореть "красный свет" и другие советники будут ждать "зеленового света". Если горит "зеленый свет", то дорога свободна, т.к. никто в данный момент к данным не обращается.


GlobalVariableDel() - удаление глобальной переменной

В этом выпуске я расскажу о том, как удалить глобальную переменную. Для этого используется функция GlobalVariableDel():

   bool GlobalVariableDel(string name)


November 30, 2006

GlobalVariableGet() - получение значения глобальной переменной

В прошлых выпусках я рассказал о том, как:

  • проверить существование глобальной переменной с помощью функции GlobalVariableCheck();
  • установить новое значение глобальной переменной - GlobalVariableSet();
  • изменить значение глобальной переменной только в том случае, если старое значение равно определенному значению - функция GlobalVariableSetOnCondition().

В этом же выпуске я расскажу о функции GlobalVariableGet(), с помощью которой можно получить значение глобальной переменной.


November 22, 2006

Функции StartTrading() и StopTrading()

В прошлом выпуске я привел исходные коды двух функций: StartTrading() и StopTrading().

В этом выпуске я расскажу о том, что делают эти функции и как использовать.


November 21, 2006

Пример использования функции GlobalVariableSetOnCondition()

В прошлом выпуске я рассказал о функции GlobalVariableSetOnCondition().

В этом же выпуске я хотел бы рассмотреть пример ее практического использования.


November 18, 2006

Календарь событий рынка FOREX на 20.11.2006-24.11.2006

Каждую неделю Вы сможете найти на моем сайте календарь предстоящих событий в мире, которые могут повлиять на динамику валют на рынке FOREX.


November 17, 2006

GlobalVariableSetOnCondition() - установка нового значения глобальной переменной, если текущее ее значение равно заданному значению

В прошлом выпуске я рассказал о функции GlobalVariableSet(), с помощью которой можно присвоить новое значение глобальной переменной.

К счастью, создатели языка MetaQuotes Language 4 являются профессиональными программистами и заранее могут предугадать, что может понадобиться трейдеру при написании экспертов. Я им очень благодарен, что они включили в список функций языка MetaQuotes Language 4 функцию GlobalVariableSetOnCondition().

Давайте же рассмотрим, чем так полезна эта функция.


November 16, 2006

GlobalVariableSet() - установка нового значения глобальной переменной

В прошлом выпуске я рассказал о том, как проверить наличие глобальной переменной с помощью функции GlobalVariableCheck().

Предположим, что ее не существует или же нам надо изменить ее значение. В этом случае надо использовать функцию GlobalVariableSet().


November 9, 2006

GlobalVariableCheck(): проверка существования глобальной переменной

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

Для человека, имеющего уже опыт написания экспертов, выражение "глобальные переменные" может внести небольшую путанницу. Дело в том, что на самом деле существует два вида "глобальных переменных":

  • переменные, которые видны из любой функции ОДНОГО эксперта (т.е. являются глобальными в пределах этого эксперта); и
  • переменные, которые являются общими для ВСЕХ экспертов.

О глобальных переменных первого типа - тех, которые являются общими для всех функций ОДНОГО эксперта, - я рассказывал ранее, в выпуске "Глобальные переменные".

Сейчас же речь пойдет именно о глобальных переменных второго типа - общих для ВСЕХ экспертов.


November 8, 2006

Определение режима тестирования на истории с помощью функции IsTesting()

В прошлом выпуске я написал функцию WaitBeforeTransaction(), которая выдерживает паузу между двумя последовательными торговыми операциями. В коде этой функции встречается очень много незнакомых функций. В этом и последующих выпусках я планирую очень кратко о них рассказать.


November 4, 2006

Выдерживаем паузу между торговыми операциями

В клиентском терминале MetaTrader 4 в отличии от MetaTrader 3 нет жесткого ограничения на паузу между торговыми операциями, совершаемых советниками. Поэтому теоретически можно совершать хоть десятки сделок в секунду. Однако чрезмерное злоупотребление этим приведет к тому, что Ваш счет будет заблокирован для торговли.

Это произойдет или потому, что сервер подумает, что такое количество запросов в секунду может осуществлять только злоумышленник, который ставит перед собой лишь цель "завалить" торговый сервер. Или потому, что сотнями запросами в минуту Вы разъярите дилера - сотрудника дилингового центра, которому приходится обрабатывать Ваши запросы.

Считается правилом хорошего тона не совершать торговые операции чаще, чем 1 раз в 5-10 секунд. Конечно, в любом правиле могут быть исключения и иногда Вам крайне необходимо совершить операции с меньшим временным лагом, но старайтесь этой возможностью не злоупотреблять.

Старайтесь выдерживать паузу минимум в 5 секунд. В этом Вам поможет моя функция WaitBeforeTransaction()


November 2, 2006

Пример использования функции WaitUntilTradingIsAllowed()

Напомню, что для решения проблемы занятости торгового потока другим экспертом (в MetaTrader 4 в каждый конкретный момент только один эксперт может торговать) я написал функцию WaitUntilTradingIsAllowed(). Ее код был приведен в выпуске "Как избежать ошибок, если несколько экспертов торгуют одновременно".

В этом выпуске я расскажу о примере использования этой функции в экспертах.


October 26, 2006

RefreshRates(): обновление информации о текущих котировках

В прошлых выпусках в эксперте мы использовали функцию RefreshRates(), чтобы обновить информацию о текущих котировках. В нашем примере мы были вынуждены использовать эту функцию, потому что за время ожидания, пока другой эксперт закончит торговать и функция WaitUntilTradingIsAllowed() завершит свое исполнение, котировки могли измениться.

Чтобы не пытаться совершить сделку по старым котировкам и не получить сообщение об ошибке, мы обновляем информацию о текущих котировках с помощью функции RefreshRates().


October 25, 2006

IsStopped(): как проверить, что эксперт был остановлен

В прошлом выпуске я привел код функции WaitUntilTradingIsAllowed(), которая поможет нам избежать ошибки ERR_TRADE_CONTEXT_BUSY (146), возникающей когда одновременно пытаются торговать два эксперта.

В этом коде несколько функций нам незнакомы. Одна из них - функция IsStopped().


October 23, 2006

Как избежать ошибок, если несколько экспертов торгуют одновременно

Как я уже говорил в прошлом выпуске, в каждый момент времени только один эксперт может торговать. Если в этот момент второй эксперт попытается совершить торговую операцию, то торговая функция вернет ошибку ERR_TRADE_CONTEXT_BUSY (146).

Что же делать, если у Вас торгует одновременно несколько экспертов?

Напишем функцию, которая возвращает:

  • 0, если торговый поток свободен;
  • 1, если работа эксперта была остановлена (см. причины ниже);
  • 2, если торговля экспертов запрещена на уровне настроек клиентского терминала.

Если в момент обращения к функции торговый поток был занят, то функция ждет, пока он освободится. После этого она обновляет данные о текущих котировках с помощью функции RefreshRates() и возвращает 0.


October 20, 2006

Как убедиться, что советник может торговать

В прошлых выпусках я рассказал о различных торговых функциях, с помощью которых можно открывать/закрывать позиции, выставлять/модифицировать/удалять ордера: OrderSend(), OrderModify(), OrderDelete(), OrderClose() и OrderClosyBy().

В каждом случае мы исходили из того, что советнику разрешено торговать. Но в реальности это не всегда так.

В этом выпуске я расскажу о трех функциях: IsExpertEnabled(), IsTradeContextBusy() и IsTradeAllowed().


October 19, 2006

Коды ошибок в советниках и функция GetLastError()

Как я уже неоднократно упоминал в предыдущих выпусках, если какая-то функция вернула ошибку, то код этой ошибки можно получить с помощью функции GetLastError():

   int GetLastError()


October 18, 2006

OrderCloseBy() - закрытие одной позиции другой (продолжение)

В прошлом выпуске я рассмотрел пример использования функции OrderCloseBy(). Вначале я расскажу о самой функции, а потом разберу каждую новую строчку нашего эксперта.


October 17, 2006

OrderCloseBy() - закрытие одной позиции другой

В прошлых выпусках мы рассмотрели пример применения функции OrderClose(). В этом примере мы закрывали все открытые позиции и удаляли отложенные ордера в 22:00 пятницы по времени торговой платформы. Код эксперта был приведен в выпуске "Пример использования функции OrderClose()".

Этот эксперт был абсолютно безупречен с технической точки зрения, но с финансовой точки зрения можно было бы написать более выгодного для нас эксперта. Если вместо того, чтобы просто закрывать открытую позицию по текущей цене, использовать, где возможно, закрытие одной локированной позиции другой локированной позицией, то в этих случаях мы будем терять не два спрэда, а только один.

Давайте перепишем нашего эксперта с учетом этого совета. В этом нам поможет функция OrderCloseBy():


October 13, 2006

Пример использования функции OrderClose() - продолжение

Уважаемые читатели!

Прошу прощения, что на этой неделе я выкладываю материалы на блог не каждый день. В связи с предстоящим запуском открытия реальных счетов в Alpari (UK) моя загруженность на работе просто превысила все мыслимые пределы. В последние 4 дня я сплю по 3 часа в день. Но это не помешает мне более ответственно относиться к публикации материалов на следующей неделе.

В прошлом выпуске я разместил код эксперта, который закрывает все открытые позиции и удаляет все отложенные ордера в пятницу после 22:00 (по времени торговой платформы). Этого эксперта я написал, чтобы показать Вам практический пример использования функции OrderClose().

В этом выпуске я хотел бы подробно разобрать каждую строчку кода этого советника.


October 11, 2006

Пример использования функции OrderClose()

В прошлом выпуске я рассказал о том, как можно закрыть открытую позицию с помощью функции OrderClose(). Практических примеров применения этой функции можно привести бесчисленное количество, т.к. в большинстве экспертов существует потребность закрывать позиции не только по Stop Loss или Take Profit ордеру, но и по текущей цене.

Мы же в качестве примера применения функции OrderClose() рассмотрим эксперт, который закрывает все открытые позиции и удаляет все отложенные ордера в пятницу после 22:00 (по времени торговой платформы).


October 9, 2006

Закрытие позиции с помощью функции OrderClose()

В предыдущих выпусках я рассмотрил уже много полезных торговых функций:

  • С помощью функции OrderSend() можно открыть позицию или выставить отложенный ордер;
  • Функция OrderModify() изменяет параметры открытой позиции или отложенного ордера;
  • Используя функцию OrderDelete() можно удалить отложенный ордер.

Пришло время рассказать о том, как закрыть открытую позицию с помощью функции OrderClose().


October 5, 2006

Пример использования функции OrderDelete()

В прошлом выпуске я рассмотрел функцию OrderDelete(). Эта функция удаляет отложенный ордер.

Рассмотрим применение этой функции на примере:

Предположим, что наш эксперт по какой-то логике (не будем здесь вдаваться в подробности) выставляет по одному инструменту сразу два отложенных ордера - Buy Limit и Sell Limit. Наша задача - если один из ордеров сработал, то удалить оставшийся отложенный ордер.

Предположим, что по данному инструменту работает только наш эксперт.



October 4, 2006

OrderDelete() - удаление отложенного ордера

Мы уже знаем, как можно выставить отложенный ордер. Для этого надо использовать функцию OrderSend(). Также мы умеем изменять параметры отложенных ордеров с помощью функции OrderModify().

В этом выпуске я расскажу о том, как можно удалить отложенный ордер. Это можно сделать с помощью функции OrderDelete().


October 3, 2006

OrderModify() - изменение параметров отложенных ордеров и открытых позиций

В прошлых выпусках я рассмотрел очень полезную функцию - OrderSend(). А в этом выпуске я расскажу о функции OrderModify().


October 2, 2006

Пример использования функции OrderSend() - продолжение

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

Советник должен в определенное время (параметры MyHour и MyMinute) на заранее заданном расстоянии от текущей цены (параметр MyPendingLevel) выставлять два ордера - Sell Stop и Buy Stop. При этом должны выставляться ордера Stop Loss на расстоянии MySL пипсов от цены ордера и Take Profit на расстоянии MyTP пипсов.

В этом выпуске я хотел бы разобрать подробно логику работы этого эксперта.


September 28, 2006

Пример использования функции OrderSend()

Сегодня, разбирая почту, я наткнулся на очень давнее письмо, в которым один из читателей моего блога попросил мне помочь в написании такого эксперта:

Советник должен в определенное время (параметры MyHour и MyMinute) на заранее заданном расстоянии от текущей цены (параметр MyPendingLevel) выставлять два ордера - Sell Stop и Buy Stop. При этом должны выставляться ордера Stop Loss на расстоянии MySL пипсов от цены ордера и Take Profit на расстоянии MyTP пипсов.


September 26, 2006

Параметры функции OrderSend() - продолжение

В прошлых выпусках я рассказал о функции OrderSend() и начал рассмотрение ее параметров. В прошлом выпуске мною были рассмотрены параметры cmd и price.

В этом выпуске я расскажу о параметрах StopLoss, TakeProfit и expiration.


September 21, 2006

Параметры функции OrderSend()

В прошлом выпуске я рассказал о функции OrderSend(). В этом выпуске я хотел бы остановиться на параметрах этой функции более подробно.


September 18, 2006

OrderSend() - открытие позиции или размещение отложенного ордера

В прошлых выпусках я рассказал о большом количестве функций, с помощью которых можно получить информация об ордере, выделенном с помощью функции OrderSelect(). Большинство из этих функций очень важны и полезны. Однако я уверен, что Вам уже давно хочется экшина, т.е. Вы давно уже ждете от меня описания тех торговых функций, с помощью которых можно открывать и закрывать позиции, выставлять, модифировать и удалять ордера.

Сегодня я расскажу о первой такой функции - функции OrderSend().


September 15, 2006

OrderMagicNumber() - идентификационное (магическое) число для выбранного ордера

Очень часто трейдеру бывает нужно как-то идентифицировать ордера или позиции. Например, полезно знать, открыт ли данный ордер именно этим экспертом или на каком периоде графика сработал торговый сигнал. Разработчики MetaTrader 4 предусмотрели для таких случаев очень полезную торговую функцию - OrderMagicNumber().


September 13, 2006

OrderExpiration() - дата истечения отложенного ордера

Перед тем, как я перейду к рассмотрению торговых функций для открытия/закрытия позиции или управления ордерами, мне осталось рассказать о двух функциях: OrderExpiration() и OrderMagicNumber().

В этом выпуске я расскажу о торговой функции OrderExpiration().


September 12, 2006

OrderLots() - количество лотов в выделенном ордере или позиции

В последующих функциях мы рассмотрим торговые функции, с помощью которых можно открывать/закрывать позиции, размещать/модифицировать и удалять ордера:

  • OrderClose()
  • OrderCloseBy()
  • OrderDelete()
  • OrderModify()
  • OrderSend()

Очень часто необходимо указать количество лотов открытой позиции или отложенного ордера. Самой простой вариант получить это значение - это выделить позицию или ордер с помощью функции OrderSelect(), а потом вызвать функцию OrderLots().


September 7, 2006

OrderOpenTime() - время открытия ордера или позиции, выделенного функцией OrderSelect()

В прошлом выпуске мы посчитали прибыль по закрытым позициям. Теперь усложним задачу: сосчитаем прибыль только по закрытым позициям, которые были открыты сегодня.

С помощью функции OrderOpenTime() мы можем получить дату и время открытия ордера или позиции, выделенного предварительно с помощью функции OrderSelect().


September 6, 2006

OrderProfit() - прибыль выделенного ордера

Я еще не начал рассмотрение торговых функций, с помощью которых можно открывать/закрывать позиции и управлять ордерами. Я уверен, что Вам уже не терпится научить Вашего эксперта торговать, и я очень скоро Вас этому научу. Однако перед этим я хотел бы рассмотреть несколько оставшихся торговых функций, с помощью которых можно получить информацию об ордере, выделенном с помощью функции OrderSelect().

Сегодня я расскажу о функции OrderProfit().


August 31, 2006

OrderTicket() - тикер выделенного ордера

В прошлом выпуске я рассказал о реализации алгоритма трейлинг стопа на языке MetaQuotes Language 4.


August 30, 2006

OrderOpenPrice() - получение информации о цене открытии позиции или цене отложенного ордера

В этом выпуске я рассмотрю функцию OrderOpenPrice(). В качестве практического примера применения этой функции рассмотрим установку и управление трейлинг стопом.


August 29, 2006

OrderCommission() - комиссия выделенного функцией OrderSelect() ордера

Вчерашний и сегодняшний выпуски посвящены не очень нужным с практической точки зрения торговым функциям: OrderSwap() и OrderCommission().

К сожалению, при всей моей достаточно буйной фантазии я так и не смог придумать практического применения этих функций. Но раз эти функции присутствуют, то лучше о них расcказать. Вдруг вам они все-таки пригодятся.


August 28, 2006

OrderSwap() - начисленный сторидж по выделенному ордеру

В прошлых выпусках мы рассмотрели очень нужные с практической точки зрения трейдеру функции, с помощью которых можно получить информацию о выделенном с помощью функции OrderSelect() ордере или позиции.

В этом выпуске я расскажу о функции OrderSwap(). Честно говоря, я совершенно не вижу практического применения этой функции в экспертах, но раз она присутствует, то лучше о ней рассказать.


August 27, 2006

Вышел 134-й номер журнала для трейдеров FOREX MAGAZINE



  Журнал распространяется бесплатно.
  • Формат: PDF
  • Размер файла: 4.97 Mb

СКАЧАТЬ ЖУРНАЛ !

Лицензия Минпечати Эл No ФС 77-20968
ООО "ФорексМагазин"

Читайте в номере от 28 августа 2006 года:


August 26, 2006

OrderComment() - комментарий выделенного ордера

В прошлых выпусках мы решали задачу определения того, была ли закрыта позиция по Stop Loss или Take Profit ордеру. Существует еще один способ узнать это. При этом данный способ будет более простым, чем рассмотренные ранее.

В этом нам поможет функция OrderComment().


August 24, 2006

OrderSymbol() - инструмент выделенного ордера

Очень часто перед трейдером стоит задача перебрать все открытые позиции или отложенные ордера и что-то сделать с позициями или ордерами, которые выставлены по инструменту, к которому прикреплен советник. Предположим, что нас интересуют только отложенные ордера.

Используя функцию OrderSymbol(), мы можем получить информация о выделенном с помощью функции OrderSelect() ордере или позиции.


August 23, 2006

OrderTakeProfit() - уровень Take Profit ордера

В прошлых выпусках мы уже достаточно сильно продвинулись в вопросе, как определить, была ли позиция закрыта по Take Profit ордеру или по Stop Loss. Параллельно мы изучили следующие торговые функции советника:

В этом выпуске мы изучим функцию OrderTakeProfit() и доработаем наш пример. Мы почему-то с первых строчек кода безусловно верим в тот факт, что позиция была закрыта именно по Stop Loss или Take Profit ордера. А если нет? Это легко проверить.


August 22, 2006

OrderCloseTime() - время закрытия позиции

В прошлом выпуске я слегка модифицировал наш пример определения по какому ордеру была закрыта позиция. Теперь если по ошибке мы выделили с помощью функции OrderSelect() отложенный ордер, а не позицию, эта ситуация выявляется.

Однако возможен случай, когда мы по ошибке выделили открытую позицию. Выявить этот случай нам поможет функция OrderCloseTime().


August 21, 2006

Какие материалы и где можно найти на моем блоге по интернет-трейдингу на форекс / forex

Уважаемые читатели моего блога!

На своем блоге "Интернет-трейдинг на форекс / forex" я уже осветил очень много тем, посвященных интернет-трейдингу на FOREX:

Я поделился своим опытом по созданию собственных торговых тактик. И наконец, я начал публиковать руководство по программированию экспертов для начинающих.

Материала стало очень много, а навигация, к сожалению, оставляет желать лучшего. Поэтому я решил в этом выпуске выложить список материалов, опубликованных на моем форекс-блоге по состоянию на 21 августа.


August 18, 2006

Получение типа ордера с помощью OrderType()

В прошлых выпусках мы научились получать информацию о выделенном с помощью функции OrderSelect() ордере или позиции:

В этом выпуске я расскажу о функции OrderType().


August 17, 2006

OrderStopLoss() - цена закрытия выделенного ордера или позиции

В прошлом выпуске, рассказывая о функции OrderClosePrice(), я рассмотрел пример, как определить по какому ордеру (Stop Loss или Take Profit) была закрыта позиция, если точно известно, что она была закрыта по ордеру.

В этом примере была использована функция OrderStopLoss(). Из названия абсолютно понятно ее предназначение, но лучше все-таки остановиться на ней поподробнее.

Для того, чтобы изучение функции OrderStopLoss() стало не просто скучным теоретическим описанием, попробуем слегка изменить прошлый пример, чтобы получить максимум практической пользы.


August 16, 2006

OrderClosePrice() - цена закрытия выделенного ордера или позиции

После того, как мы выделим ордер или позицию с помощью функции OrderSelect(), мы можем получить об ордере саму различную информацию. В этом выпуске я расскажу о функции OrderClosePrice().


August 15, 2006

HistoryTotal(): количество закрытых позиций и удаленных ордеров

В выпуске про OrderSelect() - функцию выбора ордера или позиции - я рассказал, что можно также выбрать закрытую позицию или удаленный отложенный ордер, указав в качестве параметра select значение SELECT_BY_POS, а в качестве pool - MODE_HISTORY. В качестве первого параметра (index) функции OrderSelect() в этом случае указывается номер позиции/ордера в этом списке.

Зачастую, чтобы найти нужную нам позицию, приходится "пробежаться" по всему списку. Для этого нам нужно знать общее количество позиций и ордеров в списке закрытых позиций и удаленных отложенных ордеров. В этом нам поможет функция HistoryTotal().


August 14, 2006

OrdersTotal(): количество открытых позиций и неудаленных отложенных ордеров

В прошлом выпуске я рассказал о функции OrderSelect(), с помощью которой можно выбрать ордер или позицию для получения в дальнейшем дополнительной информации об этом ордере или позиции.

Мы увидели, что выбрать ордер можно двумя способами:

  1. по номеру тикера;
  2. по порядковому номеру ордера/позиции в списке.

Если мы выбираем ордер или позицию по порядковому номеру ордера/позиции в списке открытых позиций и неудаленных отложенных ордеров, то бывает очень полезно знать общее количество открытых позиций и неудаленных ордеров. В этом нам поможет функция OrdersTotal().


August 13, 2006

Выбор ордера или позиции с помощью OrderSelect()

В прошлом выпуске я привел полный перечень торговых функций, которые можно использовать в эксперте. Как Вы уже, наверное, успели заметить, подавляющее большинство этих функций позволяет получить какую-то информацию об ордере или позиции, которые были предварительно выбраны с помощью функции OrderSelect().


August 10, 2006

Учим эксперта торговать

Я уверен, что Вам уже не терпиться научить Вашего эксперта торговать. Язык MetaQuotes Language 4 позволяет осуществлять ПОЛНЫЙ контроль над торговым счетом - открывать/закрывать позиции, размещать/модифицировать и удалять ордера, получать информацию об открытых позициях и уже закрытых сделках и многое-многое другое.

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


August 7, 2006

Оператор переключения switch

Ранее я рассказал об условном операторе if-else, с помощью которого можно изменить порядок выполнения операторов в эксперте. Достаточно часто возникают ситуации, когда нам надо заложить в эксперте не два, а больше варианта развития событий. Например, переменная i может принимать целочисленные значения от 1 до 5 и в зависимости от того, какое значение имеет эта переменная, возможны 5 различных последовательностей операторов. Такую задачу легко можно решить с использованием множества вложенных условных операторов if-else.


August 4, 2006

Досрочное завершение очередной итерации цикла с помощью оператора continue

В прошлом выпуске я рассказал о том, как можно досрочно выйти из цикла с помощью оператора break. Однако иногда нам нужно не навсегда выйти из цикла, а просто завершить досрочно очередную его итерацию. Для этого используется оператор continue.


Досрочный выход из цикла с помощью оператора break

В прошлых выпусках я рассказал о двух способах организации циклов в советнике: операторе цикла while и об операторе цикла for.

Достаточно часто возникает потребность досрочно выйти из цикла - для этого используется оператор break.


August 3, 2006

Оператор цикла for

В прошлом выпуске я рассказал об операторе цикла while. Этот оператор используется, когда необходимо повторить некоторую последовательность действий несколько раз (или ни одного). Подобную задачу можно решить также с помощью другого оператора цикла - оператора for.


August 2, 2006

Оператор цикла while

Обычно операторы в коде эксперта выполняются последовательно - один за другим. Однако часто требуется изменить последовательность их выполнения в зависимости от каких-то условий. В прошлом выпуске я рассмотрел один из способов изменения этой последовательности: условный оператор if-else. Применение этого оператора оправдано, когда есть необходимость выполнить две разные последовательности действий в зависимости от какого-то условия.

В этом выпуске я планирую рассказать об операторе цикла while. Уже само название говорит о том, что этот оператор применяется в тех случаях, когда нужно повторить какое-то количество раз одну и ту же последовательность операторов.


August 1, 2006

Условный оператор if-else

В этом выпуске я вернусь к рассмотрению нашего первого советника и расскажу об условном операторе if-else, который я использовал в функции init().


July 27, 2006

Приоритеты операций и порядок выполнения выражений

В прошлых выпусках я рассказал о следующих типах операций в выражении:

Зачастую в выражении можно встретить сразу несколько операций. Возникает вопрос - в какой последовательности эти операции будут выполняться. Это очень важный вопрос, ведь от этого зависит конечный результат, который мы в итоге получим.


July 26, 2006

Объединение арифметических и побитовых операций с операцией присваивания

В прошлых выпусках мы рассмотрели арифметические и побитовые операции. Ранее я рассказал об операторе присваивания.

В синтаксисе MetaQuotes Language 4 - языка написания советников - есть возможность объединить арифметические и побитовые операции с операцией присваивания.


July 25, 2006

Побитовые операции

В прошлом выпуске я рассказал о логических операциях, а этот выпуск будет посвящен побитовым операциям.

Для начала необходимо рассказать о формате представления чисел в компьютере.

Мы в нашей жизни привыкли к десятичному представлению чисел: 56, 777, 10957 и т.д. Десятичное представление числа 10957 означает, что 10957 = 1*104 +0*103+9*102+5*101+7*100. Иными словами десятичное число - это a0*100+a1*101+a2*102+...+an*10n. Т.е. сумма произведений соответствующей цифры (ai) на соответствующую степень числа 10 (10i).

В компьютере внутренний формат представления чисел - двоичный. В двоичном формате все числа состоят из нулей и единиц, а в качестве множителя используется не число 10, возведенное в степень, а соответствующая степень числа 2. Например, двоичное число 10001101 равно десятичному (обычному) числу 1*27+0*26+0*25+0*24+1*23+1*22+0*21+1*20 = 128+0+0+0+8+4+0+1 = 141.

Каждая такая двоичная цифра (1 или 0) называется битом.

Теперь мы знаем достаточно, чтобы рассмотрить побитовые операции.


July 24, 2006

Логические операции

В прошлом выпуске я рассказал об операциях отношения, с помощью которых можно сравнить две переменные. Результатом выступало значение типа bool.

Напомню, что значение ЛОЖЬ (false) представляется в виде нулевого значения, а ИСТИНА (true) - ненулевого.

В этом выпуске я рассмотрю логические операции НЕ (!), ИЛИ (||) и И (&&).


July 23, 2006

Операции отношения

Как мы уже знаем, один из стандартных типов переменных в языке MetaQuotes Language 4 - тип bool. Переменная типа bool может принимать только два значения: ИСТИНА (true) и ЛОЖЬ (false). Значение ЛОЖЬ представляется в виде нулевого значения, а ИСТИНА - ненулевого.

Значение операции отношения или логической операции будет иметь тип bool.


July 21, 2006

Оператор присваивания. Арифметические операции

В предыдущем выпуске я рассказал о составном операторе. В этом выпуске я расскажу об операторе присваивания.

Формат оператора присваивания:

   переменная = выражение;


July 19, 2006

Составной оператор

В выпуске "Использование констант в эксперте" мы научились описывать константы и разобрались, что же в коде нашего первого эксперта означают следующие строчки:

   #define STATE_SQUARE   0
#define STATE_LONG 1
#define STATE_SHORT 2

В выпуске Внешние переменные мы научились задавать параметры эксперта, и нам стали понятны следующие строчки:

   extern int           MAPeriod     = 13;
extern double LotsNumber = 1.0;

Кроме локальных и статических переменных мы рассмотрели и глобальные (на уровне одного модуля) переменные, в результате приоткрылась завеса над еще двумя строчками нашего эксперта:

   int CurrentState;
int MyOrderTicket;

Теперь рассмотрим более подробно, что же в нашем эксперте делает функция init().


July 18, 2006

Параметры функций

В выпуске "Создание собственных функций" я рассказал достаточно подробно о том, как описывать собственные функции. В этом выпуске я продолжу рассмотрение функций и детально разберу, как в функцию можно передать значения и получить результат функции.


July 17, 2006

Глобальные переменные

В прошлом выпуске я рассказал о внешних переменных. В этом выпуске я остановлюсь на глобальных переменных.


July 14, 2006

Внешние переменные

В прошлом выпуске я рассказал о локальных и статических переменных. В этом выпуске я остановлюсь на внешних переменных.


July 13, 2006

Локальные и статические переменные

В прошлом выпуске я рассказал о том, как использовать переменные и массивы в эксперте. Единственным нераскрытом моментом остались области видимости переменных. Дело в том, что переменные бывают нескольких типов:

  • локальные переменные,
  • статические переменные,
  • глобальные переменные,
  • внешние переменные,
  • параметры функций.


July 12, 2006

Хранение данных в переменных

Любой эксперт оперирует с некоторыми данными - ценами, значениями индикаторов, объемами, количеством открытых позиций и пр. Те, места, где эти данные хранятся в эксперте, называются переменными. В качестве имен переменных можно использовать цифры (0-9), латинские прописные и строчные буквы (а - z и А - Z, следует помнить, что буквы 'a' и 'A' - совершенно разные символы), символ подчеркивания (_). Первый символ не может быть цифрой. Также имя переменной не должно совпадать с зарезервированным словом (т.е. словом, которое имеет особый смысл в языке MetaQuotes Language 4 - но об этом позже).


July 10, 2006

Использование констант в эксперте

В прошлом выпуске я выложил код нашего первого эксперта.

Вначале разберем, что означают следующие строчки:

   #define STATE_SQUARE   0
   #define STATE_LONG      1
   #define STATE_SHORT     2


July 7, 2006

Пишем простейшего эксперта

На мой взгляд, наиболее простым способом для новичка изучить процесс написания экспертов будет подробный разбор специально написанных мной для этой цели экспертов. На данный момент (да и далее в своих статьях) я не буду ставить перед собой цель написать супер гениального эксперта, который способен будет зарабатывать десятки процентов в месяц и делать это стабильно. Основная цель - показать все аспекты программирования экспертов, а не написать "грааль".


July 5, 2006

Функции init(), start() и deinit()

Как я уже говорил в прошлых постах, любой эксперт состоит как минимум из трех функций: init(), start() и deinit(). В этом выпуске я расскажу о них подробнее.


July 4, 2006

Создание собственных функций

Любой эксперт, как мы уже увидели в прошлом выпуске, состоит из как минимум трех функций: init(), start() и deinit(). Без понимания, что они делают, невозможно написать своего эксперта, поэтому я в следующем выпуске подробно эти функции рассмотрю.


July 3, 2006

Анализ кода заготовки эксперта

После совершения действия, описанных в предыдущем выпуске мы получили код-заготовку, который мы можем изменить в соответствии с нашей торговой тактикой и получить работоспособного эксперта. Давайте разберем, что же мы в итоге получили...


June 29, 2006

Настраиваем параметры нового эксперта

Итак, в прошлом выпуске мы вызвали контекстное меню окна "Навигатор" группы "Expert Advisors" и выбрали пункт меню "Create". В результате появилось окно, в котором нам предстоит выбрать тип объекта, который мы хотим создать (см. рис. 1).


June 28, 2006

С чего начать при написании советника

Естественно, что первым делом Вы должны иметь представление, а в чем же заключается Ваша торговая тактика, и что Вы хотите запрограммировать. Принципы создания любой торговой тактики подробно описаны в разделе "Торговые тактики", поэтому примем за аксиому, что Вы знаете, что делаете, т.е. в Вашей голове уже сформировался торговый алгоритм, который Вы желаете запрограммировать в виде советника на языке MetaQuotes Language 4. Итак, начнем...


June 26, 2006

Механическая торговая система - миф или реальность?

В сети Интернет Вы можете найти бесплатно или купить за небольшие деньги великое множество механических систем, которые, со слов авторов, принесут Вам десятки, а то и сотни процентов дохода в месяц. Большинство таких "граалей" показывают очень хорошие результаты при тестировании на исторических данных, однако на демо-счете и реальном счете такие системы терпят неудачу. Дело в том, что написание советников (Expert Advisors) - механических торговых систем для MetaTrader 4 - очень легкое занятие, которое по силам любому трейдеру. Поэтому в сети Интернет появилось огромное количество любительских "поделок", в которых допущен ряд ошибок.

Этим постом я начинаю серию статей о том, как написать собственного эксперта, как недопустить классические ошибки, которые искажают реальную прибыльность механической торговой системы, и о многом другом.


На главную страницу

Подписаться на мою рассылку



Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE

Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 5.04