EA N7S_AO_772012 - страница 22

 
capellini писал(а) >>

Вдогонку хочу спросить...

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

С чем это может быть связано?

Значит так! опять двадцать пять.

Еще раз в двадцать шестой повторюсь.
Нет одинаковых инструментов по движению цены, есть похожие.
Тестированием мы облегчаем себе труд и не гадаем-колдуем над графиками, где входить и когда.
Поэтому, если результатов нет, они плохие или их мало, надо изменять диапазоны и периоды оптимизации, еще можно поиграть с уровнем SL и трала. Я по некоторым парам уменьшаю период до трех и даже двух недель, для кросов по йене пробовал увеличивать SL. В общем импирическим путем ищу лучшие значения из которых получаются хорошие результаты при оптимизации. В итоге относительно верными считаю параметры, которые при оптимизации с генетикой дают на 10тыщ прогонов 6-8тыщ прибыльных комбинаций. Тогда по закону больших чисел, вероятность прибыли в два раза превышает вероятность проигрыша, а это значит, что оптимизация лишь формальность и при значительном количестве недель профит будет превышать убыток не меньше чем в два раза. Реально больше.
Так что делитесь, кто как тестирует и у кого какие результаты. В одинаре это не просто.
У меня сейчас баланс за неделю +$690 а эквити.... эквити чуть больше +$750, эх днем было под $1000 . Что-то почти все позиции позакрывались.

 

Насчет ошибки. Она здесь в функции startM1() . Из-за нее же было различие в первых сделках на тестере и демо.

//+------------------------------------------------------------------+
void startM1() {ticket = -1;RefreshRates();
if (total < HM_ALL) { BuSll (0,1,772012000); cmmnt();
if( !(DayOfWeek( ) == 1 && Hour( ) <2) && !(DayOfWeek( ) == 5 && Hour( ) >=18))
{if (Trd_Up_X && VSR() > 0 && bu<HM_Up_X&&Flq) {
if (MOS( 0, lots, sl, tp, WindowExpertName(), mn)==1) {Flq=false;}} // заменить на >=

if (Trd_Dn_Y && VSR() < 0 && sll<HM_Dn_Y&&Flq) {
if (MOS( 1, lots, sl, tp, WindowExpertName(), mn)==1) {Flq=false;}} // заменить на >=
}}}
//+------------------------------------------------------------------+

Ошибка не критична, из-за нее не отрабатывался запрет на открытие на одном баре еще одной сделки.

Вновых версиях я ее исправлю, но пока можно и ручками.

 

SHooter777ру:  Советник понравился. После сегодняшнего слива демки оптимизацию делаю под 200$ (MiniForex). В принципе почти не отличается от 2000$. в оптимизационных сетах стоплоссы ставлю 50 с шагом 10, но все равно лучшие профиты со стоплоссами от 500 получаются. Уже в конечных сетах подбираю приемлемые в пределах 50-200 вручную. Влияет ли шаг и стоп в сетах на торговлю? (По наблюдениям не заметил). Еще вопрос: Можно ли оптимизировать под MicroForex (мин. лот 0,01)? Торгую на Pro Finance Group Inc платформа PFG FX Trader 4 (поддерживает MQL4). К сожалению на МикроФорексе нет демки.

А вообще кто-нибудь пробовал советника в реале? Сильно от демки отличается?


На картинке торговля в демке на этой неделе с сетами SHooter777ра. Имея +800 торгового баланса, решил запустить советника еще по 3 парам и ... жадность фраера сгубила - свободных средств стало меньше 100 и естественно перестали открыватся встречные позиции и счет почти слился 


Удачной торговли всем!

Файлы:
 

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

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

 
.
Файлы:
 

Что-то последняя версия не работает.

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

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

 

Прошу прощния! Я пол часа писал инструкию, а этот глючный форум не только буквы проглатвает но и весь текст у меня пропал.

Буду писать тепер в ворде и вставлять сюда. Подождите чутк

 

