PDA

View Full Version : Комплексный советник



Pages : [1] 2

Scriptong
20-10-2009, 21:09
Не секрет, что большинство используемых трейдерами стратегий торговли являются довольно простыми, но от этого не менее действенными. Чаще всего эти стратегии основаны на стандартных индикаторах, которые встроены в МТ4. И, что самое интересное, сам принцип работы по этим встроенным индикаторам является довольно однообразным за редким исключением.

Например, стратегия торговли по индикатору Moving Average чаще всего основана на пересечении двух средних скользящих с разным периодом или разным сдвигом, различные осцилляторы (MACD, Stochastic, RSI, RVI и т. д.) дают сигналы при пересечении своих главных и сигнальных линий или (в случае отсутствия сигнальной линии) при пересечении заданных пользователем уровней.

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

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

Также стоит учесть возможность комбинирования нескольких индикаторов, так как далеко не каждую стратегию можно реализовать на одном индикаторе. Этого можно достичь, придав одинаковые веса сигналу каждого индикатива. В результате, при использовании двух индикаторов, для получения сигнала BUY нам нужно, чтобы каждый из них дал сигнал BUY. Если присвоить сигналу BUY, полученного от одного индикатора, значение 1, то совместный сигнал от двух систем должен быть равен двум. Сигналу SELL можно присвоить значение -1, тогда суммарный SELL должен быть равен -2. В таком случае все остальные значения суммарного сигнала (0, 1, -1) будут эквивалентны событию "нет сигнала".

Итак, остается только описать включаемые в код комплексного советника министратегии, каждая из которых основана на одном индикаторе. Описание в каждом случае будет довольно лаконичным, так как мы оперируем всего лишь тремя типами сигналов. А для того чтобы не приводить целиком функцию GetSignal, которая на этот раз вышла очень громоздкой, разобьем ее по индикаторам. Каждому индикатору для включения/выключения соответствует свой параметр, начинающийся со слова "Use", за которым следует сокращенное название индикатора.

1) Average Directional Movement Index (ADX)
Оперирует только двумя типами сигналов: BUY - главная линия находится выше сигнальной, SELL - главная линия находится ниже сигнальной. Состояние "нет сигнала" не используется. Стратегией можно управлять при помощи внешних переменных ADXPeriod (период индикатора) и ADXPrice (цена, по которой считаются значения).

if (UseADX)
{
double PlusDI1 = iADX(Symbol(), 0, ADXPeriod, ADXPrice, MODE_PLUSDI, 1);
double MinusDI1 = iADX(Symbol(), 0, ADXPeriod, ADXPrice, MODE_MINUSDI, 1);
if (PlusDI1 > MinusDI1) // Buy Signal
Signal++;
if (PlusDI1 < MinusDI1) // Sell Signal
Signal--;
}

2) Полосы Боллинджера (Bollinger Bands)
Присутствуют все три типа сигналов: BUY - цена закрытия предыдущей свечи ниже нижней линии, SELL - цена закрытия предыдущей свечи выше верхней линии, "нет сигнала" - цена закрытия свечи между линиями. Внешние переменные, соответствуют: периоду индикатора (BandsPeriod), смещению вправо (BandsShift), отклонению (BandsDeviation) и цене расчета (BandsPrice).
if (UseBollinger)
{
double BandsUp = iBands(Symbol(), 0, BandsPeriod, BandsDeviation, BandsShift,
BandsPrice, MODE_UPPER, 1);
double BandsDn = iBands(Symbol(), 0, BandsPeriod, BandsDeviation, BandsShift,
BandsPrice, MODE_LOWER, 1);
if (Close[1] < BandsDn) // Buy Signal
Signal++;
if (Close[1] > BandsUp) // Sell Signal
Signal--;
}

3) Commodity Channel Index (CCI)
Также используются все три сигнала, но основное состояние все же "нет сигнала". Редкое появление торговых сигналов соответствует пересечению верхнего уровня сверху вниз (BUY) и пересечению нижнего уровня снизу вверх (SELL). Верхний и нижний уровни определяются значением внешних параметров CCIHighLevel и CCILowLevel. Период и цена расчета индикатора определяются значениями CCIPeriod и CCIPrice.

if (UseCCI)
{
double CCI1 = iCCI(Symbol(), 0, CCIPeriod, CCIPrice, 1);
double CCI2 = iCCI(Symbol(), 0, CCIPeriod, CCIPrice, 2);
if (CCI2 < CCILowLevel && CCI1 > CCILowLevel && CCI1 < CCIHighLevel) // Buy Signal
Signal++;
if (CCI2 > CCIHighLevel && CCI1 < CCIHighLevel && CCI1 > CCILowLevel) // Sell Signal
Signal--;
}

4) MovingAverage (MA)
Сигнал рассчитывается по взаимному расположению двух средних скользящих, одна из которых должна иметь меньший период (быстрая МА), а другая, соответственно, больший (медленная МА). Их параметры можно указать в таких переменных: MAFastPeriod и MASlowPeriod (периоды средних), MAFastPrice и MASlowPrice (цены расчета средних), MAFastShift и MASlowShift (смещения вправо), MAFastMethod и MASlowMethod (метод усреднения - простой, экспоненциальный, сглаженный, линейно-взвешенный). Сигнал BUY выдается, когда быстрая МА располагается выше медленной, а сигнал SELL, когда медленная выше быстрой. Состояние "нет сигнала" не используется.
if (UseCrossMA)
{
double MAFast = iMA(Symbol(), 0, MAFastPeriod, MAFastShift, MAFastMethod,
MAFastPrice, 1);
double MASlow = iMA(Symbol(), 0, MASlowPeriod, MASlowShift, MASlowMethod,
MASlowPrice, 1);
if (MAFast > MASlow) // Buy Signal
Signal++;
if (MAFast < MASlow) // Sell Signal
Signal--;
}

5) Parabolic SAR
Управляется значением внешних переменных SARStep (шаг индикатора) и SARMaximum (максимум индикатора). Сигнал BUY поступает, когда точка параболика находится ниже цены открытия свечи, а сигнал SELL, когда точка находится выше цены открытия свечи. "Нет сигнала" также не используется.
if (UseSAR)
{
double SAR = iSAR(Symbol(), 0, SARStep, SARMaximum, 1);
if (SAR < Open[1]) // Buy Signal
Signal++;
if (SAR > Open[1]) // Sell Signal
Signal--;
}

6) Standard Deviation (StDev)
Этому индикатору соответствует четыре параметра: StDevPeriod (период индикатора), StDevPrice (цена расчета индикатора), StDevShift (смещение вправо) и StDevMethod (метод сглаживания). Сигнал BUY поступает, если значения индикатора растут (предыдущее больше еще более раннего), а сигнал SELL подается, когда значения индикатора падают (предыдущее меньше более раннего). Состояния "нет сигнала" нет.
if (UseStDev)
{
double SD1 = iStdDev(Symbol(), 0, StDevPeriod, StDevShift, StDevMethod,
StDevPrice, 1);
double SD2 = iStdDev(Symbol(), 0, StDevPeriod, StDevShift, StDevMethod,
StDevPrice, 2);
if (SD1 > SD2) // Buy Signal
Signal++;
if (SD1 < SD2) // Sell Signal
Signal--;
}

7) Moving Average Convergence/Divergence (MACD)
Оперирует четырьмя переменными: MACDFast (период быстрой МА), MACDSlow (период медленной МА), MACDSignal (период сигнальной МА) и MAPrice (цена расчета средних). Сигналы также просты: BUY - главная линия выше сигнальной, SELL - главная линия ниже сигнальной. "Нет сигнала" не используется.
if (UseMACD)
{
double MACDMain = iMACD(Symbol(), 0, MACDFast, MACDSlow, MACDSignal, MACDPrice,
MODE_MAIN, 1);
double MACDSig = iMACD(Symbol(), 0, MACDFast, MACDSlow, MACDSignal, MACDPrice,
MODE_SIGNAL, 1);
if (MACDMain > MACDSig) // Buy Signal
Signal++;
if (MACDMain < MACDSig) // Sell Signal
Signal--;
}

8) Индикатор DeMarker
Формирует сигналы подобно CCI: BUY - линия индикатора пересекает уровень перекупленности (DMHighLevel) сверху вниз, SELL - линия индикатора пересекает уровень перепроданности (DMLowLevel) снизу вверх, "нет сигнала" - все остальные свечи, где не зафиксированы сигналы покупки или продажи. Период индикатора указывается в переменной DMPeriod.
if (UseDeMarker)
{
double DM1 = iDeMarker(Symbol(), 0, DMPeriod, 1);
double DM2 = iDeMarker(Symbol(), 0, DMPeriod, 2);
if (DM1 > DMLowLevel && DM2 < DMLowLevel && DM1 < DMHighLevel) // Buy Signal
Signal++;
if (DM1 < DMHighLevel && DM2 > DMHighLevel && DM1 > DMLowLevel) // Sell Signal
Signal--;
}

9) Индикатор Envelopes
Использует целых пять внешних переменных: EnvPeriod (период индикатора), EnvPrice (цена расчета), EnvShift (сдвиг вправо), EnvMethod (метод сглаживания) и EnvDeviation (отклонение индикатора). Так как внешний вид, да и сама суть индикатора - канал, то сигналы подобны сигналам при работе в канале: BUY - цена закрытия свечи ниже нижней линии, SELL - цена закрытия свечи выше верхней линии и "нет сигнала" - цена закрытия между линиями.
if (UseEnvelopes)
{
double EnvUp = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
EnvDeviation, MODE_UPPER, 1);
double EnvDn = iEnvelopes(Symbol(), 0, EnvPeriod, EnvMethod, EnvShift, EnvPrice,
EnvDeviation, MODE_LOWER, 1);
if (Close[1] < EnvDn) // Buy Signal
Signal++;
if (Close[1] > EnvUp) // Sell Signal
Signal--;
}

10) Индикатор Force Index
К нему относятся три внешние переменные: FIPeriod (период индикатора), FIPrice (цена расчета) и FIMethod (метод усреднения). Сигналы идентичны сигналам индикатора StDev: BUY - растущие значения (предыдущее выше ему предшествующего) и SELL - падающие значения (предыдущее ниже ему предшествующего). Состояние "нет сигнала" не используется.
if (UseForceIndex)
{
double FI = iForce(Symbol(), 0, FIPeriod, FIMethod, FIPrice, 1);
if (FI > 0) // Buy Signal
Signal++;
if (FI < 0) // Sell Signal
Signal--;
}

11) Индикатор Momentum
Пользователю доступны для изменения только два параметра: MomPeriod (период моментума) и MomPrice (цена расчета). Сигналы такие же, как и у Force Index: BUY - растущие значения (предыдущее выше ему предшествующего) и SELL - падающие значения (предыдущее ниже ему предшествующего). Состояние "нет сигнала" не используется.
if (UseMomentum)
{
double Mom1 = iMomentum(Symbol(), 0, MomPeriod, MomPrice, 1);
double Mom2 = iMomentum(Symbol(), 0, MomPeriod, MomPrice, 2);
if (Mom1 > Mom2) // Buy Signal
Signal++;
if (Mom1 < Mom2) // Sell Signal
Signal--;
}

12) Moving Average of Oscillator (OsMA)
Осциллятор обладает таким же набором параметров, как и MACD: OsMAFast (период быстрой МА), OsMASlow (период медленной МА), OsMASignal (период сигнальной МА) и OsMAprice (цена расчета). Но сигналы считаются немного по-другому: BUY - значение гистограммы выше нуля, SELL - значение гистограммы ниже нуля. Состояние "нет сигнала" будет лишь в тех редких случаях, когда значение OsMA будет равно нулю.
if (UseOsMA)
{
double OsMA = iOsMA(Symbol(), 0, OsMAFast, OsMASlow, OsMASignal, OsMAPrice, 1);

if (OsMA > 0) // Buy Signal
Signal++;
if (OsMA < 0) // Sell Signal
Signal--;
}

13) Индикатор RSI
Подобен CCI и DeMarker'у. Сигналами являются выход из зон перекупленности (RSIHighLevel) и перепроданности (RSILowLevel). Поэтому редкие сигналы BUY соответствуют пересечению верхнего уровня сверху вниз, а сигналы SELL - пересечению нижнего уровня снизу вверх. Основное состояние "нет сигнала". Период индикатора можно задать в параметре RSIPeriod, а цену расчета в параметре RSIPrice.
if (UseRSI)
{
double RSI1 = iRSI(Symbol(), 0, RSIPeriod, RSIPrice, 1);
double RSI2 = iRSI(Symbol(), 0, RSIPeriod, RSIPrice, 2);
if (RSI2 < RSILowLevel && RSI1 > RSILowLevel && RSI1 < RSIHighLevel) // Buy Signal
Signal++;
if (RSI2 > RSIHighLevel && RSI1 < RSIHighLevel && RSI1 > RSILowLevel) // Sell Signal
Signal--;
}

14) Индикатор RVI
Несмотря на схожие с RSI аббревиатуры, это совершенно другой индикатор. Пользователю доступен для изменений лишь один параметр - RVIPeriod. Сигналов же только два: BUY - главная линия выше сигнальной, SELL - главная линия ниже сигнальной. Состояние "нет сигнала" не используется.
if (UseRVI)
{
double RVIM = iRVI(Symbol(), 0, RVIPeriod, MODE_MAIN, 1);
double RVIS = iRVI(Symbol(), 0, RVIPeriod, MODE_SIGNAL, 1);
if (RVIM > RVIS) // Buy Signal
Signal++;
if (RVIM < RVIS) // Sell Signal
Signal--;
}

15) Stochastic Oscillator
Осциллятор состоит из двух линий - главной и сигнальной, что позволяет торговать по сигналам пересечения этих линий. Поэтому сигналы такие: BUY - главная линия выше сигнальной, SELL - главная линия ниже сигнальной. Параметры, доступные пользователю: StochK - %К-период, StochD - %D-период, StochSlowing - замедление индикатора, StochPrice - цена расчета, StochMethod - метод усреднения.
if (UseStochastic)
{
double StochM = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
StochPrice, MODE_MAIN, 1);
double StochS = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod,
StochPrice, MODE_SIGNAL, 1);
if (StochM > StochS) // Buy Signal
Signal++;
if (StochM < StochS) // Sell Signal
Signal--;
}

16) Williams Percent Range (WPR)
Стоит в одном ряду с RSI, CCI и DeMarker. Поэтому сигналы подобны: BUY - пересечение уровня перекупленности (WPRHighLevel) сверху вниз и SELL - пересечение уровня перепроданности (WPRLowLevel) снизу вверх. Все остальное - "нет сигнала". Изменять извне возможно только параметр периода индикатора - WPRPeriod.
if (UseWPR)
{
double WPR1 = iWPR(Symbol(), 0, WPRPeriod, 1);
double WPR2 = iWPR(Symbol(), 0, WPRPeriod, 2);
if (WPR1 > WPRLowLevel && WPR2 < WPRLowLevel && WPR1 < WPRHighLevel) // Buy Signal
Signal++;
if (WPR1 < WPRHighLevel && WPR2 > WPRHighLevel && WPR1 > WPRLowLevel) // Sell Signal
Signal--;
}

17) Awesome Oscillator (AO)
Не имеет параметров, доступных пользователю. Одним из принципов работы с индикатором является поиск "блюдец". "Блюдцем" Билл Вильямс называет два увеличивающихся значения баров в положительной области, между которыми находится бар с меньшим значением. Соответственно "перевернутое блюдце" - это два уменьшающихся значения баров в отрицательной области, между которыми находится бар с большим значением. Таким образом, для идентификации "блюдец" потребуется три последних сформированных свечи (в коде - четыре). Сигнал BUY - "блюдце", сигнал SELL - "перевернутое блюдце", "нет сигнала" - все остальные случаи.
if (UseAO)
{
double AO1 = iAO(Symbol(), 0, 1);
double AO2 = iAO(Symbol(), 0, 2);
double AO3 = iAO(Symbol(), 0, 3);
double AO4 = iAO(Symbol(), 0, 4);
if (AO1 > 0 && AO3 > AO4 && AO2 < AO3 && AO1 > AO2) // Buy Signal
Signal++;
if (AO1 < 0 && AO3 < AO4 && AO2 > AO3 && AO1 < AO2) // Sell Signal
Signal--;
}

18) Accelerator/Decelerator Oscillator (AC)
Также не имеет параметров. Сигналы очень простые: BUY - две последние гистограммы выше нуля и зеленого цвета (увеличение значений индикатора), SELL - две последние гистограммы ниже нуля и красного цвета (уменьшение значений индикатора), "нет сигнала" - все остальные случаи.
if (UseAC)
{
double AC1 = iAC(Symbol(), 0, 1);
double AC2 = iAC(Symbol(), 0, 2);
double AC3 = iAC(Symbol(), 0, 3);
if (AC1 > 0 && AC3 < AC2 && AC2 < AC1) // Buy Signal
Signal++;
if (AC1 < 0 && AC3 > AC2 && AC2 > AC1) // Sell Signal
Signal--;
}

19) Фракталы (Fractals)
Не имеет изменяемых параметров. Для восприятия сигналы просты: BUY - последним было пробитие ценой верхнего фрактала, SELL - последним событием было пробитие ценой нижнего фрактала, "нет сигнала" - все остальные случаи. Но в коде это не так просто.

Сначала находится два последних фрактала (один верхний, другой - нижний). Затем находятся максимальная и минимальная цена от текущего бара до бара с соответствующим фракталом. Найденные цены сравниваются со значением фракталов и, если цена выше верхнего фрактала, то это пробитие вверх, если ниже нижнего - то пробитие вниз.
if (UseFractals)
{
int i = 3;
int DnN = 0, UpN = 0;
double UpFr = 0, DnFr = 0;
while (i < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, i) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, i);
UpN = i;
}
if (iFractals(Symbol(), 0, MODE_LOWER, i) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, i);
DnN = i;
}
i++;
}
if (i < Bars)
{
int DnBit = iLowest(Symbol(), 0, MODE_LOW, DnN);
int UpBit = iHighest(Symbol(), 0, MODE_HIGH, UpN);
bool BitUp = False, BitDn = False;
if (High[UpBit] > UpFr) BitUp = True;
if (Low[DnBit] < DnFr) BitDn = True;
if (BitUp && BitDn)
{
if (UpBit < DnBit)
Signal++;
else
Signal--;
}
else
{
if (BitUp) Signal++;
if (BitDn) Signal--;
}
}
}

20) Alligator
Так как индикатор состоит из трех средних скользящих линий, то параметров у него довольно много: JawPeriod (период челюстей, синяя линия), JawShift (сдвиг челюстей вправо), TeethPeriod (период зубов), TeethShift (сдвиг зубов вправо), LipsPeriod (период губ) и LipsShift (сдвиг губ вправо). Также для всех линий используется одинаковый метод усреднения (AlligatorMethod) и цена расчета (AlligatorPrice). Особенностью индикатора является то, что все линии имеют положительный сдвиг вправо. Это позволяет без опаски читать значения индикатора на текущем баре, так как они уже точно сформированы и изменениям не подлежат. Поэтому сигналы подаются такие: BUY - линия губ выше линии зубов, а линия зубов выше линии челюстей; SELL - линия губ ниже линии зубов, а линия зубов ниже линии челюстей. Во всех остальных случаях сигнала нет.
if (UseAlligator)
{
double Jaw = iAlligator(Symbol(), 0, JawPeriod, JawShift, TeethPeriod, TeethShift,
LipsPeriod, LipsShift, AlligatorMethod, AlligatorPrice,
MODE_GATORJAW, 0);
double Teeth = iAlligator(Symbol(), 0, JawPeriod, JawShift, TeethPeriod, TeethShift,
LipsPeriod, LipsShift, AlligatorMethod, AlligatorPrice,
MODE_GATORTEETH, 0);
double Lips = iAlligator(Symbol(), 0, JawPeriod, JawShift, TeethPeriod, TeethShift,
LipsPeriod, LipsShift, AlligatorMethod, AlligatorPrice,
MODE_GATORLIPS, 0);
if (Jaw < Teeth && Teeth < Lips) // Buy Signal
Signal++;
if (Jaw > Teeth && Teeth > Lips) // Sell Signal
Signal--;
}

21) Bill Williams Market Facilitation Index (BWMFI)
Не имеет параметров. Основан на выявлении "приседающего бара" (MFI - вниз, объем - вверх). Отсюда и сигналы такие: BUY - цена закрытия бара выше максимума последнего "приседающего бара", SELL - цена закрытия бара ниже минимума последнего "приседающего бара". Во всех остальных случаях сигнала нет.
if (UseBWMFI)
{
for (i = 2; i < Bars; i++)
{
double MFI = iBWMFI(Symbol(), 0, i);
double MFI2 = iBWMFI(Symbol(), 0, i+1);
if (MFI < MFI2 && Volume[i] > Volume[i+1])
break;
}
if (i < Bars)
{
if (Close[1] > High[i])
Signal++;
if (Close[1] < Low[i])
Signal--;
}
}
Таким образом, на данный момент комплексный советник располагает двадцать одной стратегией, которые можно комбинировать между собой. Это достигается за счет самого последнего блока функции GetSignal:
if (UseInd == MathAbs(Signal))
if (Signal > 0)
{
if (LastBuySignal <= LastSellSignal)
LastBuySignal = Time[0];
}
else
if (LastSellSignal <= LastBuySignal)
LastSellSignal = Time[0];
Абсолютное значение Signal, которое к этому моменту сложилось после обхода всех вышеприведенных блоков, сравнивается со значением UseInd. UseInd, в свою очередь, это сумма всех используемых в советнике параметров UseXXX, которые хоть и являются булевыми, имеют свое численное представление 0 или 1. Переменные LastBuySignal и LastSellSignal нужны для определения "давности" сигнала, чтобы советник мог определять, поступил новый сигнал BUY или это повторение старого.

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

