Como codificar? - página 114

 
matrixebiz:
Como eu configuro o Time Trading Hour em um EA?

Eu estava tentando isto;

no TradeHour;

if(Hora()17) TradeHour = falso;

mas não parece estar obedecendo à regra, apenas negocia quando e eu tenho && TradeHour nas minhas declarações de compra/venda.

Obrigado

Você já tentou definir TradeHour como um booleano em vez de um número inteiro?

bool TradeHour;

if ((Hour()17)){ TradeHour = false;}

Além disso, você pode precisar dos parênteses adicionais.

 
matrixebiz:
Como eu configuro o horário de negociação do tempo em um EA?

Eu estava tentando isto;

no TradeHour;

if(Hora()17) TradeHour = falso;

mas não parece estar obedecendo à regra, apenas negocia quando e eu tenho && TradeHour nas minhas declarações de compra/venda.

Obrigado

Como a Hora() pode ser inferior a 9 E superior a 17? Você quis dizer Ou (|||)?

Lux

 
luxinterior:
Como Hora() pode ser inferior a 9 E superior a 17? Você quis dizer Or (|||)?Lux

Bom ponto luxinterior! Isso é um problema definitivo. Eu perdi isso.

 

Desculpe, eu quis dizer |||

e eu estava tentando fazer isso;

//+--------- Variáveis de hora comercial------------------

// se (Hora() < StartHour) TradeHourS = falso;

// if (Hora() > FimHora) TradeHourE = falso;

Então, se StartHour=5 e EndHour=17 ele só deve ser comercializado dentro dessas horas corretamente?

Mas ele ainda comercializa a qualquer momento ??? é um problema usando o Strategy Tester?

 

Por que não usar apenas o exemplo direto do arquivo de ajuda?

bool is_siesta=false;

if(Hour()>=12 || Hour()<17)

is_siesta=true;

Lux

 

Cadeia de retorno de um c/c++ DLL de funções exportadas

Olá a todos,

Eu desenvolvi um conjunto de funções para gerenciar as configurações de uma EA.

Essas funções são exportadas por uma DLL c++ e cada uma das funções exportadas tem a chamada __stdcall call convetion solicitada pelo meu MQL4.

Meu problema surge quando uma função precisa retornar uma string para o EA.

Naturalmente, a função não pode:

- retornar um ponteiro a uma variável local (a variável sai do escopo)

- retornar um ponteiro para uma variável global dll (problemas com acesso simultâneo)

- devolver um ponteiro a um monte de cordel alocado (preciso de funções para liberar a memória para ser chamado da EA: não gosto desta abordagem)

Portanto, resolvi passar um fio e um tamanho de fio da EA. Es:

string buffer;

GetString( buffer, 30 );

[/CODE]

and from the c++ dll, something like this

void __stdcall GetString( LPTSTR buffer, int BufSize )

{

// Read a string from a some source

....

// -1 to take into account the terminating null character

StringCchCopy( buffer, BufSize-1, ReadStringFromASource );

}

[/CODE]

Here starts the weird behaviour of MQL managing strings returned from a DLL.

using the following code:

string buffer;

GetString( buffer, 30 );

the first time buffer contains the right string. A first question arises: buffer is not initialized but after calling GetString it contains the string returned. I have to suppose that MQL allocates space for a string variable when it's declared.

Next time GetString() is called the string returned seems to be truncated to the length-1 of the previous string length and not resetted as expected because of the 'string buffer;' statement.

Tried even:

[CODE]

string buffer = " "; // 'allocate' 30 blank characters

GetString( buffer, StringLen(buffer) );

but after the first time, when the execution returns to this code, the assignment of buffer does not work any more and buffer still contains the previous read string, and it seems it can only contains the number of characters of his content.

At first I have thought that the null character is not handled very well by MQL and modified the c++ code like this ...

[CODE]

CopyMemory( buffer, ReadStringFromASource, min(BufferSize,ReadStringFromASourceLength) );

e não acrescentar o caráter nulo terminante.

Mas quando chamado da MQL, nenhuma cadeia de caracteres está retornando.

Alguém tem uma resposta?

 
luxinterior:
Por que não usar apenas o exemplo direto do arquivo de ajuda?

bool is_siesta=false;

if(Hour()>=12 || Hour()<17)

is_siesta=true;

Lux

Sim, eu tentei fazer isso;

bool TradeHour=false;

if(Hour()>=12 || Hour()<17) TradeHour=verdadeiro

mas a linha OR não vai funcionar porque se a Hora for 22, então ela satisfaz a primeira parte "if(Hour()>=12" e ainda negocia quando quer e eu adicionei && TradeHour às declarações de compra/venda. O segundo exemplo que eu dei deveria para o truque, eu não entendi

 
luxinterior:
Por que não usar apenas o exemplo direto do arquivo de ajuda?

bool is_siesta=false;

if(Hour()>=12 || Hour()<17)

is_siesta=true;

[/code]

Lux

Acho que se seu objetivo é negociar entre 12:00 e 17:00, você simplesmente tem que fazer o seguinte:

[código]

bool TradingEnabled=false; // Variável global

...

...

TradingEnabled=false; // Redefinir cada execução do tique

if(Hora()>=12 && Hora()<17)

TradingEnabled=true;

...

...

if( TradingEnabled )

{

// Lógica comercial aqui

}

...

...

 
gorgoroth:
Acho que se seu objetivo é negociar entre 12:00 e 17:00, você simplesmente tem que fazer o seguinte:

bool TradingEnabled=false; // Global variable

...

...

TradingEnabled=false; // Reset every tic run

if(Hour()>=12 && Hour()<17)

TradingEnabled=true;

...

...

if( TradingEnabled )

{

// Trading logic here

}

...

...

Não estou fazendo a mesma coisa ao fazer isto?

se (Hora() 17) TradeHour = falso;

Ou seja, se a hora estiver entre 12 e 17 TradeHour=verdadeiro , correto?

(Adicionando && TradeHour na minha declaração de compra/venda)

 
luxinterior:
Como a Hora() pode ser inferior a 9 E superior a 17? Você quis dizer Ou (|||)?Lux

Oh, e eu quis dizer && porque seu direito a hora não pode ser inferior a 9 E superior a 17 o que torna a afirmação falsa, mas se a Hora é 10 então não é inferior a 9 E não superior a 17 então a afirmação torna-se verdadeira.

Talvez fazer isso dessa forma confunda o MT4 comprar de qualquer maneira funciona assim;

em TradeHour;

TradeHour = ((Hour()>=StartHour) && (Hour()<EndHour));

Obrigado