Новая версия L9 содержит в себе ряд несущественных, но думаю, нужных дополнений и изменений.

Первое: добавлена функция FLG() – она отвечает за два момента

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

bool FLG (int cs )

{ int AE = AccountEquity( ) ;

switch(cs)

{case 0: if((DayOfWeek( ) == 5 && Hour( ) >=22) || (TrBlnc && (AE > UBlnc)))

return (true);else return (false);

case 1: string dttm = StringConcatenate (Year(),".",Month(),".",Day());

datetime smtm=StrToTime(dttm);

bool Gp;

int shft = iBarShift (NULL,0,smtm);

double iOpn = iOpen (NULL,0,shft);double iCls = iClose (NULL,0,shft+1);

double dOC = MathAbs ((iOpn - iCls)/(Point*10)) ;

if (dOC>20) Gp = true ; Print (Gp);

string var1=TimeToStr(smtm,TIME_DATE|TIME_SECONDS);

if((TrBlnc && ((AE > UBlnc)||(AE < DBlnc))) || (!Flq)

|| ( (DayOfWeek( ) == 1 && Hour( ) <2) || (DayOfWeek( ) == 5 && Hour( ) >=18))

|| ( (DayOfWeek( ) == 1 && Hour( ) <14) && Gp))

return (false);else return (true);

}

}

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

а) FLG( 0 ) – принудительное закрытие открытых позиций при определенных условиях.

б) FLG( 1 ) – запрет открытия позиций при определенных условиях.

Сюда можно вставлять любые дополнительные условия и не «загромождать» функцию void startM1() и другие места.

Я выбрал для принудительного закрытия конец недели if((DayOfWeek( ) == 5 && Hour( ) >=22) и увеличение Эквити до некоторого размера

а запрет открытия при гепе более определенного значения if (dOC>20) Gp = true ; и если эквити увеличится до if((TrBlnc && ((AE > UBlnc)

или уменьшится до ||(AE < DBlnc)))

 

Поэтому если вы тестируете или оптимизируете следите за тем, что бы Эквити находился в диапазоне заданном в параметрах

bool TrBlnc = true; int StrtBlnc= 3000; int DBlnc= 1500; int UBlnc= 4000;

или добавьте в функцию int init() строчку if ( IsOptimization( ) ) TrBlnc = false;//if ( IsTesting() ) TrBlnc = false;

 

Следующее скорее не изменение, а дополнение более существенное и относится к Delta_G12 теперь это не дельта AO а функция G12(),

в которой в зависимости от ее параметра extern int Indctr; используется либо прежний АО если Indctr = 1,

либо если Indctr = 2 любая другая функция либо индикатор ( я использую свой, TSM прилагается), если int Indctr = 0 то сигналы суммируются от обоих индикаторов &&.

//+ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ+

double G12() {switch(Indctr)

{case 0:

iCusAO_1 = iAO(NULL, 240, 1); iCusAO_2 = iAO(NULL, 240, 2);

iCusTSM_1 = iCusTSM (24, 1); iCusTSM_2 = iCusTSM (24, 2);

Dlt_AO12 = iCusAO_1 -iCusAO_2;Dlt_TSM12 = iCusTSM_1-iCusTSM_2;

if ( Dlt_AO12>=0 && Dlt_TSM12 <=0) return (0);

if ( Dlt_AO12<=0 && Dlt_TSM12 >=0) return (0);

return(Dlt_AO12);

case 1:

iCusAO_1 = iAO(NULL, 240, 1); iCusAO_2 = iAO(NULL, 240, 2);

Dlt_AO12 = iCusAO_1 -iCusAO_2; return(Dlt_AO12);

case 2:

iCusTSM_1 = iCusTSM (24, 1); iCusTSM_2 = iCusTSM (24, 2);

Dlt_AO12 = iCusTSM_1-iCusTSM_2; return(Dlt_AO12);}}

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

double iCusTSM (int pr, int shft)

{ return (iCustom(NULL, 240, "iCus_N7S_TSM_forExp",pr,1,shft)); }

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