Напоследок приведем несколько успешных результатов, которые достигнуты при тестировании комплексного советника. Чтобы не перечислять значения многочисленных параметров советника, воспользуемся файлами предустановок (set-файлы). Перед проведением тестирования их необходимо скопировать в папку MT4\tester, а для работы онлайн - в папку MT4\experts\presets.

Первый тест (рис. 1) демонстрирует комбинирование индикатора CCI и МА на часовом графике, используя исторический период 01.01.2006 - 03.10.2009 (файл предустановок cciplusmaeurusd.set (http://www.forextrade.ru/media/Image/MQLabs/38_ag/cciplusmaeurusd.set)).http://www.forextrade.ru/media/Image/MQLabs/38_ag/EURUSD.gif
Рис. 1. - График кривой баланса, получаемый при тестировании советника на валютной паре EURUSD.
Результаты притягивают формой кривой баланса, уверенно рвущейся вверх, а также количеством сделок - 317. При этом получена неплохая прибыль 3679 долларов при максимальной просадке 1666 долларов (ФВ = 2.21).

Второй тест (рис. 2) - торговля по индикатору Parabolic SAR на часовом графике за тот же исторический период (файл предустановок parabolicgbp.set (http://www.forextrade.ru/media/Image/MQLabs/38_ag/parabolicgbp.set))
http://www.forextrade.ru/media/Image/MQLabs/38_ag/GBPUSD.gif
Рис. 2. - График кривой баланса, получаемый при тестировании советника на валютной паре GBPUSD.
Все то же самое, что и предыдущий тест, но в численном представлении еще лучше. Количество сделок - 702. Чистая прибыль 4715 долларов против максимальной просадки 1390 долларов (ФВ = 3.39).

Третий тест (рис. 3) - та же стратегия, но на валютной паре USDJPY (файл предустановок parabolicjpy.set (http://www.forextrade.ru/media/Image/MQLabs/38_ag/parabolicjpy.set))
http://www.forextrade.ru/media/Image/MQLabs/38_ag/USDJPY.gif
Рис. 3. - График кривой баланса, получаемый при тестировании советника на валютной паре USDJPY.
Количество сделок 727, чистая прибыль 4454 долларов, а максимальная просадка еще меньше, чем на фунте - 934 доллара, что дает фактор восстановления близкий к пяти (4.77). Вспомнить подобный результат при тестировании пока не могу.

И последний, четвертый тест (рис. 4) - стратегия, основанная на индикаторе Stochastic. Тестирование проводилось на том же периоде, но на таймфрейме Н4, пара GBPJPY (файл предустановок stochasticgbpjpyh4.set (http://www.forextrade.ru/media/Image/MQLabs/38_ag/stochasticgbpjpyh4.set)).
http://www.forextrade.ru/media/Image/MQLabs/38_ag/GBPJPY.gif
Рис. 4. - График кривой баланса, получаемый при тестировании советника на валютной паре GBPJPY.
Отличительной особенностью этого теста является большая конечная прибыль - 11516 долларов (увеличение депозита более чем в два раза за три с половиной года), но справедливости ради стоит заметить, чего это стоило - максимальная просадка 3605 долларов. В итоге фактор восстановления здесь выходит меньший, чем у йены - 3.19.

В конечном итоге мы получили советник, на базе которого можно реализовать большое количество различных стратегий, но все равно далеко не все. К тому же полученный робот обладает такими серьезными недостатками:
Большое количество входных параметров, что не позволяет разработать версию для AutoGraf (ожидайте во второй части статьи)
Для визуального контроля работы эксперта нужно дважды настраивать параметры: в советнике и в самом индикаторе (также есть решение, которое ждите во второй части)
Отсутствие сигналов "закрыть BUY" и "закрыть SELL" без открытия противоположной сделки
Невозможность подключения пользовательских индикаторов без внесения изменений в код.

Советник Complex_Expert (http://www.forextrade.ru/media/Image/MQLabs/38_ag/Complex_Expert.mq4)
Развернутые результаты тестирования эксперта (http://www.forextrade.ru/media/Image/MQLabs/38_ag/Test.zip)

пятый
22-10-2009, 07:21
Scriptong, а как советника поставить на МТ-4?

Scriptong
22-10-2009, 09:54
Scriptong, а как советника поставить на МТ-4?

Также как вы запускаете индикаторы. Только положить файл не в папку МТ4\experts\indicators, а просто в Mt4\experts

пятый
22-10-2009, 13:05
Открываю советник, помечаю, копирую, но когда открываешь меню папки «experts», то там нет строки «вставить». Наверное, я что-то не так делаю.

Scriptong
22-10-2009, 14:15
Открываю советник, помечаю, копирую, но когда открываешь меню папки «experts», то там нет строки «вставить». Наверное, я что-то не так делаю.
Ну конечно не так. Все это нужно проделать в файловом менеджере (типа Total Commander) или просто средствами Windows и только после этого запускать МТ4.

пятый
22-10-2009, 14:45
Я не знаю как это сделать. А нельзя его заархивировать?

Scriptong
22-10-2009, 17:17
Я не знаю как это сделать. А нельзя его заархивировать?

Просто удивительно, как вы пользовались МТ и индикаторами до сих пор;)

Итак, более простой способ, чтобы вы не связывались с копированием файлов:
1) Нажимаете правой клавишей мыши на ссылку в конце статьи "Советник Complex_Expert".
2) В появившемся всплывающем меню выбираете "Сохранить как..." (в разных браузерах может немного отличаться формулировка. Например, в Opera - "Сохранить по ссылке как...")
3) В ответ появляется окно с предложением сохранить или открыть файл. Жмете кнопку "Сохранить"
4) Перед вами появится диалог сохранения файла. В нем вам нужно указать путь сохранения (в верхней части окна жмете треугольничек, который указывает вниз и распахнется выпадающий список со всеми вашими дисками и папками), а именно: MT4\experts. Под MT4 имеется в виду диск и папка, в которые у вас установлен терминал МТ4. Когда все это выбрали, то жмете "Сохранить"
5) Только после всех этих действий запускаете МТ4. В результате эксперт появится в списке советников.

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

пятый
23-10-2009, 19:56
Scriptong, во всём разобрался. Спасибо!

Scriptong
29-10-2009, 20:34
В конце прошлой статьи (http://fxtrade.ru/mqlabs/20.10.2009-kompleksnyy-sovetnik-chast-1), в которой рассматривался принцип работы комплексного советника, был приведен перечень недостатков полученного торгового робота. Некоторые из этих недостатков все же подлежат исправлению, чем мы и займемся.

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

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

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

Для проведения синхронизации МТ4 обладает уникальной характеристикой - время открытия бара, которое является одинаковым как для советника, так и для индикатора. Поэтому первой глобальной переменной для связи индикатор-эксперт будет переменная, несущая время последнего установленного сигнала. Непосредственно сигнал будем передавать через вторую переменную, значение которой соответствует всего лишь трем состояниям - "Buy", "Sell' и "нет сигнала".

Остается только привести названия переменных к единому формату, чтобы советник мог различать индикаторы между собой. Первыми символами в имени переменной определим принадлежность переменной к эксперту по первым буквами его названия - "CE" (см. рис. 1 - красный цвет). Дальше необходимо указать, на какой валютной паре установлен индикатор. Чаще всего это шесть символов (отмечены желтым цветом). После названия инструмента будет идти сокращенное имя индикатора (зеленый цвет) и в конце неизменные пять символов, определяющие непосредственно тип переменной - "STime" (Signal Time).
http://www.forextrade.ru/media/Image/MQLabs/39_ag/figure_1.jpg
Рис. 1. - Назначение символов в названии переменной, ответственной за время последнего сигнала

Подобным же образом будут распределяться символы в названии глобальной переменной, отвечающей за содержимое сигнала. Ее имя Signal (см. рис. 2)
http://www.forextrade.ru/media/Image/MQLabs/39_ag/figure_2.jpg
Рис. 2. - Назначение символов в названии переменной, ответственной за значение сигнала.

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

//+-------------------------------------------------------------------------------------+
//| Расчет сигнала |
//| Если значение Signal больше нуля, значит Buy |
//| Если значение Signal меньше нуля, значит Sell |
//+-------------------------------------------------------------------------------------+
bool GetSignal()
{
// - 1 - =========================== Обнуление данных ===================================
Signal = 0; // Сигнал
UseInd = 0; // Количество присоедниненных индикаторов
Res = True; // Флаг отработки текущего бара
// - 1 - =========================== Окончание блока ====================================

Comm = "";
// - 2 - =========================== Перебор всех существующих индикаторов ==============
GetOneSignal("CE"+Symbol()+"ADXSTime", "CE"+Symbol()+"ADXSignal", "ADX\n");
GetOneSignal("CE"+Symbol()+"BandsSTime", "CE"+Symbol()+"BandsSignal",
"Bollinger Bands\n");
GetOneSignal("CE"+Symbol()+"CCISTime", "CE"+Symbol()+"CCISignal", "CCI\n");
GetOneSignal("CE"+Symbol()+"CrossMASTime", "CE"+Symbol()+"CrossMASignal", "CrossMA\n");
GetOneSignal("CE"+Symbol()+"PSARSTime", "CE"+Symbol()+"PSARSignal", "Parabolic\n");
GetOneSignal("CE"+Symbol()+"StDevSTime", "CE"+Symbol()+"StDevSignal", "StDev\n");
GetOneSignal("CE"+Symbol()+"MACDSTime", "CE"+Symbol()+"MACDSignal", "MACD\n");
GetOneSignal("CE"+Symbol()+"DMSTime", "CE"+Symbol()+"DMSignal", "DeMarker\n");
GetOneSignal("CE"+Symbol()+"EnvSTime", "CE"+Symbol()+"EnvSignal", "Envelopes\n");
GetOneSignal("CE"+Symbol()+"FISTime", "CE"+Symbol()+"FISignal", "ForceIndex\n");
GetOneSignal("CE"+Symbol()+"MomSTime", "CE"+Symbol()+"MomSignal", "Momentum\n");
GetOneSignal("CE"+Symbol()+"OsMASTime", "CE"+Symbol()+"OsMASignal", "OsMA\n");
GetOneSignal("CE"+Symbol()+"RSISTime", "CE"+Symbol()+"RSISignal", "RSI\n");
GetOneSignal("CE"+Symbol()+"RVISTime", "CE"+Symbol()+"RVISignal", "RVI\n");
GetOneSignal("CE"+Symbol()+"StochSTime", "CE"+Symbol()+"StochSignal", "Stochastic\n");
GetOneSignal("CE"+Symbol()+"WPRSTime", "CE"+Symbol()+"WPRSignal", "WPR\n");
GetOneSignal("CE"+Symbol()+"AOSTime", "CE"+Symbol()+"AOSignal", "AO\n");
GetOneSignal("CE"+Symbol()+"ACSTime", "CE"+Symbol()+"ACSignal", "AC\n");
GetOneSignal("CE"+Symbol()+"FracSTime", "CE"+Symbol()+"FracSignal", "Fractals\n");
GetOneSignal("CE"+Symbol()+"AlligatorSTime", "CE"+Symbol()+"AlligatorSignal",
"Alligator\n");
GetOneSignal("CE"+Symbol()+"BWMFISTime", "CE"+Symbol()+"BWMFISignal",
"Bill Williams MFI\n");
// - 2 - =========================== Окончание блока ====================================

if (!Res) return(False); // Один (или больше) из индикаторов не успел обновить данные

// - 3 - =========================== Сообщение о кол-ве индикаторов =====================
if (UseInd == 0)
{
CommAll = "Не присоединен ни один индикатор!";
Comment(CommAll);
return(False);
}
else
{
CommAll = "Подключены следующие индикаторы:\n"+Comm;
Comment(CommAll);
}
// - 3 - =========================== Окончание блока ====================================

// - 4 - ========================= Сравнение кол-ва индикаторов и общего сигнала ========
if (UseInd == MathAbs(Signal))
if (Signal > 0)
{
if (LastBuySignal <= LastSellSignal)
LastBuySignal = Time[0];
}
else
if (LastSellSignal <= LastBuySignal)
LastSellSignal =SellSignal = Time[0];
// - 4 - =========================== Окончание блока ====================================

return(True);
}
В первом блоке приводятся к нулю переменные Signal (значение совокупного сигнала всех используемых индикаторов) и UseInd (количество используемых индикаторов). Напомню, для получения сигнала Buy или Sell значения Signal и UseInd должны быть равны по модулю. Флаг Res сигнализирует о получении свежей информации от всех присоединенных пользователем индикаторов. Это необходимо для повторения опроса всех индикаторов, если к моменту опроса не все индикаторы успели установить сигнал, соответствующий текущему бару. Когда все значения индикаторов признаны актуальными, возврат в функцию GetSignal на текущем баре больше не происходит.

Во втором блоке производится двадцать один вызов функции GetOneSignal, код которой будет приведен ниже. При вызове GetOneSignal, ей передается три параметра - имя глобальной переменной STime, имя глобальной переменной Signal и название индикатора, которое будет отображаться в верхнем левом углу графика. Назначением функции является проверка существования переменных и чтение значения сигнала.

Третий блок выводит информационную строку в верхнем левом углу графика валютной пары о присоединенных индикаторах. Заметьте, если значение UseInd равно нулю, то расчет сигнала не производится и результат функции GetSignal - False. Такой результат приведет к вызову функции на следующем тике. То же самое происходит, если один или более индикаторов не успел обновить данные (Res = False).

Четвертый блок - точная копия окончания функции GetSignal из первой версии эксперта.

Функция GetOneSignal имеет меньший объем:

//+-------------------------------------------------------------------------------------+
//| Получение сигнала по одному индикатору |
//+-------------------------------------------------------------------------------------+
void GetOneSignal(string ST, string SS, string IndName)
{
if (GlobalVariableCheck(ST)) // Переменная существует, значит индикатор присоединен
{
Comm = Comm + IndName; // Добавляем в строку название индикатора
UseInd++; // Увеличиваем количество присоелиненных индикаторов на один
if (GlobalVariableGet(ST) >= Time[0]) // Если сигнал содержит свежие данные
Signal += NormalizeDouble(GlobalVariableGet(SS), 0); // то принимаем их к сведению
else
Res = False; // иначе ждем следующего тика
}
}
Функция выполняется только если глобальная переменная STime (имя передано в переменной ST) существует. Если это так, то предполагается, что глобальная переменная Signal, соответствующая данному индикатору, тоже существует. Но перед тем как прочесть значение сигнала, переменная Comm дополняется названием индикатора (IndName), а количество участвующих в расчете сигнала индикаторов (UseInd) увеличивается на единицу. Затем считывается время последнего обновления сигнала, что делается проверкой значения STime. Если время обновления принадлежит текущему бару, то только тогда производится чтение значения глобальной переменной Signal. В противном случае сигнал не читается, а флаг Res изменяет свое состояние на False.

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

//+-------------------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+-------------------------------------------------------------------------------------+
int init()
{
Activate = False;
// - 1 - ============================ Управление отображением индикатора ================
IndicatorBuffers(4);
if (ShowMACD)
{
SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 3);
SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 3);
SetIndexStyle(2, DRAW_LINE, STYLE_DASHDOTDOT, 1);
}
else
{
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);
SetIndexStyle(2, DRAW_NONE);
}
// - 1 - ============================ Окончание блока ===================================

// - 2 - ============================ Инициализация буферов индикатора ==================
SetIndexBuffer(0, MACDGr);
SetIndexBuffer(1, MACDLe);
SetIndexBuffer(2, MACDS);
SetIndexBuffer(3, MACD);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(0, 0.0);
// - 2 - ============================ Окончание блока ===================================

// - 3 - ======== Проверка существования такого индикатора на графике ===================
STime = "CE"+Symbol()+"MACDSTime"; // Время обновления
Signal = "CE"+Symbol()+"MACDSignal"; // Сигнал (-1, 0 или 1)
if (GlobalVariableCheck(STime)) // Если такая глобальная переменная есть, то
{ // это означает, что такой индикатор уже прикреплен
Alert("Один индикатор ''MACD'' уже присоединен!"); //и индикатор работать не будет
return(0);
}
// - 3 - ============================ Окончание блока ===================================

GlobalVariableSet(STime, 0); // Последнее время обновления значений
GlobalVariableSet(Signal, 0); // Текущее состояние "нет сигнала"

LastBar = 0;
Activate = True;
//----
return(0);
}
Первый блок определяет, отображать индикатор или нет. Решение принимается на основании значения входного параметра индикатора ShowMACD. Такой параметр будет у всех индикаторов, которые используются в эксперте, изменяться будет только сокращенное название, следующее после "Show".

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

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

Если глобальная переменная не существует, то сразу же создается пара глобальных переменных STime и Signal, а также выдается разрешение на функционирование индикатора (Activate = True).

Чтобы индикатор не перепутал свое существование с существованием другого такого же, при отсоединении он должен удалить свои глобальные переменные. Заодно и эксперт будет уведомлен об отсутствии этого индикатора:

//+-------------------------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+-------------------------------------------------------------------------------------+
int deinit()
{
// - 1 - ========== Если индикатор был в работе, то "прибираем за собой" ================
if (Activate)
{
GlobalVariableDel(STime);
GlobalVariableDel(Signal);
}
// - 1 - ============================ Окончание блока ===================================
return(0);
}
Здесь всего лишь одно действие - удаление глобальных переменных. Это действие производится только, если индикатор работал.

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

//+-------------------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+-------------------------------------------------------------------------------------+
int start()
{
if (!Activate) return(0); // Индикатор работает только если был инициализирован

// - 1 - ============================ Стандартный блок каждого индикатора ===============
int limit, i;
int counted_bars=IndicatorCounted(); // Сколько баров уже было посчитано
if (counted_bars<0) return(-1); // Проверка возможной ошибки
if (counted_bars>0) counted_bars--; // Пересчитываем последний посчитанный бар
limit=Bars-counted_bars; // Начинаем с последнего посчитанного бара
// - 1 - ============================ Окончание блока ===================================

// - 2 - ======================= Отображение индикатора на истории ======================
for(i = limit; i >= 0; i--)
{
MACD[i] = iMACD(Symbol(), 0, MACDFast, MACDSlow, MACDSignal, MACDPrice,MODE_MAIN,i);
if (MACD[i] > MACD[i+1])
{
MACDGr[i] = MACD[i];
MACDLe[i] = 0.0;
}
else
{
MACDLe[i] = MACD[i];
MACDGr[i] = 0.0;
}
MACDS[i] = iMACD(Symbol(), 0, MACDFast, MACDSlow, MACDSignal, MACDPrice, MODE_SIGNAL, i);
}
// - 2 - ============================ Окончание блока ===================================

// - 3 - ======================= Выдача сигналов ========================================
if (LastBar != Time[0]) // Один раз за один бар
{
if (MACD[1] > MACDS[1])
GlobalVariableSet(Signal, 1); // Buy
else
if (MACD[1] < MACDS[1])
GlobalVariableSet(Signal, -1); // Sell
else
GlobalVariableSet(Signal, 0); // Нет сигнала
GlobalVariableSet(STime, Time[0]); // Время последнего обновления
LastBar = Time[0];
}
// - 3 - ============================ Окончание блока ===================================

return(0);
}
Первый блок является стандартным. Его описание можно увидеть непосредственно в справке Meta Editor ("Справочник MQL4"-"Пользовательские индикаторы"-"Indicator counted").

Второй блок - это циклический расчет значений MACD. Если текущее значение гистограммы больше предыдущего, то значение MACD заносится в буфер MACDGr, иначе - значение получает буфер MACDLe. Значение сигнальной линии MACD напрямую попадает в MACDS.

В третьем блоке один раз за бар выносится вердикт сложившейся ситуации. Если гистограмма MACD выше сигнальной линии, то глобальная переменная терминала Signal получает значение 1 (сигнал BUY). Если MACD ниже сигнальной линии, то в Signal заносится -1 (сигнал SELL). В тех редких случаях, когда значения гистограммы и сигнальной линии равны (с учетом сравнения двух вещественных чисел это большая редкость), в Signal заносится 0 ("нет сигнала"). После присвоения значения переменной Signal, обновляется значение глобальной переменной STime, в которую заносится время открытия текущего бара. Таким вот нехитрым способом индикатор передает информацию о ситуации эксперту.

Чтобы пользователю было легче отличать индикаторы эксперта от других подобных, имена их файлов также начинаются с символов "CE". Например, версия индикатора MACD называется CE_MACD.mq4.

Подводя итог, рассмотрим последовательность действий пользователя при работе с комплексным экспертом и присоединяемыми к нему индикаторами. Думаю, понятно, что файл Complex_Expert_V2.mq4 необходимо положить в папку experts терминала. Содержимое архива indicators.zip, на который указывает ссылка "присоединяемые индикаторы", нужно распаковать в папку experts\indicators терминала. Только после этого можно запускать МТ4.

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

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

Еще одно обстоятельство, которое стоит учитывать, это невозможность открытия одного CE-индикатора пусть даже с разными настройками в пределах одной валютной пары (например, графики разные, таймфреймы разные, а валютная пара одна). Этот же момент касается проверки советника и индикаторов в тестере стратегий в режиме визуализации. Если индикатор присоединен уже на "живую" валютную пару, то его нельзя использовать на этой же валютной паре в тестере стратегий. Кстати, тестирование Complex_Expert_V2 возможно только в режиме визуализации, так как только в нем возможно присоединение индикатора к графику. И хитрости с применением кнопки "Пропустить до" режима визуализации ни к чему не приведут. Поэтому для тестирования стратегии все же нужно применять первую версию советника, а вот для работы онлайн намного удобнее использовать вторую.

И, напоследок, рассмотрим работу версии советника для приложения AutoGraf. Последовательность здесь такая:
Распаковать архив AG_ComplexExpert.zip (доступен по ссылке "Файлы стратегий для AutoGraf 4.0") в папку experts\libraries
Запустить MT4 и AutoGraf (во входном параметре S_3 можно ввести имя стратегии, например "CE")
Настроить параметры в панели инструментов AG: Lots (объем сделок), TP (уровень профита в пунктах, если 0 - не устанавливается), SL (уровень стопа в пунктах, если 0 - не устанавливается). Параметру TrailingStop1 соответствует значение дистанции (Ds), а параметру TrailingStop2 - шаг модификации (St).
Выбрать стратегию (перевести значок So в верхнее положение и в списке найти третью стратегию) CE.
Присоединить и настроить необходимые индикаторы CE
Перевести значок AT в верхнее положение

В результате у вас должно получиться что-то подобное (см. рис. 3)
http://www.forextrade.ru/media/Image/MQLabs/39_ag/figure_3.gif
Рис. 3. - Использование комплексного эксперта совместно с AutoGraf.

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

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

Советник Complex_Expert_V2 (http://www.forextrade.ru/media/Image/MQLabs/39_ag/Complex_Expert_V2.mq4)

Присоединяемые индикаторы (http://www.forextrade.ru/media/Image/MQLabs/39_ag/indicators.zip)

Файлы стратегии для AutoGraf 4.0 (http://www.forextrade.ru/media/Image/MQLabs/39_ag/AG_ComplexExpert.zip)

Teralex
29-11-2009, 11:57
Здравствуйте Scriptong!

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

Scriptong
29-11-2009, 14:04
Здравствуйте. Одинаковые индикаторы - нет. Правда, выход есть: сделать один индикатор с разными идентификаторами и, соответственно, добавить эти идентификаторы в советнике. В любом случае для этого требуется вмешательство в код советника и индикаторов.

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

Teralex
29-11-2009, 19:55
Есть у меня одна идея но нужна Ваша помощь

Teralex
29-11-2009, 20:00
10781

Teralex
29-11-2009, 20:04
Суть в том что бы Ваш советник улавливал сочитание одинаковых цветов всех индикаторов

Scriptong
30-11-2009, 17:25
Мне потребуются исходники всех используемых индикаторов и описание сигналов, которые возникают при различных цветовых сочетаниях. Тогда без проблем.

Teralex
30-11-2009, 19:00
http://forums.forextrade.ru/attachment.php?attachmentid=10830&stc=1&d=1259603736

http://forums.forextrade.ru/attachment.php?attachmentid=10831&stc=1&d=1259603971

Teralex
30-11-2009, 19:08
http://forums.forextrade.ru/attachment.php?attachmentid=10830&stc=1&d=1259603736

http://forums.forextrade.ru/attachment.php?attachmentid=10831&stc=1&d=1259603971

Вход в селл при сочетании: флет(желтый)+фишер10(красный)+макд15(красный)+фишер20(красный)+макд30(красный)+хас А и Б (красный)

Выход из позиции по смене фишер 10 на противоположный(оно же пересечение нулевого уровня).

Бай аналогично но естественно наоборот:)

Scriptong
30-11-2009, 21:46
Первая ссылка не работает...

Teralex
01-12-2009, 08:23
10844

Teralex
01-12-2009, 08:43
Это была первая ссылка

Scriptong
01-12-2009, 20:03
Проблемы при доработке возникли такие:

1) Индикаторы Rads MTF HAS Bar A и Rads MTF HAS Bar B содержат обращения к индикатору Heiken_Ashi_Smoothed. Поэтому их доработать не удалось - у меня нет такого индикатора.

2) Индикатор 63_FX_Fish безбожно перерисовывает, но на доработку это никак не повлияло - сделано два экземпляра CE_FX_Fish и CE_FX_Fish20, которые отдельно будут распознаваться экспертом и поэтому могут быть использованы совместно

3) Работа MACDBars в тестере с графиком, отличным от текущего, далека от корректности. В онлайн такого, конечно, не наблюдается. Но все равно сигнал будет "проходить" только в тех случаях, когда сигналы остальных индикаторов будут приходиться на начало получаса (из-за того, что идет разнобой в таймфреймах, а комплексный советник оптимизирован для работы на одном таймфрейме). Сделано два экземпляра - CE_MACD_Bars и CE_MACD_Bars30. Их также можно использовать совместно.

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

Для запуска стратегии (без индикаторов HAS А и B) нужно установить 3-ю версию советника и все созданные индикаторы (советника в папку experts, а индикаторы в папку experts\indicators), затем присоединить все индикаторы и только потом присоединить эксперт.

В принципе, при работе лишь с тремя индикаторами - CE_Pulse_Flat, CE_FX_Fish и CE_FX_Fish20 (несмотря на то, что рыбки перерисовываются) - уже получаются неплохие результаты.

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

Scriptong
07-12-2009, 23:13
Уважаемый Teralex!

Советник готов. Но вот в чем причина непредоставления вами исходного кода индикатора Heiken_Ashi_Smoothed я не понимаю. Ведь по этой причине я не могу присоединить к советнику индикаторы Has A и Has B.
На данный момент советник реализован без этих двух индикаторов.

Кстати, ограничения присутствуют и у этого советника - его невозможно протестировать в тестере, так как индикатор MACDBars использует функцию ArrayCopySeries с вызовом другого таймфрейма, что является недопустимым для индикатора в тестере. Поэтому проверка советника возможна только онлайн.

Teralex
09-12-2009, 16:30
Здравствуйте Scriptong!

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

И еще, выкладываю индикаторы:
Heiken_Ashi_Smoothed поскольку Has A и Has B дает основной сигнал, без которого слишком много ложных входов
Fisher_Yur4ik - это более удачный вариант 63_FX_Fish, он не перерисовывается, или "не так безбожно перерисовывается" :)11130

Teralex
09-12-2009, 16:49
Есть еще одна идея, которая, на мой взгляд, несколько проще и эффективнее. По крайней мере в ручном режиме получалось лучше чем в предыдущем варианте.

Суть в следующем: 11131


Вход в селл - фишер красный (ниже нуля)+хас красный+стохастик направлен вниз.
Выход из сел - фишер зеленый (выше нуля)+стохастик направлен вверх.
Вход в бай - фишер зеленый (выше нуля)+хас зеленый+стохастик направлен вверх.
Выход из сел - фишер красный (ниже нуля)+стохастик направлен вниз.

Пробовал уже на реале. Пока надежды оправдывает. :)

Единственно недостающий файл ниже
11133

И еще вход в селл или бай только при желтом пульс флет
шаблон ниже
11134

Scriptong
10-12-2009, 10:54
Давайте все же определимся, что делаем в первую очередь:
1) Доделываем советник с HAS
2) Делаем нового советника по вашей новой идее
3) "И еще вход в селл или бай только при желтом пульс флет
шаблон ниже"

Я же не Windows и несколько задач сразу решать не умею ;)

bizon54
10-12-2009, 11:01
Здравствуйте
Про комплексный советник вопрос.
Через какое-то время пропадает визуализация индикаторов, при удалении и восстановлении пишет, что такой индикатор уже есть, пробовал переустанавливать AG и советника все равно остается информация где-то.
на одной валюте одинаковых инд. нет.

Teralex
10-12-2009, 11:19
Если с первым вариантом есть проблемы, например индикатор МАСD, который только мешает тестить советника, рыбки, которые действительно сильно перерисовуются, а также отсутствие выхода по сигналу фишера, то я думаю лучше этот вариант подправить. Хотя что делать проще Вам виднее.

Для реализации новой идеи нужно:
выбросить МАСD
закончить присоединение HAS
заменить фишер на новый, который не перерисовывается
присоединить стохастик
добавить выход по комбинации стохастика и фишера

На мой взгляд эти изменения можно внести в Teralex_Expert. Опять же, Вам виднее.

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

Scriptong
10-12-2009, 15:47
Здравствуйте
Про комплексный советник вопрос.
Через какое-то время пропадает визуализация индикаторов, при удалении и восстановлении пишет, что такой индикатор уже есть, пробовал переустанавливать AG и советника все равно остается информация где-то.
на одной валюте одинаковых инд. нет.
Такое поведение индикаторов связано с неправильным выходом из терминала или тестера стратегии (в результате не отработала функция deinit, удаляющая нужные глобальные переменные). Для исправления ситуации загляните в глобальные переменные терминала (Сервис-Глобальные переменные или F3). В списке найдите все переменные, начинающиеся с CE (Complex Expert). Дальше следует название валютной пары. После нее идет название индикатора.

Например, если вам не удается прикрепить индикатор CE_MACD к валютной паре EURUSD, то найдите переменные, которые начинаются с CEEURUSDMACD. Их все нужно удалить.

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

Scriptong
10-12-2009, 15:57
Если с первым вариантом есть проблемы, например индикатор МАСD, который только мешает тестить советника, рыбки, которые действительно сильно перерисовуются, а также отсутствие выхода по сигналу фишера, то я думаю лучше этот вариант подправить. Хотя что делать проще Вам виднее.

Для реализации новой идеи нужно:
выбросить МАСD
закончить присоединение HAS
заменить фишер на новый, который не перерисовывается
присоединить стохастик
добавить выход по комбинации стохастика и фишера

На мой взгляд эти изменения можно внести в Teralex_Expert. Опять же, Вам виднее.

А по пульс флету только хотел уточнить, как его сигналы были Вами реализированы
Для меня ни в одном из описанных случаев проблем в реализации нет. Проблемы будут возникать уже у пользователя при работе с экспертом. Их я и описываю. Поэтому очередность все же выбираете вы. Говорите - делаем это. Я делаю. Только после выполнения я приступаю к следующему вопросу.

Teralex
10-12-2009, 16:26
Тогда лучше второй вариант

bizon54
14-12-2009, 11:03
Спасибо, получилось.

Scriptong
16-12-2009, 10:43
Тогда лучше второй вариант

Готово.

Сразу хочу заметить, что я не стал использовать в советнике вызов Rads HAS Bar A, а напрямую вызывал Heiken Ashi Smoothed, так как в тестере Rads HAS Bar A работал бы неправильно. Сигналом от RADS HAS я считал все зеленые ПРЕДЫДУЩИЕ бары Heiken Ashi для BUY и все красные ПРЕДЫДУЩИЕ бары для SELL. Так как для таймрейма H1 используются данные H1, H4, D1 и W1, то на каждом из графиков в отдельности нужно смотреть значение левого бара от формирующегося. То есть значения несформированных баров ни на одном из графиков я не учитывал.

Teralex
16-12-2009, 11:44
В коде советника я не нашел использования Пульс флет, который должен фильтровать входы и нашел НAS в блоке выхода из позиции. Может я не понимаю, расскажите пожалуйста об этом подробнее.
И хотел спросить работает ли эксперт с открытыми в ручную позициями, в смысле может ли он их сопровождать и закрывать.

Scriptong
16-12-2009, 15:59
В коде советника я не нашел использования Пульс флет, который должен фильтровать входы и нашел НAS в блоке выхода из позиции. Может я не понимаю, расскажите пожалуйста об этом подробнее.

Привожу еще раз ваше описание стратегии (пост от 09.12.2009 17:49):


Вход в селл - фишер красный (ниже нуля)+хас красный+стохастик направлен вниз.
Выход из сел - фишер зеленый (выше нуля)+стохастик направлен вверх.
Вход в бай - фишер зеленый (выше нуля)+хас зеленый+стохастик направлен вверх.
Выход из сел - фишер красный (ниже нуля)+стохастик направлен вниз.


Я не вижу здесь упоминания индикатора Pulse Flat.


И хотел спросить работает ли эксперт с открытыми в ручную позициями, в смысле может ли он их сопровождать и закрывать.
Тут существует два способа:
Установить в советнике MagicNumber, равным 0. В этом случае советник будет считать своими все позиции по текущему инструменту. Открыть позицию при помощи скрипта OpenOrder_Simple (В параметре Lots указать объем, в параметре Type 0 для BUY и 1 для SELL). При этом в настройках скрипта не забудьте указать MagicNumber такой же, как в советнике. В этом случае советник подхватит только одну открытую вами позицию.

Teralex
16-12-2009, 16:49
Мой пост №27

"Для реализации новой идеи нужно:
выбросить МАСD
закончить присоединение HAS
заменить фишер на новый, который не перерисовывается
присоединить стохастик
добавить выход по комбинации стохастика и фишера
На мой взгляд эти изменения можно внести в Teralex_Expert. Опять же, Вам виднее.
А по пульс флету только хотел уточнить, как его сигналы были Вами реализированы".

В новом варианте Вы дейсвительно вибросили МАСD, так, как я и просил, а Пульс Флет зря, поскольку он фильтрует много ложных входов.
А по пульс флету хотел уточнить потому,что при тестировании первого варианта я увидел что експерт совершает сделки при зеленом сигнале индикатора, который должен такие сделки предотвращать, и разрешать только при желтом цвете.
Навожу пример:
11341

Scriptong
16-12-2009, 18:04
Навожу пример:
11341

Не совсем понял. Вы привели пример как должно быть или как сейчас работает Teralex_Expert?

Teralex
16-12-2009, 18:19
Пример уточняет как должно быть

Scriptong
17-12-2009, 15:12
Третья версия эксперта учитывает показания Pulse Flat. Если он желтый, то сделки совершаются. Если зеленый, то нет.

В процессе тестирования была выявлена ошибка в самом индикаторе Pulse Flat, приводившая в делению на ноль. Ошибка исправлена и теперь при работе советника необходимо иметь в наличии вторую версию индикатора Pulse Flat_V2.

Эксперт и индикатор находятся в архиве.

Teralex
17-12-2009, 17:17
Хочу поблагодарить Вас за Ваш труд. Последний эксперт еще не идеал, но как я успел заметить, работает. Особенно понравилось, как он сопровождает вручную открытую позицию и закрывает ее. Хотя он мог бы закрывать ее чуть-чуть раньше. Наверное, для этого нужно исключить из комплекса для выхода Хайнекен Аши, если он в этом участвует. В полуавтомате его уже использовать можно.

У меня есть еще пару вопросов, которых не могу удержатся чтобы не задать.

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

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

Teralex
17-12-2009, 18:23
11393
11394

При визуальном тестировании увидел много интересных нюансов, которых не понимаю.

Примеры навел выше

konung
18-12-2009, 14:08
To Teralex:

Ориентироваться на индюк Fisher я бы не стал - он перерисовывается (см. код)

Scriptong
18-12-2009, 14:52
Первый: Насколько возможным является включение в алгоритм последнего эксперта индикатора ХАС таким как он есть, в смысле мультитаймфреймовым, пускай даже без возможности прогонки его в тестере?

Алгоритм индикатора HAS полностью соблюден в коде эксперта. Поэтому не вижу нужды встраивать его через iCustom. Я лишь указал на то, что при работе эксперта присутствие индикатора в папке не требуется. нужен лишь Heikeb Ashi Smoothed



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

Scriptong
18-12-2009, 14:57
При визуальном тестировании увидел много интересных нюансов, которых не понимаю.

Примеры навел выше

В каждом из приведенных случаев вы рассматриваете лишь один таймфрейм, а нужно одновременно смотреть на четыре.
Например, если вы работаете на М15, то в один и тот же момент следует рассматривать значения Heiken Ashi Smoothed на М15, Н1, Н4 и D1. Только при совпадении цветов свечей на всех таймфреймах (на каждом ТФ нужно посмотреть на последнюю закрытую свечу) будет открыта сделка.
Ведь именно такой смысл был заложен вами в условиях стратегии с применением индикатора HAS. Четыре зеленых квадрата индикатора соответствуют четырем зеленым свечам на каждом ТФ одновременно.
Если же вы имели в виду цвет свечи только текущего ТФ, то это элементарно исправляется, так как упрощает стратегию.

Teralex
18-12-2009, 17:16
Вы правильно описали мое видение техзадания по хасу, но на приведенных мной примерах советник при тестировании не открыл позиции при сочетании цвета на 4-х таймфреймах. Чтобы это проверить мной после визуального теста был добавлен хас, который Вы можете наблюдать в нижней части скрина
11441

именно из-за этого я предположил что хас не соответствует 4-м хайкен аши, или в коде советника заложено еще какое-то условие

Еще повторно вопрос: хас в выходе из позиции участвует?

Teralex
18-12-2009, 17:23
To Teralex:

Ориентироваться на индюк Fisher я бы не стал - он перерисовывается (см. код)

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

Scriptong
21-12-2009, 10:03
Вы правильно описали мое видение техзадания по хасу, но на приведенных мной примерах советник при тестировании не открыл позиции при сочетании цвета на 4-х таймфреймах. Чтобы это проверить мной после визуального теста был добавлен хас, который Вы можете наблюдать в нижней части скрина
11441

К сожалению, по представленному рисунку тяжело о чем-то судить. Например, не видно показания других таймфреймов. Тут я снова повторюсь, что в режиме визуализации (в том числе и накидыванию индикатора после теста) показателям HAS с других ТФ доверять нельзя, так как данные доступны лишь соетнику, а для индикатора "видны" лишь показания текущего ТФ.

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




Еще повторно вопрос: хас в выходе из позиции участвует?

Нет:

// - 5 - ============= Генерация сигнала SELL и выход из BUY ============================
if (loK == 0 && upK == EMPTY_VALUE)
{
if (FXFishBuf1 == 0 && FXFishBuf2 < 0) // Фишер красный
if (StochPrev > StochCur) // стохастик вниз
{
Signal = 2; // Выход из BUY
if (ResOfRads < 0) // Rads MTF HAS Bar A - на всех ТФ красный
Signal = -1; // сигнал SELL
}
// - 5 - ======================= Окончание блока ========================================

// - 6 - ============= Генерация сигнала BUY и выход из SELL ============================
if (FXFishBuf1 > 0 && FXFishBuf2 == 0) // Фишер зеленый
if (StochPrev < StochCur) // стохастик вверх
{
Signal = -2; // Выход из SELL
if (ResOfRads > 0) // Rads MTF HAS Bar A - на всех ТФ зеленый
Signal = 1; // сигнал BUY
}
}
// - 6 - ======================= Окончание блока ========================================

Teralex
24-12-2009, 16:13
Здравствуйте Scriptong!

Я дошел до того, что Вы были правы.:)
И уже знаю почему Teralex_Expert иногда (часто) открывает позиции именно тогда. когда движение заканчивается.
Все дело в том что принцип визуального отображения работы НAS да и Heiken Ashi Smoothed не соответствует принципу построения входного сигнала эксперта.
Например последний квадрат (НAS) или свеча (Heiken Ashi Smoothed) индикатора вовремя формирования бара может манятся, а эксперт учитывает только комбинацию которая сложилась по закрытию бара.
Таким образом часто складывается ситуация когда при формировании последнего бара самого старшего для индикатора таймфрейма индикаторы уже дают сигнал для открытия позиции а эксперт сигнала не получает поскольку ждет закрытия бара.
Из-за этого, допустим при торговли на М5, пока эксперт ждет формирования бара на Н1, движение на М5 уже как раз заканчивается но эксперт именно в это время открывает позицию.

Scriptong
24-12-2009, 17:32
Здравствуйте Scriptong!

Я дошел до того, что Вы были правы.:)
И уже знаю почему Teralex_Expert иногда (часто) открывает позиции именно тогда. когда движение заканчивается.
Все дело в том что принцип визуального отображения работы НAS да и Heiken Ashi Smoothed не соответствует принципу построения входного сигнала эксперта.
Например последний квадрат (НAS) или свеча (Heiken Ashi Smoothed) индикатора вовремя формирования бара может манятся, а эксперт учитывает только комбинацию которая сложилась по закрытию бара.
Таким образом часто складывается ситуация когда при формировании последнего бара самого старшего для индикатора таймфрейма индикаторы уже дают сигнал для открытия позиции а эксперт сигнала не получает поскольку ждет закрытия бара.
Из-за этого, допустим при торговли на М5, пока эксперт ждет формирования бара на Н1, движение на М5 уже как раз заканчивается но эксперт именно в это время открывает позицию.

