« Предыдущий пост | На главную страницу | Следующий пост »

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

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

//+------------------------------------------------------------------+
//|                                                 BW-AV.mq4 |
//|                                          Andrey Vedikhin |
//|                                http://www.vedikhin.ru |
//+------------------------------------------------------------------+
#property copyright "Andrey Vedikhin"
#property link      "http://www.vedikhin.blog-forex.org"
//---- input parameters extern double Lots=1.0;
// существует три состояния, в которых мы можем находиться #define STATUS_LONG 0 // мы стоим в покупку #define STATUS_SHORT 1 // мы стоим в продажу #define STATUS_NO_POSITIONS 2 // у нас открытых позиций
// текущий статус int CurrentStatus;
// последний обработанный бар datetime LastProcessedBar;
// каждый нами написанный эксперт будет иметь свой ID номер от 000 до 999 // пусть эксперт по теории Хаоса имеет уникальный номер 1, // т.к. это наш первый "боевой" эксперт #define EXPERT_ID 1
// магическое число для этого эксперта и периода графика int MagicNumber;
//+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- // Сформируем уникальное магическое число для этого эксперта с учетом периода MagicNumber = GetMagicNumber();
// Запомним последний сформировавшийся бар, как последний обработанный бар
// Пробежимся по всем открытым позиция, которые были открыты этим // экспертом (магическое число совпадает): в зависимости от их наличия // и направления установим текущий статус эксперта CurrentStatus = STATUS_NO_POSITIONS;
for(int pos=0; pos<OrdersTotal(); pos++) { // выделим позицию или ордер if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) { // произошла ошибка при выделении Print("Ошибка ", GetLastError(), ": не могу выделить ордер ", pos); continue; }
// позиция по нашему инструменту? if(OrderSymbol()!=Symbol()) continue;
// позиция выделена - проверим, что это не отложенный ордер if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
// проверим, что магическое число совпадает if(OrderMagicNumber() != GetMagicNumber()) continue;
// если это позиция на покупку if(OrderType() == OP_BUY) { if(CurrentStatus == STATUS_SHORT) { // у нас разнонаправленные позиции, открытые этим экспертом // на этом периоде, или другой эксперт использует наше магическое число Print("Ошибка: обнаружены разнонаправленные позиции, открытые", " этим экспертом на этом периоде, или другой эксперт использует ", "наше магическое число"); break; } else CurrentStatus = STATUS_LONG; } // если это позиция на продажу else { if(CurrentStatus == STATUS_LONG) { // у нас разнонаправленные позиции, открытые этим экспертом // на этом периоде, или другой эксперт использует наше магическое число Print("Ошибка: обнаружены разнонаправленные позиции, открытые", " этим экспертом на этом периоде, или другой эксперт использует ", "наше магическое число"); break; } else CurrentStatus = STATUS_SHORT; }
switch(CurrentStatus) { case STATUS_SHORT: Print("Мы стоим в продажу"); break; case STATUS_LONG: Print("Мы стоим в покупку"); break; case STATUS_NO_POSITIONS: Print("У нас нет открытых позиций"); break; }
// последний обработанный бар - текущий LastProcessedBar = iTime(Symbol(), 0, 0); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- // если этот бар мы уже обрабатывали, то выйдем if (LastProcessedBar==iTime(Symbol(), Period(), 0)) return(0); LastProcessedBar = iTime(Symbol(), Period(), 0);
// Если не обрабатывали, то запомним, что мы его сейчас начали обрабатывать
// Если наш текущий статус равен STATUS_NO_POSITIONS:
// Проверим, не сработал ли какой-нибудь из фракталов: на покупку // или на продажу.
// Если сработал по графику, то открываем соответствующую // позицию (сразу ставим стоп лосс), меняем статус и выходим
// Если не сработал, то просто выходим, т.к. первый сигнал всегда - // от фрактала
// Пробежимся по всем открытым позициям, открытым этим экспертом // по этому инструменту, и переставим стоп-лосс на новый уровень
// Если наш текущий статус равен STATUS_LONG, то:
// Если у нас сигнал в покупку из первого измерения, то открываем // еще одну позицию в покупку (сразу ставим стоп лосс)
// Если у нас сигнал в покупку из второго измерения, то открываем // еще одну позицию в покупку (сразу ставим стоп лосс)
// Если у нас сигнал в покупку из третьего измерения, то открываем // еще одну позицию в покупку (сразу ставим стоп лосс)
// Если у нас сигнал в покупку из четвертого измерения, то открываем // еще одну позицию в покупку (сразу ставим стоп лосс)
// Выходим
// Если наш текущий статус равен STATUS_SHORT, то:
// Если у нас сигнал в продажу из первого измерения, то открываем // еще одну позицию в продажу (сразу ставим стоп лосс)
// Если у нас сигнал в продажу из второго измерения, то открываем // еще одну позицию в продажу (сразу ставим стоп лосс)
// Если у нас сигнал в продажу из третьего измерения, то открываем // еще одну позицию в продажу (сразу ставим стоп лосс)
// Если у нас сигнал в продажу из четвертого измерения, то открываем // еще одну позицию в продажу (сразу ставим стоп лосс)
// Выходим //---- return(0); } //+------------------------------------------------------------------+ //| GetMagicNumber() - возвращает магическое | //| число, которое вычисляется по следующему | //| алгоритму: младшие три разряда - | //| уникальный ID эксперта (в нашем случае | //| равен EXPERT_ID), а следующие пять | //| разрядов - период графика | //+------------------------------------------------------------------+ int GetMagicNumber() { int id;
// разряды 0-2 (младшие три разряда): уникальный ID эксперта id = EXPERT_ID;
// разряды 3-7 (следующие пять разрядов): период графика id = id + 1000*Period();
return(id); } //+------------------------------------------------------------------+

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

