Resposta

OrdersHistoryTotal() retorna 0

4 respostas

Steve Green

Assinante, bbp_participant, comunidade, 47 respostas.

Perfil da visita

5 anos atrás #238359

Hi,

Estou tentando obter o tamanho da última ordem para um determinado magicnumber e símbolo, mas OrdersHistoryTotal() sempre retorna 0, mesmo que eu tenha ordens na guia Account History (Histórico da conta) em meu terminal mt4.

 

Meu código está abaixo.

 

extern int lv_hour = 6;
extern int lv_minute = 0;
extern int lv_orderMagicNumber = 0; // insira o número mágico correto aqui

int lv_count = 0;

double lv_DefaultPositionSize = 5;
double lv_ReturnPositionSize = 0;

void start()
{
Se (TimeHour(Time[0]) == lv_hour && Minute() == lv_minute && lv_count == 0)
{
lv_ReturnPositionSize = sqGetLastPositionSize(lv_orderMagicNumber);

Se (lv_ReturnPositionSize != 0)
{
lv_DefaultPositionSize = lv_ReturnPositionSize; //substitui o tamanho da posição padrão
}
printf("lv_DefaultPositionSize = " +lv_DefaultPositionSize);

lv_count = 1; // garante que ele seja impresso apenas uma vez no diário
}
}

double sqGetLastPositionSize(int orderMagicNumber) {
for(int i=OrdersHistoryTotal(); i>=0; i-) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==verdadeiro && OrderSymbol() == Symbol()) {
Se (orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {
return(OrderLots());
}
}
}

return(0);
}

 

 

Obrigado de antemão

Steve

 

0

coensio

Cliente, bbp_participante, comunidade, 106 respostas.

Perfil da visita

5 anos atrás #238361

Por exemplo, você pode fazer um pouco de depuração e ver onde está dando errado.

double sqGetLastPositionSize(int orderMagicNumber) {
for(int i=OrdersHistoryTotal(); i>=0; i-) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol())

{

Print("Symbol:",OrderSymbol());
Se (orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {

Imprimir("Magic: ",OrderMagicNumber());
return(OrderLots());
}
}
}

return(0);
}

Esta é uma falsa afirmação.

0

Steve Green

Assinante, bbp_participant, comunidade, 47 respostas.

Perfil da visita

5 anos atrás #238362

Obrigado, Coensie,

 

 

Você executou seu código? Ele nem mesmo entra na instrução if(OrderSelect), pois OrderSymbol() retorna como NULL e eu especulo que OrderSelect retorna como false, por isso?

 

Veja a modificação de sua função sqGetLastPositionSize abaixo:

 

double sqGetLastPositionSize(int orderMagicNumber) {
for(int i=OrdersHistoryTotal(); i>=0; i-) {
Imprimir("OrderSymbol():",OrderSymbol());
Imprimir("Symbol():",Symbol());
Imprimir("OrderMagicNumber():",OrderMagicNumber());

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol())

{

Print("Symbol:",OrderSymbol());
Se (orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {

Imprimir("Magic: ",OrderMagicNumber());
return(OrderLots());
}
}
}

return(0);
}

 

 

 

Alguma idéia?

0

coensio

Cliente, bbp_participante, comunidade, 106 respostas.

Perfil da visita

5 anos atrás #238365

Este foi verificado em minha conta:

 

double sqGetLastPositionSize(int orderMagicNumber)
{
for(int i=OrdersHistoryTotal()-1; i>=0; i-)
{
Se(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
Se (OrderSymbol() == Symbol())
{
if(orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber)
{
Print("Magic:",OrderMagicNumber()," OrderLots: ",OrderLots());
return(OrderLots());
}
}
}
return(0);
}

Esta é uma falsa afirmação.

0

Steve Green

Assinante, bbp_participant, comunidade, 47 respostas.

Perfil da visita

5 anos atrás #238369

 

Ainda não funciona, talvez porque seja uma conta de demonstração?

 

Meu último pedido foi:

166861186 2019.01.24 08:00:01 comprar 0.79 usdjpy 109.625 109.690 0.000 2019.01.24 08:37:29 109.691 0.00 0.00 0.00 0.00 47.53

 

 

Este foi o resultado do seu código:

2019.01.26 12:39:35.900 USDJPY,H1: 109397 eventos de tick (24 barras, 110397 estados de barra) processados em 0:00:00.016 (tempo total 0:00:02.359)2019.01.26 12:39:35.900 USDJPY,H1: 109397 eventos de tick (24 barras, 110397 estados de barra) processados em 0:00:00.016 (tempo total 0:00:02.359)2019.01.26 12:39:35.892 2019.01.25 06:00:00 dummy USDJPY,H1: lv_DefaultPositionSize = 52019.01.26 12:39:35.889 2019.01.25 00:00:00 dummy inputs: lv_hour=6; lv_minute=0; lv_orderMagicNumber=2670682; 2019.01.26 12:39:33.536 TestGenerator: spread atual 14 usado

0

Visualizando 4 respostas - 1 até 4 (de um total de 4)