Извините, для меня это просто очевидная вещь. Видимо, я что-то не так объяснял. Но хорошо, что вы сами до этого докопались:)

Teralex
24-12-2009, 18:37
Просто раньше я смотрел на индикаторы, а теперь посмотрел на алгоритм. А я думаю, почему он здесь не открыл, а почему здесь открыл...

Я надеюсь от этой болезни есть лекарство (имеется ввиду эксперт):)

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

Какое Ваше мнение?

Teralex
24-12-2009, 18:49
Может не учитывать состояние бара вообще?

Scriptong
24-12-2009, 22:09
Может не учитывать состояние бара вообще?

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

Teralex
25-12-2009, 08:39
Может есть еще какие-то варианты, чтобы эксперт не ждал формирования свечи сташего таймфрейма?

Scriptong
25-12-2009, 20:59
Может есть еще какие-то варианты, чтобы эксперт не ждал формирования свечи сташего таймфрейма?
Ну тогда просто не нужно учитывать эти показания, а брать только один интересующий таймфрейм

Teralex
25-12-2009, 21:44
А можно вывести внешнюю переменную которая будет задавать количество таймфреймов которые участвуют в формирование сигнала?

Scriptong
26-12-2009, 08:41
Можно, конечно, но еще потребуется указывать, какие именно таймфреймы интересуют. Тут одним параметром явно не обойтись.

Teralex
26-12-2009, 19:02
Ну тогда, если конечно можно, попробуйте пожалуйста.

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

Scriptong
27-12-2009, 23:32
Ну тогда, если конечно можно, попробуйте пожалуйста.

И, как говорится заодно, воплотите мою предыдущею просьбу по поводу переменной, которая будет включать и выключать возможность самостоятельного открытия позиций экспертом не трогая его остальные возможности.
Тут уже давайте по очереди. Я только завершил одного советника - Гридер (http://forum.fxservice.com/showthread.php?p=20783#post20783), сейчас примусь за второго - Ilan (http://forum.fxservice.com/showthread.php?p=20768#post20768), а уже потом смогу заняться вашей просьбой.

Teralex
28-12-2009, 10:29
Уважаемый Scriptong, я Вас не тороплю, наоборот, считаю что Ваша бескорыстная работа достойна только благодарности.

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

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

Уверен что Вы видели очень много советников которые хорошо работали на истории, но на реале сливали.

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

Чтобы работу советника подогнать не под тестер, а под ручную торговлю, я считаю что нужно сигнал входа по Хасу изменить на следующий:

Считать сигналом для открытия позиции (кроме остальных условий) наличие соответствующего цвета Heiken Ashi Smoothed на текущем таймфрейме состоянием на закрытие бара, плюс наличие соответствующего цвета Heiken Ashi Smoothed на трех старших таймфреймам не зависимо от состояния бара.

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

Scriptong
07-01-2010, 10:32
В четвертой версии добавлены такие параметры:

NumberOfTFs (настройки индикатора Rads HAS Bar A) - количество таймфреймов от 1 до 4, которые участвуют в генерации сигнала. Если 1 - участвует только теущий ТФ. Если 2 - текущий и ближайший больший и т. д. EnableOpen - разрешение (True) или запрет (False) открытия позиций советником. При запрещении открытия позиций закрытие все равно будет осуществляться. Для запрещения всех торговых функций советника следует при запуске эксперта убрать галочку "Разрешить советнику торговать"


По поводу любого таймфрейма не уверен, что правильно понял. Имеется в виду сбор информации с нулевого (не сформированного) бара любого ТФ? Если так, то скажите и я заменю 1 на 0 в нужных местах.

Teralex
07-01-2010, 11:03
Речь шла о возможности учитывания или не учитывания состояния бара на каком-либо таймфрейме.
Например для формирования сигнала мне нужно чтобы бар закрылся на М5, а на остальных 3-х таймфреймах мне все равно закрылся он или нет, главное, чтобы на всех 4-х таймфреймах был одинаковый сигнал.

Scriptong
08-01-2010, 16:24
Речь шла о возможности учитывания или не учитывания состояния бара на каком-либо таймфрейме.
Например для формирования сигнала мне нужно чтобы бар закрылся на М5, а на остальных 3-х таймфреймах мне все равно закрылся он или нет, главное, чтобы на всех 4-х таймфреймах был одинаковый сигнал.

Тогда пробуем так:

Teralex
09-01-2010, 22:25
Опишите пожалуйста что Вами было изменено в 5 версии

Scriptong
10-01-2010, 17:27
Опишите пожалуйста что Вами было изменено в 5 версии
То, что вы попросили в посте после четвертой версии. Параметр NumberOfTFs определяет количество таймфреймов, с которых данные индикатора Rads HAS Bar A берутся по сформированному (первому) бару. Данные с других таймфреймов берутся с несформированного (нулевого) бара.

Например, ТФ = М15, NumberOfTFs = 1. На M15 берутся данные с первого бара, на М30, Н1 и Н4 - с текущего бара как есть.

Если ТФ = М5, NumberOfTFs = 3. На М5, М15 и M30 - данные с бара №1, на H1 - текущий бар.

Если установить NumberOfTFs = 4, то работа пятой версии будет полностью эквивалентна третьей версии.

Teralex
12-01-2010, 08:58
Спасибо Scriptong!
Это почти оно. Протестил советника с разными настройками индикаторов, добился в тестере солидных профитов. Но, еще есть много маленьких лосей, которые иногда подтачивают, а иногда (некоторые пары), съедают профит.
Картина в общем одинакова - количество прибыльных сделок около 30%, но и их хватает (некоторые пары) чтобы перекрыть убыток и составить коэффициент прибыльности около 3.30. (тестировал отрезки до 3-х месяцев).
Когда начал разбираться в причине большего количества убыточных сделок, нашел одно несоответствие.
Как я понял (может я и ошибаюсь), в советнике, при изменениях параметров входа по индикатору Фишер, автоматически подстраиваются параметры выхода по этому индикатору.
Такая автоподстройка изменила правила выхода по этому индикатору, умолчание по которому было равно "10" (пост №17).
Сейчас эксперт допустим входит по Фишеру 40 и выходит по Фишеру 40, хотя должен выходить по Фишеру 10.
Именно поэтому прошу Вас внести соответствующие изменения.
Если возможно, выведите этот параметр также во внешнюю переменную.
Еще нужно добавить один параметр в Стохастик, а именно запрет на формирования сигнала на покупку выше уровня 80 и на продажу ниже уровня 20.

Scriptong
12-01-2010, 20:25
Спасибо Scriptong!
Когда начал разбираться в причине большего количества убыточных сделок, нашел одно несоответствие.
Как я понял (может я и ошибаюсь), в советнике, при изменениях параметров входа по индикатору Фишер, автоматически подстраиваются параметры выхода по этому индикатору.


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

В шестой версии он разделен на два параметра: periodForOpen и periodForClose. Думаю, назначение прозрачно...



Еще нужно добавить один параметр в Стохастик, а именно запрет на формирования сигнала на покупку выше уровня 80 и на продажу ниже уровня 20.

Добавлены параметры HighLevel и LowLevel. Если стохастик ниже LowLevel, то короткие не открываются, если же стохастик выше HighLevel, то не открываются длинные.

Teralex
14-01-2010, 09:45
Уважаемый Scriptong, мне опять нужна Ваша помощь.

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

Такая необходимость обусловлена 6 версией, поскольку например, при открытии позиции по Фишеру 80 и ее закрытии по Фишеру 10, сразу же, опять открывается позиция по Фишеру 80, не учитывая Фишер 10, которая естественно сразу же закрывается в убытке десятым Фишером. Вследствие – много мелких лосей.

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

Scriptong
14-01-2010, 17:19
В последнюю версию нужно добавить еще один Фишер для того чтобы осуществлять входы по двум Фишерам с разными периодами.
Такая необходимость обусловлена 6 версией, поскольку например, при открытии позиции по Фишеру 80 и ее закрытии по Фишеру 10, сразу же, опять открывается позиция по Фишеру 80, не учитывая Фишер 10, которая естественно сразу же закрывается в убытке десятым Фишером. Вследствие – много мелких лосей.

Я вам обязательно помогу. Только мне потребуется более развернутое объяснение насчет Фишеров. Проблема ясна, но не совсем ясно как вы предлагаете ее решить. В идеале хотелось бы получить развернутое описание входов и выходов по индикаторам.

Насчет переключателей все понятно.

Teralex
15-01-2010, 09:22
По результатам тестировании 5 версии стало понятно, что с фиксированием профитов у советника все в порядке, но есть одна большая проблема, очень много ложных входов, которые дают маленькие, но стабильные убытки.

Решить эту проблему я попытался с Вашей помощью в 6 версии, задав более жесткие параметры для входов и поставив меньший период для выходов, а также фильтрацией уровнями стохастика. Результат – увеличение количества прибыльных сделок на 10% (не на всех парах). При этом большинство убыточных входов именно ложные, которые не вписываются в ТС.

Часть убыточных входов также дает Хас, который по идее должен задавать основное направление и указывать на удачный момент входа, но зачастую, в широком флете, он дает "зеленый" сигнал только в конце движения, на 2-х или 3-х барах.

И наконец Фишер. Этот индикатор в 6 версии, при настройке входа например по параметру "200" и выхода по параметру "40", после правильной отработки первой сделки и ее закрытии, часто (когда стохастик позволяет) сразу открывает новую позицию по "200-му" фишеру, в то время, когда по показаниям фишера "40", открывать позицию еще нельзя.

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

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

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

Teralex
15-01-2010, 11:48
:D:D:D
Только что шаманил с индикатором Пульс Флет в советнике при визуальном тестировании, и понял, что советник не только не открывает позиции при флете (что правильно), но и не закрывает их. :eek:

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

Как я раньше этого не видел?

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

bizon54
18-01-2010, 09:52
Здравствуйте, Teralex и Scriptong
Тоже читаю и пробую Ваш советник.
Вход выполняется довольно четко по Фишеру и стохастику.
Выход происходит, по-моему, по стохастику, а не а фишеру-10.
Обратите внимание.
Пробовал тестировать по EUR/USD - Минус, По GBR/Jpy M15,
прибыль 1,6.
По каким валютам и с какими настройками вы тестировали???
Черканите, если можно.

P/S:Кстати Комплексный советник V2, тестировал на 15M, ставлю только 1 индикатор CE DeMarker. Прибыль 2,05 EUR/USD.
Пробовал на реале, немного заработал.
С уважением, Bizon.

Teralex
18-01-2010, 14:59
bizon, на данный момент нет смысла выкладывать настройки этого советника, поскольку он работает не совсем правильно.

Если Scriptong сделает последние поправки, тогда и посмотрим.

А хороший результат этот эксперт давал на паре USD/JPY. Допустим у меня прибыльность была 3.30, но это только отдельный результат, в смысле кусок до 3-х месяцев.

Scriptong
18-01-2010, 16:30
Прочитал сегодня написанное за выходные. Сразу всего много. Давайте по шагам - что делаем в первую очередь. А то и Пульс флэт, и Фишер, не совсем понятно, что же все-таки нужно?

Scriptong
18-01-2010, 16:33
По каким валютам и с какими настройками вы тестировали???
Черканите, если можно.


Широким тестированием советника я не занимался. Проводилось только визуальное тестирование на периоде в несколько дней для проверки правильности входов и выходов советника (по моему разумению). Что именно требуется Teralex мне еще до конца непонятно. Но, думаю, это в конце концов будет выяснено.

Teralex
18-01-2010, 16:52
Нужно добавить к 6 версии:
1.еще один фишер для входа (как было в первой версии)
2.выключатель для хаса (конечно хотелось бы для всех индикаторов)
3. отредактировать пульс флет, который не должен запрещать закрытие позиции при флете.

Scriptong
20-01-2010, 18:38
Нужно добавить к 6 версии:
1.еще один фишер для входа (как было в первой версии)

Добавить - добавил, но так как описания его функций не было сделал по своему усмотрению.




2.выключатель для хаса (конечно хотелось бы для всех индикаторов)

Добавлены параметры, начинающиеся с Use. Но с ними поосторожнее, так как комбинаций сигнала становится 32 разновидности. Описать каждую из них - не в моих силах. Например, при выключении первого Фишера вы автоматически включаете функцию выхода по его сигналам на каждом баре, где есть сигнал стохастика в обратную сторону.



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

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

Teralex
21-01-2010, 10:36
Уважаемый Scriptong, все Вы сделали правильно, и по крайней мере то, что я уже попробовал, работает именно так как надо (выключатели, Пульс Флет).

Только вот со вторым (добавленным) Фишером вышла нестыковка. При визуальном тестировании, стало видно, что в формировании сигнала на вход или выход он не участвует.

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

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

Внесите пожалуйста соответствующие изменения и если есть еще какие-то вопросы – задавайте.

Teralex
26-01-2010, 11:13
Уважаемый Scriptong, впервые попробовал разобраться и сделать изменения в советнике самому.

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

Потом я добавил в советник еще одного Фишера и теперь их три. Кроме того, добавил к третьему Фишеру уровни в пределах которых сигнал не принимается. Это нужно для фильтрования слабых сигналов индикатора, когда Фишер не знает куда он собирается направится и дает много ложных сигналов.

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

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

Заранее спасибо.

12381

Scriptong
27-01-2010, 10:12
Таким образом, сигнал для открытия позиции, кроме сигналов остальных индикаторов, формируется при сочетании сигналов 2-х Фишеров, а сигнал для выхода остается без изменений и формируется одним Фишером + Стохастик.
Сейчас именно так сигнал и формируется. Алгоритм такой (вы сами можете проверить его в конце функции GetSignal):
1) Открытие BUY (соблюдение всех условий):
Стохастик вверх Pulse Flat_V2 - желтый Оба Фишера зеленые Стохастик ниже уровня HighLevel HAS Bar A выше нуля

2) Открытие SELL (соблюдение всех условий):
Стохастик вниз Pulse Flat_V2 - желтый Оба Фишера красные Стохастик выше уровня LowLevel HAS Bar A ниже нуля

3) Закрытие BUY (соблюдение всех условий):
Стохастик вниз Фишер выхода (его период задаете параметром periodForClose) красный

4) Закрытие SELL (соблюдение всех условий):
Стохастик вверх Фишер выхода (его период задаете параметром periodForClose) зеленый


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

Scriptong
27-01-2010, 10:27
Посмотрите пожалуйста код проекта советника и, если это возможно, подправьте его.
Уровни открытия нужны всем трем Фишерам, но копаться дальше я не стал, так как могу намутить с названиями их уровней.


Условия:

if (Fish3Up > MaxHLevel)
и

if (Fish3Dn < MinLLevel)
являются неверными. Переменные Fish3Up и Fish3Dn - булевые и принимают значения только 0 и 1. Вы же их сравниваете с вещественными числами -0.3 и 0.3. Выходит, что сигнал бай еще может проскочить, а вот Sell - никогда.
Поэтому эти условия нужно просто заменить на:

if (Fish3Up)
и

if (Fish3Dn
а при формировании значения этих же переменных в блоке 3 изменить условия на такие:

if (FXFish3Buf1 == 0 && FXFish3Buf2 < MinLLevel) // Фишер 3 меньше MinLLevel
Fish3Dn = True;
if (FXFish3Buf1 > MaxHLevel && FXFish3Buf2 == 0) // Фишер 3 больше MaxHlevel
Fish3Up = True;

Teralex
02-02-2010, 14:08
Уважаемый Scriptong, я хочу добавить еще одно условие в алгоритм закрытия позиций, но мне нужна Ваша помощь.

Вроде как не сложно, но сам не разобрался.

Дело вот в чем: если открытая позиция сразу или постепенно перешла в убыток, то такая сделка должна закрываться по одному значению Фишера (например период 10), а если сделка в профите, то закрываться она должна по другому значению Фишера (например 40 или 80 и т.д.). Периоды, как в лосе так и в профите, должны настраиваться.

Я думал добавить такое условие к расчётам periodForClose1, корый бы работал в профите и periodForClose2, который бы работал в убытке, но не смог правильно его сформулировать.

Если все получится, то это будет хорошей альтернативой стоплосу, тейкпрофиту и трейлингстопу.

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

Scriptong
03-02-2010, 16:06
Хорошо, после выхода очередной статьи сразу займусь этим.

Teralex
05-02-2010, 10:29
Уважаемый Scriptong, как мне кажется, кроме моей последней просьбы, у нашего советника осталось только одно уязвимое место - резкое изменения рынка в противоположную сторону. Советник, будучи в профите, не успевает зафиксировать прибыль.

Я видел у Вашего комплексного советника хороший трейлинг стоп, может его можно скопировать?

Scriptong
11-02-2010, 18:53
В девятой версии добавлен двухуровневый трейлинг-стоп (параметры TrailingStop1 и TrailingStop2). Первый указывает количество пунктов, после которого позиция должна быть выведена в безубыток (стоп на цене открытия). Только после этого с каждым пунктом стоп подтягивается на расстоянии TrailingStop2 пунктов при увеличении прибыли. Если одно из значений некорректно (слишком мало), то сообщений об ошибках советник не выведет, но трейлинг работать не будет. Такой прием используется для отключения трейлинг-стопа.

В параметры первого Фишера добавлены переменные periodForCloseInLoss и periodForCloseInProfit. Если позиция в прибыли (берется только на текущий момент и значение без свопа), то закрытие происходит по периоду Фишера, указанного в periodForCloseInProfit. Иначе - по periodForCloseInLoss.

Teralex
15-02-2010, 18:40
Уважаемый Scriptong, помогите пожалуйста сформулировать одно условие для Фишера.

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

Я хочу использовать это свойство индикатора в советника, задав дополнительное условие в расчет сигнала FishUp и FishDn.

Условие что-то вроде этого:

if (FXFish2Buf1 == 0 && FXFish2Buf2 < MinLevel(это я уже от себя добавил) и больше сигнала индикатора на предыдущем баре - это то что надо сформулировать)
Fish2Dn = True;
Аналогичное условие и для FishUp.

Подскажите как правильно сформулировать это условие. И может надо еще что-то менять?

Scriptong
16-02-2010, 18:57
Уважаемый Scriptong, помогите пожалуйста сформулировать одно условие для Фишера.

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

Я хочу использовать это свойство индикатора в советника, задав дополнительное условие в расчет сигнала FishUp и FishDn.
Подскажите как правильно сформулировать это условие. И может надо еще что-то менять?

Тут изменения коснуться не одной строки.
Во-первых, при расчете Фишера нужно добавить расчет значений на предыдущем баре, например:

double opFXFishBuf2_2 = iCustom(Symbol(), 0, "Fisher_Yur4ik", periodForOpen, 2, 2);

Во-вторых, сравнить это значение со значением на текущем баре, например:

if (opFXFishBuf2_2 > opFXFishBuf2) ....
В-третьих, нужно продумать, как это дополнительное условие будет сочетаться со всеми имеющимися.

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

Teralex
17-02-2010, 11:37
Более детальное описание

Условия выхода по индикатору Фишер не меняются.

Условия входа:

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

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

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

Scriptong
17-02-2010, 15:26
Ну в этом случае все не так уж сложно (см. версию 10). Я добавил описанный сигнал к первому Фишеру. Второй Фишер остался без изменений. Фишер закрытия также не трогался.

Teralex
19-02-2010, 11:54
Уважаемый Scriptong, настолько возможным является присоединение к советнику простого блока мани менеджмента?
Я хочу добавить условие удвоения лота после закрытия убыточной позиции.
Если это не очень сложно, добавьте пожалуйста.

Scriptong
22-02-2010, 08:44
Несложно. Сделаю.

Scriptong
24-02-2010, 16:01
Готово. Добавлен блок настроек по методу Мартингейла:
1) MartinMul - коэффициент умножения объема предыдущей убыточной сделки. Можно указывать меньше единицы (но не меньше нуля). В этом случае эффект будет противоположный - после каждого убытка объем будет уменьшаться. Убытком считается значение прибыли меньше нуля, своп в расчет не берется. Прибыль 0 - считается прибыльной сделкой. Для отключения режима Мартингейла достаточно установить MartinMul = 1

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

Teralex
26-02-2010, 10:53
Спасибо Scriptong!

Уже есть результат:

13325

Здесь последний отчет теста советника
13326
Посмотрим как он себя поведёт на демо…

Scriptong
26-02-2010, 13:14
Спасибо Scriptong!

Уже есть результат:

13325

Здесь последний отчет теста советника
13326
Посмотрим как он себя поведёт на демо…

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

Teralex
26-02-2010, 18:39
Уважаемый Scriptong, подскажите мне пожалуйста как, или помогите, присоединить к советнику индикатор PerkyAsctrend1.

А то вроде как все сделал , откомпилировал советника без ошибок, но после добавления этого индикатора в алгоритм советника, он перестал работать. Советник в журнал стал матерится о какой то ошибке.

