Как кодировать? - страница 67

 

счетчик?

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

Я начинаю с глобальной переменной,

//--- Global variable

datetime PreviousBar; // record candle/bar time[/CODE]

and set one bool in init()

int init()

{

do_this = true;

}

[/CODE]

blah blah boring stuff.... etc, etc

then in the main loop I have:

[CODE]

if(do_this == true)

{

PreviousBar = Time[0];

do_this= false; // so it does this only once only

}

if(NewBar() == true)

{

if(TotalOpenOrders() == blah blah close my order you crazy monkey)

}

and outside the main loop I have:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}

Итак, она настроена на выполнение один раз за бар. Я хочу сделать функцию, которая увеличивает 90 секунд или 60 секунд или что-то еще, а затем устанавливает bool в true после увеличения времени. По сути, я хочу проверять индикаторы каждые 60, 90, 120 секунд или что-то еще, а не по закрытию бара. Как мне это сделать?

Спасибо за любую помощь,

- nittany1

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

Я начинаю с глобальной переменной,

//--- Global variable

datetime PreviousBar; // record candle/bar time[/CODE]

and set one bool in init()

int init()

{

do_this = true;

}

[/CODE]

blah blah boring stuff.... etc, etc

then in the main loop I have:

[CODE]

if(do_this == true)

{

PreviousBar = Time[0];

do_this= false; // so it does this only once only

}

if(NewBar() == true)

{

if(TotalOpenOrders() == blah blah close my order you crazy monkey)

}

and outside the main loop I have:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}

Итак, она настроена на выполнение один раз за бар. Я хочу сделать функцию, которая увеличивает 90 секунд или 60 секунд или что угодно, а затем устанавливает bool в true после увеличения этого времени. По сути, я хочу проверять индикаторы каждые 60, 90, 120 секунд или что-то еще, а не по закрытию бара. Как мне это сделать?

Спасибо за любую помощь,

- nittany1

Это должно помочь. Помните, что MT использует тиковое исполнение, поэтому посекундная точность невозможна (если только вы не зациклите все в подзаголовке Init()).

if (CallIndicatorsCheck())

{

// ваш код здесь

}

bool CallIndicatorsCheck()

{

static datetime Oldtime;

int Secs = 90;

bool Flag;

if (CurrTime() >= Oldtime) {

Oldtime = CurrTime() + Secs;

Flag = true; }

return (Flag);

}

 

Размещение комментария

Кто-нибудь может показать мне код для размещения комментария в ПЕРВОМПРАВОМ углу экрана, а не в левом верхнем по умолчанию?

Спасибо!

 
wolfe:
Не мог бы кто-нибудь показать мне код, чтобы поместить комментарий в верхнийправый угол экрана, а не в левый верхний по умолчанию? Спасибо!

Вы не можете. Из руководства по MQL4:

void Comment( ...)Функция выводит комментарий, заданный пользователем, в левом верхнем углу графика.

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

 
wolfe:
Кто-нибудь может показать мне код для размещения комментария вПРАВОМ верхнемуглу экрана, а не в левом верхнем по умолчанию? Спасибо!

LinusGuy прав; прямого пути нет. Простым обходным решением является заполнение комментария пробелами...

Comment(" hello world!");

сместит текст вправо.

Вы также можете вставить переносы строк для уменьшения страницы.

Comment("\n\n\n\n\n\n\n\nyour text");

или комбинируйте перевод строки и пробел для печати в правом нижнем углу экрана.

mog

 
mog:
LinusGuy прав, прямого пути нет. Простым обходным решением является заполнение комментария пробелами...

Comment(" hello world!");

сместит текст вправо.

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

Comment("\n\n\n\n\n\n\nyour text");

или комбинируйте перевод строки и пробел для печати в правом нижнем углу экрана.

mog

Спасибо за помощь. Я попробую!

 

отсутствие новой сделки в течение X баров после убыточной сделки

привет команда - надеюсь, кто-нибудь сможет помочь, пожалуйста...

как остановить начало новой сделки в течение 10 баров, если последняя сделка была убыточной?

спасибо

 

Приведенная ниже функция вернет true, если в истории счета есть убыточная сделка, которая закрылась на открытии или после открытия 10:th прошлого бара (текущий бар равен 0),

и вернет false в противном случае.

bool postMortem()

{

datetime since = Time[ bar+10 ];

for ( int i = OrdersHistoryTotal() - 1; i >= 0; i-- ) {

if ( ! OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )

continue;

if ( OrderProfit() = since )

return( true );

}

return( false );

}

[/PHP]

If you add that function to your EA, then include a statement like the following in the start() function, then Bob's your uncle.

[PHP]if ( postMortem() ) return( 0 );
 

Спасибо большое за это - я попробую.

с уважением

 

ребята, у вас такая же проблема?

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

//на покупку

double indicatorpast = icustom(....................,1);

double indicatornow = icustom(....................,0);

if (close[1]indicatornow) OpenBUY();

if (close[1]>indicatorpast && close[0]<indicatornow) OpenSELL();

но с этим сатацией эксперт открывает позиции не только когда цена пересекает индикатор, он открывает позицию и выше индикатора. Я хочу, чтобы эксперт открывал позицию ТОЛЬКО при пересечении индикатора, поэтому я попробовал так:

//на покупку

double indicatorpast = icustom(....................,1);

double indicatornow = icustom(....................,0);

if (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY();

if (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL();

Но это утверждение не выполняется.

Вы знаете, что происходит? Потому что я думаю, что в этом утверждении нет ошибок.

С уважением.