Эксперт по теории Хаоса Б.Вильямса: магическое число
В прошлом выпуске я начал написание эксперта, торгующего по теории Хаоса Б.Вильямса. Я разбил большую задачу написания эксперта на несколько маленьких блоков и тем самым заложил план или структуру нашего эксперта.
Этим выпуском я начинаю практическую реализацию каждого блока. Вначале реализуем алгоритм вычисления магического числа, уникального для этого эксперта и периода графика.
Поскольку подобная задача определения магического числа является очень распространенной и часто используется при написании экспертов, нам надо различать ордера, открытые разными экспертами. Поэтому мы для каждого нашего эксперта определим его уникальный ID. Пусть для эксперта по теории Хаоса Б.Вильямса уникальный ID будет равен 1. Для этого мы определим константу EXPERT_ID:
#define EXPERT_ID 1
Пусть значение магического числа для этого эксперта и периода графика вычисляется функцией GetMagicNumber() только один раз при вызове функции init() и запоминается в глобальной переменной MagicNumber:
int MagicNumber;
Теперь нам осталось лишь определиться с алгоритмом вычисления магического числа и написать функцию GetMagicNumber(). В нашем случае вполне будет достаточно, если младшие три разряда магического числа будут содержать уникальный ID эксперта (в нашем случае равен EXPERT_ID), а следующие пять разрядов - период графика (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1 или PERIOD_MN1).
Вот исходный код функции GetMagicNumber(), которая вычисляет магическое число по такому алгоритму:
int GetMagicNumber() { int id;
// разряды 0-2 (младшие три разряда): уникальный ID эксперта id = EXPERT_ID;
// разряды 3-7 (следующие пять разрядов): период графика id = id + 1000*Period();
return(id); }
Ну а теперь выложим целиком то, что у нас получилось на данном этапе:
//+------------------------------------------------------------------+ //| 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 // у нас открытых позиций
// каждый нами написанный эксперт будет иметь свой ID номер от 000 до 999 // пусть эксперт по теории Хаоса имеет уникальный номер 1, // т.к. это наш первый "боевой" эксперт #define EXPERT_ID 1
// магическое число для этого эксперта и периода графика int MagicNumber;
//+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- // Сформируем уникальное магическое число для этого эксперта с учетом периода MagicNumber = GetMagicNumber();
// Запомним последний сформировавшийся бар, как последний обработанный бар
// Пробежимся по всем открытым позиция, которые были открыты этим // экспертом (магическое число совпадает): в зависимости от их наличия // и направления установим текущий статус эксперта //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- // Если мы уже обрабатывали последний сформировавшийся бар, то выйдем // Если не обрабатывали, то запомним, что мы его сейчас начали обрабатывать
// Если наш текущий статус равен 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); } //+------------------------------------------------------------------+
В следующем выпуске я расскажу, как пределить текущие состояние эксперта (STATUS_LONG, STATUS_SHORT или STATUS_NO_POSITIONS) при инициализации эксперта.
Комментарии по теме "Эксперт по теории Хаоса Б.Вильямса: магическое число"
Меня уже давно интересовала торговля по системе B.W. и написание советника по этой системе,
думаю, докажет её эффективность. К сожалению
я только начинаю осваивать
MQL и Ваш блог оказывает мне неоценимую поддержку. Спасибо!!!
Если не сложно, обьясните как построить "линию баланса" или она просто является 34-периодным скользящим средним?
С уважением.
Василий.
Автор: Василий | 18.04.2007 22:19
Спасибо за теплые слова.
Про Линию Баланса читайте в комметариях к посту http://www.vedikhin.ru/2006/03/chaos-theory.html
Автор: Андрей Ведихин | 19.04.2007 22:21
Спасибо за ссылку.
Но линия баланса осталась для меня загадкой.
В своей торговле буду ориентироваться на 34-периодное среднее. Пробовал построить 34+5/2, но результат не радует.
С уважением.
Василий.
Автор: Василий | 20.04.2007 08:31
К сожалению, Вы не одиноки. У меня тоже нет однозначного понимания по Линии Баланса.
Автор: Андрей Ведихин | 20.04.2007 12:53
А разве нельзя взять Линию из аллигатора в МТ4?
Автор: Peatra | 06.05.2007 01:53
По последней информации:
Челюсти Аллигатора - Линия Баланса данного графика, Зубы - графика с таймфреймом на порядок ниже, Губы - еще на порядок ниже. Например, день - час - 12 минут на дневном графике.
Автор: Андрей Ведихин | 07.05.2007 01:58
И в чем проблема?
Автор: Peatra | 10.05.2007 13:13
В том, что никто, кроме Билла Вильямса, не может на 100% утверждать, что Линия Баланса - это одна из линий Аллигатора.
Автор: Андрей Ведихин | 27.05.2007 15:22
Здравствуйте! Я сейчас изучаю книгу "FOREX от первого лица" теорию хаоса Б.Вильямса и застопорился на том, что не могу врубиться в такое понятие как "поражение" фрактала (стр.187 справа внизу)? Разъясните пожалуйста, что есть это такое?
Автор: Виталий | 15.06.2007 20:08
Здравствуйте! Я сейчас изучаю книгу "FOREX от первого лица" теорию хаоса Б.Вильямса и застопорился на том, что не могу врубиться в такое понятие как "поражение" фрактала (стр.187 справа внизу)? Разъясните пожалуйста, что есть это такое?
Автор: Виталий | 15.06.2007 20:10