Сам не разобрался где ошибка, поэтому прошу о помощи.

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

Объясните мне пожалуйста в чем моя ошибка и покажите как надо.

13331

Scriptong
01-03-2010, 10:37
Ошибка при вызове функции iCustom. Вы забыли указать таймфрейм. В результате имя индикатора воспринимается как таймфрейм, а параметр RISK - как имя индикатора. Правильно так:


double PerkyBuf1 = iCustom(Symbol(), 0, "Perky", RISK, AllBars, 0, 1);
double PerkyBuf2 = iCustom(Symbol(), 0, "Perky", RISK, AllBars, 1, 1);

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

Teralex
01-03-2010, 12:39
Ошибка при вызове функции iCustom. Вы забыли указать таймфрейм. В результате имя индикатора воспринимается как таймфрейм, а параметр RISK - как имя индикатора. Правильно так:


double PerkyBuf1 = iCustom(Symbol(), 0, "Perky", RISK, AllBars, 0, 1);
double PerkyBuf2 = iCustom(Symbol(), 0, "Perky", RISK, AllBars, 1, 1);

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

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

Scriptong
05-03-2010, 22:28
Если это так, то какие условия еще нужно задать для того чтобы наличие сигнала было актуальным до его замены?

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

simplesimple
07-03-2010, 13:02
объясните пжлст где crossMa и Bill Williams Market Facilitation Index (BWMFI) ??? хочу протестировать на демо ваш советник... пишет ни один индикатор не прикреплен.. или они не нужны на графике??

Scriptong
07-03-2010, 15:49
объясните пжлст где crossMa и Bill Williams Market Facilitation Index (BWMFI) ??? хочу протестировать на демо ваш советник... пишет ни один индикатор не прикреплен.. или они не нужны на графике??
Видимо, речь идет о второй версии комплексного советника. Как описано, во второй части статьи, он оперирует индикаторами, которые необходимо присоединить к графику. Это не обычные пользовательские индикаторы, а специально созданные для советника.

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

В архиве находится 21 индикатор, каждый из которых является аналогом встроенного в МТ4 индикатора. По именам они отличаются от своих оригиналов символами СЕ (Complex Expert). Вот их и нужно присоединять к графику, чтобы советник мог "узнать" индикатор.

simplesimple
08-03-2010, 11:16
спасибо огромное ;) извините что невнимательно читал

simplesimple
18-03-2010, 10:59
конечно слишком короткий период чтоб судить... НО заметил... входы хорошие а вот на выходах проблема... либо нужен трейлинг стоп либо что то поменять ...сливает если вовремя не зафиксировать прибыль

Scriptong
18-03-2010, 16:58
Трейлинг-стоп далеко не всегда решает проблему в пользу прибыли. Я бы даже сказал крайне редко. По крайней мере все разработанные мною системы показывают результаты хуже при введении трейлинг-стопа.
Этому есть свое объяснение - рынок нельзя привязывать к определенному количеству пунктов, такой подход он не терпит.

RasAV
28-03-2010, 16:58
Спасибо Scriptong!

Уже есть результат:

13325

Здесь последний отчет теста советника
13326
Посмотрим как он себя поведёт на демо…

Здравствуйте. Хотелось бы посмотреть на Ваши настройки если можно,
для советника Teralex_Expert_V** в виде файла *.set, ну и конечно же
последнюю версию самого творения. :)

Scriptong
29-03-2010, 08:29
Здравствуйте. Хотелось бы посмотреть на Ваши настройки если можно,
для советника Teralex_Expert_V** в виде файла *.set, ну и конечно же
последнюю версию самого творения. :)

Последняя моя версия 11, ищите на 5-ой странице. Хотя, возможно, Teralex уже создал усовершенствования. Но, как я уже говорил, проблема советника в невозможности проверки в среде тестера стратегий, так как результаты нельзя считать адекватными. Единственный способ - онлайн-тестирование, которое также будет иметь различные результаты у каждого брокера.

FAXI
22-04-2010, 14:05
Здравствуйте Scriptong. Зделайте пожалуйста из индикатора S-B-B индикатор CE_S-B-B, чтобы его можно было применить в комплексном советнике.
Заранее спасибо.

FAXI
22-04-2010, 14:12
Здравствуйте Scriptong. Зделайте пожалуйста из индикатора S-B-B индикатор CE_S-B-B, чтобы его можно было применить в комплексном советнике.
Заранее спасибо.

Файл прикрепил.

FAXI
24-04-2010, 10:01
Спасибо ребята, разобрался. Вопрос снимаю.Осталось только с условиями на вход и выход потренироваться.
Это я хотел вместо Юрика поставить S-B-B, он почти не перерисовывается,только на малых ТФ немножко, но можно параметр загрубить а так он хорошо реагирует на движения.
Спасибо за науку. Пробую брать сигналы с буферов. Успехов.

simplesimple
25-04-2010, 10:07
scriptong, вопрос чисто математический..
допустим вероятность выигрыша по macd 60%
вероятность выигрыша по rsi 60%
получаем для обоих 0.6 x 0.6 => 0.36 => 36%
смысл увеличивать кол-во индикаторов, если вероятность выигрыша уменьшается?

Scriptong
26-04-2010, 18:17
scriptong, вопрос чисто математический..
допустим вероятность выигрыша по macd 60%
вероятность выигрыша по rsi 60%
получаем для обоих 0.6 x 0.6 => 0.36 => 36%
смысл увеличивать кол-во индикаторов, если вероятность выигрыша уменьшается?





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

Заметьте, что при условии применения двух индикаторов количество сделок уменьшается за счет подтверждения сигналов одного индикатора другим. Таким образом, исходные 60% оказываются не у дел. Мы получаем абсолютно другую систему, не имеющую отношения к первичным значениям вероятности.

simplesimple
26-04-2010, 22:05
По улице шли три утки и четыре курицы. Сколько коров шло по улице?
В этом примере вы производите неправильные действия по вычислению вероятности, а именно, умножение.

Заметьте, что при условии применения двух индикаторов количество сделок уменьшается за счет подтверждения сигналов одного индикатора другим. Таким образом, исходные 60% оказываются не у дел. Мы получаем абсолютно другую систему, не имеющую отношения к первичным значениям вероятности.

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

Scriptong
27-04-2010, 19:17
индикатор всегда опаздывает поэтому взаимоподтверждения вряд ли сделают нас милионерами... слишком легко было бы...

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

FAXI
29-04-2010, 07:52
Всем добрый день.
Просьба к Scriptong. Переделал индикатор в СЕ, а вот блок сигналов не получяется.
Я подключяю индикатор к Complex_Expert_v2 и кнопкой F3 смотрю внешние переменные, бывает и "1" и " - 1" и "0", но затем нет переключения по сигналам индикатора.
CE_SBB и CE_HMA_h получились и работают а этот CE_DSS не хочет работать.
Большая просьба поправить блок сигналов.
Ещё вопрос. Какое условие надо ставить, чтобы сигналы (" ==" или ">=" или "<=") держались до переворотного сигнала.
Эти однотиковые (">" или "<" например как при пересечении стохастика).
Это надо чтобы один индикатор держал условие а другой например закрыл ордер и при повторном сигнале (после небольшого отката) открыл ордер в том же направлении а не ставил обратный ордер.Он только депо на спреде съедает.

FAXI
29-04-2010, 08:37
Хотите CE_SBB - пробуйте. Только учтите, входит эксперт по нему чётко на втором баре, а вот выходить надо самому. Exp никогда не пропускает вход и при хорошем движении прибыль всегда можно взять.После закрытия ордера вручную, Exp при следующем сигнале ставит ордер. Старый сигнал не повторяет и ордер не ставит.
С этим индикатором всё было очень просто, условия для сигнального блока взял прямо из индикатора.
Меня интересует что про это скажет Scriptong.
С уважением. FAXI.

Scriptong
29-04-2010, 14:27
Всем добрый день.
Просьба к Scriptong. Переделал индикатор в СЕ, а вот блок сигналов не получяется.
Я подключяю индикатор к Complex_Expert_v2 и кнопкой F3 смотрю внешние переменные, бывает и "1" и " - 1" и "0", но затем нет переключения по сигналам индикатора.
CE_SBB и CE_HMA_h получились и работают а этот CE_DSS не хочет работать.
Большая просьба поправить блок сигналов.
Ещё вопрос. Какое условие надо ставить, чтобы сигналы (" ==" или ">=" или "<=") держались до переворотного сигнала.
Эти однотиковые (">" или "<" например как при пересечении стохастика).
Это надо чтобы один индикатор держал условие а другой например закрыл ордер и при повторном сигнале (после небольшого отката) открыл ордер в том же направлении а не ставил обратный ордер.Он только депо на спреде съедает.

По самому индикатору. Вместо условий:

if (wrBuffera[1] > dnBufferb[1])
GlobalVariableSet(Signal, 1); // Buy
else
if (wrBuffera[1] < dnBufferb[1])
GlobalVariableSet(Signal, -1); // Sell
else
GlobalVariableSet(Signal, 0); // Нет сигнала

правильнее написать:

if (wrBuffera[1] > wrBuffera[2])
GlobalVariableSet(Signal, 1); // Buy
else
if (wrBuffera[1] < wrBuffera[2])
GlobalVariableSet(Signal, -1); // Sell
else
GlobalVariableSet(Signal, 0); // Нет сигнала

А советник вполне возможно не реагирует на индикатор, так как должен быть доработан для того чтобы "узнавать" индикатор CE_DSS. Для этого в теле функции GetSignal нужно добавить строку:

GetOneSignal("CE"+Symbol()+"DSSSTime", "CE"+Symbol()+"DSSSSignal",
"DSS\n");

Scriptong
29-04-2010, 14:30
Меня интересует что про это скажет Scriptong

Не пойму, в чем собственно вопрос...

FAXI
29-04-2010, 16:39
Советник находит индикатор и я его вижу на мониторе, но когда я смотрел глобальные переменные, там небыло изменения "1" на "-1" соответственно и сигналов на переустановку ордеров.
Попробую с новыми условиями и отвечю.

FAXI
29-04-2010, 16:57
Советник находит индикатор и я его вижу на мониторе, но когда я смотрел глобальные переменные, там небыло изменения "1" на "-1" соответственно и сигналов на переустановку ордеров.
Попробую с новыми условиями и отвечю.

Эти условия советник не принимает. Я его не вижу на мониторе.( Ниже увидел, но...)
В глобальных переменных появляется то что на рисунке.
Хотя CE_SBB я ставлю, в советнике прописывю и он работает.

FAXI
29-04-2010, 17:26
Бай сигнал советник поставил (была "1") а для SELL появился "0" а надо "-1" и ордер не открылся.

FAXI
29-04-2010, 17:39
Не пойму, в чем собственно вопрос...

Правильно ли я поставил условие, или надо было прописать условие в индикаторе CE_SBB по другому? Главное работает.

Я только тренируюсь писать условия, поэтому и спрашиваю как их правильно писать и почему вы поставили в условии "[2]" в квадратных скобках. Это 2-й бар от конца массива? Или можно брать названия буферов а затем их сравнивать.
И какое условие ставить, к примеру >, <, или >= или <= или == 1, == 0, >0,<0,>1,<1 или последний закрытый бар в массиве [1]. Может где нибуть можно про это почитать. Думаю многим будет это интересно.

Scriptong
30-04-2010, 14:46
Бай сигнал советник поставил (была "1") а для SELL появился "0" а надо "-1" и ордер не открылся.

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

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

Scriptong
30-04-2010, 14:51
Я только тренируюсь писать условия, поэтому и спрашиваю как их правильно писать и почему вы поставили в условии "[2]" в квадратных скобках. Это 2-й бар от конца массива? Или можно брать названия буферов а затем их сравнивать.
И какое условие ставить, к примеру >, <, или >= или <= или == 1, == 0, >0,<0,>1,<1 или последний закрытый бар в массиве [1]. Может где нибуть можно про это почитать. Думаю многим будет это интересно.

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

Если вам действительно интересно программирование на MQL4, то начните с учебника (http://book.mql4.com/ru/).

FAXI
30-04-2010, 16:57
Если вам действительно интересно программирование на MQL4, то начните с учебника (http://book.mql4.com/ru/).

Большое спасибо за ответ. Буду изучять программирование.

Ваш вариант CE_DSS и советника буду пробовать.

andreyl51
04-05-2010, 13:34
Здравствуйте. Хотел узнать как можно поставить индикатор CE_DSS.zip на разные графики ,пишет уже присоединён и советник его не видит.Тестирую советник работает нормально только на менее 15 мин ставить не стоит много ложных сигналов.Параметры к индикатору пришлось подбирать другие ,торгует получше . А на счёт разных графиков лучше доработать.

Scriptong
04-05-2010, 21:56
Индикатор можно поставить только на различные валютные пары. Если используется одна валютная пара с разными таймфреймами, то никак.

Если возникает проблема при подключении к различным валютным парам, то посмотрите список глобальных переменных терминала (F3). Удалите оттуда все переменные, заканчивающиеся на DSSSTime и DSSSignal. После этого аккуратно присоединяйте индикатор на нужные валютные пары.

andreyl51
05-05-2010, 21:32
Спасибо всё работает нормально!!!

Scriptong
06-05-2010, 10:31
Спасибо всё работает нормально!!!

Пожалуйста. :)

Обращайтесь при возникновении проблем, не стесняйтесь. Но только в рамках форума.

Scriptong
11-06-2010, 15:21
Сообщение от пользователя share, присланное в личку. Не вижу в нем ничего личного, поэтому выношу на форум:

Здравтсвуйте. У меня к Вам небольшой вопрос по советнику Teralex (версия 11).
Что нужно поменять в советнике, что бы открытие ордеров выполнялось с точностью до наоборот? Т.е. если сейчас советник открывает bay при каких-то условиях, то нужно чтобы он открывал sell. И наоборот.

Есть много путей. Одним из них является замена значений переменной Signal, которая отвечает за направление сигнала. Вместо 1 (BUY) присвоить -1 (SELL). Соответственно там, где было -1 (SELL) поставить 1 (BUY).

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

share
12-06-2010, 19:10
Scriptong, спасибо.
Однако, я не совсем понял тот эффект, который получился от этих изменений. Прокомментируйте.

2.gif - до изменений
1.gif - после

Также прикрепил измененный советник.

Тестировал с выключенным мартином (1)

Frim_mgn
13-06-2010, 07:08
Синия стрелочка это Buy красная Sell. На левом рисунке заместо покупки, стали сделки на продажу, в тех же самых местах

share
14-06-2010, 13:23
Frim_mgn, почему сделки закрываются в другом месте?

Scriptong
14-06-2010, 14:34
Frim_mgn, почему сделки закрываются в другом месте?

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

Можно пойти путем отключения "лишних" индикаторов. Для этого нужно переключить соответствующий параметр Use. Например, если не нужен Rads MTF HAS Bar A, то следует перевести параметр UseRads в состояние false.

sershig
21-06-2010, 20:41
А кто-нибудь пробовал этот советник http://bit.ly/dnXrSs расскажите!

share
22-06-2010, 18:30
Scriptong, я это так понимаю: Сигнал на покупку/продажу появляется только после всеобщего единодушного голосования индикаторов.
Ну вот допустим все они говорят, что вот сейчас надо бы и прикупить - советник открывает бай. Так же и наоборот. Так?

Но тут проблема не в "правильном" открытии, а в закрытии сделки.
Похоже, здесь придется "реверснуть" сигнал закрытия сделки, чтобы картинка была зеркальная. Это поможет?

Scriptong
23-06-2010, 11:44
Scriptong, я это так понимаю: Сигнал на покупку/продажу появляется только после всеобщего единодушного голосования индикаторов.
Ну вот допустим все они говорят, что вот сейчас надо бы и прикупить - советник открывает бай. Так же и наоборот. Так?

Но тут проблема не в "правильном" открытии, а в закрытии сделки.
Похоже, здесь придется "реверснуть" сигнал закрытия сделки, чтобы картинка была зеркальная. Это поможет?

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

По поводу закрытия не пойму о чем речь. Можно подробнее?

share
23-06-2010, 12:58
По поводу закрытия не пойму о чем речь. Можно подробнее?

http://forum.fxservice.com/showpost.php?p=25184&postcount=127 - тут я привел графики до и после изменения тералекса. Как видим сделки в переделанной версии советника закрываются не там, где они закрываются в оригинальной версии тералекса (11 версия).

Scriptong
24-06-2010, 09:12
http://forum.fxservice.com/showpost.php?p=25184&postcount=127 - тут я привел графики до и после изменения тералекса. Как видим сделки в переделанной версии советника закрываются не там, где они закрываются в оригинальной версии тералекса (11 версия).
Так это вопрос по поводу советника teralex... Я то думал мы говорим о комплексном советнике.

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

share
24-06-2010, 18:23
EURUSD M1, все тики
Версия teralex 11
установки все по-умолчанию, martinmul - 1.

Scriptong
25-06-2010, 20:12
EURUSD M1, все тики
Версия teralex 11
установки все по-умолчанию, martinmul - 1.

А у второго какие настройки?

share
26-06-2010, 13:33
Точно такие же.

Scriptong
28-06-2010, 09:49
Точно такие же.

К сожалению, не смог смоделировать ситуацию у себя, так как не могу найти индикатор Rads T3 Stochastic, хотя точно помню, что Teralex его выкладывал.

При сравнении кодов версий 11 и 13 обнаружил следующее:
1) Советники не могут считаться идентичными, так как условия открытия позиции в них используются различные. В 13-ой версии добавлена проверка условия по индикатору Perky.

2) Даже если бы все остальное было идентичным зеркальности сделок не удалось бы достичь по той причине, что реверсные в 13-ой версии лишь условия открытия сделок. Условия закрытия сделок остались от "прямой" системы.

По идее, зеркальными будут версии 12 и 14 (опять же, не могу проверить у себя).

share
06-07-2010, 13:50
Scriptong, Тералекс13 тут не причем совершенно. Сравниваются 11 и 11- версии советников. Прикрепляю их и индикатор стохастик.

Scriptong
07-07-2010, 18:54
Scriptong, Тералекс13 тут не причем совершенно. Сравниваются 11 и 11- версии советников. Прикрепляю их и индикатор стохастик.

Речь шла о зеркальности сделок каких-то двух версий. Я привел 14-ю версию, которая должна быть зеркальной по отношению к 11-ой. Правда, не проверял. Сейчас тем более не могу проверить, так как времени на работу выделяю очень мало по причине нахождения на отдыхе.

share
08-07-2010, 14:21
Scriptong, я зеркалил 11 версию (по Вашему методу). Теперь она называется Teralex11-.
Буду ждать известий.

Scriptong
08-07-2010, 21:03
Scriptong, я зеркалил 11 версию (по Вашему методу). Теперь она называется Teralex11-.
Буду ждать известий.

вы проверили 14-ую версию?

share
13-07-2010, 19:49
вы проверили 14-ую версию?

Нет, не проверял, а зачем? 14 версия зеркальна 11? Насколько я помню, Вы 14 версию делали из 13. 13 версия меня не интересует.

Scriptong
14-07-2010, 20:00
Scriptong, Тералекс13 тут не причем совершенно. Сравниваются 11 и 11- версии советников. Прикрепляю их и индикатор стохастик.

Если вам нужен реверс 11-ой, то вот он.

Frim_mgn
25-07-2010, 18:24
Scriptong, скажите пожалуйста, у вас думаю огромный опыт в тестировании советников. Вот что мне интересно,
насколько можно доверять тестету в оптимизации параметров трейлинга?
Насколько точно можно верить результатам, когда сделка открываеться и закрывается на одном и том же баре, или тестировании советников скальперов.
Я так понимаю, что т к тики эмулируються, то наиболее адекватные и близкие результаты к реальности получаються у более долгосрочных советников, которые берут не по 1-5 пунктов, а 15 и выше, и при том закрываються не на баре котором открылись.

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

Как обстоят дела, с подгрузкой данных с нескольких ТФ, верно ли тестирование происходит?

Надеюсь немного:) Заранее спасибо.

Scriptong
26-07-2010, 15:30
В случаях использования трейлинга первейшим условием тестирования является применение модели "Все тики". Без этого результаты не представляют вообще никакого интереса.

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

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

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

А вот предсказать на будущее, как будет вести себя система, вообще является сверхзадачей. В этом случае я везде пишу следующее: "Отличные результаты, показанные стратегией в прошлом, не могут являться гарантией ее успешности в будущем". Единственное, что может увеличить уверенность в стабильности системы, это большая выборка статистических данных, то есть большое количество сделок. Чем их больше, тем лучше. Для себя минимумом считаю выборку в 200 сделок, оптимумом - 1000 сделок. Если же система стабильна на 2000 и более сделок, то такой системе я выкажу наибольшее доверие в будущем. Но речь о 100% уверенности, опять же, не идет.

Frim_mgn
26-07-2010, 19:23
Спасибо. Я вот тоже подумал, что наилутший показатель объективности тестирования, это запустить на какое то время он-лайн тест, и потом прогнать этот же период на тестере, и соответственно уже и судить...

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

