PDA

View Full Version : Линии силы быков и медведей. Часть 4.



Scriptong
08-12-2010, 15:42
Постоянно подогреваемый интерес участников форума MQLabs к теме "Линии силы быков и медведей" (часть 1 (http://www.fxtrade.ru/mqlabs/23.09.2010-mqlabs-linii-sily-bykov-i-medvedey), часть 2 (http://www.fxtrade.ru/mqlabs/06.10.2010-mqlabs-linii-sily-bykov-i-medvedey-chast-2) и часть 3 (http://www.fxtrade.ru/mqlabs/13.10.2010-mqlabs-linii-sily-bykov-i-medvedey-chast-3)) заставляет вернуться к развитию торговой системы, которая на данный момент насчитывает три версии.

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

Отвечающий описанным требованиям, индикатор был предложен одним из участников форума MQLabs (http://forum.fxservice.com/showpost.php?p=29509&postcount=31). Как оказалось, этот индикатор уже был использован в проекте MQLabs в прошлом году (http://www.fxtrade.ru/mqlabs/05.08.2009-dva-puti) - FiboPivot и является некоторым усовершенствованием оригинала. Предложенный индикатор состоит из двух частей (FiboPivot_V4+ и FiboPivot_V4-), каждая из которых отображается в "отрицательной" и "положительной" зонах относительно Pivot. Отличием индикаторов FiboPivot_V4+ и FiboPivot_V4- от изначального FiboPivot является немного измененная формула расчета Pivot и уровней поддержки/сопротивления. В оригинале Pivot учитывает данные ближайшего сформированного бара (обычно используется дневной бар):


http://www.forextrade.ru/media/Image/MQLabs/93_ag/Formula1.png (1)

где High1, Low1 и Close1 - показатели первого бара (ближайший сформированный бар слева).
В новой редакции Pivot рассчитывается с учетом двух последних известных баров. Причем более ранний бар имеет меньший вес по сравнению с поздним баром:


http://www.forextrade.ru/media/Image/MQLabs/93_ag/Formula2.png (2)

Здесь добавлено слагаемое Open, которое берется не с того же бара, с которого взяты High, Low и Close, а со следующего. Так, при сложении данных первого бара используется Open нулевого бара, а при сложении данных второго бара взято значение Open первого бара. Можно, конечно, заметить, что цена закрытия раннего бара и цена открытия позднего - это практически одна и та же величина. Но если данный расчет применять к дневным свечам, то подобное утверждение становится не совсем верным, т.к. между баром пятницы и баром понедельника нередко случаются ценовые разрывы - гэпы. Вес значениям более раннего бара придается параметром PivotParticipant. Он обычно устанавливается в диапазоне от 0 до 1.

С точки зрения пользователя, отличие предложенных индикаторов от оригинала будет заключаться в измененном таймфрейме для расчета Pivot - H4 вместо D1. В этом плане легко придти к компромиссу. Достаточно добавить в настроечные параметры нового индикатора возможность указания таймфрейма. Новый индикатор, учитывающий формулу расчета Pivot (2), и возможностью выбора необходимого таймфрейма, назван FiboPivot_Memory (сохраняет память о предыдущем значении Pivot).

Располагая двумя индикаторами (VolBars_MA_Hist и FiboPivot_Memory), можно видоизменить торговые сигналы, использовавшиеся в эксперте VolBarsMAHist (http://www.forextrade.ru/media/Image/MQLabs/85_ag/VolBarsMAHist_Expert.mq4), а также получить четко выраженные (а главное, более обоснованные, чем в третьей версии эксперта) уровни стоп-приказа и профита (см. рис. 1).


http://www.forextrade.ru/media/Image/MQLabs/93_ag/figure1.png
Рис. 1. Торговые сигналы и уровни стоп-приказа, профита.

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

Для подтверждения сигнала, полученного от VolBarsMAHist, необходимо соответствующее положение цены относительно Pivot, рассчитанного индикатором FiboPivot_Memory. Подтверждением сигнала покупки является нахождение цены открытия свечи ниже Pivot, а для подтверждения продажи - выше Pivot. В таком подтверждении сигнала кроется серьезный недостаток - при затяжном тренде велика вероятность получения серии сигналов в противоположном тренду направлении, что будет приводить к существенным просадкам. Решением данной проблемы является установка строгого чередования сделок, т.е. после короткой обязательно должна быть длинная сделка, а после длинной - короткая. Ограничение выглядит несколько искусственным, но на данном этапе является наилучшей подушкой безопасности системы. Возможно, в будущих исследованиях будет найдено более эффективное решение.

После внимательного рассмотрения рис. 1 нетрудно догадаться о способе установки стоп-приказа и профита каждой сделки. Они устанавливаются на выбранные пользователем уровни поддержки и сопротивления (на рис. 1 это 61.8%), находящиеся на расстоянии от Pivot в процентах от значения, которое рассчитано по формуле (3):


http://www.forextrade.ru/media/Image/MQLabs/93_ag/Formula3.png (3)

где WidthParticipant - коэффициент, устанавливаемый пользователем в диапазоне от 0 до 1. Pivot1 и Pivot2 - значения Pivot, рассчитанные для текущего и предыдущего дней.

Если значения процентов для вычисления уровней профита и стопа установить одинаковые, то получим большую прибыль при закрытии сделки по профиту по сравнению с размером убытка при закрытии сделки по стопу. Это преимущество достигается по той причине, что поддержка и сопротивление, рассчитанные по одинаковой процентной величине, будут находиться на равном расстоянии от Pivot. Условия же открытия сделки таковы (при Sell - выше Pivot, а при Buy - ниже Pivot), что цена оказывается ближе к стоп-приказу, чем к профиту. Отсюда, хоть и небольшое, но преимущество профита.

Перейдем к изменению эксперта VolBarsMAHist в соответствии с новыми правилами торговли. Сначала изменим имя эксперта на VolBarsMAHistPivot. Далее необходимо изменить список настроечных параметров:

extern double Lots = 0.1;
extern string A1 = "Период VolBars";
extern int BPeriod = 41;
extern string A2 = "Период средней";
extern int MA_Period = 31;
extern string A3 = "Цена применения средней (0 - 6)";
extern int MA_Price = 4;
extern string A4 = "Уровень Фибо для расчета профита";
extern double TPFibo = 61.8;
extern string A5 = "Уровень Фибо для расчета стоп-приказа";
extern double SLFibo = 61.8;
extern string A6 = "Доля участия Pivot прошлого дня (от 0 до 1)";
extern double PivotParticipant = 0.386;
extern string A7 = "Доля участия амплитуды прошлого дня (от 0 до 1)";
extern double WidthParticipant = 0.6;
extern string A8 = "Таймфрейм для расчета Pivot";
extern int PivotTF = 1440;
extern string OpenOrderSound = "ok.wav"; // Звуковой сигнал при открытии позиции
extern int MagicNumber = 11254; // Уникальный идентификатор своих ордеров
Первые четыре параметра - Lots, BPeriod, MA_Period и MA_Price - остались без изменений. Поменяли название два следующих параметра: TPFactor - на TPFibo и SLFactor - на SLFibo. Это значения в процентах, на которые умножается величина Width, рассчитанная по формуле (3).

Параметры PivotParticipant и WidthParticipant - это коэффициенты, при помощи которых пользователь может устанавливать значимость значений предыдущего дня в текущих показаниях индикатора FiboPivot_Memory. Значения должны лежать в диапазоне от 0 до 1, иначе эксперт выдаст сообщение об ошибке и отключится.

Последний новый параметр - PivotTF. С его помощью можно указать таймфрейм, на котором рассчитывается значение PivotTF. Таймфрейм должен соответствовать одной из стандартных констант MQL4, а именно: 1, 5, 15, 30, 60, 240, 1440, 10080 или 43200. Вторым условием корректности значения PivotTF является превышение им величины текущего таймфрейма, на котором запущен эксперт. Например, если текущий таймфрейм H1, то значение PivotTF не может быть менее 60.

Значительным изменениям подверглась функция генерации сигнала GetSignal:

//+-------------------------------------------------------------------------------------+
//| Генерация сигналов покупки и продажи |
//+-------------------------------------------------------------------------------------+
void GetSignal(int n)
{
// - 1 - ============================== Инициализация переменных ========================
Signal = 0; // Сигнал не определен
int Up = 0, Down = 0, // Сумма разниц MA для роста и падений МА
NUp = 0, NDown = 0; // Количество растущих и падающих МА
Bulls[1] = Bulls[0]; Bears[1] = Bears[0]; // Перемещение значений силы на один бар влево
// Первые элементы масиивов освобождаются для
// принятия новых значений
// - 1 - ========================== Окончание блока =====================================

// - 2 - ================ Подсчет сумм изменений МА для первого бара ====================
double PrevMA = iMA(NULL, 0, MA_Period, 0, MODE_SMA, // Значение средней на предыдущем
MA_Price, BPeriod+n+1); // баре
for (int k = BPeriod+n; k >= n; k--)// Расчет производится среди последних BPeriod баров
{
double MA = iMA(NULL, 0, MA_Period, 0, MODE_SMA, MA_Price, k); // Значение средней на
// текущем баре
if (PrevMA > MA) // Зафиксировано падение МА
{
NDown++; // Увеличиваем счетчик количества падений МА
Down += MathRound((PrevMA - MA)/Point); // Увеличиваем разность между МА в пп
}
if (PrevMA < MA) // Зафиксирован рост МА
{
NUp++; // Увеличиваем счетчик количества роста МА
Up += MathRound((MA - PrevMA)/Point); // Увеличиваем разность между МА в пп
}
PrevMA = MA;
}
Bulls[0] = Up*NUp; // Вычисление значения силы быков на баре №1
Bears[0] = Down*NDown; // Вычисление значения силы медведй на баре №2
// - 2 - ========================== Окончание блока =====================================

// - 3 - ================ Расчет разностей между силой быков и медведей =================
if (Bulls[1] == 0 && Bears[1] == 0) // Если значение сил для второго бара не..
return; // ..сформировано, то расчет разностей невозможен. Экстренный выход из функции
double Hist2 = Bulls[1] - Bears[1]; // Разность сил на втором баре
double Hist1 = Bulls[0] - Bears[0]; // Разность сил на первом баре
// - 3 - ========================== Окончание блока =====================================

// - 4 - ========================== Вычисление Pivot ====================================
int TFn = iBarShift(NULL, PivotTF, Time[n-1]); // Вычисление времени открытия бара,..
// ..которому принадлежит бар n..
// ..текущего таймфрейма
if (iTime(NULL, PivotTF, TFn) != LastPivot) // Если бар таймфрейма PivotTF новый,..
{ // ..то совершаем новые вычисления
double HighV = iHigh(NULL, PivotTF, TFn+1); // Максимум предыдущего бара
double HighV1 = iHigh(NULL, PivotTF, TFn+2); // Максимум предпредыдущего бара
double LowV = iLow(NULL, PivotTF, TFn+1); // Минимум предыдущего бара
double LowV1 = iLow(NULL, PivotTF, TFn+2); // Минимум предпредыдущего бара
double CloseV = iClose(NULL, PivotTF, TFn+1); // Закрытие предыдущего бара
double CloseV1 = iClose(NULL, PivotTF, TFn+2);// Закрытие предпредыдущего бара
double OpenV = iOpen(NULL, PivotTF, TFn); // Открытие текущего бара
double OpenV1 = iOpen(NULL, PivotTF, TFn+1); // Открытие предыдущего бара
PrevPivot = Pivot; // Сохраняем предыдущее значение Pivot
Pivot = (HighV + LowV + CloseV + OpenV + // Рассчитываем текущее значение Pivot
PivotParticipant*(CloseV1 + HighV1 + LowV1 + OpenV1)/4)/
(4+PivotParticipant);
double Width = WidthParticipant*(MathAbs(Pivot - PrevPivot) + // Текущее значение ..
HighV - LowV + HighV1 - LowV1);// ..волатильности..
// ..таймфрейма PivotTF
BuySL = NP(Pivot - Width*(SLFibo/100.0)); // Уровень стоп-приказа длинных
BuyTP = NP(Pivot + Width*(TPFibo/100.0)); // Уровень профита длинных
SellSL = NP(Pivot + Width*(SLFibo/100.0) + Spread); // Уровень стоп-приказа коротких
SellTP = NP(Pivot - Width*(TPFibo/100.0) + Spread); // Уровень профита коротких
LastPivot = iTime(NULL, PivotTF, TFn); // Сохранили время расчета Pivot
}
// - 4 - ========================== Окончание блока =====================================

// - 5 - =========================== Генерация конечного сигнала ========================
if (Hist1 > Hist2 && // Гистограмма VolBarsMA растет
Open[n-1] < Pivot && // Бар открылся ниже Pivot
PrevSignal != 1) // Предыдущий сигнал был не Buy
{
PrevSignal = 1; // Сохраняем значение текущего сигнала
// ..для последующих проверок
Signal = 1; // Установка сигнала Buy
}
if (Hist1 < Hist2 && // Гистограмма VolBarsMA падает
Open[n-1] > Pivot && // Бар открылся ниже Pivot
PrevSignal != -1) // Предыдущий сигнал был не Sell
{
PrevSignal = -1; // Сохраняем значение текущего сигнала
// ..для последующих проверок
Signal = -1; // Установка сигнала Sell
}
// - 5 - ========================== Окончание блока =====================================
}
На один элемент уменьшилось количество элементов массивов Bears и Bulls, т.к. в третьей версии эксперта требовалось определение цвета двух последних гистограмм VolBarsMAHist (для этого нужно вычислить значения силы быков и медведей на последних трех барах), а в текущей версии эксперта необходимо определить цвет только одной гистограммы (для этого достаточно значений силы быков и медведей на двух последних барах). Это привело к уменьшению размера первого блока на одну строку - нет перемещения данных из вторых элементов массивов Bears и Bulls в третьи элементы.

Второй блок оставлен без изменений. Изменения произошли в третьем блоке, который также уменьшился на одну строку - не рассчитывается значение переменной Hist3. Условием окончания функции GetSignal теперь выступает нулевое значение вторых элементов массивов Bears и Bulls.

Блок 4 - новый. Его задачей является расчет значения Pivot, а также уровней стоп-приказа и профита отдельно для длинных (BuySL и BuyTP) и коротких (SellSL и SellTP) сделок. Расчет Pivot производится по формуле (2), для чего используются данные HighV, HighV1,.., OpenV, OpenV1. Предыдущее значение Pivot сохраняется в переменной PrevPivot, а время последнего расчета - в переменной LastPivot. Сохранение времени последнего расчета позволяет не производить лишние вычисления до тех пор, пока не будет распознано открытие новой свечи, соответствующей таймфрейму PivotTF.

В пятом блоке производится генерация сигналов открытия позиций. Как описано выше, сигнал открытия длинной сделки (Signal = 1) подается, если гистограмма VolBarsMAHist растущая, а цена открытия текущей свечи меньше значения Pivot. При этом учитывается, что к настоящему моменту сигнал открытия сделки не равен 1, т.е. 0 или -1. Аналогичным образом происходит генерация сигнала открытия короткой позиции: гистограмма VolBarsMAHist - падающая, а цена открытия текущей свечи больше значения Pivot.

Используются полученные функцией GetSignal результаты в функции Trade. Функция Trade в новой версии эксперта приняла достаточно лаконичный вид:

//+-------------------------------------------------------------------------------------+
//| Открытие позиций |
//+-------------------------------------------------------------------------------------+
bool Trade()
{
// - 1 - ==================== Открытие длинной позиции ==================================
if (Signal > 0)
{
int Res = CheckOrders(OP_SELL); // закрытие коротких сделок, если таковые имеются
if (Res == 0) // Сделок, открытых по текущему сигналу, нет, можно открывать новую
{
if (OpenOrderCorrect(OP_BUY, Lots, NP(Ask), BuySL, BuyTP) != 0) // Открытие сделки
return(False);
}
if (Res == 1) return(False);//Существует короткая позиция, которую закрыть не удалось
}
// - 1 - ==================== Окончание блока ===========================================

// - 2 - ==================== Открытие короткой позиции =================================
if (Signal < 0)
{
Res = CheckOrders(OP_BUY); // закрытие длинных сделок, если таковые имеются
if (Res == 0) // Сделок, открытых по текущему сигналу, нет, можно открывать новую
{
if (OpenOrderCorrect(OP_SELL, Lots, NP(Bid), SellSL, SellTP) != 0)
return(False);
}
if (Res == 1) return(False);// Существует длинная позиция, которую закрыть не удалось
}
// - 2 - ==================== Окончание блока ===========================================

return(True);
}
Как видно, здесь нет ничего лишнего. При выявлении сигнала в ту или иную сторону, первым делом проверяется существование противоположной сделки. Только после ее закрытия осуществляется открытие новой сделки. Уровни стоп-приказа и профита к этому моменту уже рассчитаны и являются значениями переменных BuySL, BuyTP, SellSL и SellTP.

После открытия позиции эксперт должен отслеживать не только новые сигналы, но и изменение уровней стоп-приказа или профита. Периодичность такой проверки совпадает с периодом графика, указанного в настроечном параметре PivotTF. Так как по умолчанию принято значение 1440, то проверка правильности уровней ордера будет производиться один раз в сутки. Эту задачу решает функция CheckStops:

//+-------------------------------------------------------------------------------------+
//| Проверка правильной установки стопов/профитов у своих ордеров |
//+-------------------------------------------------------------------------------------+
bool CheckStops()
{
int total = OrdersTotal() - 1;
for (int i = total; i >= 0; i--) // Используется весь список ордеров
if (OrderSelect(i, SELECT_BY_POS)) // Убедимся, что ордер выбран
if (OrderMagicNumber() == MagicNumber && // Ордер открыт экспертом,
OrderSymbol() == Symbol()) // который прикреплен к текущей валютной паре
{
double SL = 0, TP = 0; // По умолчанию изменять стоп и профит не нужно
if (OrderType() == OP_BUY && // Если найдена длинная позиция
(MathAbs(OrderStopLoss() - BuySL) >= Tick || // и ее стоп или профит не..
MathAbs(OrderTakeProfit() - BuyTP) >= Tick)) // ..равны BuySL и BuyTP, то..
{
if (Bid - BuySL > StopLevel) // ..при условии достаточной..
SL = BuySL; // ..отделенности цены стоп..
// ..нужно изменить
if (BuyTP - Bid > StopLevel) // ..при условии достаточной..
TP = BuyTP; // ..отделенности цены можно..
// ..изменить и профит
}
if (OrderType() == OP_SELL && // Если найдена короткая и ее..
(MathAbs(OrderStopLoss() - SellSL) >= Tick || // ..стоп или профит не равны..
MathAbs(OrderTakeProfit() - SellTP) >= Tick))// ..SellSL и SellTP, то..
{
if (SellSL - Ask > StopLevel) // ..при условии достаточной..
SL = SellSL; // ..отделенности цены стоп..
// ..нужно изменить
if (Ask - SellTP > StopLevel) // ..при условии достаточной..
TP = SellTP; // ..отделенности цены можно..
// ..изменить и профит
}
if (SL > 0 && TP > 0) // Если необходимо менять стоп
// ..или профит, то проверяем..
if (WaitForTradeContext()) // ..свободен ли торговый поток
if (!OrderModify(OrderTicket(), 0, SL, TP, 0))// Если не удалось изменить..
return(False); // ..уровни, то результат false
}
return(True); // Уровни успешно изменены
}
Функция из существующих ордеров выбирает "свой" и, в зависимости от типа найденного ордера, сравнивает его стоп-приказ со значением переменной BuySL или SellSL. Имеющийся уровень профита сравнивается со значением BuyTP или SellTP. Если зафиксировано хотя бы одно неравенство, то дополнительно проверяется возможность установки заданных уровней (достаточное расстояние от текущей цены до нового уровня). Если все проверки успешно пройдены, то внутренние переменные функции SL и TP принимают значения, отличные от нуля. Это является сигналом для совершения модификации текущего ордера. Если в процессе модификации возникла ошибка, то результатом функции будет false, что приведет к вызову функции CheckStops на следующем тике. В противном случае функция вернет значение true и не будет вызвана до формирования новой дневной (при PivotTF = 1440) свечи.

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


Тестирование советника
Исторический период при тестировании использовался следующий: 01.01.2009 - 04.12.2010. Период графика Н1. Для каждой валютной пары был подобран свой набор входных параметров, который отличается значениями четырех переменных: BPeriod, MAPeriod, TPFibo и SLFibo. Все остальные параметры использовались со значениями, принятыми по умолчанию (см. рис. 2-5).

http://www.forextrade.ru/media/Image/MQLabs/93_ag/EURUSD.gif
Рис. 2. Результаты тестирования эксперта VolBarsMAHistPivot на валютной паре EURUSD.

EURUSD. Значения параметров: BPeriod = 43, MA_Period = 45, TPFibo = 200, SLFibo = 90. Кривая баланса радует глаз постоянным ростом, хотя и далека от идеальной формы. В данном случае важным фактором является оптимистичное окончание тестирования - продолжение роста. Такую картину, к сожалению, редко удается понаблюдать. Чистая прибыль 5 662 доллара против максимальной просадки 1 054 доллара. Фактор восстановления 5.37. С учетом формы кривой баланса это отличный результат.

http://www.forextrade.ru/media/Image/MQLabs/93_ag/USDCHF.gif
Рис. 3. Результаты тестирования эксперта VolBarsMAHistPivot на валютной паре USDCHF.

USDCHF. Значения параметров: BPeriod = 43, MA_Period = 6, TPFibo = 165, SLFibo = 180. Кривая баланса выглядит еще увереннее, чем кривая баланса евро. Не сложилось лишь с последним отрезком тестирования - последние 30 сделок не принесли ощутимого прироста капитала. Чистая прибыль 5 560 долларов против максимальной просадки 689 долларов. Фактор восстановления 8.07 - потрясающий результат.

http://www.forextrade.ru/media/Image/MQLabs/93_ag/GBPUSD.gif
Рис. 4. Результаты тестирования эксперта VolBarsMAHistPivot на валютной паре GBPUSD.

GBPUSD. Значения параметров: BPeriod = 58, MA_Period = 19, TPFibo = 150, SLFibo = 100. Не все так гладко у фунта... Хотя нет - как раз гладко. Даже очень гладкой вышла большая часть тестирования. Накопление достаточного количества прибыли произошло в первой половине 2009-ого года. С тех пор заметного прироста не произошло - в течение полутора лет (119 сделок) прибыль составила около 1 800 долларов против 7 500 долларов, накопленных в первых 75 сделках. Справедливости ради стоит заметить, что и просадка в течение последних 119 сделок не выходила за разумные границы - 1 042 доллара. В итоге чистая прибыль зафиксирована на отметке 9 330 долларов, что дало фактор восстановления 8.95. Это, хоть и наибольший ФВ среди сегодняшних результатов, но доверие вызывает наименьшее, т.к. уж больно пологой выглядит кривая баланса в последних 3/4 тестирования.

http://www.forextrade.ru/media/Image/MQLabs/93_ag/USDJPY.gif
Рис. 5. Результаты тестирования эксперта VolBarsMAHistPivot на валютной паре USDJPY.

USDJPY. Значения параметров: BPeriod = 40, MA_Period = 39, TPFibo = 85, SLFibo = 35. Вид кривой баланса довольно неоднозначен - есть привлекательные участки роста, но имеются и не менее устрашающие пологие участки с ощутимыми впадинами. В итоге получаем такое же отношение к использованию системы на йене в будущем. Чистая прибыль 2 616 долларов при максимальной просадке 448 долларов. Фактор восстановления 5.84.


Доработка стратегии для использования в AutoGraf 4.0
Стратегия для AutoGraf на основании эксперта VolBarsMAHistPivot подобна предыдущей версии, разработанной на базе эксперта VolBarsMAHist. Отличие заключается в количестве настроечных параметров - вместо былых шести будет восемь. Соответствие первых пяти параметров осталось неизменным: BPeriod - AT_1, MA_Period - AT_2, MA_Price - AT_3, TPFibo - AT_4, SLFibo - AT_5. Вместо ATRPeriod, которому соответствовал параметр AT_6, в четвертой версии используется PivotParticipant. Седьмому параметру (AT_7) соответствует WidthParticipant, а восьмому (AT_8) - PivotTF.

Указание размера открываемых стратегией сделок можно осуществлять при помощи панели настоек AutoGraf (параметр Lot).

Запуск стратегии VolBarsMAHistPivot в среде AutoGraf 4.0 состоит из следующих шагов:
Получить файл по ссылке Файлы стратегий для AutoGraf 4.0 (http://www.forextrade.ru/media/Image/MQLabs/93_ag/AG_VolBarsMAHistPivot.zip) и распаковать полученный архив в папку MT4\experts\libraries (с перезаписью файлов AG_AT.ex4 и AG_AT.mq4). Запустить AutoGraf. Для работы стратегии в ключе приведенных результатов в окне настроек AutoGraf (закладка "Входные параметры") установить нужные значения параметров AT_1 - AT_8. Полное повторение результатов при этом не гарантируется. Выбрать стратегию №5. Для этого необходимо передвинуть вверх значок So и среди названий стратегий найти значок S5, который также потянуть вверх. Запустить функцию автоматической торговли, передвинув значок AT в верхнее положение.


Советник VolBarsMAHistPivot (http://www.forextrade.ru/media/Image/MQLabs/93_ag/VolBarsMAHistPivot_Expert.mq4)
Индикатор FiboPivot_Memory (http://www.forextrade.ru/media/Image/MQLabs/93_ag/FiboPivot_Memory.mq4)
Индикатор VolBars_MA_Hist (http://www.forextrade.ru/media/Image/MQLabs/93_ag/VolBars_MA_Hist.mq4)
Файлы стратегий для AutoGraf 4.0 (http://www.forextrade.ru/media/Image/MQLabs/93_ag/AG_VolBarsMAHistPivot.zip)
Развернутые результаты тестирования эксперта (http://www.forextrade.ru/media/Image/MQLabs/93_ag/Test.zip)

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

anatolyp
08-12-2010, 17:58
Отличная работа!Но в результатах тестирования я не увидел работу автолота.Или он не работает совсем? И еще, я предлагал повысить качество входа путем просмотра условий на младших ТФ.Например цена ниже пивота не только на 1440, а еще и на 240 (при соблюдении остальных критериев), тогда точно бай.Или это трудновыполнимая задача?

Scriptong
10-12-2010, 15:16
Отличная работа!Но в результатах тестирования я не увидел работу автолота.Или он не работает совсем? И еще, я предлагал повысить качество входа путем просмотра условий на младших ТФ.Например цена ниже пивота не только на 1440, а еще и на 240 (при соблюдении остальных критериев), тогда точно бай.Или это трудновыполнимая задача?

1) Что такое "автолот"?
2) Просмотр нескольких таймфреймов возможен, но я не увидел в этом перспективы

|Alex|
12-12-2010, 13:12
Спасибо, вам за проделанную работу в разработке "Линии силы быков и медведей" но я думаю ресурс еще не исчерпан, так как остались нюансы со входом и выходом. Между прочем такая особенность была мною замечена, что в "Линии силы быков и медведей.4" была увеличина просадка в разы по сравнению с 3ей версией, хоть прибыль выросла не значительно (хотя это мое субьективное мнение, (тестировал по фунту на дневках))


Отличная работа!Но в результатах тестирования я не увидел работу автолота.Или он не работает совсем? И еще, я предлагал повысить качество входа путем просмотра условий на младших ТФ.Например цена ниже пивота не только на 1440, а еще и на 240 (при соблюдении остальных критериев), тогда точно бай.Или это трудновыполнимая задача?

Как я понял под автолотом подразумевается повышение лота при достижении некого уровня баланса (К примеру: при увеличении баланса на 10% лот увеличивается в двое ну и т.д в прогрессивной последовательности)

Насчет просмотра младших ТФ полностью с вами согласен, были ситуации при трендах младшие ТФ давали дополнительные сигналы для входа и производилась доливка к существующим позициям но это очень редко случалось, но я думаю что такие изменеия в код эксперта уменьшат его "работоспособность" в том плане что при прогоне в тестере очень долго думать будет =)

Scriptong
13-12-2010, 12:28
Спасибо, вам за проделанную работу в разработке "Линии силы быков и медведей" но я думаю ресурс еще не исчерпан, так как остались нюансы со входом и выходом.

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



Между прочем такая особенность была мною замечена, что в "Линии силы быков и медведей.4" была увеличина просадка в разы по сравнению с 3ей версией, хоть прибыль выросла не значительно (хотя это мое субьективное мнение, (тестировал по фунту на дневках))
Таймфрейм D1:confused:
По какому же таймфрейму вы строили Pivot? По неделям? Или вообще по месяцам? Это и есть ответом на вопрос об увеличении просадки. Если же сравнивать тестирование по Н1, то просадка у четвертой версии по всем парам меньше (по евро на 34 доллара больше), чем в третьей.

Если также по D1, то смысл Pivot, как подтверждающего индикатора, теряется полностью. Советник, конечно, ошибку не выдает, но смысла в таком режиме работы советника нет.

|Alex|
13-12-2010, 15:18
Разумеется вопрос ТФ у каждого свои просто по "стилю" предпочитаю торговать на высоких ТФ так сказать в долгосрочку так и надежнее, и в силу обстоятельств выгодно по времени (если есть время ищу дополнительные сигналы с меньших ТФ, как я упоминал выше в качестве доливки к существующим позициям)

|Alex|
14-12-2010, 11:44
Хочу вынести вот такой "нюанс" в стратегии используется скользящая средняя за n-период, почему бы её не модифицировать до Адаптивной Скользящей Средней Кауфмана (АМА), смысл примерно такой: при "бурном" тренде используется быстрая скользящая т.к. она менее запаздывает, а при окончании тренда вхождение в так называемый флэт используется медленная скользящая, таким образом на графике образуется кривая АМА и по аналогии с выше изложенной стратегией берем BPeriod ну и т.д. я думаю что точность сигналов должна повысится хотя я пока провожу предварительные приготовления.
Кто, что, думает по такому "нюансу". Рад буду услышать какие либо замечания или рассуждения.

Scriptong
14-12-2010, 21:39
Разумеется вопрос ТФ у каждого свои просто по "стилю" предпочитаю торговать на высоких ТФ так сказать в долгосрочку так и надежнее, и в силу обстоятельств выгодно по времени (если есть время ищу дополнительные сигналы с меньших ТФ, как я упоминал выше в качестве доливки к существующим позициям)

Вы немного не поняли. Я не против высоких ТФ. В некоторых случаях даже "очень за". Суть моего высказывания сводится к тому, что если вы основной сигнал данной стратегии берете с D1, то подтверждающий (Pivot) необходимо брать с более высокого ТФ (W1 или MN1). В противном случае стратегия теряет свое преимущество.

Scriptong
14-12-2010, 21:39
Кто, что, думает по такому "нюансу". Рад буду услышать какие либо замечания или рассуждения.

Ну а здесь надо подумать...

|Alex|
16-12-2010, 11:07
Проведя предварительные приготовления складывается такой вывод сигналы более точны и в индикаторе нет сильного шума (большая смена цветов в короткий промежуток времени), но к сожалению провести более глубокие "тестирования" представляются для меня очень трудоемкими т.к. "не очень" владею mql языком и все "исследования" проводил банально в Excel'е. Понятно что до советника еще далеко но я думаю вполне реально создать хотя бы индикатор. Мб кто-то из форумчан заинтересуется мыслью об написании индикатора. ( простите мб невежество, но я думаю это не так сложно прицепить данные от одного индикатора к другому).

KROOL
18-12-2010, 12:00
Отлично!
Спасибо Scriptong.
Сейчас по-тестирую.

Batman
30-12-2010, 04:37
Что может быть причиной таких записей в журнале и, как следствие - неработоспособность эксперта?
2010.12.30 07:06:24 Old tick EURUSD1 1.32550/1.32570
2010.12.30 07:06:24 Old tick EURUSD5 1.32550/1.32570
2010.12.30 07:06:24 Old tick EURUSD15 1.32550/1.32570
2010.12.30 07:06:24 Old tick EURUSD30 1.32550/1.32570
2010.12.30 07:06:24 Old tick EURUSD60 1.32550/1.32570
2010.12.30 07:06:24 Old tick EURUSD240 1.32550/1.32570
2010.12.30 07:06:24 Old tick EURUSD1440 1.32550/1.32570
Счёт - не пятизнак...

Scriptong
30-12-2010, 16:32
К сожалению, даже среди разработчиков MT4 нет согласованности по поводу трактовки такой ситуации - Что означает Old tick (http://forum.mql4.com/ru/3231#6900)