IqOptionApiDotNet
IqOptionApiDotNet copied to clipboard
Como pegar resultado de ordem?
Alguem tem um exemplo de como pegar o resutado de uma ordem?
Tentei mexer com o BuyResultObservable porém me parece que ele só notifica na abertura da ordem, e não no fechamento dela.
A função BuyResultObservable realmente só deve retornar a posição da compra, para resultado (binária) deve usar ClosedOptionObservable.
Estranho, não tenho esse ClosedOptionObservable aqui...
Provavelmente você não esta passando o wsclient, por exemplo: api.WsClient.ClosedOptionObservable ao invés de usar api.ClosedOptionObservable.
Tens algum exemplo?
Não consegui fazer funcionar ainda...
@brunoshady @gabrielbsin
Atualize seu pacote, pois liberei uma atualização...!
@brunoshady @gabrielbsin
Atualize seu pacote, pois liberei uma atualização...!
Tem um exemplo de uso?
Alguém conseguiu obter o resultado da ordem? ClosedOptionObservable não está pegando o resultado.
Update:
Eu consegui usando de fato o api.WsClient.ClosedOptionObservable
porém para este funcionar, apos o BuyAsync
foi necessário executar um novo _api.ConnectAynsc()
para que ws continue recebendo as mensagens. Ele para de receber após o BuyAsync
.
Alguém conseguiu obter o resultado da ordem? ClosedOptionObservable não está pegando o resultado.
Update: Eu consegui usando de fato o
api.WsClient.ClosedOptionObservable
porém para este funcionar, apos oBuyAsync
foi necessário executar um novo_api.ConnectAynsc()
para que ws continue recebendo as mensagens. Ele para de receber após oBuyAsync
.
isso não funciona para voce? IqClientApiDotNet.WsClient.ClosedOptionObservable().Subscribe(x => { if (x.Result == IqOptionApiDotNet.Models.OrderResult.Loose || x.Result == IqOptionApiDotNet.Models.OrderResult.Equal) { ....
Alguém conseguiu obter o resultado da ordem? ClosedOptionObservable não está pegando o resultado. Update: Eu consegui usando de fato o
api.WsClient.ClosedOptionObservable
porém para este funcionar, apos oBuyAsync
foi necessário executar um novo_api.ConnectAynsc()
para que ws continue recebendo as mensagens. Ele para de receber após oBuyAsync
.isso não funciona para voce? IqClientApiDotNet.WsClient.ClosedOptionObservable().Subscribe(x => { if (x.Result == IqOptionApiDotNet.Models.OrderResult.Loose || x.Result == IqOptionApiDotNet.Models.OrderResult.Equal) { ....
Sim funcionou, mas desde que chame um api.ConnectAynsc()
a parte somente para obter o resultado. Se usar o mesmo que usou para o metodo de operar, ele não executa nada na assinatura.
Olá, eu estou usando desta forma:
Client.WsClient.ClosedOptionObservable().Subscribe(result => { CheckClosed(result); });
no método CheckClosed eu faço meus tratamentos, o result é do tipo OptionClosed
Olá, eu estou usando desta forma:
Client.WsClient.ClosedOptionObservable().Subscribe(result => { CheckClosed(result); });
no método CheckClosed eu faço meus tratamentos, o result é do tipo OptionClosed
Tentei realizar a implementação dessa forma e funcionou em partes. Quando realizado a primeira entrada eu coloco no console para ele informar o resultado então exemplo: meu robô esta ligado ai ele fez a primeira entrada ai ele pega o resultado e me retorna uma resposta quando faço a segunda entrada em vez de escrever no console uma unica vez ele escreve 2 Se fizer a 3 entrada ele escreve a resposta no console 3 vezes e assim vai...4, 5, 6...de acordo com a quantidade de entrada ele escreve de respostas no console...
Vou colocar como fiz meu metodo de CheckClosed para ver...Não estou entendo pq ele ta retornando varias respostas apos a 2 jogada,
`public static async Task CheckClosedAsync(OptionClosed optionClosed) { if(optionClosed.Result == OrderResult.Win) { decimal resultOperacao = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada; Conta.profile.Balance = Conta.profile.Balance + resultOperacao; lucro = lucro + resultOperacao; texto = "Reulstado da operação:\nStatus: Win\nLucro: " + lucro + "\nTotal da Banca:" + Conta.profile.Balance; Console.WriteLine(texto); await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT); return; }
if (optionClosed.Result == OrderResult.Loose)
{
decimal resultOperacao2 = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada;
Conta.profile.Balance = Conta.profile.Balance + (resultOperacao2);
lucro = lucro + (resultOperacao2);
texto = "Reulstado da operação:\nStatus: Loss\nLucro: " + lucro + "\nTotal da Banca:" + Conta.profile.Balance;
Console.WriteLine(texto);
await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT);
return;
}
if (optionClosed.Result == OrderResult.Equal)
{
decimal resultOperacao2 = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada;
Conta.profile.Balance = Conta.profile.Balance + (resultOperacao2);
lucro = lucro + (resultOperacao2);
texto = "Reulstado da operação:\nStatus: Equal\nLucro: " + lucro + "\nTotal da Banca:" + Conta.profile.Balance;
Console.WriteLine(texto);
await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT);
return;
}
}`
@luciolhl estou com mesmo problema você conseguiu resolver? Ele chama diversas vezes
@luciolhl e @JuniorCosta tentem criar um client somente para assinar ClosedOptionObservable
e outro client para as entradas. Usar o mesmo client parece não funcionar muito bem.
Consegui resolver o problema assim:
Fazendo a chamada com Lambda para poder executar o método que faz a verificação:
Chamada de compra na IQ:
BinaryOptionsResult buyResult = await Conta.client.BuyAsync(Conta.requestId, ActivePair.EURUSD, (decimal)Constantes.Conta.CONFIG.valor_entrada, OrderDirection.Put, exp);
Chamada Obter o resultado: OBS: Não fiz a verificação se o While é realmente necessário. No lambda ele chama o método CheckClosedAsync que esta abaixo.
while (true)
{
Conta.client.WsClient.ClosedOptionObservable().Subscribe(async result => { await CheckClosedAsync(result, buyResult); });
Conta.client.WsClient.ClosedOptionObservable().Subscribe().Dispose();
break;
}
Método que faz validação do resultado: No método abaixo o seguinte IF if(optionClosed.OptionId == buyResult.PositionId) foi quem de fato fez com que parasse de retornar mais de 1 resposta para o resultado da operação
public static async Task CheckClosedAsync(OptionClosed optionClosed, BinaryOptionsResult buyResult)
{
if(optionClosed.OptionId == buyResult.PositionId)
{
if (optionClosed.Result == OrderResult.Win)
{
decimal resultOperacao = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada;
Conta.profile.Balance = Conta.profile.Balance + resultOperacao;
lucro = lucro + resultOperacao;
texto = "✅Reulstado da operação:✅\n😄Status: Win\n💵Lucro: " + lucro + "\n💰Total da Banca:" + Conta.profile.Balance;
Console.WriteLine(texto);
await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT);
return;
}
if (optionClosed.Result == OrderResult.Loose)
{
decimal resultOperacao2 = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada;
Conta.profile.Balance = Conta.profile.Balance + (resultOperacao2);
lucro = lucro + (resultOperacao2);
texto = "✅Reulstado da operação:✅\n😔Status: Loss\n💵Lucro: " + lucro + "\n💰Total da Banca:" + Conta.profile.Balance;
Console.WriteLine(texto);
await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT);
return;
}
if (optionClosed.Result == OrderResult.Equal)
{
decimal resultOperacao2 = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada;
Conta.profile.Balance = Conta.profile.Balance + (resultOperacao2);
lucro = lucro + (resultOperacao2);
texto = "✅Reulstado da operação:✅\n😐Status: Equal\n💵Lucro: " + lucro + "\n💰Total da Banca:" + Conta.profile.Balance;
Console.WriteLine(texto);
await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT);
return;
}
}
}
I COULD NOT SOLVE IT with the solution of "Como pegar resultado de ordem?" . HELP
var rdo = api.WsClient.ClosedOptionObservable().Subscribe(r => r.Result.CompareTo(OrderResult.Win));
all the time I have the exception: A task was canceled.
var api = new IqOptionApiDotNetClient("[email protected]", "pass"); if (await api.ConnectAsync()) { var requestId = Guid.NewGuid().ToString().Replace("-", string.Empty); CountryType[] countryes = { CountryType.AR, }; var userId = 8888888888888; var leader = await api.RequestLeaderboardUserinfoDealsClientAsync(requestId, countryes, userId); Console.WriteLine(JsonConvert.SerializeObject(leader)); }
Consegui resolver o problema assim:
Fazendo a chamada com Lambda para poder ejecutar o método que faz a verificação:
Chamada de compra en IQ:
BinaryOptionsResult buyResult = await Conta.client.BuyAsync(Conta.requestId, ActivePair.EURUSD, (decimal)Constantes.Conta.CONFIG.valor_entrada, OrderDirection.Put, exp);
Chamada Obter o resultado: OBS: Não fiz a verificação se o While é realmente necesario. No lambda ele chama o método CheckClosedAsync que esta abaixo.
while (true) { Conta.client.WsClient.ClosedOptionObservable().Subscribe(async result => { await CheckClosedAsync(result, buyResult); }); Conta.client.WsClient.ClosedOptionObservable().Subscribe().Dispose(); break; }
Método que faz validação do resultado: Ningún método abaixo o seguinte IF if(optionClosed.OptionId == buyResult.PositionId) foi quem de fato fez com que parasse de return mais de 1 resposta para o resultado da operação
public static async Task CheckClosedAsync(OptionClosed optionClosed, BinaryOptionsResult buyResult) { if(optionClosed.OptionId == buyResult.PositionId) { if (optionClosed.Result == OrderResult.Win) { decimal resultOperacao = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada; Conta.profile.Balance = Conta.profile.Balance + resultOperacao; lucro = lucro + resultOperacao; texto = "✅Reulstado da operação:✅\n😄Status: Win\n💵Lucro: " + lucro + "\n💰Total da Banca:" + Conta.profile.Balance; Console.WriteLine(texto); await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT); return; } if (optionClosed.Result == OrderResult.Loose) { decimal resultOperacao2 = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada; Conta.profile.Balance = Conta.profile.Balance + (resultOperacao2); lucro = lucro + (resultOperacao2); texto = "✅Reulstado da operação:✅\n😔Status: Loss\n💵Lucro: " + lucro + "\n💰Total da Banca:" + Conta.profile.Balance; Console.WriteLine(texto); await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT); return; } if (optionClosed.Result == OrderResult.Equal) { decimal resultOperacao2 = Convert.ToDecimal(optionClosed.WinEnrolledAmount) - Constantes.Conta.CONFIG.valor_entrada; Conta.profile.Balance = Conta.profile.Balance + (resultOperacao2); lucro = lucro + (resultOperacao2); texto = "✅Reulstado da operação:✅\n😐Status: Equal\n💵Lucro: " + lucro + "\n💰Total da Banca:" + Conta.profile.Balance; Console.WriteLine(texto); await Request.SendMessageNuggetAsync(Constantes.Telegram.CHAT_ID, texto, Constantes.Telegram.BOT_CLIENT); return; } } }
saudações não funciona com a nova atualização da api
Boa tarde,
Já olhei todo o fonte aqui e não consegue uma forma alternativa se fazer essa verificação... mesmo havendo relatos que o ClosedOptionObservable não funciona, também tentei, inclusive baixar a versão aqui para uma anterior e fiz alguns testes e nada.
Alguém conseguiu uma forma de recuperar essas informações?
Estou usando a versão 2.0.0. @JorgeBeserra você tem alguma orientação?
Agradeço a ajuda.
Boa tarde,
@jpr14, você encontrou alguma forma de trazer o resultado?