Scriptong
26-07-2010, 22:23
А можно ли добавить в комплексный советник следующее, закрытие текущей позиции, если поступает сигнал на открытие противоположной, ну и соответственно открытие противоположной сразу. Пытался добавить функцию сам, но что то не получилось:)

Так это реализовано в нем. При поступлении сигнала BUY имеющиеся позиции SELL автоматически закрываются:

// - 5 - ================ Обработка сигнала BUY =========================================
if (LastBuySignal == Time[0])
{
int Res = CheckOrdersReal(OP_SELL);
RefreshRates();
if (Res == 0) // если нет открытых позиций
{
Price = ND(Ask);
double TP = NP(IF(TakeProfit == 0, 0, Price + TakeProfit*Tick));
double SL = NP(IF(StopLoss == 0, 0, Price - StopLoss*Tick));
Type = OP_BUY;
}
if (Res == 1) return(0); // не удалось закрыть противоположную позицию
}
// - 5 - ====================== Окончание блока =========================================

То же самое справедливо в случае сигнала SELL.

Pifagor
13-08-2010, 17:00
Добрый день, уважаемый Scriptong!
Очень понравился Ваш Комплексный советник. Без лишних диферамб - это настоящее подспорье для трейдеров, осознавших необходимость автоматизации своей торговли и начинающих писать собственных торговых советников. Решился на это и я. Однако, даже с таким подспорьем, пока ничего не получается. При условиях моей стратегии самому мне не справиться. Уверен, что для Вас это не составит труда, если найдете время сваяйте советника. Буду очень признателен. Основан на двух индикаторах Butterfly (модифицированный ZigZag) и ATR_the_bat. Понятно, что Butterfly (читай ZigZag) хорош только на истории, что может перерисовываться, поэтому он и используется в паре с ATR_the_bat.
Условия советника следующие:
1. Во внешние переменные желательно вывести размер первоначальной сделки в виде процента от баланса счета, т.е. в переменных только процент, а в советнике должен быть блок для расчета объема открываемой позиции в зависимости от установленного процента. Время торговли: с 08.00 до 17.00 (серверное).
2. Открытие сделки Buy происходит при одновременном выполнении следующих условий: а) Butterfly нарисовал синюю стрелку на покупку и б) цена пробила красный уровень ATR_the_bat снизу вверх хотя бы на 1 пипс. Именно в этот момент должна совершаться сделка Buy. По-моему, логичнее в данном случае после выполнения условия а) выставлять отложенный ордер Buy Stop на расстоянии 1 пипс от уровня ATR_the_bat, но поскольку уровень ATR_the_bat движется, то отложенник нужно модифицировать (не знаю, что лучше: по-тиково или по окончании выбранного таймфрейма, поэтому всецело полагаюсь на Ваше мнение).
3. Открытие сделки Sell по аналогии – после того, как: а) Butterfly нарисовал красную стрелку на продажу и б) цена пробила синий уровень ATR_the_bat сверху вниз хотя бы на 1 пипс. Сделка также как и в случае с покупкой должна открываться по модифицирующемуся отложеннику Sell Stop.
4. Закрытие сделок должно происходить при достижении TP1 (во внешних переменных), либо при появлении сигналов на открытие противоположной сделки при любом неотрицательном результате.
5. В случае, если появились сигналы на открытие противоположной сделки, а результат по первой сделке отрицательный, то первая сделка не закрывается, TP у нее удаляется (модифицируется в ноль) и открывается противоположная сделка такого же объема с TP=0. Получаем равнозначный лок без TP и SL. При появлении сигналов на открытие сделки в направлении первой сделки, открывается еще одна сделка таким же объемом. При этом получаем две сделки в одну сторону и одну сделку в противоположную. Для этого блока сделок должен рассчитываться общий TP2 (во внешних переменных). SL нет. Если достигнут уровень TP2, блок сделок закрывается. Если уровень TP2 не достигнут и появились сигналы на совершение сделки 4, TP удаляется (модифицируется в 0), открывается четвертая сделка с TP=0. Получаем замок два на два. При появлении сигналов на совершение пятой сделки сделка открывается и на весь блок сделок (3 сделки в одну сторону и 2 сделки в другую) устанавливается TP2. И т.д.
6. Вынести во внешние переменные максимально возможное количество одновременно открытых локов, при превышении которого все локи автоматом закрываются. При значении равном 0 локи не закрываются.
7. При окончании торгового времени (17.00 по серверу) при наличии открытых сделок в плюсе (или ноль) сделки закрываются, все отложенники удаляются, торговля начинается со следующего дня с 08.00 когда вновь выставляются новые отложенники. При наличии на 17.00 открытых сделок в минусе, создаем лок. Торговля также продолжается в 08.00 следующего дня с выставления новых отложек.
Спасибо за внимание, буду признателен за помощь.
С уважением, Андрей
bavic@onego.ru

Scriptong
17-08-2010, 09:36
С использованием ATR_the bat уже написан эксперт - Летучая мышь (http://forum.fxservice.com/showthread.php?t=4300). Ко всему прочему, это один из тех немногих экспертов, которые до сих пор стабильно приносят прибыль при торговле на реале.

Идея насчет использования подтверждающего сигнала имеет право на жизнь. В этом плане не понятно, какой из сигналов является первичным. Т.е. в случае появления стрелки Butterfly раньше пробития уровня ATR_the_bat все понятно. А если наоборот?

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

Pifagor
17-08-2010, 10:14
С использованием ATR_the bat уже написан эксперт - Летучая мышь (http://forum.fxservice.com/showthread.php?t=4300). Ко всему прочему, это один из тех немногих экспертов, которые до сих пор стабильно приносят прибыль при торговле на реале.

Идея насчет использования подтверждающего сигнала имеет право на жизнь. В этом плане не понятно, какой из сигналов является первичным. Т.е. в случае появления стрелки Butterfly раньше пробития уровня ATR_the_bat все понятно. А если наоборот?

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

Спасибо, что беретесь за помощь. Вношу требуемые Вами уточнения:
1. Сигнал от Butterfly первичен, обратная ситуация в расчет не принимается.
2. Хорошо локи выкидываем, тогда предложение вынести во внешние переменные направление первичного входа: 0 – без разницы, 1 – первый вход Buy, 2 – первый вход Sell.
С уважением, Андрей

Pifagor
18-08-2010, 16:00
Добрый день, уважаемый Scriptong!
Можете "индивидуально оформить" индикаторы Butterfly и ATR_the_but для использования в комплексном советнике V2.
С уважением, Андрей

Scriptong
19-08-2010, 12:03
1. Сигнал от Butterfly первичен, обратная ситуация в расчет не принимается.


С этим понятно.



2. Хорошо локи выкидываем, тогда предложение вынести во внешние переменные направление первичного входа: 0 – без разницы, 1 – первый вход Buy, 2 – первый вход Sell.


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

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

Какой из этих вариантов нужен вам? Я больше сколняюсь ко второму варианту как к более устойчивому и поддающемуся адекватной проверке в тестере.

Pifagor
19-08-2010, 17:36
С этим понятно.



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

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

Какой из этих вариантов нужен вам? Я больше сколняюсь ко второму варианту как к более устойчивому и поддающемуся адекватной проверке в тестере.

Здравствуйте, уважаемый Scriptong.
А можно использовать такую тактику:
1. оставляем возможность выбора первой сделки.
2. Появились 2 сигнала на Buy - покупаем, появились 2 сигнала на Sell - продаем и т.д., т.е. открытие каждой последующей сделки не должно зависеть от того, закрылась предыдущая или нет.
3. Закрытие открытых ордеров как одного, так и группы ордеров (всех открытых) при наступлении заранее установленных TP или SL.
Попробую пояснить: если открыт один ордер (неважно покупка или продажа), условия для открытия противоположной сделки еще не выполнились, но наступает TP или SL, то и сделка закрывается по TP или SL. Если же ордер открыт, выполнились условия для открытия противоположной сделки, но первый ордер не закрылся ни по TP ни по SL, то открывается вторая сделка, первый ордер при этом не закрывается и т.д. Закрытие всех ордеров при наступлении TP или SL (т.е. TP и SL не для каждого конкретного ордера, а для всех открытых ордеров).
Для чего это нужно. Если тренд твой друг и мы торгуем по тренду и имеем возможность выбора первой сделки (см.п.1), то тем самым снижаем количество убыточных сделок.

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

SK_
22-08-2010, 22:08
А можно использовать такую тактику:
..
2. Появились 2 сигнала на Buy - покупаем, появились 2 сигнала на Sell - продаем и т.д., т.е. открытие каждой последующей сделки не должно зависеть от того, закрылась предыдущая или нет.
3. Закрытие открытых ордеров как одного, так и группы ордеров (всех открытых) при наступлении заранее установленных TP или SL.

Вопрос был задан не мне, но позволю себе пару слов.

Вообще говоря, можно сделать всё, что угодно. Однако, следует всё же искать решение, по возможности глубоко проникая в суть задачи. В данном случае (как и обычно в подобных случаях) сначала необходимо определить термины. Нужно решить что такое "торговый критерий", а именно, определиться насколько его, например, "баёвость" отрицает противоположное - "селовость". Простые рассуждения легко приводят к выводу, что критерий (здесь речь не о том, насколько он правильный, а о самой его сути), указывающий вверх, есть то же самое, что критерий, указывающий на прекращение указывания вниз. Иными словами:
- открытие рыночного ордера в любую сторону однозначно указывает на необходимость закрытия всех противоположных ордеров независимо от истории их открытия;
- закрытие рын. ордера не всегда связано с необходимостью открытия противоположного, а именно, не связано, если торовый критерий отсутствует и примается решение прекратить любую необоснованную торговлю.

Значимые SL и ТР - это нечто такое, что должно расчитываться на основании тех же торговых критериев. В правильной стратегии SL и ТР должны переосмысливаться (пересчитываться) на основании текущих условий торговли (цен) на каждом тике (баре).

Если в распоряжении разработчика нет чётких критериев для откр/закр ордеров или расчёта SL и ТР, то не следует браться за программирование советника. В противном случае положительный результат может быть получен лишь случайно (по опыту, эта вероятность сравнима с вероятностью вигрыша в лотерею, т.е. прибл. 1/1 000 000).

Pifagor
24-08-2010, 11:49
Здравствуйте, Уважаемый Scriptong!
Решил конкретизировать условия советника. Работаем "по классике", т.е. без локов.
1) при появлении противоположных сигналов, первоначальная сделка закрывается, открывается новая.
2) закрытие при наступлении первого из вариантов:
а) традиционно по TP/SL;
б) при развороте;
в) при появлении противоположного сигнала от ATR_the_but (см. Советник - условия2.doc)
3) Мартина оставляем (с возможностью отключения).
4) что касается времени торговли: открытие сделок только с 08.00 по терминальному времени, после 17.00 открытия не производится, существующие сделки закрываются по TP/SL или при появлении противоположного сигнала от ATR_the_But
5) все же хочется оставить возможность выбора первой сделки (0 - без разницы, можем использовать для тестирования; 1 - первая сделка на Buy; 2 - первая сделка на Sell.
6) во внешних переменных вывести размер первоначальной сделки в виде процента от баланса счета.

С уважением, Андрей

Scriptong
01-09-2010, 22:46
Уже можно точно сказать, что по данной теме будет полноценая статья. Материал полностью готов.

Что не будет соответствовать изложенным требованиям:
1) Вместо индикатора Butterfly будет использован обычный ZigZag. Причина проста: Butterfly очень неповоротливый, сильно затормаживает выполнение советника. Кстати, Butterfly немного чувствительнее ZZ, что в данном советнике не очень подходит. Сам индикатор Butterfly я немного изменил, убрав "двойную стрелку".

2) ZZ выступает не опережающим индикатором, а подтверждающим. Т.е. первичный все же ATR_the_Bat

3) Мартингейла не будет. Этот подход для меня является примером "как не надо делать" (см. Илан в соответствующей ветке - это было мое последнее участие в Мартингейле)

4) Направление первой сделки. Этот параметр является избыточным, т.к. каждый советник можно настроить подобным образом: закладка "Общие" окна настроек советника, указать "Only short" или "Only long" позиции.

5) Самая главная ошибка в ТЗ, которую я не заметил вначале (давно не имел практики работы с ZZ), что на истории то действительно все отлично, что не дает возможности объективно составить условия стратегии. В Понимании проблемы, конечно, помог тестер. С его помощью и родилась идея использования подтверждающего сигнала ZZ.

FAXI
02-09-2010, 06:52
Всем привет. Смотрите как я тренировался с переделкой индикаторов в CE.
CE_SBB берёт сигналы внутри себя.
CE_SBB_0, CE_SBB_1, CE_SBB_2 через iCustom работают с простым S-B-B.

Но лучше всех работает CE_SBB_0.

Пробуйте. Жду комментариев и новую статью Scriptong.

Pifagor
02-09-2010, 08:27
Добрый день, уважаемый Scriptong.

Честно говоря не "догоняю" как ZZ будет подтверждать сигнал ATR_the_but. Ведь ZZ показывает экстремумы (max и min) и может перерисовываться при их обновлении, в отличие от ATR_the_but. Главное правило Форекс - купить дешевле, продать дороже. Поэтому я и считаю, что ZZ должен быть "первой ласточкой". Если происходит подтверждение от ATR, то сделка заключается, если подтверждения от ATR нет, значит ZZ перерисуется, показав новый экстремум. Думаю при выходе новой статьи Ваше видение определения входа в сделку мне станет понятно.

С уважением, Андрей

Scriptong
02-09-2010, 21:07
Статья опубликована: Летучая мышь. Часть 2. (http://fxtrade.ru/mqlabs/02.09.2010-mqlabs-letuchaya-mysh-chast-2)

Pifagor
03-09-2010, 13:24
Добрый день, уважаемый Scriptong!

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

Еще раз благодарю, хотя реализация и не совсем та, что просил я.

С уважением, Андрей

Scriptong
06-09-2010, 09:12
Насколько понимаю результаты тестов показаны при круглосуточной торговле. Думаю при выборе определенных часов для торговли и других тайм-фреймах результат будет заметно лучше.


Вряд ли. По крайней мере мне не удалось увидеть улучшения при ограничении по часам работы.



Еще раз благодарю, хотя реализация и не совсем та, что просил я.


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

Mezon
09-10-2010, 09:58
Здравствуйте. Не могу протестировать Complex_Expert_V4, как это делать?
1.открыть терминал
2.тестер > выбрать советник> символ> модель> дату> визуализация> период> старт... не присоединен ни один индикатор.(все идикаторы находятся в папке пользовательские индикаторы)
куда присоединять индикаторы и когда

Scriptong
10-10-2010, 16:44
Такое впечатление, что вы статью просто не читали:

Подводя итог, рассмотрим последовательность действий пользователя при работе с комплексным экспертом и присоединяемыми к нему индикаторами. Думаю, понятно, что файл Complex_Expert_V2.mq4 необходимо положить в папку experts терминала. Содержимое архива indicators.zip, на который указывает ссылка "присоединяемые индикаторы", нужно распаковать в папку experts\indicators терминала. Только после этого можно запускать МТ4.

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

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

Еще одно обстоятельство, которое стоит учитывать, это невозможность открытия одного CE-индикатора пусть даже с разными настройками в пределах одной валютной пары (например, графики разные, таймфреймы разные, а валютная пара одна). Этот же момент касается проверки советника и индикаторов в тестере стратегий в режиме визуализации. Если индикатор присоединен уже на "живую" валютную пару, то его нельзя использовать на этой же валютной паре в тестере стратегий. Кстати, тестирование Complex_Expert_V2 возможно только в режиме визуализации, так как только в нем возможно присоединение индикатора к графику. И хитрости с применением кнопки "Пропустить до" режима визуализации ни к чему не приведут. Поэтому для тестирования стратегии все же нужно применять первую версию советника, а вот для работы онлайн намного удобнее использовать вторую.

Индикаторы к графику присоединять умеете?

Mezon
10-10-2010, 19:35
Такое впечатление, что вы статью просто не читали:


Индикаторы к графику присоединять умеете?

Да конечно умею. Даже из двух мест
1. папка индикаторы где они находятся по типам: трендовые, осцилляторы... "наши СЕ_" находятся в папке пользовательские(щелчком)
2. из навигатора (перетаскиванием)
Статью читал, очень интересны оба советника. Решил на них остановиться и изучить на сколько это возможно.

Scriptong
10-10-2010, 20:21
Да конечно умею. Даже из двух мест
1. папка индикаторы где они находятся по типам: трендовые, осцилляторы... "наши СЕ_" находятся в папке пользовательские(щелчком)
2. из навигатора (перетаскиванием)


Правильно. Так что вам мешает осуществить это в режиме визуализации?

Mezon
11-10-2010, 08:57
Правильно. Так что вам мешает осуществить это в режиме визуализации?

Ни чего не мешает, просто неработает. С Complex_Expert не возникло ни каких проблем... но он в двое "тяжелее"(44кб).

Scriptong
11-10-2010, 14:18
Ни чего не мешает, просто неработает.

Не работает в каком смысле? Не прикрепляется индикатор к графику, не работает эксперт?

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

Mezon
12-10-2010, 06:19
Не работает в каком смысле? Не прикрепляется индикатор к графику, не работает эксперт?

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

Включаю термнал>в обзор рынка выбираю валютную пару> на эту пару "вешаю" индикатор(СЕ_RSI)>открываю тестер>советник Complex_Expert_V4>пара та на которую "повесил" индикатор>дата (месяц)>визуализация>старт>.
Советник не торгует, за месяц нет ни одной сделки...

Scriptong
12-10-2010, 15:22
Включаю термнал>в обзор рынка выбираю валютную пару> на эту пару "вешаю" индикатор(СЕ_RSI)>открываю тестер>советник Complex_Expert_V4>пара та на которую "повесил" индикатор>дата (месяц)>визуализация>старт>.
Советник не торгует, за месяц нет ни одной сделки...

Индикатор нужно прикрепить к валютной паре после начала визуализации, ведь только тогда появится график. До этого вы используете графики, отображающие информацию онлайн, а вам нужен график визуализации.
То есть в указанной вами последовательности нужно поменять местами пункты (а некоторые убрать):
Включаю терминал>открываю тестер>советник Complex_Expert_V4>визуализация>старт>на появившемся графике "вешаю" индикатор(СЕ_RSI)

Mezon
12-10-2010, 15:58
Индикатор нужно прикрепить к валютной паре после начала визуализации, ведь только тогда появится график. До этого вы используете графики, отображающие информацию онлайн, а вам нужен график визуализации.
То есть в указанной вами последовательности нужно поменять местами пункты (а некоторые убрать):
Включаю терминал>открываю тестер>советник Complex_Expert_V4>визуализация>старт>на появившемся графике "вешаю" индикатор(СЕ_RSI)

Спасибо, совсем другое дело, получилось. А я ломал голову на каком этапе "вешать" индикатор. Можно (нужно) движок визуализации убрать на минимум, "повесить" индикаторы а потом на максимум а то у меня месяц пролетает за секунд 15... Спасибо.

Scriptong
12-10-2010, 18:33
Спасибо, совсем другое дело, получилось. А я ломал голову на каком этапе "вешать" индикатор. Можно (нужно) движок визуализации убрать на минимум, "повесить" индикаторы а потом на максимум а то у меня месяц пролетает за секунд 15... Спасибо.

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

Mezon
22-10-2010, 10:13
Здравствуйте. У меня вопрос по Complex_Expert: почему TP и SL сигнала BUY нормализуются с точностью до тика?
//+-------------------------------------------------------------------------------------+
//| Приведение значений к точности одного тика |
//+-------------------------------------------------------------------------------------+
double NP(double A)
{
return(MathFloor(A/Tick)*Tick);
}
А TP и SL сигнала SELL нормализуются с точностью до пунка?
//+-------------------------------------------------------------------------------------+
//| Приведение значений к точности одного пункта |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
return(NormalizeDouble(A, Digits));
}
чем они провинились друг перед другом?

// - 5 - ================ Обработка сигнала BUY =========================================
if (LastBuySignal == Time[0])
{
int Res = CheckOrdersReal(OP_SELL);
RefreshRates();
if (Res == 0) // если нет открытых позиций
{
Price = ND(Ask);
double TP = NP(IF(TakeProfit == 0, 0, Price + TakeProfit*Tick));
double SL = NP(IF(StopLoss == 0, 0, Price - StopLoss*Tick));
Type = OP_BUY;
}
if (Res == 1) return(0); // не удалось закрыть противоположную позицию
}
// - 5 - ====================== Окончание блока =========================================

// - 6 - ============ Обработка сигнала SELL ============================================
if (LastSellSignal == Time[0])
{
Res = CheckOrdersReal(OP_BUY);
if (Res == 0) // Нет открытых позиций
{
RefreshRates();
Price = ND(Bid);
TP = ND(IF(TakeProfit == 0, 0, Price - TakeProfit*Tick));
SL = ND(IF(StopLoss == 0, 0, Price + StopLoss*Tick));
Type = OP_SELL;
}
if (Res == 1) return(0); // не удалось закрыть противоположную позицию
}
// - 6 - ====================== Окончание блока =========================================

