Como codificar? - página 67

 

contador?

Tenho programado indicadores há tantos meses que sou um pouco deficiente em especialistas, mas pretendo resolver isso. Ao longo do caminho, preciso de uma pequena ajuda. No meu especialista que eu juntei, tenho que verificar no fechamento do bar se existe uma condição que justifique o fechamento do comércio.

Eu começo com uma variável global,

//--- 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);

}

OK, então é configurado para fazer uma vez por barra. O que eu quero fazer é ter uma função que aumente 90 segundos ou 60 segundos ou o que quer que seja, e depois de aumentar esse tempo, definir um bool para verdadeiro. Basicamente, quero verificar os indicadores a cada 60, 90, 120 segundos ou o que quer que seja, ao invés de fechar a barra. Como posso fazer isso?

Obrigado por qualquer ajuda,

- nittany1

 
nittany1:
Tenho programado indicadores há tantos meses que sou um pouco deficiente em especialistas, mas pretendo resolver isso. Ao longo do caminho, preciso de uma pequena ajuda. No meu especialista que eu juntei, tenho que verificar no fechamento do bar se existe uma condição que justifique o fechamento do comércio.

Começo com uma variável global,

//--- 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);

}

OK, então é configurado para fazer uma vez por barra. O que eu quero fazer é ter uma função que aumente 90 segundos ou 60 segundos ou o que quer que seja, e depois de aumentar esse tempo, definir um bool para verdadeiro. Basicamente, quero verificar os indicadores a cada 60, 90, 120 segundos ou o que quer que seja, ao invés de fechar a barra. Como posso fazer isso?

Obrigado por qualquer ajuda,

- nittany1

Isto deve ser suficiente. Lembre-se de que a MT usa execução baseada em carrapatos, portanto a precisão por segundo não é possível (a menos que você faça loop de tudo no subitem Init()).

se (CallIndicatorsCheck())

{

// seu código aqui

}

bool CallIndicatorsCheck()

{

data/hora estática Oldtime;

int Secs = 90;

bool Bandeira;

if (CurrTime() >= Oldtime) {

Oldtime = CurrTime() + Secs;

Bandeira = verdadeiro; }

retorno(Bandeira);

}

 

Colocação de comentários

Alguém poderia me mostrar o código para colocar um comentário noUPPERRIGHTcorner da tela, em vez da esquerda superior padrão?

Obrigado!

 
wolfe:
Alguém poderia me mostrar o código para colocar um comentário noUPPERRIGHTcorner da tela, em vez de no canto superior esquerdo padrão? Obrigado!

Você não pode. Do manual da MQL4:

void Comment( ...)A função emite o comentário definido pelo usuário no canto superior esquerdo do gráfico.

Se você precisar por morte, você pode criar objetos.

 
wolfe:
Alguém poderia me mostrar o código para colocar um comentário noUPPERRIGHTcorner da tela, em vez da esquerda superior padrão?Obrigado!

LinusGuy tem razão; não há maneira direta. A solução fácil é preencher seu Comentário com espaços.

Comment(" hello world!");

compensará o texto para a direita.

Você também pode colocar em linhas de alimentação para descer a página.

Comente ("olá mundo!"); o texto será colocado à direita;

ou combinar linefeeds e espaço para imprimir no canto inferior direito da tela.

mog

 
mog:
LinusGuy está certo; não há maneira direta. A solução fácil é preencher seu Comentário com espaços --

Comment(" hello world!");

compensará o texto para a direita.

Você também pode colocar em linhas de alimentação para descer a página.

Comente ("olá mundo!"); o texto será colocado à direita;

ou combinar linefeeds e espaço para imprimir no canto inferior direito da tela.

mog

Obrigado pela ajuda. Vou tentar!

 

nenhuma nova troca para X barras após uma troca perdida

oi equipe - esperando que alguém possa ajudar, por favor...

como posso impedir o início de um novo comércio por 10 bares se o último comércio foi uma perda?

saúde

 

A função abaixo voltará a ser verdadeira enquanto o histórico da conta tiver um comércio de perdas que fechou na ou após a abertura da barra 10:a anterior (a barra atual é 0),

e retornar falso caso contrário.

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 );
 

thx muito por isso - eu vou tentar

cumprimentos

 

rapazes, vocês têm o mesmo problema?

Eu codifiquei um especialista. Eu quero abrir uma posição quando o preço é o mesmo que um indicador. Para fazer isso, uso a seguinte frase:

// para comprar

indicadorpast duplo = icustom(....................,1);

indicador duplo indicatornow = icustom(....................,0);

se (fechar[1]indicatornow) OpenBUY();

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

mas, com este satélite, o especialista abre posições não apenas quando o preço cruza o indicador, ele também abre posição acima do indicador. Quero que o perito abra posições APENAS quando cruzar o indicador, por isso tentei isso:

// para comprar

indicadorpast duplo = icustom(....................,1);

indicador duplo indicatornow = icustom(....................,0);

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

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

Mas esta afirmação não está funcionando.

Você sabe o que está acontecendo? Porque acho que não há erros na declaração.

Cumprimentos.

Razão: