IqOptionApiDotNet icon indicating copy to clipboard operation
IqOptionApiDotNet copied to clipboard

Como pegar resultado de ordem?

Open brunoshady opened this issue 4 years ago • 19 comments

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.

brunoshady avatar Sep 29 '20 13:09 brunoshady

A função BuyResultObservable realmente só deve retornar a posição da compra, para resultado (binária) deve usar ClosedOptionObservable.

gabrielbsin avatar Sep 29 '20 13:09 gabrielbsin

Estranho, não tenho esse ClosedOptionObservable aqui...

brunoshady avatar Sep 29 '20 13:09 brunoshady

Provavelmente você não esta passando o wsclient, por exemplo: api.WsClient.ClosedOptionObservable ao invés de usar api.ClosedOptionObservable.

gabrielbsin avatar Sep 29 '20 14:09 gabrielbsin

Tens algum exemplo?

Não consegui fazer funcionar ainda...

brunoshady avatar Sep 29 '20 21:09 brunoshady

@brunoshady @gabrielbsin

Atualize seu pacote, pois liberei uma atualização...!

JorgeBeserra avatar Oct 26 '20 20:10 JorgeBeserra

@brunoshady @gabrielbsin

Atualize seu pacote, pois liberei uma atualização...!

Tem um exemplo de uso?

jeffersonmello avatar Nov 05 '20 19:11 jeffersonmello

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 .

andreptcosta avatar Jan 20 '21 13:01 andreptcosta

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 .

isso não funciona para voce? IqClientApiDotNet.WsClient.ClosedOptionObservable().Subscribe(x => { if (x.Result == IqOptionApiDotNet.Models.OrderResult.Loose || x.Result == IqOptionApiDotNet.Models.OrderResult.Equal) { ....

JuniorCosta avatar Jan 20 '21 22:01 JuniorCosta

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 .

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.

andreptcosta avatar Jan 21 '21 00:01 andreptcosta

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

jeffersonmello avatar Jan 21 '21 11:01 jeffersonmello

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 avatar Feb 08 '21 00:02 luciolhl

@luciolhl estou com mesmo problema você conseguiu resolver? Ele chama diversas vezes

JuniorCosta avatar Feb 09 '21 01:02 JuniorCosta

@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.

andreptcosta avatar Feb 09 '21 12:02 andreptcosta

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;
            }
        }
    }

luciolhl avatar Feb 09 '21 12:02 luciolhl

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));

damianportillo avatar Jan 21 '22 13:01 damianportillo

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)); }

damianportillo avatar Jan 21 '22 18:01 damianportillo

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

jpr14 avatar Jun 01 '22 19:06 jpr14

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.

ostreicher1986 avatar Jan 25 '23 18:01 ostreicher1986

Boa tarde,

@jpr14, você encontrou alguma forma de trazer o resultado?

ostreicher1986 avatar Jan 26 '23 18:01 ostreicher1986