komissar73
22-10-2010, 10:29
Можно (нужно) движок визуализации убрать на минимум, "повесить" индикаторы а потом на максимум а то у меня месяц пролетает за секунд 15... Спасибо.

Можно просто нажать на паузу. Она находиться рядом со скоростью.

Scriptong
22-10-2010, 14:49
Здравствуйте. У меня вопрос по Complex_Expert: почему TP и SL сигнала BUY нормализуются с точностью до тика?

Если нормализовать до пункта (Point), то получим ответ сервера "неправильная цена" или "неправильные стопы" при работе на таких инструментах, как золото. Там Tick - 0.1, а Point = 0.01. В итоге профит или стоп формата 1130.73 вызовут ошибку.

Mezon
22-10-2010, 15:55
Если нормализовать до пункта (Point), то получим ответ сервера "неправильная цена" или "неправильные стопы" при работе на таких инструментах, как золото. Там Tick - 0.1, а Point = 0.01. В итоге профит или стоп формата 1130.73 вызовут ошибку.

Я извиняюсь в коде советника задал остальные вопросы.
Почему TP и SL сигнала BUY нормализуются с точностью до тика?
А TP и SL сигнала SELL нормализуются с точностью до пунка?
Чем они провинились друг перед другом, в смысле почему не одинаково?

Scriptong
22-10-2010, 16:10
А TP и SL сигнала SELL нормализуются с точностью до пунка?
Чем они провинились друг перед другом, в смысле почему не одинаково?

Банальная опечатка. Функцию ND следует использовать при сравнении двух значений цены, а функцию NP - при вычислении ценовых значений перед применением в торговых функциях. Поэтому и в случае с SELL следует использовать NP.

Mezon
22-10-2010, 18:09
У меня еще один вопрос по Complex_Expert. В функции проверки
достаточности свободных средств написано OP_BUY а если сделка будет OP_SELL, будет ли корректно работать функция, может быть написать Type?
// - 1 - == Проверка достаточности свободных средств ====================================
if(AccountFreeMarginCheck(Symbol(), OP_BUY, Lots) <= 0 || GetLastError() == 134)
{
if(!FreeMarginAlert)
{
Print("Недостаточно средств для открытия позиции. Free Margin = ",
AccountFreeMargin());
FreeMarginAlert = True;
}
return(5);
}
FreeMarginAlert = false;
// - 1 - == Окончание блока =============================================================

Mezon
22-10-2010, 18:10
Банальная опечатка. Функцию ND следует использовать при сравнении двух значений цены, а функцию NP - при вычислении ценовых значений перед применением в торговых функциях. Поэтому и в случае с SELL следует использовать NP.

Спасибо, исправил.

Mezon
27-10-2010, 10:15
Здравствуйте. У меня вопрос по Complex_Expert, по функции трейлинг стопа. Почему в трейлинг стопе короткой позиции есть SL != 0 а в длинной нет.

// Блок 2. Классический трейлинг длинной позиции -----------------------------------------
if(OrderType() == OP_BUY)
if(SL >= OpPrice && TrailingStop2 != 0) // Если стоп перенесен в безубыток
{

// Блок 4. Классический трейлинг короткой позиции ----------------------------------------
if(OrderType()==OP_SELL)
if(OpPrice >= SL && SL != 0 && TrailingStop2 != 0) // Если стоп перенесен в безубыток
{

Scriptong
28-10-2010, 10:51
Здравствуйте. У меня вопрос по Complex_Expert, по функции трейлинг стопа. Почему в трейлинг стопе короткой позиции есть SL != 0 а в длинной нет.


Дело в том, что для длинной позиции нулевой стоп будет находится ниже цены открытия. Это решается одним условием (SL >= OpPrice). А у короткой позиции стоп, который не перенесен в безубыток, может находиться выше цены открытия или вовсе может быть не установлен (SL == 0). Поэтому одним условием это решить невозможно.

Mezon
28-10-2010, 15:49
Дело в том, что для длинной позиции нулевой стоп будет находится ниже цены открытия. Это решается одним условием (SL >= OpPrice). А у короткой позиции стоп, который не перенесен в безубыток, может находиться выше цены открытия или вовсе может быть не установлен (SL == 0). Поэтому одним условием это решить невозможно.

Спасибо, не понял. Можно подробней?

Scriptong
28-10-2010, 21:28
Функция трейлинг-стопа анализирует взаимное состояние цены и ордера на каждом тике. К примеру, трейлинг еще не подтягивался. Как это определить? Нужно сравнить цену открытия и уровень стоп-приказа.
Для длинных сделок (BUY) уровень стоп-приказа будет находиться ниже цены открытия (по-другому вы не сможете его установить при открытии сделки). Если вы не установите уровень стоп-приказа, то он будет равен нулю. То есть в любом случае математически стоп будет меньше, чем цена открытия сделки.
Для коротких сделок уровень стоп-приказа будет находиться выше цены открытия. Если вы его не установите, то он будет равен нулю. То есть для определения, был стоп передвинут или нет, вам потребуется выполнение одного из условий: стоп выше цены открытия или стоп равен нулю.
В приведенном вами блоке ситуация обратная - блок выполняется, если стоп уже был передвинут. Но изменены только знаки отношения. Смысл остался тот же.

Mezon
29-10-2010, 10:33
Функция трейлинг-стопа анализирует взаимное состояние цены и ордера на каждом тике. К примеру, трейлинг еще не подтягивался. Как это определить? Нужно сравнить цену открытия и уровень стоп-приказа.
Для длинных сделок (BUY) уровень стоп-приказа будет находиться ниже цены открытия (по-другому вы не сможете его установить при открытии сделки). Если вы не установите уровень стоп-приказа, то он будет равен нулю. То есть в любом случае математически стоп будет меньше, чем цена открытия сделки.
Для коротких сделок уровень стоп-приказа будет находиться выше цены открытия. Если вы его не установите, то он будет равен нулю. То есть для определения, был стоп передвинут или нет, вам потребуется выполнение одного из условий: стоп выше цены открытия или стоп равен нулю.
В приведенном вами блоке ситуация обратная - блок выполняется, если стоп уже был передвинут. Но изменены только знаки отношения. Смысл остался тот же.

Спасибо. Честно говоря все равно не понял. Для меня позиции длинная и короткая абсолютно одинаковые и то что уровень стоп приказа для длинной позиции будет ниже а для короткой выше цены это я понимаю. Мне не понятно почему для короткой позиции надо определять: стоп выше цены открытия или стоп равен нулю а для динной не надо? Что будет если из условия короткой позици убрать SL != 0 или SL != 0 добавить в условие длинной позици.

Scriptong
29-10-2010, 10:51
Что будет если из условия короткой позици убрать SL != 0 или SL != 0 добавить в условие длинной позици.

Если убрать из условия короткой позиции SL != 0, то трейлинг не сможет включиться при StopLoss = 0 у позиции. Если же стоп установлен, то все будет работать нормально.

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

Mezon
29-10-2010, 15:50
Если убрать из условия короткой позиции SL != 0, то трейлинг не сможет включиться при StopLoss = 0 у позиции. Если же стоп установлен, то все будет работать нормально.

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

Я конечно извиняюсь, вот это я и не могу понять. Разве трейлинг не одинаково обрабатывает позицию Buy и Sell. Предположим что StopLoss = 0(в пользовательских настройках) как Buy для так и для Sell. Почему тогда трейлинг не сможет включиться при StopLoss = 0 у короткой позиции и включится при StopLoss = 0 у длинной позиции?

$inop
31-10-2010, 13:44
Уважаемый Scriptong !. Меня очень заинтересовал Ваш комплексный советник и советник Teralex. Я даже пытался использовать Ваши разработки для торговли в частности Teralex_Expert , исключив из него некоторые на мой взгляд избыточные функции . Но к моему великому сожалению мне так и не удалось его модифицировать для моей торговой системы . Не могли бы вы помочь мне создать Експерт по моей торговой системе .

Торговая система

Торговая система включается в себя три основных индикатора .
1. Трендовый Индикатор основной SkDon Trend Signal по которому принимается решение о входе в сделку . Индикатор является по большому счету модификацией индикатора HAS . Индикатор выдает сигнал при смене тренда , рисует синюю стрелку при сигнале на покупку и красную при сигнале на продажу .

2 . Трендовый индикатор Bollinger Bands_Stop_v2 . Индикатор напоминающий индикатор SAR , по он перерисовывает точки только после закрытия свечи на каждом из таймфреймов . Индикатор используется для определения уровня SL и дополнительного подтверждения сигнала о смене тренда .

3. Осциллятор индикатор Rads T3 Stochastic . Индикатор используется для фильтра входа в сделку и выхода из нее .

3.1 Правила входа в сделку на покупку BUY
- индикатор SkDon Trend Signal нарисовал синюю стрелку вверх
и
- индикатор Bollinger Bands_Stop_v2 находится ниже цены закрытия свечи
и
- индикатор Rads T3 Stochastic меньше 80

Правила выхода из сделки BYU
- индикатор SkDon Trend Signal нарисовал красную стрелку вниз
Или
- индикатор Bollinger Bands_Stop_v2 находится выше цены закрытия свечи
Или
- индикатор Rads T3 Stochastic пересек линию 80 сверху вниз

3.2. Правила входа в сделку Sell (аналогичные правилам входа в сделку BYU )

- индикатор SkDon Trend Signal нарисовал красную стрелку вниз
и
- индикатор Bollinger Bands_Stop_v2 находится выше цены закрытия свечи
и
- индикатор Rads T3 Stochastic больше 20

Правила выхода из сделки SELL
- индикатор SkDon Trend Signal нарисовал синюю стрелку вверх
Или
- индикатор Bollinger Bands_Stop_v2 находится ниже цены закрытия свечи
Или
- индикатор Rads T3 Stochastic пересек линию 20 снизу вверх


4. Правила входа в сделку действительны для таймфреймов М15 , М30, Н1 , Н4 и сделки открываются при получении сигналов на любом таймфрейме . При открытии сделки в примечании я обычно указываю на каком тайфрейме сделка открыта .

5. Советник необходимо оснастить двухуровневым траллингстопом или возможность тралить по индикатору Bollinger Bands_Stop_v2 .

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

С уважением Валерий Зыков .

Scriptong
01-11-2010, 10:03
В принципе, интересно. Еще не смотрел индикаторы, но попробую.
Если советник покажет хорошие результаты, то будет оформлен в виде статьи.

Sir
01-11-2010, 12:40
Уважаемый Scriptong, очень понравился Ваш советник. хотел к нему приделать Советник SimpleMACrossDouble, вроде получилось, но перестаёт работать тралл и стоп не ставится в безубыток.

$inop
01-11-2010, 13:09
В принципе, интересно. Еще не смотрел индикаторы, но попробую.
Если советник покажет хорошие результаты, то будет оформлен в виде статьи.

Буду премного благодарен .

Scriptong
02-11-2010, 21:15
Буду премного благодарен .

Индикаторы 1_Skdon_trend_sig и Bollinger_Bands_Stop_v2 представлены декомпилированными версиями исходных кодов. Пожалуйста, удалите их, а на их место выложите компилированные файлы ex4. Разрешения на показ исходных кодов этих индикаторов ни вы, ни я от авторов не получали.
Мы имеем право пользоваться только компилированными версиями, т.к. никаких ограничений в распространении компилированных версий авторы не установили.

$inop
03-11-2010, 05:28
Индикаторы 1_Skdon_trend_sig и Bollinger_Bands_Stop_v2 представлены декомпилированными версиями исходных кодов. Пожалуйста, удалите их, а на их место выложите компилированные файлы ex4. Разрешения на показ исходных кодов этих индикаторов ни вы, ни я от авторов не получали.
Мы имеем право пользоваться только компилированными версиями, т.к. никаких ограничений в распространении компилированных версий авторы не установили.

Хорошо . Прошу прощения за эту оплошность .

Sir
03-11-2010, 06:51
Обнаружены некоторые проблемы.
1.Комплексный советник пропускает сигналы.
2. при включении в работу сразу открывает сделку

Scriptong
04-11-2010, 14:54
Обнаружены некоторые проблемы.
1.Комплексный советник пропускает сигналы.
2. при включении в работу сразу открывает сделку

Можно подробнее: какие индикаторы включаются, с какими настройками?

По поводу открытия сделки сразу же вполне возможно. Например, индикатор CE_CrossMA всегда будет выдавать сигнал BUY, если быстрая средняя выше медленной, и сигнал SELL, если быстрая ниже медленной.

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

Индикаторы "местного" значения (сигнал выдается только на том баре, на котором произошло событие):
1) CE_AC
2) CE_AO
3) CE_CCI
4) CE_Demarker
5) CE_RSI
6) CE_WPR


Индикаторы, которые всегда дают сигнал Buy или Sell:
1) CE_ADX
2) CE_Alligator (исключение составляет переплетение линий, в этом случае - 0)
3) CE_Bollinger (исключение - цена находится между линиями)
4) СE_BWMFI (исключение - цена между High и Low приседающего бара)
5) CE_CrossMA
6) CE_DSS - нет описания в статье, нужно смотреть текущую тему
7) CE_Envelopes (исключение - цена между границами канала)
8) CE_ForceIndex
9) CE_Fractal (исключение - цена между фратклами)
10) CE_Fish - нет описания в статье, нужно смотреть текущую тему
11) CE_Fish20 - нет описания в статье, нужно смотреть текущую тему
12) CE_MACD
13) CE_MACDBars - нет описания в статье, нужно смотреть текущую тему
14) CE_MACDBars30 - нет описания в статье, нужно смотреть текущую тему
15) CE_Momentum
16) CE_OsMA
17) CE_ParabolicSAR
18) CE_PulseFlat - нет описания в статье, нужно смотреть текущую тему
19) CE_Rads MTF HAS Bar A - нет описания в статье, нужно смотреть текущую тему
20) CE_RVI
21) CE_StandartDeviation
22) CE_Stochastic

Sir
05-11-2010, 06:49
Понятно
Стоят CE_CrossMA
CE_ParabolicSAR

Scriptong
05-11-2010, 21:51
Понятно
Стоят CE_CrossMA
CE_ParabolicSAR

Да, они дают сигнал всегда. Это приведет к мгновенному открытию сделки после запуска советника. Чтобы такого не происходило необходимо комбинировать их с индикатором "местного значения".

Scriptong
05-11-2010, 22:13
to $inop:

Статья готова - Мультипериодная торговля (http://www.fxtrade.ru/mqlabs/05.11.2010-mqlabs-multiperiodnaya-torgovlya). Обсуждение здесь (http://forum.fxservice.com/showthread.php?t=5770)

Sir
09-11-2010, 07:48
Если можно,
прикрутите пожалуйста к комплексному советнику простенькую функцию что-то типо мартигейла, только чтоб увеличивала не в геометрической прогрессии а прибавляло по одному 0,1+0,1 потом 0,2+0,1 и тд при убытках.
Или как в советнике летучая мышь

Sir
09-11-2010, 08:23
Да, кстати
В советнике SimpleMACross Вы сделали открытие по бару на котором произошло событие.
И я думаю это правильно, так как использую стоп-лоссы и тралы.
Иначе сделка может открыться в конце тренда.

Scriptong
10-11-2010, 17:27
Если можно,
прикрутите пожалуйста к комплексному советнику простенькую функцию что-то типо мартигейла, только чтоб увеличивала не в геометрической прогрессии а прибавляло по одному 0,1+0,1 потом 0,2+0,1 и тд при убытках.
Или как в советнике летучая мышь

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

Sir
11-11-2010, 05:01
мартингейл не надо, я написал вроде того. Просто если советник прибыльный что плохого если он минимизирует убытки, прибавил плюс один лот и всё, без всяких прогрессий.

Scriptong
12-11-2010, 09:30
Такой подход к ММ тоже реализован - В ожидании тренда (http://www.fxtrade.ru/mqlabs/28.04.2010-mqlabs-v-ozhidanii-trenda) и недалек от метода Мартингейла, т.к. суть остается прежней: "отыграться" (вспомните: "не за то отец сына бил, что тот играл, а за то, что отыгрывался"). К сожалению, он справедлив только на некотором избранном участке. На большинстве других исторических периодов наблюдается большая просадка.
Объясняется это простым арифметическим подсчетом. Допустим, мы имеем дело с фиксированными стопами и профитами 100/100 пунктов. Тогда:
1) 1-ая сделка 0.1 лот, убыток 100 пп = $100.
2) 2-ая сделка 0.2 лот, убыток 100пп = $200. Всего -$300
3) 3-я сделка 0.3 лот, убыток 100п = $300. Всего -$600
4) 4-ая сделка 0.4 лот, прибыль 100пп = $400. Всего -$200.

Из приведенной последовательности видно, что получение трех и более убыточных сделок подряд приводит к общему убытку. Необходимо, чтобы последовательность убытков не выходила за пределы двух сделок (3-я уже должна быть прибыльная). На практике не выходит каких-либо четких последовательностей вроде 2 убытка, 1 прибыль. Все сложнее: то 10 прибылей подряд, то 15 убытков подряд. Я, конечно, утрирую, но суть от этого не меняется.
Именно по этой причине преобразование большинства систем, работающих фиксированным объемом, в прогрессивные изменяет их до неузнаваемости.

Sir
16-11-2010, 08:06
так то всё правильно Вы говорите.
функция в советнике "В ожидании тренда" интересная но я вней не разобрался как её перетащить, зато разобрался в летучей мыше, смог реализовать.
Прикольно вышло. ))

Pifagor
07-12-2010, 15:13
Данное творение оживленно тестируют и обсуждают здесь:
http://forexsystems.ru/sovetniki/61063-kompleksnyi-sovetnik-na-indikatorah-mt4.html

s65999
12-12-2010, 23:13
Здравствуйте. Подскажите пожалуйста при запуске экспа из первого поста, выдает ошибку 130... Что делать? =) за ранее спс...

Scriptong
13-12-2010, 13:30
Здравствуйте. Подскажите пожалуйста при запуске экспа из первого поста, выдает ошибку 130... Что делать? =) за ранее спс...

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

Scriptong
14-12-2010, 22:32
Спасибо. Но все оказалось гораздо проще...Всего лишь надо установить эту версию...

Эта версия была создана не мною и не нужна для использования в торговле с Admiral Markets. Другие брокеры здесь не обсуждаются. Пожалуйста, удалите файл.

Дмитрий25
19-01-2011, 12:14
день добрый всем, я здесь человек новый,поэтому заранее прошу прощение,хочу задать вопрос вам Scriptong,скачал и кое как вроде установил ваш комплексный советник,а он что то не тестируется или я что то не то делаю изломал себе всю голову?????????помогите!?!?!

Scriptong
19-01-2011, 20:51
день добрый всем, я здесь человек новый,поэтому заранее прошу прощение,хочу задать вопрос вам Scriptong,скачал и кое как вроде установил ваш комплексный советник,а он что то не тестируется или я что то не то делаю изломал себе всю голову?????????помогите!?!?!

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

Дмитрий25
20-01-2011, 20:43
Извиняюсь, с установкой разобрался,тестирую, на тесте в минус,USD/JPY H1. что делать?:confused:

Scriptong
20-01-2011, 20:54
Комплексный советник так назван не случайно. Он объединяет более 20 индикаторов. 20 индикаторов - это огромное число возможных стратегий. Если еще добавить тот факт, что у каждого индикатора имеется хотя бы один настроечный параметр (зачастую два и более), то число возможных комбинаций стремится к бесконечности.
Вы, видимо, опробовали какую-то одну комбинацию индикаторов с одним набором настроечных параметров на одной валютной паре и на одном тайфмрейме. Почему же именно такой набор должен оказаться прибыльным?

Дмитрий25
23-01-2011, 14:03
какие же настройки наиболее оптимальны?

Scriptong
24-01-2011, 14:28
какие же настройки наиболее оптимальны?

Такая постановка вопроса звучит также как: "где взять станок для печати денег?" На рынке Форекс нет какой-либо универсальной стратегии, подходящей всем и приносящей прибыль в любой момент времени. Для того трейдер и нужен, чтобы принимать решение об используемой стратегии. Машина за него это не сделает.

Касательно комплексного советника могу только посоветовать еще раз вдумчиво прочитать обе статьи. Примеры успешных стратегий с настройками там приведены.

Dyadya_SEM
25-02-2011, 09:58
zdrastujte,Scriptong.est zamecanij po Complex expert:ne otkryvaet odnonapravlennye pozicii posle vyhoda po TP ili SL

Scriptong
25-02-2011, 10:14
Опишите ситуацию подробнее, с примерами (приведите statment или рисунок).

Dyadya_SEM
25-02-2011, 11:25
uslovij podaci signala Cross MA :

if (LastBar != Time[0]) // Один раз за один бар
{
if (FastMA[1] > FastMA[2]&&FastMA[1] >SlowMA[1])
GlobalVariableSet(Signal, 1); // Buy
else
if (FastMA[1] < FastMA[2]&&FastMA[1] <SlowMA[1])
GlobalVariableSet(Signal, -1); // Sell
else
GlobalVariableSet(Signal, 0); // Нет сигнала
GlobalVariableSet(STime, Time[0]); // Время последнего обновления
LastBar = Time[0];
}

