Gustavo Barbeiro Alonso #: pergunta 1 : Nesse eu estava testando se era isso que estava fazendo com que não executasse Ponto 2: Corrigido! Ponto 3: Coloquei a função que você me passou; Ponto 4 Inseri a verificação em todas
O problema relatado no tópico abaixo é muito semelhante ao seu (ordens pendentes recusadas apenas em conta real, mesma corretora, etc.)... Segue a solução naquele caso...
A corretora não é tão importante, o fato do vinicius falar do filling faria sentido se fosse pra todas as ordens e não somente para as stops (minha opiniao). Dado que essa função que tu postou é a que coloca os stops, tu poderia mandar a que esta contando as ordens para verificarmos? Outro ponto que seria o typ, ele esta vindo correto? Se voce esta posicionado na venda, ele esta vindo compra como deveria?
A corretora não é tão importante, o fato do vinicius falar do filling faria sentido se fosse pra todas as ordens e não somente para as stops (minha opiniao). Dado que essa função que tu postou é a que coloca os stops, tu poderia mandar a que esta contando as ordens para verificarmos? Outro ponto que seria o typ, ele esta vindo correto? Se voce esta posicionado na venda, ele esta vindo compra como deveria?
Outra coisa, o testador é uma coisa. Mas voce poderia depurar em mercado real na conta demo que seria para ter um comportamento muito similar ao do mercado real.
O problema relatado no tópico abaixo é muito semelhante ao seu (ordens pendentes recusadas apenas em conta real, mesma corretora, etc.)... Segue a solução naquele caso...
Coloquei
Trade.SetTypeFilling(ORDER_FILLING_RETURN);
mas mesmo assim ta dando na mesma coisa, abre a ordem mas as ordens pendentes não estão indo, e não deixando erro no log
coloquei o print onde abre a ordem limite e chega nele, porém estou duvidando do report do cliente, vou abrir um conta em corretora nacional pra tentar eu testar.
já a parte do typ eu coloquei manual é so pra separar o tipo de entrada
//+------------------------------------------------------------------+//| função de compra a mercado |//+------------------------------------------------------------------+void CRobot::CompraMercado(double num_lotes,double _ask,double TK_,double SL_)
{
Trade.Buy(num_lotes,_Symbol,Robo.NormalizePrice(_ask),NULL,NULL);
if(Trade.ResultRetcode() == 10008 || Trade.ResultRetcode() == 10009)
{
Robo.StopsPend(num_lotes,_ask,TK_,SL_,1);
Print("Ordem de compra Executada com Sucesso!!");
}
else
{
Print("Erro de execução... ", GetLastError());
ResetLastError();
}
}
//+------------------------------------------------------------------+//| função d evenda a mercado |//+------------------------------------------------------------------+void CRobot::VendaMercado(double num_lotes,double _bid,double TK_,double SL_)
{
Trade.Sell(num_lotes,_Symbol,Robo.NormalizePrice(_bid),NULL,NULL);
if(Trade.ResultRetcode() == 10008 || Trade.ResultRetcode() == 10009)
{
Robo.StopsPend(num_lotes,_bid,TK_,SL_,0);
Print("Ordem de venda Executada com Sucesso!!");
}
else
{
Print("Erro de execução... ", GetLastError());
ResetLastError();
}
}
coloquei o print onde abre a ordem limite e chega nele, porém estou duvidando do report do cliente, vou abrir um conta em corretora nacional pra tentar eu testar.
já a parte do typ eu coloquei manual é so pra separar o tipo de entrada
Aqui tem um problema que não verifica se as ordens estão colocadas ou não, só que elas existem. Já vi uma corrretora com problema ficar 2 minutos com uma ordem no estado inicial e depois sumir com ela.
Não precisava repetir o código, e o CountPendingOrders() ? Eu esperava uma coisa no mínimo assim:
Aqui tem um problema que não verifica se as ordens estão colocadas ou não, só que elas existem. Já vi uma corrretora com problema ficar 2 minutos com uma ordem no estado inicial e depois sumir com ela.
int CRobot::CountPendingOrders()
{
int totalOrders = OrdersTotal(); // Obtém o número total de ordens na containt pendingOrderCount = 0; // Inicializa a contagem de ordens pendentesfor(int i = 0; i < totalOrders; i++)
{
ulong tkt = OrderGetTicket(i);
if(OrderSelect(tkt))
{
if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT || OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_STOP ||
OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT|| OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_STOP)
{
pendingOrderCount++;
}
}
}
return pendingOrderCount; // Retorna o número de ordens pendentes
}
Essa sua função não define o ativo, logo tendo qualquer outra ordem pendente em outro ativo será contabilizado como de interesse. Pelo manual também se deu OrderGetTicket diz lá que ele já te garantiria que estaria selecionado o ticket para uso. Então esse select poderia só trocar por um tkt > 0. O uso do magic number seria só pra deixar preciso o que eu quero, eu poderia querer deixar a pessoa colocar a ordens no ativo e eu não contabilizar. Mas não vejo muita necessidade em conta netting.
O problema relatado no tópico abaixo é muito semelhante ao seu (ordens pendentes recusadas apenas em conta real, mesma corretora, etc.)... Segue a solução naquele caso...
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Ordens pendentes negadas pelo servidor. Mensagem: "Order received. Sending to OMS"
Rodrigo Malacarne, 2016.02.25 22:14
Olá sergio.brito,
Experimente trocar dentro de OnInit a seguinte linha:
Trade.SetTypeFilling(ORDER_FILLING_FOK);para
Trade.SetTypeFilling(ORDER_FILLING_RETURN);Por favor não esqueça de nos reportar o resultado!
Abraços,
Malacarne
a corretora usada é a XP Investimentos
A corretora não é tão importante, o fato do vinicius falar do filling faria sentido se fosse pra todas as ordens e não somente para as stops (minha opiniao). Dado que essa função que tu postou é a que coloca os stops, tu poderia mandar a que esta contando as ordens para verificarmos? Outro ponto que seria o typ, ele esta vindo correto? Se voce esta posicionado na venda, ele esta vindo compra como deveria?
A corretora não é tão importante, o fato do vinicius falar do filling faria sentido se fosse pra todas as ordens e não somente para as stops (minha opiniao). Dado que essa função que tu postou é a que coloca os stops, tu poderia mandar a que esta contando as ordens para verificarmos? Outro ponto que seria o typ, ele esta vindo correto? Se voce esta posicionado na venda, ele esta vindo compra como deveria?
O problema relatado no tópico abaixo é muito semelhante ao seu (ordens pendentes recusadas apenas em conta real, mesma corretora, etc.)... Segue a solução naquele caso...
Coloquei
Trade.SetTypeFilling(ORDER_FILLING_RETURN);mas mesmo assim ta dando na mesma coisa, abre a ordem mas as ordens pendentes não estão indo, e não deixando erro no log
Coloquei
mas mesmo assim ta dando na mesma coisa, abre a ordem mas as ordens pendentes não estão indo, e não deixando erro no log
Colocou o Print() que tinha pedido? E poderia mandar o codigo que falei tambem pra gente checar?
coloquei o print onde abre a ordem limite e chega nele, porém estou duvidando do report do cliente, vou abrir um conta em corretora nacional pra tentar eu testar.
já a parte do typ eu coloquei manual é so pra separar o tipo de entrada
coloquei o print onde abre a ordem limite e chega nele, porém estou duvidando do report do cliente, vou abrir um conta em corretora nacional pra tentar eu testar.
já a parte do typ eu coloquei manual é so pra separar o tipo de entrada
Não precisava repetir o código, e o CountPendingOrders() ? Eu esperava uma coisa no mínimo assim:
Aqui tem um problema que não verifica se as ordens estão colocadas ou não, só que elas existem. Já vi uma corrretora com problema ficar 2 minutos com uma ordem no estado inicial e depois sumir com ela.
Não precisava repetir o código, e o CountPendingOrders() ? Eu esperava uma coisa no mínimo assim:
Aqui tem um problema que não verifica se as ordens estão colocadas ou não, só que elas existem. Já vi uma corrretora com problema ficar 2 minutos com uma ordem no estado inicial e depois sumir com ela.
essa é minha função ela não usa o Magic number
essa é minha função ela não usa o Magic number