« Предыдущий пост | На главную страницу | Следующий пост »

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

При копиляции советника, выдается ошибка!
'(' - function definition unexpected

Добавьте одну " }" перед строчкой

switch(CurrentStatus)


и все будет ОК!

Всем привет!
Хотелось бы обратить внимание создателей Экспертов, собирающихся использовать упомянутый здесь алгоритм, об одной

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

бары(свечи).
Итак.
Если все сигналы Вы расчитываете по индикаторам со свободной привязкой к графику,т.е. второй параметр у Вас всегда

ноль, тогда все ОК!
Но, предположим, что Вы хотите использовать сигналы от индикаторов на определенном таймфрейме, т.е. второй параметр

у Вас будет например PERIOD_H4, тогда Вы должны понимать, что если Эксперта прикрепить на младший график, то этот

сигнал будет срабатывать столько раз во сколько младший меньше старшего.
Например:
Допустим у Вас сигнал на покупку образовался на PERIOD_H4, а Ваш Эксперт прикреплен к PERIOD_H1, тогда еще четыре

раза подрят(если денег хватит) каждый час ОН Вам будет покупать (правда если не изменятся другие условия влияющие на

сигнал). Цены покупок будут разные, соответствующие моменту повторного срабатывания.
Если Вы уверены в прибыльности своего Эксперта, то это даже хорошо - прибыль увеличится (не в 4 раза), так же

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

первого входа цена еще откатывается, но я уверен на 100% :-), что вот вот она пойдет куда надо:-)

Успехов!

Недостающую скобку добавил.

Жаль тема уже больше двух месяцев стоит. Надеюсь, автор не отказался от нее?

Наверное разработку пришлось приостановить всязи с неудовлетворительными результатами торговли МТС по Биллу Вильямсу? Правильный вход в рынок даже по фракталу достаточно субъективный. Если входить механически - и разориться не долго.

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



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

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

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

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "Эксперт по теории Хаоса Б.Вильямса: как анализировать только сформировавшиеся бары (исходный код)" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

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

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

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


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