Scriptong
25-02-2011, 16:43
Вы имеете в виду, что после закрытия Buy по Sl или TP не открывается новый Buy? Если да, то это нормально, т.к. советник ждет следующего пересечения средних. Иначе какой смысл установки стопа и профита?

Dyadya_SEM
25-02-2011, 16:53
spasibo.raz'jsnili.a kakim obrazom mozno podpravit uslovie ozidanij peresecenij krivyh,ctob signal davalsj v sootvetstvii odnogo iz uslovij IF ili ELSE?

Dyadya_SEM
25-02-2011, 16:58
interesuet torgovlj vnutri konverta Bollingera,s dop.signalami ot MA(kak trend opredelitelj).vhod i vyhod osusestvljetsj po pereseceniu linij otklonenij po bollingeru,s podstrahovkoj napravlennosti bystroj MA

Scriptong
25-02-2011, 18:07
interesuet torgovlj vnutri konverta Bollingera,s dop.signalami ot MA(kak trend opredelitelj).vhod i vyhod osusestvljetsj po pereseceniu linij otklonenij po bollingeru,s podstrahovkoj napravlennosti bystroj MA

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

Dyadya_SEM
26-02-2011, 23:27
mozet li eto napravlenie polucit putevku v zizn s Vasej pomos'u?byl by premnogo blagodaren

Scriptong
27-02-2011, 19:03
mozet li eto napravlenie polucit putevku v zizn s Vasej pomos'u?byl by premnogo blagodaren

Четко опишите торговые условия и, возможно, я напишу эксперт по вашему ТЗ. Пример оформления ТЗ - здесь (http://forum.fxservice.com/showpost.php?p=30960&postcount=1)

tankist
27-02-2011, 23:16
Четко опишите торговые условия и, возможно, я напишу эксперт по вашему ТЗ. Пример оформления ТЗ - здесь (http://forum.fxservice.com/showpost.php?p=30960&postcount=1)
Доброго времени суток. Подскажите, а такое возможно реадизовать в Вашем комплексном советнике?
http://seo.eliteforex.ru/trading-systems/torgovye-sistemy/sbornik-torgovyh-sistem-i-strategij/8657-ts-dlja-skalperov-srednie-i-macd.html

Scriptong
01-03-2011, 15:51
Нет нельзя, т.к. в комплексном есть лишь инструмент пересечения двух средних, а не трех. Было бы две средних, тогда можно было бы.

tankist
01-03-2011, 20:47
Нет нельзя, т.к. в комплексном есть лишь инструмент пересечения двух средних, а не трех. Было бы две средних, тогда можно было бы.

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

Scriptong
02-03-2011, 11:50
Простите, а Ва могли-бы помочь написать советник по этой торговой стратегии? На мой взгляд она очень простая.

Да, стратегия действительно простая. Именно для таких случаев я полностью расписал действия при создании советника по шаблону здесь (http://www.forextrade.ru/mqlabs/27.02.2011-mqlabs-tri-belyh-soldata-i-tri-chernyh-vorony).

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

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

tankist
02-03-2011, 23:27
Если под словом "помочь" вы имеете в виду "напишите" (только укажите здесь данный факт), то вам нужно будет немного подождать, т.к. стратегия не является чем-то неординарным и не может претендовать на внеочередную реализацию.

Больше склоняюсь к "напишите" :)
Готов ждать столько, сколько необходимо, заранее Вам благодарен.

Scriptong
09-03-2011, 17:40
Советник для скальперов, о котором говорилось выше.
Сразу предупрежу - ничего хорошего от стратегии не ждите. Слишком малые профит и стоп, да еще фиксированные. Некоторое время будете наслаждаться прибыльными сделками вообще без убыточных, а потом попадете в жесточайший флэт, где вся прибыль будет потеряна. В лучшем случае заработаете 200-300 пунктов за пару лет при просадке в 1000 и более пунктов.

tankist
09-03-2011, 20:27
Советник для скальперов, о котором говорилось выше.
Сразу предупрежу - ничего хорошего от стратегии не ждите. Слишком малые профит и стоп, да еще фиксированные. Некоторое время будете наслаждаться прибыльными сделками вообще без убыточных, а потом попадете в жесточайший флэт, где вся прибыль будет потеряна. В лучшем случае заработаете 200-300 пунктов за пару лет при просадке в 1000 и более пунктов.
Огромное Вам спасибо! Буду разбираться.

mitanq
20-03-2011, 19:59
Статья опубликована: Летучая мышь. Часть 2. (http://fxtrade.ru/mqlabs/02.09.2010-mqlabs-letuchaya-mysh-chast-2)

Добрый вечер.

Уважаемый Scriptong. Тестил летучую мышь 2 в визуальном режиме. И заметил, что если был бы Тейк Профит прибыль с каждой сделки была на много больше. Возможно ли как то добавить в советника TP?

Scriptong
21-03-2011, 09:23
Добрый вечер.

Уважаемый Scriptong. Тестил летучую мышь 2 в визуальном режиме. И заметил, что если был бы Тейк Профит прибыль с каждой сделки была на много больше. Возможно ли как то добавить в советника TP?

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

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

margin
22-03-2011, 16:05
Советник для скальперов, о котором говорилось выше.
Сразу предупрежу - ничего хорошего от стратегии не ждите. Слишком малые профит и стоп, да еще фиксированные. Некоторое время будете наслаждаться прибыльными сделками вообще без убыточных, а потом попадете в жесточайший флэт, где вся прибыль будет потеряна. В лучшем случае заработаете 200-300 пунктов за пару лет при просадке в 1000 и более пунктов.

Абсолютно согласна с Вами, уважаемый Scriptong.
Метод, по которому вас просили написать советник для Скальперов - метод Пуриа. Недавно открыла его для себя и с удивлением обнаружила, что у него есть явное сходство с той системой, которую хочу положить на советник для удобства тестирования (потому как не совсем еще уверена в выбраных параметрах.)

В системе, которую хочу положить на советник и довести до ума, есть общее с методом Пуриа (МА и MACD) и то, что уже имеется в вашем Комплексном советнике.

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

У меня просьба к Вам, помогите написать советник, подкорректировать, т.с. уже имеющиеся у Вас наработки...

Система следующая.

1) Индикаторы:
MA1 : Период - 13 (Exponential, применить к Close);
MA2 : Период - 50 (Exponential, применить к Close).
MACD (Быстрый EMA 20, Медленный EMA 30, MACD SMA 1).

/Параметры еще нужно будет уточнять/

2) Условия торговли:
Вход в Buy по основному тайм-фрейму (допустим Н1) после пересечения мувингов (по цене открытия следующего бара) при соответствующем подтверждении от MACD (один бар закрылся выше Нулевого уровня).
А выход - по обратному сигналу в Sell, но уже на меньшем тайм-фрейме (допустим М30).

При продаже, соотвественно все наоборот.

3) Стоп-лосс и тейк-профит выставлять не нужно. Позиция закрывается, как я уже сказала, по обратному сигналу, полученному с мЕньшего TF.

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

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

Уважаемый Scriptong! В вашем Комплексном советнике реализована, я уверена, отличная идея с двойным Трейлингом. Я трейлингом, к сожалению не пользуюсь (причина самой не известна, не знаю, может просто не привыкла). НО!!! Если здесь, в данной системе он будет уместен (ваш двойной трал), то скажите об этом. Плиз, буду признательна за Ваш коммент по этому поводу. Да и вообще, - по любому, касательно того, что я здесь изложила.

С уважением и большим нетерпением жду вашего ответа

Scriptong
23-03-2011, 09:13
Описанную стратегию иначе, как "масло масленое" не назовешь: пересечение средних фильтруется пересечением средних (закрытие гистограммы MACD относительно нулевого уровня - пересечение средних).

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

margin
23-03-2011, 10:12
Описанную стратегию иначе, как "масло масленое" не назовешь: пересечение средних фильтруется пересечением средних (закрытие гистограммы MACD относительно нулевого уровня - пересечение средних).

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

хм... А чем тогда вам приглянулся метод Пуриа? Вы написали по нему "Советник для скальперов" чуть выше, хотя по данной системе в нете тьма-тьмущая советников уже написано.

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

ну да ладно. Спасибо за комментарий ;)

Scriptong
24-03-2011, 09:42
хм... А чем тогда вам приглянулся метод Пуриа? Вы написали по нему "Советник для скальперов" чуть выше, хотя по данной системе в нете тьма-тьмущая советников уже написано.

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

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

margin
24-03-2011, 16:31
Уважаемый Scriptong!
Вы только не подумайте, что я в обиде, пожалуйста! Ваше благое дело достойно уважения и восхищения. Так помогать бескорыстно всем и каждому, не оставлять ни один комментарий и просьбу без внимания...

Просто я, скорее всего, не достаточо правильно описала свой "велосипед".
Меня интересовал советник, который бы мог:

1) открывать позицию по старшему фрейму, а закрывать - по сигналам, полученым с младшего фрейма. Ну и возможность задавать разные параметры одного и того же индикатора (МАКД) для разных фреймов.

2) закрывать позицию не по SL и TP, а по обратному сигналу. Этот вариант закрытия, для меня, более приемлимый, нежели фиксированное количество пунктов. (Ну не нашла я в нете советник Пуриа с такими параметрами для выхода. Везде нужно ставить SL и TP).

Кстати, может у кого-то есть советник по методу Пуриа без SL и TP? А еще лучше без того и другого, но с "безубытком".... )))) Ладно уже с этими фреймами - это так... просто задумка была :rolleyes:

margin
24-03-2011, 17:05
ЗЫ
И, ксати: две МА, три МА - какая разница. Поставь на две из трех одинаковые параметры - вот тебе и две МА ))) Если б дело было за количеством МА в советнике, я бы стала разве вас дергать...:D

Scriptong
27-03-2011, 20:34
1) открывать позицию по старшему фрейму, а закрывать - по сигналам, полученым с младшего фрейма. Ну и возможность задавать разные параметры одного и того же индикатора (МАКД) для разных фреймов.


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



2) закрывать позицию не по SL и TP, а по обратному сигналу. Этот вариант закрытия, для меня, более приемлимый, нежели фиксированное количество пунктов. (Ну не нашла я в нете советник Пуриа с такими параметрами для выхода. Везде нужно ставить SL и TP).


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

margin
30-03-2011, 06:06
ОК. Спасибо!!!!!!!!!!!!! :)

maxim1988
07-05-2011, 11:09
Здравствуйте уважаемыйScriptong. Огромное Спасибо вам за ваш комплексный советник!
У меня к вам огромная просьба вставить некоторые индикаторы в него, сам замучался ничего не получается. Индикаторы прикладываю... Заранее огромное человеческое Спасибо!

Scriptong
07-05-2011, 20:50
У меня к вам огромная просьба вставить некоторые индикаторы в него, сам замучался ничего не получается. Индикаторы прикладываю...

FXFisher_SEMA. Можно будет сделать.
Nik PSAR 2B. Слишком "тяжелый" индикатор, будет серьезно тормозить работу советника.
63_FX_Fish. Посмотрите реализации подобных индикаторов в Комплексном советнике выше в этой же ветке. Скорее всего, это даже не подобный, а именно такой же индикатор.

maxim1988
07-05-2011, 23:23
FXFisher_SEMA. Можно будет сделать.
Nik PSAR 2B. Слишком "тяжелый" индикатор, будет серьезно тормозить работу советника.
63_FX_Fish. Посмотрите реализации подобных индикаторов в Комплексном советнике выше в этой же ветке. Скорее всего, это даже не подобный, а именно такой же индикатор.
Да, но проблема в том, что эта система состоит именно из этих трех индикаторов. Спасибо.

maxim1988
09-05-2011, 23:38
С Днем ПОбеды!!!
Здравствуйте Scriptong!!!
Помогите пожалуйста немного поправить код советника. Советник по индикатору rsiMA/через функцию icustum.
Нужно что-бы сделки открывались и закрывались при пересечению сверху вниз и снизу вверх соотвественно. Заранее спасибо.:)

Scriptong
10-05-2011, 16:01
Нужно что-бы сделки открывались и закрывались при пересечению сверху вниз и снизу вверх соотвественно.

Пересечение чего с чем?
Я так понимаю, что вас интересует пересечение красной и синей индикаторных линий. То, что осталось в коде не закоментированным, указывает только на пересечение красной линией уровня 50. Правильный же вариант тот, который закоментирован:

double maAdx02=iCustom(Symbol(),0,"rsiMA",perRSI,typeMA,perMA,0,2); // Синяя линия на 2-ом баре
double maAdx01=iCustom(Symbol(),0,"rsiMA",perRSI,typeMA,perMA,0,1); // Синяя линия на 1-ом баре
double mArsi12=iCustom(Symbol(),0,"rsiMA",perRSI,typeMA,perMA,1,2); // Красная линия на 2-ом баре
double mArsi11=iCustom(Symbol(),0,"rsiMA",perRSI,typeMA,perMA,1,1); // Красная линия на 1-ом баре

if (mArsi11 < maAdx01 && mArsi12 > maAdx02)
{
// красная линия пересекла синюю сверху вниз
}
if (mArsi11 > maAdx01 && mArsi12 < maAdx02)
{
// красная линия пересекла синюю сверху вниз
}


И не забывайте, что Buy открывается по Ask, а Sell по Bid. В приведенном вами коде обе позиции открываются по цене Ask.

maxim1988
10-05-2011, 18:12
Что то я опять не правильно сделал, не так открываются сделки и только SELL. Посмотрите плиз

#property copyright "Grimax"
#property link "grmax-88@yandex.ru"

extern double minLot=0.1;
extern int tp=500;
extern int sl=500;
extern int perRSI = 14; ///
extern int typeMA=0;
extern int perMA = 34;


double adx[],
ma[];

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----


double maAdx02=iCustom(Symbol(),0,"rsiMA",perMA,typeMA,perRSI,0,2); // Синяя линия на 2-ом баре
double maAdx01=iCustom(Symbol(),0,"rsiMA",perMA,typeMA,perRSI,0,1); // Синяя линия на 1-ом баре
double mArsi12=iCustom(Symbol(),0,"rsiMA",perMA,typeMA,perRSI,1,2); // Красная линия на 2-ом баре
double mArsi11=iCustom(Symbol(),0,"rsiMA",perMA,typeMA,perRSI,1,1); // Красная линия на 1-ом баре

if (mArsi11 < maAdx01 && mArsi12 > maAdx02)
{
// красная линия пересекла синюю сверху вниз
}
if (mArsi11 > maAdx01 && mArsi12 < maAdx02)
{
// красная линия пересекла синюю сверху вниз
}

double price=Ask;

//if(mAadx12<maAdx02 && mAadx11>maAdx01){

if(mArsi12>50 && mArsi11<50){

if(OrdersTotal()==0){
OrderSend(Symbol(), OP_SELL, minLot, price, 500, price+sl*Point, price-tp*Point);
}}}
//if(mAadx12>maAdx02 && mAadx11<maAdx01){



if(OrdersTotal()==0){
OrderSend(Symbol(), OP_BUY, minLot, price, 500, price-sl*Point, price+tp*Point);
}


//----
return(0);

//+------------------------------------------------------------------+

Scriptong
12-05-2011, 15:54
Что то я опять не правильно сделал, не так открываются сделки и только SELL. Посмотрите плиз


Вы просто вставили приведенный мною участок кода в исходник и все. Он не является самодостаточным и требует доработки.

msm
15-05-2011, 11:29
Добрый день. Хочу обратиться к Вам с просьбой реализовать советника по стратегии Реванш. Моих знаний программирования не хватает, чтобы воплотить его посредством предложенной вами методики. (не знаю как обращаться к внешним индикаторам и как получать значения экстремумов зигзага) По отдельности в ваших статьях встречал нужные куски кода, но собрать все воедино у меня не выходит.
Вот тех.задание:
График 1 минута. На него наносим ЕМА 495 (close), ЕМА 33 (close), зигзаг (5,5,3) и индикатор Juice (период 7, уровень 0, 0003).
Время работы - желательно задать 3 временных диапазона: например с 8 до 11, с 16 до 20 и с 22 до 6 утра.
Внешние переменные: времена работы, стоп лосс (12), take profit (10), tralling stop (10), level (из индикатора juice), процент риска от депозита на лот открытия (по умолчанию =2%), коэффициент умножения лота при закрытии прошлого ордера по стоп лосс (по умолчанию 2)

Открытие позиций. Если время позволяет, цена находиться выше МА495, выше МА33 (причем ма33 тоже должна быть выше ма 495), индикатор джус больше значения level (в данном случае больше 0,0003) - выставляем отложенный ордер покупки на прошлый максимум зигзага плюс 2 пункта плюс спред (Ask-Bid). Тут же модифицируем ордер, задавая стоплос, take profit (если тэйк профит=0, значит ставим tralling stop 15 пунктов).


Если время позволяет, цена ниже ма495,ниже ма33, (и МА33 ниже ма945), индикатор джус больше значения level - выставляем отложенный ордер продажи на уровень последнего минимума зигзага минус 2 пункта. Тут же модифицируем ордер, задавая стоплос, take profit (если тэйк профит=0, значит ставим tralling stop 15 пунктов).


Закрытие противоположных не сработавших отложенных ордеров при пересечении ценой МА 495 (если она стала выше – закрываем отложенники на sell. Если цена опустилась ниже ма495 – закрываем отложенные несработавшие ордера by)

Индикатор джус – это обычный Osma. Он хорошо показывает колебания цены. На минутках отлично фильтрует незначительные движения, которые нам неинтересны.

В принципе с большего все. Позже можно будет попробовать добавить уровни сопротивления-поддержки, но я пока не знаю как их четко формализовать для автоматической торговли.
Также еще можно будет в дальнейшем с помощью индикатора xMeterMTF.mq4 отслеживать наиболее волатильные валюты и пары, чтобы включать необходимый график. А пока просто можно бросить советник на все основные графики пар, подобрать настройки и оперировать данными по подвижности из Juice.

Заранее благодарен. Если будут вопросы или понадобятся дополнительные разъяснения – пишите. С готовностью отреагирую.
C уважением, Максим.

Описание стратегии автором: http://itmforex.com/torgovie_sistemi/torgovaya_sistema_revansh.html
индикатор juice - http://www.strategy4forex.com/files/Juice.mq4
индикатор xMeterMTF - http://ruforum.mt5.com/attachment.php?attachmentid=42298&d=1293715863

Scriptong
15-05-2011, 21:48
коэффициент умножения лота при закрытии прошлого ордера по стоп лосс (по умолчанию 2)

Такой подход я реализовывать не буду - Мартингейл (http://forum.fxservice.com/showthread.php?t=6623&highlight=%D0%9C%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%B3%D0%B5%D0%B9%D0%BB)



Тут же модифицируем ордер, задавая стоплос, take profit (если тэйк профит=0, значит ставим tralling stop 15 пунктов).


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



Индикатор джус – это обычный Osma.


Совершенно другое. Juice - разность стандартного отклонения и заданного уровня, а OsMA - разность главной и сигнальной линий MACD.



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


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



Также еще можно будет в дальнейшем с помощью индикатора xMeterMTF.mq4 отслеживать наиболее волатильные валюты и пары, чтобы включать необходимый график.


Что имеется в виду под словом "отслеживать"? Вы сами можете определить наиболее волатильные пары (фунтовые и йеновые кроссы) и работать только на них. А включить или выключить необходимый график советник не может. Такой функционал доступен только в МТ5.

msm
16-05-2011, 17:02
Спасибо за быстрый ответ. Постараюсь так же ответить по пунктам.
1. Я сам всегда был противником мартингейла. Просто по этой стратегии торгую руками около полутора лет, и соотношение прибыльных/убыточных сделок где-то 7 к одному. поэтому и хотел последующей сделкой компенсировать полученный убыток. Единожды, без прогрессирующего увеличения. Вручную так и поступал. Но я уважаю ваши взгляды и настаивать ни в коей мере не буду.
2.Вы правы, я тут сам себя и вас ввел в заблуждение, спутав отложенное и рыночное открытие ордеров. Естественно, задаем стоп, профит (или трал) в самом отложеннике.
3-4. И здесь я с вами соглашусь, слегка неправильно сформулировал. Конечно же имелось ввиду некое подобие и схожесть в определении, а не полная идентичность индикаторов. Смысл в том, что когда я стал использовать джус, то сразу отпала необходимость переключаться и отслеживать флет/тренд на разных ТФ. И строить уровни по дневным или часовым экстремумам тоже. Они больше способствуют наглядности, но для автоматизации малопригодны.
5. С помощью xMeterMTF.mq4 я ищу волатильные пары, но в простом советнике реализовывать мультивалютность и включать-выключать разные пары... это не принципиально. Да и не слишком необходимо.
Для меня самым важным являлось донести до вас саму суть, алгоритм. А остальное это так ,просто украшательство и облегчение работы. Ведь трудиться на ТФ 1 минута получается далеко не всегда. Да и "психология" подводить начинает :)
Еще раз позвольте выразить вам благодарность и надежду на вашу помощь.