Советники: DVD Level - страница 261

 

Первый проход готов:

Есть один нюанс, и причём самый важный.

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

Вот если бы в советник добавить эту проверку, то на истории было бы вообще замечательно. Но, история не ведёт такой статистики ... :(((

 
sezon:

Первый проход готов:

Есть один нюанс, и причём самый важный.

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

Вот если бы в советник добавить эту проверку, то на истории было бы вообще замечательно. Но, история не ведёт такой статистики ... :(((


Значит всё же 3. Как Вы думаете это Денис не дооптимизировал параметр или изменился рынок, если последнее, то этим нужно будет заниматься и в будущем. И ещё: 2 и 24, что это за параметры и как параметры не выведенные во входные, оптимизировать?
 
Grigras:
sezon:

Первый проход готов:

Есть один нюанс, и причём самый важный.

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

Вот если бы в советник добавить эту проверку, то на истории было бы вообще замечательно. Но, история не ведёт такой статистики ... :(((


Значит всё же 3. Как Вы думаете это Денис не дооптимизировал параметр или изменился рынок, если последнее, то этим нужно будет заниматься и в будущем. И ещё: 2 и 24, что это за параметры и как параметры не выведенные во входные, оптимизировать?

Можно сказать, что изменился сам рынок. Ведь изменение с 2 на 3 произошло аж за 1,5 года. Срок - не маленький, так что оптимизацию можно проводить два раза в год через каждые 6 месяцев.

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

Следующий этап - совместить оба диапазона.

Итог - проверка времени существования отложенника, а то сейчас время составляет 20 минут.

И после этого можно ещё полгода отдыхать.

Оптимизирую так:

1. Завожу переменную:

extern int Optim1           = 2;
extern int Optim2           = 24;

2. Там, где буду оптить параметр, выставляю эти переменные:

 bool calcTrend()
  {
      RAVI0_2_24_H1      = Get_RAVI(PERIOD_H1,Optim1,Optim2, MODE_SMA,PRICE_OPEN,0);
      RAVI0_2_24_H4_0    = Get_RAVI(PERIOD_H4,Optim1,Optim2, MODE_SMA,PRICE_OPEN,0);
      RAVI0_2_24_H4_1    = Get_RAVI(PERIOD_H4,Optim1,Optim2, MODE_SMA,PRICE_OPEN,1);
      RAVI0_2_24_D1      = Get_RAVI(PERIOD_D1,Optim1,Optim2, MODE_SMA,PRICE_OPEN,0);
      RAVI0_2_24_D1_1    = Get_RAVI(PERIOD_D1,Optim1,Optim2, MODE_SMA,PRICE_OPEN,1);
      RAVI0_2_24_D1_2    = Get_RAVI(PERIOD_D1,Optim1,Optim2, MODE_SMA,PRICE_OPEN,2);
      RAVI0_2_24_D1_3    = Get_RAVI(PERIOD_D1,Optim1,Optim2, MODE_SMA,PRICE_OPEN,3);
  }

3. Загружаю в тестер и в параметрах указываю:


4. После этого ставлю галочку на основной вкладке тестера под периодом "Оптимизация", запускаю и иду спать :) т.к. процедура - не быстрая. Ещё надо выбрать модель "Все тики" и период тестирования.

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

6. Точно так же проводим оптимизацию по второму параметру. Сразу по двум параметрам - очень долго.

7. Завершаем оптимизацию выбором самых оптимальных параметров, и их прогон на истории.

===========

По первому параметру у меня такие цифры: 2, 3, 4, 5, 6, 7. Наиболее подходящие 2 и 3. Но, т.к. на 2 просадка больше, то выбираем 3. Оптимизацию второго параметра можно проводить с цифрой 3 на первом параметре, что я сейчас и делаю.

Удачи :))

 

У меня во Входных парамерах нет Optim1 Optim2 ???

 
Strike:

У меня во Входных парамерах нет Optim1 Optim2 ???

Ну так добавь
Смотри п. 1
 
Grigras:
sezon:

Первый проход готов:

Есть один нюанс, и причём самый важный.

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

Вот если бы в советник добавить эту проверку, то на истории было бы вообще замечательно. Но, история не ведёт такой статистики ... :(((


Значит всё же 3. Как Вы думаете это Денис не дооптимизировал параметр или изменился рынок, если последнее, то этим нужно будет заниматься и в будущем. И ещё: 2 и 24, что это за параметры и как параметры не выведенные во входные, оптимизировать?

Рынок изменился, естественно - все течет, все меняется
 
sezon:
Strike:

У меня во Входных парамерах нет Optim1 Optim2 ???

Ну так добавь
Смотри п. 1

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

Советник открывет сделки, когда цена подходит к целому центу (1.39 1.40 1.41 ...), при этом с правильной скоростью. Рассмотрим функцию на покупку (функция на продажу зеркальна).

bool CheckEntryConditionBUY()

{ BAL = 0;

if (RAVI0_2_24_H1 < -0.00) BAL = BAL + 10; средня за 2 часа ушла ниже средней за 24 часа - это хорошо

double Level100;

int PointFromLevelGo = 50, PtFrRise = 700;

Level100 = StrToDouble(DoubleToStr(Bid,2)) + PointFromLevelGo*Point; определение ближашего целого цента

if (iHigh(NULL,PERIOD_H1,1) > Level100 + PtFrRise*Point || iHigh(NULL,PERIOD_H1,2) > Level100 + PtFrRise*Point) BAL = BAL + 7; даже если средня не ушла ниже, но цена прошла за 2 часа вниз больше 700 пунктов (в 5-ти значной системе) - это тоже хорошо

if (Bid < Level100 && Close[1] > Level100 && iLow(NULL,PERIOD_H1,0) > Level100 - PointFromLevelGo*Point + 30*Point

&& iLow(NULL,PERIOD_H1,1) > Level100 - PointFromLevelGo*Point + 30*Point

&& iLow(NULL,PERIOD_H1,2) > Level100 - PointFromLevelGo*Point ) BAL = BAL + 45; теперь главное правило - цена подошла к уровню ближе чем 50 пунктов (Bid < Level100) и предыдущая цена закрытия выше 50 пунктов от уровня (Close[1] > Level100 ), т.е. цена идет вниз, при этом последние 3 часа цена не перескала данный уровень (иначе это уже не уровень), то при выполнении этого правила и одного или двух сразу из предыдущих, балов хватит, чтобы открыть сделку. Далее проверяем другие динамические показатели цены, если они не удовлетворительны, то отменяем сделку (путем вычитания 50 балов)

int HiLevel = 600, LoLevel = 250, x, LoLevel2 = 450;

for (x=0;x<=11;x++) {if (iHigh(NULL,PERIOD_M1,x) > Level100 + HiLevel*Point) BAL = BAL - 50;} если цена в ближайшие 11 минут уже прошла 600 пунктов, т.е. слишком сильное движение, то отмена

for (x=0;x<=30;x++) {if (iHigh(NULL,PERIOD_M1,x + 3) - iLow(NULL,PERIOD_M1,x) > 300*Point && iOpen(NULL,PERIOD_M1,x + 3) > iClose(NULL,PERIOD_M1,x)

&& RAVI0_2_24_D1 < -2) BAL = BAL - 50;} если ближайшие 30 минут был рывок в 300 пунктов за 3 минуты, т.е. слишком сильное движение, то отмена

bool IsCrossLowLevel2 = false;

for (x=0;x<=14;x++) {if (iHigh(NULL,PERIOD_H1,x) > Level100 + LoLevel2*Point) IsCrossLowLevel2 = true;}

if (IsCrossLowLevel2 == false) BAL = BAL - 50; если цена за последние 14 часов не поднималась выше 450 пунктов от уровня, т.е. слишком слабое движение, то отмена

if (iHigh(NULL,PERIOD_M30,0) < Level100 + LoLevel*Point && iHigh(NULL,PERIOD_M30,1) < Level100 + LoLevel*Point

&& iHigh(NULL,PERIOD_M30,2) < Level100 + LoLevel*Point

&& iHigh(NULL,PERIOD_M30,3) < Level100 + LoLevel*Point

&& iHigh(NULL,PERIOD_M30,4) < Level100 + LoLevel*Point

&& iHigh(NULL,PERIOD_M30,5) < Level100 + LoLevel*Point

&& iHigh(NULL,PERIOD_M30,6) < Level100 + LoLevel*Point

&& iHigh(NULL,PERIOD_M30,7) < Level100 + LoLevel*Point) BAL = BAL - 50; если цена за последние 3,5 часа не поднималась выше 250 пунктов от уровня, т.е. слишком слабое движение, то отмена

if (BAL >= 50) return(true);

return(false);

}

Открывается отложенный ордер со сроком истечения 20 минут (функция void OpenBuyOrder()) сразу за уровнем с расчитанными стоплоссом и тэйкпрофитом (с закрытием ордера только по ним).

При установке параметра UseTrailingStop=true, если есть открытая убыточная позиция и цена резко (за 3 минуты более 1/2 цента) идет в сторону убытка, ТП выставляется в 1 пункте (по 4-х знач.сис.) от цены открытия. Более осторожный вариант, но менее доходный (за период с 01.01.2009), за то последняя убыточная сделка уходит в 0.
 

Вот как раз я и провожу оптимизацию средней линии, т.к. от неё пляшут все переменные вида RAVI0_2_24_H1

По хорошему, стоит ещё протестить int PointFromLevelGo = 50, PtFrRise = 700;

Причина обращения: