[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 214

 

Boa tarde. Escrevi uma função que deve retornar o número de barras quando uma ordem foi aberta:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

No entanto, ele sempre retorna -1. Onde eu cometi um erro? Obrigado de antemão.

 
first_may:

Boa tarde. Escrevi uma função que deve retornar o número de barras quando uma ordem foi aberta:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

No entanto, ele sempre retorna -1. Onde eu cometi um erro? Obrigado de antemão.

Talvez seja assim:

retorno(iBarShift(Símbolo(),Período(),t)); ou seja, sem verdade.

 
first_may:

Boa tarde. Escrevi uma função que deve retornar o número de barras quando uma ordem foi aberta:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

No entanto, ele sempre retorna -1. Onde eu cometi um erro? Agradecemos antecipadamente.

À variável t é atribuído o preço de abertura, embora seja declarada como um número inteiro

 
Vinin:

À variável t é atribuído o preço de abertura, embora seja declarada como um número inteiro

Certo, eu queria escrever OrderOpenTime(), mas escrevi OrderOpenPrice();
 
Obrigado, eu percebi meu erro.
 

Como você descreve tal condição?



avatar
13
4absinto 25.09.2011 19:23

Por favor, informe.

Se um extremo (por exemplo, alto) da primeira barra de 5 minutos do dia atual coincide com um extremo do dia atual (no diário), então fazemos algo. Como você o descreveria?


Roger 25.09.2011 20:25 corrigido | apagar
if(MathAbs(High[1]-iHigh(NULL,PERÍODO_D1,0))<Ponto)
 

ajudem as pessoas boas!!!


avatar
1
caído 25.09.2011 19:34

Olá, caros usuários do recurso!

Por favor, ajude quem se deparou com a leitura/escrita de um número real em um arquivo.

A tarefa é ler a partir de um saldo de arquivo, se o saldo atual for maior - sobrescrever o arquivo.

O problema é que ele sempre sai 0 (zero).

Com os números inteiros escritos/leitura não encontrei tais problemas.

Aqui está o código:

equilíbrio duplo;

int file_handle_bala;

file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_READ);
//copiar posição, no caso de um arquivo vazio - posição = 0
if (FileSize(file_handle_bala)>0)
{
balance=FileReadDouble(file_handle_bala,DOUBLE_VALUE);
Alerta(saldo); ------------------------------------- é aqui que deve ser escrito zero, embora o saldo guardado anteriormente deva ser escrito
FileClose(file_handle_bala);
se (AccountBalance()>balance) ------------------------------------ e esta regra não funciona porque o alerta abaixo não emite nada
{
file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_WRITE);
balanço=ContaBalanço();
Alerta(saldo);
FileWriteInteger(file_handle_bala,balance,DOUBLE_VALUE);
FileClose(file_handle_bala);
}
}
caso contrário // se o arquivo estiver vazio
{
FileClose(file_handle_bala); // primeiro, feche o arquivo aberto
file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_WRITE); //abrir para escrita
balanço=ContaBalanço();
FileWriteDouble(file_handle_bala,balance,DOUBLE_VALUE);
FileClose(file_handle_bala);
}

Muito obrigado mais cedo!!!


avatar
2222
Roger 9/25/2011 20:22

Observe esta linha

FileWriteInteger(file_handle_bala,balance,DOUBLE_VALUE);


3461
Zhunko 25/09/2011 20:27

1. Você deve ser mais respeitoso e amigável ao publicar seu código.

2. Você está tentando escrever um número inteiro de 8 bytes. A MQL4 não possui tal tipo de dados.

 

\O que eu fiz de errado? Por que tantos erros? (Eu preciso saber o máximo(Preciso saber o valor máximo do indicador nas últimas 10 barras). obrigado com antecedência.

 

Bom dia a todos!

Estou escrevendo meu primeiro bot e, ao mesmo tempo, estou me familiarizando com a MQL. Eu tenho o seguinte problema durante os testes:

A ordem OP_BUYSTOP é executada logo após a ordem ser colocada, embora a julgar pelo gráfico, o preço não atinja o valor alvo (ver abaixo)

HoraTipoOrdemVolumePreçoS / LT / PLucroBalanço
12011.09.19 02:10comprar parada10.0176.93576.73577.135
22011.09.19 02:10compre10.0176.93576.73577.135

USDJPY,M5 (visual)

Data 2011.09.19

Hora 02:15

Aberto 76.903

Alto 76.909

Baixo 76.890

Fechar 76.890

Volume 66

Estou testando todos os carrapatos.

Talvez eu não entenda corretamente o pedido OP_BUYSTOP? Comprar se o preço exceder um determinado valor, certo?

Aqui está um pouco do código fonte que faz um pedido

int ticket=OrderSend(Symb, OP_BUYSTOP, Lot, Price, 0, SL, TP);

Muito obrigado a todos com muita antecedência!

 
Shniperson:

\O que eu fiz de errado? Por que tantos erros? (Preciso saber o valor máximo do indicador para as últimas 10 barras). obrigado com antecedência.

Você está declarando a função Olá:

double Hi(int pos=0)
dentro da função start()