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

 

Теперь немного о флагах, которые не вошли в функцию FLG так как сами являются самостоятельными.

А) Flg - флаг инициализации, нужен для того, чтобы после сбоя или начала работы не сначала, при наличии сигнала входа ( этот сигнал носит длительный характер) не открывать позу, т.к. это может уже быть поздно. Логика следующая, если VSR!=0 т.е. есть сигнал, то установить запрет Flg=false; как только сигнал пропал флаг сбрасывается

if (!Flg){if (VSR () ==0) {Flg=true; return (0);}}

Б) Flq – интересный флаг, запрет открытия второй позиции на одном баре. Я сначала хотел сделать запрет открытия позиций при закрытии предыдущей с убытком на одном баре, но это я реализую, когда допишу свою функцию BuSll, с ней это будет просто. А пока есть такой вариант.

Устанавливается он при открытии позиции

{if (Trd_Up_X && VSR() > 0 && bu <HM_Up_X ) {

if (MOS( 0, lots, sl, tp, WindowExpertName(), mn)>=1) {Flq=false;}}

if (Trd_Dn_Y && VSR() < 0 && sll<HM_Dn_Y ) {

if (MOS( 1, lots, sl, tp, WindowExpertName(), mn)>=1) {Flq=false;}}

Кстати, об исправлении в этой функции я писал раньше

Сбрасывается он каждые 4 часа. Если считаете, что для некоторых пар этого много, то можно добавить в функцию H1() сброс флага на каждый час для всех, кроме некоторых пар if (Symbol()!="GBPJPY" || Symbol()!="USDCHF"){ Flq = true ; }

 
WitoHOH писал(а) >>

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

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

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

Разобрались почему не оптимизировалось?

 
SHOOTER777 писал(а) >>

Разобрались почему не оптимизировалось?

Нет.

Особо времени небыло.

Прошлый раз был такой косяк из-за отсутствия истории.

Сейчас прокачиваю историю.

К утру сообщу.

 
SHOOTER777 писал(а) >>

Разобрались почему не оптимизировалось?

Не хочет оптимизироватся.

На тех-же исторических данных седьмая версия оптимизируется.

А последняя нет.

Везде результат 0

 

Перезалил эксперт. Возможно битая версия. Форум зависал.

И еще обратите внимание на эти строчки в эксперте

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

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

Запрет реализуется в функции bool FLG (int cs )

Файлы:
 

Еще немного про логику советника.

Есть проблемка - частые гепы. При гепах происходит рассинхронизация оптимизированных параметров и условий входов в рынок, т.к. значения индикаторов и цены становятся разорваны. Для восстановления нужно время. Для АО я определил 12 ч. а существенным гепом считаю изенение цены более чем на 20 обычных пунктов (для каких то пар могут и должны быть другие значения).

Итак, что сделано :

Сначала определяем был ли геп

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 ;

если был и Gp = true то условие на запрет такое

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

Правда у меня есть сомнения в корректности исполнения функции

iBarShift (NULL,0,smtm);

возможно лучше ее написать так

iBarShift (NULL,60,smtm,true); хотя нет, последний по умолчанию парметр всетаки false ???

Жду мыслей и предложений.

 
SHOOTER777 >>:

И еще обратите внимание на эти строчки в эксперте

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

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

Запрет реализуется в функции bool FLG (int cs )

А зачем нужны такие ограничения?

 
capellini писал(а) >>

А зачем нужны такие ограничения?

Если не нужны, не используйте! Я готовлю советник к реалу и как мультивалютник. В дальнейшем, это будет вилка, где советнику будет запрещено торговать, как снизу, чтоб при форсмажоре не слить все, так и сверху, синица в руках лучше, чем журавль))) MM однако

 

А теперь вести с полей или с фронта))

В прошедшие выходные, я не успел подготовить сет файлы для версии L9, поздно закончил работу над ним плюс праздники)))

Поэтому решил поставить эксперимент. Поставил версию L9 с сетами за прошлую неделю и от другой версии.

Что имеем к исходу двух суток : баланс -$70 эквити +$420 Хорошо идем!

 
SHOOTER777 писал(а) >>

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

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

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

Помогло.

Пошла оптимизация.

Может имеет смысл подобные переменные выносить во внешние?

Будет проще при оптимизации, да и в реальной работе тоже.

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

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