n1nj4z33 / iqoptionapi

IQ Option API 4.x (Python 2.7) The project is obsolete and is not supported because of problems with access to IQ Options in Russia
120 stars 545 forks source link

Getting the result data of trades. #17

Open frxncisjoseph opened 7 years ago

frxncisjoseph commented 7 years ago

Hi,

I don't have the time to fork and manually make a pull request so keep this bumped. I'll be making a couple pull requests on the weekend which add various functionalities to the API.

In order to receive the status of trades alongside the result...

  1. Add the following code to on line 50 inside the 'iqoptionapi/ws/client.py' file:

    if message["name"] == "listInfoData":
    listinfodata = lambda: None
    listinfodata.__dict__ = message["msg"][0]
    self.api.listinfodata.add_listinfodata(listinfodata)
  2. Create a new class in 'iqoptionapi/ws/objects' called 'listinfodata.py' and add the following code:

    
    """Module for IQ Option Candles websocket object."""
    import json

from collections import OrderedDict

from iqoptionapi.ws.objects.base import Base

class ListInfoData(Base): def init(self): super(ListInfoData, self).init() self.name = "listInfoData" self.listinfodata_list = OrderedDict()

@property
def listinfodata_list(self):
    """Property to get listinfodata list.

    :returns: The list of listinfodata.
    """
    return self.__listinfodata_list

@listinfodata_list.setter
def listinfodata_list(self, listinfodata_list):
    """Method to set listinfodata list."""
    self.__listinfodata_list = listinfodata_list

@property
def current_listinfodata(self):
    """Method to get current iteminfodata item.

     :returns: The object of listinfodata.
     """
    return self.listinfodata_list[next(reversed(self.listinfodata_list))]

def get_listinfodata(self, id):
    """Method to get iteminfodata item.

     :returns: The object of listinfodata.
     """
    return self.listinfodata_list[id]

def add_listinfodata(self, new_listinfodata):
    """Method to add listinfodata."""
    #if new_listinfodata.id not in self.listinfodata_list:
    self.listinfodata_list[new_listinfodata.id] = new_listinfodata

3. Add the following code as an import inside the 'iqoptionapi/api.py' file.
```python
from iqoptionapi.ws.objects.listinfodata import ListInfoData
  1. Add the following code on line 46 inside the 'iqoptionapi/api.py' file.
    listinfodata = ListInfoData()

Once done, you can use the new function by doing the following format, i.e. You can give the result by using the 'win' variable which returns either 'equal' (if the trade is ongoing or a draw), 'win' (if the trade was a win), or 'loose' (if the trade was a loss)

self.api.listinfodata.current_listinfodata.win

or

self.api.listinfodata.get_listinfodata(foo)

For more information on what you can actually get, you can use this JSON data that I've extracted myself while testing.

{"name":"listInfoData","msg":[{"amount":1000000,"id":2095724656,"refund":0,"currency":"USD","currency_char":"$","active_id":1,"active":"EURUSD","value":1.07736,"exp_value":1077360,"dir":"call","created":1489706346,"expired":1489706400,"type_name":"turbo","type":"front.TU","profit":100,"profit_amount":1,"win_amount":1.74,"loose_amount":0,"sum":1,"win":"equal","now":1489706346,"user_id":0,"game_state":0,"profit_income":174,"profit_return":0,"option_type_id":3,"site_id":1,"is_demo":false,"user_balance_id":0,"client_platform_id":9,"re_track":"null","params":null}]}
frxncisjoseph commented 7 years ago

If you need help then comment below and please leave a thumbs up!

santiagonn commented 7 years ago

Is is possible that you share your version of the api/bot with all these changes? Thanks a lot!! Do you know if its possible to run this in a demo account?

frxncisjoseph commented 7 years ago

Yes, I'm current running the api against my demo account with IQ Option. You can do this using the self.api.change_balance('practice'); method.

I will upload my own altered version of the api publicly to my repository to be forked.

santiagonn commented 7 years ago

@frxncisjoseph great thanks!

0xAalaoui commented 7 years ago

@frxncisjoseph can't wait to try your altered version of the api.

crypto-maniac commented 7 years ago

yeahhh !!!

AllenUchiha commented 7 years ago

great work

crypto-maniac commented 7 years ago

Hello Frxncisjoseph, could you please upload your altered version please? thx you :)

frxncisjoseph commented 7 years ago

@crypto-maniac I have already done so, you can find it available here.

I'll be updating the repository on a regular basis with newer and fulfilled features.

Feel free to make pull requests!

crypto-maniac commented 7 years ago

You rock !

frxncisjoseph commented 7 years ago

Keeping this BUMPED as it seems new comers are unaware of how to handle the incoming WS messages.

Aiacos commented 7 years ago

please make a pull request

shiundu commented 7 years ago

This is breaking

File "/Users/theHopeful/Projects/iqoptionapi/iqoptionapi/ws/objects/listinfodata.py", line 34, current_listinfodata return self.listinfodata_list[next(reversed(self.listinfodata_list))] StopIteration

@frxncisjoseph please help

jacekv commented 6 years ago

@shiundu The buy order is most probably the problem. I had the same issue when my buy order did not go through.

leonardoRampazzo commented 6 years ago

how can i use this self.api.listinfodata.get_listinfodata(foo), to get something like this {"name":"listInfoData","msg":[{"amount":1000000,"id":2095724656,"refund":0,"currency":"USD","currency_char":"$","active_id":1,"active":"EURUSD","value":1.07736,"exp_value":1077360,"dir":"call","created":1489706346,"expired":1489706400,"type_name":"turbo","type":"front.TU","profit":100,"profit_amount":1,"win_amount":1.74,"loose_amount":0,"sum":1,"win":"equal","now":1489706346,"user_id":0,"game_state":0,"profit_income":174,"profit_return":0,"option_type_id":3,"site_id":1,"is_demo":false,"user_balance_id":0,"client_platform_id":9,"re_track":"null","params":null}]}

I dont know what to use as parameter self.api.listinfodata.get_listinfodata(foo)

gwdm commented 6 years ago

if you execute a buy you will get a list info message when you enter the trade and again a listinfo record at expiry of the trade