From 34cb5a01191be4437340b5c32e4df32b9eb33ec9 Mon Sep 17 00:00:00 2001 From: vigo walker <59869868+theshadow76@users.noreply.github.com> Date: Wed, 21 Feb 2024 10:37:04 -0300 Subject: [PATCH 01/33] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 49de9f4..f7b3fc4 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -# Pocket Option API \ No newline at end of file +# Pocket Option API + +In development! From 8da59f0f216710d4dbf58e8686924b6ad3c62f3d Mon Sep 17 00:00:00 2001 From: vigo walker <59869868+theshadow76@users.noreply.github.com> Date: Sun, 25 Feb 2024 11:29:43 -0300 Subject: [PATCH 02/33] Create FUNDING.yml --- .github/FUNDING.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..78f3a66 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +github: theshadow76 +custom: ['https://paypal.me/shadowtechsc?country.x=CL&locale.x=es_XC]' From 3b91b4300f2b8279d3946b3b578db7fc00905435 Mon Sep 17 00:00:00 2001 From: vigo walker <59869868+theshadow76@users.noreply.github.com> Date: Fri, 8 Mar 2024 09:18:43 -0300 Subject: [PATCH 03/33] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index f7b3fc4..fcf364b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ # Pocket Option API In development! + +# help me + +you can donate here: [paypal](https://paypal.me/shadowtechsc?country.x=CL&locale.x=es_XC) + +or my BTC adress: bc1qmvpmpdt96vmgq3s3rh3gzxf75eml52r2d7sclw \ No newline at end of file From d4b932e72c2e587ab9553bbdc6c75ccdae0e52c7 Mon Sep 17 00:00:00 2001 From: vigo walker <59869868+theshadow76@users.noreply.github.com> Date: Fri, 8 Mar 2024 09:19:52 -0300 Subject: [PATCH 04/33] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fcf364b..73c7259 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,6 @@ In development! you can donate here: [paypal](https://paypal.me/shadowtechsc?country.x=CL&locale.x=es_XC) -or my BTC adress: bc1qmvpmpdt96vmgq3s3rh3gzxf75eml52r2d7sclw \ No newline at end of file +or my BTC adress: bc1qmvpmpdt96vmgq3s3rh3gzxf75eml52r2d7sclw + +By donating you are helping me make this project better! \ No newline at end of file From 4ef3eee6084534a6a888c2dcb683655477630ef1 Mon Sep 17 00:00:00 2001 From: Vigo Walker Date: Fri, 8 Mar 2024 13:36:52 -0300 Subject: [PATCH 05/33] cfghjn --- client_test.py | 8 +++++--- .../__pycache__/__init__.cpython-311.pyc | Bin 184 -> 170 bytes .../__pycache__/constants.cpython-311.pyc | Bin 2594 -> 2580 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 192 -> 178 bytes .../ws/__pycache__/__init__.cpython-311.pyc | Bin 195 -> 181 bytes .../ws/__pycache__/client.cpython-311.pyc | Bin 3854 -> 3837 bytes pocketoptionapi/backend/ws/client.py | 4 ++-- 7 files changed, 7 insertions(+), 5 deletions(-) diff --git a/client_test.py b/client_test.py index 3badb47..9d00291 100644 --- a/client_test.py +++ b/client_test.py @@ -2,12 +2,14 @@ import anyio from rich.pretty import pprint as print import json +from pocketoptionapi.constants import REGION -SESSION = r'42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"da7a5a82c8f6c35a87b2ee31d4f5b3b4\";s:10:\"ip_address\";s:10:\"90.36.9.15\";s:10:\"user_agent\";s:120:\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 OP\";s:13:\"last_activity\";i:1707667599;}3a0058a58a6df5e7b49f652f8e4f8249","isDemo":1,"uid":27658142,"platform":1}]' +SESSION = r'42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"a1dc009a7f1f0c8267d940d0a036156f\";s:10:\"ip_address\";s:12:\"190.162.4.33\";s:10:\"user_agent\";s:120:\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OP\";s:13:\"last_activity\";i:1709914958;}793884e7bccc89ec798c06ef1279fcf2","isDemo":0,"uid":27658142,"platform":1}]' async def websocket_client(url, pro): - while True: + for i in REGION.get_regions(REGION): + print(f"Trying {i}...") try: async with websockets.connect( url, @@ -23,7 +25,7 @@ async def websocket_client(url, pro): except Exception as e: print(e) print("Connection lost... reconnecting") - await anyio.sleep(5) + # await anyio.sleep(5) return True diff --git a/pocketoptionapi/__pycache__/__init__.cpython-311.pyc b/pocketoptionapi/__pycache__/__init__.cpython-311.pyc index 75e6432a1eea50747e8f551458197c256859b51c..d6f4f315e109033616919aaef9c8d10fb8d6190a 100644 GIT binary patch delta 41 vcmdnNxQdZ`IWI340}$|-zn;i#DrBo4TAW%`tY4Oyo?o7rlbu>LF(Co~-%1R9 delta 55 zcmZ3*xPy^77G9hQVog# delta 58 zcmbOtvPgt`IWI340}xEsKeds&msP<>KeRZts93)&Gd;gNF(*5}m diff --git a/pocketoptionapi/backend/__pycache__/__init__.cpython-311.pyc b/pocketoptionapi/backend/__pycache__/__init__.cpython-311.pyc index a6627c14cc1c612c68e1648757452203e3db8842..026da60c65cc7528936a7bc7354c02ffc9a1c350 100644 GIT binary patch delta 41 vcmX@WxQUT_IWI340}$|-zn;i#D&(pkTAW%`tY4Oyo?o7rlbu>LF(Cl};(837 delta 55 zcmdnQcz}_6IWI340}!-@9+=2&st~LnTAW%`tY4Oyo?o7rlbu?mpPZhNm0gyU2PBj7 ICI%${0M79ep#T5? diff --git a/pocketoptionapi/backend/ws/__pycache__/__init__.cpython-311.pyc b/pocketoptionapi/backend/ws/__pycache__/__init__.cpython-311.pyc index e6ebcc35f4a764bab91e4e42e4443cf1b26e9a45..e913397c8c7c0fa19f5a0745f2fbfa198493a0c9 100644 GIT binary patch delta 41 vcmX@ixRsH6IWI340}$|-zn;i#D&(ObTAW%`tY4Oyo?o7rlbu>LF(DZMe)-TIU&o58R$xbbr9LyNW$hmnf z<6}l4!HklUf?_Lu{epbGlA^?vRQ<^-nLq1r1I;MD%*ep-0tg!zJ}?Pzs(xVN=T*Hc zt$IaT_lAi02Q~&t#S2QNA6PdZV_{)qRM>o)tCES)da^6;0!EI>&v+b74joR^o20SGSEpHKbGzL8IrQ6WS>v^ce>SidYYJ-<9LCp)!BKRG=kE4wTy z4@f5EO?G9BWMtnwpYbuHq(nwZNkOrdzJ5V|a&~HoZcb)iwxOk7a{lBg%%9mffd&^} zoZQPI!|^~u;ewLQ2jo&s$^ocoNUCqfRSzTW!@b;=|Hs~m>C%vZ!ic> Ip2?R20D5^dEdT%j diff --git a/pocketoptionapi/backend/ws/client.py b/pocketoptionapi/backend/ws/client.py index 4a73830..b6e3547 100644 --- a/pocketoptionapi/backend/ws/client.py +++ b/pocketoptionapi/backend/ws/client.py @@ -14,8 +14,8 @@ async def websocket_client(self, url, pro): async with websockets.connect( url, extra_headers={ - "Origin": "https://pocket-link19.co", - # "Origin": "https://po.trade/" + # "Origin": "https://pocket-link19.co", + "Origin": "https://po.trade/" }, ) as websocket: async for message in websocket: From 8b940980aec2e119ae03c4f818a3928edf31bd25 Mon Sep 17 00:00:00 2001 From: vigo walker <59869868+theshadow76@users.noreply.github.com> Date: Sun, 7 Apr 2024 08:51:40 -0400 Subject: [PATCH 06/33] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 73c7259..9817d5c 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,12 @@ In development! +for a better understanding, check this [link](https://github.com/theshadow76/PocketOptionAPI/issues/4) + # help me you can donate here: [paypal](https://paypal.me/shadowtechsc?country.x=CL&locale.x=es_XC) or my BTC adress: bc1qmvpmpdt96vmgq3s3rh3gzxf75eml52r2d7sclw -By donating you are helping me make this project better! \ No newline at end of file +By donating you are helping me make this project better! From cfb51dcdc695d207602cb682d586dd61b96cd708 Mon Sep 17 00:00:00 2001 From: Vigo Walker Date: Wed, 10 Apr 2024 20:16:38 -0400 Subject: [PATCH 07/33] dhwahdwa --- client_test.py | 4 +- .../__pycache__/__init__.cpython-310.pyc | Bin 167 -> 156 bytes .../__pycache__/constants.cpython-310.pyc | Bin 0 -> 2012 bytes test/client_test_1.py | 62 ++++++++++++++++++ 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 pocketoptionapi/__pycache__/constants.cpython-310.pyc create mode 100644 test/client_test_1.py diff --git a/client_test.py b/client_test.py index 9d00291..556fa93 100644 --- a/client_test.py +++ b/client_test.py @@ -14,8 +14,8 @@ async def websocket_client(url, pro): async with websockets.connect( url, extra_headers={ - "Origin": "https://pocket-link19.co", - # "Origin": "https://po.trade/" + #"Origin": "https://pocket-link19.co", + "Origin": "https://po.trade/" }, ) as websocket: async for message in websocket: diff --git a/pocketoptionapi/__pycache__/__init__.cpython-310.pyc b/pocketoptionapi/__pycache__/__init__.cpython-310.pyc index a4861416af7f03305098732fc920247b9502297c..43270737fcb350d38ec8b9503302a86eec67104a 100644 GIT binary patch delta 60 zcmZ3^IERrZpO=@50SLBeilTx!465&9&B z{7^yIfhBGMA&B4zd1xOIg{YT^s27Td33idGeTH-7v?R@sc@TDBiAO*v0&V0e1WP>8 zNP+02NDMMXrpXMMC3B=i=HHb(m0TfLFOjE_C31}x+6q}D*Dnj6PHup&JSYFY!>(A`^eXsbaUUhcuRj+j9)Ef4l z?>4Fp+g<-jUi(R2_4N9Y>(;6xORHX?=Inv2X9mG=%{iz#dn1K4Ppg7{OMxCT8j_!a zwF^tE0~zY)=ruaWH_>zCA`Qj(>?THX#?Wx&*&ooh&M{E@zHoux;!|X*&KJBg{AH!g zny+aqF24#yxyQ;u9P_X_h-rDnRFh)XZQR6oLeFf@8Ba>pkwz+;N}>rGwG*{N&;CSQ z2KHsgIueu%>m)p8r$N-A+pYE`92ilm`Vm%QDy;xNGXUUB3 zAJbR{{(UUz{x$9z79DnVtG z59&vB0gap}vZ?>BxIgU6_U^PWU`9jo@&a5~!T=JZ59lL^CU#7m=vfHB;Z9nMjL7H{ zV>1f6O%iPXCb80pfrhugCIZ>|oE}4UL}fE#tsoNHz+?aubLq;|5?w$irzFv$P{dqj zmFOoyG@!y%co9TCD~Y^?oadRG^9m_3%b Date: Thu, 11 Apr 2024 08:50:55 -0400 Subject: [PATCH 08/33] Update client_test.py --- client_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client_test.py b/client_test.py index 556fa93..d3feefd 100644 --- a/client_test.py +++ b/client_test.py @@ -12,7 +12,7 @@ async def websocket_client(url, pro): print(f"Trying {i}...") try: async with websockets.connect( - url, + i, #teoria de los issues extra_headers={ #"Origin": "https://pocket-link19.co", "Origin": "https://po.trade/" From 97749c9bd257281a2dddef9b2e87a6ac0c1cdc89 Mon Sep 17 00:00:00 2001 From: chema2411 <130813519+chema2411@users.noreply.github.com> Date: Thu, 11 Apr 2024 11:12:49 -0400 Subject: [PATCH 09/33] Add files via upload --- pocketoptionapi/_.py | 0 pocketoptionapi/api.py | 274 ++++++++++++++++++ pocketoptionapi/candles.json | 17 ++ pocketoptionapi/constants.py | 200 +++++++++++-- pocketoptionapi/expiration.py | 80 +++++ pocketoptionapi/global_value.py | 19 ++ pocketoptionapi/stable_api.py | 271 +++++++++++++++++ .../ws/__pycache__/client.cpython-39.pyc | Bin 0 -> 5741 bytes .../chanels/__pycache__/base.cpython-39.pyc | Bin 0 -> 1129 bytes .../chanels/__pycache__/buyv3.cpython-39.pyc | Bin 0 -> 1648 bytes .../__pycache__/candles.cpython-39.pyc | Bin 0 -> 1288 bytes .../__pycache__/get_balances.cpython-39.pyc | Bin 0 -> 750 bytes .../chanels/__pycache__/ssid.cpython-39.pyc | Bin 0 -> 786 bytes pocketoptionapi/ws/chanels/base.py | 26 ++ pocketoptionapi/ws/chanels/buyv3.py | 61 ++++ pocketoptionapi/ws/chanels/candles.py | 42 +++ pocketoptionapi/ws/chanels/get_balances.py | 18 ++ pocketoptionapi/ws/chanels/ssid.py | 17 ++ pocketoptionapi/ws/client.py | 230 +++++++++++++++ .../objects/__pycache__/base.cpython-39.pyc | Bin 0 -> 789 bytes .../__pycache__/candles.cpython-39.pyc | Bin 0 -> 3779 bytes .../__pycache__/timesync.cpython-39.pyc | Bin 0 -> 2485 bytes pocketoptionapi/ws/objects/base.py | 17 ++ pocketoptionapi/ws/objects/candles.py | 113 ++++++++ pocketoptionapi/ws/objects/timesync.py | 71 +++++ test.py | 43 ++- 26 files changed, 1455 insertions(+), 44 deletions(-) create mode 100644 pocketoptionapi/_.py create mode 100644 pocketoptionapi/api.py create mode 100644 pocketoptionapi/candles.json create mode 100644 pocketoptionapi/expiration.py create mode 100644 pocketoptionapi/global_value.py create mode 100644 pocketoptionapi/stable_api.py create mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-39.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/base.cpython-39.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-39.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/candles.cpython-39.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-39.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-39.pyc create mode 100644 pocketoptionapi/ws/chanels/base.py create mode 100644 pocketoptionapi/ws/chanels/buyv3.py create mode 100644 pocketoptionapi/ws/chanels/candles.py create mode 100644 pocketoptionapi/ws/chanels/get_balances.py create mode 100644 pocketoptionapi/ws/chanels/ssid.py create mode 100644 pocketoptionapi/ws/client.py create mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-39.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-39.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-39.pyc create mode 100644 pocketoptionapi/ws/objects/base.py create mode 100644 pocketoptionapi/ws/objects/candles.py create mode 100644 pocketoptionapi/ws/objects/timesync.py diff --git a/pocketoptionapi/_.py b/pocketoptionapi/_.py new file mode 100644 index 0000000..e69de29 diff --git a/pocketoptionapi/api.py b/pocketoptionapi/api.py new file mode 100644 index 0000000..cb0d725 --- /dev/null +++ b/pocketoptionapi/api.py @@ -0,0 +1,274 @@ +"""Module for Pocket Option API.""" +import asyncio +import datetime +import time +import json +import logging +import threading +import requests +import ssl +import atexit +from collections import deque +from pocketoptionapi.ws.client import WebsocketClient +from pocketoptionapi.ws.chanels.get_balances import * + +from pocketoptionapi.ws.chanels.ssid import Ssid +# from pocketoptionapi.ws.chanels.subscribe import * +# from pocketoptionapi.ws.chanels.unsubscribe import * +# from pocketoptionapi.ws.chanels.setactives import SetActives +from pocketoptionapi.ws.chanels.candles import GetCandles +# from pocketoptionapi.ws.chanels.buyv2 import Buyv2 +from pocketoptionapi.ws.chanels.buyv3 import * +# from pocketoptionapi.ws.chanels.user import * +# from pocketoptionapi.ws.chanels.api_game_betinfo import Game_betinfo +# from pocketoptionapi.ws.chanels.instruments import Get_instruments +# from pocketoptionapi.ws.chanels.get_financial_information import GetFinancialInformation +# from pocketoptionapi.ws.chanels.strike_list import Strike_list +# from pocketoptionapi.ws.chanels.leaderboard import Leader_Board + +# from pocketoptionapi.ws.chanels.traders_mood import Traders_mood_subscribe +# from pocketoptionapi.ws.chanels.traders_mood import Traders_mood_unsubscribe +# from pocketoptionapi.ws.chanels.buy_place_order_temp import Buy_place_order_temp +# from pocketoptionapi.ws.chanels.get_order import Get_order +# from pocketoptionapi.ws.chanels.get_deferred_orders import GetDeferredOrders +# from pocketoptionapi.ws.chanels.get_positions import * + +# from pocketoptionapi.ws.chanels.get_available_leverages import Get_available_leverages +# from pocketoptionapi.ws.chanels.cancel_order import Cancel_order +# from pocketoptionapi.ws.chanels.close_position import Close_position +# from pocketoptionapi.ws.chanels.get_overnight_fee import Get_overnight_fee +# from pocketoptionapi.ws.chanels.heartbeat import Heartbeat + +# from pocketoptionapi.ws.chanels.digital_option import * +# from pocketoptionapi.ws.chanels.api_game_getoptions import * +# from pocketoptionapi.ws.chanels.sell_option import Sell_Option +# from pocketoptionapi.ws.chanels.change_tpsl import Change_Tpsl +# from pocketoptionapi.ws.chanels.change_auto_margin_call import ChangeAutoMarginCall + +from pocketoptionapi.ws.objects.timesync import TimeSync +# from pocketoptionapi.ws.objects.profile import Profile +from pocketoptionapi.ws.objects.candles import Candles +# from pocketoptionapi.ws.objects.listinfodata import ListInfoData +# from pocketoptionapi.ws.objects.betinfo import Game_betinfo_data +import pocketoptionapi.global_value as global_value +from collections import defaultdict + + +def nested_dict(n, type): + if n == 1: + return defaultdict(type) + else: + return defaultdict(lambda: nested_dict(n - 1, type)) + + +# InsecureRequestWarning: Unverified HTTPS request is being made. +# Adding certificate verification is strongly advised. +# See: https://urllib3.readthedocs.org/en/latest/security.html + + +class PocketOptionAPI(object): # pylint: disable=too-many-instance-attributes + """Class for communication with Pocket Option API.""" + + # pylint: disable=too-many-public-methods + socket_option_opened = {} + timesync = TimeSync() + # profile = Profile() + candles = Candles() + # listinfodata = ListInfoData() + api_option_init_all_result = [] + api_option_init_all_result_v2 = [] + # for digital + underlying_list_data = None + position_changed = None + instrument_quites_generated_data = nested_dict(2, dict) + instrument_quotes_generated_raw_data = nested_dict(2, dict) + instrument_quites_generated_timestamp = nested_dict(2, dict) + strike_list = None + leaderboard_deals_client = None + # position_changed_data = nested_dict(2, dict) + # microserviceName_binary_options_name_option=nested_dict(2,dict) + order_async = None + # game_betinfo = Game_betinfo_data() + instruments = None + financial_information = None + buy_id = None + buy_order_id = None + traders_mood = {} # get hight(put) % + order_data = None + positions = None + position = None + deferred_orders = None + position_history = None + position_history_v2 = None + available_leverages = None + order_canceled = None + close_position_data = None + overnight_fee = None + # ---for real time + digital_option_placed_id = None + live_deal_data = nested_dict(3, deque) + + subscribe_commission_changed_data = nested_dict(2, dict) + real_time_candles = nested_dict(3, dict) + real_time_candles_maxdict_table = nested_dict(2, dict) + candle_generated_check = nested_dict(2, dict) + candle_generated_all_size_check = nested_dict(1, dict) + # ---for api_game_getoptions_result + api_game_getoptions_result = None + sold_options_respond = None + tpsl_changed_respond = None + auto_margin_call_changed_respond = None + top_assets_updated_data = {} + get_options_v2_data = None + # --for binary option multi buy + buy_multi_result = None + buy_multi_option = {} + # + result = None + training_balance_reset_request = None + balances_raw = None + user_profile_client = None + leaderboard_userinfo_deals_client = None + users_availability = None + history_data = None + historyNew = None + + # ------------------ + + def __init__(self, proxies=None): + """ + :param dict proxies: (optional) The http request proxies. + """ + self.websocket_client = None + self.websocket_thread = None + # self.wss_url = "wss://api-us-north.po.market/socket.io/?EIO=4&transport=websocket" + self.session = requests.Session() + self.session.verify = False + self.session.trust_env = False + self.proxies = proxies + # is used to determine if a buyOrder was set or failed. If + # it is None, there had been no buy order yet or just send. + # If it is false, the last failed + # If it is true, the last buy order was successful + self.buy_successful = None + self.loop = asyncio.get_event_loop() + self.websocket_client = WebsocketClient(self) + + @property + def websocket(self): + """Property to get websocket. + + :returns: The instance of :class:`WebSocket `. + """ + return self.websocket_client + + def send_websocket_request(self, name, msg, request_id="", no_force_send=True): + """Send websocket request to IQ Option server. + + :param no_force_send: + :param request_id: + :param str name: The websocket request name. + :param dict msg: The websocket request msg. + """ + + logger = logging.getLogger(__name__) + + # data = json.dumps(dict(name=name, msg=msg, request_id=request_id)) + data = f'42{json.dumps(msg)}' + + while (global_value.ssl_Mutual_exclusion or global_value.ssl_Mutual_exclusion_write) and no_force_send: + + pass + global_value.ssl_Mutual_exclusion_write = True + + # self.websocket_client.send_message(data) + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + # Ejecutar la corutina connect dentro del bucle de eventos del nuevo hilo + loop.run_until_complete(self.websocket.send_message(data)) + + logger.debug(data) + global_value.ssl_Mutual_exclusion_write = False + + def start_websocket(self): + global_value.websocket_is_connected = False + global_value.check_websocket_if_error = False + global_value.websocket_error_reason = None + + # Obtener o crear un nuevo bucle de eventos para este hilo + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + # Ejecutar la corutina connect dentro del bucle de eventos del nuevo hilo + loop.run_until_complete(self.websocket.connect()) + loop.run_forever() + + while True: + try: + if global_value.check_websocket_if_error: + return False, global_value.websocket_error_reason + if global_value.websocket_is_connected is False: + return False, "Websocket connection closed." + elif global_value.websocket_is_connected is True: + return True, None + + except: + pass + pass + + def connect(self): + """Method for connection to Pocket Option API.""" + + global_value.ssl_Mutual_exclusion = False + global_value.ssl_Mutual_exclusion_write = False + + try: + self.close() + except: + pass + + check_websocket, websocket_reason = self.start_websocket() + + if not check_websocket: + return check_websocket, websocket_reason + + self.timesync.server_timestamps = None + while True: + try: + if self.timesync.server_timestamps is not None: + break + except: + pass + return True, None + + def close(self): + self.websocket.close() + self.websocket_thread.join() + + def websocket_alive(self): + return self.websocket_thread.is_alive() + + @property + def get_balances(self): + """Property for get IQ Option http getprofile resource. + + :returns: The instance of :class:`Login + `. + """ + return Get_Balances(self) + + # ____________for_______binary_______option_____________ + + @property + def buyv3(self): + return Buyv3(self) + + @property + def getcandles(self): + """Property for get IQ Option websocket candles chanel. + + :returns: The instance of :class:`GetCandles + `. + """ + return GetCandles(self) diff --git a/pocketoptionapi/candles.json b/pocketoptionapi/candles.json new file mode 100644 index 0000000..4519e16 --- /dev/null +++ b/pocketoptionapi/candles.json @@ -0,0 +1,17 @@ +{ + "asset": "AUDNZD_otc", + "index": 171201484810, + "data": + [ + { + "symbol_id": 70, + "time": 1712002800, + "open": 1.08567, + "close": 1.08553, + "high": 1.08586, + "low": 1.08475, + "asset": "AUDNZD_otc" + } + ], + "period": 60 +} diff --git a/pocketoptionapi/constants.py b/pocketoptionapi/constants.py index b3deb62..88cd61c 100644 --- a/pocketoptionapi/constants.py +++ b/pocketoptionapi/constants.py @@ -1,32 +1,168 @@ -import random - -class REGION: - - REGIONS = { - "SEYCHELLES": "wss://api-sc.po.market/socket.io/?EIO=4&transport=websocket", - "HONGKONG": "wss://api-hk.po.market/socket.io/?EIO=4&transport=websocket", - "SERVER1": "wss://api-spb.po.market/socket.io/?EIO=4&transport=websocket", - "FRANCE2": "wss://api-fr2.po.market/socket.io/?EIO=4&transport=websocket", - "UNITED_STATES4": "wss://api-us4.po.market/socket.io/?EIO=4&transport=websocket", - "UNITED_STATES3": "wss://api-us3.po.market/socket.io/?EIO=4&transport=websocket", - "UNITED_STATES2": "wss://api-us2.po.market/socket.io/?EIO=4&transport=websocket", - "RUSSIA": "wss://api-msk.po.market/socket.io/?EIO=4&transport=websocket", - "SERVER2": "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket", - "INDIA": "wss://api-in.po.market/socket.io/?EIO=4&transport=websocket", - "FRANCE": "wss://api-fr.po.market/socket.io/?EIO=4&transport=websocket", - "FINLAND": "wss://api-fin.po.market/socket.io/?EIO=4&transport=websocket", - "SERVER3": "wss://api-c.po.market/socket.io/?EIO=4&transport=websocket", - "ASIA": "wss://api-asia.po.market/socket.io/?EIO=4&transport=websocket", - } - - - def __getattr__(self, key): - try: - return self.REGIONS[key] - except KeyError: - raise AttributeError(f"'{self.REGIONS}' object has no attribute '{key}'") - - def get_regions(self, randomize: bool = True): - if randomize: - return sorted(list(self.REGIONS.values()), key=lambda k: random.random()) - return list(self.REGIONS.values()) \ No newline at end of file +import random + +ACTIVES = { + '#AAPL': 5, + '#AAPL_otc': 170, + '#AXP': 140, + '#AXP_otc': 291, + '#BA': 8, + '#BA_otc': 292, + '#CSCO': 154, + '#CSCO_otc': 427, + '#FB': 177, + '#FB_otc': 187, + '#INTC': 180, + '#INTC_otc': 190, + '#JNJ': 144, + '#JNJ_otc': 296, + '#JPM': 20, + '#MCD': 23, + '#MCD_otc': 175, + '#MSFT': 24, + '#MSFT_otc': 176, + '#PFE': 147, + '#PFE_otc': 297, + '#TSLA': 186, + '#TSLA_otc': 196, + '#XOM': 153, + '#XOM_otc': 426, + '100GBP': 315, + '100GBP_otc': 403, + 'AEX25': 449, + 'AMZN_otc': 412, + 'AUDCAD': 36, + 'AUDCAD_otc': 67, + 'AUDCHF': 37, + 'AUDCHF_otc': 68, + 'AUDJPY': 38, + 'AUDJPY_otc': 69, + 'AUDNZD_otc': 70, + 'AUDUSD': 40, + 'AUDUSD_otc': 71, + 'AUS200': 305, + 'AUS200_otc': 306, + 'BABA': 183, + 'BABA_otc': 428, + 'BCHEUR': 450, + 'BCHGBP': 451, + 'BCHJPY': 452, + 'BTCGBP': 453, + 'BTCJPY': 454, + 'BTCUSD': 197, + 'CAC40': 455, + 'CADCHF': 41, + 'CADCHF_otc': 72, + 'CADJPY': 42, + 'CADJPY_otc': 73, + 'CHFJPY': 43, + 'CHFJPY_otc': 74, + 'CHFNOK_otc': 457, + 'CITI': 326, + 'CITI_otc': 413, + 'D30EUR': 318, + 'D30EUR_otc': 406, + 'DASH_USD': 209, + 'DJI30': 322, + 'DJI30_otc': 409, + 'DOTUSD': 458, + 'E35EUR': 314, + 'E35EUR_otc': 402, + 'E50EUR': 319, + 'E50EUR_otc': 407, + 'ETHUSD': 272, + 'EURAUD': 44, + 'EURCAD': 45, + 'EURCHF': 46, + 'EURCHF_otc': 77, + 'EURGBP': 47, + 'EURGBP_otc': 78, + 'EURHUF_otc': 460, + 'EURJPY': 48, + 'EURJPY_otc': 79, + 'EURNZD_otc': 80, + 'EURRUB_otc': 200, + 'EURUSD': 1, + 'EURUSD_otc': 66, + 'F40EUR': 316, + 'F40EUR_otc': 404, + 'FDX_otc': 414, + 'GBPAUD': 51, + 'GBPAUD_otc': 81, + 'GBPCAD': 52, + 'GBPCHF': 53, + 'GBPJPY': 54, + 'GBPJPY_otc': 84, + 'GBPUSD': 56, + 'H33HKD': 463, + 'JPN225': 317, + 'JPN225_otc': 405, + 'LNKUSD': 464, + 'NASUSD': 323, + 'NASUSD_otc': 410, + 'NFLX': 182, + 'NFLX_otc': 429, + 'NZDJPY_otc': 89, + 'NZDUSD_otc': 90, + 'SMI20': 466, + 'SP500': 321, + 'SP500_otc': 408, + 'TWITTER': 330, + 'TWITTER_otc': 415, + 'UKBrent': 50, + 'UKBrent_otc': 164, + 'USCrude': 64, + 'USCrude_otc': 165, + 'USDCAD': 61, + 'USDCAD_otc': 91, + 'USDCHF': 62, + 'USDCHF_otc': 92, + 'USDJPY': 63, + 'USDJPY_otc': 93, + 'USDRUB_otc': 199, + 'VISA_otc': 416, + 'XAGEUR': 103, + 'XAGUSD': 65, + 'XAGUSD_otc': 167, + 'XAUEUR': 102, + 'XAUUSD': 2, + 'XAUUSD_otc': 169, + 'XNGUSD': 311, + 'XNGUSD_otc': 399, + 'XPDUSD': 313, + 'XPDUSD_otc': 401, + 'XPTUSD': 312, + 'XPTUSD_otc': 400, +} + + +class REGION: + REGIONS = { + # "EUROPA": "wss://api-eu.po.market/socket.io/?EIO=4&transport=websocket", + # "SEYCHELLES": "wss://api-sc.po.market/socket.io/?EIO=4&transport=websocket", + # "HONGKONG": "wss://api-hk.po.market/socket.io/?EIO=4&transport=websocket", + # "SERVER1": "wss://api-spb.po.market/socket.io/?EIO=4&transport=websocket", + # "FRANCE2": "wss://api-fr2.po.market/socket.io/?EIO=4&transport=websocket", + # "UNITED_STATES4": "wss://api-us4.po.market/socket.io/?EIO=4&transport=websocket", + # "UNITED_STATES3": "wss://api-us3.po.market/socket.io/?EIO=4&transport=websocket", + # "UNITED_STATES2": "wss://api-us2.po.market/socket.io/?EIO=4&transport=websocket", + "UNITED_STATES": "wss://api-us-north.po.market/socket.io/?EIO=4&transport=websocket", + # "RUSSIA": "wss://api-msk.po.market/socket.io/?EIO=4&transport=websocket", + # "SERVER2": "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket", + # "INDIA": "wss://api-in.po.market/socket.io/?EIO=4&transport=websocket", + # "FRANCE": "wss://api-fr.po.market/socket.io/?EIO=4&transport=websocket", + # "FINLAND": "wss://api-fin.po.market/socket.io/?EIO=4&transport=websocket", + # "SERVER3": "wss://api-c.po.market/socket.io/?EIO=4&transport=websocket", + # "ASIA": "wss://api-asia.po.market/socket.io/?EIO=4&transport=websocket", + # "SERVER4": "wss://api-us-south.po.market/socket.io/?EIO=4&transport=websocket" + } + + def __getattr__(self, key): + try: + return self.REGIONS[key] + except KeyError: + raise AttributeError(f"'{self.REGIONS}' object has no attribute '{key}'") + + def get_regions(self, randomize: bool = True): + if randomize: + return sorted(list(self.REGIONS.values()), key=lambda k: random.random()) + return list(self.REGIONS.values()) diff --git a/pocketoptionapi/expiration.py b/pocketoptionapi/expiration.py new file mode 100644 index 0000000..88927dd --- /dev/null +++ b/pocketoptionapi/expiration.py @@ -0,0 +1,80 @@ +import time +from datetime import datetime, timedelta + +# https://docs.python.org/3/library/datetime.html If optional argument tz is None or not specified, the timestamp is +# converted to the platform's local date and time, and the returned datetime object is naive. time.mktime( +# dt.timetuple()) + + +from datetime import datetime, timedelta +import time + + +def date_to_timestamp(date): + """Convierte un objeto datetime a timestamp.""" + return int(date.timestamp()) + + +def get_expiration_time(timestamp, duration): + """ + Calcula el tiempo de expiración más cercano basado en un timestamp dado y una duración. + El tiempo de expiración siempre terminará en el segundo:30 del minuto. + + :param timestamp: El timestamp inicial para el cálculo. + :param duration: La duración deseada en minutos. + """ + # Convertir el timestamp dado a un objeto datetime + now_date = datetime.fromtimestamp(timestamp) + + # Ajustar los segundos a: 30 si no lo están ya, de lo contrario, pasar al siguiente: 30 + if now_date.second < 30: + exp_date = now_date.replace(second=30, microsecond=0) + else: + exp_date = (now_date + timedelta(minutes=1)).replace(second=30, microsecond=0) + + # Calcular el tiempo de expiración teniendo en cuenta la duración + if duration > 1: + # Si la duración es más de un minuto, calcular el tiempo final agregando la duración + # menos un minuto, ya que ya hemos ajustado para terminar en: 30 segundos. + exp_date += timedelta(minutes=duration - 1) + + # Sumar dos horas al tiempo de expiración + exp_date += timedelta(hours=2) + # Convertir el tiempo de expiración a timestamp + expiration_timestamp = date_to_timestamp(exp_date) + + return expiration_timestamp + + +def get_remaning_time(timestamp): + now_date = datetime.fromtimestamp(timestamp) + exp_date = now_date.replace(second=0, microsecond=0) + if (int(date_to_timestamp(exp_date+timedelta(minutes=1)))-timestamp) > 30: + exp_date = exp_date+timedelta(minutes=1) + + else: + exp_date = exp_date+timedelta(minutes=2) + exp = [] + for _ in range(5): + exp.append(date_to_timestamp(exp_date)) + exp_date = exp_date+timedelta(minutes=1) + idx = 11 + index = 0 + now_date = datetime.fromtimestamp(timestamp) + exp_date = now_date.replace(second=0, microsecond=0) + while index < idx: + if int(exp_date.strftime("%M")) % 15 == 0 and (int(date_to_timestamp(exp_date))-int(timestamp)) > 60*5: + exp.append(date_to_timestamp(exp_date)) + index = index+1 + exp_date = exp_date+timedelta(minutes=1) + + remaning = [] + + for idx, t in enumerate(exp): + if idx >= 5: + dr = 15*(idx-4) + else: + dr = idx+1 + remaning.append((dr, int(t)-int(time.time()))) + + return remaning \ No newline at end of file diff --git a/pocketoptionapi/global_value.py b/pocketoptionapi/global_value.py new file mode 100644 index 0000000..f5e1c7c --- /dev/null +++ b/pocketoptionapi/global_value.py @@ -0,0 +1,19 @@ +# python +websocket_is_connected = False +# try fix ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2361) +ssl_Mutual_exclusion = False # mutex read write +# if false websocket can sent self.websocket.send(data) +# else can not sent self.websocket.send(data) +ssl_Mutual_exclusion_write = False # if thread write + +SSID = None + +check_websocket_if_error = False +websocket_error_reason = None + +balance_id = None +balance = None +balance_type = None +balance_updated = None +result = None +order_data = {} diff --git a/pocketoptionapi/stable_api.py b/pocketoptionapi/stable_api.py new file mode 100644 index 0000000..214b184 --- /dev/null +++ b/pocketoptionapi/stable_api.py @@ -0,0 +1,271 @@ +# This is a sample Python script. +import asyncio +import threading + +from tzlocal import get_localzone + +from pocketoptionapi.api import PocketOptionAPI +import pocketoptionapi.constants as OP_code +# import pocketoptionapi.country_id as Country +# import threading +import time +import logging +import operator +import pocketoptionapi.global_value as global_value +from collections import defaultdict +from collections import deque +# from pocketoptionapi.expiration import get_expiration_time, get_remaning_time +import pandas as pd + +# Obtener la zona horaria local del sistema como una cadena en el formato IANA +local_zone_name = get_localzone() + + +def nested_dict(n, type): + if n == 1: + return defaultdict(type) + else: + return defaultdict(lambda: nested_dict(n - 1, type)) + + +def get_balance(): + # balances_raw = self.get_balances() + return global_value.balance + + +class PocketOption: + __version__ = "6.8.9.1" + + def __init__(self, ssid): + self.size = [1, 5, 10, 15, 30, 60, 120, 300, 600, 900, 1800, + 3600, 7200, 14400, 28800, 43200, 86400, 604800, 2592000] + global_value.SSID = ssid + self.suspend = 0.5 + self.thread = None + self.subscribe_candle = [] + self.subscribe_candle_all_size = [] + self.subscribe_mood = [] + # for digit + self.get_digital_spot_profit_after_sale_data = nested_dict(2, int) + self.get_realtime_strike_list_temp_data = {} + self.get_realtime_strike_list_temp_expiration = 0 + self.SESSION_HEADER = { + "User-Agent": r"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) " + r"Chrome/66.0.3359.139 Safari/537.36"} + self.SESSION_COOKIE = {} + self.api = PocketOptionAPI() + self.loop = asyncio.get_event_loop() + + # + + # --start + # self.connect() + # this auto function delay too long + + # -------------------------------------------------------------------------- + + def get_server_timestamp(self): + return self.api.timesync.server_timestamp + + def get_server_datetime(self): + return self.api.timesync.server_datetime + + def set_session(self, header, cookie): + self.SESSION_HEADER = header + self.SESSION_COOKIE = cookie + + def get_async_order(self, buy_order_id): + # name': 'position-changed', 'microserviceName': "portfolio"/"digital-options" + if self.api.order_async["deals"][0]["id"] == buy_order_id: + return self.api.order_async["deals"][0] + else: + return None + + def get_async_order_id(self, buy_order_id): + return self.api.order_async["deals"][0][buy_order_id] + + def start_async(self): + asyncio.run(self.api.connect()) + + def connect(self): + """ + Método síncrono para establecer la conexión. + Utiliza internamente el bucle de eventos de asyncio para ejecutar la coroutine de conexión. + """ + try: + # Iniciar el hilo que manejará la conexión WebSocket + websocket_thread = threading.Thread(target=self.api.connect, daemon=True) + websocket_thread.start() + + except Exception as e: + print(f"Error al conectar: {e}") + return False + return True + + @staticmethod + def check_connect(): + # True/False + if global_value.websocket_is_connected == 0: + return False + elif global_value.websocket_is_connected is None: + return False + else: + return True + + # wait for timestamp getting + + # self.update_ACTIVES_OPCODE() + @staticmethod + def get_balance(): + if global_value.balance_updated: + return global_value.balance + else: + return None + + def buy(self, amount, ACTIVES, ACTION, expirations): + self.api.buy_multi_option = {} + self.api.buy_successful = None + req_id = "buy" + try: + self.api.buy_multi_option[req_id]["id"] = None + except: + pass + global_value.order_data = None + global_value.result = None + self.api.buyv3( + amount, ACTIVES, ACTION, expirations, req_id) + start_t = time.time() + while global_value.result is None or global_value.order_data is None: + if time.time() - start_t >= 5: + logging.error(global_value.order_data["error"]) + return False, None + + return global_value.result, global_value.order_data["id"] + + def check_win(self, id_number): + """Return amount of deals and win/lose status.""" + + while True: + try: + order_info = self.get_async_order(id_number) + if order_info["id"] is not None: + break + except: + pass + + # Determina el estado de win/lose basado en el profit. + status = "win" if order_info["profit"] > 0 else "lose" + return order_info["profit"], status + + @staticmethod + def last_time(timestamp, period): + # Divide por 60 para convertir a minutos, usa int() para truncar al entero más cercano (redondear hacia abajo), + # y luego multiplica por 60 para volver a convertir a segundos. + timestamp_redondeado = (timestamp // period) * period + return int(timestamp_redondeado) + + def get_candles(self, ACTIVES, period, end_time, count=9000, count_request=1): + """ + Realiza múltiples peticiones para obtener datos históricos de velas y los procesa. + Devuelve un Dataframe ordenado de menor a mayor por la columna 'time'. + + :param ACTIVES: El activo para el cual obtener las velas. + :param period: El intervalo de tiempo de cada vela en segundos. + :param count: El número de segundos a obtener en cada petición, max: 9000 = 150 datos. + :param end_time: El tiempo final para la última vela. + :param count_request: El número de peticiones para obtener más datos históricos. + """ + + time_sync = self.get_server_timestamp() - period + time_red = self.last_time(time_sync, period) + print(time_red) + data_temp = [] + self.api.candles = data_temp + + if self.api.historyNew is not None: + data_temp.extend(self.process_data_history(self.api.historyNew, period)) + + for i in range(count_request): + self.api.history_data = None + while True: + try: + self.api.getcandles(ACTIVES, period, count, time_red) + while self.check_connect and self.api.history_data is None: + pass + if self.api.history_data is not None: + data_temp.extend(self.api.history_data) + break + + except: + logging.error('**error** get_candles need reconnect') + # self.connect() + + # Ajusta el tiempo de inicio para la próxima petición + time_red -= count + + return self.api.candles + + def process_data_history(self, data, period): + """ + Este método toma datos históricos, los convierte en un DataFrame de pandas, redondea los tiempos al minuto más cercano, + y calcula los valores OHLC (Open, High, Low, Close) para cada minuto. Luego, convierte el resultado en un diccionario + y lo devuelve. + + :param dict data: Datos históricos que incluyen marcas de tiempo y precios. + :param int period: Periodo en minutos + :return: Un diccionario que contiene los valores OHLC agrupados por minutos redondeados. + """ + # Crear DataFrame + df = pd.DataFrame(data['history'], columns=['timestamp', 'price']) + # Convertir a datetime y redondear al minuto + df['datetime'] = pd.to_datetime(df['timestamp'], unit='s', utc=True) + df['datetime'] = df['datetime'].dt.tz_convert(str(local_zone_name)) + df['minute_rounded'] = df['datetime'].dt.floor(f'{period/60}T') + + # Calcular OHLC + ohlcv = df.groupby('minute_rounded').agg( + open=('price', 'first'), + high=('price', 'max'), + low=('price', 'min'), + close=('price', 'last') + ).reset_index() + + ohlcv['time'] = ohlcv['minute_rounded'].apply(lambda x: int(x.timestamp())) + ohlcv = ohlcv.drop(columns='minute_rounded') + + ohlcv_dict = ohlcv.to_dict(orient='records') + + return ohlcv_dict + + @staticmethod + def process_candle(candle_data, period): + """ + Resumen: Este método estático de Python, denominado `process_candle`, toma datos de velas financieras y un período de tiempo específico como entrada. + Realiza varias operaciones de limpieza y organización de datos utilizando pandas, incluyendo la ordenación por tiempo, eliminación de duplicados, + y reindexación. Además, verifica si las diferencias de tiempo entre las entradas consecutivas son iguales al período especificado y retorna tanto el DataFrame procesado + como un booleano indicando si todas las diferencias son iguales al período dado. Este método es útil para preparar y verificar la consistencia de los datos de velas financieras + para análisis posteriores. + + Procesa los datos de las velas recibidos como entrada. + Convierte los datos de entrada en un DataFrame de pandas, los ordena por tiempo de forma ascendente, + elimina duplicados basados en la columna 'time', y reinicia el índice del DataFrame. + Adicionalmente, verifica si las diferencias de tiempo entre las filas consecutivas son iguales al período especificado, + asumiendo que el período está dado en segundos, e imprime si todas las diferencias son de 60 segundos. + :param list candle_data: Datos de las velas a procesar. + :param int period: El período de tiempo entre las velas, usado para la verificación de diferencias de tiempo. + :return: DataFrame procesado con los datos de las velas. + """ + # Convierte los datos en un DataFrame y los añade al DataFrame final + data_df = pd.DataFrame(candle_data) + # datos_completos = pd.concat([datos_completos, data_df], ignore_index=True) + # Procesa los datos obtenidos + data_df.sort_values(by='time', ascending=True, inplace=True) + data_df.drop_duplicates(subset='time', keep="first", inplace=True) + data_df.reset_index(drop=True, inplace=True) + data_df.fillna(method='ffill', inplace=True) + data_df.drop(columns='symbol_id', inplace=True) + # Verificación opcional: Comprueba si las diferencias son todas de 60 segundos (excepto el primer valor NaN) + diferencias = data_df['time'].diff() + diff = (diferencias[1:] == period).all() + return data_df, diff + diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-39.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42a9c1a9ee42af347c1c2927e771f2ba1a4e307f GIT binary patch literal 5741 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 ZNw0u+fqDC{Tf(scuTylgZa$wc{1^MsuNwdW literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/base.cpython-39.pyc b/pocketoptionapi/ws/chanels/__pycache__/base.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..946781e1c531fcc9ae4b1995cb209f929e839390 GIT binary patch literal 1129 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. + """ + self.api = api + + def send_websocket_request(self, name, msg, request_id=""): + """Send request to Pocket Option server websocket. + + :param request_id: + :param str name: The websocket chanel name. + :param list msg: The websocket chanel msg. + + :returns: The instance of :class:`requests.Response`. + """ + + return self.api.send_websocket_request(name, msg, request_id) diff --git a/pocketoptionapi/ws/chanels/buyv3.py b/pocketoptionapi/ws/chanels/buyv3.py new file mode 100644 index 0000000..f39fa99 --- /dev/null +++ b/pocketoptionapi/ws/chanels/buyv3.py @@ -0,0 +1,61 @@ +import datetime +import json +import time +from pocketoptionapi.ws.chanels.base import Base +import logging +import pocketoptionapi.global_value as global_value +from pocketoptionapi.expiration import get_expiration_time + + +class Buyv3(Base): + name = "sendMessage" + + def __call__(self, amount, active, direction, duration, request_id): + + # thank Darth-Carrotpie's code + # https://github.com/Lu-Yi-Hsun/iqoptionapi/issues/6 + exp = get_expiration_time(int(self.api.timesync.server_timestamps), duration) + """if idx < 5: + option = 3 # "turbo" + else: + option = 1 # "binary""" + # Construir el diccionario + data_dict = { + "asset": active, + "amount": amount, + "action": direction, + "isDemo": 1, + "requestId": request_id, + "optionType": 100, + "time": duration + } + + message = ["openOrder", data_dict] + + self.send_websocket_request(self.name, message, str(request_id)) + + +class Buyv3_by_raw_expired(Base): + name = "sendMessage" + + def __call__(self, price, active, direction, option, expired, request_id): + + # thank Darth-Carrotpie's code + # https://github.com/Lu-Yi-Hsun/iqoptionapi/issues/6 + + if option == "turbo": + option_id = 3 # "turbo" + elif option == "binary": + option_id = 1 # "binary" + data = { + "body": {"price": price, + "active_id": active, + "expired": int(expired), + "direction": direction.lower(), + "option_type_id": option_id, + "user_balance_id": int(global_value.balance_id) + }, + "name": "binary-options.open-option", + "version": "1.0" + } + self.send_websocket_request(self.name, data, str(request_id)) diff --git a/pocketoptionapi/ws/chanels/candles.py b/pocketoptionapi/ws/chanels/candles.py new file mode 100644 index 0000000..62dcc76 --- /dev/null +++ b/pocketoptionapi/ws/chanels/candles.py @@ -0,0 +1,42 @@ +"""Module for Pocket option candles websocket chanel.""" + +from pocketoptionapi.ws.chanels.base import Base +import time +import random + + +def index_num(): + # El número mínimo sería 100000000000 (12 dígitos) + minimo = 5000 + # El número máximo sería 999999999999 (12 dígitos) + maximo = 10000 - 1 + # Generar y retornar un número aleatorio dentro del rango + return random.randint(minimo, maximo) + + +class GetCandles(Base): + """Class for Pocket option candles websocket chanel.""" + # pylint: disable=too-few-public-methods + + name = "sendMessage" + + def __call__(self, active_id, interval, count, end_time): + """Method to send message to candles websocket chanel. + + :param active_id: The active/asset identifier. + :param interval: The candle duration (timeframe for the candles). + :param count: The number of candles you want to have + """ + + # {"asset": "AUDNZD_otc", "index": 171201484810, "time": 1712002800, "offset": 9000, "period": 60}] + data = { + "asset": str(active_id), + "index": end_time, + "time": end_time, + "offset": count, # number of candles + "period": interval, # time size sample:if interval set 1 mean get time 0~1 candle + } + + data = ["loadHistoryPeriod", data] + + self.send_websocket_request(self.name, data) diff --git a/pocketoptionapi/ws/chanels/get_balances.py b/pocketoptionapi/ws/chanels/get_balances.py new file mode 100644 index 0000000..97659bb --- /dev/null +++ b/pocketoptionapi/ws/chanels/get_balances.py @@ -0,0 +1,18 @@ +from pocketoptionapi.ws.chanels.base import Base +import time + + +class Get_Balances(Base): + name = "sendMessage" + + def __call__(self): + """ + :param options_ids: list or int + """ + + data = {"name": "get-balances", + "version": "1.0" + } + print("get_balances in get_balances.py") + + self.send_websocket_request(self.name, data) diff --git a/pocketoptionapi/ws/chanels/ssid.py b/pocketoptionapi/ws/chanels/ssid.py new file mode 100644 index 0000000..62582ae --- /dev/null +++ b/pocketoptionapi/ws/chanels/ssid.py @@ -0,0 +1,17 @@ +"""Module for Pocket Option API ssid websocket chanel.""" + +from pocketoptionapi.ws.chanels.base import Base + + +class Ssid(Base): + """Class for Pocket Option API ssid websocket chanel.""" + # pylint: disable=too-few-public-methods + + name = "ssid" + + def __call__(self, ssid): + """Method to send message to ssid websocket chanel. + + :param ssid: The session identifier. + """ + self.send_websocket_request(self.name, ssid) diff --git a/pocketoptionapi/ws/client.py b/pocketoptionapi/ws/client.py new file mode 100644 index 0000000..92067c9 --- /dev/null +++ b/pocketoptionapi/ws/client.py @@ -0,0 +1,230 @@ +import asyncio +from datetime import datetime, timedelta, timezone + +import websocket +import websockets +import json +import logging +import ssl + +# Suponiendo la existencia de estos módulos basados en tu código original +import pocketoptionapi.constants as OP_code +import pocketoptionapi.global_value as global_value +from pocketoptionapi.constants import REGION +from pocketoptionapi.ws.objects.timesync import TimeSync + +logger = logging.getLogger(__name__) + +timesync = TimeSync() + + +async def on_open(): # pylint: disable=unused-argument + """Method to process websocket open.""" + print("CONECTADO CON EXITO") + logger = logging.getLogger(__name__) + logger.debug("Websocket client connected.") + global_value.websocket_is_connected = True + + +async def send_pin(ws): + while global_value.websocket_is_connected is False: + await asyncio.sleep(0.1) + pass + while True: + await asyncio.sleep(20) + await ws.send('42["ps"]') + + +class WebsocketClient(object): + def __init__(self, api) -> None: + """ + Inicializa el cliente WebSocket. + + + :param ssid: El ID de sesión para la autenticación. + :param url: La URL del WebSocket a la que conectarse. + """ + + self.updateHistoryNew = None + self.updateStream = None + self.history_data_ready = None + self.successcloseOrder = False + self.api = api + self.message = None + self.url = None + self.ssid = global_value.SSID + self.websocket = None + self.region = REGION() + self.loop = asyncio.get_event_loop() + self.esperar_segundo_mensaje = False + self.recibido_updateClosedDeals = False + + async def websocket_listener(self, ws): + async for message in ws: + await self.on_message(message) + + async def connect(self): + ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + while global_value.websocket_is_connected is False: + for url in self.region.get_regions(True): + print(url) + try: + async with websockets.connect(url, extra_headers={"Origin": "https://m.pocketoption.com"}) as ws: + + print("Conectado a: ", url) + self.websocket = ws + self.url = url + on_message_task = asyncio.create_task(self.websocket_listener(ws)) + sender_task = asyncio.create_task(send_pin(ws)) + message_task = asyncio.create_task(self.send_message(self.message)) + await asyncio.gather(on_message_task, sender_task, message_task) + except websockets.ConnectionClosed as e: + await self.on_close(e) + except Exception as e: + await self.on_error(e) + + return True + + async def send_message(self, message): + while global_value.websocket_is_connected is False: + await asyncio.sleep(0.1) + pass + + self.message = message + + if global_value.websocket_is_connected: + + if message is not None: + await self.websocket.send(message) + + else: + logging.warning("WebSocked not connected") + + @staticmethod + def dict_queue_add(self, dict, maxdict, key1, key2, key3, value): + if key3 in dict[key1][key2]: + dict[key1][key2][key3] = value + else: + while True: + try: + dic_size = len(dict[key1][key2]) + except: + dic_size = 0 + if dic_size < maxdict: + dict[key1][key2][key3] = value + break + else: + # del mini key + del dict[key1][key2][sorted(dict[key1][key2].keys(), reverse=False)[0]] + + async def on_message(self, message): # pylint: disable=unused-argument + """Method to process websocket messages.""" + # global_value.ssl_Mutual_exclusion = True + logger = logging.getLogger(__name__) + logger.debug(message) + + # message = json.loads(str(message)) + + if type(message) is bytes: + # Paso 1: Decodificar los bytes a una cadena de texto (string) + message = message.decode('utf-8') + message = json.loads(message) + + # print(message, type(message)) # [:1000000]) + if "balance" in message: + global_value.balance_id = message["uid"] + global_value.balance = message["balance"] + global_value.balance_type = message["isDemo"] + + elif "requestId" in message and message["requestId"] == 'buy': + global_value.order_data = message + + # Supongamos que este es el segundo mensaje de interés basado en tu lógica + elif self.esperar_segundo_mensaje and isinstance(message, list): + self.esperar_segundo_mensaje = False # Restablecer para futuros mensajes + self.recibido_updateClosedDeals = False # Restablecer el estado + + elif self.esperar_segundo_mensaje and isinstance(message, dict) and self.successcloseOrder: + self.api.order_async = message + self.successcloseOrder = False # Restablecer para futuros mensajes + self.esperar_segundo_mensaje = False # Restablecer el estado + + elif self.history_data_ready and isinstance(message, dict): + self.history_data_ready = False + self.api.history_data = message["data"] + + elif self.updateStream and isinstance(message, list): + self.updateStream = False + self.api.timesync.server_timestamp = message[0][1] + # print("server_timestamp asignado:", timesync.server_timestamp) + + elif self.updateHistoryNew and isinstance(message, dict): + self.updateHistoryNew = False + self.api.historyNew = message + + return + + else: + pass + # print(message) + + if message.startswith('0{"sid":"'): + # print(f"{self.url.split('/')[2]} got 0 sid send 40") + await self.websocket.send("40") + elif message == "2": + # print(f"{self.url.split('/')[2]} got 2 send 3") + await self.websocket.send("3") + + elif message.startswith('40{"sid":"'): + # print(f"{self.url.split('/')[2]} got 40 sid send session") + await self.websocket.send(self.ssid) + + elif message.startswith('451-['): + # Eliminar el prefijo numérico y el guion para obtener el JSON válido + json_part = message.split("-", 1)[1] + + # Convertir la parte JSON a un objeto Python + message = json.loads(json_part) + + if message[0] == "successauth": + await on_open() + elif message[0] == "successupdateBalance": + global_value.balance_updated = True + elif message[0] == "successopenOrder": + global_value.result = True + + # Si es el primer mensaje de interés + elif message[0] == "updateClosedDeals": + # Establecemos que hemos recibido el primer mensaje de interés + self.recibido_updateClosedDeals = True + self.esperar_segundo_mensaje = True # Establecemos que esperamos el segundo mensaje de interés + await self.websocket.send('42["changeSymbol",{"asset":"AUDNZD_otc","period":60}]') + + elif message[0] == "successcloseOrder": + self.successcloseOrder = True + self.esperar_segundo_mensaje = True # Establecemos que esperamos el segundo mensaje de interés + + elif message[0] == "loadHistoryPeriod": + self.history_data_ready = True + + elif message[0] == "updateStream": + self.updateStream = True + + elif message[0] == "updateHistoryNew": + self.updateHistoryNew = True + + async def on_error(self, error): # pylint: disable=unused-argument + """Method to process websocket errors.""" + logger = logging.getLogger(__name__) + logger.error(error) + global_value.websocket_error_reason = str(error) + global_value.check_websocket_if_error = True + + async def on_close(self, error): # pylint: disable=unused-argument + """Method to process websocket close.""" + logger = logging.getLogger(__name__) + logger.debug("Websocket connection closed.") + global_value.websocket_is_connected = False diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-39.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b7ca3ed30069b594bf5622c03b38e9b0742a261 GIT binary patch literal 789 zcma)4v2NQi5G5sAR+M<}$e~LXbvJ?_ZBlfqV<4Rb0asb16DPK*kTL=b+2T*h;$PC5 zz3AMjca$5XX@?wehr1(n_uiw5!60F1KYk|DN6y$26)#O-af0sNVNfh%Uzp-5*f14n z{t#w?3NP59Xg+*3YBkq#YOEZa@)p2{oG1%l8Dn!Jx$M<8nU zJOS#C@THI=r2uULu<*YM<_7?`t75)8=>sTJ0@ywcjH?|NOR~IJN77r`X-Ne7KONnO ixd`Jh;J!OL4DA6n+o%)UH~%-IjgLAs$281i7vXRI*uBjF literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/candles.cpython-39.pyc b/pocketoptionapi/ws/objects/__pycache__/candles.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..063c3461acbc861d8a44551bedf718751d9967c6 GIT binary patch literal 3779 zcmc&%TW{k;6rOP$$IYef?sf|+E;Toyyaa)ekfO3I6mb#SP^pVRR)y<&CT+S-oSku~ z8uhJ}_67J2@YsLB@9-;6{R_OnIWxB7wDrBa3#bQF|5mfmxG>o`}QD%g6Xt)L?UlUeg<~d;|ubfp}6Z%zVLEqvA^sB74L)!NA zqsI}Ogxu*z!r6|3r#yDPAIF1epc)N<82XUTI7}t2=4w zj(y<|9sLTA`LW-1o*Z%~9LU&-`ssjlaHNy3>RnKG&C`B)USVNpR?k;kJm7X}PN-q66~zc(6NGfrwOqeCQv`T^$s;tKTR)j+_J7A^KZRJQ(s$J%`;D zJf4V=)D+Fl$@mobA%Xk$f{H5I2wgWdu#$`zeDw-E(B50qyQ%m3tsV|90N{rb0Dx-b z{Njg`|AkSUnSr^?!3ZR}3<@rNr5p+lF97Ao5-33!Nq##lb5nCL7=9I*8^JVF;?>%X z0-AgCfl=cNz$uH&;o#u#c4&$-b1;~M%E4rt441xNz;b1i;qU@bc1j`>M#r~9Qka+n z!J|?Rq@G3vR(?>xac4dzFj@}dU08PthaD0P7V0?sBT0Qb#UXpY_vKN{rPOxuD4ss4S{Kgl`rH4CGhn z4n87unObzZnxZLJLCon}*(y8;Kogyoob62bOC<2cw**i?+#xq^^EBN`h4MReN2$0q zUCRIzX;|QD^V(w`A4Uv?T;@Wa!srQ1>~I8?Fgxg*Vsl0*KHGt+y{X)|0~C39eq)tW z@Dg#RuT{U!zKxfN{y@MbO5-TKMGQtV_D2E7%T`y#xVxt*$T`PEvN?E`Uy3@%vXfql zIw?yXz2xEE?2e{xA{T}_g935g90%oOdWHKbM_!x7p*UedK7O0$1Mbq%h`l^Q;2#DN zZGH~a9T~Eg2?(d$ifKU2XayFGc5Ek3;85~C;SO)TB)lb@OFL+B>xc~8#b?h_K97Yz zPNjdCM$d)zf6VkGo%zR;L>!&ZBL7UBsA45OnTkjcU&H6f!GPw@ccBsy&YF*1PSgt! z1OYe%p#=6TG6sO$e(42{XccfSY2XTX+U72TGqVrV)MpoF=$Ixk_=>@s8uB>Z9!R!}= z+1j~st_etBTIgL)0EK-Jc)B#?YdmJq&Rc4p2`TZg++%Dqn`p*@9ah0*Y!)UWcW__+ zLF2U&@^>K_zE?U-vixCVQM|||GDOcAg&XjW67d+u4r3AWXY7Xj{lnA!(cyV?8p`BQ zrsz&JD*Rr!{o8CZ%8a*D69ys7&(x^!yc(HrLr@H}bLj$s9yH}aN9Z&(NJ`81bDzM`rOy4|0~2{LD#S84!d2yeDJ9q=8@d4yB(17-BokG18D^ zw^Cfwt0+R?bZ%v`++|Yjqm4{fl-?q2qJM|Y@*u;dkpx*N!^EG=w4Y37b1lkrSlIvy z)%vhbpac0Hpsqr%UG85Ey!)W@$&%fgH?RPiz`F+mCbFhexcjCyr+?7+1t?d!|6v`C8x(K1 z0p_wUQ}4>YCT05l@*n)`w0RQ)G?Z%#I1>H~NbV-jaaH0aQJ6r_vsi3of3HERKJx1Z z{YS@e6c+yBCe1+~YZewL#_}#>iTQm1xyRUV^Dr(~+KlluV$2kY+{?b+fkt!GJNf!~3$}{T1Fvrv5pWM?I@&{{!rs BZ2 self.candle_close: + return "red" + + +class Candles(Base): + """Class for Pocket Option Candles websocket object.""" + + def __init__(self): + super(Candles, self).__init__() + self.__name = "candles" + self.__candles_data = None + + @property + def candles_data(self): + """Property to get candles data. + + :returns: The list of candles data. + """ + return self.__candles_data + + @candles_data.setter + def candles_data(self, candles_data): + """Method to set candles data.""" + self.__candles_data = candles_data + + @property + def first_candle(self): + """Method to get first candle. + + :returns: The instance of :class:`Candle + `. + """ + return Candle(self.candles_data[0]) + + @property + def second_candle(self): + """Method to get second candle. + + :returns: The instance of :class:`Candle + `. + """ + return Candle(self.candles_data[1]) + + @property + def current_candle(self): + """Method to get current candle. + + :returns: The instance of :class:`Candle + `. + """ + return Candle(self.candles_data[-1]) diff --git a/pocketoptionapi/ws/objects/timesync.py b/pocketoptionapi/ws/objects/timesync.py new file mode 100644 index 0000000..34bed24 --- /dev/null +++ b/pocketoptionapi/ws/objects/timesync.py @@ -0,0 +1,71 @@ +"""Module for Pocket Option TimeSync websocket object.""" + +import time +import datetime + +from pocketoptionapi.ws.objects.base import Base + + +class TimeSync(Base): + """Class for Pocket Option TimeSync websocket object.""" + + def __init__(self): + super(TimeSync, self).__init__() + self.__name = "timeSync" + self.__server_timestamp = time.time() + self.__expiration_time = 1 + + @property + def server_timestamp(self): + """Property to get server timestamp. + + :returns: The server timestamp. + """ + return self.__server_timestamp + + @server_timestamp.setter + def server_timestamp(self, timestamp): + """Method to set server timestamp.""" + self.__server_timestamp = timestamp + + @property + def server_datetime(self): + """Property to get server datetime. + + :returns: The server datetime. + """ + return datetime.datetime.fromtimestamp(self.server_timestamp) + + @property + def expiration_time(self): + """Property to get expiration time. + + :returns: The expiration time. + """ + return self.__expiration_time + + @expiration_time.setter + def expiration_time(self, minutes): + """Method to set expiration time + + :param int minutes: The expiration time in minutes. + """ + self.__expiration_time = minutes + + @property + def expiration_datetime(self): + """Property to get expiration datetime. + + :returns: The expiration datetime. + """ + return self.server_datetime + datetime.timedelta(minutes=self.expiration_time) + + @property + def expiration_timestamp(self): + """Property to get expiration timestamp. + + :returns: The expiration timestamp. + """ + return time.mktime(self.expiration_datetime.timetuple()) + + diff --git a/test.py b/test.py index fb0f44c..b71d8d3 100644 --- a/test.py +++ b/test.py @@ -1,12 +1,31 @@ -from pocketoptionapi.backend.ws.client import WebSocketClient -import anyio - -data = r'42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"d8fa39dd2f2f58e34e8640fd61f054c2\";s:10:\"ip_address\";s:14:\"90.36.9.15\";s:10:\"user_agent\";s:101:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\";s:13:\"last_activity\";i:1707850603;}9f383935faff5a86bc1658bbde8c61e7","isDemo":1,"uid":27658142,"platform":3}]' - -async def main(): - url = "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket" - wb = WebSocketClient(session=data) - await wb.websocket_client(url=url, pro=wb.pro) - -if __name__ == '__main__': - anyio.run(main) \ No newline at end of file +import random +import time + +from pocketoptionapi.stable_api import PocketOption + +ssid = (r'') +api = PocketOption(ssid) + + +def direction(): + # Selecciona aleatoriamente entre 'call' y 'put' + return random.choice(['call', 'put']) + + +if __name__ == "__main__": + api.connect() + time.sleep(2) + + print(api.check_connect(), "check connect") + + data_candles = api.get_candles("AUDNZD_otc", 60, time.time(), count_request=1) + + data, diff = api.process_candle(data_candles, 60) + print(data) + print(diff) + data.to_csv('datos_AUDNZD_otc_test.csv', index=False) + while api.check_connect(): + print(api.get_server_timestamp(), "server datetime") + time.sleep(1) + + # Cierra la conexión con la API From 4957615f2e0a8317ba250f240b915e850b370ef0 Mon Sep 17 00:00:00 2001 From: Vigo Walker Date: Thu, 11 Apr 2024 14:30:56 -0400 Subject: [PATCH 10/33] little update --- .gitignore | 3 +- .../__pycache__/api.cpython-310.pyc | Bin 0 -> 6278 bytes .../__pycache__/constants.cpython-310.pyc | Bin 2012 -> 5521 bytes .../__pycache__/expiration.cpython-310.pyc | Bin 0 -> 1804 bytes .../__pycache__/global_value.cpython-310.pyc | Bin 0 -> 430 bytes .../__pycache__/stable_api.cpython-310.pyc | Bin 0 -> 9602 bytes pocketoptionapi/constants.py | 32 +++++++++--------- pocketoptionapi/stable_api.py | 14 ++++---- .../ws/__pycache__/client.cpython-310.pyc | Bin 0 -> 5860 bytes .../chanels/__pycache__/base.cpython-310.pyc | Bin 0 -> 1134 bytes .../chanels/__pycache__/buyv3.cpython-310.pyc | Bin 0 -> 1629 bytes .../__pycache__/candles.cpython-310.pyc | Bin 0 -> 1293 bytes .../__pycache__/get_balances.cpython-310.pyc | Bin 0 -> 760 bytes .../chanels/__pycache__/ssid.cpython-310.pyc | Bin 0 -> 791 bytes pocketoptionapi/ws/chanels/get_balances.py | 2 +- .../objects/__pycache__/base.cpython-310.pyc | Bin 0 -> 794 bytes .../__pycache__/candles.cpython-310.pyc | Bin 0 -> 3698 bytes .../__pycache__/timesync.cpython-310.pyc | Bin 0 -> 2472 bytes test.py | 23 ++++--------- 19 files changed, 33 insertions(+), 41 deletions(-) create mode 100644 pocketoptionapi/__pycache__/api.cpython-310.pyc create mode 100644 pocketoptionapi/__pycache__/expiration.cpython-310.pyc create mode 100644 pocketoptionapi/__pycache__/global_value.cpython-310.pyc create mode 100644 pocketoptionapi/__pycache__/stable_api.cpython-310.pyc create mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-310.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/base.cpython-310.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-310.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/candles.cpython-310.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-310.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-310.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-310.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-310.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-310.pyc diff --git a/.gitignore b/.gitignore index f905755..5b0c2f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ env -pocket.log \ No newline at end of file +pocket.log +.env \ No newline at end of file diff --git a/pocketoptionapi/__pycache__/api.cpython-310.pyc b/pocketoptionapi/__pycache__/api.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40e90640c8c90504112991e64ed5ebbbf6be0f9d GIT binary patch literal 6278 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 Q_TT<2C)$6poG{G(FGRFpnE(I) delta 677 zcmZ`%&ui2`7@bVAv)La>w!76;K|~NCcgY$7-fR>(QY2RVubvV zV!l)q8;JZK5)e=l!bzV11$9b5y`WqHB_g)=6Zc8*TJn5ZC^iuJCQ?kWn{Wz>^n(WL z1z=DF9ZFD!3RJ-W6RZy=SD^+=Q^GZ9LL)95P*{dr(*kF38((&3#zL>}ZwKO2Wlj7> zbgPbdi}-?gY&c?!sG5$5%#L_(u8FURhn6Fbtd6*})+e^f%aOO+-SP$lFXH;vcF=#0 z;Kj%bUwYvRFK&iz(Dho}+zI@l*V~JR?$C>#F6j1xZgCdwM3L`aC$)IN4|=HC-#`rZ zgT}xOde3^Oe`&c~T18`;??IgN9hW<{A$m9&smIgH19S$ue$zRB;4^ZJX4bY>N4*Y?vi z$r}HnTavYu1 F=^t*!ipu~1 diff --git a/pocketoptionapi/__pycache__/expiration.cpython-310.pyc b/pocketoptionapi/__pycache__/expiration.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c2c89cd37f352b89dbd8ebc241cf190d29aa162 GIT binary patch literal 1804 zcmZ`(&2Jnv6t_KJ-pM9x(x_Q3WmHs&6_B(72`NH|DsVt5r4s68RTQ~nXPNGN)#Gi_ zYUaXn;L19=Dj1Nf^x5JPIRpi44GL-ft)pvYe(N*fi;@~C+JLYX2u zHyViutyV^4c!jg$9lW?bn??=9USS2Z=2?$p(v){b$J9}?X2 z6=@ulNM8os%6PRir;S^?P(ePs2PF<87zZMaXQ_x(3RP2C33XIamtLHl{*_1B>9UGq zrDKs7(Q{D=Swt$wx?f}qr3c|_kcmjnw6F(vt@-cYXSPCTT17_bEXjpFU7}TpqEeGt zE{pvy?n5ML1j?Byc0+4zzZ6kNgY+Y8}sns30AdP^0$6CKqagob*ElXlubc>bM(KfKhRJFpZ29SBb z7BgLqe2wdN{YV$tMZq*;x(&1{Qvsz#s9TtfJdNOh2006|<#};@i12DTTuR4nU!w04 zaTd%S;b`L4M47`I8@E7FAqjh-GoVApoh@g>;ml?FLl9r4-L1s?76>R=JnJ@ClU zuL&0+zG6di#4y8`f7Ai=uHfsRO^efQ~+LH8GVFMYXK;|cK5ZdT2OkJWE?P5V|^;crRM_t<%;9qBjoTcg; U?9d9!%E^EZ0#3QZz5Yl40i1fhU;qFB literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/global_value.cpython-310.pyc b/pocketoptionapi/__pycache__/global_value.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd1f37562de55b3de258f2f0155217175af25e03 GIT binary patch literal 430 zcmZvY%}N6?5XY14+SawD7t!Jy^q`C2QAAOM9@Ikd(o0B_X$_5=B_I8GBws04-@=o# z!9ouv{QfiZKg=X!`u&15=X|&rWQ2UD;y@_o_lUbek!03DkxbHA3uBJ)2x%i7q>CIQ zg(9;PNvC9#J-?26@oWQgXT%CTQ;rE!RUkabcsKEqU|0wgnfo zkA<-kEJKrj5!=UAB>8zP-yK+2uGP|PxL$!RC+U-Kwa0%vOvabjWt|+89A2w(sSVCy iYpw%a)w|fe{WLOYxNCOphA27Bv%H05DWj-(yYv^j`-2+* literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/stable_api.cpython-310.pyc b/pocketoptionapi/__pycache__/stable_api.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9de6f9b5e7d5a0c6aad2be5cf99f400dafe04d6 GIT binary patch literal 9602 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 U_)rb)9MnA=Vw%EgHrccO0tsU!SO5S3 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-310.pyc b/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad63c18f474ecb077a3ebb6441366b2225e1feed GIT binary patch literal 1629 zcmZ`(PjA~c6elT4lpH5r+pNusbUk#~;6v;cyADIw4JbNbX@PAQT?koZT_v*QlCnJq z@+tioIkd;#_IY^SDd!%BZI``ArHv7E68OmX`1tt#{2uG=?Hm9gbOokb>pIJTF)z-a}3W#h5b=aYnK@Pa;|OjM5VoYhFia`X4-KKKTYbHuAUmD z%^)@b*mFSvHiB$cxEM9;s>taKyTN3BgZRgvSkNotqfYpq5VF5h(P2$ z0#jH3zUVPCLb0`|B19W-+lsFRV30KgG1dmJ=^N4tKr0~il&bJ7!sb%(S>O@L0g)jf zGHRm@L?(x6*v!qiKKB@k#zmExmBH%=kqc+0$f5KI%!S4x3*Uy|HKsk?=?Wzqz$NUa z*XB@RInK(g%29A~r?Yp^>DeKI_JTPH9t^)81dfkuwelHv0-$OE<^y4_fq55}^->$x zpOiJ&l#8sKYuCFpZ*GECSFBIb;l$iR!B~POl;Wqc=9Ov0ye(H&HG4@8}wZa z?r7{@$B%4XnH>HYo6n7jamtKqbswfgjWP=;Xsf-ArLI+@IsRS%pEI0PGrb&FYeZBT{H~#eVPizD`}b)J1-+-5h*~5c=9E7YG4)1CDtFgrgks zfa5Z#aE=2nhh>WENKNS0{7G?GgyrN#<$Wvy-cHyqSc4~3xsKW7BVe18+mhh9_=G)?6IZdQ>GIYYc>7 zf>*HafcQ&Lpd%mH1{`x6h(LJ&X~#T(G-F6{$caxek07|%b)N~l*?O9+ZI{PUX(`-NEbDwcf`ANu^J2jxr>KFOU2#QQZfEq8msilPV>`tFLa@?+THLu zqvzv5wKyCJV;!jhHq@OMQ4aE@^ZdAE5wnXL%r5Z;8n=Wq%bKQciLa|mC@ol7Qo073 zxdJ5a;-KB}S(04Clj}cwD_h*&2H)`1qoCAvDXp5326=_j!x1azUpka>RZyz0f@SS} zTmax3O?wpD&x5~VypSLgkPxQAE4_}s1t-L?ZSV8_S2%5JqbPW6V({_ Zn?IL4YVke};F?(hLeL6M0@&f|(hm{uTWSCR literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-310.pyc b/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75e0094817e5bfb30131c48e23e321ecf5eb53c3 GIT binary patch literal 760 zcmZ8f!EVz)5ZzsGLX^57Re*W|A2Fylxkd<;a;P{EDj_butTx_lFx}YhuG5GpoZ7zt zB)A~)OMB(SFK~ew$E_kpn$gaB=FNMat#)^Z1nka}{nHWsn7my(Mw)H&m0DdVVCGp5&Nq8-wH!-0efqB%_LCOi}Ds z!4=84;)vqIW8H`&X=Isem+d%Rs@K{%Inz0iy)lGCqA$VSV+e{O&=>ZJHb87mKa;QQ z5=gJfH@YSt*qVN4AfX3C`m50}>TFy~E9X&FH$_!CQ7AW#OyQcSvQbesH+8FUrkjIl z$7>aglBY5Ayp(h8Z(V5XpndfK*fvpD6j^<~(5`XOI#RNc<7g5GzE@j-_4iSiSn8>( z@-q&#~<%vAC{3lk}Z~G3iAytCrH7X`7z3y>D9TFHT+^jMBQj*@%&K zkuF`Dzn7&pE(QAHntoD$^aCMsX^ap9{DU}x^%(8{y&dea)xGT{B-fP_SP!(JW+D7g zh1gh5Z>KeJI1mpA_NpjY(aAccLKTyp+F=MMNFhXbIodVyS9(qUv|z|vC_eV zK*<}SYpHkzDrWAS$U-!XG;=#Udo$mBGu3oDW+eCS&wp^nes<1|k$65tg-2*COPJ+W zyPlE4m5SvcH0JFe_1cWPdFbyB70u2JvmCaX&I^5m@o$gEns zGw37f(v&WbeqnkR@>aew;8JpSMWAzt3J=gYmT*KOEXRr>kv)cF&{uEeDHhl~J<1Kh ze?e#^K})IDwa}RuI6{SeG*|2^>PLRXzhVEDW4~gvICjmlvZ|>RxYDY^0hopB{C_q( z9;>Y!)W(~lHAdsody0XdUne)-j<5?)$yHr8n(5Jn-SUG4~S(?IOT!PEz zo-luBeuSUjuj3EkJj9=}MYT5hx$|*9lzt{SlE+Wtx*JB-P07?*yoR_R48%lARA06u zty7cdT2F`!VrGA^nG)I2bz~L}=@~)Mx*cm>bc=xJiPje@lW!w?TH7ks+7B^{rv>bw z?wDJ27oedRKz)pu?Egjo+`AX=RLv~ OxcUsJmShugC-?)}e9DCY literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/get_balances.py b/pocketoptionapi/ws/chanels/get_balances.py index 97659bb..627ad38 100644 --- a/pocketoptionapi/ws/chanels/get_balances.py +++ b/pocketoptionapi/ws/chanels/get_balances.py @@ -13,6 +13,6 @@ def __call__(self): data = {"name": "get-balances", "version": "1.0" } - print("get_balances in get_balances.py") + print(f"sent balance requests | data: {data}") self.send_websocket_request(self.name, data) diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-310.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7aed546c655c8c850a81e650eadae760827e391c GIT binary patch literal 794 zcma)4v2N5r5Z$%+e8$O9AtmJ&G%2t}8zB^k1WLhi641CAeBQm_#JM%QK2EXHd=jO^fW@trgF!yoPif%yr#JH((^&fYS`Rj^?y z(EK*c0~LN?N21H#8MUglTo@~7ro7axeBZQ{S<2Ui({ionZm631g)ZB)M7TdJ#M247 zdx}A`oMW><@jO)6V#9KwM@p#ChTZZ!QV}*C_kysy^t3LV`~S{J^Uf#_&`;4FDWTX6 z1B{5zr(2%y0rdb_7FT-9d*O7w*fKl9Pk+A2J~?e&_N_WM>!QBYHXEo9%wNsUo;}YR zPuqAcil)leE*m6p*&LD6=DLpos%6yz#54tslkjdrebe7J<-?)r?1zppxnUQ6;O_Ix znnv69TDC@>;|?C`E{R8)BywlRR<|p=bjR}J7ws>lS^V`^diTAh=`8KaOE3f)p%;X_ zhnXi3McpG$fT~km6>_8$picm<{9D0%AK>e%sCPGG0A)%5J0`%m*>SNX%e{7_y``R( tM4$)iHy1O(<1h#xb6=kxg?1nB`e=~b7ypIQ$1jF?UJ{%mJi(rXzW`+(yGZ~5 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/candles.cpython-310.pyc b/pocketoptionapi/ws/objects/__pycache__/candles.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97cb2be76edecc61e4ec09f971941a28b165effd GIT binary patch literal 3698 zcmc&%&2QT_6c=S#R^*SQS(dizwrJR=G0aAX0Rw`r>lR=`F*FO16&rMzqKI_jM6p~_ zZV)541n6bk->@C?FX_5d&bjT{?B3B|w5SAF20ykMI4Sqh{0Au-(4XJF9Ej zzj9F+446NHF1~_+YOY2J)kAWmyE@T+)M$ko=NdIw<*ecwu&z=Q)+WQO1#H~=BR?aooU{z|+>bZ7CTodLdt;u-}<`!L$a|`A+t;_iW%p0^R z=Qhk+bWzUhbO`|5N=&8acx@x}g_wgQkT^Pl4*Fyb=h!!(U!jpt$*Jan{oqP{{H^Vz zZGGr-|Hx5Sc+`*mb?29T=7fC_J5ev)5DxBi@>81^#9i@}UY=Jt+}0CAu&|fZ3qM|H z+yV{$d)$307#H2={k`be4-XmdDu*b4e7E)Zi~HT7^h6{*L~@fMGUjK?QV965XNMAWyO zxPQbtc8+_Uvv|Y@LfL3aCNn6<5AiAt7lfNQN9<}qWpm5m)r;`MmDJuGFQ?k8TRq$^ z1;8O#(2q|`)CMdA=eZw_u2sG$nL)VBA@D}7yF@Vs0FU0r{T2+f>f`3M>i=4zeh@~2 z-Aw-}(HsDpRQg~pfJSO!d3G&F@Yb{g^&-`l?#f}&&&0CP+^fGoK1=%=~< zGY<$iuT_7$!~SY1_kIsp{e*ICToa3!NN7WMNLr z*9Kpr`Zh2Fgtbu`AMwfXhVQE=nE`aGdz`U>Tj7juwspRQFqUz6UAW*)UxSdqY}_yn z(jW#gUd{#%ify(VnBfNg5%avn_PirWVK8ra-m{S(raLvyqfy{_9Is5QVVc8u6Lpzr zwSvo49Avmo@=+es9N!xzEAc)ImSzx3*G-$~wb|YxQZ@jwsfHI|6TibyB*hn64>%i$ z(V8Jf^PmRQIHAcJwQ_1)pmt7;b=pwW_(C%@w+?=7CN=e3#Q1(0C#C|ga{DXq3N^QnnSG221Rg8c$_N*j zk)iclwTbnM0;TrgAHylI{-4tpfI>JL&^KoSES2~tILu43O{HE6-bb;|U>Luxj43)( z``2RsYZ`kn;+zfMoc}LhLMsQ~O7%<8ALQs)GxXB}?FPStGIw!!2Zwt&VCLcP;((!( zm=JR@q&Hb$wDIT9@#kimv;r1}S>lq}>jM6t zH;s^63iP!9Avxw>(sievd)sO6QIf6M&eq8wMT(E)_r3R#&q=r2CivXl9Zs5r{AoJ1 z%7ON`P}CPtaS{+txfRoZnzt2L@U~-n;sg#QKM?Nl#w)@b!nv@62Dc7L&&@u6lJHq9 z{9z*fgCsf;+W$G#qh#tIjV9voY#RBe;#d_U$?;f3y8i~YBl|s?JKu*&MA)l8cG*!c zp&YtH4hcFyZ9DfW2H9ti<4~#p#WA8aO4vqLSk%W*X`<;lxv(y+D?-8T z=Y-kXxpb}ww7|7cyPNBu*@Os|qdAsK#GI-I2W{o0^-nT}+LkuwI@5FI7rA-r3RMaZAAYx37mgI{48HFz<4 zmYjz1iI9UL>_ybSJNWUFPY0<9cVcu9rlY~B8Wf>d1G71(qMx2g7Z`M)C=aSl>e4p+ zvRf68e#LFYm*|McP~PGS=VXkYqS@hrOu#Yv%-4zk41`$l_2+#1?Y3V&kEGBuIaQDR zqvv9cVP$tsC4!T9kmTmP+JaWTz3k81@b#?)mFs5r<}8-2BDAO;Y-2HOaFcV?0w@9) zS=rtbp`Rxl`KWb#_T?>@(zE0Syz$BOm38m+(8Cb7X4Esi|Gb` zP4a0d!-+qdYJW1C&a^1Szcc|1s`38(xa`Y&X0t+Q&2s*-%ur$jD22@272jjNF)~Bs zcx*Kt!&Nu7IsJp)#Y1dmPnX43gI5LhU1GAZt>V(7@&WAIbL1|(d1B^Vo)J8t&=TzhK_Z}tJ|PnQSn(!L_)Vf*c0_|Ff?yEvd`JokVj;co!R z-N^}#%7@r7w}zgju~^G~r$%bN z?Dtt1mm^KacoH#YQbO*fX$jKe+>U( hB;G`3ZViNiV{(P}Rl)pgynhs4^bYYX53uame*=3DYCQk| literal 0 HcmV?d00001 diff --git a/test.py b/test.py index b71d8d3..56541af 100644 --- a/test.py +++ b/test.py @@ -1,10 +1,12 @@ import random import time - +import dotenv from pocketoptionapi.stable_api import PocketOption - -ssid = (r'') +import os +dotenv.load_dotenv() +ssid = os.getenv("SSID") api = PocketOption(ssid) +print(ssid) def direction(): @@ -15,17 +17,4 @@ def direction(): if __name__ == "__main__": api.connect() time.sleep(2) - - print(api.check_connect(), "check connect") - - data_candles = api.get_candles("AUDNZD_otc", 60, time.time(), count_request=1) - - data, diff = api.process_candle(data_candles, 60) - print(data) - print(diff) - data.to_csv('datos_AUDNZD_otc_test.csv', index=False) - while api.check_connect(): - print(api.get_server_timestamp(), "server datetime") - time.sleep(1) - - # Cierra la conexión con la API + print(f"Get balance: {api.get_balance()}") From b6f2a3a47356816ef152d5c3b803a26a7fdf68b8 Mon Sep 17 00:00:00 2001 From: Vigo Walker Date: Thu, 11 Apr 2024 16:03:54 -0400 Subject: [PATCH 11/33] update --- .../ws/__pycache__/client.cpython-310.pyc | Bin 5860 -> 6579 bytes pocketoptionapi/ws/client.py | 36 ++++++++++++++++-- test.py | 3 -- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-310.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-310.pyc index c28c3f9014f7b9905df7253fa94fa6934dcc1878..4a47856922695d645780853742327123f6b54dc9 100644 GIT binary patch delta 2159 zcmZuyO>7%Q6rPz~ukH2vCywpd`Ktp>)1bz*39XWeJ*`eDakT|quKP1*88prZeU>l*EAot-*-i^aKkQgTR2a`rz_}E#^@k5nL!PZA~a4@bpKzhZ$tm5nz_=+ z?etQ~F1tBl%MCLj=ZqyoyaWNxZ~tz5Llfcv$YKH^hwvhRd=x006bEsN=PC{%Od{+> z7(qxNOd((}kw!R-kVQBGAnye)j)_-rdKBRpK$F_L_NL-q+CFH$L4D}Iuw4t?p!Ak} zY@Lr9Km=f@s?s%irZ-z#CE^EdT}f6; z+tRdH?)y?(*W55SxWCRmjjBS6Kq2Z4D99^>2Xvy7x<)~oA%|+jxzt@>Nb;asdL9A> zGlZLqOn?k2L{SSB8WU@74>0jM6Kfo5wh&X;yQ9CO^a;@40sAB%-k(&VPuV5gJ`k-2 zbXqia%o|FThNZ0xE|n@|+ClrpgPlbmD64+33PXaCmgT}gVX$pGBp&WWe5h=P+6fG! zMUcQ7-@~H~Dr!H&BH67G9&6CE@Je2XJEnqA-UIu7+}6f-Yr(x2-2ZOr0iXLHi$sHd zM#TrP*z-KeBMpYBw(q(RkK3a)wS&|m1H%D#Z=LK)0{7Rav|~ICM=;t>4*87Yrxd@h zi|<$bIi7}t=~WnOZ)0G0lDvk229-lznI>BfUEzk5c24o>E`C_?Lh=1w{2s+`D1Hd} z&KS>DN6*{tjS9zhwIV9Bwj(RllBw9fsd24oUN0^c%d>W&#KoI^?SecW8d$1k75>#wfj#d#4Wz z)TpgI+knMup!gGpgY6i01N&gma1GdpB}Wqn%$-zUmhU7o!_TCpb<*O@^%V?ArkXf6 z7fK6y8~Tz3csT?DhWO0Bb@jC2A<@j}WD5#m^xrDuIA{Sdf+_vmtT7MzgDm zq(-Tfs3#;^rWY>AJ|Yf)d`7Cotp_BoK|)p4TMt!xYo$tkGv1ge!mIga_IuyF@4Z>? z4nF#Q#_Sk|DzKmHE&X%onR%;VF2G$Pga`|vh->t2A(&2NtYLji*hHa%4Qy@+VHsPv z0<((8a1~|^ix-6{d+?^PCDIqlZTgpNqt6E?%a2hxEX|XZ>nrVbdP8mmQz$f&+Zl_)TW96SV9~D7GRb^q0aMu&$vl?3LS%9r8^xD+ zybAFp(ANMF%yv}gx>~+xn9U(;BlX4_4>@41_{_?V+&rmA?u|_Eag_(EG8Cu|l`TKo zmunm3;V9)pu5IK6j59@9=%U_!toIRl1|A1`2eHvda{|^jW(5QjbcwJDegB+?tzr0W z6t-7j`>SCbFnEVztdD*`p zyR#wqAFjjkPvnKMo}E<@QkOY@co*+-zKQGbP{uf#c?;g&0(o|y>yL6}4cD*mXF2Sj z+3e%t&v@9`Wz*pNEa$yl{5a>o=6r+kJ7a49`Xr6eI6Yr|k3On4(K-4{^(C654{9e4 zhU&HWM%-RZq7_W$;GY@lJ4Cj2E1`eZrqF5X+ux&Y+Oz#ikxYY#1Pn|7`pRxhybp_S zVWe9C;&*C6MS4*cRiwa*UBz+Qte=r|v4V8ksxN2-5c2n6T7dT;P@)n>nH0%Xc8<6T zQ6Nmp4A_TaTS^G&5PHEm^Wil{GGk(mpu$!s0A9mL*$$`y+}XA6(I4wI`m5upBhTQz z>zA;Y6(flrbI+bF?eQZTOQ<`z3Hve@eXV|xde8PZz z4Yu_(i?fx*n@P6Z!DN>4?C5yyu)TCl1pS9O`*^_rEBnfMX| Qen3a)bMGf~nJ)P8{|OX26aWAK diff --git a/pocketoptionapi/ws/client.py b/pocketoptionapi/ws/client.py index 92067c9..d015b46 100644 --- a/pocketoptionapi/ws/client.py +++ b/pocketoptionapi/ws/client.py @@ -59,6 +59,21 @@ def __init__(self, api) -> None: self.esperar_segundo_mensaje = False self.recibido_updateClosedDeals = False + async def reconnect(self): + regs = self.region.get_regions() + for i in regs: + print(f"Reconnecting to {i}...") + async with websockets.connect(i, extra_headers={"Origin": "https://m.pocketoption.com"}) as ws: + + print("Conectado a: ", i) + self.websocket = ws + self.url = i + on_message_task = asyncio.create_task(self.websocket_listener(ws)) + sender_task = asyncio.create_task(send_pin(ws)) + message_task = asyncio.create_task(self.send_message(self.message)) + await asyncio.gather(on_message_task, sender_task, message_task) + + async def websocket_listener(self, ws): async for message in ws: await self.on_message(message) @@ -139,6 +154,15 @@ async def on_message(self, message): # pylint: disable=unused-argument global_value.balance = message["balance"] global_value.balance_type = message["isDemo"] + data = { + "balance_id" : message["uid"], + "balance" : message["balance"], + "balance_type" : message["isDemo"] + } + + with open("balance.json", "w") as f: + json.dump(data, f) + elif "requestId" in message and message["requestId"] == 'buy': global_value.order_data = message @@ -220,11 +244,17 @@ async def on_error(self, error): # pylint: disable=unused-argument """Method to process websocket errors.""" logger = logging.getLogger(__name__) logger.error(error) - global_value.websocket_error_reason = str(error) - global_value.check_websocket_if_error = True + try: + self.reconnect() + except: + global_value.websocket_error_reason = str(error) + global_value.check_websocket_if_error = True async def on_close(self, error): # pylint: disable=unused-argument """Method to process websocket close.""" logger = logging.getLogger(__name__) logger.debug("Websocket connection closed.") - global_value.websocket_is_connected = False + try: + self.reconnect() + except: + global_value.websocket_is_connected = False diff --git a/test.py b/test.py index 56541af..0d2e17f 100644 --- a/test.py +++ b/test.py @@ -8,13 +8,10 @@ api = PocketOption(ssid) print(ssid) - def direction(): # Selecciona aleatoriamente entre 'call' y 'put' return random.choice(['call', 'put']) - if __name__ == "__main__": api.connect() time.sleep(2) - print(f"Get balance: {api.get_balance()}") From 9e5d7b6da2ad38cafd950fc950e13408af05ffe1 Mon Sep 17 00:00:00 2001 From: Vigo Walker Date: Thu, 11 Apr 2024 18:20:44 -0400 Subject: [PATCH 12/33] dsesed --- .../__pycache__/stable_api.cpython-310.pyc | Bin 9602 -> 9825 bytes pocketoptionapi/stable_api.py | 3 +++ .../ws/__pycache__/client.cpython-310.pyc | Bin 6579 -> 6741 bytes pocketoptionapi/ws/client.py | 13 ++++----- test.py | 25 ++++++++++++++---- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/pocketoptionapi/__pycache__/stable_api.cpython-310.pyc b/pocketoptionapi/__pycache__/stable_api.cpython-310.pyc index d9de6f9b5e7d5a0c6aad2be5cf99f400dafe04d6..0c5ea205d0751c79e4b0aeb7460ec691ed5487a4 100644 GIT binary patch delta 2053 zcmaJ?O>7%Q6y8}o>$Sc9jqTb_+N8GAcGEO%3iO9oZJ}-4HYf?SK-iXAwrA5Uv3Jev zx@`)g&_um(K+#atBOLgX5SMVF9FX7wh-(EhCnPRh5Iu0{jrYch0xlxae)D$T&wTIg zd*fSEzdjRjB9V{;f8U?X&fi^)Y$ac;?p{7XB^qd?nrS0VB-6Jn85ye5;EH5yp&=TE zHCvXbMk6Z{jV#MXj*|0|9$o#p+^>^P>_xNYI`u`Y~ z;~{ykuED7+j3A^KN=PLSkE;NvL?ua?g?LRqH6aW)0j)dXE2dYeRU1{iZf-{}89=_m_km72^@>W;H$nZ3lq zt{~>RmSazGs@^Ua!OI9c44f)ecge1QDvL;lR%Ve8Il$EX1cnQxs zu+|K{K@{|4hxmi=5E(F5DlMke` z5|z$K1n~U&7n7L^Hb#({|3^y|Y9PIcQT+h&n;CK=Ju60PrsYBH$2V;1+|kZK>)q1^ zi<>lsBswWlUoh*7mG$$Q{GoQ^`F;r5(bngt;w`mIT@mFnw0{hg%aUNnP9dNNJB`rW zSGb4cc4O_kNRVVF@I3?2=`$H~m@ZFF>mlg$-=jN#Wjr>nmO-lr*a)AD9qFy?By6#4P=+~7$R&mjn=A<@lj3O8o?TDm;g!$Vv`^{P!9ru*4i zCUe+FX83Gw;wikxI^=>8ZCZBQGb_w#+tj4G%na1@&0Ea%Hr{;A>h(?8vQg&W&ANnE!M(Knc1)i+31^}w;Byy?kG*uTX1N1H|Q=kYfb|u5sWWx z7_%Tq(|V9y!JP&EcA*e$f@mlh!>%%$e^uBwoVw|{m2PeS;@RSn z@N;O0k@XC}T-<+iC%%i%xCf=Z2-r02353H4IIZkyfQ|<9?pgJ9?&3RR>oV**HjN;9 zVGbp%5c3c=X$c8?kEH>2z;oOk15_nHQDt>d^})Yi4Tv=+%ORp_s;Z{sScrraRhNgO zM7ZjCaZj9>DzsPpfqfLjl8|E>*S=|zUd1PxyBMOoYB>Vmb0~*E| delta 1856 zcmZuxO;8*~6yBcQot^#vVIe?Bmh7@50|+5%fub=exG^D{loG{><q&hMQc2z%A1#{xCk$K<(FW`hD;9*RNmq zy}5TUC*5Q+7J$FPaCbeslRQDb*csj$V!^F|k*5)=Z3m1_8l^E9yD9-1r-|(VO>8N~ zF-l$v=*gWwD&joZAe#7=^plwQja(xqgszO~amdOsH9T1U^1>xfY&VC{?!K?EuL36ZYJFrEJB+b)K z5S*f2^cak3+D&_4%mAmC9+#XfEz^^l4#4IH#dpEaVP{t8 zKFNyt@B)d7FT=m~w8_*=({}8pX`T@ut92~{n)Dzqig=`$8Gw&g5oAzGJRRvFGvbv< zC3hNK`((7wh_54^qk3BeeEJ<&2#@ibjGMI9WKDa8RggC<{)x=b$RrBy$C*Y}dIY?r85-iZE@&T@FEJ&D(UWyNb+YBo@~;&DOk4 z+w-JRous!YRk09VoEU>#oFI%NoI_|UT&^w9wCQ#6SM>E+xuFm*L5v^dYYsVwX=2G5#mnPZuKKc@aS>jmhrfFW^K~*j<&r zHXZT>uxbu%Fz@c}PhC$0$rYjYj!)ww;*)tJwPHJKO=fa;&7q9y3dh6u!*!c`&Hb<7 zN^Rr7wjH#^MsIa!@8T42{VM=E@ySM8m+~|?{uK9nFOZ5DKmO5_yjmf+hBaOVm!Z(Q z5q6gv)=eWO2b0>+q=$FHUj*teyQJ@X71I1rERfg4y<&dO!BrLBfPtfJgzI&?(a;rN zU17~7m$qi3-sZ}p+kguK)fpx|l8%Q_Gk{#T-tJH^f_|lcXx%FZB+r zBImFuKeftTi+P^eD)Haq=h9UC8WJ(H-YN0}=WY+;w>-@ev_=uIclcunlL&ZW`~=*< zrfu!XmM4wP%dzkH9D?kIm(jv%aE@@GNLneJ%LA0*=i#c8S|CI;MeEao@E_75I4bEF z(Gr@b<`D4*U0R( zmF*4NvPBUDP3Fb^!7kDlL8#`j5BglC;Dav^WUw<`{CaDp6OaCDwu#}b0t=?fN43tk|-s#96&x@kI& zDF#}GnDbn3Va07l5x@Pz5A$lTT8ZSLu=zzhZS z_W-JDIno=EFCrsfQvaCqQ+r8_5R4PNOfW()L|_x_BOoU-M=(K9AUL4z#Ae4PNjyk! z2%!b8OwvR{iX`%RdNX64f)K4;*mUC;06tO=6D62b#pGZOm>2S)4qo^}CV%pw5fRXY zHSml^)Yp>WK3rn*9Unx%VV+rzp~SUhp%m0oysd3(+N=oO4y*;dgb0gBoqwKO3!=}Y zAMk@s4(x3vj35iD?~_*T>}3E(-#Hw@n8kz8A(zlm)WHK;;u2*Hog%Hz7Q5sXFO5uh zoy#jC=Cg8_MtfVoq4hne-$45eBH(YfoYQuh&Km8lw&=*a+vaz*%E8ceNvy<)PCc|SUfnN1c6&jz+0_^kb`wO8!)`H=xx?#NK`$t>s2jb-+Vi$A zV*bZlPJ8-LqPD$^)S8I=mK0KV~^xoSQ z>DT*x_zSYp-hF*})HM{xi+@ z?%;Q6{-)*!h~FB;k?QEQtL7lDPNxsRtok_ZKL0oDea!LMRC9&*SG~f-c%iZ&3KjPv zL8Y>=da)X&*`b2^E&WZlC=GgZQ3C2%GDZ+lUw7|`oh5OW;4Ss2dlIIVV_!?#racbl)Q|R%{R&P$#ZkG9z^|GC6Abmle%G*g9=l8qRJrH;sS~KY1|DmG z$MMX#&l>@HwZN*T&l^adL#G3$%GL!9G=9wr;H`bln$zj`F3BX zTOk7kK?2>ibrYYbslEnND7Aw04@3QsTZd(J#+e!$M$%w57~FuZ&*B!=$O4mxxe+i7 GJNhsBI)51e delta 1615 zcmZ8hOKclO7@mK2ZSStVw&Uk+5;sYkKB5w6o3<*YL4d0Cff}hKqI9LoK*phYSV7|@ z5tTzyxk!jZX*3d2C6H{10|$^=<eAQdLwd0oH>z(7*f~ph5fe9vHHBof~SKG#_T}=i_ZJVp9YC1>* ztHhcEl}rnQY$e@bK~6+O^d1ZHA|@<+7cMbj3+EmaPNmo|0`GDAVHEyW|2RXt4`ME) zcod?Lh9qR50LT7R-&haTwrj$*-K+K^NXSX7O+HWXf-1!qrcaO=BRENLieQ{zj37ra zMR1zHBRE4aN^n+v7oR)wBAMq2UP5R?MW*OOLz*m#d42b6;wnUF?(*)(?rne%)o;lF zOm!tS@=6%_fXVOc(2NRb!6t;Urd8LL;B{DM@~t`u!)KvgcF^M5ilb#}E1@2x{4G~R zMXbR;OKqAsKUp{GW{U&6!GvWplQj%nXlst0WVP!X0F0iSIEWLr&hj2cw0&IK6)w@n zY$@{A*>YNLgagQA8eDFOc%7Bg8nZqB{VgrXq2NAF$Rh&23+18~=DU+R;XK*usax9P zVd{iWsS0Jk8+1@U=_P%lRfDKuE3KQ!Ora3phX$o8jt?h*S&Y zGfXnt924mlT*2-ych>+z4`AOvcfI%*-0#KNS)Bb>$B%e$zhX-#$hF`B$dAxIB=REJ z;#BKqL~m$>wzk_rVTGe^C>(FF{b_W6MeRK*JlulAy2DQ2zUHSie`F6oi2N4F*M)~W zlhv5+_A#`-%5M5$9VpPsd`G`0TuFNuHSg`=4`^O$esB*zLcAxpwWCCi|Hs7Wox|!` zaaetoIRo>movEm$?6;Yt(xQW56VPoT<7zT@JpLw`^8`24Lhc;QsxNZu@k2TR9s0hyj5(~29>K#%If}Iz>WAXY8#A*L zvA)`597DE}4p?bxDd9*TT@${V^ar#0Hhq_*daGYXOTF#yz>50a cpB^8@PmATi;udtCgpmMx93JJCVOcr*KQ+Ksz5oCK diff --git a/pocketoptionapi/ws/client.py b/pocketoptionapi/ws/client.py index d015b46..04adc79 100644 --- a/pocketoptionapi/ws/client.py +++ b/pocketoptionapi/ws/client.py @@ -6,7 +6,7 @@ import json import logging import ssl - +import time # Suponiendo la existencia de estos módulos basados en tu código original import pocketoptionapi.constants as OP_code import pocketoptionapi.global_value as global_value @@ -63,8 +63,7 @@ async def reconnect(self): regs = self.region.get_regions() for i in regs: print(f"Reconnecting to {i}...") - async with websockets.connect(i, extra_headers={"Origin": "https://m.pocketoption.com"}) as ws: - + async with websockets.connect(i, extra_headers={"Origin": "https://m.pocketoption.com "}) as ws: print("Conectado a: ", i) self.websocket = ws self.url = i @@ -140,6 +139,7 @@ async def on_message(self, message): # pylint: disable=unused-argument # global_value.ssl_Mutual_exclusion = True logger = logging.getLogger(__name__) logger.debug(message) + print(message) # message = json.loads(str(message)) @@ -203,7 +203,8 @@ async def on_message(self, message): # pylint: disable=unused-argument await self.websocket.send("3") elif message.startswith('40{"sid":"'): - # print(f"{self.url.split('/')[2]} got 40 sid send session") + print(f"{self.url.split('/')[2]} got 40 sid send session") + print(f"send: {self.ssid}") await self.websocket.send(self.ssid) elif message.startswith('451-['): @@ -245,7 +246,7 @@ async def on_error(self, error): # pylint: disable=unused-argument logger = logging.getLogger(__name__) logger.error(error) try: - self.reconnect() + await self.reconnect() except: global_value.websocket_error_reason = str(error) global_value.check_websocket_if_error = True @@ -255,6 +256,6 @@ async def on_close(self, error): # pylint: disable=unused-argument logger = logging.getLogger(__name__) logger.debug("Websocket connection closed.") try: - self.reconnect() + await self.reconnect() except: global_value.websocket_is_connected = False diff --git a/test.py b/test.py index 0d2e17f..ea1af32 100644 --- a/test.py +++ b/test.py @@ -1,17 +1,32 @@ import random import time import dotenv +import asyncio from pocketoptionapi.stable_api import PocketOption import os dotenv.load_dotenv() -ssid = os.getenv("SSID") -api = PocketOption(ssid) -print(ssid) +SSID=(r'42["auth",{"session":"a:4:{s:10:"session_id";s:32:"a1dc009a7f1f0c8267d940d0a036156f";s:10:"ip_address";s:12:"190.162.4.33";s:10:"user_agent";s:120:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OP";s:13:"last_activity";i:1709914958;}793884e7bccc89ec798c06ef1279fcf2","isDemo":1,"uid":27658142,"platform":1}]') +api = PocketOption(SSID) +print(SSID) def direction(): # Selecciona aleatoriamente entre 'call' y 'put' return random.choice(['call', 'put']) -if __name__ == "__main__": +def main(): api.connect() - time.sleep(2) + + max_retries = 5 + for _ in range(max_retries): + time.sleep(5) + try: + asyncio.run(api.reconect()) + except: + pass + if api.check_connect(): + break # Exit loop if connected + else: + print("Failed to connect after max retries") + +if __name__ == '__main__': + main() \ No newline at end of file From 18b22ef91ff1f3a6e22175f8c9843b3a013f790c Mon Sep 17 00:00:00 2001 From: Vigo Walker Date: Thu, 11 Apr 2024 18:25:41 -0400 Subject: [PATCH 13/33] gb --- .../ws/__pycache__/client.cpython-310.pyc | Bin 6741 -> 6725 bytes pocketoptionapi/ws/client.py | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-310.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-310.pyc index 44972ddffe3fe7563640ac4d3c8c38d558ecfde8..da8320c99ff347b2526fa7fb4d39f037634cf3d6 100644 GIT binary patch delta 72 zcmca=a@2%3pO=@50SMkENu({>$eYeCESynNQc!HAuV0X_S5lOilB%z;xt~3USy%{* Jgc!FyKL8qe7100y delta 88 zcmX?Va@B-4pO=@50SM%iB+@o*T R+|HiEEG>mc0UNhHKLEJH9FYJ3 diff --git a/pocketoptionapi/ws/client.py b/pocketoptionapi/ws/client.py index 04adc79..777ce81 100644 --- a/pocketoptionapi/ws/client.py +++ b/pocketoptionapi/ws/client.py @@ -63,7 +63,7 @@ async def reconnect(self): regs = self.region.get_regions() for i in regs: print(f"Reconnecting to {i}...") - async with websockets.connect(i, extra_headers={"Origin": "https://m.pocketoption.com "}) as ws: + async with websockets.connect(i, extra_headers={"Origin": "https://po.trade/ "}) as ws: print("Conectado a: ", i) self.websocket = ws self.url = i @@ -86,7 +86,7 @@ async def connect(self): for url in self.region.get_regions(True): print(url) try: - async with websockets.connect(url, extra_headers={"Origin": "https://m.pocketoption.com"}) as ws: + async with websockets.connect(url, extra_headers={"Origin": "https://po.trade/ "}) as ws: print("Conectado a: ", url) self.websocket = ws From 00b4e6d60abfd1aacc68cf79b9a86c48e2d4c4e2 Mon Sep 17 00:00:00 2001 From: chema2411 <130813519+chema2411@users.noreply.github.com> Date: Fri, 12 Apr 2024 08:22:50 -0400 Subject: [PATCH 14/33] Add files via upload From d2d904bdd1d13c4a3f9c6364d026740909236501 Mon Sep 17 00:00:00 2001 From: Vigo Walker Date: Fri, 12 Apr 2024 17:06:49 -0400 Subject: [PATCH 15/33] test --- .../__pycache__/__init__.cpython-311.pyc | Bin 170 -> 167 bytes .../__pycache__/api.cpython-311.pyc | Bin 0 -> 9333 bytes .../__pycache__/constants.cpython-311.pyc | Bin 2580 -> 7563 bytes .../__pycache__/expiration.cpython-311.pyc | Bin 0 -> 3567 bytes .../__pycache__/global_value.cpython-311.pyc | Bin 0 -> 480 bytes .../__pycache__/stable_api.cpython-311.pyc | Bin 0 -> 14650 bytes .../ws/__pycache__/client.cpython-311.pyc | Bin 0 -> 13981 bytes .../chanels/__pycache__/base.cpython-311.pyc | Bin 0 -> 1362 bytes .../chanels/__pycache__/buyv3.cpython-311.pyc | Bin 0 -> 2482 bytes .../__pycache__/candles.cpython-311.pyc | Bin 0 -> 1627 bytes .../__pycache__/get_balances.cpython-311.pyc | Bin 0 -> 1012 bytes .../chanels/__pycache__/ssid.cpython-311.pyc | Bin 0 -> 989 bytes .../objects/__pycache__/base.cpython-311.pyc | Bin 0 -> 967 bytes .../__pycache__/candles.cpython-311.pyc | Bin 0 -> 4945 bytes .../__pycache__/timesync.cpython-311.pyc | Bin 0 -> 3516 bytes test.py | 5 +++-- 16 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 pocketoptionapi/__pycache__/api.cpython-311.pyc create mode 100644 pocketoptionapi/__pycache__/expiration.cpython-311.pyc create mode 100644 pocketoptionapi/__pycache__/global_value.cpython-311.pyc create mode 100644 pocketoptionapi/__pycache__/stable_api.cpython-311.pyc create mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-311.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/base.cpython-311.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-311.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/candles.cpython-311.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-311.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-311.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-311.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc diff --git a/pocketoptionapi/__pycache__/__init__.cpython-311.pyc b/pocketoptionapi/__pycache__/__init__.cpython-311.pyc index d6f4f315e109033616919aaef9c8d10fb8d6190a..de1c69ca5d221cb5967c637448ead7be085f7b63 100644 GIT binary patch delta 72 zcmZ3*xSWw^IWI340}%XAmq?q)V`5;HY!wq)oLW>IQ^n WpXV6hsb2u*=Y#o)1)2I23(Ns$A{l`I diff --git a/pocketoptionapi/__pycache__/api.cpython-311.pyc b/pocketoptionapi/__pycache__/api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85632b1725b272dc666fb8f00221ff767de53f63 GIT binary patch literal 9333 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 SU!Q)y^m|tGAKTP3+W#-<&5{HF literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/constants.cpython-311.pyc b/pocketoptionapi/__pycache__/constants.cpython-311.pyc index 83015a07ee2705eccdfa6742ab4dce2941e28862..af0e1388ffefc38b9667c68f31ee9418c7762f21 100644 GIT binary patch literal 7563 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 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/stable_api.cpython-311.pyc b/pocketoptionapi/__pycache__/stable_api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..799515734fb1c4616240c3e87b14a349ce1dfc16 GIT binary patch literal 14650 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 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7388b8ece4d9227522a974cc8b730b81298de77b GIT binary patch literal 2482 zcmah~O=ufO6rR=o>d$Io$A5L|AT_DgG>TIf8bT>FahfQ!P9O~hAy`)0jUs3Dli8IW znKg)#gO0hSg&f?HIt`}KLJKLh_nulg2)Yae0zLV*!RaNJ_RXv$ORh?1ci+ssH}lP# znfJYY7>$Myl)np;*T0hy`jd9LMeHY zBQl#*k~1>X@upG=W`Z0FpbJPB?jT(>giRiyE%^MB2{D@lHu+z+u+CjYNo9u)T}pC9 zIICF()T0H%R*l=$BG&9;rL5Y;l9BHKvWn|;b|;~64;hHM4K8yTUJu+s8A0a(SRmrr zT76}Kge{}2e{5KmRxt8XACLlV>gw)q49D)`LeK7P0U-x12SCNja!u-g z5jJ7;R&U0-6huzI;T&G)98nKA;N5+BUDgFhE(F#U2W@n(qzlMuSheS?qu8-MqazNk zIC$jrYGC)`(hhZLM+cFViKtnYVG~I!Rcd8g=jqWBsc0=4r3wjR<5tbE?6giol`1uT zQm-0Bphr)Fm8wy`jCBJi6-;+c_#$BNTD3?NI>M@#^W=bK;1vV2+p=t}RJF)BJ$QB1 z$XS*AO}Nv}B19-_0Lxo8P6ml!8Rm5yp|H%W6Y+bhgU+{(fOI*;Ol> zzoC^4)5_*(h`0sl(i0`f&NlZEdF(3Lw|6ieeB)#vGjKQ zQagU>*NfXD*V-f3n!Fd_gGapx8lQ3LJL`^5xKjyt`mj4T>av3l5;AMOIQ&M}#qJuc-UPYT(>QWJhAs3AXfF{Al2I4$OS+`Xx^kaqcqjaER*Le!(^=zBrRI}75pos1&H{?az{Afbwx941_|xK;|Un$$Kn)qIEbgIVxEdusbEe@{^Iy;s(B3r zO+)N=03HjJ`h#TmW0?l`+Tmd#)#GgvhFD*KXdo|yA_wn&`XoHl3eUKcQ_XZU?M6rM z-hL9DZAE99=GkirH$M0DNMhr{myrh%H-7x#$*)ds#~0f11^12lr*p@@{iyxcx$U{d z_S~WumJUsLh>8((=#)D#b7#et(N22qS5u(5$8Z5yJ%T}d~4}hA??#qd(RV&rW ziK!g?o-qqJ*{l=_#d3kn>>u8L>G(87oZdfV@6XPDCVu{58ynp0OXWR3kG+r20T5-Y z^*acU=Qz$qu?Blw6mGDmuQA_31Fwrl8tie=LTm7K(V5oZ>q%1_&340ObMZN|yy&-| Vp5W-250{_6^PE{;{D+<0$v^dQY5o8J literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/candles.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/candles.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8daa4f02fc73a2ee57dfde854c7bae596d6fef51 GIT binary patch literal 1627 zcmb7E&2Jk;6rcUf#*Wpx38oRHT`5&ydoTqBsY+2LXw;8G(nz!y%j#;fGfuYbhdZ-Q zn#hrS=phFVfRNe)ha6A=^`CK3C9F9`LL9gmg& zDkTKv@AcEIZ!Cm{fU9lQ)qc<*u?l8c@sMyEvKXtQMZ*ccQp;ZpqZPtvoKBE04F4(+})yUJf8?Q za6+T{@6v>)3G*||=}IuNsFVp(o^iMU0#ItZi0Hdorm0ya?v4MusH;8E0Tr~o03u^0 z+?z%yJn}^_4c-y3=={h_(>;bG8PUreilRz9aO5lYX_BD@7izW z>X%m@&+pGaD|^q&Uf=W%VFfzkh=Szd8JKy5C~9aBGM#7;A|1kG$nX#o2wS3bon}{a z2sh72;g`?__RQYx+YYk3;4dXb}gcJ zt#y6Z>Z1Me3Tdz?U3708vaWSBgpi6dvCN&nmT9(;5;sd-3DAvmgtGtI%qo@KQCVzb zhGQ28S-464kSw~lH|VJQ0eA?~G$b_1!d6IG{nc%dD3opDDBqPI=aLS?DzV?s!kD(e ze4h0g7#<<=j#&!QPLkzjASc!+bJJF_+TBh&?iNlm$!P;`(lHDOs--{*OXZU=<&nZp zTP;8?>^5a#N<=kEF}V@)EM?oPYG}nXguyc=YSL%^`0DwL-tSPJ2{QrMo-IsHqn4N) z`$sqhXJIMK!jT5lu_nP8<}w>{=dwxo6^`!*IEs9KXZqj#s~3ZB!xDZAL=U}~LABY( zvtQr+_U_=VcLy_P2DNtvwX?&reX=w}Aok4RNmM<*f4hI;!k&5HO#R}_{p`%`FMWUW z$LyK2@Z4GG7auEw%@rU3$4e@{FG{{2t2YS#r+oi@2S=ls3EwAa;QQ<}Y+~m?{DhPN z#eh}hs1#Lb{33|nxDL$Aee?3rMpLuBrJ*@(eLO_RMQ%)*@Fv(CC~@wUXQIBv>!W9) zz6Q@7lNXAel0sfJ^+@DE&daW3r@*~*KFLX4Ve>F1uMuY;hK8nT19Yj6E*+qY{iELi lm3yiVP^G8p(6+S;;N(J_n$>{Faq-p6A9D21|Cv&l{sB6(wc7vy literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fed4c4bb1e75d4cfc3f3049ced38debca6b78a52 GIT binary patch literal 1012 zcmZuv&ubGw6n?Y2scV|nBL1idI?#jWU}&MuA&6iplpb0O>Ln};+ns6Lx=FS>n+8LK z9D4BRtp^o)kXq?KlS;v`C&81qmFT4xeY4rbYJEHN&3iNR-uve5`!F$)1(aWv>CFQI z@KqT@$)rlZh{_&t;KYL}DHEb}&C|-72Ft+pUEqcw2RgtJ&ViJ5u04i)=9@C}Br+Cl zDb}3yG+8iTBK>Jx_CP?Ha42h>DBoQu8(hZ-MwD9?AzQRPyXFWPjZ0DEt3pbS~Ra*B$w_cOX<+4OQSBA76P`4J2?zM6i5#HNK-_+9Q3bT1FGHP~J zL>G2MAkn>b3tt-2^b!rkc0Ssv1}0Kh zai#D!BSX1K#h%jB6{lo9m6*udaVvG-T2CAwCA=T5uULL!58h$>uGN&5^USUZPg=;F z4Vf4G7m>-BV|yNBt*d8$RAIQSNXS)$4#Ziwai@2a#=16jIR=DR#?LXhIN6ljA6n^JiLYgK66+#S1oamIrs!ACeMM#B8s6#_hVTmlAT;C-zII-(O5Ksp}gyE64Q8x$}@EAnq4G1cY^9;ZRu2kw7kv)cTu7B^)7hO-Xh99yc z-+3t`_9Td0zr*&94wzD|U_E)F(umWtJJK_M=p1Dd(}%W_&OBpckY6IR+h|50p-zyK zAqe6bb*j14vw|XWHm1jzyuba(vz7WU_?T*1jxop5hT_t9n^jSbU;t-mS7iV%77SrP z&N0KqG7G`VAuprfJd{z(7cBCbk{!X?QYpJBll_(DC=}RSDuEr^?WAfI_N*l_0aC?U zxXTKj$~k_TL?Rh(6_azT|hti+6^npjOW5T$(E9ae?!8GD_$dIX~^%-aK-RbKyIj zhimv#s8K#bSknHwR(ggLm0WWRcf;i~q17?1PIFM)817GLHhX^xt13;V^VG^TypA@$ z^G_Yjo-*fkFi&u5Lp?1i^oI79bT0GN^coMs8yL{zqMo9fW(Xk@*d4>}H`p5g{Z4c1 S1evX>w>v-e*I!qJ639OSi~kD% literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5315c7e47c90d1defdfe84cab04ddf7e7213f4f2 GIT binary patch literal 967 zcma)4OK;Oa5T3Q2NAo~M6oksfC!}1=si=w&sDOkx5F!B*vMeo$y$Na4*z7t~4IFaF zA&1`c2T)PfKa*qRD}TUMIQ0TEwv!^tfwBDUJl6C1o89l#Y6;MOb?fvTHtKZ>Mi`kiZES?m3hZjLMTLV++`s!%m#9G9xa>3h`{xHYTx8HVM6}Io7$zih0QT2tPqnVi7A2uZ%CMxnbZdz$O@fe4XOOEnUidkv*Vf>%$-faE^g%x6vqy*EIO(_{LGY06gRb1-@eM#cYbPCiv4F zeCuU+%%W`KPG%}!m=LiP zp}cVA(nNuWFwaAqDr6?+*n|itn-HV1MB%QZ8Ac|Tu??db6B9_(9PRKJwinC-scPg% zd`T&52TJ_AiSW}BTKDp3Is^`&iQKH!z|!6Cl{sCPuF!nJqV`?g&g)aK{KRy0J2PV? zLLMul)Us!3jtK^RZEAE=d@OAPvnEkKU!0RpVM7s*GaR3a2i#vpt1a*W=$w8hm7RSd%KDZytd9{I$4YVLtO-)=wjC+@-o&1J z(7Y6`uUgk=qDBo+X zHYkp=J=o|w4L#WzFpz2^B+^+9AN;{A9~piW9xjE4D_sYcPgkOQ%F)9Ql(IhZC^}M# zj#Rq#EuX3eNXJRI;TwA_9>H{;OU+n@;e-rhh9C4$ju^)6*;Ll8X)_EnpEe8{fhRgz z!Oh0B6X(AL;sD+rMspO*nn)fzwNex)+ytS(eg(7OeJV=4q{OR=qQP()2KPPmvhO{HCH-60^D!6X`Ll92?A|VYpHjFH}RC> zR}9h>ZoiML<5aOy;!&% zu3}VReHh=NkVive|_tPf$QEiS>$2ltue}cg6_M-7K!!VYtU~Kll%httAlj*ESu$? zfuE&v&)XZZ!E$V{qzyK%-9>`p!>RdX`cv_xe`foMqHvOKly9Zha&a! zqXf-GtoQ{CWc%8uqMR)$XRAs;Jys=6OvqI&P^+rPJS73;DhQgrWp!Uwmes*30fV*s zJ&(qF2GyY|0ps;VN9T*HPGGMSb-jdxd$$Z{kDrxe@gOJ7>D~5wKz*jU0YB?d%;Zi` zBp;DkI6?eH1P=pF+B5B(P?hKD1@K{xWbSy00BTGC literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc b/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4b03baf2e8355478ff2b71ba5c7c386cc6c3bca GIT binary patch literal 3516 zcmbVP-ER{|5Z^oBIhPP~p$&-QgdC)poIs|6N-Zdqgf>*IM4Ac+)U|YSd>7*2ukKy= zaCyi>q~?J>R`5tGnu5|lqJP2#okVmJ5>lUdGfFE}ytFfWAHK7lly+_J?#=AX&HQF& zcl}E$)kmQHeSQCYrH7E;@gZoUKiN7Dllw#`IihnqU*>Wg8~Gd$W1^g>2swcxJo%L9 z!V1wvLs&}?vJOA5PKYIBQ5(aOF=9n&i33g-)^QS?=^f%hM_Y?yopCK?1xBWPAGu}bE_*cB-!7^0q7 zA#1Q^-4`Gvmo$=#;IP-w><+%Diyc%6bR|2ey+&_DS5Ftds7oExKG4=l-ZER9BIs!#y0mU ztHQlq&ktuFsXrcjbZk{{q>;@-hjBb;v+ovYA+hiyf-L+4Fu4ywUc@D=0oYvQ(hRKu zw$>fRswvl@Dm}=Q5VCAvpW?SO)UcLl)jXqIUNE{W4Awp2XbRo{gA9X-CMa|d^zJ}= zKpO9aaI~}DLRr+aOq%^wv?erE=E%m=gh-Fn1F|vkTCO_&ViSFW8|V?E!1@M z(d_2qG(};RX9l~yq4Qn>c*fIxuw(~&4*=Ul>%iV589mOzV@o6O^^A_x9W$62{W%Cg zO+p{ER)8KxB?2~vFm!(nR;-7sSU|trCZKx3GSIJoi)U+H5KcAWN&(eP&C^;X#D`%* z_kwNFD9e5*1EI$L_8^|H}{@n8hSP+epAGRWdBGuw@Q4s`k`<2E#S@7o9OJLyx;(r2Hh z&u*m8Iq7p7@`NK#*wO?;SxwYO7cO%Ef(e(0 z;Ik==+roHL5X8|Y>C*L+pH!T)E~Ec9Y~jM;vPMym-7xphNC(NRfQW z3ml4G;3Bd>0%4{%gUn2XmqFHEM@-{OROG729SSLd Date: Fri, 12 Apr 2024 17:28:40 -0400 Subject: [PATCH 16/33] hhjjj --- .../__pycache__/stable_api.cpython-310.pyc | Bin 9825 -> 9766 bytes pocketoptionapi/stable_api.py | 10 ++++------ .../ws/__pycache__/client.cpython-310.pyc | Bin 6725 -> 6791 bytes pocketoptionapi/ws/client.py | 9 ++++++--- test.py | 2 ++ 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/pocketoptionapi/__pycache__/stable_api.cpython-310.pyc b/pocketoptionapi/__pycache__/stable_api.cpython-310.pyc index 0c5ea205d0751c79e4b0aeb7460ec691ed5487a4..3aa15a95a26f5ff4299a4f091526bc1647c2c9a6 100644 GIT binary patch delta 783 zcmYL`%TE(g6vlhnGHr)G5r|SvNeh&*NJQ~bBZ;UG2#6?dEaEt{Qyenwlski>F~(?2 zOxzd`e}IXPg)Y!EF>z(wXhMt|cjJo0r3(@kZat?8PI7$i2YT)?~18f39QP-{_WpGXiCpUAM@ zk8cBQki*Y`J~)6|fdvZA2G@x_q1E^RM}TpdF^KD-7ZkSSE;v?Sl^+1)ad$XH>Eq#E z(pvaF!rK6m0dzWRRtx;_ZxrXd_GM5M7)YLVx#Y(hU`@ iDmAY(Ly++f4qEoap}%tS%Rw2Vx}z92?)TXlBbZT5qArcjCk zqfTAok?7FDpgI*5i-%5~67=3>I|Uu1OH`+z=b5wy=J)>RdH&DKJO7y%lbFk}&D zZQz?gE2MBM&;vdAJ&+^gY~2p=KyW>Bge}16V;sYs;4?CpwFC@Q*R{ItcO?;eF44x3D87W5nKQu^qBCLlwDh(8$0t%?V@pAYV z9L1>yTR%e$BOsErnE0V#+&@lg4I`0HWcV71)%CMM5lL)r9EL|Y)A$aaSGA@MxxSk^ z;yhynH(TfSkFlI!c$;e8rs5nIW(X$swavrJ>ch5sa<@r^nm?Ntj%)aY_aqlHEB|%A zw5v@#+2O!9-0T>Ev-q>4A583yUZt=fM2FyGbu0Q_rN;fvSZ1C!HDptDt}i&2Ybw_) zt0F2~^obHJo;Lm2Y~Hr%w@{0gyIfxSTMas^#f7p>>63YO&n$wZrj4M;ab+3RcxSjs z(o}hmQbv?;AU*^FEAdYFff!#&A7rN&O)sm%49-v-XACh08KZ=n?zkB@zqor4FTfUV z@<$NU3@_g+tS&KJEF?yu4qqjrFpS%YaY`eSY*Ej0a{^Pz8OY(y$UBj#J_^WdWGrFGVl3t_VOqeP!nlyplOct{gMpC& zBwEB$!ji(&%n0PMq%ebMP6n_#RwQ*SDQqB_8ioa|DeMUGLJ3U{zvr`Ng1}DuD(GYe|U#8B7gqi~@{o|2ddAn3#Yp4j^XwyE&ctC=;XBW?i-r zCPv4}O&t3f{Wm*tK4xMJ-mJ#s$Hdtz~AUUFvs zE!N_k)YO8>smxkpLO=;J0LBjG7!J8o=1Od9~;UM#kdFG2$|eUnW Date: Fri, 12 Apr 2024 17:30:42 -0400 Subject: [PATCH 17/33] dawdwa --- pocketoptionapi/ws/client.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pocketoptionapi/ws/client.py b/pocketoptionapi/ws/client.py index fa53ef1..ff77d63 100644 --- a/pocketoptionapi/ws/client.py +++ b/pocketoptionapi/ws/client.py @@ -17,7 +17,6 @@ timesync = TimeSync() - async def on_open(): # pylint: disable=unused-argument """Method to process websocket open.""" print("CONECTADO CON EXITO") From 20749408683cdf83d8a0d6173bbeb9a95918fb8f Mon Sep 17 00:00:00 2001 From: vigo walker <59869868+theshadow76@users.noreply.github.com> Date: Mon, 6 May 2024 13:48:02 -0400 Subject: [PATCH 18/33] Update README.md --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index 9817d5c..7e48130 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,4 @@ In development! for a better understanding, check this [link](https://github.com/theshadow76/PocketOptionAPI/issues/4) -# help me - -you can donate here: [paypal](https://paypal.me/shadowtechsc?country.x=CL&locale.x=es_XC) - -or my BTC adress: bc1qmvpmpdt96vmgq3s3rh3gzxf75eml52r2d7sclw - -By donating you are helping me make this project better! +there is a pocketoption api being sold for 1000 usd, and here we want to make it for free! \ No newline at end of file From ab30caaa241299beb957ca97b53d4b7182d77110 Mon Sep 17 00:00:00 2001 From: vigo walker <59869868+theshadow76@users.noreply.github.com> Date: Mon, 6 May 2024 17:33:50 -0400 Subject: [PATCH 19/33] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 7e48130..b394e9f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +# talk with us +https://discord.com/invite/rZyaxYnd + + # Pocket Option API In development! From 817d3e84ab8b9abf256c39118365c313d5cf77fd Mon Sep 17 00:00:00 2001 From: vigo walker <59869868+theshadow76@users.noreply.github.com> Date: Tue, 7 May 2024 08:42:59 -0400 Subject: [PATCH 20/33] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b394e9f..eaab72b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # talk with us -https://discord.com/invite/rZyaxYnd +https://discord.gg/du4GaQGHMT + # Pocket Option API @@ -8,4 +9,4 @@ In development! for a better understanding, check this [link](https://github.com/theshadow76/PocketOptionAPI/issues/4) -there is a pocketoption api being sold for 1000 usd, and here we want to make it for free! \ No newline at end of file +there is a pocketoption api being sold for 1000 usd, and here we want to make it for free! From 9da91a0b1b3e75ab1a3f88769b31eab0938048ca Mon Sep 17 00:00:00 2001 From: Vigo Walker Date: Tue, 7 May 2024 13:00:50 -0400 Subject: [PATCH 21/33] Updated buying and connections --- .../__pycache__/__init__.cpython-311.pyc | Bin 167 -> 169 bytes .../__pycache__/api.cpython-311.pyc | Bin 9333 -> 9335 bytes .../__pycache__/constants.cpython-311.pyc | Bin 7563 -> 7565 bytes .../__pycache__/expiration.cpython-311.pyc | Bin 3567 -> 3569 bytes .../__pycache__/global_value.cpython-311.pyc | Bin 480 -> 482 bytes .../__pycache__/stable_api.cpython-311.pyc | Bin 14650 -> 14511 bytes .../ws/__pycache__/client.cpython-311.pyc | Bin 13981 -> 14161 bytes .../chanels/__pycache__/base.cpython-311.pyc | Bin 1362 -> 1364 bytes .../chanels/__pycache__/buyv3.cpython-311.pyc | Bin 2482 -> 2483 bytes .../__pycache__/candles.cpython-311.pyc | Bin 1627 -> 1629 bytes .../__pycache__/get_balances.cpython-311.pyc | Bin 1012 -> 1014 bytes .../chanels/__pycache__/ssid.cpython-311.pyc | Bin 989 -> 991 bytes pocketoptionapi/ws/chanels/buyv3.py | 2 +- pocketoptionapi/ws/client.py | 4 ++-- .../objects/__pycache__/base.cpython-311.pyc | Bin 967 -> 969 bytes .../__pycache__/candles.cpython-311.pyc | Bin 4945 -> 4947 bytes .../__pycache__/timesync.cpython-311.pyc | Bin 3516 -> 3518 bytes test.py | 6 +++++- 18 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pocketoptionapi/__pycache__/__init__.cpython-311.pyc b/pocketoptionapi/__pycache__/__init__.cpython-311.pyc index de1c69ca5d221cb5967c637448ead7be085f7b63..67ac79d75b234fd6a2b152ea7331f9a2d3ec2dec 100644 GIT binary patch delta 30 kcmZ3^xRQ~3IWI340}%Ywv6{$j%4jpuQI1L1aALd%0Bd*$9smFU delta 27 hcmZ3;M1& delta 31 lcmezF@zsNSIWI340}%XAm)OXi%fx6pxspk4^Gv3DiU6Jx39A4A diff --git a/pocketoptionapi/__pycache__/constants.cpython-311.pyc b/pocketoptionapi/__pycache__/constants.cpython-311.pyc index af0e1388ffefc38b9667c68f31ee9418c7762f21..1a5aec464121cd6750c222ee241c79b109f75810 100644 GIT binary patch delta 34 ocmeCS?zQG#&dbZi00cjEtTu9s3NqSGRuq(D(ly*{FX+Pq0E?6df&c&j delta 31 lcmeCR?zZM$&dbZi00jTjB{p)43Nl(xRuq)m>?r8N0|0sb2SES; diff --git a/pocketoptionapi/__pycache__/expiration.cpython-311.pyc b/pocketoptionapi/__pycache__/expiration.cpython-311.pyc index a8db0c41bb686c922e9df93abb060716dcf7d4ec..c565617bd53e7e7f0164e69f41f8e52ca3c0becc 100644 GIT binary patch delta 34 ocmaDa{ZX2GIWI340}%YwvD(OO#K>qj*^W_;N!M_54C7=T0H3-Dc>n+a delta 31 lcmew;{a%`TIWI340}%XAm)OW{#K>qf*^W_ea~$Jj9srCw2si)$ diff --git a/pocketoptionapi/__pycache__/global_value.cpython-311.pyc b/pocketoptionapi/__pycache__/global_value.cpython-311.pyc index 09e88f15af0c76a6a0546d62c901e3e2c6ce5f8d..2060890b4a2b1d56a0fe0d70a94ece9d291af7d7 100644 GIT binary patch delta 33 ncmaFB{D_%*IWI340}%YwvD(P3%gE?3*^*I?N!M_4IAbROjI#&m delta 30 kcmaFF{D7HzIWI340}%XAm)OXy%gAUq*^*IiawKCX0D5)@rvLx| diff --git a/pocketoptionapi/__pycache__/stable_api.cpython-311.pyc b/pocketoptionapi/__pycache__/stable_api.cpython-311.pyc index 799515734fb1c4616240c3e87b14a349ce1dfc16..6fb2ef3b5df027a06222b184447a25bf6af477f9 100644 GIT binary patch delta 632 zcmZ`#O=uHA6yCSntme-Y65Y~hV^!QNtwK%H5D|OusMSJ|dJCKEt}fYRD5%t}7s0CtB8V*>Rx5hDMt&(e#KUpS^8@^$5pSAb?+pR<1bR2d@R*PkNyMcAehMb`Yupq^cG5@@$S(T$ zv7&0J)skMQ*EH4DH6md$kxM11*W}j1(rQ@laze0gEuLD9%daEy$GCKT)SFK{;laQY z(v+mr)Y;xiyHwWQGd0(=tA~sAnWpzZI?KbNC-i3l?s)m+bO4&z-g{oE&;nvmP(mcj zxXqw}vB4JH_u7Ns18@be$|vPTs`~-MB#x`_WGfOX>ZQNjtTK*2u z(AVYuKmMZ6`hG4<;)RK6pL~)TAP^c&wM1XV@rA%HUY;J81WHvC|;Na=u zxXvMai9_}xhx`=|`3oHKPo>qbNE_XiP`M(Zb5~aLimcfOb`}Ay4-623lWQ}R$W|uC zjLAF1g2mH;##9LeK~Bg35}I5^rXY49h-jGHqR_~=W;2`OFIL9-$&BjW>eGPYw^-9Mi;7D$nTo(X z=G?>z1UoYi#GYKN-Urmdq~Xi>ZgPNz3S-{nQjGhIomeEjTyt+A4 zb2A4}R@O*9aUM_{7?^CurAfu9CAV0zQ&S6y_JahOinakMFdJxjT4qj;Cetmp+|-hc z{1k{NXK`h2Qhp9F0)UFA!xR^B16h8WoJFfZBC99QHB#c+0%YD|1DTPRShQ{OStB{1 zv)&j_a~ FU;tvN$P@qo diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-311.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-311.pyc index aede9b0f94134865a42011eb8fd4ac7d7f03ae74..6879654ba86d1d2af6ed4f4fbc16a2bc010b1141 100644 GIT binary patch delta 656 zcmZ`!J#5oJ6ux&pCr*o9>-mzvz{Yw0D1W%eHDae0CD@jOhj7}tU-t0`*6E;@YV-NO}bq#D40bMe7irV5Xu+)6c6Y4Sbg1=5um6aC+&yel-6@zY{ZhfA+gGXWbcGYu3z}(bo28f~ zg&r#zQa@g^uj%!c(dX?gN=++ThTS8@OfD4myO6$z=O!9RnLt_?BH*W)Pi8if*-`qH zB<_@bq69?oh!SN-d?E)#_J};h9Ip+eRIhV?#h3Ddl=p;x#6S=|Y1$XGK+rrvV`Y8@ z$2oVMzr{hx{Vb%oboR32nD$boVjA@}bqv#K8T!$>(Q$u`rvXkgSv)J&y^{@3roK!A znX+wZj`Lb=_qjNSVa*MaizJ=-@0jf5GQb&jE_Gep@>V;Zs{5)Qs5<+Sn#Y#oN>jTW zwB2~-BZjW~Dfi(J+;v%LHwHi5-mxUc2;7}20L;3Nk3YgH;h{1_`!taNZHV?sVH=Ap FzX5davI_tJ delta 427 zcmcbZH#e7WIWI340}%XAmq=TrzL9S&6QlLyJxp?w?=WdIicaQW&g6Lnl=fy|WSGuS z!Z2A-P-L=+WW;1?7D+~y$^0TRli%q}Og3hbQ|vL*Wb<=-K5Hfj?6ePgDFW12#bII; ztyEB~6syTP`6G+eWC2z+Sy`Y&@k}7`0tg!z?sAD;;nLk8dV$Lfh$aWHs+x0)BZ)j< z;rPJB#Hw_cPqZg@hSNnp`73<#7dWt>$ro8wnOK=N|6pxmW>nu?%_+((D4bDJQc!HA zuV0X_S5lOilDc^%k0c|b-Q>f(5xmhCtYa>S$6geVy&@hvS&(0g`9fmy=1@K@CPtsl z4FYB?fke`X^AH(KAV@5_swavjM^O)q>SQ+&{Fu(}`Hb$in M3~)kdvVgfG03Yvy(*OVf diff --git a/pocketoptionapi/ws/chanels/__pycache__/base.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/base.cpython-311.pyc index 8c7be844072a94fb0cf239de4a5549cae1ca0d44..a888d709a9b7b5289d081a308fb643c6230652d2 100644 GIT binary patch delta 34 ocmcb_b%l$2IWI340}%YwvD(PJnvv0Y@^(f!CSAkLR~c)W0iv@BZU6uP delta 31 lcmcb@b%~36IWI340}%XAm)OX?nvv0Q@^(hK&DR-gnE{Pr2`vBs diff --git a/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-311.pyc index 7388b8ece4d9227522a974cc8b730b81298de77b..0c1afacf4ec3fd5478f74430a630410317a03530 100644 GIT binary patch delta 78 zcmdlayjhrcIWI340}yPDwMtvRkvD@$P@p)qs4TT8z9cg@wYVfPw_tKRQzN6xWKL!| hCSAkH>dcY+9v787uPAw*u(-$NkvD@$NU%7ys4TT8z9cg@wYVfPx1e}(8&e~r(_{{2 fxyc&Lk^G()mAtMfd7bdM$QOErFLd(+W@R=2oW>aO diff --git a/pocketoptionapi/ws/chanels/__pycache__/candles.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/candles.cpython-311.pyc index 8daa4f02fc73a2ee57dfde854c7bae596d6fef51..45610cbee6f8da698e44004dfb478d2c7268ef36 100644 GIT binary patch delta 34 ocmcc3bC-vEIWI340}%YwvD(OO%*g0A*`863N!M_5EaN{G0GKBTp#T5? delta 31 lcmcc1bDM{IIWI340}%XAm)OW{%*g06*`85ub3Efe7664?2w(sJ diff --git a/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-311.pyc index fed4c4bb1e75d4cfc3f3049ced38debca6b78a52..0116114f660b04e9b324f9fcaa45e598b2e7699c 100644 GIT binary patch delta 34 ocmeyu{*9e`IWI340}%YwvD(P}j*-!O@-Id?CSAkL5=?g(0k8WB+W-In delta 31 lcmeyy{)L@;IWI340}%XAm)OYtj*-!G@-IfY%~DKv7y+0@37P-^ diff --git a/pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-311.pyc index 788f5add4218a3aadc72d7e23e3d3136fb98cd62..6cbbae7765ab692530d62232220d6679c291fb2d 100644 GIT binary patch delta 34 ocmcc1exIFtIWI340}%YwvD(PZ!o=u2S%687N!M_*9@Bb80Fe#{yZ`_I delta 31 lcmcc5ewUqlIWI340}%XAm)OY7!o=t}S%67yvjNk3MgV_t2YUbj diff --git a/pocketoptionapi/ws/chanels/buyv3.py b/pocketoptionapi/ws/chanels/buyv3.py index f39fa99..07179f8 100644 --- a/pocketoptionapi/ws/chanels/buyv3.py +++ b/pocketoptionapi/ws/chanels/buyv3.py @@ -14,7 +14,7 @@ def __call__(self, amount, active, direction, duration, request_id): # thank Darth-Carrotpie's code # https://github.com/Lu-Yi-Hsun/iqoptionapi/issues/6 - exp = get_expiration_time(int(self.api.timesync.server_timestamps), duration) + exp = get_expiration_time(int(self.api.timesync.server_timestamp), duration) """if idx < 5: option = 3 # "turbo" else: diff --git a/pocketoptionapi/ws/client.py b/pocketoptionapi/ws/client.py index ff77d63..bf85e7f 100644 --- a/pocketoptionapi/ws/client.py +++ b/pocketoptionapi/ws/client.py @@ -65,7 +65,7 @@ async def reconnect(self): regs = self.region.get_regions() for i in regs: print(f"Reconnecting to {i}...") - async with websockets.connect(i, extra_headers={"Origin": "https://po.trade/ "}) as ws: + async with websockets.connect(i, extra_headers={"Origin": "https://pocketoption.com/ "}) as ws: print("Conectado a: ", i) self.websocket = ws self.url = i @@ -88,7 +88,7 @@ async def connect(self): for url in self.region.get_regions(True): print(url) try: - async with websockets.connect(url, extra_headers={"Origin": "https://po.trade/ "}) as ws: + async with websockets.connect(url, extra_headers={"Origin": "https://pocketoption.com/ "}) as ws: print("Conectado a: ", url) self.websocket = ws diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc index 5315c7e47c90d1defdfe84cab04ddf7e7213f4f2..828677cc5b77135fd78edc35c616210ab6fa41bb 100644 GIT binary patch delta 59 zcmX@kev+MgIWI340}%YwvD(P(&Zy{|Y!wq)oLW>IQ=p`61V^W delta 57 zcmX@few>|qIWI340}%XAm)OYd&M5DgY!wq)oLW>IQIQIQAe5|1V|HC diff --git a/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc b/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc index d4b03baf2e8355478ff2b71ba5c7c386cc6c3bca..e7553ac6da98cc5cad69f08959e1b2a9f0898757 100644 GIT binary patch delta 34 ocmdlZy-%8ZIWI340}%YwvD(P3$js Date: Sun, 9 Jun 2024 11:10:57 -0400 Subject: [PATCH 22/33] added v2 --- v2/pocketoptionapi-v2/.gitignore | 6 + v2/pocketoptionapi-v2/ACTIVE_CODE.txt | 146 ++++++++ v2/pocketoptionapi-v2/README.md | 6 + .../docs/image/icon/favicon.ico | Bin 0 -> 1150 bytes v2/pocketoptionapi-v2/docs/index.md | 201 ++++++++++ .../docs/javascripts/.Rhistory | 0 .../docs/javascripts/extra.js | 27 ++ v2/pocketoptionapi-v2/instrument.txt | 318 ++++++++++++++++ v2/pocketoptionapi-v2/mkdocs.yml | 81 ++++ .../pocketoptionapi/__init__.py | 16 + v2/pocketoptionapi-v2/pocketoptionapi/api.py | 347 ++++++++++++++++++ .../pocketoptionapi/constants.py | 7 + .../pocketoptionapi/country_id.py | 190 ++++++++++ .../pocketoptionapi/expiration.py | 80 ++++ .../pocketoptionapi/global_value.py | 58 +++ .../pocketoptionapi/http/__init__.py | 1 + .../pocketoptionapi/http/login.py | 22 ++ .../pocketoptionapi/http/logout.py | 22 ++ .../pocketoptionapi/http/resource.py | 10 + .../pocketoptionapi/stable_api.py | 294 +++++++++++++++ .../pocketoptionapi/ws/__init__.py | 1 + .../pocketoptionapi/ws/chanels/__init__.py | 1 + .../pocketoptionapi/ws/chanels/auth.py | 13 + .../pocketoptionapi/ws/chanels/base.py | 19 + .../pocketoptionapi/ws/chanels/buy.py | 29 ++ .../pocketoptionapi/ws/chanels/candle.py | 42 +++ .../ws/chanels/get_asset_data.py | 7 + .../pocketoptionapi/ws/chanels/get_balance.py | 7 + .../pocketoptionapi/ws/chanels/ping_server.py | 9 + .../pocketoptionapi/ws/chanels/subscribe.py | 11 + .../pocketoptionapi/ws/chanels/unsubscribe.py | 9 + .../pocketoptionapi/ws/client.py | 140 +++++++ v2/pocketoptionapi-v2/setup.py | 17 + 33 files changed, 2137 insertions(+) create mode 100644 v2/pocketoptionapi-v2/.gitignore create mode 100644 v2/pocketoptionapi-v2/ACTIVE_CODE.txt create mode 100644 v2/pocketoptionapi-v2/README.md create mode 100644 v2/pocketoptionapi-v2/docs/image/icon/favicon.ico create mode 100644 v2/pocketoptionapi-v2/docs/index.md create mode 100644 v2/pocketoptionapi-v2/docs/javascripts/.Rhistory create mode 100644 v2/pocketoptionapi-v2/docs/javascripts/extra.js create mode 100644 v2/pocketoptionapi-v2/instrument.txt create mode 100644 v2/pocketoptionapi-v2/mkdocs.yml create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/__init__.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/api.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/constants.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/country_id.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/expiration.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/global_value.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/http/__init__.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/http/login.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/http/logout.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/http/resource.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/stable_api.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/__init__.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/__init__.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/auth.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/base.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/buy.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/candle.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_asset_data.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_balance.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/ping_server.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/subscribe.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/unsubscribe.py create mode 100644 v2/pocketoptionapi-v2/pocketoptionapi/ws/client.py create mode 100644 v2/pocketoptionapi-v2/setup.py diff --git a/v2/pocketoptionapi-v2/.gitignore b/v2/pocketoptionapi-v2/.gitignore new file mode 100644 index 0000000..a3b9b4f --- /dev/null +++ b/v2/pocketoptionapi-v2/.gitignore @@ -0,0 +1,6 @@ +*.py[cod] +build/ +dist/ +*.egg-info/ +.vscode/ +/.vs \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/ACTIVE_CODE.txt b/v2/pocketoptionapi-v2/ACTIVE_CODE.txt new file mode 100644 index 0000000..aaa55ad --- /dev/null +++ b/v2/pocketoptionapi-v2/ACTIVE_CODE.txt @@ -0,0 +1,146 @@ +2018/5/7 +EURUSD 1 +EURGBP 2 +GBPJPY 3 +EURJPY 4 +GBPUSD 5 +USDJPY 6 +AUDCAD 7 +NZDUSD 8 +USDRUB 10 +AMAZON 31 +APPLE 32 +BAIDU 33 +CISCO 34 +FACEBOOK 35 +GOOGLE 36 +INTEL 37 +MSFT 38 +YAHOO 40 +AIG 41 +CITI 45 +COKE 46 +GE 48 +GM 49 +GS 50 +JPM 51 +MCDON 52 +MORSTAN 53 +NIKE 54 +USDCHF 72 +XAUUSD 74 +EURUSD-OTC 76 +EURGBP-OTC 77 +USDCHF-OTC 78 +NZDUSD-OTC 80 +GBPUSD-OTC 81 +AUDCAD-OTC 86 +ALIBABA 87 +YANDEX 95 +AUDUSD 99 +USDCAD 100 +AUDJPY 101 +GBPCAD 102 +GBPCHF 103 +GBPAUD 104 +EURCAD 105 +CHFJPY 106 +CADCHF 107 +EURAUD 108 +TWITTER 113 +FERRARI 133 +TESLA 167 +USDNOK 168 +EURNZD 212 +USDSEK 219 +USDTRY 220 +MMM:US 252 +ABT:US 253 +ABBV:US 254 +ACN:US 255 +ATVI:US 256 +ADBE:US 258 +AAP:US 259 +AA:US 269 +MO:US 278 +AMGN:US 290 +T:US 303 +BAC:US 313 +BBY:US 320 +BA:US 324 +BMY:US 328 +CAT:US 338 +CVX:US 349 +CL:US 365 +CMCSA:US 366 +COP:US 370 +COST:US 374 +CVS:US 379 +DHR:US 381 +DAL:US 386 +EBAY:US 407 +XOM:US 429 +FDX:US 434 +GILD:US 460 +HAS:US 471 +HON:US 480 +IBM:US 491 +KHC:US 513 +LMT:US 528 +MA:US 542 +MDT:US 548 +MU:US 553 +NFLX:US 569 +NEE:US 575 +NVDA:US 586 +PYPL:US 597 +PFE:US 603 +PM:US 605 +PG:US 617 +QCOM:US 626 +RTN:US 630 +CRM:US 645 +SLB:US 647 +SBUX:US 666 +SYK:US 670 +TWX:US 692 +VZ:US 723 +V:US 726 +WMT:US 729 +WBA:US 730 +WFC:US 733 +SNAP 756 +DUBAI 757 +TA25 758 +AMD 760 +ALGN 761 +ANSS 762 +DRE 772 +IDXX 775 +RMD 781 +SU 783 +TFX 784 +TMUS 785 +QQQ 796 +SPY 808 +BTCUSD 816 +XRPUSD 817 +ETHUSD 818 +LTCUSD 819 +DSHUSD 821 +BCHUSD 824 +OMGUSD 825 +ZECUSD 826 +ETCUSD 829 +BTGUSD 837 +QTMUSD 845 +TRXUSD 858 +EOSUSD 864 +USDINR 865 +USDPLN 866 +USDBRL 867 +USDZAR 868 +DBX 889 +SPOT 891 +USDSGD 892 +USDHKD 893 \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/README.md b/v2/pocketoptionapi-v2/README.md new file mode 100644 index 0000000..4d3613e --- /dev/null +++ b/v2/pocketoptionapi-v2/README.md @@ -0,0 +1,6 @@ +# Document + +## document + +https://lu-yi-hsun.github.io/pocketoptionapi/ + diff --git a/v2/pocketoptionapi-v2/docs/image/icon/favicon.ico b/v2/pocketoptionapi-v2/docs/image/icon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..43ce842f41ff6379cdb4a1bff1cfa88db0fa1e5f GIT binary patch literal 1150 zcmd6mze~eV5XUcC+D^5K)OL}MPW~FiK~QSJU->gcy9nYUxVX9MCiZU-hmt?0At?os zf~Zk6mI%W6y~L+!Ub;Eh@afCD-uLd^y(^J{r&uI>SE-R9DiP5PfC-k!j^$r|T(jbJ z%*r09#(}+redeP{LJ3TRN!iB>fe)wf>F$(!PHoJ3Jfv1|MLp;Oa0gmoO~pvjGPLZh z7Pvh}++HBQ-zP>4hECz*y#Yqj^v?Q3q@9IcKn(BrM;pcnn&g98QZKpfrEH{AdaT_I zoZ)gX2J%~)erpQ34NWh#yq|0OeyTo}H$4CM{_RZDYrS{3hvc6p?q6tnJ%3n#PCI{h zQ?DQW)9ROcoVxV?w+Hqj@$-q6`vv`5N!B0kWA|_4?j8=b`+tRYS7r$Qx4=(=d-R<8 zxb<{I*O(m-{xUPN-hgE_f38_BKr6F80OmiheBhr4@*l`5+h48BM8YYc92f=0kmzEU I-{GfpU+tu=<^TWy literal 0 HcmV?d00001 diff --git a/v2/pocketoptionapi-v2/docs/index.md b/v2/pocketoptionapi-v2/docs/index.md new file mode 100644 index 0000000..47d5117 --- /dev/null +++ b/v2/pocketoptionapi-v2/docs/index.md @@ -0,0 +1,201 @@ +# Get start + +## document version + +7/5 + +2.2 fix connect stable + +6/13 +fix auth + + +12/5 + +1.6 +fix websocket connect + + +10/29 +1.5 +fix updateAssets + +7/17 +1.1 add get_payment + +7/3 + +add more function + +6/23 +v0.1 +!!!Start New!! + +## Debug Mode ON +```python +import logging +logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(message)s') +``` +## check_win & buy sample + +```python +from pocketoptionapi.stable_api import PocketOption +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123123\";s:10:\"ip_address\";s:12:\"2.111.11.5\";s:10:\"user_agent\";s:104:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123232;}1232321213","isDemo":0,"uid":"123232132"}]""" +account=PocketOption(ssid) +check_connect,message=account.connect() +if check_connect: + account.change_balance("PRACTICE")#"REAL" + asset="EURUSD" + amount=1 + dir="call"#"call"/"put" + duration=30#sec + print("Balance: ",account.get_balance()) + buy_info=account.buy(asset,amount,dir,duration) + #need this to close the connect + print("----Trade----") + print("Get: ",account.check_win(buy_info["id"])) + print("----Trade----") + print("Balance: ",account.get_balance()) + #need close ping server thread + account.close() +``` + +## Login + +PockOption only support ssid login, because GOOGLE reCAPTCHA + +```python +from pocketoptionapi.stable_api import PocketOption +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" +account=PocketOption(ssid) +check,message=account.connect() +account.close() +``` + +## Get Balance + + +```python +from pocketoptionapi.stable_api import PocketOption +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" +account=PocketOption(ssid) +check,message=account.connect() +account.change_balance("PRACTICE") +balance=account.get_balance() +print(balance) +account.close() +``` + + + +## Buy + +```python +from pocketoptionapi.stable_api import PocketOption + +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" +account=PocketOption(ssid) +check,message=account.connect() +if check: + account.change_balance("PRACTICE") + asset="EURUSD" + amount=1 + dir="call"#"call"/"put" + duration=60#sec + print(account.buy(asset,amount,dir,duration)) + account.close() +``` + +## sell_option + +```python +from pocketoptionapi.stable_api import PocketOption +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" +account=PocketOption(ssid) +check_connect,message=account.connect() +if check_connect: + account.change_balance("PRACTICE")#"REAL" + asset="EURUSD" + amount=1 + dir="call"#"call"/"put" + duration=120#sec + print("Balance: ",account.get_balance()) + buy_info=account.buy(asset,amount,dir,duration) + #need this to close the connect + account.sell_option(buy_info["id"]) + account.close() +``` + + +## get candle + +```python +from pocketoptionapi.stable_api import PocketOption +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" +account=PocketOption(ssid) +check_connect,message=account.connect() +import time +if check_connect: + asset="EURUSD" + _time=int(time.time())#the candle end of time + offset=120#how much sec want to get _time-offset --->your candle <---_time + period=60#candle size in sec + print("You will get the candle from: "+str(_time-offset)+" to: "+str(_time)) + print("------\n") + candle=account.get_candle(asset,_time,offset,period) + for c in candle["data"]: + print(c) + account.close() +``` + +## check_asset_open + +```python +from pocketoptionapi.stable_api import PocketOption +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" +account=PocketOption(ssid) +check_connect,message=account.connect() +import time +if check_connect: + print("Check Asset Open") + for i in account.get_all_asset_name(): + print(i,account.check_asset_open(i)) + account.close() +``` + +## GET realtime candle + + +```python +from pocketoptionapi.stable_api import PocketOption +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" +account=PocketOption(ssid) +check_connect,message=account.connect() +import time +if check_connect: + asset="NZDUSD_otc" + list_size=10#this is setting how much Quote you want to save + account.start_candles_stream("NZDUSD_otc",list_size) + while True: + if len(account.get_realtime_candles("NZDUSD_otc"))==list_size: + break + print(account.get_realtime_candles("NZDUSD_otc")) + account.close() +``` + +## get_payment + +```python +from pocketoptionapi.stable_api import PocketOption +ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" +account=PocketOption(ssid) +check_connect,message=account.connect() +if check_connect: + + all_data=account.get_payment() + for asset_name in all_data: + asset_data=all_data[asset_name] + print(asset_name,asset_data["payment"],asset_data["open"]) + +account.close() +``` \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/docs/javascripts/.Rhistory b/v2/pocketoptionapi-v2/docs/javascripts/.Rhistory new file mode 100644 index 0000000..e69de29 diff --git a/v2/pocketoptionapi-v2/docs/javascripts/extra.js b/v2/pocketoptionapi-v2/docs/javascripts/extra.js new file mode 100644 index 0000000..b1f4222 --- /dev/null +++ b/v2/pocketoptionapi-v2/docs/javascripts/extra.js @@ -0,0 +1,27 @@ +window.MathJax = { + jax: ["input/TeX","input/MathML","input/AsciiMath","output/SVG"], + extensions: ["tex2jax.js","mml2jax.js","asciimath2jax.js","MathMenu.js","MathZoom.js","AssistiveMML.js", "a11y/accessibility-menu.js"], + TeX: { + extensions: ["AMSmath.js","AMSsymbols.js","noErrors.js","noUndefined.js"] + }, + tex2jax: { + inlineMath: [ ["\\(","\\)"] ], + displayMath: [ ["\\[","\\]"] ] + }, + TeX: { + TagSide: "right", + TagIndent: ".8em", + MultLineWidth: "85%", + equationNumbers: { + autoNumber: "AMS", + }, + unicode: { + fonts: "STIXGeneral,'Arial Unicode MS'" + } + }, + displayAlign: "left", + showProcessingMessages: false, + messageStyle: "none" +}; + + diff --git a/v2/pocketoptionapi-v2/instrument.txt b/v2/pocketoptionapi-v2/instrument.txt new file mode 100644 index 0000000..920723d --- /dev/null +++ b/v2/pocketoptionapi-v2/instrument.txt @@ -0,0 +1,318 @@ +Name: NZD/SEK instrument_id: "NZDSEK" instrument_type: "forex" +Name: NZD/USD instrument_id: "NZDUSD" instrument_type: "forex" +Name: CAD/TRY instrument_id: "CADTRY" instrument_type: "forex" +Name: EUR/CHF instrument_id: "EURCHF" instrument_type: "forex" +Name: USD/THB instrument_id: "USDTHB" instrument_type: "forex" +Name: EUR/TRY instrument_id: "EURTRY" instrument_type: "forex" +Name: GBP/AUD instrument_id: "GBPAUD" instrument_type: "forex" +Name: AUD/USD instrument_id: "AUDUSD" instrument_type: "forex" +Name: EUR/MXN instrument_id: "EURMXN" instrument_type: "forex" +Name: USD/CHF instrument_id: "USDCHF" instrument_type: "forex" +Name: NOK/DKK instrument_id: "NOKDKK" instrument_type: "forex" +Name: EUR/NOK instrument_id: "EURNOK" instrument_type: "forex" +Name: SEK/JPY instrument_id: "SEKJPY" instrument_type: "forex" +Name: CAD/NOK instrument_id: "CADNOK" instrument_type: "forex" +Name: NOK/SEK instrument_id: "NOKSEK" instrument_type: "forex" +Name: GBP/HUF instrument_id: "GBPHUF" instrument_type: "forex" +Name: GBP/SGD instrument_id: "GBPSGD" instrument_type: "forex" +Name: AUD/NZD instrument_id: "AUDNZD" instrument_type: "forex" +Name: GBP/JPY instrument_id: "GBPJPY" instrument_type: "forex" +Name: CHF/SEK instrument_id: "CHFSEK" instrument_type: "forex" +Name: AUD/NOK instrument_id: "AUDNOK" instrument_type: "forex" +Name: GBP/NOK instrument_id: "GBPNOK" instrument_type: "forex" +Name: AUD/DKK instrument_id: "AUDDKK" instrument_type: "forex" +Name: EUR/AUD instrument_id: "EURAUD" instrument_type: "forex" +Name: AUD/CHF instrument_id: "AUDCHF" instrument_type: "forex" +Name: GBP/CHF instrument_id: "GBPCHF" instrument_type: "forex" +Name: AUD/CAD instrument_id: "AUDCAD" instrument_type: "forex" +Name: CHF/DKK instrument_id: "CHFDKK" instrument_type: "forex" +Name: AUD/TRY instrument_id: "AUDTRY" instrument_type: "forex" +Name: NZD/CHF instrument_id: "NZDCHF" instrument_type: "forex" +Name: USD/SEK instrument_id: "USDSEK" instrument_type: "forex" +Name: GBP/NZD instrument_id: "GBPNZD" instrument_type: "forex" +Name: EUR/DKK instrument_id: "EURDKK" instrument_type: "forex" +Name: NZD/DKK instrument_id: "NZDDKK" instrument_type: "forex" +Name: CAD/SGD instrument_id: "CADSGD" instrument_type: "forex" +Name: EUR/GBP instrument_id: "EURGBP" instrument_type: "forex" +Name: EUR/CAD instrument_id: "EURCAD" instrument_type: "forex" +Name: USD/CZK instrument_id: "USDCZK" instrument_type: "forex" +Name: AUD/MXN instrument_id: "AUDMXN" instrument_type: "forex" +Name: EUR/NZD instrument_id: "EURNZD" instrument_type: "forex" +Name: GBP/PLN instrument_id: "GBPPLN" instrument_type: "forex" +Name: NZD/NOK instrument_id: "NZDNOK" instrument_type: "forex" +Name: AUD/SGD instrument_id: "AUDSGD" instrument_type: "forex" +Name: GBP/SEK instrument_id: "GBPSEK" instrument_type: "forex" +Name: NZD/CAD instrument_id: "NZDCAD" instrument_type: "forex" +Name: NZD/MXN instrument_id: "NZDMXN" instrument_type: "forex" +Name: NZD/TRY instrument_id: "NZDTRY" instrument_type: "forex" +Name: CHF/SGD instrument_id: "CHFSGD" instrument_type: "forex" +Name: USD/MXN instrument_id: "USDMXN" instrument_type: "forex" +Name: EUR/HUF instrument_id: "EURHUF" instrument_type: "forex" +Name: GBP/CAD instrument_id: "GBPCAD" instrument_type: "forex" +Name: USD/TRY instrument_id: "USDTRY" instrument_type: "forex" +Name: USD/JPY instrument_id: "USDJPY" instrument_type: "forex" +Name: EUR/USD instrument_id: "EURUSD" instrument_type: "forex" +Name: AUD/SEK instrument_id: "AUDSEK" instrument_type: "forex" +Name: CHF/NOK instrument_id: "CHFNOK" instrument_type: "forex" +Name: USD/PLN instrument_id: "USDPLN" instrument_type: "forex" +Name: USD/HUF instrument_id: "USDHUF" instrument_type: "forex" +Name: CHF/JPY instrument_id: "CHFJPY" instrument_type: "forex" +Name: GBP/ILS instrument_id: "GBPILS" instrument_type: "forex" +Name: NZD/JPY instrument_id: "NZDJPY" instrument_type: "forex" +Name: CHF/TRY instrument_id: "CHFTRY" instrument_type: "forex" +Name: CAD/JPY instrument_id: "CADJPY" instrument_type: "forex" +Name: USD/RUB instrument_id: "USDRUB" instrument_type: "forex" +Name: SGD/JPY instrument_id: "SGDJPY" instrument_type: "forex" +Name: GBP/USD instrument_id: "GBPUSD" instrument_type: "forex" +Name: CAD/PLN instrument_id: "CADPLN" instrument_type: "forex" +Name: DKK/SGD instrument_id: "DKKSGD" instrument_type: "forex" +Name: NZD/SGD instrument_id: "NZDSGD" instrument_type: "forex" +Name: AUD/JPY instrument_id: "AUDJPY" instrument_type: "forex" +Name: NOK/JPY instrument_id: "NOKJPY" instrument_type: "forex" +Name: PLN/SEK instrument_id: "PLNSEK" instrument_type: "forex" +Name: USD/SGD instrument_id: "USDSGD" instrument_type: "forex" +Name: GBP/MXN instrument_id: "GBPMXN" instrument_type: "forex" +Name: USD/CAD instrument_id: "USDCAD" instrument_type: "forex" +Name: SEK/DKK instrument_id: "SEKDKK" instrument_type: "forex" +Name: DKK/PLN instrument_id: "DKKPLN" instrument_type: "forex" +Name: CAD/MXN instrument_id: "CADMXN" instrument_type: "forex" +Name: GBP/TRY instrument_id: "GBPTRY" instrument_type: "forex" +Name: EUR/SGD instrument_id: "EURSGD" instrument_type: "forex" +Name: NZD/ZAR instrument_id: "NZDZAR" instrument_type: "forex" +Name: EUR/CZK instrument_id: "EURCZK" instrument_type: "forex" +Name: EUR/JPY instrument_id: "EURJPY" instrument_type: "forex" +Name: CAD/CHF instrument_id: "CADCHF" instrument_type: "forex" +Name: USD/INR instrument_id: "USDINR" instrument_type: "forex" +Name: USD/BRL instrument_id: "USDBRL" instrument_type: "forex" +Name: USD/NOK instrument_id: "USDNOK" instrument_type: "forex" +Name: USD/DKK instrument_id: "USDDKK" instrument_type: "forex" +Name: China Large-Cap ETF instrument_id: "FXI" instrument_type: "cfd" +Name: IBM Corporation instrument_id: "IBM:US" instrument_type: "cfd" +Name: IDEXX Laboratories instrument_id: "IDXX" instrument_type: "cfd" +Name: Siemens instrument_id: "SIED-CHIX" instrument_type: "cfd" +Name: Roche instrument_id: "ROGZ-CHIX" instrument_type: "cfd" +Name: Airbus SE instrument_id: "AIRP-CHIX" instrument_type: "cfd" +Name: AbbVie instrument_id: "ABBV:US" instrument_type: "cfd" +Name: Concho Resources instrument_id: "CXO:US" instrument_type: "cfd" +Name: Verizon instrument_id: "VZ:US" instrument_type: "cfd" +Name: Unilever instrument_id: "ULVRL-CHIX" instrument_type: "cfd" +Name: Lockheed Martin instrument_id: "LMT:US" instrument_type: "cfd" +Name: NextEra Energy instrument_id: "NEE:US" instrument_type: "cfd" +Name: US 100 instrument_id: "USNDAQ100" instrument_type: "cfd" +Name: Entergy instrument_id: "ETR:US" instrument_type: "cfd" +Name: QQQ Trust, Series 1 instrument_id: "QQQ" instrument_type: "cfd" +Name: DTE Energy instrument_id: "DTE:US" instrument_type: "cfd" +Name: Tesco instrument_id: "TSCOL-CHIX" instrument_type: "cfd" +Name: First Solar instrument_id: "FSLR:US" instrument_type: "cfd" +Name: Pfizer instrument_id: "PFE:US" instrument_type: "cfd" +Name: Eastman Chemical instrument_id: "EMN:US" instrument_type: "cfd" +Name: JP Morgan Chase instrument_id: "JPM" instrument_type: "cfd" +Name: Google instrument_id: "GOOGLE" instrument_type: "cfd" +Name: Fastenal instrument_id: "FAST:US" instrument_type: "cfd" +Name: HSBC Holdings PLC instrument_id: "HSBAL-CHIX" instrument_type: "cfd" +Name: DaVita instrument_id: "DVA:US" instrument_type: "cfd" +Name: Utilities SPDR instrument_id: "XLU" instrument_type: "cfd" +Name: Federal Realty instrument_id: "FRT:US" instrument_type: "cfd" +Name: Commerzbank instrument_id: "CBKD-CHIX" instrument_type: "cfd" +Name: Amgen instrument_id: "AMGN:US" instrument_type: "cfd" +Name: Silver instrument_id: "XAGUSD" instrument_type: "cfd" +Name: Resmed Inc instrument_id: "RMD" instrument_type: "cfd" +Name: Equifax instrument_id: "EFX:US" instrument_type: "cfd" +Name: Digital Realty Trust instrument_id: "DLR:US" instrument_type: "cfd" +Name: Adobe Systems instrument_id: "ADBE:US" instrument_type: "cfd" +Name: Autodesk instrument_id: "ADSK:US" instrument_type: "cfd" +Name: Barclays instrument_id: "BARCL-CHIX" instrument_type: "cfd" +Name: Spotify instrument_id: "SPOT" instrument_type: "cfd" +Name: Standard Chartered instrument_id: "STANL-CHIX" instrument_type: "cfd" +Name: Alibaba instrument_id: "ALIBABA" instrument_type: "cfd" +Name: Freeport-McMoRan instrument_id: "FCX:US" instrument_type: "cfd" +Name: Delta Air Lines instrument_id: "DAL:US" instrument_type: "cfd" +Name: Materials Select Sector SPDR instrument_id: "XLB" instrument_type: "cfd" +Name: Amazon instrument_id: "AMAZON" instrument_type: "cfd" +Name: Semiconductor ETF instrument_id: "SMH" instrument_type: "cfd" +Name: S&P 500 ETF instrument_id: "SPY" instrument_type: "cfd" +Name: Caterpillar instrument_id: "CAT:US" instrument_type: "cfd" +Name: US 30 instrument_id: "US30" instrument_type: "cfd" +Name: ConocoPhillips instrument_id: "COP:US" instrument_type: "cfd" +Name: Flowserve instrument_id: "FLS:US" instrument_type: "cfd" +Name: Goldman Sachs instrument_id: "GS" instrument_type: "cfd" +Name: AU 200 instrument_id: "AUS200" instrument_type: "cfd" +Name: Edison instrument_id: "EIX:US" instrument_type: "cfd" +Name: Crude Oil WTI instrument_id: "USOUSD" instrument_type: "cfd" +Name: MSCI Mexico ETF instrument_id: "EWW" instrument_type: "cfd" +Name: General Electric instrument_id: "GE" instrument_type: "cfd" +Name: Micron Technology instrument_id: "MU:US" instrument_type: "cfd" +Name: Telefónica instrument_id: "TEFE-CHIX" instrument_type: "cfd" +Name: Procter & Gamble instrument_id: "PG:US" instrument_type: "cfd" +Name: Accenture instrument_id: "ACN:US" instrument_type: "cfd" +Name: Costco instrument_id: "COST:US" instrument_type: "cfd" +Name: Medtronic instrument_id: "MDT:US" instrument_type: "cfd" +Name: MSCI Emerging Markets ETF instrument_id: "EEM" instrument_type: "cfd" +Name: Expeditors instrument_id: "EXPD:US" instrument_type: "cfd" +Name: Facebook instrument_id: "FACEBOOK" instrument_type: "cfd" +Name: Tesla instrument_id: "TESLA" instrument_type: "cfd" +Name: Merck instrument_id: "MRKD-CHIX" instrument_type: "cfd" +Name: FirstEnergy instrument_id: "FE:US" instrument_type: "cfd" +Name: Altria instrument_id: "MO:US" instrument_type: "cfd" +Name: Core MSCI Emerging Markets instrument_id: "IEMG" instrument_type: "cfd" +Name: AS Roma instrument_id: "ASRM" instrument_type: "cfd" +Name: Bayer instrument_id: "BAYND-CHIX" instrument_type: "cfd" +Name: Continental instrument_id: "COND-CHIX" instrument_type: "cfd" +Name: Qualcomm instrument_id: "QCOM:US" instrument_type: "cfd" +Name: Vodafone Group PLC instrument_id: "VODL-CHIX" instrument_type: "cfd" +Name: Visa instrument_id: "V:US" instrument_type: "cfd" +Name: AT&T instrument_id: "T:US" instrument_type: "cfd" +Name: FedEx instrument_id: "FDX:US" instrument_type: "cfd" +Name: Frontier Communications instrument_id: "FTR:US" instrument_type: "cfd" +Name: Teleflex Inc instrument_id: "TFX" instrument_type: "cfd" +Name: Twitter Inc instrument_id: "TWITTER" instrument_type: "cfd" +Name: Royal Bank of Scotland instrument_id: "RBSL-CHIX" instrument_type: "cfd" +Name: S&P Oil & Gas Explor & Product instrument_id: "XOP" instrument_type: "cfd" +Name: Deutsche Post instrument_id: "DPWD-CHIX" instrument_type: "cfd" +Name: General Motors instrument_id: "GM" instrument_type: "cfd" +Name: US 500 instrument_id: "USSPX500" instrument_type: "cfd" +Name: Bank of America instrument_id: "BAC:US" instrument_type: "cfd" +Name: Nike instrument_id: "NIKE" instrument_type: "cfd" +Name: Darden Restaurants instrument_id: "DRI:US" instrument_type: "cfd" +Name: UBS instrument_id: "UBSGZ-CHIX" instrument_type: "cfd" +Name: Discover Financial Services instrument_id: "DFS:US" instrument_type: "cfd" +Name: Emerson Electric instrument_id: "EMR:US" instrument_type: "cfd" +Name: Advance Auto Parts instrument_id: "AAP:US" instrument_type: "cfd" +Name: Duke Realty Corp instrument_id: "DRE" instrument_type: "cfd" +Name: Rolls-Royce instrument_id: "RRL-CHIX" instrument_type: "cfd" +Name: Wells Fargo instrument_id: "WFC:US" instrument_type: "cfd" +Name: CitiGroup instrument_id: "CITI" instrument_type: "cfd" +Name: Cisco Systems instrument_id: "CISCO" instrument_type: "cfd" +Name: Apple instrument_id: "APPLE" instrument_type: "cfd" +Name: MSCI Japan ETF instrument_id: "EWJ" instrument_type: "cfd" +Name: F5 Networks instrument_id: "FFIV:US" instrument_type: "cfd" +Name: Heinz instrument_id: "KHC:US" instrument_type: "cfd" +Name: British American Tobacco instrument_id: "BATSL-CHIX" instrument_type: "cfd" +Name: Nvidia instrument_id: "NVDA:US" instrument_type: "cfd" +Name: E.ON instrument_id: "EOAND-CHIX" instrument_type: "cfd" +Name: Citrix Systems instrument_id: "CTXS:US" instrument_type: "cfd" +Name: UK 100 instrument_id: "UK100" instrument_type: "cfd" +Name: BBVA instrument_id: "BBVAE-CHIX" instrument_type: "cfd" +Name: Philip Morris Int. instrument_id: "PM:US" instrument_type: "cfd" +Name: Consolidated Edison instrument_id: "ED:US" instrument_type: "cfd" +Name: Netflix instrument_id: "NFLX:US" instrument_type: "cfd" +Name: Allianz instrument_id: "ALVD-CHIX" instrument_type: "cfd" +Name: FR 40 instrument_id: "FRANCE40" instrument_type: "cfd" +Name: Schlumberger instrument_id: "SLB:US" instrument_type: "cfd" +Name: Platinum instrument_id: "XPTUSD" instrument_type: "cfd" +Name: Consumer Discretionary SPDR instrument_id: "XLY" instrument_type: "cfd" +Name: BHP Billiton instrument_id: "BLTL-CHIX" instrument_type: "cfd" +Name: Credit Suisse instrument_id: "CSGNZ-CHIX" instrument_type: "cfd" +Name: Activision Blizzard instrument_id: "ATVI:US" instrument_type: "cfd" +Name: Hasbro instrument_id: "HAS:US" instrument_type: "cfd" +Name: Bristol-Myers Squibb instrument_id: "BMY:US" instrument_type: "cfd" +Name: Equity Residential instrument_id: "EQR:US" instrument_type: "cfd" +Name: Suncor Energy Inc. instrument_id: "SU" instrument_type: "cfd" +Name: Cintas instrument_id: "CTAS:US" instrument_type: "cfd" +Name: Morgan Stanley instrument_id: "MORSTAN" instrument_type: "cfd" +Name: Devon Energy instrument_id: "DVN:US" instrument_type: "cfd" +Name: Dun & Bradstreet instrument_id: "DNB:US" instrument_type: "cfd" +Name: S&P Metals & Mining ETF instrument_id: "XME" instrument_type: "cfd" +Name: SP 35 instrument_id: "SPAIN35" instrument_type: "cfd" +Name: Boeing instrument_id: "BA:US" instrument_type: "cfd" +Name: Ferrari instrument_id: "FERRARI" instrument_type: "cfd" +Name: US Real Estate ETF instrument_id: "IYR" instrument_type: "cfd" +Name: Dover instrument_id: "DOV:US" instrument_type: "cfd" +Name: Honeywell instrument_id: "HON:US" instrument_type: "cfd" +Name: Marks & Spencer instrument_id: "MKSL-CHIX" instrument_type: "cfd" +Name: BMW instrument_id: "BMWD-CHIX" instrument_type: "cfd" +Name: HK 50 instrument_id: "HONGKONG50" instrument_type: "cfd" +Name: PayPal instrument_id: "PYPL:US" instrument_type: "cfd" +Name: Alcoa instrument_id: "AA:US" instrument_type: "cfd" +Name: CVS Health instrument_id: "CVS:US" instrument_type: "cfd" +Name: iShares Russell 2000 ETF instrument_id: "IWM" instrument_type: "cfd" +Name: Walgreens Boots All. instrument_id: "WBA:US" instrument_type: "cfd" +Name: ANSYS instrument_id: "ANSS" instrument_type: "cfd" +Name: Energy SPDR instrument_id: "XLE" instrument_type: "cfd" +Name: Wheat instrument_id: "W1" instrument_type: "cfd" +Name: Ecolab instrument_id: "ECL:US" instrument_type: "cfd" +Name: Starbucks instrument_id: "SBUX:US" instrument_type: "cfd" +Name: Heineken Holding NV instrument_id: "HEIOA-CHIX" instrument_type: "cfd" +Name: Quest Diagnostics instrument_id: "DGX:US" instrument_type: "cfd" +Name: easyJet instrument_id: "EZJL-CHIX" instrument_type: "cfd" +Name: JP 225 instrument_id: "JAPAN225" instrument_type: "cfd" +Name: AMD instrument_id: "AMD" instrument_type: "cfd" +Name: Colgate-Palmolive instrument_id: "CL:US" instrument_type: "cfd" +Name: Salesforce.com instrument_id: "CRM:US" instrument_type: "cfd" +Name: Technology SPDR instrument_id: "XLK" instrument_type: "cfd" +Name: Dropbox instrument_id: "DBX" instrument_type: "cfd" +Name: Fidelity National Information Services instrument_id: "FIS:US" instrument_type: "cfd" +Name: 3M Company instrument_id: "MMM:US" instrument_type: "cfd" +Name: Daimler instrument_id: "DAID-CHIX" instrument_type: "cfd" +Name: Baidu instrument_id: "BAIDU" instrument_type: "cfd" +Name: Wal-Mart Stores instrument_id: "WMT:US" instrument_type: "cfd" +Name: Exxon Mobil instrument_id: "XOM:US" instrument_type: "cfd" +Name: Raytheon instrument_id: "RTN:US" instrument_type: "cfd" +Name: eBay instrument_id: "EBAY:US" instrument_type: "cfd" +Name: Discovery – Class A instrument_id: "DISCA:US" instrument_type: "cfd" +Name: Oil Services ETF instrument_id: "OIH" instrument_type: "cfd" +Name: Microsoft instrument_id: "MSFT" instrument_type: "cfd" +Name: Chevron instrument_id: "CVX:US" instrument_type: "cfd" +Name: Lloyds Banking Group PLC instrument_id: "LLOYL-CHIX" instrument_type: "cfd" +Name: 20+ Year Treasury Bond ETF instrument_id: "TLT" instrument_type: "cfd" +Name: Adidas instrument_id: "ADSD-CHIX" instrument_type: "cfd" +Name: Comcast – Class A instrument_id: "CMCSA:US" instrument_type: "cfd" +Name: Danaher instrument_id: "DHR:US" instrument_type: "cfd" +Name: Align Technology instrument_id: "ALGN" instrument_type: "cfd" +Name: Volkswagen instrument_id: "VOW3D-CHIX" instrument_type: "cfd" +Name: Fiserv instrument_id: "FISV:US" instrument_type: "cfd" +Name: L'Oreal instrument_id: "ORP-CHIX" instrument_type: "cfd" +Name: D. R. Horton instrument_id: "DHI:US" instrument_type: "cfd" +Name: Deutsche Telekom instrument_id: "DTED-CHIX" instrument_type: "cfd" +Name: Gold Miners ETF instrument_id: "GDX" instrument_type: "cfd" +Name: Gold instrument_id: "XAUUSD" instrument_type: "cfd" +Name: Extra Space Storage instrument_id: "EXR:US" instrument_type: "cfd" +Name: Manchester United instrument_id: "MANU" instrument_type: "cfd" +Name: Banco Santander instrument_id: "SANE-CHIX" instrument_type: "cfd" +Name: Abbott Labs instrument_id: "ABT:US" instrument_type: "cfd" +Name: FMC Corporation instrument_id: "FMC:US" instrument_type: "cfd" +Name: Snapchat instrument_id: "SNAP" instrument_type: "cfd" +Name: ThyssenKrupp instrument_id: "TKAD-CHIX" instrument_type: "cfd" +Name: GER 30 instrument_id: "GERMANY30" instrument_type: "cfd" +Name: Fortune Brands Home & Security instrument_id: "FBHS:US" instrument_type: "cfd" +Name: Crude Oil Brent instrument_id: "UKOUSD" instrument_type: "cfd" +Name: Coca Cola instrument_id: "COKE" instrument_type: "cfd" +Name: Essex Property Trust instrument_id: "ESS:US" instrument_type: "cfd" +Name: Wm Morrison Supermarkets instrument_id: "MRWL-CHIX" instrument_type: "cfd" +Name: Gilead Sciences instrument_id: "GILD:US" instrument_type: "cfd" +Name: MasterCard instrument_id: "MA:US" instrument_type: "cfd" +Name: Nestlé instrument_id: "NESNZ-CHIX" instrument_type: "cfd" +Name: CenturyLink instrument_id: "CTL:US" instrument_type: "cfd" +Name: Deutsche Bank instrument_id: "DBKD-CHIX" instrument_type: "cfd" +Name: T-Mobile US, Inc. instrument_id: "TMUS" instrument_type: "cfd" +Name: McDonald's instrument_id: "MCDON" instrument_type: "cfd" +Name: Diamond Offshore Drilling instrument_id: "DO:US" instrument_type: "cfd" +Name: Intel instrument_id: "INTEL" instrument_type: "cfd" +Name: Fifth Third Bank instrument_id: "FITB:US" instrument_type: "cfd" +Name: Best Buy instrument_id: "BBY:US" instrument_type: "cfd" +Name: EQT Corporation instrument_id: "EQT:US" instrument_type: "cfd" +Name: BP PLC instrument_id: "BPL-CHIX" instrument_type: "cfd" +Name: E-Trade instrument_id: "ETFC:US" instrument_type: "cfd" +Name: Stryker instrument_id: "SYK:US" instrument_type: "cfd" +Name: Dow Jones Industrial Average ETF instrument_id: "DIA" instrument_type: "cfd" +Name: NEM ×20 instrument_id: "XEMUSD-L" instrument_type: "crypto" +Name: Ethereum instrument_id: "ETHUSD" instrument_type: "crypto" +Name: EOS ×20 instrument_id: "EOSUSD-L" instrument_type: "crypto" +Name: Qtum instrument_id: "QTMUSD" instrument_type: "crypto" +Name: EOS instrument_id: "EOSUSD" instrument_type: "crypto" +Name: Bitcoin Cash ×20 instrument_id: "BCHUSD-L" instrument_type: "crypto" +Name: Bitcoin instrument_id: "BTCUSD" instrument_type: "crypto" +Name: TRON instrument_id: "TRXUSD" instrument_type: "crypto" +Name: Ripple ×20 instrument_id: "XRPUSD-L" instrument_type: "crypto" +Name: Stellar ×20 instrument_id: "XLMUSD-L" instrument_type: "crypto" +Name: Ethereum ×50 instrument_id: "ETHUSD-L" instrument_type: "crypto" +Name: ZCash instrument_id: "ZECUSD" instrument_type: "crypto" +Name: Litecoin instrument_id: "LTCUSD" instrument_type: "crypto" +Name: Bitcoin Cash instrument_id: "BCHUSD" instrument_type: "crypto" +Name: Bitcoin ×100 instrument_id: "BTCUSD-L" instrument_type: "crypto" +Name: OmiseGo instrument_id: "OMGUSD" instrument_type: "crypto" +Name: TRON ×50 instrument_id: "TRXUSD-L" instrument_type: "crypto" +Name: Cardano ×20 instrument_id: "ADAUSD-L" instrument_type: "crypto" +Name: Dash instrument_id: "DSHUSD" instrument_type: "crypto" +Name: Litecoin ×20 instrument_id: "LTCUSD-L" instrument_type: "crypto" +Name: Ripple instrument_id: "XRPUSD" instrument_type: "crypto" \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/mkdocs.yml b/v2/pocketoptionapi-v2/mkdocs.yml new file mode 100644 index 0000000..6e7d409 --- /dev/null +++ b/v2/pocketoptionapi-v2/mkdocs.yml @@ -0,0 +1,81 @@ +site_name: pocketoptionapi document +#repo_name: 'THU-DBLAB/IRBRL' +#repo_url: 'https://github.com/THU-DBLAB/IRBRL' +#site_url: 'https://thu-dblab.github.io/IRBRL/' +edit_uri: "" # this code say do not view edit on page +extra: + # disqus: 'lu-yi-hsun' + search: + language: 'jp' + #-tokenizer: '[\a\-\.]+' + #social: + # - type: 'github' + # link: 'https://github.com/Lu-Yi-Hsun/' + # - type: 'facebook' + # link: 'https://www.facebook.com/profile.php?id=100001559307331' + #- type: 'twitter' + #link: 'https://twitter.com/squidfunk' + # - type: 'linkedin' + # link: 'https://linkedin.com/in/squidfunk' + social: + - icon: fontawesome/brands/github + link: https://github.com/Lu-Yi-Hsun/ + - icon: fontawesome/brands/facebook + link: https://www.facebook.com/profile.php?id=100001559307331 + + + +theme: + language: "en" + name: 'material' #readthedocs/readthedocs + palette: + primary: 'indigo' + accent: 'Blue Grey' + feature: + tabs: false + font: + text: 'Roboto' + code: 'Roboto Mono' + favicon: image/icon/favicon.ico + + +# Extensions +markdown_extensions: + - footnotes + - markdown.extensions.admonition +# - markdown.extensions.codehilite: + # guess_lang: false + # linenums: true + - markdown.extensions.def_list + - markdown.extensions.footnotes + - markdown.extensions.meta + - markdown.extensions.toc: + permalink: true + - pymdownx.superfences: + preserve_tabs: true + - pymdownx.arithmatex + - pymdownx.betterem: + smart_enable: all + - pymdownx.caret + - pymdownx.critic + - pymdownx.details + + - pymdownx.inlinehilite + - pymdownx.magiclink + - pymdownx.mark + - pymdownx.smartsymbols + - pymdownx.superfences + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.tilde + - pymdownx.emoji: + emoji_index: !!python/name:materialx.emoji.twemoji + emoji_generator: !!python/name:materialx.emoji.to_svg + +extra_javascript: + - 'javascripts/extra.js' + - 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js' + +nav: + - Get start: index.md + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/__init__.py b/v2/pocketoptionapi-v2/pocketoptionapi/__init__.py new file mode 100644 index 0000000..bbe6873 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/__init__.py @@ -0,0 +1,16 @@ + +import logging + +def _prepare_logging(): + + logger = logging.getLogger(__name__) + #https://github.com/Lu-Yi-Hsun/pocketoptionapi_private/issues/1 + #try to fix this problem + #logger.setLevel(logging.DEBUG) + logger.addHandler(logging.NullHandler()) + + websocket_logger = logging.getLogger("websocket") + websocket_logger.setLevel(logging.DEBUG) + websocket_logger.addHandler(logging.NullHandler()) + +_prepare_logging() diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/api.py b/v2/pocketoptionapi-v2/pocketoptionapi/api.py new file mode 100644 index 0000000..27ecd6e --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/api.py @@ -0,0 +1,347 @@ + +import time +import json +import logging +import threading +import requests +import ssl +import atexit +import tempfile +from des import DesKey +import base64 +from collections import deque +import sqlite3 +from pocketoptionapi.http.login import Login + +from pocketoptionapi.http.logout import Logout + +from pocketoptionapi.ws.client import WebsocketClient +from pocketoptionapi.ws.chanels.subscribe import * +from pocketoptionapi.ws.chanels.unsubscribe import * + +from pocketoptionapi.ws.chanels.auth import * +from pocketoptionapi.ws.chanels.ping_server import * +from pocketoptionapi.ws.chanels.buy import * +from pocketoptionapi.ws.chanels.candle import * +from pocketoptionapi.ws.chanels.get_balance import * +from pocketoptionapi.ws.chanels.get_asset_data import * + +import pocketoptionapi.global_value as global_value + +import collections +from collections import defaultdict + + + +# InsecureRequestWarning: Unverified HTTPS request is being made. +# Adding certificate verification is strongly advised. +# See: https://urllib3.readthedocs.org/en/latest/security.html +requests.packages.urllib3.disable_warnings() # pylint: disable=no-member + +def nested_dict(n, type): + if n == 1: + return defaultdict(type) + else: + return defaultdict(lambda: nested_dict(n-1, type)) + +class pocketoptionapi(object): + + def __init__(self, wss, header=None,proxies=None,set_ssid=None,auto_logout=True,_2FA_TOKEN=None): + + self.server_timestamp={} + self.real_time_canlde=nested_dict(2, dict) + self.real_time_quote={} + self.raw_e98={} + self.request_data={} + self.buy_data={} + self.check_win_end={} + self.check_win_refund_data={} + self.check_win_close_data={} + self.sub_uid={} + self.buy_info={} + self.header=header + self.wss_url = wss + self.websocket_client = None + self.session = requests.Session() + self.session.verify = False + self.session.trust_env = False + + self.getcandle_data={} + self.proxies = proxies + self._2FA_TOKEN=_2FA_TOKEN + # is used to determine if a buyOrder was set or failed. If + # it is None, there had been no buy order yet or just send. + # If it is false, the last failed + # If it is true, the last buy order was successful + self.buy_successful = None + self.object_id=None + self.set_ssid=set_ssid + self.auto_logout=auto_logout + self.realtime_price={} + self.updateAssets_data=None + + self.auto_tmp_session={} + self.async_name="" + + self.conn = sqlite3.connect(tempfile.gettempdir()+"/.pocketoptionapi") + + + self.c = self.conn.cursor() + self.c.execute('''create table if not exists session (email CHAR(100) PRIMARY KEY ,session CHAR(200));''') + self.conn.commit() + + #self._input_session("sdsss","twwt") + + + def _get_session(self,email): + cursor = self.c.execute("SELECT session from session Where email='"+email+"';") + data=cursor.fetchall() + if len(data)==0: + return None + else: + return data[0][0] + + + def _input_session(self,email,session): + try: + self.c.execute("INSERT INTO session (email,session) VALUES ('"+email+"','"+session+"' );") + except: + self.c.execute("UPDATE session set session = '"+session+"' where email='"+email+"' ") + self.conn.commit() + + def send_http_request(self, url, method, data=None, params=None, headers=None,cookies=None): # pylint: disable=too-many-arguments + + logger = logging.getLogger(__name__) + + logger.debug(method+": "+url+" headers: "+str(self.session.headers)+" cookies: "+str(self.session.cookies.get_dict())) + + + response = self.session.request(method=method, + url=url, + data=data, + params=params, + headers=headers, + proxies=self.proxies, + cookies=cookies) + logger.debug(response) + logger.debug(response.text) + logger.debug(response.headers) + logger.debug(response.cookies) + + + return response + + @property + def websocket(self): + + return self.websocket_client.wss + + def send_websocket_request(self,data,no_force_send=True): + if global_value.check_websocket_if_connect[self.object_id]==1: + logger = logging.getLogger(__name__) + data=data.replace("\\\\","\\") + data=data.replace("'","\"") + if no_force_send==False: + self.websocket.send(data) + else: + global_value.ssl_Mutex[self.object_id].acquire() + self.websocket.send(data) + global_value.ssl_Mutex[self.object_id].release() + logger.debug(data) + + def init_ansyc_data(self): + get=[{"t":2,"e":98,"uuid":"KDOJ6MMIERN26ZDIRV7","d":[22,20,21,26]}] + + self.send_websocket_request(get) + + def get_server_time(self,req_id:str=""): + get=[{"t":2,"e":90,"uuid":req_id}] + + self.send_websocket_request(get) + + + @property + def subscribe_realtime_candle(self): + + return changeSymbol(self) + + @property + def unsubscribe_realtime_candle(self): + return unsubfor(self) + + + @property + def logout(self): + + return Logout(self) + @property + def Auth_Mode(self): + return auth_mode(self) + @property + def login(self): + + return Login(self) + @property + def ping_to_server(self): + return Ping_To_Server(self) + @property + def TWO_FA(self): + return _2FA(self) + + @property + def Get_Balance(self): + + return get_balance(self) + @property + def Get_Asset_Data(self): + + return get_asset_data(self) + + @property + def ssid(self): + + return Ssid(self) + + + + @property + def getcandles(self): + + return loadHistoryPeriod(self) + + + + @property + def buy(self): + return buy_binary(self) + + @property + def sell_option(self): + return cancelOrder(self) + + + def set_session(self,cookies,headers): + + self.session.headers.update(headers) + + self.session.cookies.clear_session_cookies() + requests.utils.add_dict_to_cookiejar(self.session.cookies, cookies) + def init_global_value(self,object_id): + global_value.ssl_Mutex[object_id]=threading.Lock() + global_value.check_websocket_if_connect[object_id]=None + # try fix ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2361) + + #if false websocket can sent self.websocket.send(data) + #else can not sent self.websocket.send(data) + + if object_id not in global_value.SSID: + global_value.SSID[object_id]=self.set_ssid + + global_value.check_websocket_if_error[object_id]=False + global_value.websocket_error_reason[object_id]=None + #start account is demo + global_value.account_mode_isDemo[object_id]=1 + + global_value.balance_id[object_id]=0 + global_value.check_auth_finish[object_id]=False + global_value.balance[object_id]=nested_dict(2,dict) + global_value.req_mutex[object_id]=threading.Lock() + global_value.req_id[object_id]=1 + global_value.auth_send_count[object_id]=0 + global_value.real_balance[object_id]=None + global_value.practice_balance[object_id]=None + + + def del_init_global_value(self,object_id): + del global_value.check_websocket_if_connect[object_id] + del global_value.SSID[object_id] + del global_value.check_websocket_if_error[object_id] + del global_value.websocket_error_reason[object_id] + del global_value.balance_id[object_id] + del global_value.req_mutex[object_id] + del global_value.req_id[object_id] + del global_value.balance[object_id] + def start_websocket(self): + + self.websocket_client = WebsocketClient(self) + try: + self.del_init_global_value(self.object_id) + except: + pass + # update self.object_id + self.object_id=id(self.websocket_client.wss) + self.init_global_value(self.object_id) + + try: + import re + p = '(?:http.*://)?(?P[^:/ ]+).?(?P[0-9]*).*' + + m = re.search(p,self.proxies["http"]) + http_proxy_host=m.group('host') # 'www.abc.com' + http_proxy_port=m.group('port') # '123' + except: + http_proxy_host=None + http_proxy_port=None + + self.websocket_thread = threading.Thread(target=self.websocket.run_forever,kwargs={'sslopt': { + "check_hostname": False, "cert_reqs": ssl.CERT_NONE, "ca_certs": "cacert.pem"},"http_proxy_host":http_proxy_host,"http_proxy_port":http_proxy_port,"suppress_origin":True}) # for fix pyinstall error: cafile, capath and cadata cannot be all omitted + self.websocket_thread.daemon = True + self.websocket_thread.start() + + start_time=time.time() + while True: + + if global_value.check_websocket_if_error[self.object_id]: + return False,global_value.websocket_error_reason[self.object_id] + if global_value.check_websocket_if_connect[self.object_id] == 0 : + global_value.websocket_error_reason[self.object_id]="Websocket connection closed." + return False,global_value.websocket_error_reason[self.object_id] + elif global_value.check_websocket_if_connect[self.object_id] == 1: + return True,None + if time.time()-start_time>global_value.wait_connect_sec: + global_value.websocket_error_reason[self.object_id]="Connect Error" + return False,global_value.websocket_error_reason[self.object_id] + + + + pass + def get_ssid(self): + response=None + response = self.login(self.username, self.password,self._2FA_TOKEN) # + if "session" in response.cookies: + self._input_session(self.username,response.cookies["session"]) + return response + + def connect(self): + + try: + self.logout() + except: + pass + if self.auto_logout: + atexit.register(self.logout) + + check_websocket,websocket_reason=self.start_websocket() + if check_websocket==False: + return check_websocket,websocket_reason + #set ssis cookie + + + return True,None + + def close(self): + self.websocket.close() + self.websocket_thread.join() + + def websocket_alive(self): + return self.websocket_thread.is_alive() + + @property + def Get_User_Profile_Client(self): + return Get_user_profile_client(self) + @property + def Request_Leaderboard_Userinfo_Deals_Client(self): + return Request_leaderboard_userinfo_deals_client(self) + @property + def Get_Users_Availability(self): + return Get_users_availability(self) diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/constants.py b/v2/pocketoptionapi-v2/pocketoptionapi/constants.py new file mode 100644 index 0000000..92022af --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/constants.py @@ -0,0 +1,7 @@ +"""Module for IQ Option API constants.""" +#~~~need to update~~~ +ACTIVES ={'EURUSD': 1, 'EURGBP': 2, 'GBPJPY': 3, 'EURJPY': 4, 'GBPUSD': 5, 'USDJPY': 6, 'AUDCAD': 7, 'NZDUSD': 8, 'USDRUB': 10, 'AMAZON': 31, 'APPLE': 32, 'BAIDU': 33, 'CISCO': 34, 'FACEBOOK': 35, 'GOOGLE': 36, 'INTEL': 37, 'MSFT': 38, 'YAHOO': 40, 'AIG': 41, 'CITI': 45, 'COKE': 46, 'GE': 48, 'GM': 49, 'GS': 50, 'JPM': 51, 'MCDON': 52, 'MORSTAN': 53, 'NIKE': 54, 'USDCHF': 72, 'XAUUSD': 74, 'XAGUSD': 75, 'EURUSD-OTC': 76, 'EURGBP-OTC': 77, 'USDCHF-OTC': 78, 'EURJPY-OTC': 79, 'NZDUSD-OTC': 80, 'GBPUSD-OTC': 81, 'GBPJPY-OTC': 84, 'USDJPY-OTC': 85, 'AUDCAD-OTC': 86, 'ALIBABA': 87, 'YANDEX': 95, 'AUDUSD': 99, 'USDCAD': 100, 'AUDJPY': 101, 'GBPCAD': 102, 'GBPCHF': 103, 'GBPAUD': 104, 'EURCAD': 105, 'CHFJPY': 106, 'CADCHF': 107, 'EURAUD': 108, 'TWITTER': 113, 'FERRARI': 133, 'TESLA': 167, 'USDNOK': 168, 'EURNZD': 212, 'USDSEK': 219, 'USDTRY': 220, 'MMM:US': 252, 'ABT:US': 253, 'ABBV:US': 254, 'ACN:US': 255, 'ATVI:US': 256, 'ADBE:US': 258, 'AAP:US': 259, 'AA:US': 269, 'AGN:US': 272, 'MO:US': 278, 'AMGN:US': 290, 'T:US': 303, 'ADSK:US': 304, 'BAC:US': 313, 'BBY:US': 320, 'BA:US': 324, 'BMY:US': 328, 'CAT:US': 338, 'CTL:US': 344, 'CVX:US': 349, 'CTAS:US': 356, 'CTXS:US': 360, 'CL:US': 365, 'CMCSA:US': 366, 'CXO:US': 369, 'COP:US': 370, 'ED:US': 371, 'COST:US': 374, 'CVS:US': 379, 'DHI:US': 380, 'DHR:US': 381, 'DRI:US': 382, 'DVA:US': 383, 'DAL:US': 386, 'DVN:US': 388, 'DO:US': 389, 'DLR:US': 390, 'DFS:US': 391, 'DISCA:US': 392, 'DOV:US': 397, 'DTE:US': 400, 'DNB:US': 403, 'ETFC:US': 404, 'EMN:US': 405, 'EBAY:US': 407, 'ECL:US': 408, 'EIX:US': 409, 'EMR:US': 413, 'ETR:US': 415, 'EQT:US': 417, 'EFX:US': 418, 'EQR:US': 420, 'ESS:US': 421, 'EXPD:US': 426, 'EXR:US': 428, 'XOM:US': 429, 'FFIV:US': 430, 'FAST:US': 432, 'FRT:US': 433, 'FDX:US': 434, 'FIS:US': 435, 'FITB:US': 436, 'FSLR:US': 437, 'FE:US': 438, 'FISV:US': 439, 'FLS:US': 441, 'FMC:US': 443, 'FBHS:US': 448, 'FCX:US': 450, 'FTR:US': 451, 'GILD:US': 460, 'HAS:US': 471, 'HON:US': 480, 'IBM:US': 491, 'KHC:US': 513, 'LMT:US': 528, 'MA:US': 542, 'MDT:US': 548, 'MU:US': 553, 'NFLX:US': 569, 'NEE:US': 575, 'NVDA:US': 586, 'PYPL:US': 597, 'PFE:US': 603, 'PM:US': 605, 'PG:US': 617, 'QCOM:US': 626, 'DGX:US': 628, 'RTN:US': 630, 'CRM:US': 645, 'SLB:US': 647, 'SBUX:US': 666, 'SYK:US': 670, 'DIS:US': 689, 'TWX:US': 692, 'VZ:US': 723, 'V:US': 726, 'WMT:US': 729, 'WBA:US': 730, 'WFC:US': 733, 'SNAP': 756, 'DUBAI': 757, 'TA25': 758, 'AMD': 760, 'ALGN': 761, 'ANSS': 762, 'DRE': 772, 'IDXX': 775, 'RMD': 781, 'SU': 783, 'TFX': 784, 'TMUS': 785, 'QQQ': 796, 'SPY': 808, 'BTCUSD': 816, 'XRPUSD': 817, 'ETHUSD': 818, 'LTCUSD': 819, 'DSHUSD': 821, 'BCHUSD': 824, 'OMGUSD': 825, 'ZECUSD': 826, 'ETCUSD': 829, 'BTCUSD-L': 830, 'ETHUSD-L': 831, 'LTCUSD-L': 834, 'BCHUSD-L': 836, 'BTGUSD': 837, 'QTMUSD': 845, 'XLMUSD': 847, 'TRXUSD': 858, 'EOSUSD': 864, 'USDINR': 865, 'USDPLN': 866, 'USDBRL': 867, 'USDZAR': 868, 'DBX': 889, 'SPOT': 891, 'USDSGD': 892, 'USDHKD': 893, 'LLOYL-CHIX': 894, 'VODL-CHIX': 895, 'BARCL-CHIX': 896, 'TSCOL-CHIX': 897, 'BPL-CHIX': 898, 'HSBAL-CHIX': 899, 'RBSL-CHIX': 900, 'BLTL-CHIX': 901, 'MRWL-CHIX': 902, 'STANL-CHIX': 903, 'RRL-CHIX': 904, 'MKSL-CHIX': 905, 'BATSL-CHIX': 906, 'ULVRL-CHIX': 908, 'EZJL-CHIX': 909, 'ADSD-CHIX': 910, 'ALVD-CHIX': 911, 'BAYND-CHIX': 912, 'BMWD-CHIX': 913, 'CBKD-CHIX': 914, 'COND-CHIX': 915, 'DAID-CHIX': 916, 'DBKD-CHIX': 917, 'DPWD-CHIX': 919, 'DTED-CHIX': 920, 'EOAND-CHIX': 921, 'MRKD-CHIX': 922, 'SIED-CHIX': 923, 'TKAD-CHIX': 924, 'VOW3D-CHIX': 925, 'ENELM-CHIX': 926, 'ENIM-CHIX': 927, 'FCAM-CHIX': 928, 'PIRCM-CHIX': 929, 'PSTM-CHIX': 930, 'TITM-CHIX': 931, 'CSGNZ-CHIX': 933, 'NESNZ-CHIX': 934, 'ROGZ-CHIX': 935, 'UBSGZ-CHIX': 936, 'SANE-CHIX': 937, 'BBVAE-CHIX': 938, 'TEFE-CHIX': 939, 'AIRP-CHIX': 940, 'HEIOA-CHIX': 941, 'ORP-CHIX': 942, 'AUDCHF': 943, 'AUDNZD': 944, 'CADJPY': 945, 'EURCHF': 946, 'GBPNZD': 947, 'NZDCAD': 948, 'NZDJPY': 949, 'EURNOK': 951, 'CHFSGD': 952, 'EURSGD': 955, 'USDMXN': 957, 'JUVEM': 958, 'ASRM': 959, 'MANU': 966, 'UKOUSD': 969, 'XPTUSD': 970, 'USOUSD': 971, 'W1': 977, 'AUDDKK': 983, 'AUDMXN': 985, 'AUDNOK': 986, 'AUDSEK': 988, 'AUDSGD': 989, 'AUDTRY': 990, 'CADMXN': 992, 'CADNOK': 993, 'CADPLN': 994, 'CADTRY': 995, 'CHFDKK': 996, 'CHFNOK': 998, 'CHFSEK': 1000, 'CHFTRY': 1001, 'DKKPLN': 1004, 'DKKSGD': 1005, 'EURDKK': 1007, 'EURMXN': 1008, 'EURTRY': 1010, 'EURZAR': 1011, 'GBPILS': 1013, 'GBPMXN': 1014, 'GBPNOK': 1015, 'GBPPLN': 1016, 'GBPSEK': 1017, 'GBPSGD': 1018, 'GBPTRY': 1019, 'NOKDKK': 1023, 'NOKJPY': 1024, 'NOKSEK': 1025, 'NZDDKK': 1026, 'NZDMXN': 1027, 'NZDNOK': 1028, 'NZDSEK': 1030, 'NZDSGD': 1031, 'NZDTRY': 1032, 'NZDZAR': 1033, 'PLNSEK': 1036, 'SEKDKK': 1037, 'SEKJPY': 1038, 'SGDJPY': 1041, 'USDDKK': 1045, 'NZDCHF': 1048, 'GBPHUF': 1049, 'USDCZK': 1050, 'USDHUF': 1051, 'CADSGD': 1054, 'EURCZK': 1056, 'EURHUF': 1057, 'USDTHB': 1062, 'IOTUSD-L': 1116, 'XLMUSD-L': 1117, 'NEOUSD-L': 1118, 'ADAUSD-L': 1119, 'XEMUSD-L': 1120, 'XRPUSD-L': 1122, 'EEM': 1203, 'FXI': 1204, 'IWM': 1205, 'GDX': 1206, 'XOP': 1209, 'XLK': 1210, 'XLE': 1211, 'XLU': 1212, 'IEMG': 1213, 'XLY': 1214, 'IYR': 1215, 'SQQQ': 1216, 'OIH': 1217, 'SMH': 1218, 'EWJ': 1219, 'XLB': 1221, 'DIA': 1222, 'TLT': 1223, 'SDS': 1224, 'EWW': 1225, 'XME': 1227, 'QID': 1229, 'AUS200': 1230, 'FRANCE40': 1231, 'GERMANY30': 1232, 'HONGKONG50': 1233, 'SPAIN35': 1234, 'US30': 1235, 'USNDAQ100': 1236, 'JAPAN225': 1237, 'USSPX500': 1239, 'UK100': 1241, 'TRXUSD-L': 1242, 'EOSUSD-L': 1244, 'BNBUSD-L': 1279, 'ACB': 1288, 'CGC': 1289, 'CRON': 1290, 'GWPH': 1291, 'MJ': 1292, 'TLRY': 1293, 'BUD': 1294, 'LYFT': 1313, 'PINS': 1315, 'ZM': 1316, 'UBER': 1334, 'MELI': 1335, 'BYND': 1336, 'BSVUSD-L': 1338, 'ONTUSD-L': 1339, 'ATOMUSD-L': 1340, 'WORK': 1343, 'FDJP': 1350, 'CAN': 1351, 'VIAC': 1352, 'TFC': 1353} + +""" + {'EURUSD': 1, 'EURGBP': 2, 'GBPJPY': 3, 'EURJPY': 4, 'GBPUSD': 5, 'USDJPY': 6, 'AUDCAD': 7, 'NZDUSD': 8, 'USDRUB': 10, 'AMAZON': 31, 'APPLE': 32, 'BAIDU': 33, 'CISCO': 34, 'FACEBOOK': 35, 'GOOGLE': 36, 'INTEL': 37, 'MSFT': 38, 'YAHOO': 40, 'AIG': 41, 'CITI': 45, 'COKE': 46, 'GE': 48, 'GM': 49, 'GS': 50, 'JPM': 51, 'MCDON': 52, 'MORSTAN': 53, 'NIKE': 54, 'USDCHF': 72, 'XAUUSD': 74, 'XAGUSD': 75, 'EURUSD-OTC': 76, 'EURGBP-OTC': 77, 'USDCHF-OTC': 78, 'EURJPY-OTC': 79, 'NZDUSD-OTC': 80, 'GBPUSD-OTC': 81, 'USDJPY-OTC': 85, 'AUDCAD-OTC': 86, 'ALIBABA': 87, 'YANDEX': 95, 'AUDUSD': 99, 'USDCAD': 100, 'AUDJPY': 101, 'GBPCAD': 102, 'GBPCHF': 103, 'GBPAUD': 104, 'EURCAD': 105, 'CHFJPY': 106, 'CADCHF': 107, 'EURAUD': 108, 'TWITTER': 113, 'FERRARI': 133, 'TESLA': 167, 'USDNOK': 168, 'EURNZD': 212, 'USDSEK': 219, 'USDTRY': 220, 'MMM:US': 252, 'ABT:US': 253, 'ABBV:US': 254, 'ACN:US': 255, 'ATVI:US': 256, 'ADBE:US': 258, 'AAP:US': 259, 'AA:US': 269, 'AGN:US': 272, 'MO:US': 278, 'AMGN:US': 290, 'T:US': 303, 'ADSK:US': 304, 'BAC:US': 313, 'BBY:US': 320, 'BA:US': 324, 'BMY:US': 328, 'CAT:US': 338, 'CTL:US': 344, 'CVX:US': 349, 'CTAS:US': 356, 'CTXS:US': 360, 'CL:US': 365, 'CMCSA:US': 366, 'CXO:US': 369, 'COP:US': 370, 'ED:US': 371, 'COST:US': 374, 'CVS:US': 379, 'DHI:US': 380, 'DHR:US': 381, 'DRI:US': 382, 'DVA:US': 383, 'DAL:US': 386, 'DVN:US': 388, 'DO:US': 389, 'DLR:US': 390, 'DFS:US': 391, 'DISCA:US': 392, 'DOV:US': 397, 'DTE:US': 400, 'DNB:US': 403, 'ETFC:US': 404, 'EMN:US': 405, 'EBAY:US': 407, 'ECL:US': 408, 'EIX:US': 409, 'EMR:US': 413, 'ETR:US': 415, 'EQT:US': 417, 'EFX:US': 418, 'EQR:US': 420, 'ESS:US': 421, 'EXPD:US': 426, 'EXR:US': 428, 'XOM:US': 429, 'FFIV:US': 430, 'FAST:US': 432, 'FRT:US': 433, 'FDX:US': 434, 'FIS:US': 435, 'FITB:US': 436, 'FSLR:US': 437, 'FE:US': 438, 'FISV:US': 439, 'FLS:US': 441, 'FMC:US': 443, 'FBHS:US': 448, 'FCX:US': 450, 'FTR:US': 451, 'GILD:US': 460, 'HAS:US': 471, 'HON:US': 480, 'IBM:US': 491, 'KHC:US': 513, 'LMT:US': 528, 'MA:US': 542, 'MDT:US': 548, 'MU:US': 553, 'NFLX:US': 569, 'NEE:US': 575, 'NVDA:US': 586, 'PYPL:US': 597, 'PFE:US': 603, 'PM:US': 605, 'PG:US': 617, 'QCOM:US': 626, 'DGX:US': 628, 'RTN:US': 630, 'CRM:US': 645, 'SLB:US': 647, 'SBUX:US': 666, 'SYK:US': 670, 'DIS:US': 689, 'TWX:US': 692, 'VZ:US': 723, 'V:US': 726, 'WMT:US': 729, 'WBA:US': 730, 'WFC:US': 733, 'SNAP': 756, 'DUBAI': 757, 'TA25': 758, 'AMD': 760, 'ALGN': 761, 'ANSS': 762, 'DRE': 772, 'IDXX': 775, 'RMD': 781, 'SU': 783, 'TFX': 784, 'TMUS': 785, 'QQQ': 796, 'SPY': 808, 'BTCUSD': 816, 'XRPUSD': 817, 'ETHUSD': 818, 'LTCUSD': 819, 'DSHUSD': 821, 'BCHUSD': 824, 'OMGUSD': 825, 'ZECUSD': 826, 'ETCUSD': 829, 'BTCUSD-L': 830, 'ETHUSD-L': 831, 'LTCUSD-L': 834, 'BCHUSD-L': 836, 'BTGUSD': 837, 'QTMUSD': 845, 'XLMUSD': 847, 'TRXUSD': 858, 'EOSUSD': 864, 'USDINR': 865, 'USDPLN': 866, 'USDBRL': 867, 'USDZAR': 868, 'DBX': 889, 'SPOT': 891, 'USDSGD': 892, 'USDHKD': 893, 'LLOYL-CHIX': 894, 'VODL-CHIX': 895, 'BARCL-CHIX': 896, 'TSCOL-CHIX': 897, 'BPL-CHIX': 898, 'HSBAL-CHIX': 899, 'RBSL-CHIX': 900, 'BLTL-CHIX': 901, 'MRWL-CHIX': 902, 'STANL-CHIX': 903, 'RRL-CHIX': 904, 'MKSL-CHIX': 905, 'BATSL-CHIX': 906, 'ULVRL-CHIX': 908, 'EZJL-CHIX': 909, 'ADSD-CHIX': 910, 'ALVD-CHIX': 911, 'BAYND-CHIX': 912, 'BMWD-CHIX': 913, 'CBKD-CHIX': 914, 'COND-CHIX': 915, 'DAID-CHIX': 916, 'DBKD-CHIX': 917, 'DPWD-CHIX': 919, 'DTED-CHIX': 920, 'EOAND-CHIX': 921, 'MRKD-CHIX': 922, 'SIED-CHIX': 923, 'TKAD-CHIX': 924, 'VOW3D-CHIX': 925, 'PIRCM-CHIX': 929, 'PSTM-CHIX': 930, 'TITM-CHIX': 931, 'CSGNZ-CHIX': 933, 'NESNZ-CHIX': 934, 'ROGZ-CHIX': 935, 'UBSGZ-CHIX': 936, 'SANE-CHIX': 937, 'BBVAE-CHIX': 938, 'TEFE-CHIX': 939, 'AIRP-CHIX': 940, 'HEIOA-CHIX': 941, 'ORP-CHIX': 942, 'AUDCHF': 943, 'AUDNZD': 944, 'CADJPY': 945, 'EURCHF': 946, 'GBPNZD': 947, 'NZDCAD': 948, 'NZDJPY': 949, 'EURNOK': 951, 'CHFSGD': 952, 'EURSGD': 955, 'USDMXN': 957, 'JUVEM': 958, 'ASRM': 959, 'MANU': 966, 'UKOUSD': 969, 'XPTUSD': 970, 'USOUSD': 971, 'W1': 977, 'AUDDKK': 983, 'AUDMXN': 985, 'AUDNOK': 986, 'AUDSEK': 988, 'AUDSGD': 989, 'AUDTRY': 990, 'CADMXN': 992, 'CADNOK': 993, 'CADPLN': 994, 'CADTRY': 995, 'CHFDKK': 996, 'CHFNOK': 998, 'CHFSEK': 1000, 'CHFTRY': 1001, 'DKKPLN': 1004, 'DKKSGD': 1005, 'EURDKK': 1007, 'EURMXN': 1008, 'EURTRY': 1010, 'EURZAR': 1011, 'GBPILS': 1013, 'GBPMXN': 1014, 'GBPNOK': 1015, 'GBPPLN': 1016, 'GBPSEK': 1017, 'GBPSGD': 1018, 'GBPTRY': 1019, 'NOKDKK': 1023, 'NOKJPY': 1024, 'NOKSEK': 1025, 'NZDDKK': 1026, 'NZDMXN': 1027, 'NZDNOK': 1028, 'NZDSEK': 1030, 'NZDSGD': 1031, 'NZDTRY': 1032, 'NZDZAR': 1033, 'PLNSEK': 1036, 'SEKDKK': 1037, 'SEKJPY': 1038, 'SGDJPY': 1041, 'USDDKK': 1045, 'NZDCHF': 1048, 'GBPHUF': 1049, 'USDCZK': 1050, 'USDHUF': 1051, 'CADSGD': 1054, 'EURCZK': 1056, 'EURHUF': 1057, 'USDTHB': 1062, 'IOTUSD-L': 1116, 'XLMUSD-L': 1117, 'NEOUSD-L': 1118, 'ADAUSD-L': 1119, 'XEMUSD-L': 1120, 'XRPUSD-L': 1122, 'EEM': 1203, 'FXI': 1204, 'IWM': 1205, 'GDX': 1206, 'XOP': 1209, 'XLK': 1210, 'XLE': 1211, 'XLU': 1212, 'IEMG': 1213, 'XLY': 1214, 'IYR': 1215, 'SQQQ': 1216, 'OIH': 1217, 'SMH': 1218, 'EWJ': 1219, 'XLB': 1221, 'DIA': 1222, 'TLT': 1223, 'SDS': 1224, 'EWW': 1225, 'XME': 1227, 'QID': 1229, 'AUS200': 1230, 'FRANCE40': 1231, 'GERMANY30': 1232, 'HONGKONG50': 1233, 'SPAIN35': 1234, 'US30': 1235, 'USNDAQ100': 1236, 'JAPAN225': 1237, 'USSPX500': 1239, 'UK100': 1241, 'TRXUSD-L': 1242, 'EOSUSD-L': 1244, 'BNBUSD-L': 1279, 'ACB': 1288, 'CGC': 1289, 'CRON': 1290, 'GWPH': 1291, 'MJ': 1292, 'TLRY': 1293, 'BUD': 1294, 'LYFT': 1313, 'PINS': 1315, 'ZM': 1316, 'UBER': 1334, 'MELI': 1335, 'BYND': 1336, 'BSVUSD-L': 1338, 'ONTUSD-L': 1339, 'ATOMUSD-L': 1340, 'WORK': 1343, 'FDJP': 1350, 'CAN': 1351, 'VIAC': 1352, 'TFC': 1353} +""" \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/country_id.py b/v2/pocketoptionapi-v2/pocketoptionapi/country_id.py new file mode 100644 index 0000000..60bc5e4 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/country_id.py @@ -0,0 +1,190 @@ +ID = {"Worldwide":0, + "AF": 1, + "AL": 2, + "DZ": 3, + "AD": 5, + "AO": 6, + "AI": 7, + "AG": 9, + "AR": 10, + "AM": 11, + "AW": 12, + "AT": 14, + "AZ": 15, + "BS": 16, + "BH": 17, + "BD": 18, + "BB": 19, + "BY": 20, + "BZ": 22, + "BJ": 23, + "BM": 24, + "BO": 26, + "BA": 27, + "BW": 28, + "BV": 29, + "BR": 30, + "BN": 31, + "BG": 32, + "BF": 33, + "BI": 34, + "KH": 35, + "CM": 36, + "CV": 38, + "KY": 39, + "TD": 41, + "CL": 42, + "CN": 43, + "CC": 45, + "CO": 46, + "KM": 47, + "CG": 48, + "CK": 49, + "CR": 50, + "CI": 51, + "HR": 52, + "CU": 53, + "CY": 54, + "CZ": 55, + "DK": 56, + "DJ": 57, + "DM": 58, + "DO": 59, + "TL": 60, + "EC": 61, + "EG": 62, + "SV": 63, + "EE": 66, + "ET": 67, + "FO": 69, + "FJ": 70, + "FI": 71, + "FR": 72, + "GF": 73, + "PF": 74, + "GA": 75, + "GM": 76, + "GE": 77, + "DE": 78, + "GH": 79, + "GR": 81, + "GD": 83, + "GP": 84, + "GT": 86, + "GN": 87, + "GY": 88, + "HT": 89, + "HN": 90, + "HK": 91, + "HU": 92, + "IS": 93, + "ID": 94, + "IQ": 95, + "IE": 96, + "IT": 97, + "JM": 98, + "JO": 100, + "KZ": 101, + "KE": 102, + "KI": 103, + "KW": 104, + "KG": 105, + "LA": 106, + "LV": 107, + "LB": 108, + "LS": 109, + "LR": 110, + "LY": 111, + "LT": 113, + "LU": 114, + "MO": 115, + "MK": 116, + "MG": 117, + "MW": 118, + "MY": 119, + "MV": 120, + "ML": 121, + "MT": 122, + "MQ": 124, + "MR": 125, + "MU": 126, + "MX": 128, + "FM": 129, + "MD": 130, + "MC": 131, + "MN": 132, + "MA": 134, + "MZ": 135, + "MM": 136, + "NA": 137, + "NP": 139, + "NL": 140, + "AN": 141, + "NC": 142, + "NZ": 143, + "NI": 144, + "NE": 145, + "NG": 146, + "NO": 149, + "OM": 150, + "PK": 151, + "PW": 152, + "PA": 153, + "PG": 154, + "PY": 155, + "PE": 156, + "PH": 157, + "PL": 159, + "PT": 160, + "QA": 162, + "RE": 163, + "RO": 164, + "RW": 166, + "KN": 167, + "LC": 168, + "SA": 171, + "SN": 172, + "SC": 173, + "SG": 175, + "SK": 176, + "SI": 177, + "SO": 179, + "ZA": 180, + "KR": 181, + "ES": 182, + "LK": 183, + "SH": 184, + "SR": 186, + "SZ": 187, + "SE": 188, + "CH": 189, + "TW": 191, + "TJ": 192, + "TZ": 193, + "TH": 194, + "TG": 195, + "TT": 198, + "TN": 199, + "TR": 200, + "TM": 201, + "UG": 203, + "UA": 204, + "AE": 205, + "GB": 206, + "UY": 207, + "UZ": 208, + "VE": 211, + "VN": 212, + "VG": 213, + "YE": 216, + "ZM": 218, + "ZW": 219, + "RS": 220, + "ME": 221, + "IN": 225, + "TC": 234, + "CD": 235, + "GG": 236, + "IM": 237, + "JE": 239, + "CW": 246, } diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/expiration.py b/v2/pocketoptionapi-v2/pocketoptionapi/expiration.py new file mode 100644 index 0000000..8a5dae6 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/expiration.py @@ -0,0 +1,80 @@ +# python +import time +from datetime import datetime, timedelta + +# https://docs.python.org/3/library/datetime.html +# If optional argument tz is None or not specified, the timestamp is converted to the platform's local date and time, and the returned datetime object is naive. +# time.mktime(dt.timetuple()) + + +def date_to_timestamp(dt): + # local timezone to timestamp support python2 pytohn3 + return time.mktime(dt.timetuple()) + + +def get_expiration_time(timestamp, duration): + # + now_date = datetime.fromtimestamp(timestamp) + exp_date = now_date.replace(second=0, microsecond=0) + if (int(date_to_timestamp(exp_date+timedelta(minutes=1)))-timestamp) > 30: + exp_date = exp_date+timedelta(minutes=1) + + else: + exp_date = exp_date+timedelta(minutes=2) + exp = [] + for _ in range(5): + exp.append(date_to_timestamp(exp_date)) + exp_date = exp_date+timedelta(minutes=1) + + idx = 50 + index = 0 + now_date = datetime.fromtimestamp(timestamp) + exp_date = now_date.replace(second=0, microsecond=0) + while index < idx: + if int(exp_date.strftime("%M")) % 15 == 0 and (int(date_to_timestamp(exp_date))-int(timestamp)) > 60*5: + exp.append(date_to_timestamp(exp_date)) + index = index+1 + exp_date = exp_date+timedelta(minutes=1) + + remaning = [] + + for t in exp: + remaning.append(int(t)-int(time.time())) + + close = [abs(x-60*duration) for x in remaning] + + return int(exp[close.index(min(close))]), int(close.index(min(close))) + + +def get_remaning_time(timestamp): + now_date = datetime.fromtimestamp(timestamp) + exp_date = now_date.replace(second=0, microsecond=0) + if (int(date_to_timestamp(exp_date+timedelta(minutes=1)))-timestamp) > 30: + exp_date = exp_date+timedelta(minutes=1) + + else: + exp_date = exp_date+timedelta(minutes=2) + exp = [] + for _ in range(5): + exp.append(date_to_timestamp(exp_date)) + exp_date = exp_date+timedelta(minutes=1) + idx = 11 + index = 0 + now_date = datetime.fromtimestamp(timestamp) + exp_date = now_date.replace(second=0, microsecond=0) + while index < idx: + if int(exp_date.strftime("%M")) % 15 == 0 and (int(date_to_timestamp(exp_date))-int(timestamp)) > 60*5: + exp.append(date_to_timestamp(exp_date)) + index = index+1 + exp_date = exp_date+timedelta(minutes=1) + + remaning = [] + + for idx, t in enumerate(exp): + if idx >= 5: + dr = 15*(idx-4) + else: + dr = idx+1 + remaning.append((dr, int(t)-int(time.time()))) + + return remaning diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/global_value.py b/v2/pocketoptionapi-v2/pocketoptionapi/global_value.py new file mode 100644 index 0000000..e7d5a8d --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/global_value.py @@ -0,0 +1,58 @@ + +check_websocket_if_connect={}#None +# try fix ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2361) +ssl_Mutex={} + +# + +#if false websocket can sent self.websocket.send(data) +#else can not sent self.websocket.send(data) + + + +SSID={}#None + +check_websocket_if_error={}#False +websocket_error_reason={}#None + +balance_id={}#None +account_mode_isDemo={}#practice is 1, real is 0 (int) +check_auth_finish={} +balance={} + +real_balance={} +practice_balance={} + +client_callback=None +auth_send_count={} +req_mutex={}#True or object_id +req_id={} +wait_connect_sec=2 +def get_req_id(object_id): + req_mutex[object_id].acquire() + get_req_id=req_id[object_id] + req_id[object_id]=req_id[object_id]+1 + req_mutex[object_id].release() + + return str(get_req_id) + +websocket_url=[ + + "wss://api-hk.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-fr.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-sg2.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-in.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-in2.po.market/socket.io/?EIO=4&transport=websocket", + + "wss://api-msk.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-fin.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-c.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-sc.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-asia2.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-us2.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-us3.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-us4.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-latina2.po.market/socket.io/?EIO=4&transport=websocket", + "wss://api-asia.po.market/socket.io/?EIO=4&transport=websocket" + ] \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/http/__init__.py b/v2/pocketoptionapi-v2/pocketoptionapi/http/__init__.py new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/http/__init__.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/http/login.py b/v2/pocketoptionapi-v2/pocketoptionapi/http/login.py new file mode 100644 index 0000000..f9a88cf --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/http/login.py @@ -0,0 +1,22 @@ +from pocketoptionapi.http.resource import Resource +import json +class Login(Resource): + + def _post(self, data=None, headers=None): + headers={} + + headers = { + 'X-App-Name': 'app_ios', + 'X-Request-Type': 'Api-Request', + 'X-Request-Project': 'bo', + 'Cookie': 'guest_id=1000290216601684147969408361021491595862009238107429568028672977' + } + + + return self.api.send_http_request(method="POST", url="https://api.olymptrade.com/v3/user/login-by-password",data=data, headers=headers) + def __call__(self, username, password,token=None): + + + data= "{\"data\":{\"email\":\""+username+"\",\"password\":\""+password+"\"}}" + return self._post(data=str(data)) + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/http/logout.py b/v2/pocketoptionapi-v2/pocketoptionapi/http/logout.py new file mode 100644 index 0000000..3bbb405 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/http/logout.py @@ -0,0 +1,22 @@ +"""Module for IQ Option http login resource.""" + +from pocketoptionapi.http.resource import Resource + + +class Logout(Resource): + """Class for IQ option login resource.""" + # pylint: disable=too-few-public-methods + + url = "" + + def _post(self, data=None, headers=None): + """Send get request for IQ Option API login http resource. + + :returns: The instance of :class:`requests.Response`. + """ + #return self.api.send_http_request(method="POST", url="https://auth.iqoption.com/api/v1.0/logout",data=data, headers=headers) + pass + def __call__(self): + + return self._post() + diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/http/resource.py b/v2/pocketoptionapi-v2/pocketoptionapi/http/resource.py new file mode 100644 index 0000000..e8adc5b --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/http/resource.py @@ -0,0 +1,10 @@ + +class Resource(object): + + def __init__(self, api): + + self.api = api + + def send_http_request(self, method, data=None, params=None, headers=None): + + return self.api.send_http_request(self, method, data=data, params=params, headers=headers) diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/stable_api.py b/v2/pocketoptionapi-v2/pocketoptionapi/stable_api.py new file mode 100644 index 0000000..24322f6 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/stable_api.py @@ -0,0 +1,294 @@ +# dev @vigo_walker, github: https://github.com/theshadow76 + +# python +from pocketoptionapi.api import pocketoptionapi +import pocketoptionapi.constants as OP_code +import pocketoptionapi.country_id as Country +import threading +import time +import logging +import operator +import pocketoptionapi.global_value as global_value +from pocketoptionapi.expiration import get_expiration_time, get_remaning_time +from datetime import datetime, timedelta,timezone +from collections import defaultdict +from collections import deque +import collections +import json +import threading +def nested_dict(n, type): + if n == 1: + return defaultdict(type) + else: + return defaultdict(lambda: nested_dict(n-1, type)) +def ping_server(self): + + t = threading.currentThread() + while getattr(t, "do_run", True): + if global_value.check_websocket_if_connect[self.api.object_id]==0: + break + time.sleep(10) + self.ping_server_go() + + + + +class PocketOption: + __version__ = "2.2" + + def __init__(self,set_ssid,proxies=None,auto_logout=True,websocket_url=None,wait_connect_sec=2): + + self.SESSION_HEADER={"Origin": "https://pocketoption.com","Sec-WebSocket-Version":"13","Connection":"Upgrade","Accept-Encoding:":"gzip, deflate, br","Sec-WebSocket-Extensions":"permessage-deflate; client_max_window_bits","User-Agent":r"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"} + self.SESSION_COOKIE={} + self.proxies=proxies + self.set_ssid=set_ssid + self.auto_logout=auto_logout + self._2FA_TOKEN=None + self.websocket_url=websocket_url + global_value.wait_connect_sec=wait_connect_sec + # -------------------------------------------------------------------------- + def logout(self): + self.api.logout() + def ping_server_go(self): + self.api.ping_to_server() + + def set_call_back_for_client(self,function): + global_value.client_callback=function + def set_session(self,header,cookie): + self.SESSION_HEADER=header + self.SESSION_COOKIE=cookie + + def get_ssid(self): + return global_value.SSID[self.api.object_id] + + def setting_2FA_TOKEN(self,code): + self._2FA_TOKEN=code + def TWO_FA(self, token,method=None,code=None): + r=self.api.TWO_FA(token,method,code) + return json.loads(r.text) + def close(self): + + self._thread_ping_server.do_run = False + def connect(self): + + try: + self.api.close() + except: + pass + #logging.error('**warning** self.api.close() fail') + + #id-iqoption.com some country only can using this url + #Iqoption.com + try: + self.set_ssid=global_value.SSID[self.api.object_id] + except: + pass + + + if self.websocket_url==None: + for url in global_value.websocket_url: + self.api = pocketoptionapi(url,header=self.SESSION_HEADER,proxies=self.proxies,set_ssid=self.set_ssid,auto_logout=self.auto_logout,_2FA_TOKEN=self._2FA_TOKEN) + c,m=self.api.connect() + if c: + break + elif m=="""42["NotAuthorized"]""": + return False,m + else: + self.api = pocketoptionapi(self.websocket_url,header=self.SESSION_HEADER,proxies=self.proxies,set_ssid=self.set_ssid,auto_logout=self.auto_logout,_2FA_TOKEN=self._2FA_TOKEN) + c,m=self.api.connect() + + if m=="""42["NotAuthorized"]""": + return False,m + + if c: + self.change_balance("PRACTICE") + self._thread_ping_server=threading.Thread(target = ping_server, args = (self,)) + self._thread_ping_server.start() + return c,m + + + def check_connect(self): + # True/False + + if global_value.check_websocket_if_connect[self.api.object_id] == 0: + return False + else: + return True + # wait for timestamp getting + +# _________________________UPDATE ACTIVES OPCODE_____________________ + + def _init_get_raw_balance(self): + #[{"d":[{"value":3686.24}],"e":52},{"d":[{"value":20.10,"account_id":1250470807}],"e":50}] + + req_id="balance" + self.api.raw_e98[req_id]=None + self.api.Get_Balance(req_id) + + while self.api.raw_e98[req_id]==None: + pass + _tmp=self.api.raw_e98[req_id] + del self.api.raw_e98[req_id] + for d in _tmp: + try: + if "account_id" in d["d"][0]: + global_value.balance[self.api.object_id]["REAL"]["value"]=d["d"][0]["value"] + global_value.balance[self.api.object_id]["REAL"]["account_id"]=d["d"][0]["account_id"] + elif "value" in d["d"][0]: + global_value.balance[self.api.object_id]["PRACTICE"]["value"]=d["d"][0]["value"] + global_value.balance[self.api.object_id]["PRACTICE"]["account_id"]=0 + except: + pass + + + def get_balance(self): + if global_value.account_mode_isDemo[self.api.object_id]==0: + while global_value.real_balance[self.api.object_id]==None: + pass + return global_value.real_balance[self.api.object_id] + elif global_value.account_mode_isDemo[self.api.object_id]==1: + while global_value.practice_balance[self.api.object_id]==None: + pass + return global_value.practice_balance[self.api.object_id] + + def get_asset_data(self): + req_id=global_value.get_req_id(self.api.object_id) + + self.api.raw_e98["e_70"]=None + self.api.Get_Asset_Data(req_id) + while self.api.raw_e98["e_70"]==None: + pass + _tmp=self.api.raw_e98["e_70"] + del self.api.raw_e98["e_70"] + return _tmp + def change_balance(self, Balance_MODE): + + + if Balance_MODE=="REAL": + global_value.check_auth_finish[self.api.object_id]=False + while global_value.check_auth_finish[self.api.object_id]==False: + self.api.Auth_Mode(Balance_MODE) + time.sleep(0.5) + global_value.account_mode_isDemo[self.api.object_id]=0 + elif Balance_MODE=="PRACTICE": + global_value.check_auth_finish[self.api.object_id]=False + while global_value.check_auth_finish[self.api.object_id]==False: + self.api.Auth_Mode(Balance_MODE) + time.sleep(0.5) + global_value.account_mode_isDemo[self.api.object_id]=1 + else: + logging.error('**warning** change_balance() need input "REAL"/"PRACTICE" ') + + + +# ________________________________________________________________________ +# _______________________ CANDLE _____________________________ +# ________________________self.api.getcandles() wss________________________ + + def get_candle(self, Asset, _from, timeframe,request_id=""): + self.api.getcandles(Asset, _from, timeframe,request_id) + pass +####################################################### +# ______________________________________________________ +# _____________________REAL TIME CANDLE_________________ +# ______________________________________________________ +####################################################### + + def get_payment(self): + raw_asset=self.get_raw_asset() + ans=nested_dict(2,dict) + for i in raw_asset: + asset_name=i[1] + ans[asset_name]["payment"]=i[5] + ans[asset_name]["open"]=i[14] + + return ans + + def get_raw_asset(self): + while self.api.updateAssets_data==None: + pass + return self.api.updateAssets_data + def get_all_asset_name(self): + all_asset=self.get_raw_asset() + ans=[] + for i in all_asset: + ans.append(i[1]) + return ans + + def check_asset_open(self,asset): + all_asset=self.get_raw_asset() + for i in all_asset: + if i[1]==asset: + if True in i: + return True + else: + return False + + def start_candles_stream(self,asset,size): + #the list of the size + self.api.subscribe_realtime_candle(asset,size) + + def stop_candles_stream(self, asset): + self.api.unsubscribe_realtime_candle(asset) + + def get_realtime_candles(self, asset): + while True: + if asset in self.api.realtime_price: + if len(self.api.realtime_price[asset])>0: + return self.api.realtime_price[asset] + + + def buy(self,asset,amount,dir,duration): + # the min duration is 30 + #if duration<30: + # duration=30 + req_id=global_value.get_req_id(self.api.object_id) + self.api.request_data[req_id]=None + self.api.buy(asset,amount,dir,duration,req_id) + while self.api.request_data[req_id]==None: + pass + _tmp=self.api.request_data[req_id] + del self.api.request_data[req_id] + if "id" in _tmp: + self.api.buy_info[_tmp["id"]]=_tmp + return _tmp + + def sell_option(self,id): + # the min duration is 30 + self.api.sell_option(id) + + def get_candle(self,asset,time,offset,period): + req_id=global_value.get_req_id(self.api.object_id) + self.api.getcandle_data[req_id]=None + self.api.getcandles(asset,time,offset,period,req_id) + while self.api.getcandle_data[req_id]==None: + pass + return self.api.getcandle_data[req_id] + + + + def check_win(self,ticket,polling=1): + while True: + if ticket in self.api.check_win_refund_data: + return self.api.check_win_refund_data[ticket]["amount"]-self.api.buy_info[ticket] + elif ticket in self.api.check_win_close_data: + + + if self.api.check_win_close_data[ticket]["closePrice"]!=0: + return self.api.check_win_close_data[ticket]["profit"] + + time.sleep(polling) + + + + + def get_server_time(self): + req_id=global_value.get_req_id(self.api.object_id) + self.api.server_timestamp[req_id]=None + self.api.get_server_time(req_id) + while self.api.server_timestamp[req_id]==None: + pass + _tmp=self.api.server_timestamp[req_id] + del self.api.server_timestamp[req_id] + return _tmp + diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/__init__.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/__init__.py new file mode 100644 index 0000000..6c0340c --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/__init__.py @@ -0,0 +1 @@ +"""Module for IQ Option API websocket.""" diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/__init__.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/__init__.py new file mode 100644 index 0000000..d3d1307 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/__init__.py @@ -0,0 +1 @@ +"""Module for IQ Option API websocket chanels.""" diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/auth.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/auth.py new file mode 100644 index 0000000..c950bce --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/auth.py @@ -0,0 +1,13 @@ +from pocketoptionapi.ws.chanels.base import Base +import pocketoptionapi.constants as OP_code +import pocketoptionapi.global_value as global_value +import json +class auth_mode(Base): + def __call__(self,account_mode): + session=global_value.SSID[self.api.object_id] + if account_mode=="REAL": + global_value.SSID[self.api.object_id]=session.replace("\"isDemo\":1","\"isDemo\":0") + elif account_mode=="PRACTICE": + global_value.SSID[self.api.object_id]=session.replace("\"isDemo\":0","\"isDemo\":1") + self.send_websocket_request(global_value.SSID[self.api.object_id]) + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/base.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/base.py new file mode 100644 index 0000000..2eddc3f --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/base.py @@ -0,0 +1,19 @@ +"""Module for base IQ Option base websocket chanel.""" + + +class Base(object): + """Class for base IQ Option websocket chanel.""" + # pylint: disable=too-few-public-methods + + def __init__(self, api): + """ + :param api: The instance of :class:`pocketoptionapi + `. + """ + self.api = api + + def send_websocket_request(self, msg,no_force_send=True): + """Send request to IQ Option server websocket. + :returns: The instance of :class:`requests.Response`. + """ + return self.api.send_websocket_request(msg,no_force_send) diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/buy.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/buy.py new file mode 100644 index 0000000..f93d951 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/buy.py @@ -0,0 +1,29 @@ + + +from pocketoptionapi.ws.chanels.base import Base +import pocketoptionapi.constants as OP_code +import pocketoptionapi.global_value as global_value +import json +class buy_binary(Base): + def __call__(self,asset,amount,dir,duration,req_id): + session=global_value.SSID[self.api.object_id] + data=[] + data.append("openOrder") + openorder={} + openorder["session"]=json.loads(session[2:])[1]["session"].replace("\"","\\\"") + openorder["asset"]=asset + openorder["amount"]=amount + openorder["action"]=dir + openorder["requestId"]=req_id + openorder["isDemo"]=global_value.account_mode_isDemo[self.api.object_id] + openorder["time"]=duration#sec + openorder["optionType"]=100 + data.append(openorder) + + self.send_websocket_request("42"+str(data)) + +class cancelOrder(Base): + def __call__(self,ticket): + data=["cancelOrder",{"ticket":str(ticket)}] + self.send_websocket_request("42"+str(data)) + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/candle.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/candle.py new file mode 100644 index 0000000..66e414f --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/candle.py @@ -0,0 +1,42 @@ + + +""" +42["loadHistoryPeriod",{"asset":"USDCAD","index":162513874160,"time":1625138122.445,"offset":1000,"period":5}] +""" + + +import collections +from pocketoptionapi.ws.chanels.base import Base +import pocketoptionapi.constants as OP_code +import pocketoptionapi.global_value as global_value +import json + + +class loadHistoryPeriod(Base): + def __call__(self,asset,time,offset,period,index): + data=["loadHistoryPeriod",{"asset":asset,"index":index,"time":time,"offset":offset,"period":period}] + self.send_websocket_request("42"+str(data)) + + +""" +42["changeSymbol",{"asset":"USDCAD","prevAsset":"USDCAD","reason":2,"otherData":{},"period":5}] +""" + + +class changeSymbol(Base): + def __call__(self,asset,size): + self.api.realtime_price[asset]=collections.deque([],size) + data=["changeSymbol",{"asset":asset,"prevAsset":asset,"reason":2,"otherData":{},"period":0}] + self.send_websocket_request("42"+str(data)) + + +""" +42["unsubfor","EURRUB_otc"] +""" + +class unsubfor(Base): + def __call__(self,asset): + data=["subfor",asset] + self.send_websocket_request("42"+str(data)) + + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_asset_data.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_asset_data.py new file mode 100644 index 0000000..686e55e --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_asset_data.py @@ -0,0 +1,7 @@ +from pocketoptionapi.ws.chanels.base import Base +import datetime +import pocketoptionapi.constants as OP_code +class get_asset_data(Base): + def __call__(self,req_id): + data=[{"t":2,"e":98,"uuid":req_id,"d":[70,73,72]}] + self.send_websocket_request(data) \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_balance.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_balance.py new file mode 100644 index 0000000..a9b6999 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_balance.py @@ -0,0 +1,7 @@ +from pocketoptionapi.ws.chanels.base import Base +import datetime +import pocketoptionapi.constants as OP_code +class get_balance(Base): + def __call__(self,req_id): + data=[{"t":2,"e":98,"uuid":req_id,"d":[52,50]}] + self.send_websocket_request(data) \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/ping_server.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/ping_server.py new file mode 100644 index 0000000..9026079 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/ping_server.py @@ -0,0 +1,9 @@ +from pocketoptionapi.ws.chanels.base import Base +import pocketoptionapi.constants as OP_code +import pocketoptionapi.global_value as global_value +import json +class Ping_To_Server(Base): + def __call__(self): + self.send_websocket_request("""42["ps"]""") + + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/subscribe.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/subscribe.py new file mode 100644 index 0000000..fb4f8ed --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/subscribe.py @@ -0,0 +1,11 @@ +from pocketoptionapi.ws.chanels.base import Base +import datetime +import pocketoptionapi.constants as OP_code +class Subscribe(Base): + def __call__(self,asset,timeframe,req_id): + #{"name":"subscribeMessage","msg":{"name":"candle-generated","params":{"routingFilters":{"active_id":1,"size":1}}}} + #data="""[{"t":2,"e":4,"uuid":"gg","d":[{"p":"EURUSD","tf":60}]}]""" + + data=[{"t":2,"e":4,"uuid":req_id,"d":[{"p":asset,"tf":timeframe}]}] + self.send_websocket_request(data) + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/unsubscribe.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/unsubscribe.py new file mode 100644 index 0000000..ff51918 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/unsubscribe.py @@ -0,0 +1,9 @@ +from pocketoptionapi.ws.chanels.base import Base +import datetime +import pocketoptionapi.constants as OP_code +class Unsubscribe(Base): + def __call__(self,sub_uid,req_id=""): + data=[{"t":2,"e":5,"uuid":req_id,"d":[{"sub_uid":sub_uid}]}] + + self.send_websocket_request(data) + \ No newline at end of file diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/client.py b/v2/pocketoptionapi-v2/pocketoptionapi/ws/client.py new file mode 100644 index 0000000..494e9a8 --- /dev/null +++ b/v2/pocketoptionapi-v2/pocketoptionapi/ws/client.py @@ -0,0 +1,140 @@ +import json +import logging +import websocket +import pocketoptionapi.constants as OP_code +import pocketoptionapi.global_value as global_value +import collections + +import time +class WebsocketClient(object): + + def __init__(self, api): + + self.api = api + + self.wss = websocket.WebSocketApp( + self.api.wss_url, on_message=self.on_message, + on_error=self.on_error, on_close=self.on_close, + on_open=self.on_open,header=self.api.header) + + def on_message(self, wss,raw_message): + + global_value.ssl_Mutex[self.api.object_id].acquire() + logger = logging.getLogger(__name__) + logger.debug(raw_message) + #raw_message = json.loads(str(raw_message)) + if global_value.client_callback != None: + global_value.client_callback(raw_message) + #特殊處理 + if raw_message=="""451-["updateAssets",{"_placeholder":true,"num":0}]""": + + self.api.async_name=raw_message + + elif raw_message=="""451-["updateStream",{"_placeholder":true,"num":0}]""": + self.api.async_name=raw_message + elif raw_message=="""451-["successupdateBalance",{"_placeholder":true,"num":0}]""": + self.api.async_name=raw_message + elif raw_message=="2": + self.api.send_websocket_request("""3""",False) + elif self.api.async_name=="""451-["updateAssets",{"_placeholder":true,"num":0}]""": + + self.api.async_name="" + + ok_json=json.loads(raw_message.decode("utf-8")) + self.api.updateAssets_data=ok_json + elif self.api.async_name=="""451-["successupdateBalance",{"_placeholder":true,"num":0}]""": + + self.api.async_name="" + + ok_json=json.loads(raw_message.decode("utf-8")) + + if ok_json["isDemo"]==0: + global_value.real_balance[id(wss)]=ok_json["balance"] + elif ok_json["isDemo"]==1: + global_value.practice_balance[id(wss)]=ok_json["balance"] + + + elif self.api.async_name=="""451-["updateStream",{"_placeholder":true,"num":0}]""": + self.api.async_name="" + ok_json=json.loads(raw_message.decode("utf8")) + ans={} + ans["time"]=ok_json[0][1] + ans["price"]=ok_json[0][2] + + self.api.realtime_price[ok_json[0][0]].append(ans) + + + + + + if isinstance(raw_message,str): + if "pingTimeout" in raw_message and global_value.check_auth_finish[id(wss)]==False: + + logger.debug("40") + wss.send("40") + + + global_value.auth_send_count[self.api.object_id]=global_value.auth_send_count[self.api.object_id]+1 + elif "40" in raw_message and global_value.check_auth_finish[id(wss)]==False: + logger.debug(global_value.SSID[self.api.object_id]) + wss.send(global_value.SSID[self.api.object_id]) + pass + + + if "successauth" in raw_message: + + global_value.check_websocket_if_connect[id(wss)] = 1 + global_value.check_auth_finish[id(wss)]=True + pass + + + try: + + ok_json=json.loads(raw_message.decode("utf-8")) + + + + """ + b'\x04[["AUDCAD_otc",1625299325.048,0.87461]]' + """ + + if "index" in ok_json: + self.api.getcandle_data[ok_json["index"]]=ok_json + + if "requestId" in ok_json: + self.api.request_data[str(ok_json["requestId"])]=ok_json + if "ticket" in ok_json and "amount" in ok_json: + self.api.check_win_refund_data[ok_json["ticket"]]=ok_json + + try: + for info in ok_json: + if "id" in info and "profit" in info: + self.api.check_win_close_data[info["id"]]=info + except: + pass + + except: + pass + global_value.ssl_Mutex[self.api.object_id].release() + @staticmethod + def on_error(wss, error): + """Method to process websocket errors.""" + logger = logging.getLogger(__name__) + logger.error(error) + global_value.websocket_error_reason[id(wss)] = str(error) + global_value.check_websocket_if_error[id(wss)] = True + + @staticmethod + def on_open(wss): + """Method to process websocket open.""" + logger = logging.getLogger(__name__) + logger.debug("Websocket client connected.") + + + + @staticmethod + def on_close(wss,close_status_code,close_msg): + """Method to process websocket close.""" + logger = logging.getLogger(__name__) + logger.debug("Websocket connection closed.") + global_value.check_websocket_if_connect[id(wss)] = 0 diff --git a/v2/pocketoptionapi-v2/setup.py b/v2/pocketoptionapi-v2/setup.py new file mode 100644 index 0000000..727f663 --- /dev/null +++ b/v2/pocketoptionapi-v2/setup.py @@ -0,0 +1,17 @@ + +from setuptools import (setup, find_packages) + + +setup( + name="pocketoptionapiv2", + version="2.2", + packages=find_packages(), + install_requires=["pylint","requests","websocket-client==0.58","des"], + include_package_data = True, + description="Free PoacketOption API for python", + long_description="Free pocketoptionapi API for python", + url="https://github.com/theshadow76/PocketOptionAPI", + author="Vigo Wa;ler", + author_email="vigopaul05@gmail.com", + zip_safe=False +) From b53b388155735106662f4f6d77c37eeead20a4c9 Mon Sep 17 00:00:00 2001 From: vigo Date: Sun, 9 Jun 2024 11:11:42 -0400 Subject: [PATCH 23/33] dsvs --- v2/pocketoptionapi-v2/README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/v2/pocketoptionapi-v2/README.md b/v2/pocketoptionapi-v2/README.md index 4d3613e..e69de29 100644 --- a/v2/pocketoptionapi-v2/README.md +++ b/v2/pocketoptionapi-v2/README.md @@ -1,6 +0,0 @@ -# Document - -## document - -https://lu-yi-hsun.github.io/pocketoptionapi/ - From 332cc1a3533463173003d959c1e62b50018c2f86 Mon Sep 17 00:00:00 2001 From: vigo Date: Sun, 9 Jun 2024 11:12:25 -0400 Subject: [PATCH 24/33] w --- README.md | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index eaab72b..0000000 --- a/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# talk with us -https://discord.gg/du4GaQGHMT - - - -# Pocket Option API - -In development! - -for a better understanding, check this [link](https://github.com/theshadow76/PocketOptionAPI/issues/4) - -there is a pocketoption api being sold for 1000 usd, and here we want to make it for free! From d658ae028cc9b1d0405c7ca4eeda6328b6f784e0 Mon Sep 17 00:00:00 2001 From: vigo Date: Sun, 9 Jun 2024 11:13:20 -0400 Subject: [PATCH 25/33] Update --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..eaab72b --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# talk with us +https://discord.gg/du4GaQGHMT + + + +# Pocket Option API + +In development! + +for a better understanding, check this [link](https://github.com/theshadow76/PocketOptionAPI/issues/4) + +there is a pocketoption api being sold for 1000 usd, and here we want to make it for free! From fbe86163a86d1712cb7a9f677fbde77d4a34b3ab Mon Sep 17 00:00:00 2001 From: vigo Date: Sun, 9 Jun 2024 11:13:33 -0400 Subject: [PATCH 26/33] fsefs --- v2/pocketoptionapi-v2/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 v2/pocketoptionapi-v2/README.md diff --git a/v2/pocketoptionapi-v2/README.md b/v2/pocketoptionapi-v2/README.md deleted file mode 100644 index e69de29..0000000 From 16d47eaf4deddcbe140dfa2de029dad319707ae3 Mon Sep 17 00:00:00 2001 From: vigo Date: Mon, 17 Jun 2024 16:38:32 -0400 Subject: [PATCH 27/33] dhsfs --- .../v2/__init__.py | 0 .../v2/pocketoptionapi2}/.gitignore | 0 .../v2/pocketoptionapi2}/ACTIVE_CODE.txt | 0 .../v2/pocketoptionapi2/__init__.py | 0 .../docs/image/icon/favicon.ico | Bin .../v2/pocketoptionapi2}/docs/index.md | 0 .../docs/javascripts/.Rhistory | 0 .../docs/javascripts/extra.js | 0 .../v2/pocketoptionapi2}/instrument.txt | 0 .../v2/pocketoptionapi2}/mkdocs.yml | 0 .../pocketoptionapi/__init__.py | 0 .../pocketoptionapi2}/pocketoptionapi/api.py | 0 .../pocketoptionapi/constants.py | 0 .../pocketoptionapi/country_id.py | 0 .../pocketoptionapi/expiration.py | 0 .../pocketoptionapi/global_value.py | 0 .../pocketoptionapi/http/__init__.py | 0 .../pocketoptionapi/http/login.py | 0 .../pocketoptionapi/http/logout.py | 0 .../pocketoptionapi/http/resource.py | 0 .../pocketoptionapi/stable_api.py | 0 .../pocketoptionapi/ws/__init__.py | 0 .../pocketoptionapi/ws/chanels/__init__.py | 0 .../pocketoptionapi/ws/chanels/auth.py | 0 .../pocketoptionapi/ws/chanels/base.py | 0 .../pocketoptionapi/ws/chanels/buy.py | 0 .../pocketoptionapi/ws/chanels/candle.py | 0 .../ws/chanels/get_asset_data.py | 0 .../pocketoptionapi/ws/chanels/get_balance.py | 0 .../pocketoptionapi/ws/chanels/ping_server.py | 0 .../pocketoptionapi/ws/chanels/subscribe.py | 0 .../pocketoptionapi/ws/chanels/unsubscribe.py | 0 .../pocketoptionapi/ws/client.py | 0 .../v2/pocketoptionapi2}/setup.py | 0 pocketoptionapi/v2/pocketoptionapi2/test.py | 9 ++++++ test.py | 30 +----------------- 36 files changed, 10 insertions(+), 29 deletions(-) rename v2/pocketoptionapi-v2/docs/javascripts/.Rhistory => pocketoptionapi/v2/__init__.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/.gitignore (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/ACTIVE_CODE.txt (100%) create mode 100644 pocketoptionapi/v2/pocketoptionapi2/__init__.py rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/docs/image/icon/favicon.ico (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/docs/index.md (100%) create mode 100644 pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/.Rhistory rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/docs/javascripts/extra.js (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/instrument.txt (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/mkdocs.yml (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/__init__.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/api.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/constants.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/country_id.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/expiration.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/global_value.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/http/__init__.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/http/login.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/http/logout.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/http/resource.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/stable_api.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/__init__.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/__init__.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/auth.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/base.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/buy.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/candle.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/get_asset_data.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/get_balance.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/ping_server.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/subscribe.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/chanels/unsubscribe.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/pocketoptionapi/ws/client.py (100%) rename {v2/pocketoptionapi-v2 => pocketoptionapi/v2/pocketoptionapi2}/setup.py (100%) create mode 100644 pocketoptionapi/v2/pocketoptionapi2/test.py diff --git a/v2/pocketoptionapi-v2/docs/javascripts/.Rhistory b/pocketoptionapi/v2/__init__.py similarity index 100% rename from v2/pocketoptionapi-v2/docs/javascripts/.Rhistory rename to pocketoptionapi/v2/__init__.py diff --git a/v2/pocketoptionapi-v2/.gitignore b/pocketoptionapi/v2/pocketoptionapi2/.gitignore similarity index 100% rename from v2/pocketoptionapi-v2/.gitignore rename to pocketoptionapi/v2/pocketoptionapi2/.gitignore diff --git a/v2/pocketoptionapi-v2/ACTIVE_CODE.txt b/pocketoptionapi/v2/pocketoptionapi2/ACTIVE_CODE.txt similarity index 100% rename from v2/pocketoptionapi-v2/ACTIVE_CODE.txt rename to pocketoptionapi/v2/pocketoptionapi2/ACTIVE_CODE.txt diff --git a/pocketoptionapi/v2/pocketoptionapi2/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/v2/pocketoptionapi-v2/docs/image/icon/favicon.ico b/pocketoptionapi/v2/pocketoptionapi2/docs/image/icon/favicon.ico similarity index 100% rename from v2/pocketoptionapi-v2/docs/image/icon/favicon.ico rename to pocketoptionapi/v2/pocketoptionapi2/docs/image/icon/favicon.ico diff --git a/v2/pocketoptionapi-v2/docs/index.md b/pocketoptionapi/v2/pocketoptionapi2/docs/index.md similarity index 100% rename from v2/pocketoptionapi-v2/docs/index.md rename to pocketoptionapi/v2/pocketoptionapi2/docs/index.md diff --git a/pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/.Rhistory b/pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/.Rhistory new file mode 100644 index 0000000..e69de29 diff --git a/v2/pocketoptionapi-v2/docs/javascripts/extra.js b/pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/extra.js similarity index 100% rename from v2/pocketoptionapi-v2/docs/javascripts/extra.js rename to pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/extra.js diff --git a/v2/pocketoptionapi-v2/instrument.txt b/pocketoptionapi/v2/pocketoptionapi2/instrument.txt similarity index 100% rename from v2/pocketoptionapi-v2/instrument.txt rename to pocketoptionapi/v2/pocketoptionapi2/instrument.txt diff --git a/v2/pocketoptionapi-v2/mkdocs.yml b/pocketoptionapi/v2/pocketoptionapi2/mkdocs.yml similarity index 100% rename from v2/pocketoptionapi-v2/mkdocs.yml rename to pocketoptionapi/v2/pocketoptionapi2/mkdocs.yml diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/__init__.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/__init__.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/__init__.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/api.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/api.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/api.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/api.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/constants.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/constants.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/constants.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/constants.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/country_id.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/country_id.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/country_id.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/country_id.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/expiration.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/expiration.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/expiration.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/expiration.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/global_value.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/global_value.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/global_value.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/global_value.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/http/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/__init__.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/http/__init__.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/__init__.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/http/login.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/login.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/http/login.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/login.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/http/logout.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/logout.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/http/logout.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/logout.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/http/resource.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/resource.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/http/resource.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/resource.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/stable_api.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/stable_api.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/__init__.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/__init__.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/__init__.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/__init__.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/__init__.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/__init__.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/auth.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/auth.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/auth.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/auth.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/base.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/base.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/base.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/base.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/buy.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/buy.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/buy.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/buy.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/candle.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/candle.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/candle.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/candle.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_asset_data.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_asset_data.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_asset_data.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_asset_data.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_balance.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_balance.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/get_balance.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_balance.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/ping_server.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/ping_server.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/ping_server.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/ping_server.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/subscribe.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/subscribe.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/subscribe.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/subscribe.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/unsubscribe.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/unsubscribe.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/chanels/unsubscribe.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/unsubscribe.py diff --git a/v2/pocketoptionapi-v2/pocketoptionapi/ws/client.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/client.py similarity index 100% rename from v2/pocketoptionapi-v2/pocketoptionapi/ws/client.py rename to pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/client.py diff --git a/v2/pocketoptionapi-v2/setup.py b/pocketoptionapi/v2/pocketoptionapi2/setup.py similarity index 100% rename from v2/pocketoptionapi-v2/setup.py rename to pocketoptionapi/v2/pocketoptionapi2/setup.py diff --git a/pocketoptionapi/v2/pocketoptionapi2/test.py b/pocketoptionapi/v2/pocketoptionapi2/test.py new file mode 100644 index 0000000..8d25ded --- /dev/null +++ b/pocketoptionapi/v2/pocketoptionapi2/test.py @@ -0,0 +1,9 @@ +import random +import time +import asyncio +import os +import time +# dotenv.load_dotenv() +SSID=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"0641660deb66bacfe493ee595ad5bcd6\";s:10:\"ip_address\";s:12:\"190.162.4.33\";s:10:\"user_agent\";s:120:\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 OPR/107.\";s:13:\"last_activity\";i:1715088712;}bf42446033b557288d0399ac1527842c","isDemo":0,"uid":27658142,"platform":2}]""" + + diff --git a/test.py b/test.py index 0e9ba17..975779f 100644 --- a/test.py +++ b/test.py @@ -1,38 +1,10 @@ import random import time -import dotenv import asyncio -from pocketoptionapi.stable_api import PocketOption import os import time +from pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.stable_api import PocketOption # dotenv.load_dotenv() SSID=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"0641660deb66bacfe493ee595ad5bcd6\";s:10:\"ip_address\";s:12:\"190.162.4.33\";s:10:\"user_agent\";s:120:\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 OPR/107.\";s:13:\"last_activity\";i:1715088712;}bf42446033b557288d0399ac1527842c","isDemo":0,"uid":27658142,"platform":2}]""" -api = PocketOption(SSID) -print(SSID) -def direction(): - # Selecciona aleatoriamente entre 'call' y 'put' - return random.choice(['call', 'put']) -def main(): - api.connect() - - max_retries = 5 - for _ in range(max_retries): - print(api.get_balance()) - exp_time = int(time.time()) + 5000 - api.buy(amount=12, ACTIVES="EURUSD", ACTION="call", expirations=exp_time) - time.sleep(5) - try: - asyncio.run(api.reconect()) - except: - pass - if api.check_connect(): - print(api.get_balance()) - api.buy(amount=12, ACTIVES="EURUSD", ACTION="call", expirations=exp_time) - break # Exit loop if connected - else: - print("Failed to connect after max retries") - -if __name__ == '__main__': - main() \ No newline at end of file From 2fd7180f9ac6ce33886750ba7078328cc08726ff Mon Sep 17 00:00:00 2001 From: vigo walker Date: Fri, 21 Jun 2024 14:08:36 -0400 Subject: [PATCH 28/33] fesbf --- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 158 bytes pocketoptionapi/__pycache__/api.cpython-312.pyc | Bin 0 -> 8694 bytes .../__pycache__/constants.cpython-312.pyc | Bin 0 -> 7322 bytes .../__pycache__/expiration.cpython-312.pyc | Bin 0 -> 3090 bytes .../__pycache__/global_value.cpython-312.pyc | Bin 0 -> 477 bytes .../v2/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 161 bytes .../pocketoptionapi/stable_api.py | 10 +++++----- .../ws/__pycache__/client.cpython-312.pyc | Bin 0 -> 13067 bytes .../ws/chanels/__pycache__/base.cpython-312.pyc | Bin 0 -> 1243 bytes .../chanels/__pycache__/buyv3.cpython-312.pyc | Bin 0 -> 2177 bytes .../chanels/__pycache__/candles.cpython-312.pyc | Bin 0 -> 1485 bytes .../__pycache__/get_balances.cpython-312.pyc | Bin 0 -> 886 bytes .../ws/chanels/__pycache__/ssid.cpython-312.pyc | Bin 0 -> 883 bytes .../ws/objects/__pycache__/base.cpython-312.pyc | Bin 0 -> 879 bytes .../objects/__pycache__/candles.cpython-312.pyc | Bin 0 -> 4603 bytes .../__pycache__/timesync.cpython-312.pyc | Bin 0 -> 3296 bytes test.py | 5 +++++ 17 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 pocketoptionapi/__pycache__/__init__.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/api.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/constants.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/expiration.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/global_value.cpython-312.pyc create mode 100644 pocketoptionapi/v2/__pycache__/__init__.cpython-312.pyc create mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-312.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/base.cpython-312.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-312.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/candles.cpython-312.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-312.pyc create mode 100644 pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-312.pyc diff --git a/pocketoptionapi/__pycache__/__init__.cpython-312.pyc b/pocketoptionapi/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a3b20c32bf08d710cf449b432c5c6b44e398d81 GIT binary patch literal 158 zcmX@j%ge<81g3Kf(m?cM5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!vegeQPAw|dFUw5N zFHg+LPA$?8$WP8rE%7fX$;{7l4Di%10Q2*~{KSGx{rLFIyv&mLc)fzkUmP~M`6;D2 Zsdh!IK+_n3xERFv$jr#dSi}ru0RRVHColj2 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/api.cpython-312.pyc b/pocketoptionapi/__pycache__/api.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8db3d5d985ce5a2e23b7c475e8e6ecfc33954674 GIT binary patch literal 8694 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 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/constants.cpython-312.pyc b/pocketoptionapi/__pycache__/constants.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d6c6951a427ff4063e64d11250719fd30aa2b4a GIT binary patch literal 7322 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 H{D%A$2`Oe; literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/expiration.cpython-312.pyc b/pocketoptionapi/__pycache__/expiration.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c74a9022de5bacf137b4959d3ccad742c0c877f GIT binary patch literal 3090 zcmbVOU2NM#9KUny#EFxpX);#mpkB+yqK$s6V?$d3u`<{YY>cr{m7&Uu-Og=dhqJ@h z%7K88XkpSifwW2tsg-!>)Jjx>hdm<2l97y)XoP;5Bu?QGoMJ{8{8#G= zo#zuY;*nVxS($^8o5FGL8Wnmx&e*&xnTn~V6x&ZnSxK5w0#{Yi4-4G`{r)}}t|GH` zW}ykX-_(|?>*XrlDHO-k@gZG%UsZ^yh#5`P&rK+%F1m_ENu-($Q%a?Kz#@;TnH6K4 ztvI$>N@`Gn;)54@Pa6s`df!*a^$SvRQX#!>=!r?iJdrk4U3>A3W4&o-tvhQet@bJx z(<+hZX-|5}j!u)k0x4->38X5 zc7=20Ps8TJNU*TXPQC;h+bmCA65X8!XEewIw`4tyG_rTaSJUR4nvk%SW_jF`ENih4 zc|NlP+!GL?4N1vFCMk(Z5~8i7(hz?|tVAZE-uzAzQ#Th4F`0$&h4SR5Y3| zwLn42z~&U}Nurz~lEc{Jh(GdoVhyT{D59y5l&VSO<|35}Rv5~7Mw9h}1ASmgQiQ{d zsrLjNX$R91ky3TV2SrDIHAzKPQxmF`6e$%ImAJV`F9+Q8rd4KYAkDdh;%g1of-Xam zWMG3EJ1UI|*V+@{LqbD*ow2=!lF&8T7E)@0=#|A9&HwAz_Bm{du|{d3IJonAh8S@# zq3LLc#)zJ(IgEtqo{uQ$qy(;|iRUDHoFg>Np!lms+PtP;7^RhA^AMEEELJa^da)QZ z^XWB3LNm~gjw|M96Cv3KCvDJ;t1#ry?`^2H{dRaqA-rQjEr$DYN7ucGZ~gSck3O7l zyXEUBM>}puy9?3orM)-$^U>~N^toC7Zfx7NsntlSbD$6#xE&oVL zD|F`BPD0am6VlQ9I5nMw@juiww(tb?N>hWX#Vbs$Y8kUu*$oxP)T>AKtgy>8$k1pV zyL0zzAzGU<=hSU0AV96|nmMzK7T$F3-7GoFj6+qM6!M%V*DCrY^zLq`c-Hbv(9~&a zjdr_MxnGPnX>7Vnmbvsai)22_$vEq+zajsEmJjJ!%WH8CeqN~i7?3p5WIilqziY4i zl>^gW*vFH*pf(QI`Tyyzb*ehDJFyX**mV9c?|Eepje6Gm&wi}k6<@jlQS_Nn_m*|^ zg($v>&{+V8ESKdiPWDZnh1>b%0L+8b(rL)otY70`UD4{de18>j%inNU-t}31&)ni_ zpP+ANQ(LaCT|TOLjB!^OU3!Z}mJi;E&~XR(NDD9!8a6`FgU|#eRPGuruQi(Q)69<7 z*Jx_0d!SU-D5Av$2l~h(Feh8-00FJwoP&5aMG&B}r%i!%Bfo)j4 L|9mHoIWqnPbMv#J literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/global_value.cpython-312.pyc b/pocketoptionapi/__pycache__/global_value.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d11d21a2805a064c493f31c472d918a04e1d3020 GIT binary patch literal 477 zcmZutO-sW-5Z$!3sj)GrrE2{^@YIXB=uL!zh#vd^@zTq(CZmR~*|3{fdyBuqlRv=U z;w8thr+|Mz@aD-$Xu*R6Z)e^cc(XGfwrvrNgSY6;sS)y7l35tj;(H&9SK^al2?J5{ zjbR;g1M?iBi7*i@#5}?Z$Z%m|^lK*<{kHCo;Z_N61ThU1^+Xtg7lW@mN^yFg#0ldR zo;{wZK!m#YpGwCvh(R~5ug{M4n)d+Si2iZCqadY_esw{pUP`UpT1?H{SxMXZayNDIc{^?9w)0|12hDx~v}c<| literal 0 HcmV?d00001 diff --git a/pocketoptionapi/v2/__pycache__/__init__.cpython-312.pyc b/pocketoptionapi/v2/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebac979d2e50fef344ae24b274cf2d89ec6183f0 GIT binary patch literal 161 zcmX@j%ge<81W)D`q=D$iAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)9y0oLW?@UzVAk zU!Itgom!+Hke{5LTH;?&l9`|97~rX20Osd|`H2OY`ejD?@$s2?nI-Y@dIgogIBatB cQ%ZAE?TT1|1~LM1F^KVznURsPh#ANN0PcS%xc~qF literal 0 HcmV?d00001 diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py index 24322f6..607a043 100644 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py +++ b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py @@ -1,15 +1,15 @@ # dev @vigo_walker, github: https://github.com/theshadow76 # python -from pocketoptionapi.api import pocketoptionapi -import pocketoptionapi.constants as OP_code -import pocketoptionapi.country_id as Country +from pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.api import pocketoptionapi +import pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.constants as OP_code +import pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.country_id as Country import threading import time import logging import operator -import pocketoptionapi.global_value as global_value -from pocketoptionapi.expiration import get_expiration_time, get_remaning_time +import pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.global_value as global_value +from pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.expiration import get_expiration_time, get_remaning_time from datetime import datetime, timedelta,timezone from collections import defaultdict from collections import deque diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-312.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e77f093eee6c7438a89be11153bc9d267ebe148 GIT binary patch literal 13067 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 Sqo(&RpZYJjQcP#I`+orDCIoo^ literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/base.cpython-312.pyc b/pocketoptionapi/ws/chanels/__pycache__/base.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a65696f3374df689e618c64c5d00f8615f627b7f GIT binary patch literal 1243 zcmZ`&y>HV%6u+~bG#E-Nh}r>xZZ(6w076k!iH{a_pcD#AmaA)DTDOj!-Z^a(bzsO) z2E^Ej9mK-O|G)xbK=sN$P|>n<;yv4Oqe7qLyLb1#e)oINU&qHy0&@3#r&ZSp`Gtp} zR0`$z7AObACrzS}C&Z@%;%kC_0)LdI*3&Jcf9GlJcSFHiv1F^R5^O2C z@~a)Os`6WJ-Hk+OdwGg{)rvz=Pmm^snwn3Wx~~mL)9@?4KA_D?&#WWM=h=2Hd!H!jw{_Zb2~wUy<8V8h*aW6o?vl{ zH9W-7SXp?UzxBb=LK%nQGr?AzkpR&)ej|>vD|YF-Xwg&$yQQUu5@AbX0~DfU?DVno zN(rf)?O-k5al=g^ot)sZrqju&ElW8&%E@U~4mQN@^wJvVK@=pM_s5Ywdw9Hrl`g~b znjD#=KD}?etsTRWcm}S8AfAk{8Bl;QvN5!b>>I^cj9ekL+MYffm}O$o{^_!ad?v+K zSEz&~@wst^X#z- z8-i0M$3T(Tv;K{&m;cW;2@dKeEYR6HnXJFteY5*>!u~#Ce@H$rf4Ti*V(wdQPT~OI z{1N!GU`Vhu=c&ngJNv6azry)e*9{BH80UWMaV~2Rn4$PcvLrbyoB@doqE(1tKn{)j zziXAs^vPATGEZ}7bXl}?c^&q&8n12$FUjI$9d6DNp4Mh^AhU7`3=}?v%8^bfJtU2j P>J*))`}h73+_Sj9b^1X` literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-312.pyc b/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52f9c4ea106bad1a2b1859f5f08b3e7819b6a17c GIT binary patch literal 2177 zcmbVN&2JM&6rc5e`XdP?At7lXC@yK-P&<^ipsK1=2p_K6fK;kVzO2^X!8ojU&FtF7 zk)v|pklwh_1C@eWiK0~Mp*~I7dF{3%F$d@A`x<)*vc(pt5jK*L;PG!ST(Tf+pO`1lrq-QWi};o<+SBf znEQ(~FzJm-iCIC(bIqVsriBnElu}387=*^}O^?j>I3)(gq1J)Sc#$N&@=%SLK6Eq=BGN){NqO+Xaj?%Ru+ODzOL2N3^k#K84 zi;`xfDK%wVYN~dmso3&eeL=UCre2IJ7;s*E7YL|eP3&Pcg1)Y`sdmrmCR`#7l2T{a zF@$v+L`vtX<@+??npO6yF3tr^FV{-`3@v*+%INhf^@FUSh7_O74`83$sE(e?lt7+Z?|x&N(2{kf4?Gm zD+c}pmOBL4AYGe;sDQ-_x~n5QgdVY#1szxu+2ZI{#W&@-SA6XP6SCY{ex+|c6JXtn zu@{5846@a`nyuNoZQPXwBe9@%4Pc~bsXNV0BfvC@(bT$lI~WM!~95y_jc&# zr;)TBWnMm>o=(YJ$$NG~lmyp-sy@&>rL%s7R~@fT8BY`)4=~M|XDzkC!QZ5@r)$T~tQ48d~~<__BX~(A>znxm#y!qXx}0IMc_Lx^V0Y*Y$G4BGXR9&5C44- yZCR3}C#3HQiNo(1nSMfgpOF*K$OoI+u#}Y+XEq7Wo2Q1PbJ92O{!4HcN%{}WIT}*{ literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/candles.cpython-312.pyc b/pocketoptionapi/ws/chanels/__pycache__/candles.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e00138c7fe8bf7a9ec32dce995fd988795c72776 GIT binary patch literal 1485 zcmb7E&2Jk;6rcUf#*Wpx35EcrD^dlv2OAJUsGtaF)sRC%B+A7HR+F9CWZU(wJ2Q^! z$dP==A)G*PXb&KT6QKSnT#67Pon9gp4%`ARmvZ6Fj-7}g4$Nxan|U+y-tT?w_mxTs z!C3gJ9e?g1^hj;S1NOxjz60zIBB+UoLCn->nN8DBYb&*yR>AG2P3&FNbWF5_h_j1` zOU-+hR?u{NRxq*s+DcA3DfQ!=`D=M}lL|j?izLtd2xlav-0#wLt`DM3oYA!Yn^F)M z(tZzfx*BP9n%cmW{^1)y0G+Xeh`D13Lmwk_!yKEW|*atBe=G$36jF(5rAq{dRI>DhrJOG{K-(e}4ry^>!z~|2BH5y0LN5E) zH|c2GfXG0BCWK}pi4)4|r=LNAP_~6r{YsnjNr&O0q+b?Ei^iZ{*Si44BSgW!G(~wQ z6Iu-v!a8Ms9*=MPy}aXhaVC^cn|O;J!+>Nu1xV=>MI>!yQo4B@19IuMDNAx9t7(qO z`w160>#Y@{)xeS#7fjYv%);ZQ3mLuDpLG8JN z+6%vz-Ls`V`{*pHUfjQa|IDR5`_P;E*_->po7=zo&GOgF--@5S*I5}d>Bc7W8d(CzxP!z~qHfy+s`Zs=(PfMO4caovtliR9gkVu>Qn*TcciN s^B_}g!(Rk)WEqC>0KNGudgUQ1KSY&3T-Uht_}r|q@Y&3t2w0)xZ(u!+^Z)<= literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-312.pyc b/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c98686b4529eb1136a4a89e23fda8f39ed1be731 GIT binary patch literal 886 zcmZ8f&1=*^6n`_x*0|l)MYJk{26~VjOj_tF6cH?iQqbCqmt2O~ooS8D?xvZv%PuSQ z(1S;BJ!nBMTIrwSrGjFK2!bbXm93Yae3N9W^g-VD$L~$v$FZ?8Ak}uGm3IW-r#6OE zDwKhX$_@w+B!njM3DG(YsZS{^fH1Z}n3C)pdA@ISsZ;u;4Tq%W99MFwk%w}Qb21uC zpx6NkJ`vzkL3~5dZSc*m;h1S%Jkf(j1`vmZs3NAT_oAD zT;Gr?QFh-JJmItUl4GQ$D8{zwgnkRwk#*H>tl=XSxv_;XbzddJmDJQ_N+Y-JlZW0D zg=4(UV71-h;hK!S<*fE`2K~YEq8DX$z6y^5ucN%iQ{IxH@(?^5f_I~CYBAQ}VaQnT z^8f$H9lA9Rbr;zd9F^hPt;6f~Z-Z7ZzA%qR;QaVO)!j?>Ru0B%pRGGTtjbqw@{=|B zX8!%++r_=)i#0RAQdn|IdXRo2#?mrl&9>MGwO(OteS?R2BwISZfCV2QuA+#?HPfe? zF|DWyvTZmVy}C6&Fw3P{o~T23XE)Dm?sk-0Z0^?ac4K`hshI>#nYX=!_P&Ao)Uf@F6W3VqvZ{}<{-c&h{fQS65qXq58p7e%U&vxmvfxrL=6+0PlF-n47 zAf&x^?pj8ARcB!9_A)7s#zG~jIr4@A?WPi8PgW4B(jY0lXgkl9kji-(^rMLv9t!E? zL(6A|BXio!nr)iZj-wQ*=W(_?Bd!^QOrt8Q~U{QmO#+T~$ zr|R~b_Pfs8&imwZb!Uk-=voyWL1SbrtuZ#tHVEZ9V@G2zEG(B8pT7S=l7bS3AD|uk7P*sea-4 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-312.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4a50f7087aa68d04bd9f373bc283d607a1c837d GIT binary patch literal 879 zcma)4J8u&~5T3o49XpPA1PWV1TOql*tAbF3ka$Rl0%Hkiu365$b#UVNj@>hs9f}k# zLV+k<(a}WtDKwPiTK<5+(4=DK?i^5Pm}2&uo!y!FX6AFPRsoc)k8$r41NcV9O6&qG zZy=aM2tF9_2tqc4(2(rJ%>BMGF`L%ZdlH4Cf#khN@pjbRlL>zsC;e#1?+04)vFzyl zHtOukZsK-VY3MWxV|f$793=P*(-|T2&Cr;EZ%I2eXK+$H^PP#+v{Q>BPu&NDK@7KkO$$Oly?MU72Ofq1R9y!q@Bd zBkO&2NyT;lWJc;-Yj_2Y?I1zL!6<)};lF3L7 z^)`S0N@h+T_5S(gp1)VLFsg(q?~bCKZy|6nYcY V!eoq{!q!ix#u`VregPiYuis85)A0ZR literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc b/pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ff38bcb54090978b22722b4eb9faeb763de4bd1 GIT binary patch literal 4603 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 literal 0 HcmV?d00001 diff --git a/test.py b/test.py index 975779f..5e9fc5f 100644 --- a/test.py +++ b/test.py @@ -8,3 +8,8 @@ SSID=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"0641660deb66bacfe493ee595ad5bcd6\";s:10:\"ip_address\";s:12:\"190.162.4.33\";s:10:\"user_agent\";s:120:\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 OPR/107.\";s:13:\"last_activity\";i:1715088712;}bf42446033b557288d0399ac1527842c","isDemo":0,"uid":27658142,"platform":2}]""" +api = PocketOption() + +api.connect() + +print(api.get_balance()) \ No newline at end of file From 7fad3506c96101d240a0c6835f5dc88d8774d1e6 Mon Sep 17 00:00:00 2001 From: vigo walker Date: Fri, 21 Jun 2024 14:10:15 -0400 Subject: [PATCH 29/33] hewdwb --- README.md | 13 +- docs/todo.md | 4 +- .../__pycache__/__init__.cpython-311.pyc | Bin 169 -> 170 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 158 -> 0 bytes .../__pycache__/api.cpython-310.pyc | Bin 6278 -> 7247 bytes .../__pycache__/api.cpython-311.pyc | Bin 9335 -> 0 bytes .../__pycache__/api.cpython-312.pyc | Bin 8694 -> 0 bytes .../__pycache__/api.cpython-39.pyc | Bin 0 -> 6718 bytes .../__pycache__/constants.cpython-310.pyc | Bin 5521 -> 4194 bytes .../__pycache__/constants.cpython-311.pyc | Bin 7565 -> 2580 bytes .../__pycache__/constants.cpython-312.pyc | Bin 7322 -> 0 bytes .../__pycache__/constants.cpython-39.pyc | Bin 0 -> 3460 bytes .../__pycache__/expiration.cpython-310.pyc | Bin 1804 -> 1803 bytes .../__pycache__/expiration.cpython-311.pyc | Bin 3569 -> 0 bytes .../__pycache__/expiration.cpython-312.pyc | Bin 3090 -> 0 bytes .../__pycache__/expiration.cpython-39.pyc | Bin 0 -> 1793 bytes .../__pycache__/global_value.cpython-310.pyc | Bin 430 -> 429 bytes .../__pycache__/global_value.cpython-311.pyc | Bin 482 -> 0 bytes .../__pycache__/global_value.cpython-312.pyc | Bin 477 -> 0 bytes .../__pycache__/global_value.cpython-39.pyc | Bin 0 -> 423 bytes .../__pycache__/stable_api.cpython-310.pyc | Bin 9766 -> 10690 bytes .../__pycache__/stable_api.cpython-311.pyc | Bin 14511 -> 0 bytes .../__pycache__/stable_api.cpython-39.pyc | Bin 0 -> 9776 bytes pocketoptionapi/api.py | 118 +++--- pocketoptionapi/constants.py | 36 +- pocketoptionapi/prueba_temp.py | 9 + pocketoptionapi/stable_api.py | 150 +++++--- pocketoptionapi/v2/__init__.py | 0 .../v2/__pycache__/__init__.cpython-312.pyc | Bin 161 -> 0 bytes .../v2/pocketoptionapi2/.gitignore | 6 - .../v2/pocketoptionapi2/ACTIVE_CODE.txt | 146 -------- .../v2/pocketoptionapi2/__init__.py | 0 .../docs/image/icon/favicon.ico | Bin 1150 -> 0 bytes .../v2/pocketoptionapi2/docs/index.md | 201 ---------- .../docs/javascripts/.Rhistory | 0 .../docs/javascripts/extra.js | 27 -- .../v2/pocketoptionapi2/instrument.txt | 318 ---------------- .../v2/pocketoptionapi2/mkdocs.yml | 81 ---- .../pocketoptionapi/__init__.py | 16 - .../pocketoptionapi2/pocketoptionapi/api.py | 347 ------------------ .../pocketoptionapi/constants.py | 7 - .../pocketoptionapi/country_id.py | 190 ---------- .../pocketoptionapi/expiration.py | 80 ---- .../pocketoptionapi/global_value.py | 58 --- .../pocketoptionapi/http/__init__.py | 1 - .../pocketoptionapi/http/login.py | 22 -- .../pocketoptionapi/http/logout.py | 22 -- .../pocketoptionapi/http/resource.py | 10 - .../pocketoptionapi/stable_api.py | 294 --------------- .../pocketoptionapi/ws/__init__.py | 1 - .../pocketoptionapi/ws/chanels/__init__.py | 1 - .../pocketoptionapi/ws/chanels/auth.py | 13 - .../pocketoptionapi/ws/chanels/base.py | 19 - .../pocketoptionapi/ws/chanels/buy.py | 29 -- .../pocketoptionapi/ws/chanels/candle.py | 42 --- .../ws/chanels/get_asset_data.py | 7 - .../pocketoptionapi/ws/chanels/get_balance.py | 7 - .../pocketoptionapi/ws/chanels/ping_server.py | 9 - .../pocketoptionapi/ws/chanels/subscribe.py | 11 - .../pocketoptionapi/ws/chanels/unsubscribe.py | 9 - .../pocketoptionapi/ws/client.py | 140 ------- pocketoptionapi/v2/pocketoptionapi2/setup.py | 17 - pocketoptionapi/v2/pocketoptionapi2/test.py | 9 - .../ws/__pycache__/client.cpython-310.pyc | Bin 6791 -> 7015 bytes .../ws/__pycache__/client.cpython-311.pyc | Bin 14161 -> 0 bytes .../ws/__pycache__/client.cpython-312.pyc | Bin 13067 -> 0 bytes .../ws/__pycache__/client.cpython-39.pyc | Bin 5741 -> 5717 bytes .../chanels/__pycache__/base.cpython-311.pyc | Bin 1364 -> 0 bytes .../chanels/__pycache__/base.cpython-312.pyc | Bin 1243 -> 0 bytes .../chanels/__pycache__/buyv3.cpython-310.pyc | Bin 1629 -> 0 bytes .../chanels/__pycache__/buyv3.cpython-311.pyc | Bin 2483 -> 0 bytes .../chanels/__pycache__/buyv3.cpython-312.pyc | Bin 2177 -> 0 bytes .../__pycache__/candles.cpython-311.pyc | Bin 1629 -> 0 bytes .../__pycache__/candles.cpython-312.pyc | Bin 1485 -> 0 bytes .../__pycache__/get_balances.cpython-310.pyc | Bin 760 -> 0 bytes .../__pycache__/get_balances.cpython-311.pyc | Bin 1014 -> 0 bytes .../__pycache__/get_balances.cpython-312.pyc | Bin 886 -> 0 bytes .../chanels/__pycache__/ssid.cpython-311.pyc | Bin 991 -> 0 bytes .../chanels/__pycache__/ssid.cpython-312.pyc | Bin 883 -> 0 bytes pocketoptionapi/ws/chanels/buyv3.py | 2 +- pocketoptionapi/ws/chanels/get_balances.py | 2 +- .../__pycache__/base.cpython-310.pyc | Bin 1134 -> 1146 bytes .../channels/__pycache__/base.cpython-39.pyc | Bin 0 -> 1138 bytes .../__pycache__/buyv3.cpython-310.pyc | Bin 0 -> 1650 bytes .../channels/__pycache__/buyv3.cpython-39.pyc | Bin 0 -> 1670 bytes .../__pycache__/candles.cpython-310.pyc | Bin 1293 -> 1292 bytes .../__pycache__/candles.cpython-39.pyc | Bin 0 -> 1286 bytes .../__pycache__/change_symbol.cpython-310.pyc | Bin 0 -> 1034 bytes .../__pycache__/change_symbol.cpython-39.pyc | Bin 0 -> 1028 bytes .../__pycache__/get_balances.cpython-310.pyc | Bin 0 -> 756 bytes .../__pycache__/get_balances.cpython-39.pyc | Bin 0 -> 748 bytes .../__pycache__/ssid.cpython-310.pyc | Bin 791 -> 792 bytes .../channels/__pycache__/ssid.cpython-39.pyc | Bin 0 -> 784 bytes pocketoptionapi/ws/channels/base.py | 26 ++ pocketoptionapi/ws/channels/buyv3.py | 61 +++ pocketoptionapi/ws/channels/candles.py | 42 +++ pocketoptionapi/ws/channels/change_symbol.py | 25 ++ pocketoptionapi/ws/channels/get_balances.py | 18 + pocketoptionapi/ws/channels/ssid.py | 17 + pocketoptionapi/ws/client.py | 206 ++++++----- .../objects/__pycache__/base.cpython-310.pyc | Bin 794 -> 793 bytes .../objects/__pycache__/base.cpython-311.pyc | Bin 969 -> 0 bytes .../objects/__pycache__/base.cpython-312.pyc | Bin 879 -> 0 bytes .../objects/__pycache__/base.cpython-39.pyc | Bin 789 -> 785 bytes .../__pycache__/candles.cpython-310.pyc | Bin 3698 -> 3697 bytes .../__pycache__/candles.cpython-311.pyc | Bin 4947 -> 0 bytes .../__pycache__/candles.cpython-312.pyc | Bin 4603 -> 0 bytes .../__pycache__/candles.cpython-39.pyc | Bin 3779 -> 3775 bytes .../__pycache__/time_sync.cpython-310.pyc | Bin 0 -> 2696 bytes .../__pycache__/timesync.cpython-310.pyc | Bin 2472 -> 2471 bytes .../__pycache__/timesync.cpython-311.pyc | Bin 3518 -> 0 bytes .../__pycache__/timesync.cpython-312.pyc | Bin 3296 -> 0 bytes .../__pycache__/timesync.cpython-39.pyc | Bin 2485 -> 2481 bytes pocketoptionapi/ws/objects/time_sync.py | 70 ++++ test.py | 34 +- 115 files changed, 605 insertions(+), 2368 deletions(-) delete mode 100644 pocketoptionapi/__pycache__/__init__.cpython-312.pyc delete mode 100644 pocketoptionapi/__pycache__/api.cpython-311.pyc delete mode 100644 pocketoptionapi/__pycache__/api.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/api.cpython-39.pyc delete mode 100644 pocketoptionapi/__pycache__/constants.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/constants.cpython-39.pyc delete mode 100644 pocketoptionapi/__pycache__/expiration.cpython-311.pyc delete mode 100644 pocketoptionapi/__pycache__/expiration.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/expiration.cpython-39.pyc delete mode 100644 pocketoptionapi/__pycache__/global_value.cpython-311.pyc delete mode 100644 pocketoptionapi/__pycache__/global_value.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/global_value.cpython-39.pyc delete mode 100644 pocketoptionapi/__pycache__/stable_api.cpython-311.pyc create mode 100644 pocketoptionapi/__pycache__/stable_api.cpython-39.pyc create mode 100644 pocketoptionapi/prueba_temp.py delete mode 100644 pocketoptionapi/v2/__init__.py delete mode 100644 pocketoptionapi/v2/__pycache__/__init__.cpython-312.pyc delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/.gitignore delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/ACTIVE_CODE.txt delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/__init__.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/docs/image/icon/favicon.ico delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/docs/index.md delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/.Rhistory delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/extra.js delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/instrument.txt delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/mkdocs.yml delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/__init__.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/api.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/constants.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/country_id.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/expiration.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/global_value.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/__init__.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/login.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/logout.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/resource.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/__init__.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/__init__.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/auth.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/base.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/buy.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/candle.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_asset_data.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_balance.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/ping_server.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/subscribe.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/unsubscribe.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/client.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/setup.py delete mode 100644 pocketoptionapi/v2/pocketoptionapi2/test.py delete mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-312.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/base.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/base.cpython-312.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-310.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-312.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/candles.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/candles.cpython-312.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-310.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-312.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-312.pyc rename pocketoptionapi/ws/{chanels => channels}/__pycache__/base.cpython-310.pyc (71%) create mode 100644 pocketoptionapi/ws/channels/__pycache__/base.cpython-39.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-310.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-39.pyc rename pocketoptionapi/ws/{chanels => channels}/__pycache__/candles.cpython-310.pyc (65%) create mode 100644 pocketoptionapi/ws/channels/__pycache__/candles.cpython-39.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-310.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-39.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-310.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-39.pyc rename pocketoptionapi/ws/{chanels => channels}/__pycache__/ssid.cpython-310.pyc (57%) create mode 100644 pocketoptionapi/ws/channels/__pycache__/ssid.cpython-39.pyc create mode 100644 pocketoptionapi/ws/channels/base.py create mode 100644 pocketoptionapi/ws/channels/buyv3.py create mode 100644 pocketoptionapi/ws/channels/candles.py create mode 100644 pocketoptionapi/ws/channels/change_symbol.py create mode 100644 pocketoptionapi/ws/channels/get_balances.py create mode 100644 pocketoptionapi/ws/channels/ssid.py delete mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-312.pyc delete mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-310.pyc delete mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc delete mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/time_sync.py diff --git a/README.md b/README.md index eaab72b..9817d5c 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -# talk with us -https://discord.gg/du4GaQGHMT - - - # Pocket Option API In development! for a better understanding, check this [link](https://github.com/theshadow76/PocketOptionAPI/issues/4) -there is a pocketoption api being sold for 1000 usd, and here we want to make it for free! +# help me + +you can donate here: [paypal](https://paypal.me/shadowtechsc?country.x=CL&locale.x=es_XC) + +or my BTC adress: bc1qmvpmpdt96vmgq3s3rh3gzxf75eml52r2d7sclw + +By donating you are helping me make this project better! diff --git a/docs/todo.md b/docs/todo.md index 7b41d26..67b5a55 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -1,4 +1,6 @@ # todo ### Add login system -- Not Done \ No newline at end of file +- Not Done + +-- updated \ No newline at end of file diff --git a/pocketoptionapi/__pycache__/__init__.cpython-311.pyc b/pocketoptionapi/__pycache__/__init__.cpython-311.pyc index 67ac79d75b234fd6a2b152ea7331f9a2d3ec2dec..d6f4f315e109033616919aaef9c8d10fb8d6190a 100644 GIT binary patch delta 75 zcmZ3^n WpXV6hsb2u*=Y#o)1)2I2i_8IMycvZ6 delta 74 zcmZ3*xRQ})IWI340}%Ywu}YiBV`5~JY!wq)oLW>IQ7(25q@vEq?Z4yACs~~NtFL&T8U!E`EhJVlCAhJP89(%>Sm#Uq4=IOoT?8s zhMi%^X_47v&d3EOvcleE!j{Fm5oc5w^Q_dZEq>!@YUX;Sxg_V;8jEiIJ`a*YUaPFu zeNn6WB_7yUY7HzltJjs=tgTC>f6Z^zvd9FB$)@ytDavGfpWQbC-V98CZAGeX7(9Oa zy^{-bYt`!&)tFQ6vaI?GXI6c8sqQw*4Ohte!irn{RQm3UUvrz4mD&O@v9cCer|Xr* zqNq$x>85dHB86b8hls+qr9C9spi_Vs16kbSJ%+ONBi`SdChZ?MW0E;sFvk$wiPV^5 z%IIC@#AFxP5{46(2}sE$=A?i$G#MZ(Z4r^(cMYefBlUKqK3MDlazGyF2lfI3z##5X z5QZ*ChFiEi2pj^&;B3mn2w3WbITGsVCgUC5D;?=oNYOBb3HZMT90iU6uj3ZSaef1M z6Y^U)zYUxK-T_Vmr-0UJ(7V7SFa=DDqKJvEP41kLXN4u=o9r%kX2hsSi8QqDiHyji zTh0kvbmM#;_C2B(D;Gqc*aOW)_~k@C^t%MPU+fL#_aP66!BD;oxgdr%Sq{NJz{Ri_ z2^W45Hr+m5HD`HNe{cSu2l~&^Uk#6-RPDls)uqA)R=Hej*8Fn$o*s)mIy3;?eXb7t zjAi_$T=c>&`u&4Kmu>J-{c8Ng&=^delqZ{_+>oAES&~6i$i>yAlBEvlui_`{{kwwc zhw;JuAEESephVn`*oMLFA7h4P=qK_2@d^DnF}r7!+>Q~wPIR1TOn;m#90{}A9Tm$# z*7GaMFLx6CoBk&G>6JMw3GTBp582pYTaj(HVBF@njScSgZ14@^8n&sx%CcFG#@Tw3 zq~)kER=FCz%7i)3uCk`d8T~$DpXK$f)bZ0N5x5jn6O`F&L`R7xK|$QdW-fc!%}%!` z)eWi2q(Od-6|WS*oB3yIY$Pm0rxxloJpT@O!=P9srcb5cY#ETB9wbMA9{_J3=u3`7 z*%sg6+x!v}>>|>G#-InpOk(pW=4{DSVUa8hgKFJHI)iWx%w@OMEE!>~gQ!%>RlA!b zTCHbc{~x*?ZG7WSkN!t`=Fl``c!puDnpdvWYk0y#&^{mG!R1Vm+q<>;^X!%V=gBmT z!ky^Z)wLVPU-H)f&Yri(uEf{B*VFbboyq6*L%VcvcSP6(i6!Y*D@{?CUJ|oNUDW;E zBic>xol-k7{))kfap|uWuequS^Wt3C%*7AGnON*JO%Y=hV;aSyIj!sV8!rrQ{hdA9 zYRbAd@q*pN^TU1elZixe=TP)9dFkmW=kyB!`ogrKUmt2G*3Rq9+@%+9RE1p&X6=JI zf^IMacy~bS`>7)YL*w>C;#<_zY&o*c!_MGa<~BN{9KA|?5}jv$Y^zJ4d#GEU*PG0@ z)}}bSjg@tqtf!`RZb(%^ICYj{#?RfV z%CM$So13@4lI`9Mr(TwvJK-8~2rtzuz}qkq+~ye`vl5Rj9*bt4&^0F09plOR$kW0c zrmrYfW>=VYOB?DiB3&uXs&Rd>`)ofwsmc(20CKFSZ$|&7TXFjv-ottD!07#x(V8VA z8dvHdD6m#`S~lFj>K$63=@JeKMI~3~h%OLaB6^?bGSNKIv-$FD$mFp=4&HA;7BjgS ziSZaWc`TxHxli7Lf+tL)H^CEK)}S?z=(9{ClHf)HptD8Da7BSi`_wOSQlok+*Oz;R zL@ETv-*qJ`qSjne1^qBL!w=K$?G3jLRdcaYub=>)QzX3|>OHR}R21IM{%6KJds=mo zel#2bzsqmLXyiI2x*UFaE2<<`RT>l=(BI}qro-lGSHLE1%w43vNZ}Lw+&jX*BK&Du Xt;7%g5Z?E8y3qsIJ4Js^1X5+U>H*vh~ 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%0AXcMLe z^ke8#r;eRIM-wLDfl9A-JJkVDoiLm9xQB_jBd(NURU;_^8$mZ~1Fwy=NN6L%H)w2> zkidzYK1>B>U+Lfxn(r@7&#?EOEcU`asE?BV(tmf#`2`l;*p3=Z+YvA;Y?$KiR zv8U&)?$dZm0}~JD%3iYb4EL(+=Q_Geow3jPSFc``LY?Ivj9~O)ao>dd&IQRgd%`q5 zM$>-@dd_utQ!eKK$(7gt#0zyW>Ur$Pt58UAUo9Qn(i0LpwTlOK5C&4g35l z_o-){Gk7>49x4UQL2-3} zH`a_8rulcV1LU7PhrPcW4V^haes{og=5QldQt4)=2=yQuJ&DbF?nSK=8o34e z|BXLoautrke4J+*NWX%9^&uoMe6ngr--lwI1HtOox?A>xYRm5_>LDc1E<)&j__;9n zOc*Q(!#II0VHhwtXwQXR&xBp>af}nW>RL32r%Q-g^!L*Vah2#-(GZ%GEk%I7PHHN2 zY14A-NKI=qgjN;WgzyKt$R1~rktjT)=aK!-BKr%G1I5VeEd#orY)?fL8eOF3D*)y# ze(8FP^x~Jgi#0o&x%dFV=U!5AHLNQ}HV6B<-tzuYKN2RcnsIG$YWtm3Z@Rae({zmK z+8EPsyTdiQn05#?(%Ga&{ZylcvLSRK!B%FqYlF=kQ(yZ(AdImC2`t7i484cv3z5-c zWYiKyTMezBL{5hba7TVNcW3o*%N%{UvRFOb%FYZNfWR5lhsu+0BeBmH?tOCq6BvU3 z&l%x5;2(crgI#VDQ_fAjn7W?KDB4fjVC+lfLVx>RzGX~1JtKEUq8nXlR=?3YwHR9{ z*M|M8v|Hg4$0wKWJ*Snb!xfl^E9E>s2!+G!tTd~eHE46DkU`yrkH`x z9QM%mb<*mL9m{28Mc3}YJ(M&RS6FG)K4T3fwr?)#UMz#?{Pu_9{nP|Xj>c>4;?RIpfeyp(B*}WQW@DzP9 zo7C~WL&0Z=>OEh3R!4=z?&R$DTGxi%y`*L!q$-?PH3OBCX1BJspI+ywvK^wi)0n=Q zIvv2k4rOJ#&4DwT1gkVLY@u4TBlwyG%NHMC7^YE2x$B^2R=;CMtH@FXLdhOYt|nD2 zxu{`X)C7jVYuI6DH0)|h(O`E+ndu?9?b$RsvOv$M%hye5Nm1-xSzT65EUm&RD_Syz z*{HHk^@ts&hXNy%L-SE1w`invby10s9J0keYakrp`ROhaA6@YJVpICq&|L_pr0B^XuCg$!t*EBh+NfGgRIY{$$M zTuM~flAGe!@(2Y28q!jN(+ASL}^MwvB=k=;>NXB=QBWr{T9 zN3G7L4&qG7_E#iq7%T&+g8)@d1KI?AR<0GmV3k8c0_)q+985>4a=ulWceI|ZDFS8G zM*iMG!8qj|zEL&Rykm!|9K{yWR(YFOZs~El`2t2^*Rqb~a}F?O$LiGPbPS;nXemLH zzn}^I1o4cx;S;(;^U*NAGJR@^TaIdIa%Cu(&8sdy<-pCH_vREh2E)R@07)N zmv$f8{P@Y}lZC?Wx#I3Qiytcu?Rog&qpnBi3qyyBLx(KBzZGX|bb=DdA&rwx?xW-w z#+nA4nQb{F>*)jGw%95s;ugQlS*x>*J($5nsc*>QcRFCY`m)gFJ6a}<$!_8g!^HPZ zlnIjGd+~br&mBN`zz4szF`4W2b(M*m%=Y;D%fwA)JhUG-5jY?2xZK3ghVuJ%l?f7e zC<=(ND$X}R(Ffcr3aGXcX)DpKLYV==Vu zmQ_Vy*dsrH2;D2|)XBAX{Qy=)2kZ3y$`*eBk=bY$*{?*}^XykwaB(^DxH*d)uYb14v{ik|M+t|@WA)D#IchaNU~F#IB8TfAXVqA^`;`4W_hy;6N$(Xe U2gZMW`uWoDS{cbV_RC01E0YkU!Oqfo$53o_ps( zij=)gu5=%B?zyjX&-3!%TUweBq{AO&7rI9f`cM2}CWp~@z6FhYh(~e6Q@l;0;uNWE zaT}@aaXYE$I8ACt+(Bw*+(~Lz+(l|8&XC$2cSCKLno`a2W(vZwjG%$RNTF0X9wtz?)Rv0GBcyGU+EX3z4$^Ldbvomn&~Cns z;$1d$9`T;rh;I?PKeg*8jQ6bAqTbb>OBp^V3G6~fX5YyquL&yqc2*TLX?FIVH)G#o z+_@;FIe6iEPJo8*XTrQf@J>sjkX8Xi?S+EAtcd(WN^3eVsHYQYUJ?|5GFQZuaCs%2 zgtp5715z_DEF^N0%8N-gY18*ZN*YSMzvpM5_$B%!br0PET3s7ONN!dsf&;}J>QkeA z8C9X{Xq{TH@wVGcwKr;?`xc`n&7ru)s{|oGAAsVYZ1-yBz^knScfbn9zAmGvZBF(A zCY+%;EhwtMb9mzqZ5oxS@N|6zLkuM|O6#+Sv#%#DO}O_0ZRn(8D4ijHRq z?J|VKiL5vdIhI}dfjK56QuBP`#A;8?60u`aCYg|w6VTARkHbPrD-_@7(Z@$WxxR7m zVQzyj4Ia&-=KuvN;UWM9+0%RP$sr8zo5c~_(+|a;@~Gls)@T2I`H8Rd{$$C=78v%a zuk&%&(UR|2fjK6(0agRq0EV9b2T=4L5)g<4!r~COizrUpkl^?f_d|+1;mc)xF^eef zhTO#4;?0mf(A&b>1+PiuxUT`?Z-4|~WGmz#p( zP*MBpTTQHyX0i!6kz%oSVY71PrYI;g?5LqEq$qpks=!`V)hsJxZLC;GF>8jobI}&f zf5X(#T#_j1T8Mg8781P17*i;k>$0FIpzt-9VlZg&ua%7|!87W1g>-1eurFU?h z{=jp`^O)(X^zSj-y_HBW?%r-feSiR+PeNVg(B5KbZz(heJ?5Z7&uT09Lpl*G!2t~1CPerzSftiwE*X{*`mLl|LTR%7E%1+2 zOR#nm(>0rk`_Jej+byRGc34kK9LM< zr>Y)QY-mYZ!Zx`snF`^Ss|Ifu#j)lx&rP8<*HWZz8u$c;Yj1=ubv44)oaS6+4Rbn{ zdR~PIUZQ=s)2+}^$7=bqkmjpgY-t`~?>GO#bQQtr0hLk9;kqJAXE^XHlLDu}Br{EQ zYR=F=oY>f{OhsaxTr~(yAzNU~jXM00YPHKo6!OmjcC`SQM~F zKA&5RGDPk*8gEy#!x6QnDqXdf9XFsk@loM;G@notGK4-z!N$$J7hNg0k!38JbH;S5 zd+L?Q?s&h!v;Hd-dGuW?YV9Zo28w}!kEct4v32LR6Sao^@yxvozrJu^`G>a)!J&c= zRQgk2SJ`*q3*Uj?Uo21l{ENw-7Zd3%kN-Od@^|m-_#%;pIS##c7gYTCcTVJwlzqcR z-*Cw{vQ9r?d}XG$$n@Sko4ydIJc~pao=O9USo2?~Fy_pbX z`F6Lc8oXW9)|wRnfp}9(zUmBS3seSH>vd_#@?feRrkbiz7}Qd@+HbZ@JPNttuX?s6 zOVyj0;P|!H(quRPZNUbin>AoJ6T(wDBvUK)KZ9i>STx?#-HU@@s^3L-oj2|8q8n7y zF?a4t)OK#Q`)8&@#3nQ8w2&nJYf{Q60v~&5yD}GTmM38|T3eOvMFqr<;0nCfp1dj~ zuW>cK3!EU!8M$@@0f4w9Kw}V5mtTW9jO85EBlt{m)JDWu7fH-P zribJM-#}KY3$OMyNa0R|&tb6g2Ph!EiygvZvafRBFs}DkViV;1M~lr=k)0~B(~p@W z6~olP_V)K+}VFR zfIc5>#pO|4{#(FyI&4o`q6bKph<*IM^^#lMrJU(dMiW1G6g3y9>^4e$L<7+-SuP%-v-$_XVA~jW3VE>h$Wq zOM-ee!yAE`#pPhAb(S%WHGbDQHz%Kg<3wGA?d8MJmZzZ597HJO3%Jdw@OXp0do7?F zc#Z(n1en68UAH^FI>D%oG;~Q&u<8Q~qd!Ev0UxW8dLA}J;t6yrA3_1ns1xlc+!`gi z8I=7tZFdJM9{&dy?p(Ng5n_S;2g_q8i(@BCW2cHtblq3zh<@Yitpo=OLz9KzWWh7J zwKoPKK+Bz$$IM6tb1U5vt^_0Zj{o|2IXF=aP85PCDxnTo%ip=}MxocY9fSvilsmBL z@&C_uyUC2$C%f;TjiJv%ZL^2bXEEFCg#EL_w%H>)c@c{)F&7dvUKS`US;hd6jI@K} zFh|#=S99qK`2TZJnkX3gA`F$W!w0@gMoi25pji_akp9(h!xdm<_yVI2K>^Bx@qFOD z<1I7YMW*{P(@P}3r^xh_nSmlR@TD0c)Jmdtddx~c<@A@4{Fg8kv?19)13EY%iJ%|r z&Y=0KnwTIos>M2lKjD+%TZEJOf_juw_U$kF_LqF)h21Paz9e#$SP|8RJJm>@M0~%o zB0l_tibKAtUrb_k073A)Ai^W7EGU^A_`|iH@}G?b!6g;bmhX&xwPWIS>j5!_*N9cu zh@H2V+ZiTm9_ZmtB_tecDh(9%z!V(#wxoBpyPiF2d;b^H61yDW;d#MByMLzS>n||< zjo#D$i-!7@!xQtV+{*HyhK)Jk!D0DOBf}D~3)oM={!t!1^@TpX^8Vizn9iTL4~X7> z_lmo;7>Z5m&)aPBY9cL2Kk6>w3XE6qmtW`&C8o~|wZ0O*Q)5`|oyyp9HPEXGuF4p< z+PTX$8hy=}a@9-hygyX(^%a;tLOeqXHFPCk#u80g{X3 z_)HSOA^m3oPG?Q1gtWlR*m}yBaDnZe<}#MoI^p5lL?v%P2}uIqNr7Jlw4Rsuamy20 zD3|61Sz3XZjgv%ppu*9N=Fesn5&LxJ~gBabX{E`?vGuIC^WQ@BOg zo}3_$`FQvceul9yGCMKk#0`Cs;T>3Y^H|nVYlf-BYXaGw)-J(&n;_3;5;FX7Ai#6J z`6}0(k)eYlFKAkGb!tTmFNkT7L=hrOF%5bpMP6JrCw_brdCh}seK7t~WxRj_HG5KQ)9VmTp7iFpamg?&~C zLKV%cuLif86eMtzgT#N}tnp+UEg3*hi;GuPZb1;Vc3xZ*RXCc#DOo9zgx!d|jP-@) z#TuUwN~d|hlABkOvN$i`csM1J$4c{(b(8?O8WQnNIFrBn8bDksaT7BGr{XhcZ8~NR z9}rhY>uZ2x&Q!!zSRMxfI_ECp*8z|;{RoQ5xgY})(3SkULx9;#n%6>V7G4Srw#29e z$|iDZ1~w&wdWUVpBJ~&%m>#$T-Uk#emjzPdU!E|t24Q7umE{Q?=*LWv0{Icm-PAzz zEon|e!g_&aK`4-95l0uEST3+BN8;|wEaGH-t^TVn*ws5|+)6@$Tq z>wF_hqPn7aOpYQ4X)?a%gd1`cUp@n?koQyFmpKJ6;*84JanxO#zs9Y1aq$aW{0$Tj zk*>Bv7=Z0HDb7Me*#tdz8*S1@z{~6IEzs?ozR3Hl`8U4thTj+S=ePO?3v_Q~XitIe z-|Fgv{z{~)K!-L*CN>Vj4{IYw3-r+DzNwAtkA_P7UN6w2n`5s%q8?3_#!eRKXr;9+ z|5l|B=IDm`gOU7OTLjY07U+&jOCWy^{LTEuN-zvXAe_HY@rUwnf(Md+qte!ye_LOy z(g_=j7-hI4KW8*U?fFYvWb(~0`ylY(Y$?1qKljb(p^e!MwKRIHKo4)W4?dWEpqARl z3UqjL&%urUjVq-+GX;8ZvuE^^z$a%)JqHVP=Z>DO{$YG({j_>HvJZ|~>4jZ)>1%Hh zDpVpJK#MJMj^Sv59?(ytZ+8@y9IkZq6zDb`jL-L+2{@*<_aLYDzikf3@N+w~wn@v| z<(Pgp)9wg7n~XR*pH0{t!_OGXaRBIsk)4hK0~uP|Ap)ZuT?PzV79LArcm%88I==8| zuRM?MoxHFySX8h!hF@o)lqYb{I27=U2Kn^^7+>zi-*$Mc)0}{PQ&hF)WJZ$ow*f_0 zMIG6lzt+aEZ6?2{kRLX*k=^=w5(v=rdl%!J#(r3M@mf$@slaV_$(t z{32~|7mUpO5}Zzn5jzE89kI>3E^1<$ixSh_T|Z^*W2hcSVoyvryH0%yT^R3SF#b82 z#DMTyx9&=ukbes>96%^>D7NhsMQx(NuaNgEYOZ diff --git a/pocketoptionapi/__pycache__/api.cpython-39.pyc b/pocketoptionapi/__pycache__/api.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68af619f2ce05d0c32631f044df1b7a7d976a54a GIT binary patch literal 6718 zcmbVQ&2JmW72jPh$rVL?Sdwj7wqiOTj+r=&V<%~=xUN4EIZk8MtpvCo7}%^hBWdO3 zE)v6G?#I{|`a)1?jk9r+c-ld=HNhq{UJNGJXsi@WwWis$9xDe&S~F}W zdq1n+JHcG*C_Adh#)4z5WwWg z+{BC4dKBP!oQn;w6U5wa#!ZXX%zlKERtf-h7R@)1)qP7&$Hq726LZywjjxTb%?*oN zyztba5pLkS?3EWLsGER+AMu$5s7W;70dDieiDY4|NE*dX$3vlF!Cl(UbK|*{m|BWw!I53NDBu|2IA9)}PoQ4_oCKT#ECOBwz~)#Da0c)?;0?f=;A)Gvu+rI_|J!Mxe2yPQ|0!l2nA1z6Mw8zJDX|l+u3Kj9RTu=r=v>hY$UDYlLgA zyddXzK^Cp;_K@Gu>l>u|FVJvv&v4V$jII5`GXu{yxAu%}+bw2&X^*H7z0f-G*nUM* zjmOnJ$RwQ)KPhy7SgB>drM4%%R*f8`)|SyDU#O+pxy)VAWdU6T|(R8G{$ zIjk(#Cz9!hy`bVYbyVpeiMOQic;aL%R8n3QN+CieWtAbN9U=XV-DE759TmGG+)2vW zc9O~U&aSIE%_e9!IzdwQ6ylK|C6k*1q&tXVZV*N7#HLn~JnL3sD-mqSGk8dSPdgy_ zUgEf}ANsND{t{1W2905t%#u|hH#AGdl36jk^F!Kg^d>baEcJeb6KE}wD?=L;z07VK zfd%0v-mS$^4g0L+0%}xp(Je_4cVq~OlbHQb#a`GHwP>TZ)FfM4`UL*0}M*uZmBQj{J3=COSCZ}3*>2wm!)82-qdDlyiYMNsyB4iI|QAG!@BHuhnL z&&XQe50Fsk3Oy^8B7H&p$vQiHmMIcJ{}f8IP&2?3JIHrmX&Y6+F|4( zH8zE-z+~w__UYTqCSCvVD;3LH=(R+uom@2e>h$hF{{4>BQkyTEgjWZ1nDybswdIxi zR8kJ2%}qbtOvYd1T=7MKnj>oL7XE^s&F^*fL% z@?c}EQkb@;Ez2ww9J5lGf$Mh94%_l*CIjwEZa`kEt@`IcV9SP!ViB#yVdHKgw)cy$ zS`$5jtF}>dzYMF@)|@>f%$i2`MyzlnC-Ef7Jkz{={^ZBQqZgv6AYWdQm$AosS!+&y z09;-~lN7aLJREcUkeB15I@Y59Tj_*{RjDpra@~o4%TSg%$FOiDOeS6-0NOIg^3y| zuPWHMNJyIE-?^~L-BZIF>nHqnl1kNPvf}m5?#`u=%NJ1{?pzv!A*M>Q4qJ+*_;w3I zHNSs_YI1egn&}C-hC^g1g8xZ1kZ5+09@I~J@YLCOs2ao_?17}qk)E=-{d$rV{zgit z0-0xXaa)mzsN7u`p_+{BTg&MWhvbwp?FG9&S?Rk1SLw@w|3_l|mkon5>$m9vdG#;Z z=$}6zHwqFXJ0 zm0DKTm0g!dP1j{}>3xiw`X@RO3N9&R$m`UM5ub9VAhv+(h#sjv$aq13^sR9H!WLit z&fU4l<~ku4GT23>=>|RyT2zCv>2{=isx92~Te!Z8K!JusA=Aea*=f-!>p=$vq;fa0 zJ?ZKD6`KAg9b9sXXplmB57R~78lW2DlV>+J4p#nsp?AmT1DqR$T#r17yBvYLmEP%c zJd$|f>XRTFKVYrc(G5RDDDqJc`yqmBOP|46i4KuIPpZ_XlYP#rv7`kQG!*fql8%#1 zlChplRO0kdHicU*R7<#6(v+%Ca$AsQBzM_tkJ!ydNbIxTj^_v7dVueuvI(WLVw34= z&}vfzsMTh5{&(~FS~U|9$U}c~D|R=8VDsGH^kaNlW-0B!YhpJ(mz0FrBqcR1s8r@> zRA*f^rN1tyif{S)(A`sVN^%6HLZGV)w`X6c4-L63?-3b;8`C$iV<}~y9q3Yoojx>9 zmZ|(MmZv&2wcJfQ(;zIRpP+h{3m*s|SAFNE2isA|*<9Sl`6e?LK^+)f*!q{~1u)>*8aud;J79h@ekXu*H{Y&S{YNV=t@lzG@|Fd29q z94O0qGzC1fLkg?*QlSgeXR{sDZ*G>!Gvj4v`pudM$WRCDo6XQLs+81j{J@WQlWNbR zw1HN#rxo!qnI0|@<=Yf79IUJFAkw<)6AC3)si8tJEyI=xyGhOG)ZC)x3u+EZ$AkLu zI9|{M^$RqPX%}o%jwMu%HUU-d_ya4X&onmj59$hzY}sGW&FFGo1M}?4tYucpl|^U4 zIpNrJVyILA)H{|bXvY|%8am?QfT6Ptdwm469%XM;orF#e6ZT(5=o1aA50kt!FUxU!h@7B? x?!%K(x}?_UCPYuu3FB?s#Pt}bG6`9{{yn-Q!D@g literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/constants.cpython-310.pyc b/pocketoptionapi/__pycache__/constants.cpython-310.pyc index 7f59a58a8bf8ff8dbd713ccae2d86df984af2642..8f087724250e5d9d47599d52b0c0028ac8e1ad91 100644 GIT binary patch delta 450 zcmZ9IPfG$p7{+(k*>zKt(g?goHz|{dE>e=Dgn_APR*SH%JELu_&N4Gw*d+o_T_X0< zwNunBy!2W2*p~=8HS0mDfq5C8cb?z-=W+FOIgVqoh`>)aQR}6W@9`B`^d}qgliXP2 zDiSmi3Yr8(C|RNwf*}aTf(Bp&DoE~0FbvhPtSNA=A*7?ea#Y$cR}VE%ELEyEyVsQF zvRQ}*IAb_g2Dx4*p7plo-|8*S{@y9(+O?5+ZjeEZ;0t83cEM%1Z{wjpz!2GO2b-6O zVTW0G$O&x|4=FQ-jIKK)KdS3}#0U~N~Yn2zkGGuHU?d2 z&R^H84N~QadwyxKXH@_Z@TD#-DpNfjA{tk9?f4Gb?6jSVYMo!zo-L*5H1JRLL)y1efO$u3?v zc`z~c;LVfqY`FNZxTAlDC!e<)&=H!vpES?+`9441_V3)6#e^G=4-5EgEvD-F=&!`Q zB$D$b>6`TNGe&KJh#-)VBY+4YPlO=|BPEcL5r`sh!7wrgBgi-;khkFu@-B=b@4*;y z9FoWhNFgU-3V9!EKK%f*t~d3nlMPEovM?8OurHnr`wO|4MS%nQM4IvKX-O~;fJiEb8+jdys0 z;=y50jF?)vrj?gEtG$Z8vANq9*UPH0rY#4>I$h@CEJ;)iy`trJ%!*pk%#~nHo2}fG zlO4>--jp-YtIhmg3nV_!tD|1c+Gd$!m$nXgtqCHRtEQ=|!9GXK-!w`3n=W^9SMCP4 zjT1>X^62VcD!&5fm@7#l_ii94)hU-!B(km>1=Yw0o7FFT{bt!Z68l-RNq=I@$&6^-pgio_$-vSUTL58Q!W5-EhNU zEn4D<@`=@G+bkWTCa>^;<65oQzTMiP_CAimet2Kw?{nNqx41pL>$(lPGw8Y;gBmD& r!ov!Ps1OppdLpkx$Hrt|N)OR(6uJ?0t)ka7(+>vP_X?dC63NhiBkU74 diff --git a/pocketoptionapi/__pycache__/constants.cpython-311.pyc b/pocketoptionapi/__pycache__/constants.cpython-311.pyc index 1a5aec464121cd6750c222ee241c79b109f75810..83015a07ee2705eccdfa6742ab4dce2941e28862 100644 GIT binary patch delta 825 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 Nrn;Z}9|k|8{~K~dp(_9Y diff --git a/pocketoptionapi/__pycache__/constants.cpython-312.pyc b/pocketoptionapi/__pycache__/constants.cpython-312.pyc deleted file mode 100644 index 3d6c6951a427ff4063e64d11250719fd30aa2b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7322 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 H{D%A$2`Oe; diff --git a/pocketoptionapi/__pycache__/constants.cpython-39.pyc b/pocketoptionapi/__pycache__/constants.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..619aef0e3a87a94292711e78579912df0d66bdb1 GIT binary patch literal 3460 zcmd^>`)?dq6~|}x<@GvAO9=D@#l>loZ5w;zN17&flG&Gc{TOdOv&m-avaI(^l1bJ( z?##Hsi=m}9v_c>X<<*kXR05$E5FjCtKtcjq3J8hEkNYb>?a%yxR0)amy?54ef&YM6 z&F4Jtz2}}8dv0U@{*=Pk1Dz9>or8+ zG)O5LqJ6ZV4$vKRC%umj();NUeSkhlchTK+58X@m(TC{6bU%HBhUo$ND2>ozdXSFL zQ94FxdWasTN9Z_>(immv1dY=KP0|#dq(|u#Jw~VL3{BGvouzYho;1o*j`CEXBF$2X z$}~swv_Olb(-KwaaatyWOsdiax=1y;L>4_kEA%9NjOz4pYS1b*iO8nQbcL>xL)Yj! zwP=mni4+44M2v7iuz%gK!;hey* zaSZ!8%pbt~4e(pwE#Ph7cZ}ZKNO=cZ8WWU&hk!EhFfhk({(uoh;8ox(@O4J-uZU)0 zz6|^kI1PLSI0t+KxRcR)1oIsSMuA0O4A2?QpOBJ)xdc>z-vjJddRc}ujj6s0d>hFV z2s{o<0#m?AzywY)oIfLZ2KXBA7a#|`!sz`BDL;gE2_r0+e?wFQz6s0$uQ7V#Ncj$M z9{4UW13Uqo1y+D_z>~l`4CfZcUV*6r-vcfK5#SAm^C;H%67U%CW#AO>A|t)siH~Sn zWuY@DMBNRVo!E$0t8|i}u%jbctuw$7R(vF9)V(=p3`!Z87sjx=TM@Q zaw^tEiBg8XQc?PZ6uuM>)R*Rk9?O-@vXum7etsf@a#B(XUox*5rMg%=KUbc}Sc5`@ z`Aa4uiNeH`7$>ES6{h4|QieXWB=f7w+%XkwlAf~L%iSfkzT`D+mK$#+SaO1ul2XoG)2d;t8pa^Qm>%W}8Tu;n53MF- z-zVO}RILIDUz7jaz2}Otb)Ih@p9Wj8R8sIUrii0jQ5;rw6e~t4n~y9vRUBG&;#PtN z`C~oQO)M8?%S*bozp9tbLcVU8nprS9+6~`7JvP=@caCrP$J?$KTpe9^N7owObvqdI z-6o4s#~nLYC@;-S9tpfg+h6CbnH%=1j5hI~xqm?)!I#my~uS!-p`gI;y{`9_`$Bbl6?JW;cW3s||m+ z?G87Bz;jkN0({3Fn0{r^CA(E$DC-4nd1YN}-CYkHx6R#IX}WDcXtV==bbYfsRIgvL z1JqHkzlN>iz@w-Ubszsa2W3U0dy>qw+8yNHk-O$}?Eh*R9;|2?9_*It-5+qHxH*wq z(btu26_1$DUePZ`jQ9AtMKQg}U%lN6I-Y^Swy}stsMhp7Bdi|-5MoUIS1zwFO>&8}Hx8*fh-LpDg0}osGaDw_g-=bs5RP3Lz yL&=2jrlTH?Io$y*XO=G%4B`A=b8!1)6*%lE{sCq(8sRtM|Ni%^@~^}*O7h>S2vjBj literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/expiration.cpython-310.pyc b/pocketoptionapi/__pycache__/expiration.cpython-310.pyc index 1c2c89cd37f352b89dbd8ebc241cf190d29aa162..70f0d08699710dadf2c8ce899e58f364527226ee 100644 GIT binary patch delta 78 zcmeC->*nLm=jG*M00N~d!;ReRj3y2)RxtsU$r*`7xdBD_S*gh-F|HMfxdl0?@s6b> g`RO_Nc`*g~$=RtT`2{7J`FV*2nK7H)8IQ680Cuq&0ssI2 delta 79 zcmeC?>*3?h=jG*M00D7{joj>vrjGid#i>Qb`em8v`Q?c@*{MbP0r|<F47^eUL diff --git a/pocketoptionapi/__pycache__/expiration.cpython-311.pyc b/pocketoptionapi/__pycache__/expiration.cpython-311.pyc deleted file mode 100644 index c565617bd53e7e7f0164e69f41f8e52ca3c0becc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3569 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 L|9mHoIWqnPbMv#J diff --git a/pocketoptionapi/__pycache__/expiration.cpython-39.pyc b/pocketoptionapi/__pycache__/expiration.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d183143530914c823bd155db7fb96a1b161d4cc GIT binary patch literal 1793 zcmZ`)&2QT_6elUkqLq(1ZP0j^P6*b6hap(kLxG?eHl!UkAPtHQ7zV?G$BIm<*!n0% zZ%H7Xyla8}3HEM1?@!2oq3ce*^bgo!*n3p!xWOubkMDzgALQ>*Vq+s9@aofX)a%;=m<(Gk7q9c1ZmvC>9`lQhhp zpDL4u@0^ArM6ZPrNxlcsoH#X2Agk)p+Qp@Bi1xwrKaU>o51ySzFN98>>FiWRX7DtF zl!k}jA3gczhe4i2BXFOaI7>wy57b#6Yk|^UeqL{(tD(t;%a9wGGoB)0x(zh4Jj(ES zFkBe6upAfzWtC)3D^{{oCh3UiPl0nJl}tLXSmmVMk{MUJ(tAaB$f~8J(jB?_r_wPl z@?C;!9+JvIjciH3k&IV5Q(C#D3x~%i_uzDc5WWL3jwWLfsxcgxN^&?t6*lEX@#SA> zm|V__Fj6`aX%;>gg^*dOQatiywQ%a7JO`Z!Vz3t~hi{v`+erWw)-E$bHaTJSjh^x?5bUDZ3U^iBJ zwHXt{i`x$mSF(jzg%T3BLB%#?(d=5>g$vS%#W$>O6)MV7S+6B=q_aj?SR1WCaH) z5~Z}Hh*Cr+V3Qd{9y6YVzDIOU=@ih6I0RgNyK1Rex@qNBv$A3*fKvk)ozlnTmk`kD z%zX4VrE^Nj`+HyhDtQI3NY(mKCS|Mipm+W?PRV9mw&#$E4DP`DHDda0lP6{ecE}Pk zT!ReX-iXPkmTeASuw}IE&NKk9hWN}q{TBIkcZizfs09{@feT+b?+bW$T3YtOHE-HF~ z1)siy`*(oU4&bMzLwG#pS?$HCRA+szRU*{>0SdmwYbq{}*}VVv$V-Gg1wLc1_EWiDIA0@m7BGQhW7Tln)w XNhT*_^%Zuf{d<6KzeBmhJ^smmX$QRZ literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/global_value.cpython-310.pyc b/pocketoptionapi/__pycache__/global_value.cpython-310.pyc index dd1f37562de55b3de258f2f0155217175af25e03..f096c95947483de3ba96c95f2661cf6276c922f3 100644 GIT binary patch delta 77 zcmZ3-yq1|epO=@50SJ_;3^#I{Fq$~ISj7ZXCTAoTypEYWpO=@50R+S)HgcOVnmX%;7N-^!>z8Gw=a(nuWTzJC2jnMbr?T@od5bDzb=dlLErf~R`wBq(_3F29|bZ{ge7`BGH{!TLRG4YU+OKXI{H(mGjQLGp<#)QgdT zlqL1j5Hk>WfGi*bIUo-xHtH2Dsf(Jahv#NdR3@a)sW~D(wmCMb>k`u^mMC-X;HSV3 z3=xL}a?%_PwZ@Z^RtoE!P1ij8V4zQX*hR3=W=3-*61qB-plu zyv{{&Bl=U12yIgZo@K<{Wf|dt;|ql{i!cnL@r{=8P*%5QOMm5raeZtLsi$|6&%Jm) z^ncfBpI_=;qR>P!JX;?+6#VhnZ~}7SO;@?=cWMO=xnU(Rj7QBM;aH?4Nt)LhGgO%$ z9L-R9kwuNu8LH3aLYSE!p3G1+svXDIYAIAAWjB-~Z9gnVdzDa&@@klkR4r8E%``Cl E0|`)^S^xk5 diff --git a/pocketoptionapi/__pycache__/global_value.cpython-312.pyc b/pocketoptionapi/__pycache__/global_value.cpython-312.pyc deleted file mode 100644 index d11d21a2805a064c493f31c472d918a04e1d3020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmZutO-sW-5Z$!3sj)GrrE2{^@YIXB=uL!zh#vd^@zTq(CZmR~*|3{fdyBuqlRv=U z;w8thr+|Mz@aD-$Xu*R6Z)e^cc(XGfwrvrNgSY6;sS)y7l35tj;(H&9SK^al2?J5{ zjbR;g1M?iBi7*i@#5}?Z$Z%m|^lK*<{kHCo;Z_N61ThU1^+Xtg7lW@mN^yFg#0ldR zo;{wZK!m#YpGwCvh(R~5ug{M4n)d+Si2iZCqadY_esw{pUP`UpT1?H{SxMXZayNDIc{^?9w)0|12hDx~v}c<| diff --git a/pocketoptionapi/__pycache__/global_value.cpython-39.pyc b/pocketoptionapi/__pycache__/global_value.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e529a8b29c7a5bcbf98f025572c0db496b15f45 GIT binary patch literal 423 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 delta 3976 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 bOa3NL|HV^>yw*ARrtlko2+WHnxLEi`. + `. """ return GetCandles(self) + + @property + def change_symbol(self): + """Property for get Pocket Option websocket change_symbol chanel. + + :returns: The instance of :class:`ChangeSymbol + `. + """ + return ChangeSymbol(self) + + @property + def synced_datetime(self): + try: + if self.time_sync is not None: + self.sync.synchronize(self.time_sync.server_timestamp) + self.sync_datetime = self.sync.get_synced_datetime() + else: + logging.error("timesync no está establecido") + self.sync_datetime = None + except Exception as e: + logging.error(e) + self.sync_datetime = None + + return self.sync_datetime diff --git a/pocketoptionapi/constants.py b/pocketoptionapi/constants.py index 46ae868..cba6738 100644 --- a/pocketoptionapi/constants.py +++ b/pocketoptionapi/constants.py @@ -137,23 +137,25 @@ class REGION: REGIONS = { - "EUROPA": "wss://api-eu.po.market/socket.io/?EIO=4&transport=websocket", - "SEYCHELLES": "wss://api-sc.po.market/socket.io/?EIO=4&transport=websocket", - "HONGKONG": "wss://api-hk.po.market/socket.io/?EIO=4&transport=websocket", - "SERVER1": "wss://api-spb.po.market/socket.io/?EIO=4&transport=websocket", - "FRANCE2": "wss://api-fr2.po.market/socket.io/?EIO=4&transport=websocket", - "UNITED_STATES4": "wss://api-us4.po.market/socket.io/?EIO=4&transport=websocket", - "UNITED_STATES3": "wss://api-us3.po.market/socket.io/?EIO=4&transport=websocket", - "UNITED_STATES2": "wss://api-us2.po.market/socket.io/?EIO=4&transport=websocket", - "UNITED_STATES": "wss://api-us-north.po.market/socket.io/?EIO=4&transport=websocket", - "RUSSIA": "wss://api-msk.po.market/socket.io/?EIO=4&transport=websocket", - "SERVER2": "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket", - "INDIA": "wss://api-in.po.market/socket.io/?EIO=4&transport=websocket", - "FRANCE": "wss://api-fr.po.market/socket.io/?EIO=4&transport=websocket", - "FINLAND": "wss://api-fin.po.market/socket.io/?EIO=4&transport=websocket", - "SERVER3": "wss://api-c.po.market/socket.io/?EIO=4&transport=websocket", - "ASIA": "wss://api-asia.po.market/socket.io/?EIO=4&transport=websocket", - "SERVER4": "wss://api-us-south.po.market/socket.io/?EIO=4&transport=websocket" + # "EUROPA": "wss://api-eu.po.market/socket.io/?EIO=4&transport=websocket", + # "SEYCHELLES": "wss://api-sc.po.market/socket.io/?EIO=4&transport=websocket", + # "HONGKONG": "wss://api-hk.po.market/socket.io/?EIO=4&transport=websocket", + # "SERVER1": "wss://api-spb.po.market/socket.io/?EIO=4&transport=websocket", + # "FRANCE2": "wss://api-fr2.po.market/socket.io/?EIO=4&transport=websocket", + # "UNITED_STATES4": "wss://api-us4.po.market/socket.io/?EIO=4&transport=websocket", + # "UNITED_STATES3": "wss://api-us3.po.market/socket.io/?EIO=4&transport=websocket", + # "UNITED_STATES2": "wss://api-us2.po.market/socket.io/?EIO=4&transport=websocket", + "DEMO": "wss://demo-api-eu.po.market/socket.io/?EIO=4&transport=websocket", + # "DEMO_2": "wss://try-demo-eu.po.market/socket.io/?EIO=4&transport=websocket", + # "UNITED_STATES": "wss://api-us-north.po.market/socket.io/?EIO=4&transport=websocket", + # "RUSSIA": "wss://api-msk.po.market/socket.io/?EIO=4&transport=websocket", + # "SERVER2": "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket", + # "INDIA": "wss://api-in.po.market/socket.io/?EIO=4&transport=websocket", + # "FRANCE": "wss://api-fr.po.market/socket.io/?EIO=4&transport=websocket", + # "FINLAND": "wss://api-fin.po.market/socket.io/?EIO=4&transport=websocket", + # "SERVER3": "wss://api-c.po.market/socket.io/?EIO=4&transport=websocket", + # "ASIA": "wss://api-asia.po.market/socket.io/?EIO=4&transport=websocket", + # "SERVER4": "wss://api-us-south.po.market/socket.io/?EIO=4&transport=websocket" } def __getattr__(self, key): diff --git a/pocketoptionapi/prueba_temp.py b/pocketoptionapi/prueba_temp.py new file mode 100644 index 0000000..1141261 --- /dev/null +++ b/pocketoptionapi/prueba_temp.py @@ -0,0 +1,9 @@ +import pandas as pd + + +df_1 = pd.read_csv('datos_completos_AUDNZD_otc.csv') +df_2 = pd.read_csv('datos_completos_AUDNZD_otc_2.csv') + +df_full = pd.concat([df_1, df_2], axis=0) +print(df_full.shape) +df_full.to_csv('datos_full_AUDNZD_otc.csv', index=False) diff --git a/pocketoptionapi/stable_api.py b/pocketoptionapi/stable_api.py index 27fb47d..9801c86 100644 --- a/pocketoptionapi/stable_api.py +++ b/pocketoptionapi/stable_api.py @@ -16,8 +16,6 @@ from collections import deque # from pocketoptionapi.expiration import get_expiration_time, get_remaning_time import pandas as pd -from pocketoptionapi.ws.chanels.get_balances import * -from pocketoptionapi.ws.client import WebsocketClient # Obtener la zona horaria local del sistema como una cadena en el formato IANA local_zone_name = get_localzone() @@ -36,7 +34,7 @@ def get_balance(): class PocketOption: - __version__ = "6.8.9.1" + __version__ = "1.0.0" def __init__(self, ssid): self.size = [1, 5, 10, 15, 30, 60, 120, 300, 600, 900, 1800, @@ -67,10 +65,10 @@ def __init__(self, ssid): # -------------------------------------------------------------------------- def get_server_timestamp(self): - return self.api.timesync.server_timestamp + return self.api.time_sync.server_timestamp def get_server_datetime(self): - return self.api.timesync.server_datetime + return self.api.time_sync.server_datetime def set_session(self, header, cookie): self.SESSION_HEADER = header @@ -104,8 +102,6 @@ def connect(self): return False return True - async def reconect(self): - await WebsocketClient(self).reconnect() @staticmethod def check_connect(): # True/False @@ -119,46 +115,74 @@ def check_connect(): # wait for timestamp getting # self.update_ACTIVES_OPCODE() - def get_balance(self): + @staticmethod + def get_balance(): if global_value.balance_updated: return global_value.balance else: return None - def buy(self, amount, ACTIVES, ACTION, expirations): + def buy(self, amount, active, action, expirations): self.api.buy_multi_option = {} self.api.buy_successful = None req_id = "buy" + try: - self.api.buy_multi_option[req_id]["id"] = None - except: - pass + if req_id not in self.api.buy_multi_option: + self.api.buy_multi_option[req_id] = {"id": None} + else: + self.api.buy_multi_option[req_id]["id"] = None + except Exception as e: + logging.error(f"Error initializing buy_multi_option: {e}") + return False, None + global_value.order_data = None global_value.result = None - self.api.buyv3( - amount, ACTIVES, ACTION, expirations, req_id) + + self.api.buyv3(amount, active, action, expirations, req_id) + start_t = time.time() - while global_value.result is None or global_value.order_data is None: + while True: + if global_value.result is not None and global_value.order_data is not None: + break if time.time() - start_t >= 5: - logging.error(global_value.order_data["error"]) + if isinstance(global_value.order_data, dict) and "error" in global_value.order_data: + logging.error(global_value.order_data["error"]) + else: + logging.error("Unknown error occurred during buy operation") return False, None + time.sleep(0.1) # Sleep for a short period to prevent busy-waiting - return global_value.result, global_value.order_data["id"] + return global_value.result, global_value.order_data.get("id", None) def check_win(self, id_number): """Return amount of deals and win/lose status.""" + start_t = time.time() + order_info = None + while True: try: order_info = self.get_async_order(id_number) - if order_info["id"] is not None: + if order_info and "id" in order_info and order_info["id"] is not None: break except: pass + # except Exception as e: + # logging.error(f"Error retrieving order info: {e}") + + if time.time() - start_t >= 120: + logging.error("Timeout: Could not retrieve order info in time.") + return None, "unknown" - # Determina el estado de win/lose basado en el profit. - status = "win" if order_info["profit"] > 0 else "lose" - return order_info["profit"], status + time.sleep(0.1) # Sleep for a short period to prevent busy-waiting + + if order_info and "profit" in order_info: + status = "win" if order_info["profit"] > 0 else "lose" + return order_info["profit"], status + else: + logging.error("Invalid order info retrieved.") + return None, "unknown" @staticmethod def last_time(timestamp, period): @@ -167,48 +191,73 @@ def last_time(timestamp, period): timestamp_redondeado = (timestamp // period) * period return int(timestamp_redondeado) - def get_candles(self, ACTIVES, period, end_time, count=9000, count_request=1): + def get_candles(self, active, period, start_time=None, count=6000, count_request=1): """ Realiza múltiples peticiones para obtener datos históricos de velas y los procesa. Devuelve un Dataframe ordenado de menor a mayor por la columna 'time'. - :param ACTIVES: El activo para el cual obtener las velas. + :param active: El activo para el cual obtener las velas. :param period: El intervalo de tiempo de cada vela en segundos. - :param count: El número de segundos a obtener en cada petición, max: 9000 = 150 datos. - :param end_time: El tiempo final para la última vela. + :param count: El número de segundos a obtener en cada petición, max: 9000 = 150 datos de 1 min. + :param start_time: El tiempo final para la última vela. :param count_request: El número de peticiones para obtener más datos históricos. """ + if start_time is None: + time_sync = self.get_server_timestamp() + time_red = self.last_time(time_sync, period) + else: + time_red = start_time + time_sync = self.get_server_timestamp() - time_sync = self.get_server_timestamp() - period - time_red = self.last_time(time_sync, period) - print(time_red) - data_temp = [] - self.api.candles = data_temp - - if self.api.historyNew is not None: - data_temp.extend(self.process_data_history(self.api.historyNew, period)) + all_candles = [] - for i in range(count_request): + for _ in range(count_request): self.api.history_data = None + while True: try: - self.api.getcandles(ACTIVES, period, count, time_red) + # Enviar la petición de velas + self.api.getcandles(active, 30, count, time_red) + + # Esperar hasta que history_data no sea None while self.check_connect and self.api.history_data is None: - pass + time.sleep(0.1) + if self.api.history_data is not None: - data_temp.extend(self.api.history_data) + all_candles.extend(self.api.history_data) break - except: - logging.error('**error** get_candles need reconnect') - # self.connect() + except Exception as e: + logging.error(e) + # Puedes agregar lógica de reconexión aquí si es necesario + + # Ordenar all_candles por 'index' para asegurar que estén en el orden correcto + all_candles = sorted(all_candles, key=lambda x: x["time"]) + + # Asegurarse de que se han recibido velas antes de actualizar time_red + if all_candles: + # Usar el tiempo de la última vela recibida para la próxima petición + time_red = all_candles[0]["time"] - # Ajusta el tiempo de inicio para la próxima petición - time_red -= count + # Crear un DataFrame con todas las velas obtenidas + df_candles = pd.DataFrame(all_candles) - return self.api.candles + # Ordenar por la columna 'time' de menor a mayor + df_candles = df_candles.sort_values(by='time').reset_index(drop=True) + df_candles['time'] = pd.to_datetime(df_candles['time'], unit='s') + df_candles.set_index('time', inplace=True) + df_candles.index = df_candles.index.floor('1s') - def process_data_history(self, data, period): + # Resamplear los datos en intervalos de 30 segundos y calcular open, high, low, close + df_resampled = df_candles['price'].resample(f'{period}s').ohlc() + + # Resetear el índice para que 'time' vuelva a ser una columna + df_resampled.reset_index(inplace=True) + + return df_resampled + + @staticmethod + def process_data_history(data, period): """ Este método toma datos históricos, los convierte en un DataFrame de pandas, redondea los tiempos al minuto más cercano, y calcula los valores OHLC (Open, High, Low, Close) para cada minuto. Luego, convierte el resultado en un diccionario @@ -222,8 +271,8 @@ def process_data_history(self, data, period): df = pd.DataFrame(data['history'], columns=['timestamp', 'price']) # Convertir a datetime y redondear al minuto df['datetime'] = pd.to_datetime(df['timestamp'], unit='s', utc=True) - df['datetime'] = df['datetime'].dt.tz_convert(str(local_zone_name)) - df['minute_rounded'] = df['datetime'].dt.floor(f'{period/60}T') + # df['datetime'] = df['datetime'].dt.tz_convert(str(local_zone_name)) + df['minute_rounded'] = df['datetime'].dt.floor(f'{period / 60}min') # Calcular OHLC ohlcv = df.groupby('minute_rounded').agg( @@ -236,6 +285,8 @@ def process_data_history(self, data, period): ohlcv['time'] = ohlcv['minute_rounded'].apply(lambda x: int(x.timestamp())) ohlcv = ohlcv.drop(columns='minute_rounded') + ohlcv = ohlcv.iloc[:-1] + ohlcv_dict = ohlcv.to_dict(orient='records') return ohlcv_dict @@ -265,10 +316,15 @@ def process_candle(candle_data, period): data_df.sort_values(by='time', ascending=True, inplace=True) data_df.drop_duplicates(subset='time', keep="first", inplace=True) data_df.reset_index(drop=True, inplace=True) - data_df.fillna(method='ffill', inplace=True) + data_df.ffill(inplace=True) data_df.drop(columns='symbol_id', inplace=True) # Verificación opcional: Comprueba si las diferencias son todas de 60 segundos (excepto el primer valor NaN) diferencias = data_df['time'].diff() diff = (diferencias[1:] == period).all() return data_df, diff + def change_symbol(self, active, period): + return self.api.change_symbol(active, period) + + def sync_datetime(self): + return self.api.synced_datetime diff --git a/pocketoptionapi/v2/__init__.py b/pocketoptionapi/v2/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/pocketoptionapi/v2/__pycache__/__init__.cpython-312.pyc b/pocketoptionapi/v2/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index ebac979d2e50fef344ae24b274cf2d89ec6183f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmX@j%ge<81W)D`q=D$iAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)9y0oLW?@UzVAk zU!Itgom!+Hke{5LTH;?&l9`|97~rX20Osd|`H2OY`ejD?@$s2?nI-Y@dIgogIBatB cQ%ZAE?TT1|1~LM1F^KVznURsPh#ANN0PcS%xc~qF diff --git a/pocketoptionapi/v2/pocketoptionapi2/.gitignore b/pocketoptionapi/v2/pocketoptionapi2/.gitignore deleted file mode 100644 index a3b9b4f..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.py[cod] -build/ -dist/ -*.egg-info/ -.vscode/ -/.vs \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/ACTIVE_CODE.txt b/pocketoptionapi/v2/pocketoptionapi2/ACTIVE_CODE.txt deleted file mode 100644 index aaa55ad..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/ACTIVE_CODE.txt +++ /dev/null @@ -1,146 +0,0 @@ -2018/5/7 -EURUSD 1 -EURGBP 2 -GBPJPY 3 -EURJPY 4 -GBPUSD 5 -USDJPY 6 -AUDCAD 7 -NZDUSD 8 -USDRUB 10 -AMAZON 31 -APPLE 32 -BAIDU 33 -CISCO 34 -FACEBOOK 35 -GOOGLE 36 -INTEL 37 -MSFT 38 -YAHOO 40 -AIG 41 -CITI 45 -COKE 46 -GE 48 -GM 49 -GS 50 -JPM 51 -MCDON 52 -MORSTAN 53 -NIKE 54 -USDCHF 72 -XAUUSD 74 -EURUSD-OTC 76 -EURGBP-OTC 77 -USDCHF-OTC 78 -NZDUSD-OTC 80 -GBPUSD-OTC 81 -AUDCAD-OTC 86 -ALIBABA 87 -YANDEX 95 -AUDUSD 99 -USDCAD 100 -AUDJPY 101 -GBPCAD 102 -GBPCHF 103 -GBPAUD 104 -EURCAD 105 -CHFJPY 106 -CADCHF 107 -EURAUD 108 -TWITTER 113 -FERRARI 133 -TESLA 167 -USDNOK 168 -EURNZD 212 -USDSEK 219 -USDTRY 220 -MMM:US 252 -ABT:US 253 -ABBV:US 254 -ACN:US 255 -ATVI:US 256 -ADBE:US 258 -AAP:US 259 -AA:US 269 -MO:US 278 -AMGN:US 290 -T:US 303 -BAC:US 313 -BBY:US 320 -BA:US 324 -BMY:US 328 -CAT:US 338 -CVX:US 349 -CL:US 365 -CMCSA:US 366 -COP:US 370 -COST:US 374 -CVS:US 379 -DHR:US 381 -DAL:US 386 -EBAY:US 407 -XOM:US 429 -FDX:US 434 -GILD:US 460 -HAS:US 471 -HON:US 480 -IBM:US 491 -KHC:US 513 -LMT:US 528 -MA:US 542 -MDT:US 548 -MU:US 553 -NFLX:US 569 -NEE:US 575 -NVDA:US 586 -PYPL:US 597 -PFE:US 603 -PM:US 605 -PG:US 617 -QCOM:US 626 -RTN:US 630 -CRM:US 645 -SLB:US 647 -SBUX:US 666 -SYK:US 670 -TWX:US 692 -VZ:US 723 -V:US 726 -WMT:US 729 -WBA:US 730 -WFC:US 733 -SNAP 756 -DUBAI 757 -TA25 758 -AMD 760 -ALGN 761 -ANSS 762 -DRE 772 -IDXX 775 -RMD 781 -SU 783 -TFX 784 -TMUS 785 -QQQ 796 -SPY 808 -BTCUSD 816 -XRPUSD 817 -ETHUSD 818 -LTCUSD 819 -DSHUSD 821 -BCHUSD 824 -OMGUSD 825 -ZECUSD 826 -ETCUSD 829 -BTGUSD 837 -QTMUSD 845 -TRXUSD 858 -EOSUSD 864 -USDINR 865 -USDPLN 866 -USDBRL 867 -USDZAR 868 -DBX 889 -SPOT 891 -USDSGD 892 -USDHKD 893 \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/pocketoptionapi/v2/pocketoptionapi2/docs/image/icon/favicon.ico b/pocketoptionapi/v2/pocketoptionapi2/docs/image/icon/favicon.ico deleted file mode 100644 index 43ce842f41ff6379cdb4a1bff1cfa88db0fa1e5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmd6mze~eV5XUcC+D^5K)OL}MPW~FiK~QSJU->gcy9nYUxVX9MCiZU-hmt?0At?os zf~Zk6mI%W6y~L+!Ub;Eh@afCD-uLd^y(^J{r&uI>SE-R9DiP5PfC-k!j^$r|T(jbJ z%*r09#(}+redeP{LJ3TRN!iB>fe)wf>F$(!PHoJ3Jfv1|MLp;Oa0gmoO~pvjGPLZh z7Pvh}++HBQ-zP>4hECz*y#Yqj^v?Q3q@9IcKn(BrM;pcnn&g98QZKpfrEH{AdaT_I zoZ)gX2J%~)erpQ34NWh#yq|0OeyTo}H$4CM{_RZDYrS{3hvc6p?q6tnJ%3n#PCI{h zQ?DQW)9ROcoVxV?w+Hqj@$-q6`vv`5N!B0kWA|_4?j8=b`+tRYS7r$Qx4=(=d-R<8 zxb<{I*O(m-{xUPN-hgE_f38_BKr6F80OmiheBhr4@*l`5+h48BM8YYc92f=0kmzEU I-{GfpU+tu=<^TWy diff --git a/pocketoptionapi/v2/pocketoptionapi2/docs/index.md b/pocketoptionapi/v2/pocketoptionapi2/docs/index.md deleted file mode 100644 index 47d5117..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/docs/index.md +++ /dev/null @@ -1,201 +0,0 @@ -# Get start - -## document version - -7/5 - -2.2 fix connect stable - -6/13 -fix auth - - -12/5 - -1.6 -fix websocket connect - - -10/29 -1.5 -fix updateAssets - -7/17 -1.1 add get_payment - -7/3 - -add more function - -6/23 -v0.1 -!!!Start New!! - -## Debug Mode ON -```python -import logging -logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(message)s') -``` -## check_win & buy sample - -```python -from pocketoptionapi.stable_api import PocketOption -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123123\";s:10:\"ip_address\";s:12:\"2.111.11.5\";s:10:\"user_agent\";s:104:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123232;}1232321213","isDemo":0,"uid":"123232132"}]""" -account=PocketOption(ssid) -check_connect,message=account.connect() -if check_connect: - account.change_balance("PRACTICE")#"REAL" - asset="EURUSD" - amount=1 - dir="call"#"call"/"put" - duration=30#sec - print("Balance: ",account.get_balance()) - buy_info=account.buy(asset,amount,dir,duration) - #need this to close the connect - print("----Trade----") - print("Get: ",account.check_win(buy_info["id"])) - print("----Trade----") - print("Balance: ",account.get_balance()) - #need close ping server thread - account.close() -``` - -## Login - -PockOption only support ssid login, because GOOGLE reCAPTCHA - -```python -from pocketoptionapi.stable_api import PocketOption -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" -account=PocketOption(ssid) -check,message=account.connect() -account.close() -``` - -## Get Balance - - -```python -from pocketoptionapi.stable_api import PocketOption -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" -account=PocketOption(ssid) -check,message=account.connect() -account.change_balance("PRACTICE") -balance=account.get_balance() -print(balance) -account.close() -``` - - - -## Buy - -```python -from pocketoptionapi.stable_api import PocketOption - -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" -account=PocketOption(ssid) -check,message=account.connect() -if check: - account.change_balance("PRACTICE") - asset="EURUSD" - amount=1 - dir="call"#"call"/"put" - duration=60#sec - print(account.buy(asset,amount,dir,duration)) - account.close() -``` - -## sell_option - -```python -from pocketoptionapi.stable_api import PocketOption -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" -account=PocketOption(ssid) -check_connect,message=account.connect() -if check_connect: - account.change_balance("PRACTICE")#"REAL" - asset="EURUSD" - amount=1 - dir="call"#"call"/"put" - duration=120#sec - print("Balance: ",account.get_balance()) - buy_info=account.buy(asset,amount,dir,duration) - #need this to close the connect - account.sell_option(buy_info["id"]) - account.close() -``` - - -## get candle - -```python -from pocketoptionapi.stable_api import PocketOption -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" -account=PocketOption(ssid) -check_connect,message=account.connect() -import time -if check_connect: - asset="EURUSD" - _time=int(time.time())#the candle end of time - offset=120#how much sec want to get _time-offset --->your candle <---_time - period=60#candle size in sec - print("You will get the candle from: "+str(_time-offset)+" to: "+str(_time)) - print("------\n") - candle=account.get_candle(asset,_time,offset,period) - for c in candle["data"]: - print(c) - account.close() -``` - -## check_asset_open - -```python -from pocketoptionapi.stable_api import PocketOption -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" -account=PocketOption(ssid) -check_connect,message=account.connect() -import time -if check_connect: - print("Check Asset Open") - for i in account.get_all_asset_name(): - print(i,account.check_asset_open(i)) - account.close() -``` - -## GET realtime candle - - -```python -from pocketoptionapi.stable_api import PocketOption -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" -account=PocketOption(ssid) -check_connect,message=account.connect() -import time -if check_connect: - asset="NZDUSD_otc" - list_size=10#this is setting how much Quote you want to save - account.start_candles_stream("NZDUSD_otc",list_size) - while True: - if len(account.get_realtime_candles("NZDUSD_otc"))==list_size: - break - print(account.get_realtime_candles("NZDUSD_otc")) - account.close() -``` - -## get_payment - -```python -from pocketoptionapi.stable_api import PocketOption -ssid=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"123123123\";s:10:\"ip_address\";s:12:\"1.2.3.4\";s:10:\"user_agent\";s:123:\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36\";s:13:\"last_activity\";i:123;}123","isDemo":1,"uid":"123"}]""" -account=PocketOption(ssid) -check_connect,message=account.connect() -if check_connect: - - all_data=account.get_payment() - for asset_name in all_data: - asset_data=all_data[asset_name] - print(asset_name,asset_data["payment"],asset_data["open"]) - -account.close() -``` \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/.Rhistory b/pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/.Rhistory deleted file mode 100644 index e69de29..0000000 diff --git a/pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/extra.js b/pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/extra.js deleted file mode 100644 index b1f4222..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/docs/javascripts/extra.js +++ /dev/null @@ -1,27 +0,0 @@ -window.MathJax = { - jax: ["input/TeX","input/MathML","input/AsciiMath","output/SVG"], - extensions: ["tex2jax.js","mml2jax.js","asciimath2jax.js","MathMenu.js","MathZoom.js","AssistiveMML.js", "a11y/accessibility-menu.js"], - TeX: { - extensions: ["AMSmath.js","AMSsymbols.js","noErrors.js","noUndefined.js"] - }, - tex2jax: { - inlineMath: [ ["\\(","\\)"] ], - displayMath: [ ["\\[","\\]"] ] - }, - TeX: { - TagSide: "right", - TagIndent: ".8em", - MultLineWidth: "85%", - equationNumbers: { - autoNumber: "AMS", - }, - unicode: { - fonts: "STIXGeneral,'Arial Unicode MS'" - } - }, - displayAlign: "left", - showProcessingMessages: false, - messageStyle: "none" -}; - - diff --git a/pocketoptionapi/v2/pocketoptionapi2/instrument.txt b/pocketoptionapi/v2/pocketoptionapi2/instrument.txt deleted file mode 100644 index 920723d..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/instrument.txt +++ /dev/null @@ -1,318 +0,0 @@ -Name: NZD/SEK instrument_id: "NZDSEK" instrument_type: "forex" -Name: NZD/USD instrument_id: "NZDUSD" instrument_type: "forex" -Name: CAD/TRY instrument_id: "CADTRY" instrument_type: "forex" -Name: EUR/CHF instrument_id: "EURCHF" instrument_type: "forex" -Name: USD/THB instrument_id: "USDTHB" instrument_type: "forex" -Name: EUR/TRY instrument_id: "EURTRY" instrument_type: "forex" -Name: GBP/AUD instrument_id: "GBPAUD" instrument_type: "forex" -Name: AUD/USD instrument_id: "AUDUSD" instrument_type: "forex" -Name: EUR/MXN instrument_id: "EURMXN" instrument_type: "forex" -Name: USD/CHF instrument_id: "USDCHF" instrument_type: "forex" -Name: NOK/DKK instrument_id: "NOKDKK" instrument_type: "forex" -Name: EUR/NOK instrument_id: "EURNOK" instrument_type: "forex" -Name: SEK/JPY instrument_id: "SEKJPY" instrument_type: "forex" -Name: CAD/NOK instrument_id: "CADNOK" instrument_type: "forex" -Name: NOK/SEK instrument_id: "NOKSEK" instrument_type: "forex" -Name: GBP/HUF instrument_id: "GBPHUF" instrument_type: "forex" -Name: GBP/SGD instrument_id: "GBPSGD" instrument_type: "forex" -Name: AUD/NZD instrument_id: "AUDNZD" instrument_type: "forex" -Name: GBP/JPY instrument_id: "GBPJPY" instrument_type: "forex" -Name: CHF/SEK instrument_id: "CHFSEK" instrument_type: "forex" -Name: AUD/NOK instrument_id: "AUDNOK" instrument_type: "forex" -Name: GBP/NOK instrument_id: "GBPNOK" instrument_type: "forex" -Name: AUD/DKK instrument_id: "AUDDKK" instrument_type: "forex" -Name: EUR/AUD instrument_id: "EURAUD" instrument_type: "forex" -Name: AUD/CHF instrument_id: "AUDCHF" instrument_type: "forex" -Name: GBP/CHF instrument_id: "GBPCHF" instrument_type: "forex" -Name: AUD/CAD instrument_id: "AUDCAD" instrument_type: "forex" -Name: CHF/DKK instrument_id: "CHFDKK" instrument_type: "forex" -Name: AUD/TRY instrument_id: "AUDTRY" instrument_type: "forex" -Name: NZD/CHF instrument_id: "NZDCHF" instrument_type: "forex" -Name: USD/SEK instrument_id: "USDSEK" instrument_type: "forex" -Name: GBP/NZD instrument_id: "GBPNZD" instrument_type: "forex" -Name: EUR/DKK instrument_id: "EURDKK" instrument_type: "forex" -Name: NZD/DKK instrument_id: "NZDDKK" instrument_type: "forex" -Name: CAD/SGD instrument_id: "CADSGD" instrument_type: "forex" -Name: EUR/GBP instrument_id: "EURGBP" instrument_type: "forex" -Name: EUR/CAD instrument_id: "EURCAD" instrument_type: "forex" -Name: USD/CZK instrument_id: "USDCZK" instrument_type: "forex" -Name: AUD/MXN instrument_id: "AUDMXN" instrument_type: "forex" -Name: EUR/NZD instrument_id: "EURNZD" instrument_type: "forex" -Name: GBP/PLN instrument_id: "GBPPLN" instrument_type: "forex" -Name: NZD/NOK instrument_id: "NZDNOK" instrument_type: "forex" -Name: AUD/SGD instrument_id: "AUDSGD" instrument_type: "forex" -Name: GBP/SEK instrument_id: "GBPSEK" instrument_type: "forex" -Name: NZD/CAD instrument_id: "NZDCAD" instrument_type: "forex" -Name: NZD/MXN instrument_id: "NZDMXN" instrument_type: "forex" -Name: NZD/TRY instrument_id: "NZDTRY" instrument_type: "forex" -Name: CHF/SGD instrument_id: "CHFSGD" instrument_type: "forex" -Name: USD/MXN instrument_id: "USDMXN" instrument_type: "forex" -Name: EUR/HUF instrument_id: "EURHUF" instrument_type: "forex" -Name: GBP/CAD instrument_id: "GBPCAD" instrument_type: "forex" -Name: USD/TRY instrument_id: "USDTRY" instrument_type: "forex" -Name: USD/JPY instrument_id: "USDJPY" instrument_type: "forex" -Name: EUR/USD instrument_id: "EURUSD" instrument_type: "forex" -Name: AUD/SEK instrument_id: "AUDSEK" instrument_type: "forex" -Name: CHF/NOK instrument_id: "CHFNOK" instrument_type: "forex" -Name: USD/PLN instrument_id: "USDPLN" instrument_type: "forex" -Name: USD/HUF instrument_id: "USDHUF" instrument_type: "forex" -Name: CHF/JPY instrument_id: "CHFJPY" instrument_type: "forex" -Name: GBP/ILS instrument_id: "GBPILS" instrument_type: "forex" -Name: NZD/JPY instrument_id: "NZDJPY" instrument_type: "forex" -Name: CHF/TRY instrument_id: "CHFTRY" instrument_type: "forex" -Name: CAD/JPY instrument_id: "CADJPY" instrument_type: "forex" -Name: USD/RUB instrument_id: "USDRUB" instrument_type: "forex" -Name: SGD/JPY instrument_id: "SGDJPY" instrument_type: "forex" -Name: GBP/USD instrument_id: "GBPUSD" instrument_type: "forex" -Name: CAD/PLN instrument_id: "CADPLN" instrument_type: "forex" -Name: DKK/SGD instrument_id: "DKKSGD" instrument_type: "forex" -Name: NZD/SGD instrument_id: "NZDSGD" instrument_type: "forex" -Name: AUD/JPY instrument_id: "AUDJPY" instrument_type: "forex" -Name: NOK/JPY instrument_id: "NOKJPY" instrument_type: "forex" -Name: PLN/SEK instrument_id: "PLNSEK" instrument_type: "forex" -Name: USD/SGD instrument_id: "USDSGD" instrument_type: "forex" -Name: GBP/MXN instrument_id: "GBPMXN" instrument_type: "forex" -Name: USD/CAD instrument_id: "USDCAD" instrument_type: "forex" -Name: SEK/DKK instrument_id: "SEKDKK" instrument_type: "forex" -Name: DKK/PLN instrument_id: "DKKPLN" instrument_type: "forex" -Name: CAD/MXN instrument_id: "CADMXN" instrument_type: "forex" -Name: GBP/TRY instrument_id: "GBPTRY" instrument_type: "forex" -Name: EUR/SGD instrument_id: "EURSGD" instrument_type: "forex" -Name: NZD/ZAR instrument_id: "NZDZAR" instrument_type: "forex" -Name: EUR/CZK instrument_id: "EURCZK" instrument_type: "forex" -Name: EUR/JPY instrument_id: "EURJPY" instrument_type: "forex" -Name: CAD/CHF instrument_id: "CADCHF" instrument_type: "forex" -Name: USD/INR instrument_id: "USDINR" instrument_type: "forex" -Name: USD/BRL instrument_id: "USDBRL" instrument_type: "forex" -Name: USD/NOK instrument_id: "USDNOK" instrument_type: "forex" -Name: USD/DKK instrument_id: "USDDKK" instrument_type: "forex" -Name: China Large-Cap ETF instrument_id: "FXI" instrument_type: "cfd" -Name: IBM Corporation instrument_id: "IBM:US" instrument_type: "cfd" -Name: IDEXX Laboratories instrument_id: "IDXX" instrument_type: "cfd" -Name: Siemens instrument_id: "SIED-CHIX" instrument_type: "cfd" -Name: Roche instrument_id: "ROGZ-CHIX" instrument_type: "cfd" -Name: Airbus SE instrument_id: "AIRP-CHIX" instrument_type: "cfd" -Name: AbbVie instrument_id: "ABBV:US" instrument_type: "cfd" -Name: Concho Resources instrument_id: "CXO:US" instrument_type: "cfd" -Name: Verizon instrument_id: "VZ:US" instrument_type: "cfd" -Name: Unilever instrument_id: "ULVRL-CHIX" instrument_type: "cfd" -Name: Lockheed Martin instrument_id: "LMT:US" instrument_type: "cfd" -Name: NextEra Energy instrument_id: "NEE:US" instrument_type: "cfd" -Name: US 100 instrument_id: "USNDAQ100" instrument_type: "cfd" -Name: Entergy instrument_id: "ETR:US" instrument_type: "cfd" -Name: QQQ Trust, Series 1 instrument_id: "QQQ" instrument_type: "cfd" -Name: DTE Energy instrument_id: "DTE:US" instrument_type: "cfd" -Name: Tesco instrument_id: "TSCOL-CHIX" instrument_type: "cfd" -Name: First Solar instrument_id: "FSLR:US" instrument_type: "cfd" -Name: Pfizer instrument_id: "PFE:US" instrument_type: "cfd" -Name: Eastman Chemical instrument_id: "EMN:US" instrument_type: "cfd" -Name: JP Morgan Chase instrument_id: "JPM" instrument_type: "cfd" -Name: Google instrument_id: "GOOGLE" instrument_type: "cfd" -Name: Fastenal instrument_id: "FAST:US" instrument_type: "cfd" -Name: HSBC Holdings PLC instrument_id: "HSBAL-CHIX" instrument_type: "cfd" -Name: DaVita instrument_id: "DVA:US" instrument_type: "cfd" -Name: Utilities SPDR instrument_id: "XLU" instrument_type: "cfd" -Name: Federal Realty instrument_id: "FRT:US" instrument_type: "cfd" -Name: Commerzbank instrument_id: "CBKD-CHIX" instrument_type: "cfd" -Name: Amgen instrument_id: "AMGN:US" instrument_type: "cfd" -Name: Silver instrument_id: "XAGUSD" instrument_type: "cfd" -Name: Resmed Inc instrument_id: "RMD" instrument_type: "cfd" -Name: Equifax instrument_id: "EFX:US" instrument_type: "cfd" -Name: Digital Realty Trust instrument_id: "DLR:US" instrument_type: "cfd" -Name: Adobe Systems instrument_id: "ADBE:US" instrument_type: "cfd" -Name: Autodesk instrument_id: "ADSK:US" instrument_type: "cfd" -Name: Barclays instrument_id: "BARCL-CHIX" instrument_type: "cfd" -Name: Spotify instrument_id: "SPOT" instrument_type: "cfd" -Name: Standard Chartered instrument_id: "STANL-CHIX" instrument_type: "cfd" -Name: Alibaba instrument_id: "ALIBABA" instrument_type: "cfd" -Name: Freeport-McMoRan instrument_id: "FCX:US" instrument_type: "cfd" -Name: Delta Air Lines instrument_id: "DAL:US" instrument_type: "cfd" -Name: Materials Select Sector SPDR instrument_id: "XLB" instrument_type: "cfd" -Name: Amazon instrument_id: "AMAZON" instrument_type: "cfd" -Name: Semiconductor ETF instrument_id: "SMH" instrument_type: "cfd" -Name: S&P 500 ETF instrument_id: "SPY" instrument_type: "cfd" -Name: Caterpillar instrument_id: "CAT:US" instrument_type: "cfd" -Name: US 30 instrument_id: "US30" instrument_type: "cfd" -Name: ConocoPhillips instrument_id: "COP:US" instrument_type: "cfd" -Name: Flowserve instrument_id: "FLS:US" instrument_type: "cfd" -Name: Goldman Sachs instrument_id: "GS" instrument_type: "cfd" -Name: AU 200 instrument_id: "AUS200" instrument_type: "cfd" -Name: Edison instrument_id: "EIX:US" instrument_type: "cfd" -Name: Crude Oil WTI instrument_id: "USOUSD" instrument_type: "cfd" -Name: MSCI Mexico ETF instrument_id: "EWW" instrument_type: "cfd" -Name: General Electric instrument_id: "GE" instrument_type: "cfd" -Name: Micron Technology instrument_id: "MU:US" instrument_type: "cfd" -Name: Telefónica instrument_id: "TEFE-CHIX" instrument_type: "cfd" -Name: Procter & Gamble instrument_id: "PG:US" instrument_type: "cfd" -Name: Accenture instrument_id: "ACN:US" instrument_type: "cfd" -Name: Costco instrument_id: "COST:US" instrument_type: "cfd" -Name: Medtronic instrument_id: "MDT:US" instrument_type: "cfd" -Name: MSCI Emerging Markets ETF instrument_id: "EEM" instrument_type: "cfd" -Name: Expeditors instrument_id: "EXPD:US" instrument_type: "cfd" -Name: Facebook instrument_id: "FACEBOOK" instrument_type: "cfd" -Name: Tesla instrument_id: "TESLA" instrument_type: "cfd" -Name: Merck instrument_id: "MRKD-CHIX" instrument_type: "cfd" -Name: FirstEnergy instrument_id: "FE:US" instrument_type: "cfd" -Name: Altria instrument_id: "MO:US" instrument_type: "cfd" -Name: Core MSCI Emerging Markets instrument_id: "IEMG" instrument_type: "cfd" -Name: AS Roma instrument_id: "ASRM" instrument_type: "cfd" -Name: Bayer instrument_id: "BAYND-CHIX" instrument_type: "cfd" -Name: Continental instrument_id: "COND-CHIX" instrument_type: "cfd" -Name: Qualcomm instrument_id: "QCOM:US" instrument_type: "cfd" -Name: Vodafone Group PLC instrument_id: "VODL-CHIX" instrument_type: "cfd" -Name: Visa instrument_id: "V:US" instrument_type: "cfd" -Name: AT&T instrument_id: "T:US" instrument_type: "cfd" -Name: FedEx instrument_id: "FDX:US" instrument_type: "cfd" -Name: Frontier Communications instrument_id: "FTR:US" instrument_type: "cfd" -Name: Teleflex Inc instrument_id: "TFX" instrument_type: "cfd" -Name: Twitter Inc instrument_id: "TWITTER" instrument_type: "cfd" -Name: Royal Bank of Scotland instrument_id: "RBSL-CHIX" instrument_type: "cfd" -Name: S&P Oil & Gas Explor & Product instrument_id: "XOP" instrument_type: "cfd" -Name: Deutsche Post instrument_id: "DPWD-CHIX" instrument_type: "cfd" -Name: General Motors instrument_id: "GM" instrument_type: "cfd" -Name: US 500 instrument_id: "USSPX500" instrument_type: "cfd" -Name: Bank of America instrument_id: "BAC:US" instrument_type: "cfd" -Name: Nike instrument_id: "NIKE" instrument_type: "cfd" -Name: Darden Restaurants instrument_id: "DRI:US" instrument_type: "cfd" -Name: UBS instrument_id: "UBSGZ-CHIX" instrument_type: "cfd" -Name: Discover Financial Services instrument_id: "DFS:US" instrument_type: "cfd" -Name: Emerson Electric instrument_id: "EMR:US" instrument_type: "cfd" -Name: Advance Auto Parts instrument_id: "AAP:US" instrument_type: "cfd" -Name: Duke Realty Corp instrument_id: "DRE" instrument_type: "cfd" -Name: Rolls-Royce instrument_id: "RRL-CHIX" instrument_type: "cfd" -Name: Wells Fargo instrument_id: "WFC:US" instrument_type: "cfd" -Name: CitiGroup instrument_id: "CITI" instrument_type: "cfd" -Name: Cisco Systems instrument_id: "CISCO" instrument_type: "cfd" -Name: Apple instrument_id: "APPLE" instrument_type: "cfd" -Name: MSCI Japan ETF instrument_id: "EWJ" instrument_type: "cfd" -Name: F5 Networks instrument_id: "FFIV:US" instrument_type: "cfd" -Name: Heinz instrument_id: "KHC:US" instrument_type: "cfd" -Name: British American Tobacco instrument_id: "BATSL-CHIX" instrument_type: "cfd" -Name: Nvidia instrument_id: "NVDA:US" instrument_type: "cfd" -Name: E.ON instrument_id: "EOAND-CHIX" instrument_type: "cfd" -Name: Citrix Systems instrument_id: "CTXS:US" instrument_type: "cfd" -Name: UK 100 instrument_id: "UK100" instrument_type: "cfd" -Name: BBVA instrument_id: "BBVAE-CHIX" instrument_type: "cfd" -Name: Philip Morris Int. instrument_id: "PM:US" instrument_type: "cfd" -Name: Consolidated Edison instrument_id: "ED:US" instrument_type: "cfd" -Name: Netflix instrument_id: "NFLX:US" instrument_type: "cfd" -Name: Allianz instrument_id: "ALVD-CHIX" instrument_type: "cfd" -Name: FR 40 instrument_id: "FRANCE40" instrument_type: "cfd" -Name: Schlumberger instrument_id: "SLB:US" instrument_type: "cfd" -Name: Platinum instrument_id: "XPTUSD" instrument_type: "cfd" -Name: Consumer Discretionary SPDR instrument_id: "XLY" instrument_type: "cfd" -Name: BHP Billiton instrument_id: "BLTL-CHIX" instrument_type: "cfd" -Name: Credit Suisse instrument_id: "CSGNZ-CHIX" instrument_type: "cfd" -Name: Activision Blizzard instrument_id: "ATVI:US" instrument_type: "cfd" -Name: Hasbro instrument_id: "HAS:US" instrument_type: "cfd" -Name: Bristol-Myers Squibb instrument_id: "BMY:US" instrument_type: "cfd" -Name: Equity Residential instrument_id: "EQR:US" instrument_type: "cfd" -Name: Suncor Energy Inc. instrument_id: "SU" instrument_type: "cfd" -Name: Cintas instrument_id: "CTAS:US" instrument_type: "cfd" -Name: Morgan Stanley instrument_id: "MORSTAN" instrument_type: "cfd" -Name: Devon Energy instrument_id: "DVN:US" instrument_type: "cfd" -Name: Dun & Bradstreet instrument_id: "DNB:US" instrument_type: "cfd" -Name: S&P Metals & Mining ETF instrument_id: "XME" instrument_type: "cfd" -Name: SP 35 instrument_id: "SPAIN35" instrument_type: "cfd" -Name: Boeing instrument_id: "BA:US" instrument_type: "cfd" -Name: Ferrari instrument_id: "FERRARI" instrument_type: "cfd" -Name: US Real Estate ETF instrument_id: "IYR" instrument_type: "cfd" -Name: Dover instrument_id: "DOV:US" instrument_type: "cfd" -Name: Honeywell instrument_id: "HON:US" instrument_type: "cfd" -Name: Marks & Spencer instrument_id: "MKSL-CHIX" instrument_type: "cfd" -Name: BMW instrument_id: "BMWD-CHIX" instrument_type: "cfd" -Name: HK 50 instrument_id: "HONGKONG50" instrument_type: "cfd" -Name: PayPal instrument_id: "PYPL:US" instrument_type: "cfd" -Name: Alcoa instrument_id: "AA:US" instrument_type: "cfd" -Name: CVS Health instrument_id: "CVS:US" instrument_type: "cfd" -Name: iShares Russell 2000 ETF instrument_id: "IWM" instrument_type: "cfd" -Name: Walgreens Boots All. instrument_id: "WBA:US" instrument_type: "cfd" -Name: ANSYS instrument_id: "ANSS" instrument_type: "cfd" -Name: Energy SPDR instrument_id: "XLE" instrument_type: "cfd" -Name: Wheat instrument_id: "W1" instrument_type: "cfd" -Name: Ecolab instrument_id: "ECL:US" instrument_type: "cfd" -Name: Starbucks instrument_id: "SBUX:US" instrument_type: "cfd" -Name: Heineken Holding NV instrument_id: "HEIOA-CHIX" instrument_type: "cfd" -Name: Quest Diagnostics instrument_id: "DGX:US" instrument_type: "cfd" -Name: easyJet instrument_id: "EZJL-CHIX" instrument_type: "cfd" -Name: JP 225 instrument_id: "JAPAN225" instrument_type: "cfd" -Name: AMD instrument_id: "AMD" instrument_type: "cfd" -Name: Colgate-Palmolive instrument_id: "CL:US" instrument_type: "cfd" -Name: Salesforce.com instrument_id: "CRM:US" instrument_type: "cfd" -Name: Technology SPDR instrument_id: "XLK" instrument_type: "cfd" -Name: Dropbox instrument_id: "DBX" instrument_type: "cfd" -Name: Fidelity National Information Services instrument_id: "FIS:US" instrument_type: "cfd" -Name: 3M Company instrument_id: "MMM:US" instrument_type: "cfd" -Name: Daimler instrument_id: "DAID-CHIX" instrument_type: "cfd" -Name: Baidu instrument_id: "BAIDU" instrument_type: "cfd" -Name: Wal-Mart Stores instrument_id: "WMT:US" instrument_type: "cfd" -Name: Exxon Mobil instrument_id: "XOM:US" instrument_type: "cfd" -Name: Raytheon instrument_id: "RTN:US" instrument_type: "cfd" -Name: eBay instrument_id: "EBAY:US" instrument_type: "cfd" -Name: Discovery – Class A instrument_id: "DISCA:US" instrument_type: "cfd" -Name: Oil Services ETF instrument_id: "OIH" instrument_type: "cfd" -Name: Microsoft instrument_id: "MSFT" instrument_type: "cfd" -Name: Chevron instrument_id: "CVX:US" instrument_type: "cfd" -Name: Lloyds Banking Group PLC instrument_id: "LLOYL-CHIX" instrument_type: "cfd" -Name: 20+ Year Treasury Bond ETF instrument_id: "TLT" instrument_type: "cfd" -Name: Adidas instrument_id: "ADSD-CHIX" instrument_type: "cfd" -Name: Comcast – Class A instrument_id: "CMCSA:US" instrument_type: "cfd" -Name: Danaher instrument_id: "DHR:US" instrument_type: "cfd" -Name: Align Technology instrument_id: "ALGN" instrument_type: "cfd" -Name: Volkswagen instrument_id: "VOW3D-CHIX" instrument_type: "cfd" -Name: Fiserv instrument_id: "FISV:US" instrument_type: "cfd" -Name: L'Oreal instrument_id: "ORP-CHIX" instrument_type: "cfd" -Name: D. R. Horton instrument_id: "DHI:US" instrument_type: "cfd" -Name: Deutsche Telekom instrument_id: "DTED-CHIX" instrument_type: "cfd" -Name: Gold Miners ETF instrument_id: "GDX" instrument_type: "cfd" -Name: Gold instrument_id: "XAUUSD" instrument_type: "cfd" -Name: Extra Space Storage instrument_id: "EXR:US" instrument_type: "cfd" -Name: Manchester United instrument_id: "MANU" instrument_type: "cfd" -Name: Banco Santander instrument_id: "SANE-CHIX" instrument_type: "cfd" -Name: Abbott Labs instrument_id: "ABT:US" instrument_type: "cfd" -Name: FMC Corporation instrument_id: "FMC:US" instrument_type: "cfd" -Name: Snapchat instrument_id: "SNAP" instrument_type: "cfd" -Name: ThyssenKrupp instrument_id: "TKAD-CHIX" instrument_type: "cfd" -Name: GER 30 instrument_id: "GERMANY30" instrument_type: "cfd" -Name: Fortune Brands Home & Security instrument_id: "FBHS:US" instrument_type: "cfd" -Name: Crude Oil Brent instrument_id: "UKOUSD" instrument_type: "cfd" -Name: Coca Cola instrument_id: "COKE" instrument_type: "cfd" -Name: Essex Property Trust instrument_id: "ESS:US" instrument_type: "cfd" -Name: Wm Morrison Supermarkets instrument_id: "MRWL-CHIX" instrument_type: "cfd" -Name: Gilead Sciences instrument_id: "GILD:US" instrument_type: "cfd" -Name: MasterCard instrument_id: "MA:US" instrument_type: "cfd" -Name: Nestlé instrument_id: "NESNZ-CHIX" instrument_type: "cfd" -Name: CenturyLink instrument_id: "CTL:US" instrument_type: "cfd" -Name: Deutsche Bank instrument_id: "DBKD-CHIX" instrument_type: "cfd" -Name: T-Mobile US, Inc. instrument_id: "TMUS" instrument_type: "cfd" -Name: McDonald's instrument_id: "MCDON" instrument_type: "cfd" -Name: Diamond Offshore Drilling instrument_id: "DO:US" instrument_type: "cfd" -Name: Intel instrument_id: "INTEL" instrument_type: "cfd" -Name: Fifth Third Bank instrument_id: "FITB:US" instrument_type: "cfd" -Name: Best Buy instrument_id: "BBY:US" instrument_type: "cfd" -Name: EQT Corporation instrument_id: "EQT:US" instrument_type: "cfd" -Name: BP PLC instrument_id: "BPL-CHIX" instrument_type: "cfd" -Name: E-Trade instrument_id: "ETFC:US" instrument_type: "cfd" -Name: Stryker instrument_id: "SYK:US" instrument_type: "cfd" -Name: Dow Jones Industrial Average ETF instrument_id: "DIA" instrument_type: "cfd" -Name: NEM ×20 instrument_id: "XEMUSD-L" instrument_type: "crypto" -Name: Ethereum instrument_id: "ETHUSD" instrument_type: "crypto" -Name: EOS ×20 instrument_id: "EOSUSD-L" instrument_type: "crypto" -Name: Qtum instrument_id: "QTMUSD" instrument_type: "crypto" -Name: EOS instrument_id: "EOSUSD" instrument_type: "crypto" -Name: Bitcoin Cash ×20 instrument_id: "BCHUSD-L" instrument_type: "crypto" -Name: Bitcoin instrument_id: "BTCUSD" instrument_type: "crypto" -Name: TRON instrument_id: "TRXUSD" instrument_type: "crypto" -Name: Ripple ×20 instrument_id: "XRPUSD-L" instrument_type: "crypto" -Name: Stellar ×20 instrument_id: "XLMUSD-L" instrument_type: "crypto" -Name: Ethereum ×50 instrument_id: "ETHUSD-L" instrument_type: "crypto" -Name: ZCash instrument_id: "ZECUSD" instrument_type: "crypto" -Name: Litecoin instrument_id: "LTCUSD" instrument_type: "crypto" -Name: Bitcoin Cash instrument_id: "BCHUSD" instrument_type: "crypto" -Name: Bitcoin ×100 instrument_id: "BTCUSD-L" instrument_type: "crypto" -Name: OmiseGo instrument_id: "OMGUSD" instrument_type: "crypto" -Name: TRON ×50 instrument_id: "TRXUSD-L" instrument_type: "crypto" -Name: Cardano ×20 instrument_id: "ADAUSD-L" instrument_type: "crypto" -Name: Dash instrument_id: "DSHUSD" instrument_type: "crypto" -Name: Litecoin ×20 instrument_id: "LTCUSD-L" instrument_type: "crypto" -Name: Ripple instrument_id: "XRPUSD" instrument_type: "crypto" \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/mkdocs.yml b/pocketoptionapi/v2/pocketoptionapi2/mkdocs.yml deleted file mode 100644 index 6e7d409..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/mkdocs.yml +++ /dev/null @@ -1,81 +0,0 @@ -site_name: pocketoptionapi document -#repo_name: 'THU-DBLAB/IRBRL' -#repo_url: 'https://github.com/THU-DBLAB/IRBRL' -#site_url: 'https://thu-dblab.github.io/IRBRL/' -edit_uri: "" # this code say do not view edit on page -extra: - # disqus: 'lu-yi-hsun' - search: - language: 'jp' - #-tokenizer: '[\a\-\.]+' - #social: - # - type: 'github' - # link: 'https://github.com/Lu-Yi-Hsun/' - # - type: 'facebook' - # link: 'https://www.facebook.com/profile.php?id=100001559307331' - #- type: 'twitter' - #link: 'https://twitter.com/squidfunk' - # - type: 'linkedin' - # link: 'https://linkedin.com/in/squidfunk' - social: - - icon: fontawesome/brands/github - link: https://github.com/Lu-Yi-Hsun/ - - icon: fontawesome/brands/facebook - link: https://www.facebook.com/profile.php?id=100001559307331 - - - -theme: - language: "en" - name: 'material' #readthedocs/readthedocs - palette: - primary: 'indigo' - accent: 'Blue Grey' - feature: - tabs: false - font: - text: 'Roboto' - code: 'Roboto Mono' - favicon: image/icon/favicon.ico - - -# Extensions -markdown_extensions: - - footnotes - - markdown.extensions.admonition -# - markdown.extensions.codehilite: - # guess_lang: false - # linenums: true - - markdown.extensions.def_list - - markdown.extensions.footnotes - - markdown.extensions.meta - - markdown.extensions.toc: - permalink: true - - pymdownx.superfences: - preserve_tabs: true - - pymdownx.arithmatex - - pymdownx.betterem: - smart_enable: all - - pymdownx.caret - - pymdownx.critic - - pymdownx.details - - - pymdownx.inlinehilite - - pymdownx.magiclink - - pymdownx.mark - - pymdownx.smartsymbols - - pymdownx.superfences - - pymdownx.tasklist: - custom_checkbox: true - - pymdownx.tilde - - pymdownx.emoji: - emoji_index: !!python/name:materialx.emoji.twemoji - emoji_generator: !!python/name:materialx.emoji.to_svg - -extra_javascript: - - 'javascripts/extra.js' - - 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js' - -nav: - - Get start: index.md - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/__init__.py deleted file mode 100644 index bbe6873..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -import logging - -def _prepare_logging(): - - logger = logging.getLogger(__name__) - #https://github.com/Lu-Yi-Hsun/pocketoptionapi_private/issues/1 - #try to fix this problem - #logger.setLevel(logging.DEBUG) - logger.addHandler(logging.NullHandler()) - - websocket_logger = logging.getLogger("websocket") - websocket_logger.setLevel(logging.DEBUG) - websocket_logger.addHandler(logging.NullHandler()) - -_prepare_logging() diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/api.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/api.py deleted file mode 100644 index 27ecd6e..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/api.py +++ /dev/null @@ -1,347 +0,0 @@ - -import time -import json -import logging -import threading -import requests -import ssl -import atexit -import tempfile -from des import DesKey -import base64 -from collections import deque -import sqlite3 -from pocketoptionapi.http.login import Login - -from pocketoptionapi.http.logout import Logout - -from pocketoptionapi.ws.client import WebsocketClient -from pocketoptionapi.ws.chanels.subscribe import * -from pocketoptionapi.ws.chanels.unsubscribe import * - -from pocketoptionapi.ws.chanels.auth import * -from pocketoptionapi.ws.chanels.ping_server import * -from pocketoptionapi.ws.chanels.buy import * -from pocketoptionapi.ws.chanels.candle import * -from pocketoptionapi.ws.chanels.get_balance import * -from pocketoptionapi.ws.chanels.get_asset_data import * - -import pocketoptionapi.global_value as global_value - -import collections -from collections import defaultdict - - - -# InsecureRequestWarning: Unverified HTTPS request is being made. -# Adding certificate verification is strongly advised. -# See: https://urllib3.readthedocs.org/en/latest/security.html -requests.packages.urllib3.disable_warnings() # pylint: disable=no-member - -def nested_dict(n, type): - if n == 1: - return defaultdict(type) - else: - return defaultdict(lambda: nested_dict(n-1, type)) - -class pocketoptionapi(object): - - def __init__(self, wss, header=None,proxies=None,set_ssid=None,auto_logout=True,_2FA_TOKEN=None): - - self.server_timestamp={} - self.real_time_canlde=nested_dict(2, dict) - self.real_time_quote={} - self.raw_e98={} - self.request_data={} - self.buy_data={} - self.check_win_end={} - self.check_win_refund_data={} - self.check_win_close_data={} - self.sub_uid={} - self.buy_info={} - self.header=header - self.wss_url = wss - self.websocket_client = None - self.session = requests.Session() - self.session.verify = False - self.session.trust_env = False - - self.getcandle_data={} - self.proxies = proxies - self._2FA_TOKEN=_2FA_TOKEN - # is used to determine if a buyOrder was set or failed. If - # it is None, there had been no buy order yet or just send. - # If it is false, the last failed - # If it is true, the last buy order was successful - self.buy_successful = None - self.object_id=None - self.set_ssid=set_ssid - self.auto_logout=auto_logout - self.realtime_price={} - self.updateAssets_data=None - - self.auto_tmp_session={} - self.async_name="" - - self.conn = sqlite3.connect(tempfile.gettempdir()+"/.pocketoptionapi") - - - self.c = self.conn.cursor() - self.c.execute('''create table if not exists session (email CHAR(100) PRIMARY KEY ,session CHAR(200));''') - self.conn.commit() - - #self._input_session("sdsss","twwt") - - - def _get_session(self,email): - cursor = self.c.execute("SELECT session from session Where email='"+email+"';") - data=cursor.fetchall() - if len(data)==0: - return None - else: - return data[0][0] - - - def _input_session(self,email,session): - try: - self.c.execute("INSERT INTO session (email,session) VALUES ('"+email+"','"+session+"' );") - except: - self.c.execute("UPDATE session set session = '"+session+"' where email='"+email+"' ") - self.conn.commit() - - def send_http_request(self, url, method, data=None, params=None, headers=None,cookies=None): # pylint: disable=too-many-arguments - - logger = logging.getLogger(__name__) - - logger.debug(method+": "+url+" headers: "+str(self.session.headers)+" cookies: "+str(self.session.cookies.get_dict())) - - - response = self.session.request(method=method, - url=url, - data=data, - params=params, - headers=headers, - proxies=self.proxies, - cookies=cookies) - logger.debug(response) - logger.debug(response.text) - logger.debug(response.headers) - logger.debug(response.cookies) - - - return response - - @property - def websocket(self): - - return self.websocket_client.wss - - def send_websocket_request(self,data,no_force_send=True): - if global_value.check_websocket_if_connect[self.object_id]==1: - logger = logging.getLogger(__name__) - data=data.replace("\\\\","\\") - data=data.replace("'","\"") - if no_force_send==False: - self.websocket.send(data) - else: - global_value.ssl_Mutex[self.object_id].acquire() - self.websocket.send(data) - global_value.ssl_Mutex[self.object_id].release() - logger.debug(data) - - def init_ansyc_data(self): - get=[{"t":2,"e":98,"uuid":"KDOJ6MMIERN26ZDIRV7","d":[22,20,21,26]}] - - self.send_websocket_request(get) - - def get_server_time(self,req_id:str=""): - get=[{"t":2,"e":90,"uuid":req_id}] - - self.send_websocket_request(get) - - - @property - def subscribe_realtime_candle(self): - - return changeSymbol(self) - - @property - def unsubscribe_realtime_candle(self): - return unsubfor(self) - - - @property - def logout(self): - - return Logout(self) - @property - def Auth_Mode(self): - return auth_mode(self) - @property - def login(self): - - return Login(self) - @property - def ping_to_server(self): - return Ping_To_Server(self) - @property - def TWO_FA(self): - return _2FA(self) - - @property - def Get_Balance(self): - - return get_balance(self) - @property - def Get_Asset_Data(self): - - return get_asset_data(self) - - @property - def ssid(self): - - return Ssid(self) - - - - @property - def getcandles(self): - - return loadHistoryPeriod(self) - - - - @property - def buy(self): - return buy_binary(self) - - @property - def sell_option(self): - return cancelOrder(self) - - - def set_session(self,cookies,headers): - - self.session.headers.update(headers) - - self.session.cookies.clear_session_cookies() - requests.utils.add_dict_to_cookiejar(self.session.cookies, cookies) - def init_global_value(self,object_id): - global_value.ssl_Mutex[object_id]=threading.Lock() - global_value.check_websocket_if_connect[object_id]=None - # try fix ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2361) - - #if false websocket can sent self.websocket.send(data) - #else can not sent self.websocket.send(data) - - if object_id not in global_value.SSID: - global_value.SSID[object_id]=self.set_ssid - - global_value.check_websocket_if_error[object_id]=False - global_value.websocket_error_reason[object_id]=None - #start account is demo - global_value.account_mode_isDemo[object_id]=1 - - global_value.balance_id[object_id]=0 - global_value.check_auth_finish[object_id]=False - global_value.balance[object_id]=nested_dict(2,dict) - global_value.req_mutex[object_id]=threading.Lock() - global_value.req_id[object_id]=1 - global_value.auth_send_count[object_id]=0 - global_value.real_balance[object_id]=None - global_value.practice_balance[object_id]=None - - - def del_init_global_value(self,object_id): - del global_value.check_websocket_if_connect[object_id] - del global_value.SSID[object_id] - del global_value.check_websocket_if_error[object_id] - del global_value.websocket_error_reason[object_id] - del global_value.balance_id[object_id] - del global_value.req_mutex[object_id] - del global_value.req_id[object_id] - del global_value.balance[object_id] - def start_websocket(self): - - self.websocket_client = WebsocketClient(self) - try: - self.del_init_global_value(self.object_id) - except: - pass - # update self.object_id - self.object_id=id(self.websocket_client.wss) - self.init_global_value(self.object_id) - - try: - import re - p = '(?:http.*://)?(?P[^:/ ]+).?(?P[0-9]*).*' - - m = re.search(p,self.proxies["http"]) - http_proxy_host=m.group('host') # 'www.abc.com' - http_proxy_port=m.group('port') # '123' - except: - http_proxy_host=None - http_proxy_port=None - - self.websocket_thread = threading.Thread(target=self.websocket.run_forever,kwargs={'sslopt': { - "check_hostname": False, "cert_reqs": ssl.CERT_NONE, "ca_certs": "cacert.pem"},"http_proxy_host":http_proxy_host,"http_proxy_port":http_proxy_port,"suppress_origin":True}) # for fix pyinstall error: cafile, capath and cadata cannot be all omitted - self.websocket_thread.daemon = True - self.websocket_thread.start() - - start_time=time.time() - while True: - - if global_value.check_websocket_if_error[self.object_id]: - return False,global_value.websocket_error_reason[self.object_id] - if global_value.check_websocket_if_connect[self.object_id] == 0 : - global_value.websocket_error_reason[self.object_id]="Websocket connection closed." - return False,global_value.websocket_error_reason[self.object_id] - elif global_value.check_websocket_if_connect[self.object_id] == 1: - return True,None - if time.time()-start_time>global_value.wait_connect_sec: - global_value.websocket_error_reason[self.object_id]="Connect Error" - return False,global_value.websocket_error_reason[self.object_id] - - - - pass - def get_ssid(self): - response=None - response = self.login(self.username, self.password,self._2FA_TOKEN) # - if "session" in response.cookies: - self._input_session(self.username,response.cookies["session"]) - return response - - def connect(self): - - try: - self.logout() - except: - pass - if self.auto_logout: - atexit.register(self.logout) - - check_websocket,websocket_reason=self.start_websocket() - if check_websocket==False: - return check_websocket,websocket_reason - #set ssis cookie - - - return True,None - - def close(self): - self.websocket.close() - self.websocket_thread.join() - - def websocket_alive(self): - return self.websocket_thread.is_alive() - - @property - def Get_User_Profile_Client(self): - return Get_user_profile_client(self) - @property - def Request_Leaderboard_Userinfo_Deals_Client(self): - return Request_leaderboard_userinfo_deals_client(self) - @property - def Get_Users_Availability(self): - return Get_users_availability(self) diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/constants.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/constants.py deleted file mode 100644 index 92022af..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Module for IQ Option API constants.""" -#~~~need to update~~~ -ACTIVES ={'EURUSD': 1, 'EURGBP': 2, 'GBPJPY': 3, 'EURJPY': 4, 'GBPUSD': 5, 'USDJPY': 6, 'AUDCAD': 7, 'NZDUSD': 8, 'USDRUB': 10, 'AMAZON': 31, 'APPLE': 32, 'BAIDU': 33, 'CISCO': 34, 'FACEBOOK': 35, 'GOOGLE': 36, 'INTEL': 37, 'MSFT': 38, 'YAHOO': 40, 'AIG': 41, 'CITI': 45, 'COKE': 46, 'GE': 48, 'GM': 49, 'GS': 50, 'JPM': 51, 'MCDON': 52, 'MORSTAN': 53, 'NIKE': 54, 'USDCHF': 72, 'XAUUSD': 74, 'XAGUSD': 75, 'EURUSD-OTC': 76, 'EURGBP-OTC': 77, 'USDCHF-OTC': 78, 'EURJPY-OTC': 79, 'NZDUSD-OTC': 80, 'GBPUSD-OTC': 81, 'GBPJPY-OTC': 84, 'USDJPY-OTC': 85, 'AUDCAD-OTC': 86, 'ALIBABA': 87, 'YANDEX': 95, 'AUDUSD': 99, 'USDCAD': 100, 'AUDJPY': 101, 'GBPCAD': 102, 'GBPCHF': 103, 'GBPAUD': 104, 'EURCAD': 105, 'CHFJPY': 106, 'CADCHF': 107, 'EURAUD': 108, 'TWITTER': 113, 'FERRARI': 133, 'TESLA': 167, 'USDNOK': 168, 'EURNZD': 212, 'USDSEK': 219, 'USDTRY': 220, 'MMM:US': 252, 'ABT:US': 253, 'ABBV:US': 254, 'ACN:US': 255, 'ATVI:US': 256, 'ADBE:US': 258, 'AAP:US': 259, 'AA:US': 269, 'AGN:US': 272, 'MO:US': 278, 'AMGN:US': 290, 'T:US': 303, 'ADSK:US': 304, 'BAC:US': 313, 'BBY:US': 320, 'BA:US': 324, 'BMY:US': 328, 'CAT:US': 338, 'CTL:US': 344, 'CVX:US': 349, 'CTAS:US': 356, 'CTXS:US': 360, 'CL:US': 365, 'CMCSA:US': 366, 'CXO:US': 369, 'COP:US': 370, 'ED:US': 371, 'COST:US': 374, 'CVS:US': 379, 'DHI:US': 380, 'DHR:US': 381, 'DRI:US': 382, 'DVA:US': 383, 'DAL:US': 386, 'DVN:US': 388, 'DO:US': 389, 'DLR:US': 390, 'DFS:US': 391, 'DISCA:US': 392, 'DOV:US': 397, 'DTE:US': 400, 'DNB:US': 403, 'ETFC:US': 404, 'EMN:US': 405, 'EBAY:US': 407, 'ECL:US': 408, 'EIX:US': 409, 'EMR:US': 413, 'ETR:US': 415, 'EQT:US': 417, 'EFX:US': 418, 'EQR:US': 420, 'ESS:US': 421, 'EXPD:US': 426, 'EXR:US': 428, 'XOM:US': 429, 'FFIV:US': 430, 'FAST:US': 432, 'FRT:US': 433, 'FDX:US': 434, 'FIS:US': 435, 'FITB:US': 436, 'FSLR:US': 437, 'FE:US': 438, 'FISV:US': 439, 'FLS:US': 441, 'FMC:US': 443, 'FBHS:US': 448, 'FCX:US': 450, 'FTR:US': 451, 'GILD:US': 460, 'HAS:US': 471, 'HON:US': 480, 'IBM:US': 491, 'KHC:US': 513, 'LMT:US': 528, 'MA:US': 542, 'MDT:US': 548, 'MU:US': 553, 'NFLX:US': 569, 'NEE:US': 575, 'NVDA:US': 586, 'PYPL:US': 597, 'PFE:US': 603, 'PM:US': 605, 'PG:US': 617, 'QCOM:US': 626, 'DGX:US': 628, 'RTN:US': 630, 'CRM:US': 645, 'SLB:US': 647, 'SBUX:US': 666, 'SYK:US': 670, 'DIS:US': 689, 'TWX:US': 692, 'VZ:US': 723, 'V:US': 726, 'WMT:US': 729, 'WBA:US': 730, 'WFC:US': 733, 'SNAP': 756, 'DUBAI': 757, 'TA25': 758, 'AMD': 760, 'ALGN': 761, 'ANSS': 762, 'DRE': 772, 'IDXX': 775, 'RMD': 781, 'SU': 783, 'TFX': 784, 'TMUS': 785, 'QQQ': 796, 'SPY': 808, 'BTCUSD': 816, 'XRPUSD': 817, 'ETHUSD': 818, 'LTCUSD': 819, 'DSHUSD': 821, 'BCHUSD': 824, 'OMGUSD': 825, 'ZECUSD': 826, 'ETCUSD': 829, 'BTCUSD-L': 830, 'ETHUSD-L': 831, 'LTCUSD-L': 834, 'BCHUSD-L': 836, 'BTGUSD': 837, 'QTMUSD': 845, 'XLMUSD': 847, 'TRXUSD': 858, 'EOSUSD': 864, 'USDINR': 865, 'USDPLN': 866, 'USDBRL': 867, 'USDZAR': 868, 'DBX': 889, 'SPOT': 891, 'USDSGD': 892, 'USDHKD': 893, 'LLOYL-CHIX': 894, 'VODL-CHIX': 895, 'BARCL-CHIX': 896, 'TSCOL-CHIX': 897, 'BPL-CHIX': 898, 'HSBAL-CHIX': 899, 'RBSL-CHIX': 900, 'BLTL-CHIX': 901, 'MRWL-CHIX': 902, 'STANL-CHIX': 903, 'RRL-CHIX': 904, 'MKSL-CHIX': 905, 'BATSL-CHIX': 906, 'ULVRL-CHIX': 908, 'EZJL-CHIX': 909, 'ADSD-CHIX': 910, 'ALVD-CHIX': 911, 'BAYND-CHIX': 912, 'BMWD-CHIX': 913, 'CBKD-CHIX': 914, 'COND-CHIX': 915, 'DAID-CHIX': 916, 'DBKD-CHIX': 917, 'DPWD-CHIX': 919, 'DTED-CHIX': 920, 'EOAND-CHIX': 921, 'MRKD-CHIX': 922, 'SIED-CHIX': 923, 'TKAD-CHIX': 924, 'VOW3D-CHIX': 925, 'ENELM-CHIX': 926, 'ENIM-CHIX': 927, 'FCAM-CHIX': 928, 'PIRCM-CHIX': 929, 'PSTM-CHIX': 930, 'TITM-CHIX': 931, 'CSGNZ-CHIX': 933, 'NESNZ-CHIX': 934, 'ROGZ-CHIX': 935, 'UBSGZ-CHIX': 936, 'SANE-CHIX': 937, 'BBVAE-CHIX': 938, 'TEFE-CHIX': 939, 'AIRP-CHIX': 940, 'HEIOA-CHIX': 941, 'ORP-CHIX': 942, 'AUDCHF': 943, 'AUDNZD': 944, 'CADJPY': 945, 'EURCHF': 946, 'GBPNZD': 947, 'NZDCAD': 948, 'NZDJPY': 949, 'EURNOK': 951, 'CHFSGD': 952, 'EURSGD': 955, 'USDMXN': 957, 'JUVEM': 958, 'ASRM': 959, 'MANU': 966, 'UKOUSD': 969, 'XPTUSD': 970, 'USOUSD': 971, 'W1': 977, 'AUDDKK': 983, 'AUDMXN': 985, 'AUDNOK': 986, 'AUDSEK': 988, 'AUDSGD': 989, 'AUDTRY': 990, 'CADMXN': 992, 'CADNOK': 993, 'CADPLN': 994, 'CADTRY': 995, 'CHFDKK': 996, 'CHFNOK': 998, 'CHFSEK': 1000, 'CHFTRY': 1001, 'DKKPLN': 1004, 'DKKSGD': 1005, 'EURDKK': 1007, 'EURMXN': 1008, 'EURTRY': 1010, 'EURZAR': 1011, 'GBPILS': 1013, 'GBPMXN': 1014, 'GBPNOK': 1015, 'GBPPLN': 1016, 'GBPSEK': 1017, 'GBPSGD': 1018, 'GBPTRY': 1019, 'NOKDKK': 1023, 'NOKJPY': 1024, 'NOKSEK': 1025, 'NZDDKK': 1026, 'NZDMXN': 1027, 'NZDNOK': 1028, 'NZDSEK': 1030, 'NZDSGD': 1031, 'NZDTRY': 1032, 'NZDZAR': 1033, 'PLNSEK': 1036, 'SEKDKK': 1037, 'SEKJPY': 1038, 'SGDJPY': 1041, 'USDDKK': 1045, 'NZDCHF': 1048, 'GBPHUF': 1049, 'USDCZK': 1050, 'USDHUF': 1051, 'CADSGD': 1054, 'EURCZK': 1056, 'EURHUF': 1057, 'USDTHB': 1062, 'IOTUSD-L': 1116, 'XLMUSD-L': 1117, 'NEOUSD-L': 1118, 'ADAUSD-L': 1119, 'XEMUSD-L': 1120, 'XRPUSD-L': 1122, 'EEM': 1203, 'FXI': 1204, 'IWM': 1205, 'GDX': 1206, 'XOP': 1209, 'XLK': 1210, 'XLE': 1211, 'XLU': 1212, 'IEMG': 1213, 'XLY': 1214, 'IYR': 1215, 'SQQQ': 1216, 'OIH': 1217, 'SMH': 1218, 'EWJ': 1219, 'XLB': 1221, 'DIA': 1222, 'TLT': 1223, 'SDS': 1224, 'EWW': 1225, 'XME': 1227, 'QID': 1229, 'AUS200': 1230, 'FRANCE40': 1231, 'GERMANY30': 1232, 'HONGKONG50': 1233, 'SPAIN35': 1234, 'US30': 1235, 'USNDAQ100': 1236, 'JAPAN225': 1237, 'USSPX500': 1239, 'UK100': 1241, 'TRXUSD-L': 1242, 'EOSUSD-L': 1244, 'BNBUSD-L': 1279, 'ACB': 1288, 'CGC': 1289, 'CRON': 1290, 'GWPH': 1291, 'MJ': 1292, 'TLRY': 1293, 'BUD': 1294, 'LYFT': 1313, 'PINS': 1315, 'ZM': 1316, 'UBER': 1334, 'MELI': 1335, 'BYND': 1336, 'BSVUSD-L': 1338, 'ONTUSD-L': 1339, 'ATOMUSD-L': 1340, 'WORK': 1343, 'FDJP': 1350, 'CAN': 1351, 'VIAC': 1352, 'TFC': 1353} - -""" - {'EURUSD': 1, 'EURGBP': 2, 'GBPJPY': 3, 'EURJPY': 4, 'GBPUSD': 5, 'USDJPY': 6, 'AUDCAD': 7, 'NZDUSD': 8, 'USDRUB': 10, 'AMAZON': 31, 'APPLE': 32, 'BAIDU': 33, 'CISCO': 34, 'FACEBOOK': 35, 'GOOGLE': 36, 'INTEL': 37, 'MSFT': 38, 'YAHOO': 40, 'AIG': 41, 'CITI': 45, 'COKE': 46, 'GE': 48, 'GM': 49, 'GS': 50, 'JPM': 51, 'MCDON': 52, 'MORSTAN': 53, 'NIKE': 54, 'USDCHF': 72, 'XAUUSD': 74, 'XAGUSD': 75, 'EURUSD-OTC': 76, 'EURGBP-OTC': 77, 'USDCHF-OTC': 78, 'EURJPY-OTC': 79, 'NZDUSD-OTC': 80, 'GBPUSD-OTC': 81, 'USDJPY-OTC': 85, 'AUDCAD-OTC': 86, 'ALIBABA': 87, 'YANDEX': 95, 'AUDUSD': 99, 'USDCAD': 100, 'AUDJPY': 101, 'GBPCAD': 102, 'GBPCHF': 103, 'GBPAUD': 104, 'EURCAD': 105, 'CHFJPY': 106, 'CADCHF': 107, 'EURAUD': 108, 'TWITTER': 113, 'FERRARI': 133, 'TESLA': 167, 'USDNOK': 168, 'EURNZD': 212, 'USDSEK': 219, 'USDTRY': 220, 'MMM:US': 252, 'ABT:US': 253, 'ABBV:US': 254, 'ACN:US': 255, 'ATVI:US': 256, 'ADBE:US': 258, 'AAP:US': 259, 'AA:US': 269, 'AGN:US': 272, 'MO:US': 278, 'AMGN:US': 290, 'T:US': 303, 'ADSK:US': 304, 'BAC:US': 313, 'BBY:US': 320, 'BA:US': 324, 'BMY:US': 328, 'CAT:US': 338, 'CTL:US': 344, 'CVX:US': 349, 'CTAS:US': 356, 'CTXS:US': 360, 'CL:US': 365, 'CMCSA:US': 366, 'CXO:US': 369, 'COP:US': 370, 'ED:US': 371, 'COST:US': 374, 'CVS:US': 379, 'DHI:US': 380, 'DHR:US': 381, 'DRI:US': 382, 'DVA:US': 383, 'DAL:US': 386, 'DVN:US': 388, 'DO:US': 389, 'DLR:US': 390, 'DFS:US': 391, 'DISCA:US': 392, 'DOV:US': 397, 'DTE:US': 400, 'DNB:US': 403, 'ETFC:US': 404, 'EMN:US': 405, 'EBAY:US': 407, 'ECL:US': 408, 'EIX:US': 409, 'EMR:US': 413, 'ETR:US': 415, 'EQT:US': 417, 'EFX:US': 418, 'EQR:US': 420, 'ESS:US': 421, 'EXPD:US': 426, 'EXR:US': 428, 'XOM:US': 429, 'FFIV:US': 430, 'FAST:US': 432, 'FRT:US': 433, 'FDX:US': 434, 'FIS:US': 435, 'FITB:US': 436, 'FSLR:US': 437, 'FE:US': 438, 'FISV:US': 439, 'FLS:US': 441, 'FMC:US': 443, 'FBHS:US': 448, 'FCX:US': 450, 'FTR:US': 451, 'GILD:US': 460, 'HAS:US': 471, 'HON:US': 480, 'IBM:US': 491, 'KHC:US': 513, 'LMT:US': 528, 'MA:US': 542, 'MDT:US': 548, 'MU:US': 553, 'NFLX:US': 569, 'NEE:US': 575, 'NVDA:US': 586, 'PYPL:US': 597, 'PFE:US': 603, 'PM:US': 605, 'PG:US': 617, 'QCOM:US': 626, 'DGX:US': 628, 'RTN:US': 630, 'CRM:US': 645, 'SLB:US': 647, 'SBUX:US': 666, 'SYK:US': 670, 'DIS:US': 689, 'TWX:US': 692, 'VZ:US': 723, 'V:US': 726, 'WMT:US': 729, 'WBA:US': 730, 'WFC:US': 733, 'SNAP': 756, 'DUBAI': 757, 'TA25': 758, 'AMD': 760, 'ALGN': 761, 'ANSS': 762, 'DRE': 772, 'IDXX': 775, 'RMD': 781, 'SU': 783, 'TFX': 784, 'TMUS': 785, 'QQQ': 796, 'SPY': 808, 'BTCUSD': 816, 'XRPUSD': 817, 'ETHUSD': 818, 'LTCUSD': 819, 'DSHUSD': 821, 'BCHUSD': 824, 'OMGUSD': 825, 'ZECUSD': 826, 'ETCUSD': 829, 'BTCUSD-L': 830, 'ETHUSD-L': 831, 'LTCUSD-L': 834, 'BCHUSD-L': 836, 'BTGUSD': 837, 'QTMUSD': 845, 'XLMUSD': 847, 'TRXUSD': 858, 'EOSUSD': 864, 'USDINR': 865, 'USDPLN': 866, 'USDBRL': 867, 'USDZAR': 868, 'DBX': 889, 'SPOT': 891, 'USDSGD': 892, 'USDHKD': 893, 'LLOYL-CHIX': 894, 'VODL-CHIX': 895, 'BARCL-CHIX': 896, 'TSCOL-CHIX': 897, 'BPL-CHIX': 898, 'HSBAL-CHIX': 899, 'RBSL-CHIX': 900, 'BLTL-CHIX': 901, 'MRWL-CHIX': 902, 'STANL-CHIX': 903, 'RRL-CHIX': 904, 'MKSL-CHIX': 905, 'BATSL-CHIX': 906, 'ULVRL-CHIX': 908, 'EZJL-CHIX': 909, 'ADSD-CHIX': 910, 'ALVD-CHIX': 911, 'BAYND-CHIX': 912, 'BMWD-CHIX': 913, 'CBKD-CHIX': 914, 'COND-CHIX': 915, 'DAID-CHIX': 916, 'DBKD-CHIX': 917, 'DPWD-CHIX': 919, 'DTED-CHIX': 920, 'EOAND-CHIX': 921, 'MRKD-CHIX': 922, 'SIED-CHIX': 923, 'TKAD-CHIX': 924, 'VOW3D-CHIX': 925, 'PIRCM-CHIX': 929, 'PSTM-CHIX': 930, 'TITM-CHIX': 931, 'CSGNZ-CHIX': 933, 'NESNZ-CHIX': 934, 'ROGZ-CHIX': 935, 'UBSGZ-CHIX': 936, 'SANE-CHIX': 937, 'BBVAE-CHIX': 938, 'TEFE-CHIX': 939, 'AIRP-CHIX': 940, 'HEIOA-CHIX': 941, 'ORP-CHIX': 942, 'AUDCHF': 943, 'AUDNZD': 944, 'CADJPY': 945, 'EURCHF': 946, 'GBPNZD': 947, 'NZDCAD': 948, 'NZDJPY': 949, 'EURNOK': 951, 'CHFSGD': 952, 'EURSGD': 955, 'USDMXN': 957, 'JUVEM': 958, 'ASRM': 959, 'MANU': 966, 'UKOUSD': 969, 'XPTUSD': 970, 'USOUSD': 971, 'W1': 977, 'AUDDKK': 983, 'AUDMXN': 985, 'AUDNOK': 986, 'AUDSEK': 988, 'AUDSGD': 989, 'AUDTRY': 990, 'CADMXN': 992, 'CADNOK': 993, 'CADPLN': 994, 'CADTRY': 995, 'CHFDKK': 996, 'CHFNOK': 998, 'CHFSEK': 1000, 'CHFTRY': 1001, 'DKKPLN': 1004, 'DKKSGD': 1005, 'EURDKK': 1007, 'EURMXN': 1008, 'EURTRY': 1010, 'EURZAR': 1011, 'GBPILS': 1013, 'GBPMXN': 1014, 'GBPNOK': 1015, 'GBPPLN': 1016, 'GBPSEK': 1017, 'GBPSGD': 1018, 'GBPTRY': 1019, 'NOKDKK': 1023, 'NOKJPY': 1024, 'NOKSEK': 1025, 'NZDDKK': 1026, 'NZDMXN': 1027, 'NZDNOK': 1028, 'NZDSEK': 1030, 'NZDSGD': 1031, 'NZDTRY': 1032, 'NZDZAR': 1033, 'PLNSEK': 1036, 'SEKDKK': 1037, 'SEKJPY': 1038, 'SGDJPY': 1041, 'USDDKK': 1045, 'NZDCHF': 1048, 'GBPHUF': 1049, 'USDCZK': 1050, 'USDHUF': 1051, 'CADSGD': 1054, 'EURCZK': 1056, 'EURHUF': 1057, 'USDTHB': 1062, 'IOTUSD-L': 1116, 'XLMUSD-L': 1117, 'NEOUSD-L': 1118, 'ADAUSD-L': 1119, 'XEMUSD-L': 1120, 'XRPUSD-L': 1122, 'EEM': 1203, 'FXI': 1204, 'IWM': 1205, 'GDX': 1206, 'XOP': 1209, 'XLK': 1210, 'XLE': 1211, 'XLU': 1212, 'IEMG': 1213, 'XLY': 1214, 'IYR': 1215, 'SQQQ': 1216, 'OIH': 1217, 'SMH': 1218, 'EWJ': 1219, 'XLB': 1221, 'DIA': 1222, 'TLT': 1223, 'SDS': 1224, 'EWW': 1225, 'XME': 1227, 'QID': 1229, 'AUS200': 1230, 'FRANCE40': 1231, 'GERMANY30': 1232, 'HONGKONG50': 1233, 'SPAIN35': 1234, 'US30': 1235, 'USNDAQ100': 1236, 'JAPAN225': 1237, 'USSPX500': 1239, 'UK100': 1241, 'TRXUSD-L': 1242, 'EOSUSD-L': 1244, 'BNBUSD-L': 1279, 'ACB': 1288, 'CGC': 1289, 'CRON': 1290, 'GWPH': 1291, 'MJ': 1292, 'TLRY': 1293, 'BUD': 1294, 'LYFT': 1313, 'PINS': 1315, 'ZM': 1316, 'UBER': 1334, 'MELI': 1335, 'BYND': 1336, 'BSVUSD-L': 1338, 'ONTUSD-L': 1339, 'ATOMUSD-L': 1340, 'WORK': 1343, 'FDJP': 1350, 'CAN': 1351, 'VIAC': 1352, 'TFC': 1353} -""" \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/country_id.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/country_id.py deleted file mode 100644 index 60bc5e4..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/country_id.py +++ /dev/null @@ -1,190 +0,0 @@ -ID = {"Worldwide":0, - "AF": 1, - "AL": 2, - "DZ": 3, - "AD": 5, - "AO": 6, - "AI": 7, - "AG": 9, - "AR": 10, - "AM": 11, - "AW": 12, - "AT": 14, - "AZ": 15, - "BS": 16, - "BH": 17, - "BD": 18, - "BB": 19, - "BY": 20, - "BZ": 22, - "BJ": 23, - "BM": 24, - "BO": 26, - "BA": 27, - "BW": 28, - "BV": 29, - "BR": 30, - "BN": 31, - "BG": 32, - "BF": 33, - "BI": 34, - "KH": 35, - "CM": 36, - "CV": 38, - "KY": 39, - "TD": 41, - "CL": 42, - "CN": 43, - "CC": 45, - "CO": 46, - "KM": 47, - "CG": 48, - "CK": 49, - "CR": 50, - "CI": 51, - "HR": 52, - "CU": 53, - "CY": 54, - "CZ": 55, - "DK": 56, - "DJ": 57, - "DM": 58, - "DO": 59, - "TL": 60, - "EC": 61, - "EG": 62, - "SV": 63, - "EE": 66, - "ET": 67, - "FO": 69, - "FJ": 70, - "FI": 71, - "FR": 72, - "GF": 73, - "PF": 74, - "GA": 75, - "GM": 76, - "GE": 77, - "DE": 78, - "GH": 79, - "GR": 81, - "GD": 83, - "GP": 84, - "GT": 86, - "GN": 87, - "GY": 88, - "HT": 89, - "HN": 90, - "HK": 91, - "HU": 92, - "IS": 93, - "ID": 94, - "IQ": 95, - "IE": 96, - "IT": 97, - "JM": 98, - "JO": 100, - "KZ": 101, - "KE": 102, - "KI": 103, - "KW": 104, - "KG": 105, - "LA": 106, - "LV": 107, - "LB": 108, - "LS": 109, - "LR": 110, - "LY": 111, - "LT": 113, - "LU": 114, - "MO": 115, - "MK": 116, - "MG": 117, - "MW": 118, - "MY": 119, - "MV": 120, - "ML": 121, - "MT": 122, - "MQ": 124, - "MR": 125, - "MU": 126, - "MX": 128, - "FM": 129, - "MD": 130, - "MC": 131, - "MN": 132, - "MA": 134, - "MZ": 135, - "MM": 136, - "NA": 137, - "NP": 139, - "NL": 140, - "AN": 141, - "NC": 142, - "NZ": 143, - "NI": 144, - "NE": 145, - "NG": 146, - "NO": 149, - "OM": 150, - "PK": 151, - "PW": 152, - "PA": 153, - "PG": 154, - "PY": 155, - "PE": 156, - "PH": 157, - "PL": 159, - "PT": 160, - "QA": 162, - "RE": 163, - "RO": 164, - "RW": 166, - "KN": 167, - "LC": 168, - "SA": 171, - "SN": 172, - "SC": 173, - "SG": 175, - "SK": 176, - "SI": 177, - "SO": 179, - "ZA": 180, - "KR": 181, - "ES": 182, - "LK": 183, - "SH": 184, - "SR": 186, - "SZ": 187, - "SE": 188, - "CH": 189, - "TW": 191, - "TJ": 192, - "TZ": 193, - "TH": 194, - "TG": 195, - "TT": 198, - "TN": 199, - "TR": 200, - "TM": 201, - "UG": 203, - "UA": 204, - "AE": 205, - "GB": 206, - "UY": 207, - "UZ": 208, - "VE": 211, - "VN": 212, - "VG": 213, - "YE": 216, - "ZM": 218, - "ZW": 219, - "RS": 220, - "ME": 221, - "IN": 225, - "TC": 234, - "CD": 235, - "GG": 236, - "IM": 237, - "JE": 239, - "CW": 246, } diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/expiration.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/expiration.py deleted file mode 100644 index 8a5dae6..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/expiration.py +++ /dev/null @@ -1,80 +0,0 @@ -# python -import time -from datetime import datetime, timedelta - -# https://docs.python.org/3/library/datetime.html -# If optional argument tz is None or not specified, the timestamp is converted to the platform's local date and time, and the returned datetime object is naive. -# time.mktime(dt.timetuple()) - - -def date_to_timestamp(dt): - # local timezone to timestamp support python2 pytohn3 - return time.mktime(dt.timetuple()) - - -def get_expiration_time(timestamp, duration): - # - now_date = datetime.fromtimestamp(timestamp) - exp_date = now_date.replace(second=0, microsecond=0) - if (int(date_to_timestamp(exp_date+timedelta(minutes=1)))-timestamp) > 30: - exp_date = exp_date+timedelta(minutes=1) - - else: - exp_date = exp_date+timedelta(minutes=2) - exp = [] - for _ in range(5): - exp.append(date_to_timestamp(exp_date)) - exp_date = exp_date+timedelta(minutes=1) - - idx = 50 - index = 0 - now_date = datetime.fromtimestamp(timestamp) - exp_date = now_date.replace(second=0, microsecond=0) - while index < idx: - if int(exp_date.strftime("%M")) % 15 == 0 and (int(date_to_timestamp(exp_date))-int(timestamp)) > 60*5: - exp.append(date_to_timestamp(exp_date)) - index = index+1 - exp_date = exp_date+timedelta(minutes=1) - - remaning = [] - - for t in exp: - remaning.append(int(t)-int(time.time())) - - close = [abs(x-60*duration) for x in remaning] - - return int(exp[close.index(min(close))]), int(close.index(min(close))) - - -def get_remaning_time(timestamp): - now_date = datetime.fromtimestamp(timestamp) - exp_date = now_date.replace(second=0, microsecond=0) - if (int(date_to_timestamp(exp_date+timedelta(minutes=1)))-timestamp) > 30: - exp_date = exp_date+timedelta(minutes=1) - - else: - exp_date = exp_date+timedelta(minutes=2) - exp = [] - for _ in range(5): - exp.append(date_to_timestamp(exp_date)) - exp_date = exp_date+timedelta(minutes=1) - idx = 11 - index = 0 - now_date = datetime.fromtimestamp(timestamp) - exp_date = now_date.replace(second=0, microsecond=0) - while index < idx: - if int(exp_date.strftime("%M")) % 15 == 0 and (int(date_to_timestamp(exp_date))-int(timestamp)) > 60*5: - exp.append(date_to_timestamp(exp_date)) - index = index+1 - exp_date = exp_date+timedelta(minutes=1) - - remaning = [] - - for idx, t in enumerate(exp): - if idx >= 5: - dr = 15*(idx-4) - else: - dr = idx+1 - remaning.append((dr, int(t)-int(time.time()))) - - return remaning diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/global_value.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/global_value.py deleted file mode 100644 index e7d5a8d..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/global_value.py +++ /dev/null @@ -1,58 +0,0 @@ - -check_websocket_if_connect={}#None -# try fix ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2361) -ssl_Mutex={} - -# - -#if false websocket can sent self.websocket.send(data) -#else can not sent self.websocket.send(data) - - - -SSID={}#None - -check_websocket_if_error={}#False -websocket_error_reason={}#None - -balance_id={}#None -account_mode_isDemo={}#practice is 1, real is 0 (int) -check_auth_finish={} -balance={} - -real_balance={} -practice_balance={} - -client_callback=None -auth_send_count={} -req_mutex={}#True or object_id -req_id={} -wait_connect_sec=2 -def get_req_id(object_id): - req_mutex[object_id].acquire() - get_req_id=req_id[object_id] - req_id[object_id]=req_id[object_id]+1 - req_mutex[object_id].release() - - return str(get_req_id) - -websocket_url=[ - - "wss://api-hk.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-fr.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-sg2.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-in.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-in2.po.market/socket.io/?EIO=4&transport=websocket", - - "wss://api-msk.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-fin.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-c.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-sc.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-asia2.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-us2.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-us3.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-us4.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-latina2.po.market/socket.io/?EIO=4&transport=websocket", - "wss://api-asia.po.market/socket.io/?EIO=4&transport=websocket" - ] \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/__init__.py deleted file mode 100644 index 0519ecb..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/__init__.py +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/login.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/login.py deleted file mode 100644 index f9a88cf..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/login.py +++ /dev/null @@ -1,22 +0,0 @@ -from pocketoptionapi.http.resource import Resource -import json -class Login(Resource): - - def _post(self, data=None, headers=None): - headers={} - - headers = { - 'X-App-Name': 'app_ios', - 'X-Request-Type': 'Api-Request', - 'X-Request-Project': 'bo', - 'Cookie': 'guest_id=1000290216601684147969408361021491595862009238107429568028672977' - } - - - return self.api.send_http_request(method="POST", url="https://api.olymptrade.com/v3/user/login-by-password",data=data, headers=headers) - def __call__(self, username, password,token=None): - - - data= "{\"data\":{\"email\":\""+username+"\",\"password\":\""+password+"\"}}" - return self._post(data=str(data)) - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/logout.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/logout.py deleted file mode 100644 index 3bbb405..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/logout.py +++ /dev/null @@ -1,22 +0,0 @@ -"""Module for IQ Option http login resource.""" - -from pocketoptionapi.http.resource import Resource - - -class Logout(Resource): - """Class for IQ option login resource.""" - # pylint: disable=too-few-public-methods - - url = "" - - def _post(self, data=None, headers=None): - """Send get request for IQ Option API login http resource. - - :returns: The instance of :class:`requests.Response`. - """ - #return self.api.send_http_request(method="POST", url="https://auth.iqoption.com/api/v1.0/logout",data=data, headers=headers) - pass - def __call__(self): - - return self._post() - diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/resource.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/resource.py deleted file mode 100644 index e8adc5b..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/http/resource.py +++ /dev/null @@ -1,10 +0,0 @@ - -class Resource(object): - - def __init__(self, api): - - self.api = api - - def send_http_request(self, method, data=None, params=None, headers=None): - - return self.api.send_http_request(self, method, data=data, params=params, headers=headers) diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py deleted file mode 100644 index 607a043..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/stable_api.py +++ /dev/null @@ -1,294 +0,0 @@ -# dev @vigo_walker, github: https://github.com/theshadow76 - -# python -from pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.api import pocketoptionapi -import pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.constants as OP_code -import pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.country_id as Country -import threading -import time -import logging -import operator -import pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.global_value as global_value -from pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.expiration import get_expiration_time, get_remaning_time -from datetime import datetime, timedelta,timezone -from collections import defaultdict -from collections import deque -import collections -import json -import threading -def nested_dict(n, type): - if n == 1: - return defaultdict(type) - else: - return defaultdict(lambda: nested_dict(n-1, type)) -def ping_server(self): - - t = threading.currentThread() - while getattr(t, "do_run", True): - if global_value.check_websocket_if_connect[self.api.object_id]==0: - break - time.sleep(10) - self.ping_server_go() - - - - -class PocketOption: - __version__ = "2.2" - - def __init__(self,set_ssid,proxies=None,auto_logout=True,websocket_url=None,wait_connect_sec=2): - - self.SESSION_HEADER={"Origin": "https://pocketoption.com","Sec-WebSocket-Version":"13","Connection":"Upgrade","Accept-Encoding:":"gzip, deflate, br","Sec-WebSocket-Extensions":"permessage-deflate; client_max_window_bits","User-Agent":r"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"} - self.SESSION_COOKIE={} - self.proxies=proxies - self.set_ssid=set_ssid - self.auto_logout=auto_logout - self._2FA_TOKEN=None - self.websocket_url=websocket_url - global_value.wait_connect_sec=wait_connect_sec - # -------------------------------------------------------------------------- - def logout(self): - self.api.logout() - def ping_server_go(self): - self.api.ping_to_server() - - def set_call_back_for_client(self,function): - global_value.client_callback=function - def set_session(self,header,cookie): - self.SESSION_HEADER=header - self.SESSION_COOKIE=cookie - - def get_ssid(self): - return global_value.SSID[self.api.object_id] - - def setting_2FA_TOKEN(self,code): - self._2FA_TOKEN=code - def TWO_FA(self, token,method=None,code=None): - r=self.api.TWO_FA(token,method,code) - return json.loads(r.text) - def close(self): - - self._thread_ping_server.do_run = False - def connect(self): - - try: - self.api.close() - except: - pass - #logging.error('**warning** self.api.close() fail') - - #id-iqoption.com some country only can using this url - #Iqoption.com - try: - self.set_ssid=global_value.SSID[self.api.object_id] - except: - pass - - - if self.websocket_url==None: - for url in global_value.websocket_url: - self.api = pocketoptionapi(url,header=self.SESSION_HEADER,proxies=self.proxies,set_ssid=self.set_ssid,auto_logout=self.auto_logout,_2FA_TOKEN=self._2FA_TOKEN) - c,m=self.api.connect() - if c: - break - elif m=="""42["NotAuthorized"]""": - return False,m - else: - self.api = pocketoptionapi(self.websocket_url,header=self.SESSION_HEADER,proxies=self.proxies,set_ssid=self.set_ssid,auto_logout=self.auto_logout,_2FA_TOKEN=self._2FA_TOKEN) - c,m=self.api.connect() - - if m=="""42["NotAuthorized"]""": - return False,m - - if c: - self.change_balance("PRACTICE") - self._thread_ping_server=threading.Thread(target = ping_server, args = (self,)) - self._thread_ping_server.start() - return c,m - - - def check_connect(self): - # True/False - - if global_value.check_websocket_if_connect[self.api.object_id] == 0: - return False - else: - return True - # wait for timestamp getting - -# _________________________UPDATE ACTIVES OPCODE_____________________ - - def _init_get_raw_balance(self): - #[{"d":[{"value":3686.24}],"e":52},{"d":[{"value":20.10,"account_id":1250470807}],"e":50}] - - req_id="balance" - self.api.raw_e98[req_id]=None - self.api.Get_Balance(req_id) - - while self.api.raw_e98[req_id]==None: - pass - _tmp=self.api.raw_e98[req_id] - del self.api.raw_e98[req_id] - for d in _tmp: - try: - if "account_id" in d["d"][0]: - global_value.balance[self.api.object_id]["REAL"]["value"]=d["d"][0]["value"] - global_value.balance[self.api.object_id]["REAL"]["account_id"]=d["d"][0]["account_id"] - elif "value" in d["d"][0]: - global_value.balance[self.api.object_id]["PRACTICE"]["value"]=d["d"][0]["value"] - global_value.balance[self.api.object_id]["PRACTICE"]["account_id"]=0 - except: - pass - - - def get_balance(self): - if global_value.account_mode_isDemo[self.api.object_id]==0: - while global_value.real_balance[self.api.object_id]==None: - pass - return global_value.real_balance[self.api.object_id] - elif global_value.account_mode_isDemo[self.api.object_id]==1: - while global_value.practice_balance[self.api.object_id]==None: - pass - return global_value.practice_balance[self.api.object_id] - - def get_asset_data(self): - req_id=global_value.get_req_id(self.api.object_id) - - self.api.raw_e98["e_70"]=None - self.api.Get_Asset_Data(req_id) - while self.api.raw_e98["e_70"]==None: - pass - _tmp=self.api.raw_e98["e_70"] - del self.api.raw_e98["e_70"] - return _tmp - def change_balance(self, Balance_MODE): - - - if Balance_MODE=="REAL": - global_value.check_auth_finish[self.api.object_id]=False - while global_value.check_auth_finish[self.api.object_id]==False: - self.api.Auth_Mode(Balance_MODE) - time.sleep(0.5) - global_value.account_mode_isDemo[self.api.object_id]=0 - elif Balance_MODE=="PRACTICE": - global_value.check_auth_finish[self.api.object_id]=False - while global_value.check_auth_finish[self.api.object_id]==False: - self.api.Auth_Mode(Balance_MODE) - time.sleep(0.5) - global_value.account_mode_isDemo[self.api.object_id]=1 - else: - logging.error('**warning** change_balance() need input "REAL"/"PRACTICE" ') - - - -# ________________________________________________________________________ -# _______________________ CANDLE _____________________________ -# ________________________self.api.getcandles() wss________________________ - - def get_candle(self, Asset, _from, timeframe,request_id=""): - self.api.getcandles(Asset, _from, timeframe,request_id) - pass -####################################################### -# ______________________________________________________ -# _____________________REAL TIME CANDLE_________________ -# ______________________________________________________ -####################################################### - - def get_payment(self): - raw_asset=self.get_raw_asset() - ans=nested_dict(2,dict) - for i in raw_asset: - asset_name=i[1] - ans[asset_name]["payment"]=i[5] - ans[asset_name]["open"]=i[14] - - return ans - - def get_raw_asset(self): - while self.api.updateAssets_data==None: - pass - return self.api.updateAssets_data - def get_all_asset_name(self): - all_asset=self.get_raw_asset() - ans=[] - for i in all_asset: - ans.append(i[1]) - return ans - - def check_asset_open(self,asset): - all_asset=self.get_raw_asset() - for i in all_asset: - if i[1]==asset: - if True in i: - return True - else: - return False - - def start_candles_stream(self,asset,size): - #the list of the size - self.api.subscribe_realtime_candle(asset,size) - - def stop_candles_stream(self, asset): - self.api.unsubscribe_realtime_candle(asset) - - def get_realtime_candles(self, asset): - while True: - if asset in self.api.realtime_price: - if len(self.api.realtime_price[asset])>0: - return self.api.realtime_price[asset] - - - def buy(self,asset,amount,dir,duration): - # the min duration is 30 - #if duration<30: - # duration=30 - req_id=global_value.get_req_id(self.api.object_id) - self.api.request_data[req_id]=None - self.api.buy(asset,amount,dir,duration,req_id) - while self.api.request_data[req_id]==None: - pass - _tmp=self.api.request_data[req_id] - del self.api.request_data[req_id] - if "id" in _tmp: - self.api.buy_info[_tmp["id"]]=_tmp - return _tmp - - def sell_option(self,id): - # the min duration is 30 - self.api.sell_option(id) - - def get_candle(self,asset,time,offset,period): - req_id=global_value.get_req_id(self.api.object_id) - self.api.getcandle_data[req_id]=None - self.api.getcandles(asset,time,offset,period,req_id) - while self.api.getcandle_data[req_id]==None: - pass - return self.api.getcandle_data[req_id] - - - - def check_win(self,ticket,polling=1): - while True: - if ticket in self.api.check_win_refund_data: - return self.api.check_win_refund_data[ticket]["amount"]-self.api.buy_info[ticket] - elif ticket in self.api.check_win_close_data: - - - if self.api.check_win_close_data[ticket]["closePrice"]!=0: - return self.api.check_win_close_data[ticket]["profit"] - - time.sleep(polling) - - - - - def get_server_time(self): - req_id=global_value.get_req_id(self.api.object_id) - self.api.server_timestamp[req_id]=None - self.api.get_server_time(req_id) - while self.api.server_timestamp[req_id]==None: - pass - _tmp=self.api.server_timestamp[req_id] - del self.api.server_timestamp[req_id] - return _tmp - diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/__init__.py deleted file mode 100644 index 6c0340c..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Module for IQ Option API websocket.""" diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/__init__.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/__init__.py deleted file mode 100644 index d3d1307..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Module for IQ Option API websocket chanels.""" diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/auth.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/auth.py deleted file mode 100644 index c950bce..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/auth.py +++ /dev/null @@ -1,13 +0,0 @@ -from pocketoptionapi.ws.chanels.base import Base -import pocketoptionapi.constants as OP_code -import pocketoptionapi.global_value as global_value -import json -class auth_mode(Base): - def __call__(self,account_mode): - session=global_value.SSID[self.api.object_id] - if account_mode=="REAL": - global_value.SSID[self.api.object_id]=session.replace("\"isDemo\":1","\"isDemo\":0") - elif account_mode=="PRACTICE": - global_value.SSID[self.api.object_id]=session.replace("\"isDemo\":0","\"isDemo\":1") - self.send_websocket_request(global_value.SSID[self.api.object_id]) - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/base.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/base.py deleted file mode 100644 index 2eddc3f..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/base.py +++ /dev/null @@ -1,19 +0,0 @@ -"""Module for base IQ Option base websocket chanel.""" - - -class Base(object): - """Class for base IQ Option websocket chanel.""" - # pylint: disable=too-few-public-methods - - def __init__(self, api): - """ - :param api: The instance of :class:`pocketoptionapi - `. - """ - self.api = api - - def send_websocket_request(self, msg,no_force_send=True): - """Send request to IQ Option server websocket. - :returns: The instance of :class:`requests.Response`. - """ - return self.api.send_websocket_request(msg,no_force_send) diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/buy.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/buy.py deleted file mode 100644 index f93d951..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/buy.py +++ /dev/null @@ -1,29 +0,0 @@ - - -from pocketoptionapi.ws.chanels.base import Base -import pocketoptionapi.constants as OP_code -import pocketoptionapi.global_value as global_value -import json -class buy_binary(Base): - def __call__(self,asset,amount,dir,duration,req_id): - session=global_value.SSID[self.api.object_id] - data=[] - data.append("openOrder") - openorder={} - openorder["session"]=json.loads(session[2:])[1]["session"].replace("\"","\\\"") - openorder["asset"]=asset - openorder["amount"]=amount - openorder["action"]=dir - openorder["requestId"]=req_id - openorder["isDemo"]=global_value.account_mode_isDemo[self.api.object_id] - openorder["time"]=duration#sec - openorder["optionType"]=100 - data.append(openorder) - - self.send_websocket_request("42"+str(data)) - -class cancelOrder(Base): - def __call__(self,ticket): - data=["cancelOrder",{"ticket":str(ticket)}] - self.send_websocket_request("42"+str(data)) - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/candle.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/candle.py deleted file mode 100644 index 66e414f..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/candle.py +++ /dev/null @@ -1,42 +0,0 @@ - - -""" -42["loadHistoryPeriod",{"asset":"USDCAD","index":162513874160,"time":1625138122.445,"offset":1000,"period":5}] -""" - - -import collections -from pocketoptionapi.ws.chanels.base import Base -import pocketoptionapi.constants as OP_code -import pocketoptionapi.global_value as global_value -import json - - -class loadHistoryPeriod(Base): - def __call__(self,asset,time,offset,period,index): - data=["loadHistoryPeriod",{"asset":asset,"index":index,"time":time,"offset":offset,"period":period}] - self.send_websocket_request("42"+str(data)) - - -""" -42["changeSymbol",{"asset":"USDCAD","prevAsset":"USDCAD","reason":2,"otherData":{},"period":5}] -""" - - -class changeSymbol(Base): - def __call__(self,asset,size): - self.api.realtime_price[asset]=collections.deque([],size) - data=["changeSymbol",{"asset":asset,"prevAsset":asset,"reason":2,"otherData":{},"period":0}] - self.send_websocket_request("42"+str(data)) - - -""" -42["unsubfor","EURRUB_otc"] -""" - -class unsubfor(Base): - def __call__(self,asset): - data=["subfor",asset] - self.send_websocket_request("42"+str(data)) - - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_asset_data.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_asset_data.py deleted file mode 100644 index 686e55e..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_asset_data.py +++ /dev/null @@ -1,7 +0,0 @@ -from pocketoptionapi.ws.chanels.base import Base -import datetime -import pocketoptionapi.constants as OP_code -class get_asset_data(Base): - def __call__(self,req_id): - data=[{"t":2,"e":98,"uuid":req_id,"d":[70,73,72]}] - self.send_websocket_request(data) \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_balance.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_balance.py deleted file mode 100644 index a9b6999..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/get_balance.py +++ /dev/null @@ -1,7 +0,0 @@ -from pocketoptionapi.ws.chanels.base import Base -import datetime -import pocketoptionapi.constants as OP_code -class get_balance(Base): - def __call__(self,req_id): - data=[{"t":2,"e":98,"uuid":req_id,"d":[52,50]}] - self.send_websocket_request(data) \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/ping_server.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/ping_server.py deleted file mode 100644 index 9026079..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/ping_server.py +++ /dev/null @@ -1,9 +0,0 @@ -from pocketoptionapi.ws.chanels.base import Base -import pocketoptionapi.constants as OP_code -import pocketoptionapi.global_value as global_value -import json -class Ping_To_Server(Base): - def __call__(self): - self.send_websocket_request("""42["ps"]""") - - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/subscribe.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/subscribe.py deleted file mode 100644 index fb4f8ed..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/subscribe.py +++ /dev/null @@ -1,11 +0,0 @@ -from pocketoptionapi.ws.chanels.base import Base -import datetime -import pocketoptionapi.constants as OP_code -class Subscribe(Base): - def __call__(self,asset,timeframe,req_id): - #{"name":"subscribeMessage","msg":{"name":"candle-generated","params":{"routingFilters":{"active_id":1,"size":1}}}} - #data="""[{"t":2,"e":4,"uuid":"gg","d":[{"p":"EURUSD","tf":60}]}]""" - - data=[{"t":2,"e":4,"uuid":req_id,"d":[{"p":asset,"tf":timeframe}]}] - self.send_websocket_request(data) - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/unsubscribe.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/unsubscribe.py deleted file mode 100644 index ff51918..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/chanels/unsubscribe.py +++ /dev/null @@ -1,9 +0,0 @@ -from pocketoptionapi.ws.chanels.base import Base -import datetime -import pocketoptionapi.constants as OP_code -class Unsubscribe(Base): - def __call__(self,sub_uid,req_id=""): - data=[{"t":2,"e":5,"uuid":req_id,"d":[{"sub_uid":sub_uid}]}] - - self.send_websocket_request(data) - \ No newline at end of file diff --git a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/client.py b/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/client.py deleted file mode 100644 index 494e9a8..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/pocketoptionapi/ws/client.py +++ /dev/null @@ -1,140 +0,0 @@ -import json -import logging -import websocket -import pocketoptionapi.constants as OP_code -import pocketoptionapi.global_value as global_value -import collections - -import time -class WebsocketClient(object): - - def __init__(self, api): - - self.api = api - - self.wss = websocket.WebSocketApp( - self.api.wss_url, on_message=self.on_message, - on_error=self.on_error, on_close=self.on_close, - on_open=self.on_open,header=self.api.header) - - def on_message(self, wss,raw_message): - - global_value.ssl_Mutex[self.api.object_id].acquire() - logger = logging.getLogger(__name__) - logger.debug(raw_message) - #raw_message = json.loads(str(raw_message)) - if global_value.client_callback != None: - global_value.client_callback(raw_message) - #特殊處理 - if raw_message=="""451-["updateAssets",{"_placeholder":true,"num":0}]""": - - self.api.async_name=raw_message - - elif raw_message=="""451-["updateStream",{"_placeholder":true,"num":0}]""": - self.api.async_name=raw_message - elif raw_message=="""451-["successupdateBalance",{"_placeholder":true,"num":0}]""": - self.api.async_name=raw_message - elif raw_message=="2": - self.api.send_websocket_request("""3""",False) - elif self.api.async_name=="""451-["updateAssets",{"_placeholder":true,"num":0}]""": - - self.api.async_name="" - - ok_json=json.loads(raw_message.decode("utf-8")) - self.api.updateAssets_data=ok_json - elif self.api.async_name=="""451-["successupdateBalance",{"_placeholder":true,"num":0}]""": - - self.api.async_name="" - - ok_json=json.loads(raw_message.decode("utf-8")) - - if ok_json["isDemo"]==0: - global_value.real_balance[id(wss)]=ok_json["balance"] - elif ok_json["isDemo"]==1: - global_value.practice_balance[id(wss)]=ok_json["balance"] - - - elif self.api.async_name=="""451-["updateStream",{"_placeholder":true,"num":0}]""": - self.api.async_name="" - ok_json=json.loads(raw_message.decode("utf8")) - ans={} - ans["time"]=ok_json[0][1] - ans["price"]=ok_json[0][2] - - self.api.realtime_price[ok_json[0][0]].append(ans) - - - - - - if isinstance(raw_message,str): - if "pingTimeout" in raw_message and global_value.check_auth_finish[id(wss)]==False: - - logger.debug("40") - wss.send("40") - - - global_value.auth_send_count[self.api.object_id]=global_value.auth_send_count[self.api.object_id]+1 - elif "40" in raw_message and global_value.check_auth_finish[id(wss)]==False: - logger.debug(global_value.SSID[self.api.object_id]) - wss.send(global_value.SSID[self.api.object_id]) - pass - - - if "successauth" in raw_message: - - global_value.check_websocket_if_connect[id(wss)] = 1 - global_value.check_auth_finish[id(wss)]=True - pass - - - try: - - ok_json=json.loads(raw_message.decode("utf-8")) - - - - """ - b'\x04[["AUDCAD_otc",1625299325.048,0.87461]]' - """ - - if "index" in ok_json: - self.api.getcandle_data[ok_json["index"]]=ok_json - - if "requestId" in ok_json: - self.api.request_data[str(ok_json["requestId"])]=ok_json - if "ticket" in ok_json and "amount" in ok_json: - self.api.check_win_refund_data[ok_json["ticket"]]=ok_json - - try: - for info in ok_json: - if "id" in info and "profit" in info: - self.api.check_win_close_data[info["id"]]=info - except: - pass - - except: - pass - global_value.ssl_Mutex[self.api.object_id].release() - @staticmethod - def on_error(wss, error): - """Method to process websocket errors.""" - logger = logging.getLogger(__name__) - logger.error(error) - global_value.websocket_error_reason[id(wss)] = str(error) - global_value.check_websocket_if_error[id(wss)] = True - - @staticmethod - def on_open(wss): - """Method to process websocket open.""" - logger = logging.getLogger(__name__) - logger.debug("Websocket client connected.") - - - - @staticmethod - def on_close(wss,close_status_code,close_msg): - """Method to process websocket close.""" - logger = logging.getLogger(__name__) - logger.debug("Websocket connection closed.") - global_value.check_websocket_if_connect[id(wss)] = 0 diff --git a/pocketoptionapi/v2/pocketoptionapi2/setup.py b/pocketoptionapi/v2/pocketoptionapi2/setup.py deleted file mode 100644 index 727f663..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/setup.py +++ /dev/null @@ -1,17 +0,0 @@ - -from setuptools import (setup, find_packages) - - -setup( - name="pocketoptionapiv2", - version="2.2", - packages=find_packages(), - install_requires=["pylint","requests","websocket-client==0.58","des"], - include_package_data = True, - description="Free PoacketOption API for python", - long_description="Free pocketoptionapi API for python", - url="https://github.com/theshadow76/PocketOptionAPI", - author="Vigo Wa;ler", - author_email="vigopaul05@gmail.com", - zip_safe=False -) diff --git a/pocketoptionapi/v2/pocketoptionapi2/test.py b/pocketoptionapi/v2/pocketoptionapi2/test.py deleted file mode 100644 index 8d25ded..0000000 --- a/pocketoptionapi/v2/pocketoptionapi2/test.py +++ /dev/null @@ -1,9 +0,0 @@ -import random -import time -import asyncio -import os -import time -# dotenv.load_dotenv() -SSID=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"0641660deb66bacfe493ee595ad5bcd6\";s:10:\"ip_address\";s:12:\"190.162.4.33\";s:10:\"user_agent\";s:120:\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 OPR/107.\";s:13:\"last_activity\";i:1715088712;}bf42446033b557288d0399ac1527842c","isDemo":0,"uid":27658142,"platform":2}]""" - - diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-310.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-310.pyc index 3228589dae59a7baef4ef528f4b74c97304634f6..38cc8ac6a45b486c22670f89666989d45d1afb80 100644 GIT binary patch literal 7015 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 KS-NG-7XBC3j)}nl diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-311.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-311.pyc deleted file mode 100644 index 6879654ba86d1d2af6ed4f4fbc16a2bc010b1141..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14161 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 Sqo(&RpZYJjQcP#I`+orDCIoo^ diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-39.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-39.pyc index 42a9c1a9ee42af347c1c2927e771f2ba1a4e307f..448012b035fdccc6adbac29bf45fd640e5209013 100644 GIT binary patch delta 1052 zcmY*YO-~b16n*!#OsCV%^lPRcPzpjZ8a@&cH#Q^?K_LMpNLUOeP2mj@YzH%pL`V&b z664B%FD9%E>yI@AG zP=%N=*1)6mIazhtyOsvk`EI6eJXKB%zb8n0< zF{_v#8@)O_ILUMLH0XSm9zpuxg6A`Z)7&q8fc}F|(wGMZ4>C#*fO#+;=myR7-m+HD ze`{DN6z^Cje-Jza3w%E~4bQl&W?_hTt2y||7u2Tp_hquEIooci3~snWoo(hTle{J{ zVm}q?p-`i!9^!Kh5pdP>hH%Ad8E(7`6#!zps3n}^zd6T3Pn3blDI)Tc_5`k}O>i>n zCylEQ!k9v%KZUcYnHL-LO?DgF)94sDDO!z%J6+#OGYecNW!TBE;4Yv#j~OjHtxVm8 zQNjWv1jr`XLs(n8MNz+B*DrMx;VGwM)gxc+<=r&)WoxL}il?XVx!*@R#(GXv)z5vbKSnf%w^W_5Q;xMzhg z#*FFeq1hvKu~CS3g_y8=>ui%?9||^QNakDM;g}#A%Qw`Fga|E5TYLe;14Kx6z}_ zES7MzDun(*xEkdUzVhd>k1)^g=?VD3AL~UJ;ne7a4&GxVl)UV7Qs_FHZ@i= g@g?I4%y2E<-!c2>!&sDE?v)f1^Yr(G{(wvnr+Cl4Ug^R*5Mm zPm;N4Vz3-c^k^_9UOZt;Of*sBrJm%X7Z2X>VB*_x!MKO-z4^Xx-kUes`P}oPN6Jc) zDB$;gr*h@jjFg5aGu?+qj35;#6dH=6(Fg+1Lq*Auc zDHY=8+?POKLlQ6HuQ#8}G+X)<+EZxRxm?uExjp3_p@lY{5z0_a)6g8CdI@*5R##DJ z4vq@6@rVF8nAMBL@9&!tw1SWDazK?||(W8TJI%I#B& zj$RR#8(A;B8C2eCiN>9VOuJR}SPfZX%be}7?s{w!XZO%J-eiQM>>V-j?}*m0=T36> zIqr+m_yBH_tplFe%tecfnzi0zQ=FaVY{F7KwuQ6zIh$fn!(X>=-?rs~jz64r)jTs< z94Qs_o|}4hV#0LvUcK*Z|4E}iQ*v^8k3MeNqa~{M?$~^bJyJSg4O>ulM{D9pwve@Q zW@ePy$MN0NSR`_qU5h*q-^A6#xcioTB8Yz09c^t35(NSv6BSYQxfmq=K!|7{5{+PF zg=jZ>5d8*M*qvAld||V(cgZ}~u)`~$xY;g*MK-M#;28Ubi&vJ{SBhbhxn1g&}r6J_{MP6yGbhA`t|Y1cB|<5`O??b_g2) diff --git a/pocketoptionapi/ws/chanels/__pycache__/base.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/base.cpython-311.pyc deleted file mode 100644 index a888d709a9b7b5289d081a308fb643c6230652d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1364 zcmaJ>&rj4q6rO3j%en!V#0?xw%$!WtXcH4dNJB`Jpy42*=w-9XP}*52?zUy73%cRJ zfddEbTs`?CUOf6|pfQp3>OZh%y~xS;+HP5qb(+3;GjHDe-hA)1?Y7D5rmDD;T-VJ-A0(On6uHLxaT_&P3e?)hHC zd3OT&GY88n2vh;FPkLoiojx>uZXCYA7Jfdagdt$~HSp}9Jw0JGYj z{&(j9yR>_@DtwnovE30WVo`9RYv8gwLbAMyW;tgnt48L^J=eNuQjui7-41w2oWXFfGU z7JQ>2Q_2||2iutu-zK=ew ze!lgkviPmCcv4!F*agso68{dhA~p-ca~_vDZzmr(=;NGkckEVX8ROgy9L{A4e3DE) zkR(o;8up1qff=g>5c~OaYRsM(v%ONGFx?}$xLPheq&@OKna0Pc%QanIgE=k+>s!K! y5-5q^^LY+urMWcsc{v3J>`=7?qNh_zPlYzht6b0k diff --git a/pocketoptionapi/ws/chanels/__pycache__/base.cpython-312.pyc b/pocketoptionapi/ws/chanels/__pycache__/base.cpython-312.pyc deleted file mode 100644 index a65696f3374df689e618c64c5d00f8615f627b7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 zcmZ`&y>HV%6u+~bG#E-Nh}r>xZZ(6w076k!iH{a_pcD#AmaA)DTDOj!-Z^a(bzsO) z2E^Ej9mK-O|G)xbK=sN$P|>n<;yv4Oqe7qLyLb1#e)oINU&qHy0&@3#r&ZSp`Gtp} zR0`$z7AObACrzS}C&Z@%;%kC_0)LdI*3&Jcf9GlJcSFHiv1F^R5^O2C z@~a)Os`6WJ-Hk+OdwGg{)rvz=Pmm^snwn3Wx~~mL)9@?4KA_D?&#WWM=h=2Hd!H!jw{_Zb2~wUy<8V8h*aW6o?vl{ zH9W-7SXp?UzxBb=LK%nQGr?AzkpR&)ej|>vD|YF-Xwg&$yQQUu5@AbX0~DfU?DVno zN(rf)?O-k5al=g^ot)sZrqju&ElW8&%E@U~4mQN@^wJvVK@=pM_s5Ywdw9Hrl`g~b znjD#=KD}?etsTRWcm}S8AfAk{8Bl;QvN5!b>>I^cj9ekL+MYffm}O$o{^_!ad?v+K zSEz&~@wst^X#z- z8-i0M$3T(Tv;K{&m;cW;2@dKeEYR6HnXJFteY5*>!u~#Ce@H$rf4Ti*V(wdQPT~OI z{1N!GU`Vhu=c&ngJNv6azry)e*9{BH80UWMaV~2Rn4$PcvLrbyoB@doqE(1tKn{)j zziXAs^vPATGEZ}7bXl}?c^&q&8n12$FUjI$9d6DNp4Mh^AhU7`3=}?v%8^bfJtU2j P>J*))`}h73+_Sj9b^1X` diff --git a/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-310.pyc b/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-310.pyc deleted file mode 100644 index ad63c18f474ecb077a3ebb6441366b2225e1feed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1629 zcmZ`(PjA~c6elT4lpH5r+pNusbUk#~;6v;cyADIw4JbNbX@PAQT?koZT_v*QlCnJq z@+tioIkd;#_IY^SDd!%BZI``ArHv7E68OmX`1tt#{2uG=?Hm9gbOokb>pIJTF)z-a}3W#h5b=aYnK@Pa;|OjM5VoYhFia`X4-KKKTYbHuAUmD z%^)@b*mFSvHiB$cxEM9;s>taKyTN3BgZRgvSkNotqfYpq5VF5h(P2$ z0#jH3zUVPCLb0`|B19W-+lsFRV30KgG1dmJ=^N4tKr0~il&bJ7!sb%(S>O@L0g)jf zGHRm@L?(x6*v!qiKKB@k#zmExmBH%=kqc+0$f5KI%!S4x3*Uy|HKsk?=?Wzqz$NUa z*XB@RInK(g%29A~r?Yp^>DeKI_JTPH9t^)81dfkuwelHv0-$OE<^y4_fq55}^->$x zpOiJ&l#8sKYuCFpZ*GECSFBIb;l$iR!B~POl;Wqc=9Ov0ye(H&HG4@8}wZa z?r7{@$B%4XnH>d#7J$Btbk4pNg^O`|wjaWg5Gu<`yHVswT4i=+ zM`jJ8@*i*%%OC6w`MF2k|DFXMySSK`Y;M&LY~ zm=T#xD$5y}>G+aT_GkPY@}Ubz7j7e6G=vQvp-uR_k_j-I1UC6!wxG^kK?!A>4qZ%e zL^!Ki2GrvP!&Z%3)gspHqFGVxV%f-d0a?X$J39xVaTghgx(zOK8D96@Mj1ip0azg7 z*;;*hfdnn1qJL^wmR2zG(g2VGZR+aI?+nN8;X=>uZvi0(E%`vj%2HpyB=mF}FmJOz z*AX^g^k#p?n&d~0&*2;@M=to*6bG&MuA~RZYFM@JtE1SFU85ro zuQ+_<^lD)D;^H=SX*bF64nizP%zy!;fsL5YtZ6bpU^l~jfz#Qq7SE>A&>}TMWm0d0t%xd;BbK?@*-iMddCr)LnOyg}Bc9UJP zvia*;#VA?X91WdhwN4aO&1}r$m_;~-(P6$m#UHZic0q|V}EaGl3j$z>Znp{yRueuta zF09GGINuIIDnP8ZWx_D30C0*8)dpu+Jz?|LL z!0tZlf!#Egy2X)(@kX-Szeq&8hI8gN%|}Ga6)PI9V;cVniHKEP%ma@o$(Iev7@4J0 zIM*m0KITQdY6HiqHBtkXs5z~qRq|A^I^*G;@Wxq5ngF_;RsK|RKEV?qXXB;9PE&{dc!nzGsd$|V=A`5;j^Cl0 z!ysrLV*dm1SfJz|rn?u*G`Lp}jS8tgZxb-Y`Wi$7bpj}~|IX)6gV9zn>K>eKrkiOu zJbvfa)9`F7Jj*oC569iu+_NL`^$XvG?uXpi@dqcrJ-HQIXvY@ZH|L+t9e?ym`|WdE zbE)=RsuPqBOmz?yW9YyscPiQ$59|YWgJ=q!N#qX?aN2%+<;l#C>QCyHa=xvcZ}ncr zs6~7fe8kk-0j?gWT`G>jH=3&x;zz*M(b7Yr^AjPWz#$qe!wXB6S;4P?n#}IWiOCf! z+0BW`9Q>a#3plxC77E2mfkgKXAG~yYnj+5Z9kTmtXMYnf|FDe>Z}ye)zL&>7z~=yn zveo(nM2F`%&P9<1dt4N3uxFq#-$FyLi^dx4anV9+_;t~l*6`brra7AJM$2aE1+%;y Xw4a{h=$Vg}U%mT+Szi8!o!!Ylvr}oJ diff --git a/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-312.pyc b/pocketoptionapi/ws/chanels/__pycache__/buyv3.cpython-312.pyc deleted file mode 100644 index 52f9c4ea106bad1a2b1859f5f08b3e7819b6a17c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2177 zcmbVN&2JM&6rc5e`XdP?At7lXC@yK-P&<^ipsK1=2p_K6fK;kVzO2^X!8ojU&FtF7 zk)v|pklwh_1C@eWiK0~Mp*~I7dF{3%F$d@A`x<)*vc(pt5jK*L;PG!ST(Tf+pO`1lrq-QWi};o<+SBf znEQ(~FzJm-iCIC(bIqVsriBnElu}387=*^}O^?j>I3)(gq1J)Sc#$N&@=%SLK6Eq=BGN){NqO+Xaj?%Ru+ODzOL2N3^k#K84 zi;`xfDK%wVYN~dmso3&eeL=UCre2IJ7;s*E7YL|eP3&Pcg1)Y`sdmrmCR`#7l2T{a zF@$v+L`vtX<@+??npO6yF3tr^FV{-`3@v*+%INhf^@FUSh7_O74`83$sE(e?lt7+Z?|x&N(2{kf4?Gm zD+c}pmOBL4AYGe;sDQ-_x~n5QgdVY#1szxu+2ZI{#W&@-SA6XP6SCY{ex+|c6JXtn zu@{5846@a`nyuNoZQPXwBe9@%4Pc~bsXNV0BfvC@(bT$lI~WM!~95y_jc&# zr;)TBWnMm>o=(YJ$$NG~lmyp-sy@&>rL%s7R~@fT8BY`)4=~M|XDzkC!QZ5@r)$T~tQ48d~~<__BX~(A>znxm#y!qXx}0IMc_Lx^V0Y*Y$G4BGXR9&5C44- yZCR3}C#3HQiNo(1nSMfgpOF*K$OoI+u#}Y+XEq7Wo2Q1PbJ92O{!4HcN%{}WIT}*{ diff --git a/pocketoptionapi/ws/chanels/__pycache__/candles.cpython-311.pyc b/pocketoptionapi/ws/chanels/__pycache__/candles.cpython-311.pyc deleted file mode 100644 index 45610cbee6f8da698e44004dfb478d2c7268ef36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1629 zcmb7E&2Jk;6rcUf#*Wpx35JN$u9PaU6_^$UsY+2LXqC2yq>*SZmeti{XPj)=4|isr zG?63u&_fO!03o#p4mqF#>ObS6N?3D>gg9_B3LI!JyqWbH(!hb4o%eRW-u!;=y_xSS zl@fyT=evuouPlUqmYt$NUzNifpdKND8i;5_kF;2C=$iaDBBNm_Z8l6|K12;mN7oUt z9wK5>{fU9lQ)qc<*u?l0c@sMyET^OsQMZ*ccQp+@qnVqwvoKBE04F4(+})yUJf8?Q za6+T{uhN943G)-o=}IuNsFVp(o^iMU0#ItZi0Hdorm0ya?v4MusH;8E0Tr~o03u^0 z+?z%yJn=T1p$nS!sAbRMaQtd4rRBFAY zU&__buRNaLpMO^No|nD8=^erfbi@?}&BN0$^9WJY&>(0!(I7}V1jvv9A|_C_MCm%s zuI3PSE?$i==l>@jqReSRmMQ0Wod!jsNI*6;6^=w<_-7cv^?>kcff991s74p?ePiuf zMDJSb`mWVQ`{NbTU{Sj0-Z*Go>u3-m8D(mjJ1>`MwviGyOI-=jjdO&u|DU;4D!HSw z*v1UUE)KGAllmc9bZ>9aQTKiD5F~0yXp)7kkh1!#+aOga+r&}6D?iR99fnnEzmtVA zZGrhb?=vtwLgXE@6r`Ob%gsPetWoBstzxyiop#(UoMe*I2HvD&7!XuTffSa?Ct=DX zg`KuqfLz#Z%EFY0YLsGfBjj1iwpZ2Aif0IeXH3+j&;0S_^BKM0p*$020n4Cr} zF*){+a0<@CQkaD!4X9&Hf-}rzHssD_lkh7X-w$vU`ToxI-}zTB249CI{1%8F`eO#w zW*^UfdH3tPgV){~%$y$7-W=4<49oV((hz~zGlwTp_1ymL{)zK@=7BTylQZ|DGq->3 z+ne8K&zyzl&O*QVSQ%`t00B5&Qt^FJ^8Hx7LhwK3`}aFI8qG}jK1l=LXK%nJb{51B zNEuKJSVfLXQH91Yfas0uz`WcyFAr@rHQT#3G^ec(hv>M-jY$*U1e*gT&c5(M~;ta&l&@^p;F7?r+19YK( n^c$dZPt^gc^i&<%wsszzT!>S%8W1@yzL@znN8DBYb&*yR>AG2P3&FNbWF5_h_j1` zOU-+hR?u{NRxq*s+DcA3DfQ!=`D=M}lL|j?izLtd2xlav-0#wLt`DM3oYA!Yn^F)M z(tZzfx*BP9n%cmW{^1)y0G+Xeh`D13Lmwk_!yKEW|*atBe=G$36jF(5rAq{dRI>DhrJOG{K-(e}4ry^>!z~|2BH5y0LN5E) zH|c2GfXG0BCWK}pi4)4|r=LNAP_~6r{YsnjNr&O0q+b?Ei^iZ{*Si44BSgW!G(~wQ z6Iu-v!a8Ms9*=MPy}aXhaVC^cn|O;J!+>Nu1xV=>MI>!yQo4B@19IuMDNAx9t7(qO z`w160>#Y@{)xeS#7fjYv%);ZQ3mLuDpLG8JN z+6%vz-Ls`V`{*pHUfjQa|IDR5`_P;E*_->po7=zo&GOgF--@5S*I5}d>Bc7W8d(CzxP!z~qHfy+s`Zs=(PfMO4caovtliR9gkVu>Qn*TcciN s^B_}g!(Rk)WEqC>0KNGudgUQ1KSY&3T-Uht_}r|q@Y&3t2w0)xZ(u!+^Z)<= diff --git a/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-310.pyc b/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-310.pyc deleted file mode 100644 index 75e0094817e5bfb30131c48e23e321ecf5eb53c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmZ8f!EVz)5ZzsGLX^57Re*W|A2Fylxkd<;a;P{EDj_butTx_lFx}YhuG5GpoZ7zt zB)A~)OMB(SFK~ew$E_kpn$gaB=FNMat#)^Z1nka}{nHWsn7my(Mw)H&m0DdVVCGp5&Nq8-wH!-0efqB%_LCOi}Ds z!4=84;)vqIW8H`&X=Isem+d%Rs@K{%Inz0iy)lGCqA$VSV+e{O&=>ZJHb87mKa;QQ z5=gJfH@YSt*qVN4AfX3C`m50}>TFy~E9X&FH$_!CQ7AW#OyQcSvQbesH+8FUrkjIl z$7>aglBY5Ayp(h8Z(V5XpndfK*fvpD6j^<~(5`XOI#RNc<7g5GzE@j-_4iSiSn8>( z@-q&#~<%vAC{3lk}Z~G3iAytCrH7X`7z3y>D9TFHT+^jMBQj*@%&K zkuF`Dzn7&pE(QAHntoD$^aCMsX^ap9{DU}x^%(8{y&dea)xGT{B-fP_SP!(JW+D7g zhCUun-6Y$cZHpm7 z4n27E)`JQ?NUZdqNu^-eli$ z=)$%LB)Zpc;Y&j+y<`Pqb4$ojS`CY{kd>_EydGuz0K-PtR88oPSd}&B1r{s48<giuq=x-|;atWacaTade>D;tpT^qX`1Hx%YhD$K2Ky`QmN|ARFnuD)1Jl>p-jcjH%hV#%1qTH}SZ~s%P z!j3GYwJNM)+Xt#GBO`PxqL=at+J9-BnD=|E9|YI&K=q+~iV*9BkPb|>&yEfZH}`%=P1eg2ZJ{LQ~&?~ diff --git a/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-312.pyc b/pocketoptionapi/ws/chanels/__pycache__/get_balances.cpython-312.pyc deleted file mode 100644 index c98686b4529eb1136a4a89e23fda8f39ed1be731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmZ8f&1=*^6n`_x*0|l)MYJk{26~VjOj_tF6cH?iQqbCqmt2O~ooS8D?xvZv%PuSQ z(1S;BJ!nBMTIrwSrGjFK2!bbXm93Yae3N9W^g-VD$L~$v$FZ?8Ak}uGm3IW-r#6OE zDwKhX$_@w+B!njM3DG(YsZS{^fH1Z}n3C)pdA@ISsZ;u;4Tq%W99MFwk%w}Qb21uC zpx6NkJ`vzkL3~5dZSc*m;h1S%Jkf(j1`vmZs3NAT_oAD zT;Gr?QFh-JJmItUl4GQ$D8{zwgnkRwk#*H>tl=XSxv_;XbzddJmDJQ_N+Y-JlZW0D zg=4(UV71-h;hK!S<*fE`2K~YEq8DX$z6y^5ucN%iQ{IxH@(?^5f_I~CYBAQ}VaQnT z^8f$H9lA9Rbr;zd9F^hPt;6f~Z-Z7ZzA%qR;QaVO)!j?>Ru0B%pRGGTtjbqw@{=|B zX8!%++r_=)i#0RAQdn|IdXRo2#?mrl&9>MGwO(OteS?R2BwISZfCV2QuA+#?HPfe? zF|DWyvTZmVy}C6&Fw3P{o~T23XE)Dm?sk-0Z0^?ac4K`hshI>#nYX=!_PljA6n^JiLYgK66=Fi-M5jn#l@f+V5fZc#>d;VBSRzX&*LO(_PMrE2BBBf# z82ATSJD>vUp9u(w$P*G1TToc+5Q1nI)F@4a_^=l6a0-g{ptX!JO+_^1ArGO>EAo>Mc0$8?g#A9 zcV5bnJ?Vt5-)0XF_nA_zU_E)Pl8Do^+tM?C=p027(MPtD&OBpmkY6mb8)!x#p+=CC zAqe6bHLAJP(t;v#I-*CIyuZEc*-HHvd_*-Z$CzVjLviW5%_^uyFo09Et1^HW3x+Tt zXPDu9nT25GkeAVK9LTWg3l{oJ$+loEsg&K2@&3|sb;?AV>VRwwS2A2-qNxK>YDN#B&E>t=RdM_JAt+w(Z@7jzTM#Wt^jZlM~& zGzV*iui4Gd+0E0vcl#g0PubF!Y-zlBXLt&##f;9S$#Nd$IB&(ngnpj$ldkQ}BUd;V zzQcL2hCc-w&Ao)Uf@F6W3VqvZ{}<{-c&h{fQS65qXq58p7e%U&vxmvfxrL=6+0PlF-n47 zAf&x^?pj8ARcB!9_A)7s#zG~jIr4@A?WPi8PgW4B(jY0lXgkl9kji-(^rMLv9t!E? zL(6A|BXio!nr)iZj-wQ*=W(_?Bd!^QOrt8Q~U{QmO#+T~$ zr|R~b_Pfs8&imwZb!Uk-=voyWL1SbrtuZ#tHVEZ9V@G2zEG(B8pT7S=l7bS3AD|uk7P*sea-4 diff --git a/pocketoptionapi/ws/chanels/buyv3.py b/pocketoptionapi/ws/chanels/buyv3.py index 07179f8..f39fa99 100644 --- a/pocketoptionapi/ws/chanels/buyv3.py +++ b/pocketoptionapi/ws/chanels/buyv3.py @@ -14,7 +14,7 @@ def __call__(self, amount, active, direction, duration, request_id): # thank Darth-Carrotpie's code # https://github.com/Lu-Yi-Hsun/iqoptionapi/issues/6 - exp = get_expiration_time(int(self.api.timesync.server_timestamp), duration) + exp = get_expiration_time(int(self.api.timesync.server_timestamps), duration) """if idx < 5: option = 3 # "turbo" else: diff --git a/pocketoptionapi/ws/chanels/get_balances.py b/pocketoptionapi/ws/chanels/get_balances.py index 627ad38..97659bb 100644 --- a/pocketoptionapi/ws/chanels/get_balances.py +++ b/pocketoptionapi/ws/chanels/get_balances.py @@ -13,6 +13,6 @@ def __call__(self): data = {"name": "get-balances", "version": "1.0" } - print(f"sent balance requests | data: {data}") + print("get_balances in get_balances.py") self.send_websocket_request(self.name, data) diff --git a/pocketoptionapi/ws/chanels/__pycache__/base.cpython-310.pyc b/pocketoptionapi/ws/channels/__pycache__/base.cpython-310.pyc similarity index 71% rename from pocketoptionapi/ws/chanels/__pycache__/base.cpython-310.pyc rename to pocketoptionapi/ws/channels/__pycache__/base.cpython-310.pyc index 6a48b8ebf4383911bd7f72f211676d48e872e287..f254efbc744b980a1a1a889f0f2f902045b85007 100644 GIT binary patch delta 139 zcmaFI@r#2upO=@50SMHp4AT@g@`^ArR!&x8)MX3EPtHy)nH!?#<`74JtQ`xS1pQ~rfeMV=|KrI=@Gjq2wL zC}3TBto8A1iTz#MSVC<9a_v48t95M_q*ywzAjOR^ZuL?N^LS)v6*+*nULQrp@Ql?i zV{`pag8hWC+eMVNHv`6a9y2EU8=x(4)L7~a46tyg@R?)Swlk1;Hu5a_6uxyopJM0f S!^a}j&S8_m5xVI@Z0j%0pei8% literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-310.pyc b/pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5ff517d3ad7d41063ca80c5ab4a244520ecf78c GIT binary patch literal 1650 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 bvs4>yoZf8UK6l`nvX7pJmz~fF-Eip_C8b-- literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-310.pyc b/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34a0144807080ba6db9d7e6158eb6d346fc48e62 GIT binary patch literal 1034 zcma)5J#P~+7`A;*dZZ~s1xySc$#N`6l`4dQA~7XYD$^;F<(}W9SA6GSJFObRM1KYY zjQk1y1e;eTBz^${!oEw(sVrEs&+qH=^E~f|_0G-!h4Jm(WcHIF^gSBgL4)x$O#3J- z66Hu@NffR~PH@~OD#?@POLO`XNh*7nNcMnyNb;Ucj?k#T+8b-RRKRB1utQzE0rzU* zN?o(!MAUO&_M$r0ik-u;ZB83MsO(3eL?i6!b75gpM5{Z3+*aECumP0gAdg5K4=GGit`{$%fce@8n1~Y zAIY4&PuA!YTBB3EPCm!9#kA1X*D<&gEt%6S!m_Hxjdmewslfi5lEHv&#{NPWQ87`t z@(g$>_u1ZL?*I3!idc2&Fi`9g7y90ofv$;Pm${UES?AOm_9>B(zev7Ugs92Rzb-&JOz_ z=WmxnZBDj0m%8BGqyg1L{3e3VvJ-u=gW?}HE-9jzCPUJAM}4y!e4gEiC_A^=RYciw rcortU0#9SXeBXq&(NzP`p^CXPkUAU5 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-39.pyc b/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..395b0e1ad4ab77337c6b07331d5d9d33cb4c3186 GIT binary patch literal 1028 zcma)5&2AGh5cYbVG^8m9Bsg*KvAHZlLaJ0D1O$W-G*pz+Dw5@{C+QaNZfZNN8if;m z3=VMQC3p~DIU(@`91!E(w5-Ynuk4)}+w*<%W4X1}Cpfm3_oqK8A>V`29t@SoIPC*m z6iJDS6xC5dQyK+1)^Qrwf0nWrL^0L5AgTlOW1MzWd_acX<<4HE78>}pGJL`0a~;P$*YtTaD^LtF3GcF@TWge1erv!~L+I15^PAl-)AT@-+%5z?b7LOL{M zDpu@*Acan#;0L1`>Yzqi?u@jww#A26|3%1eS}4^XSSx3c#Vs-+O<|63T8@i~R?&(o z`iaiyhj>LklNC9RR`HjRwvZOK{I&<~s8ZZjJhKHON!Oj9LUcVeafAV%Rue+xyrJU!JGdl?s zOVEul1JSfvGC%h{Au_485H~}~>PN6aBm92%*z$I}U6RX_V{9b67RU?X`$80TU!yz_ z;$$K9dS^ojRb@h$9=bNcf6c$OYz15BpK!ufjN5Vaj=iMHtl0pdmu9J&W0_PRo-EucNIs>CgdWO-wENpU`Eds!MSr}k%X zphy0aublV`Twt8-R#8WqQO22h^Pb1e;o%s89d*<5Ta3_epA3ycatv;cAP6L|LKV(1 z_TNO2jLeY;1ie9mN_-t;fgqpIB>V%_Xo4L*s*mifly&`{S> znfw747co|Fr5KC+<@pgLBzW{M3Lca0>3nei>ArFSn}IejnlU$KtZKv><}(*FcDd$i z_oo-3V?gYg55j>z3m}BxW&|NZ6vw1Lo6szIARyhCbT1%X!i&;=Yx15VgHdyGqj|h+Fr-p*gT3*9f7~f+7%&D!8pyvYfSBws=2kZ-}}Ir}k%X zphy0aublV`TwrF?RI83OBac1r`Hekte}7284%^B39VO&9CVk_O9D%z-2#P3bNI?@y zam@@%*o>$^@mr#}rZ+(nDE66*2Y;ZNjH&0x(&>4IS>G5WN8s)m1WgjENWv6Fv+AVA@Ppa{uYZayiIrZsD*Fm3tFM;YH5R);VyDfy z=Snv67qR$Le?PpPrf1jL7io(#TV3j`Nlz=KjrjO}{_f4EwC;#DjmSDrS1yI(ved?< zk97D@h)fzIM2HX94Z?s?_HQQ$S^H$xd;54>Ifq{X7&a_~9|}=aYH4si65?tp&E}+Q zz>a{nQ{4-DxEDYe;GNiKNIC0v#yp80$&Xhq-pY>`FiRHy+Vdtabcg9NqkfC@K76%N N^%{qyyJJMd;6DhIyVw8# literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-310.pyc b/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-310.pyc similarity index 57% rename from pocketoptionapi/ws/chanels/__pycache__/ssid.cpython-310.pyc rename to pocketoptionapi/ws/channels/__pycache__/ssid.cpython-310.pyc index 7146c46d47e52222f1104d7aca63cf3f89a86a5d..0b94b8ce3a8be92612072cccdcb0dfb48dd93c6b 100644 GIT binary patch delta 100 zcmbQvHiL~fpO=@50SL6K4AX9I zT9Tihlb;t;ke{5LT9RK-l9`{ESdbZ0UK|6|ke8R5Qyeo{nQ1Pg!sLTY;*+m4IRF5b CIU}h6 delta 100 zcmbQiHl2+(pO=@50R+S)(r#?zz0PQ_A6lGRRIFc?nVw&sn3J7aq#ux^n vpXV6hscWcT02avyizF6g>X#SmCubz)rREgtPgZ7{%P2qjAd~pyn@siqDE1+H diff --git a/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-39.pyc b/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33542f781247ffe7a636665e8e65e4eda21f478a GIT binary patch literal 784 zcmb7Cy^hmB5Z+yHLWmLy3Mz^%Xe=a4Ko=o&KOl4x7b1?zvb5UsPA)$Dce{?Fv#x^& zfs#kUEfudo#f)<~MTmxxX1udAp858hG1KXop*(G$Eq`#vev-2<5}gB7{{)R?F|*u? zoEIV%oV{f>u<{GD62#{q4(#BJg~Rs6X=T?rsAc8UqDntOqu$p|R+Z{-aiYA>tlGf2 z-$v4vDIt%3VR;tvP97N#DLMNh&^bW$kI?{&IU*63V@DCoErxio?cT{VY|uVG&W-o~ z1)-A!Eu~&Np))aXjOrhvxnW;XFZm7shVQo=-z(aSQ)pI|RZXQllvWksy}5wi|L0@J zV|6RD+Bj46oXph66<`4bflOr<$|hT8;G(shk6Mw(r*aMdNGO@i}*T)#V+zd8Jn)cqW)en6(ql8sMjCO8zI5Ft^0 z-Ho(PO`dB#AtHK)2JMuHj&_lGIHWX!p>;Rby6Bex&l9b$)+WD=+|$}tsn%|Yr5r6^ z4|C7lr@H_RWq2|pE(0n0yLl+x1H9_gU$~=zOCQq?iPM09gpiaR2}S literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/base.py b/pocketoptionapi/ws/channels/base.py new file mode 100644 index 0000000..5a93fb1 --- /dev/null +++ b/pocketoptionapi/ws/channels/base.py @@ -0,0 +1,26 @@ +"""Module for base Pocket Option base websocket chanel.""" + + +class Base(object): + """Class for base Pocket Option websocket chanel.""" + + # pylint: disable=too-few-public-methods + + def __init__(self, api): + """ + :param api: The instance of :class:`PocketOptionAPI + `. + """ + self.api = api + + def send_websocket_request(self, name, msg, request_id=""): + """Send request to Pocket Option server websocket. + + :param request_id: + :param str name: The websocket chanel name. + :param list msg: The websocket chanel msg. + + :returns: The instance of :class:`requests.Response`. + """ + + return self.api.send_websocket_request(name, msg, request_id) diff --git a/pocketoptionapi/ws/channels/buyv3.py b/pocketoptionapi/ws/channels/buyv3.py new file mode 100644 index 0000000..406ecf4 --- /dev/null +++ b/pocketoptionapi/ws/channels/buyv3.py @@ -0,0 +1,61 @@ +import datetime +import json +import time +from pocketoptionapi.ws.channels.base import Base +import logging +import pocketoptionapi.global_value as global_value +from pocketoptionapi.expiration import get_expiration_time + + +class Buyv3(Base): + name = "sendMessage" + + def __call__(self, amount, active, direction, duration, request_id): + + # thank Darth-Carrotpie's code + # https://github.com/Lu-Yi-Hsun/iqoptionapi/issues/6 + # exp = get_expiration_time(int(self.api.timesync.server_timestamps), duration) + """if idx < 5: + option = 3 # "turbo" + else: + option = 1 # "binary""" + # Construir el diccionario + data_dict = { + "asset": active, + "amount": amount, + "action": direction, + "isDemo": 1, + "requestId": request_id, + "optionType": 100, + "time": duration + } + + message = ["openOrder", data_dict] + + self.send_websocket_request(self.name, message, str(request_id)) + + +class Buyv3_by_raw_expired(Base): + name = "sendMessage" + + def __call__(self, price, active, direction, option, expired, request_id): + + # thank Darth-Carrotpie's code + # https://github.com/Lu-Yi-Hsun/iqoptionapi/issues/6 + + if option == "turbo": + option_id = 3 # "turbo" + elif option == "binary": + option_id = 1 # "binary" + data = { + "body": {"price": price, + "active_id": active, + "expired": int(expired), + "direction": direction.lower(), + "option_type_id": option_id, + "user_balance_id": int(global_value.balance_id) + }, + "name": "binary-options.open-option", + "version": "1.0" + } + self.send_websocket_request(self.name, data, str(request_id)) diff --git a/pocketoptionapi/ws/channels/candles.py b/pocketoptionapi/ws/channels/candles.py new file mode 100644 index 0000000..806ca4f --- /dev/null +++ b/pocketoptionapi/ws/channels/candles.py @@ -0,0 +1,42 @@ +"""Module for Pocket option candles websocket chanel.""" + +from pocketoptionapi.ws.channels.base import Base +import time +import random + + +def index_num(): + # El número mínimo sería 100000000000 (12 dígitos) + minimo = 5000 + # El número máximo sería 999999999999 (12 dígitos) + maximo = 10000 - 1 + # Generar y retornar un número aleatorio dentro del rango + return random.randint(minimo, maximo) + + +class GetCandles(Base): + """Class for Pocket option candles websocket chanel.""" + # pylint: disable=too-few-public-methods + + name = "sendMessage" + + def __call__(self, active_id, interval, count, end_time): + """Method to send message to candles websocket chanel. + + :param active_id: The active/asset identifier. + :param interval: The candle duration (timeframe for the candles). + :param count: The number of candles you want to have + """ + + # {"asset": "AUDNZD_otc", "index": 171201484810, "time": 1712002800, "offset": 9000, "period": 60}] + data = { + "asset": str(active_id), + "index": end_time, + "offset": count, # number of candles + "period": interval, + "time": end_time, # time size sample:if interval set 1 mean get time 0~1 candle + } + + data = ["loadHistoryPeriod", data] + + self.send_websocket_request(self.name, data) diff --git a/pocketoptionapi/ws/channels/change_symbol.py b/pocketoptionapi/ws/channels/change_symbol.py new file mode 100644 index 0000000..9f6ff97 --- /dev/null +++ b/pocketoptionapi/ws/channels/change_symbol.py @@ -0,0 +1,25 @@ +"""Module for PocketOption change symbol websocket chanel.""" + +from pocketoptionapi.ws.channels.base import Base +import time +import random + + +class ChangeSymbol(Base): + """Class for Pocket option change symbol websocket chanel.""" + # pylint: disable=too-few-public-methods + + name = "sendMessage" + + def __call__(self, active_id, interval): + """Method to send message to candles websocket chanel. + + :param active_id: The active/asset identifier. + :param interval: The candle duration (timeframe for the candles). + """ + + data_stream = ["changeSymbol", { + "asset": active_id, + "period": interval}] + + self.send_websocket_request(self.name, data_stream) diff --git a/pocketoptionapi/ws/channels/get_balances.py b/pocketoptionapi/ws/channels/get_balances.py new file mode 100644 index 0000000..377b90c --- /dev/null +++ b/pocketoptionapi/ws/channels/get_balances.py @@ -0,0 +1,18 @@ +from pocketoptionapi.ws.channels.base import Base +import time + + +class Get_Balances(Base): + name = "sendMessage" + + def __call__(self): + """ + :param options_ids: list or int + """ + + data = {"name": "get-balances", + "version": "1.0" + } + print("get_balances in get_balances.py") + + self.send_websocket_request(self.name, data) diff --git a/pocketoptionapi/ws/channels/ssid.py b/pocketoptionapi/ws/channels/ssid.py new file mode 100644 index 0000000..777d934 --- /dev/null +++ b/pocketoptionapi/ws/channels/ssid.py @@ -0,0 +1,17 @@ +"""Module for Pocket Option API ssid websocket chanel.""" + +from pocketoptionapi.ws.channels.base import Base + + +class Ssid(Base): + """Class for Pocket Option API ssid websocket chanel.""" + # pylint: disable=too-few-public-methods + + name = "ssid" + + def __call__(self, ssid): + """Method to send message to ssid websocket chanel. + + :param ssid: The session identifier. + """ + self.send_websocket_request(self.name, ssid) diff --git a/pocketoptionapi/ws/client.py b/pocketoptionapi/ws/client.py index bf85e7f..a570c56 100644 --- a/pocketoptionapi/ws/client.py +++ b/pocketoptionapi/ws/client.py @@ -1,56 +1,75 @@ import asyncio from datetime import datetime, timedelta, timezone -import websocket import websockets import json import logging import ssl -import time + # Suponiendo la existencia de estos módulos basados en tu código original import pocketoptionapi.constants as OP_code import pocketoptionapi.global_value as global_value from pocketoptionapi.constants import REGION from pocketoptionapi.ws.objects.timesync import TimeSync +from pocketoptionapi.ws.objects.time_sync import TimeSynchronizer logger = logging.getLogger(__name__) timesync = TimeSync() +sync = TimeSynchronizer() + async def on_open(): # pylint: disable=unused-argument """Method to process websocket open.""" - print("CONECTADO CON EXITO") - logger = logging.getLogger(__name__) + print("CONNECTED SUCCESSFUL") logger.debug("Websocket client connected.") global_value.websocket_is_connected = True -async def send_pin(ws): - while not global_value.websocket_is_connected: +async def send_ping(ws): + while global_value.websocket_is_connected is False: await asyncio.sleep(0.1) - print("before pass") - # pass - print("after pass") + pass while True: - await asyncio.sleep(5) - print("sent ping request") + await asyncio.sleep(20) await ws.send('42["ps"]') +async def process_message(message): + try: + data = json.loads(message) + print(f"Received message: {data}") + + # Procesa el mensaje dependiendo del tipo + if isinstance(data, dict) and 'uid' in data: + uid = data['uid'] + print(f"UID: {uid}") + elif isinstance(data, list) and len(data) > 0: + event_type = data[0] + event_data = data[1] + print(f"Event type: {event_type}, Event data: {event_data}") + # Aquí puedes añadir más lógica para manejar diferentes tipos de eventos + + except json.JSONDecodeError as e: + print(f"JSON decode error: {e}") + except KeyError as e: + print(f"Key error: {e}") + except Exception as e: + print(f"Error processing message: {e}") + + class WebsocketClient(object): def __init__(self, api) -> None: """ Inicializa el cliente WebSocket. - - :param ssid: El ID de sesión para la autenticación. - :param url: La URL del WebSocket a la que conectarse. + :param api: Instancia de la clase PocketOptionApi """ self.updateHistoryNew = None self.updateStream = None self.history_data_ready = None - self.successcloseOrder = False + self.successCloseOrder = False self.api = api self.message = None self.url = None @@ -58,66 +77,77 @@ def __init__(self, api) -> None: self.websocket = None self.region = REGION() self.loop = asyncio.get_event_loop() - self.esperar_segundo_mensaje = False - self.recibido_updateClosedDeals = False - - async def reconnect(self): - regs = self.region.get_regions() - for i in regs: - print(f"Reconnecting to {i}...") - async with websockets.connect(i, extra_headers={"Origin": "https://pocketoption.com/ "}) as ws: - print("Conectado a: ", i) - self.websocket = ws - self.url = i - on_message_task = asyncio.create_task(self.websocket_listener(ws)) - sender_task = asyncio.create_task(send_pin(ws)) - message_task = asyncio.create_task(self.send_message(self.message)) - await asyncio.gather(on_message_task, sender_task, message_task) - + self.wait_second_message = False + self._updateClosedDeals = False async def websocket_listener(self, ws): - async for message in ws: - await self.on_message(message) + try: + async for message in ws: + await self.on_message(message) + except Exception as e: + logging.warning(f"Error occurred: {e}") async def connect(self): ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ssl_context.check_hostname = False ssl_context.verify_mode = ssl.CERT_NONE - while global_value.websocket_is_connected is False: + try: + await self.api.close() + except: + pass + + while not global_value.websocket_is_connected: for url in self.region.get_regions(True): print(url) try: - async with websockets.connect(url, extra_headers={"Origin": "https://pocketoption.com/ "}) as ws: - - print("Conectado a: ", url) + async with websockets.connect( + url, + ssl=ssl_context, + extra_headers={"Origin": "https://pocketoption.com", "Cache-Control": "no-cache"}, + user_agent_header="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, " + "like Gecko) Chrome/124.0.0.0 Safari/537.36" + ) as ws: + + # print("Connected a: ", url) self.websocket = ws self.url = url + global_value.websocket_is_connected = True + + # Crear y ejecutar tareas + # process_message_task = asyncio.create_task(process_message(self.message)) on_message_task = asyncio.create_task(self.websocket_listener(ws)) - sender_task = asyncio.create_task(send_pin(ws)) - message_task = asyncio.create_task(self.send_message(self.message)) - await asyncio.gather(on_message_task, sender_task, message_task) + sender_task = asyncio.create_task(self.send_message(self.message)) + ping_task = asyncio.create_task(send_ping(ws)) + + await asyncio.gather(on_message_task, sender_task, ping_task) + except websockets.ConnectionClosed as e: + global_value.websocket_is_connected = False await self.on_close(e) + logger.warning("Trying another server") + except Exception as e: + global_value.websocket_is_connected = False await self.on_error(e) - return True + await asyncio.sleep(1) # Esperar antes de intentar reconectar + + return True async def send_message(self, message): while global_value.websocket_is_connected is False: await asyncio.sleep(0.1) - pass self.message = message - if global_value.websocket_is_connected: - - if message is not None: + if global_value.websocket_is_connected and message is not None: + try: await self.websocket.send(message) - - else: - logging.warning("WebSocked not connected") + except Exception as e: + logger.warning(f"Error sending message: {e}") + elif message is not None: + logger.warning("WebSocket not connected") @staticmethod def dict_queue_add(self, dict, maxdict, key1, key2, key3, value): @@ -139,44 +169,29 @@ def dict_queue_add(self, dict, maxdict, key1, key2, key3, value): async def on_message(self, message): # pylint: disable=unused-argument """Method to process websocket messages.""" # global_value.ssl_Mutual_exclusion = True - logger = logging.getLogger(__name__) logger.debug(message) - print(message) - - # message = json.loads(str(message)) if type(message) is bytes: - # Paso 1: Decodificar los bytes a una cadena de texto (string) message = message.decode('utf-8') message = json.loads(message) - # print(message, type(message)) # [:1000000]) + # print(message, type(message)) if "balance" in message: - global_value.balance_id = message["uid"] + if "uid" in message: + global_value.balance_id = message["uid"] global_value.balance = message["balance"] global_value.balance_type = message["isDemo"] - data = { - "balance_id" : message["uid"], - "balance" : message["balance"], - "balance_type" : message["isDemo"] - } - - with open("balance.json", "w") as f: - json.dump(data, f) - elif "requestId" in message and message["requestId"] == 'buy': global_value.order_data = message - # Supongamos que este es el segundo mensaje de interés basado en tu lógica - elif self.esperar_segundo_mensaje and isinstance(message, list): - self.esperar_segundo_mensaje = False # Restablecer para futuros mensajes - self.recibido_updateClosedDeals = False # Restablecer el estado + elif self.wait_second_message and isinstance(message, list): + self.wait_second_message = False # Restablecer para futuros mensajes + self._updateClosedDeals = False # Restablecer el estado - elif self.esperar_segundo_mensaje and isinstance(message, dict) and self.successcloseOrder: + elif isinstance(message, dict) and self.successCloseOrder: self.api.order_async = message - self.successcloseOrder = False # Restablecer para futuros mensajes - self.esperar_segundo_mensaje = False # Restablecer el estado + self.successCloseOrder = False # Restablecer para futuros mensajes elif self.history_data_ready and isinstance(message, dict): self.history_data_ready = False @@ -184,8 +199,7 @@ async def on_message(self, message): # pylint: disable=unused-argument elif self.updateStream and isinstance(message, list): self.updateStream = False - self.api.timesync.server_timestamp = message[0][1] - # print("server_timestamp asignado:", timesync.server_timestamp) + self.api.time_sync.server_timestamp = message[0][1] elif self.updateHistoryNew and isinstance(message, dict): self.updateHistoryNew = False @@ -197,27 +211,24 @@ async def on_message(self, message): # pylint: disable=unused-argument pass # print(message) - if message.startswith('0{"sid":"'): - # print(f"{self.url.split('/')[2]} got 0 sid send 40") + if message.startswith('0') and "sid" in message: await self.websocket.send("40") + elif message == "2": - # print(f"{self.url.split('/')[2]} got 2 send 3") await self.websocket.send("3") - elif message.startswith('40{"sid":"'): - print(f"{self.url.split('/')[2]} got 40 sid send session") - print(f"send: {self.ssid}") + elif "40" and "sid" in message: await self.websocket.send(self.ssid) elif message.startswith('451-['): - # Eliminar el prefijo numérico y el guion para obtener el JSON válido - json_part = message.split("-", 1)[1] + json_part = message.split("-", 1)[1] # Eliminar el prefijo numérico y el guion para obtener el JSON válido # Convertir la parte JSON a un objeto Python message = json.loads(json_part) if message[0] == "successauth": await on_open() + elif message[0] == "successupdateBalance": global_value.balance_updated = True elif message[0] == "successopenOrder": @@ -226,13 +237,13 @@ async def on_message(self, message): # pylint: disable=unused-argument # Si es el primer mensaje de interés elif message[0] == "updateClosedDeals": # Establecemos que hemos recibido el primer mensaje de interés - self.recibido_updateClosedDeals = True - self.esperar_segundo_mensaje = True # Establecemos que esperamos el segundo mensaje de interés + self._updateClosedDeals = True + self.wait_second_message = True # Establecemos que esperamos el segundo mensaje de interés await self.websocket.send('42["changeSymbol",{"asset":"AUDNZD_otc","period":60}]') elif message[0] == "successcloseOrder": - self.successcloseOrder = True - self.esperar_segundo_mensaje = True # Establecemos que esperamos el segundo mensaje de interés + self.successCloseOrder = True + self.wait_second_message = True # Establecemos que esperamos el segundo mensaje de interés elif message[0] == "loadHistoryPeriod": self.history_data_ready = True @@ -242,22 +253,19 @@ async def on_message(self, message): # pylint: disable=unused-argument elif message[0] == "updateHistoryNew": self.updateHistoryNew = True + # self.api.historyNew = None + + elif message.startswith("42") and "NotAuthorized" in message: + logging.error("User not Authorized: Please Change SSID for one valid") + global_value.ssl_Mutual_exclusion = False + await self.websocket.close() async def on_error(self, error): # pylint: disable=unused-argument - """Method to process websocket errors.""" - logger = logging.getLogger(__name__) logger.error(error) - try: - await self.reconnect() - except: - global_value.websocket_error_reason = str(error) - global_value.check_websocket_if_error = True + global_value.websocket_error_reason = str(error) + global_value.check_websocket_if_error = True async def on_close(self, error): # pylint: disable=unused-argument - """Method to process websocket close.""" - logger = logging.getLogger(__name__) - logger.debug("Websocket connection closed.") - try: - await self.reconnect() - except: - global_value.websocket_is_connected = False + # logger.debug("Websocket connection closed.") + # logger.warning(f"Websocket connection closed. Reason: {error}") + global_value.websocket_is_connected = False diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-310.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-310.pyc index 7aed546c655c8c850a81e650eadae760827e391c..277920a5b9e8d5a0023edf69054a887500b8bf36 100644 GIT binary patch delta 89 zcmbQmHj|AzpO=@50SL6K3^#HcG1|MjSj7ZXCTAoTz8Gw=a(nuWTzJC2jnMbrNm;4MCB^!iYZ&J;0sxZR9V!3- diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc deleted file mode 100644 index 828677cc5b77135fd78edc35c616210ab6fa41bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 zcma)4OK;Oa5FS7BXdbAD!l7JzLW%@N9Ez$4fuKl;10fP1Ag6te^N zyYD0y(*4}s4MH~^K{|n_&6oEcxS^6CsF}3Fu6rombQIEUV^=#oii?bO``w7KVU>vN zWmrTCSw$GZ{MP2gJT6c0S7MB=1P?rk*3S*xJtzK3sFy;pyV}fpRTnsZ=f@X9Is+FP^ zGz|qNI`TQfX!Xp^?U}iq(n xN_Yb^mp^e)e3Z&~EN)_f4oN;iNDNKW=CCz`tt4O7knk!@9-dS7=RZn{;5RuI>5%{c diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-312.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-312.pyc deleted file mode 100644 index e4a50f7087aa68d04bd9f373bc283d607a1c837d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcma)4J8u&~5T3o49XpPA1PWV1TOql*tAbF3ka$Rl0%Hkiu365$b#UVNj@>hs9f}k# zLV+k<(a}WtDKwPiTK<5+(4=DK?i^5Pm}2&uo!y!FX6AFPRsoc)k8$r41NcV9O6&qG zZy=aM2tF9_2tqc4(2(rJ%>BMGF`L%ZdlH4Cf#khN@pjbRlL>zsC;e#1?+04)vFzyl zHtOukZsK-VY3MWxV|f$793=P*(-|T2&Cr;EZ%I2eXK+$H^PP#+v{Q>BPu&NDK@7KkO$$Oly?MU72Ofq1R9y!q@Bd zBkO&2NyT;lWJc;-Yj_2Y?I1zL!6<)};lF3L7 z^)`S0N@h+T_5S(gp1)VLFsg(q?~bCKZy|6nYcY V!eoq{!q!ix#u`VregPiYuis85)A0ZR diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-39.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-39.pyc index 3b7ca3ed30069b594bf5622c03b38e9b0742a261..cd49bfbd4df103febb863d114283fb8aeb67d3b9 100644 GIT binary patch delta 57 zcmbQrHj#}xk(ZZ?0SL6K3^#HcG0Ho-Sj7ZXCTAoT1|I L25nAY+{y?5p%5~DJ_oKtk2ZJ!f}f=y(l#`@7Cn~Y?~M* zCp++oZ|-EbWn`3}e4OJ0qtavrR*A_MICB+Mffj2r6|n)SA~g`f0Vg=YVw2;zu1_}P zk(}(u?ZK!%c{=wjMh&oTFCJk=t;umbCP2~2JhP#q?z|#E(HLGiGbxaEX%Ha;B4j}X z$e%@WAOd99Ewe)-TIU&o58R$xbcO56Dl>PA%~-D9Oyv za}4m*HPkNvi{yhv5(_f*%Zv5%ld@8iON#Y3>oIk(a73}D7p11=MNQtvwuw=Eb0K>O zBctr(V;mnC6($?;selL$IKc@Pn;gq^olym>-j~~hQFZb( z?pc#fxFsih@(43(OpfI-0g6rHna!vMR^!Gi0u+trl{1q7X_o{MQXoPaM1VY5Bm*Kq zcHLqtPAw@(EhkKE7D@To5bMQW@bZ* zl|!UPY7S84Ql+YT;6xkcFR6NQkfmBHRjSkzH=|Ig<mQ=g5P|Ejk>u2uVM2b#8}Cxx!sa*>R*6Yc#FR`qC(X(!St2s|h?s#TVk%bP zVStcz_!C!3;dLt11uc17ooaSWkhoSldAVTDGReNCMpUyZdw^T@fe4XOOEnknpqk5Vf>%$-fVskg;ipalmye2O(_*HZ8H`wIu1aC)^Hw0d-$s0C10eHv>3Vfyh3%N97E%0YJ z{zS$Dg%idy^1Im!W|b^R3&enuxJ(HKmP_x2boWXY(=H>VmmP&!xhW@H=VUk~U4M2llbpQDEXpSDWTy+oNfApC z$`7twIx#j`u83N&1Y@HD8n&7StK=$ z9EmS0741Noe>ahUjD*&`e4-A41BfCwy&71&`~5N}?9vrlC|cCMtJ?*A8Wy0Kj&5gX ztwhM@B}pxNj^>%*u%V4dIK{`(4lrvH<@3ck=@hmU@ma%ROM6{#Vi*H`F=({u;){^( z-b(D~gQJz$@v?TDMxpLs0y10&^T6#GiNQ3Vz=!`(f2y` z+=J$YaDCneS0-0r*6x5cH1(1BQEWmMapT4Nm3kV3$esN!2V1+C&19!%b_cD#rH>4A z$IdasZrfvqzM+?cYoblea)tTb!K!QMqf*+U3c2xuUZp*a(E``#E-;BhuRec3+0Qh$ zU<6?9MjMSr-yCi2{NK^iyc3|7IUbiOo)MJq zwRRg6N7){1^qq#D>I?tzPEyHj^hB3>JdMHN>hFQoM293ZI z9j)kQW7>`L-vV&}Zx5q63T90t51v{nN)&E_P+&iUS@b_uC0jkS|HZi8m2*Kp?HKH}nsLg5=}mDv71B*ey~ z?OqGyA>6I|o(F!(Yk~h8m7N5-0K^oI&o2}9vw=@^?@%d>I~^jQu(;}|Yz{;NjYGXy zxLvMhVq(cVeOvc#FD}7gW1=!}Izd~Z@-qw}p%%qb#ywE#b_wyd&qeUEx550mNPg9# z_or9v4ed}xJM@b-_(&Vv(1t47P+1$Q_Vq6-_rld91E`J;mif2<tb+leoni)e+#7 zN^P>Vrxe>rqMcfyV(H!%4wS4@Sqhq7kk(eSX7kKW=Q9>+|0G|0$?Jk|KcaY+oXg(! zReEBcC0v!Ba6^(1UCv+MdS&3ccTE;~7dNLOZ#QY-)JR^Q{l;cCrSmpeC)us)BlMnAqBvZkdcSNeuGVk4E}IZ2@GU=?^9LImX)(LC7>RwkrpQ8surkK)nmSrfN~84&EAT-uO`dtaE*Y$ z+Wo#q<2{4wNR5E;d!nQJ`Bf*d*NM7b!oj^;hO@`d%JF!Rljihq`#qpO)7*d`b|_|Y zCn%DS$Sj;7{vv{h0VnO5c220u^YjDoVUA=AU}^zLlB(oPnVk8Jyj5=e)`Ce16j!rZ c{_F{QpKeu^q=W>Bn$5EL1iepNRB^EX0AK8CjQ{`u diff --git a/pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc b/pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc deleted file mode 100644 index 9ff38bcb54090978b22722b4eb9faeb763de4bd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4603 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 diff --git a/pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-310.pyc b/pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7b67a47a1f0c13005e723230136c818b9274c26 GIT binary patch literal 2696 zcmbVO&u`>37>%7wCY?@yh<2gCN<;_=Mo1%ZS)mG{u69>&>aNrkhp1BI#-27Mi3i(h z)zS1q_lEYqH?}u8bK|=IMXsFq4-hB5&ofCg(=I|pitRY|XXm~5Jx8vs^&Ge!{PlG7 z5w!lmhxX;d!yerF0TkTfBy*x!O(Fu%G^06N)v2Ny+hqGXXygi1(jIc(#KkKooJ6x^9Q z@vJ0?1HMw>!9jGbPfY_AmSo|*Olmc>O@~Rikuct>Q6@>^z z7ILA-8Jn;iI*f$JFk>NL!om}&m`Yh_p$bJ2YH?f^TKK?&p>g^0X zh2K)Sg*>nP(j-`~8EJsRnrb)d-EbBKFvzl7`7`P)KeJ*DLa7xfkTM-W5p)C6Cmxx6 zejD7kiXp)*)fcuKxVPb9ijs5;LC~QEDT3mh{M;aOkQRxRJVTTL?tCogP=a<_eV`gZ zR-L6>sy4D?rdV#@%;misKA%Nt&uH@!el{*4!EsJl7O-Y6v|;&pFl=@Oj-XI+m4|N? zf-|6M6{={pl}SrzR;wu6c?R#mVC_NSch||}{w+jXLl<&=L9t)L{Hb#axm`NC2Q7jv zwQeYK*(uX^9HtQ1d_ zl1gnsFK}a-=!=Yvwcu9ZzzbkMe^};a1J&Dl|1m_-c)D!+0aoa$;!%(JZk7zveV=82)C8!qA1LwKRiT*2DiOl64@o#bg%$=IapsU`6ñg1OCn zXl&Wxq47Vfo6McX#YoUNv}9$J5646&kn^Z8AuwYO!4w_0S? zBfo%MSe64npqtdP{K>zuTu;1ZX_%9i>2+uz(^GOy2xKKPS-yhKhRlaHYto5j^ z`sTMHL`MTEi&C7)+Uwdb)#hyGYlS!mc$%YoH{5^Q+_uBrkO#j33VpbCuZ^XE%Q&u< zV?@Cw%O1?r=;rJG9sboCxIgIOL0vHTw}`7=jAwkAVY?s4KY)qM-Y7(`>Vs-cn&iTq zNN&#`yFsfi^&yN<_p!i3sa4p+3X=|h0rVymffEqg>5*VH=mi`74TWz9e$~z7@o`!l mTdS}-wf{3#opwwss$B#_SHV}aJ%5eATC>9t;%}38+yj++&pO=@50SI)e3^#InG1+^%Sj7ZXCTAoTz8Gw=a(nuWTzJC2jnMbrNm;4MCB^!ir!Wb#0|2b|9TETl diff --git a/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc b/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc deleted file mode 100644 index e7553ac6da98cc5cad69f08959e1b2a9f0898757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3518 zcmbVP-ER{|5Z^oBIhPP~p$&-QgdC)poJdUzm0F@u5?Vm5L`nq&>RLJ(--S5%t9utd zTpscesd=D}6+F_4rbX!=(LdpWP9i!938_!K8Ksq4o;tJl;XB(&Y1j7d-ptP2%x`9P z*FUFHeFWOy;}dh09zuS{hoFi6Wb-sk?h~Elh|cMJnago(-EO#khEaJpa`MPDTwc>iJ3hRL^JqCvnkf@b9sD`XCgU6yi!A?k@` zvI=X~d;vmoNh7%c4tovF?%<2M*g=&*SF(fJYxG8R^>pEjy3|4K16{ox)Ez72Hka!M zxcXcvK&5f)<8r|?{}XOSF7OUU0e%>c%^#urp1V)12-ga51m0b;3QubxJ1l?1$;AWaT!=2q!-b7cuEHAbOOF7W?aegQ{n}hs`j{|xmY(SMKM>> zv{JQXX__l*0Z5uwEmRCwKsh%ZA)5xhX;2O6rd6oa-F*?Jal2lk1P*G|F>s zucj3db4@c50%hsdx#C3rGUzh%H%r%R^}LtBUj9yB`1GCk@^zNDHI~tZdMSU)%zH^} z=Gn_3zq9o_6f3T=D=<47xY7?~^E7mSEsbv;|!n!o`_*Pdpn*T%sf(mIP&Poir`2i8wU>JxZh^qP0&JO34j=~1Q>wHeF*acE@2Je<{B3- z&>Em?-BGNXavkc@15F7*%l7ptew(0%wMeVxgmP)#=&~?a_n4z8cmoVF3?`bO&|T2G z1MMMcycNRH&Uyo7QO^=-_LG4@N6y$%h9bEbO-`IM4+mia9%4$u%xgLaUh<8R^M*BF z)6qw>n~yUTg;kyz?DmGvdnw=xj#l&XuC;TLb404xaj*|6MaC`KkIiXLA+RuUM$tsOp!4*M0+PY$Y) zjjA)EcwVrGo`p$#qq30hw^r^$9fb5>xp*ZsU^OfJFWajj;&_mRuagU{wLw0p96bPU zQ3W~#1I6n1HV)k=TLp^9bmYpLt+#7|#>P-s99_5{fEsfYx^NR5{b}CGeE8d-Gkw|4 z%&uo<9q8p*TbkVl)2pB%e)cbfyGC?Bc^D!J0%41v;Blncp7Yf%bgY9O5ic zJRsd<Mnc962m5bN;DWez|v z;qnlCHiSuAm~0AyINBs#x_*+}+2lp>aFamyG69dvS3SZ`lHB8nLrtC+$D0H?Vdu8Q2DkP=8k{16l~Og$}JOOvGIS8j*ld1=I&Bh5~UlnJhcEbeH||&Xm%H zhdwm1CK#U#zW87?QG$PgPrm!o37CbEH{t_tC9MhJ$#d?^ot^G(0lmrIuXFC%bAIPz z&L64N0Dzb+b$hl#jp;fw&eV&SscU@Pa7*=?F;%M4v-7p0F-I>t0i}Mi zOp9*z5lWaeC0}{3;Lu_qFPP=X;5-e%PUm16N}__$ed5o zWO-9~h%Kmcj7PQA*jWP^$=JD{_V<+0w~j}(wb*$8Wc0_*gG=P9lpi`v%mH5$_BRi_ zUnw}we?q7z#mqp!@wa*vrf;R2#Epoqz>8cbUk{SVS_#~Fomio(2yy$xld>ju?Nwj| zFGOGvTZU6o@XQl4G3je==+Z~1p4sQC&TNA+hL3#BvP!j*YgxW-3DYgBR;W^6!FPT- zcI{Ahg)$589k)(ipu`F&BSfOf^YOYZ&)n;89=5xmbU=Z|dQ~@U0E>Kyd zNniMWU6PJ3ykZ}Aei9Bh- z4dja4{IoMyVnB!xeUad3^NIj5C5B;bDr^K6hV>yREjF#V1%^m<1<%Xvf479h=17z} zJ*aPk7$*Z$R42zhef+1HR_2hGIrRH*YvP z&7D*57W>F-FY+;v>5Rb?)T-fcu6=dwyEj|ugI@YzD}B^UAH9=4c1J(HtR3e-n<;Em zuq%N^Wx%qkynBWHkY#-_Td0JTKFhM}Ma$xSfv+{fZ!)i}eiFV|F0?&7hN_@hO%((^AlSOi0IkKiG>NtE?lbasPs=9YI0lO94 zt!yI6Z7p@gQ%4@lvbrBBJ6CYGqJ`Y2q=@~Lg#27aCc4bv-PV?x_S7^=H<2=e(#?qb zLR-d#wv373b`4l3Bn}|g-AuCmpgDJMkVc~&eO7kP$%cJa_98U-3~K{_dy52eu>W|f t9SI!pE;|5640HzpT}eoibf3KQkPQAs^uNg)Ysn+hgtX-TLvZB+{sov)29W>& diff --git a/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-39.pyc b/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-39.pyc index 38798ceb2c927a277ffd2901561de5aae864b7a4..c89d48d2c118c9f10425ec59e64d55a8a29a3bd0 100644 GIT binary patch delta 57 zcmdlgyiu4tk(ZZ?0SI)e3^#InG0D5SSj7ZXCTAoT1|I L25qijvSkMVxcLyh delta 61 zcmdleyj7Sxk(ZZ?0SH{?^KRt!Vp8^Wv5E<(OwLFw$_*&W&q_@$DUJ!qPtHy)@h>RJ P%+GTy$lP4QWXlc!65JCz diff --git a/pocketoptionapi/ws/objects/time_sync.py b/pocketoptionapi/ws/objects/time_sync.py new file mode 100644 index 0000000..e5d7995 --- /dev/null +++ b/pocketoptionapi/ws/objects/time_sync.py @@ -0,0 +1,70 @@ +import logging +import time +from datetime import datetime, timedelta, timezone + + +class TimeSynchronizer: + def __init__(self): + self.server_time_reference = None + self.local_time_reference = None + self.timezone_offset = timedelta(seconds=self._get_local_timezone_offset()) + + @staticmethod + def _get_local_timezone_offset(): + """ + Obtiene el desplazamiento de la zona horaria local en segundos. + + :return: Desplazamiento de la zona horaria local en segundos. + """ + local_time = datetime.now() + utc_time = datetime.utcnow() + offset = (local_time - utc_time).total_seconds() + return offset + + def synchronize(self, server_time): + """ + Sincroniza el tiempo local con el tiempo del servidor. + + :param server_time: Tiempo del servidor en segundos (puede ser un timestamp). + """ + + self.server_time_reference = server_time + self.local_time_reference = time.time() + + def get_synced_time(self): + """ + Obtiene el tiempo sincronizado basado en el tiempo actual del sistema. + + :return: Tiempo sincronizado en segundos. + """ + if self.server_time_reference is None or self.local_time_reference is None: + raise ValueError("El tiempo no ha sido sincronizado aún.") + + # Calcula la diferencia de tiempo desde la última sincronización + elapsed_time = time.time() - self.local_time_reference + # Calcula el tiempo sincronizado + synced_time = self.server_time_reference + elapsed_time + return synced_time + + def get_synced_datetime(self): + """ + Convierte el tiempo sincronizado a un objeto datetime ajustado a la zona horaria local. + + :return: Tiempo sincronizado como un objeto datetime. + """ + synced_time_seconds = self.get_synced_time() + # Redondear los segundos + rounded_time_seconds = round(synced_time_seconds) + # Convertir a datetime en UTC + synced_datetime_utc = datetime.fromtimestamp(rounded_time_seconds, tz=timezone.utc) + # Ajustar el tiempo sincronizado a la zona horaria local + synced_datetime_local = synced_datetime_utc + self.timezone_offset + return synced_datetime_local + + def update_sync(self, new_server_time): + """ + Actualiza la sincronización con un nuevo tiempo del servidor. + + :param new_server_time: Nuevo tiempo del servidor en segundos. + """ + self.synchronize(new_server_time) diff --git a/test.py b/test.py index 5e9fc5f..b71d8d3 100644 --- a/test.py +++ b/test.py @@ -1,15 +1,31 @@ import random import time -import asyncio -import os -import time -from pocketoptionapi.v2.pocketoptionapi2.pocketoptionapi.stable_api import PocketOption -# dotenv.load_dotenv() -SSID=r"""42["auth",{"session":"a:4:{s:10:\"session_id\";s:32:\"0641660deb66bacfe493ee595ad5bcd6\";s:10:\"ip_address\";s:12:\"190.162.4.33\";s:10:\"user_agent\";s:120:\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 OPR/107.\";s:13:\"last_activity\";i:1715088712;}bf42446033b557288d0399ac1527842c","isDemo":0,"uid":27658142,"platform":2}]""" +from pocketoptionapi.stable_api import PocketOption + +ssid = (r'') +api = PocketOption(ssid) + + +def direction(): + # Selecciona aleatoriamente entre 'call' y 'put' + return random.choice(['call', 'put']) + + +if __name__ == "__main__": + api.connect() + time.sleep(2) + + print(api.check_connect(), "check connect") -api = PocketOption() + data_candles = api.get_candles("AUDNZD_otc", 60, time.time(), count_request=1) -api.connect() + data, diff = api.process_candle(data_candles, 60) + print(data) + print(diff) + data.to_csv('datos_AUDNZD_otc_test.csv', index=False) + while api.check_connect(): + print(api.get_server_timestamp(), "server datetime") + time.sleep(1) -print(api.get_balance()) \ No newline at end of file + # Cierra la conexión con la API From 3a4010c7aaa2c6d6ae4b5d03fc85efb352087f10 Mon Sep 17 00:00:00 2001 From: vigo walker Date: Fri, 21 Jun 2024 14:36:59 -0400 Subject: [PATCH 30/33] fssf --- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 158 bytes .../__pycache__/api.cpython-312.pyc | Bin 0 -> 10203 bytes .../__pycache__/constants.cpython-312.pyc | Bin 0 -> 5855 bytes .../__pycache__/expiration.cpython-312.pyc | Bin 0 -> 3090 bytes .../__pycache__/global_value.cpython-312.pyc | Bin 0 -> 477 bytes .../__pycache__/stable_api.cpython-312.pyc | Bin 0 -> 15716 bytes pocketoptionapi/indicators.py | 0 .../ws/__pycache__/client.cpython-312.pyc | Bin 0 -> 12988 bytes .../channels/__pycache__/base.cpython-312.pyc | Bin 0 -> 1256 bytes .../__pycache__/buyv3.cpython-312.pyc | Bin 0 -> 2081 bytes .../__pycache__/candles.cpython-312.pyc | Bin 0 -> 1487 bytes .../__pycache__/change_symbol.cpython-312.pyc | Bin 0 -> 1148 bytes .../__pycache__/get_balances.cpython-312.pyc | Bin 0 -> 876 bytes .../channels/__pycache__/ssid.cpython-312.pyc | Bin 0 -> 885 bytes .../objects/__pycache__/base.cpython-312.pyc | Bin 0 -> 879 bytes .../__pycache__/candles.cpython-312.pyc | Bin 0 -> 4603 bytes .../__pycache__/time_sync.cpython-312.pyc | Bin 0 -> 3461 bytes .../__pycache__/timesync.cpython-312.pyc | Bin 0 -> 3296 bytes test.py | 24 ++++-------------- 19 files changed, 5 insertions(+), 19 deletions(-) create mode 100644 pocketoptionapi/__pycache__/__init__.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/api.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/constants.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/expiration.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/global_value.cpython-312.pyc create mode 100644 pocketoptionapi/__pycache__/stable_api.cpython-312.pyc create mode 100644 pocketoptionapi/indicators.py create mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-312.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/base.cpython-312.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-312.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/candles.cpython-312.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-312.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-312.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/ssid.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-312.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-312.pyc diff --git a/pocketoptionapi/__pycache__/__init__.cpython-312.pyc b/pocketoptionapi/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..140c81a27ba35484fec2791c696f39192f060c6e GIT binary patch literal 158 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 ZAXDFXS?1}7?FlzC@b>Jt1XDVL{{uF%HMIZ$ literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/constants.cpython-312.pyc b/pocketoptionapi/__pycache__/constants.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0ac14781e260c587b6da4edda58758023c55e44 GIT binary patch literal 5855 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 M%%4zD_%Gyt0T=yp*#H0l literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/expiration.cpython-312.pyc b/pocketoptionapi/__pycache__/expiration.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb86a1ec0f7ffcc94ade2117cc566b899476a0ae GIT binary patch literal 3090 zcmbVOTWr%-7(U0b6DLlZrpZRPvenRWiD11@1`~9fMqyk8yKz~?m?|%Ji`&G`j-5d( zXUnEZYXOO(AyH{O6p4qTR$8U)fyYg}OxjCAG7))5LmDrAt6bQZjRXtJ?D$^L*k*a^lIZRvIHN%xxFzdpq>;UgzM3}Y)P#hsG|S_jWLb-a z$n%*E;GTd8ZBR-kGD%5Pk`Qerm4^5$VkI&O_15>An7Vb%5EBYXNSZEwEE$rli;70` zr4}ei8Q7eFJxP=^L~9k`&=E zW9r=jN7}BmM5I(*@h;JkUrka`)zpM4B}Ga_MI~-sqn872debU1HIU}qF7a@KwV=yT zBpKM?#*Rv(!nOP&_>j;L-(YO7p(J!owuO|MAbMr7O!NN+wtWtpVk}cyC=Twlo*_ou zOK3XUp%J2|Y7Qe|y5}QGIw^r`Y2rD_9_I*6GbsM5kv6aCXNGBI*gOQKGKg+GX`tL*s3ekZd_vDWq&qoJ} z(Gyd=BVuOVmljO?k;@0?PA^5SB}=jX0^jePa-qxqIb3R8Utrhg4&3k9IzLqG*pX-3 z?+KlGwv*7bU4?Y?K2A+1Vf+s@jV(Mzz0%a6YVjgdt6IjaRdz$gG4<+^J&WuD4Kg%Z z$L`$yT8P%B%sF-23J6fEyJpTTqlH(Udsj=&GNVw{CWSnw$+e2!i$2-{70+6pF`7C} ztfY^*7{S(DErgYk4is!Ot^w9|Mv`n#_l#?04;T zzj9#G3;TF{Gt|bOI{%aITBoWbyAvD1iB0GK@}5`r(5Ppxx#t<$GMjEq}vZdDmz4J@Xk? z`xt#Yo7zHk?ebC0BaFMk=)y4;Sw46tLT@|BM_Pb^(6AAT9)u<+p>mgLc`eg?pJX;1 zS*EF}ZiP}=rid079Oxs@!knz30|c~!a}MI!9Feq9#r8_+v;v^Y8zvc{5NZ1rEt66J zrWKo|8}Wbxi{v@V|2zz~2awIi!|+ccpS3wvla;eJPn49TsoJQGO`DO40k^6kVgoEj zC@i{!4tkPqAnSu}EP>@YbT_VOb1HQm*$3w(e4u8(=3DoI*=rUa)aeyD7WvaY%K@EGhOGl+=aiV zvv%+#JT-+D1T9iDBw zdUP)G?TPDyi|lv)8~z2M_|o>m3)}PUul&mISP?+jN(&0ca_=~=1w67FA%K;1t39U9 zYv)Aw26D)phw%|VkkaK$QhA;90uRM?V?7Kj9*psCNcbIX{;LJyI7}aS8NBX6U@aCO LzTSyrj*PznoXfO& literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/global_value.cpython-312.pyc b/pocketoptionapi/__pycache__/global_value.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c4ffeb5de128e9a63230949682929b4a37b0e4a GIT binary patch literal 477 zcmZutO-sW-5Z%<8YHSQ@sr9P}o_aACk0J;n_MjGumtK}N88vk6hTX*4Tl^LN27iWU zFFA%i1@s39-gO+nM(U-t5eWZCeE6>pi}6DujF%WERF>@pFX5EAh#ofPtv^ z#$W++74ss(MAQ&Vh-HKokip8t=v2tnD5F#2V>WR?^ya;^VP>R#bIEopk z@a*we1!APP|5NE$1`+6Lzu!I6E$;!mA)Rx*qadY_^OH(}N?-~-ty{*~$O9Vqy7pJ= z`b>-_A!ujD;?QTs?@S3Q=8?99^g&V-*&F#OPBJ}pZxl%7J_Yw;%=i$b+bj3G4kKLQ zwAXdRl8chFFmUg=zyb7$@fZ%n$#m)XQTQ>36S;C;lt_tsSr4lvYb?`J^sxN)yyW*&o{T+tXeZ%N?3UazMQXZ9*;1rg z&0>H^7w_4|-k#*!-HUSw0{Opo@L$9(1#(XVAl* z-m$X5GFHbLEg$m@`dHeAw13dAe_JtFY34-B$2uv40m1$eH&`V&5LcVIQ=H)Zh!b2N zo3#pqHIt^G`!jkO2%6Ng5it>p#v|eAR6Hgk!}nG^a#c)R98XB`SpQpR?wM4NAP$F< z(S#sH5~yJl#P^e8L~oC^O7mdB|Fh$WzR!K%w7|_{F0St4IN6ghu{wz6O&{y&OI$v8 zj+-+Ln+5Yn&U|UmGVmEyjToQOlX?l@|5+=dKQ%8Dv_ZX1VV%%}PS+(aXdaMVs0ori zF;Pi~LWo9i&#anasx>h=E-F-acJ_-my5CVmS?QjTM&j4P(W|1|T{H{b<7`&qY*xbK zQn!)_4@Jcgl3nAIUpQZlhR244@at1e1wD1W$|hEM9SN$B|j?8FD$uaqo(cPdWLg zzWUXMBP+gFQ_ffA3e?&(do-PFjcE2TcZjtxs?V75PR~o+J<~wYta?YH@u6@uG!c#_ zMb&|1I2IA_ajbbpoa!MC(hKBTeA|qFr5w>L_taCH@ieDB%_(d1R*H;%pDm;E0w;2` zV+PHFY0v_0;0CRN1+h)ABDM=Q#16*WPR83V;%n>|7h;d-72F?jxjj&ZcTd54x!^@D zpHPO_kFxTDvI?PE@PA|)tVDiAL4E-5l?CrrLI7V^3ss0~CVjyg)mz9UQ?}l&p01wK z+hP|ce}NkTll~{uG#A2fwJ>c;7?Z$-aw)-#I3l9rfAAdGT>|dBVsHu zC0&S5NzrJydtX-%zw2AQy+`=-QY?9$zkYCkX#d_I-#tFr(6}5QmJ*@xa6*(rN*Dr72q(g7D^*0#(S$T6 zhLnViA%&unk_aWlv2m@=u9w#lua8S|m~@C*e(3~;b#Wkc`b7Wn6L06=k6pZY?#v09 zcw4nVlB$ldG8v0VakZQp7bmb3&`t4i)k-nMkyR0+!-y40U;>ioH5ud#g`^k;5}K+m z+>>2Kc00OIZX=rIHq55#0n?oIhU-Zqf5W@#+?K7a$E!D6Lk~}uZ=JKQI-9b=4tnm) zZs+OQ@btjZhrPdytQEi%{i!^5W5D{50*g(NZj7n4d zi^giyIQhb%_NINkDQB-X)SNU&b&@vp{)|V21>UR?NcQL0VNzc{v-~yGmAepODQTHh z`xQtAQC97dc>Jm)D%2ux><5p+77qI)9-FG$G=_qbGx&s|5iHYoa3@%nJ%8dcN7}P% zsUq#^SUR5e^e(^q*wdd4)Gi#neJ~SfPY2qU9O*#Maz#4Om-6;K3Dmx1da3#U*Xf;R zQw`*68IWlYvdNK8Q0f$-O(L_hXlx-#m}-96;8Ec+HPV8pU|;V@`*z$tmG*TmeLd~# zUiPMauce%?ZQbA`oEX=C7l}gXUP_dKGpK%17=?x}4hDuWOa~LVLlb#cxd)Y1i=2#U zoZ*PXV=*z3*s}9Ikbkny2F1H2U-C_~rZga$<<^|Oo1S^kt>X))Z=cRowWX`tR;qUX z+S$H!*aTtNuz!if0_Q5QS-!%+a}W=W=s_^uHydDX#x!jjB~zy;7?XoZG40?IIl$M( z$#pa4L=MskmTB{!aeraXPvW;Z!8&99z&r``P0wqlYut6qx4CPkpgs8$bmNAsVd27~ zdx^LZ=aol4jYZ^mEY6RI&kuiPC|-GQ(+#!M3iIU zG3a`c7o+@8G7=Se0cleIafOmPEYMpX6(dP3i`K3jPbQ=o`=CT8mw_4Vs0&_K?Lt@_ zgE$PFkmb0{hog+D2uct011EzHC`X32q}YgRzs!=1Z{z_CSG6%7QC%mlM?_`>sW2se@z@xn2i|HL7Qo_OlHkYRc+c~IztYk1LY48&2sB*hilu@=3SZQ?sRkaa^h## z|MGg~z^U|sQ>nKuuQtDv@-}9@jTvui+S|J7ZCiJ9{;JQPJ2?Ng4bJS^w&tx!Rkbgf z?kcIuj#Y2xTA=P<)@>;GLa9dke{|$^?r&ZF&6ZCb<^A=RPwH(*M^KOpIVn$r{xTy` zH}Fl9=9e3jv#2p?fy`#|=p+_JL%TKkIg^x-J{h7Q*Pw5-NW< z_O(E>re;#!_S~p)HX`bh++?GAfOvt~d!;~S9(RzqV#$@%IZRuq)Om@N(;nqq(P`}H;LAcvS> zyZSD8Y%D>Z85UmNeu7{-3x;x$4+-{{e>1_!?TMWF8AY$f;pN{8c3QE#@|m>0yfwkG zscwGeXfvoTM@=1UxuY)(}}$+phezhoqq zY5Nw%%gxw7uuobA_AF4mt^w5oAS;t-ntDakVr2D7VJK2)EvU}P&=~x*Qb_Yt9_EAQ zlLIng7S$$_)|={hCw4U!zZT=!D<6+UlCmrcypV)4V=eIUaZxke|L1?WL*eId1brHS z@)viYmQ#+Bj6_658BRv!Z%|i`XnbS@t;u1$X_DTpfo}-Cuxgh@1w^Vgd^^zxM=Xpn z)h#Jf3@R4RMb%1PS}5G8D2}TZ$iARcH+jNi@g)2h_HZO2O^DhP4hB!&*`QGK?*ppJ z-)5v}$S$GKF4qBzX4}f|A!o|JNtb}28RRMx&;mfXZ9C_zH=Xm&RcA}KHJ5JAR@BVd z*R2j$bJkbAc=?Cly7R3})BZI6eEYNe4n5ereEybo!Fk)6@dwlX;L^^={@y2tU*DXU z_V+HgrTqt>z<0Eh7os`4y_KE~Pn=%r^k(^d`K^h?iMta^-+OR!)p_h`Wz9nHcJNO+ z<{a7b$~9j@#@CwmwWfSsfBkBv?`*p7Y^v`YS%38!4DQMK$sc@g@tbL1+mh+AFSr(H z`txXJ`@Zz{eSe);4ZQlW_P?LcoR6gO*B^mHV&TH=3qS76v>r;g9(vH8ZaunMbqv0X zx*g9gTy-OrrdltqR=t(2ZC&&FZ=Rh$drP@-aXrBK0?%tWf1^gpkI!e?j-=a;WZK?H zx4rSu`cPPDJD2jEOF7Sd{=7p+D9vl$z|9Nu7gCM=4_h7vQuQZRy(iZK+Zjq}{(?CT ze$wwh*~R@`m+RCv%ikTSJ5^=*Rh13t(ymnji?zv|zzPPG5qa#mL{jM*U}8$%#3WJ_DHJi!fJ+iWvE7_y4hA%oo#B# zH1(#NdY6MMO|RZ^|6`!(ZrjrCbnD&+^$(Ay51mOJdM8`8?YS2Szi>la9{W1h{Iv^Z zx64x7FRuErD|bFE*p*G#mA~UTZ_VPayQAs)p6vErOLgh(dzQccc>Dg_?>sm;cQPAj zTD(GDiJDZPJLT(>n*0T>VNcCeW7?TiaU)*JGftTn2&aE-h#A& z7^>Wb1i37xO;f;!h%sX@FR?MTFr70j4R@qT4x%V%(HxSP=dp3Du_#M%L9HSlU|DcM z3-K6uOo(rGZ@Hpj@t+{jBshDnjihNx(lYpLa-1r|>E|Ei%qjaoQ6sB{ib;dL8 z8Eq*l#;f4G?=mPE-BF_4eBW)9&v*)YYuj3P+9Nob>hRq68nja$Sy1Sm4CW_1c#h+r`QoC< zu~?XIC;8dl<<1d%m>hRwyauih^CzNO(s1a(UzUW^%%GPDW8~!t(i_m^IBS48_n@H} zH3pd7@c+_$uN>by$Q0AV@W$vR<>SN`Cq87kTE~YJ?MWh{PQ!jnpY0@X)IU8N$qff zxU>E{7N(uEMw47juTCP zNaVQl{G-|!*Q#agVQ_?Y0_h|MBTS=u=&)WNn`#PawyIkg&gFTLHhLA5GIU}{lmZ~i zF5c*^lyDg8CBMMO%J0BFKteTug(*){wyrT#*PE{EU8(DvJCm(#Soq-f2Y03Anw8pv z^QWKGw#=R0T;)kk-JIuXMa`|5m5Nt3xO&%~x&Cb1uDRnkPtTuT^|m~ztXVggRlM?~ zs!lr*X-~roZC^GopLlR^wdy#G$%f`kedpu)&gH6~)%|5%ruSsJ_hhPfV6Cq4hweM> zyM2G|Tep;~lo%_L5Ny*x?ejLSq2+Evde4c~`jd0#Htd|g;Yq{JyYJt5eQ9U9q4&0PeIJJM z{4iHjxA5-mckgzrRCmp}(OV6lsqRQucPve$s*$-rQ++gDef00Gsp_LE)feX6Yfa5R z{O+CaE}aFU?0o&w`RpFA?s(DMM3ZiWkR{&yYDw3@u;t;3SM)71AYR*!zixUT8rH$(RAUDOq3F)7>BhVRytw8YqlBtLerS=1Vl-{CKGY=1LcO(KS-f? zXAWXaLQ_X0NvKomhkya39Dnij`D6U9i@5UC$)A=+u5|L}^sU6ieEXhj3c(VX}>1p{sij90L8RtPO zlqeQjwO+wOtCnc|8dN4N^d^Ku#wbHLdyy!VL@@MpiGhM#Fm|KC|Aw2v%-jsxh(AK@ zEoi836B^PGw!+{?NT05)u&4>!RH4m2%l*>wu>V)*J~{X3!pfU(&+2EEgop+{`&R_j z0j7X|i|~*=4tE!hi@ox{L%IB?6fGiB%|b%{GfFr{FsS|8 z_SE*SbX|9*ZeJRI``=!vyEJE;8=fzNSDdxEqwkh`#lLsX_C(8A>{~o~%ZJzM`i1Y@ z{?1bH)^}E__rgWz+m>=})9!Kt9MDq1@fmt7r31;l&;4S6TGA|xFV%!@ z!Beka?;0(k4~=~aue4e7M+d#h$C#R&9DEyM99ApLutH@8qw3L*U^X)g@U6+jl{hqo z0OJ<&h(!K-2HR?w_q|TOK)pd{X=XIpbGTiK(=9Toq1PanAN`c>uAqu8$VFVdjXe74 zF!dFQkCCiS$go!PR+(YaPe8SxA$D4(+w*89Dvgax;#3$N#O0B2490(i?!8bK*sqY( zxUNDj0a&~_Rch!JWI;2MLp-K`MJBsOStstsNHpAhbII|j1ictn3iYcjGTTL~*2VV= zB5C4IOo1$6RAF9`&TBG@ z@PW?a7|?KB2Koyt5g5^EN6a&j&SW?bHkgYa3M&j^0QZ19HNaqak2=|6;}9BrMC*(@ zU|2i4ja9Jb`MuMRLIPz`cH8T#Gv%;E(*`{B)i^RgyfCB-)G(NofE9==;9!UtEIEoW zP{YfFUB_cb%P`z&g1EOY8umH*$igSOOI0fzo1_OkCxcEv;Z$)=6nOpTXPw=V3E*{R_h1sQ)O~&C?3U;KFaRp%1HkW z1YHGa>fcjsA91w3BY;plxj^+o=k3nL@2yngFrVyuf5r*))37+PT=gIU z(|*-?JnQsjoXu%x^WBN%QxD-vXkK-mWtmj-Zq<@jZ!fZLmd%$f3Ug(v&K>mTo%b&O z!E)OiE)yJhQq#0Jd^?`0*`2Q0y;9RT=gImT7W)bI+})4M2^n8k+Sj$>>zT7=eKm{L zxf%E@G~iPRv#p?<0Uz?)z3_5!;TNb!fo@6}j)6QV??wqcWLL=Z7t)qjzebsNs%<*( zlON-YEf@a^J|{q?kQH8VG5M9W@0Gj5OT#O^eJSTYZBVF|3zTMq>O$g$gDS*-`lm$$ z@zHNq=(mM0`e8vCRmc?=4P#T;85#!tRI6YZ?P*_oO21i*d)?AFY=7-%jkPL%_Chyj zLm|~23XR2uB*aTd^@c+4Lq+Q)o=^yzpMD4s3d#G>w&r|&jZ*y-ouTL)MHeX=K%{!% z(FEQa69KgZ&HG9&2X<*jo~G1?6#ayvM--(fqE(WAO%eH@*^ILzbD36#MQunZ%ZNVW zvX$Fr&uv&MZC~3sXtMQf*iE)Q8+Nnpl?|uOR<}`Zvb|1uyEg1)wyO2*oW1gQW{0ir znFXnJO0CziJZmlwsSR(l?YwE@sHwrWWBssR9@M|F+Jeu#Z`c~wkD6HtZ>!f!kXk=( zVwp|0COs3Wjn_@K{m+OBZ7?*BU@f~>E?+_#=GYYbiKk4Aqz1+}|46h8ziHBb-L$Q^ zgmf68BSm%Pla7mT;g&0Yy&$1A=GRu8+HEX&p&N^vDEwuncFW2G<%}!W^rI_9CI^~K zN7*=7XD%BiDpen&H$*@7WxS*Pwv;U{Tcyn_haa|TZ1uYQTQo&mMmdWJ4n~vdH(dEY zasJ9cXlqo|4H|(Z^Ldiy|z(qHu3-L O9=4ixZEzH`iT%G=MZ2#6 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/indicators.py b/pocketoptionapi/indicators.py new file mode 100644 index 0000000..e69de29 diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-312.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8394e57fc384cbb05841d3a1a8bfa849e01e877d GIT binary patch literal 12988 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 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/base.cpython-312.pyc b/pocketoptionapi/ws/channels/__pycache__/base.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7dd9986cad7a03430593732dd6dbae410e6c9d9d GIT binary patch literal 1256 zcmZ`&y>HV%6u+~bG#E-Nh}r>xZZ(6wpbAA%B|t4=pi~r=ELYdQv~C?cy>pr->cEhp z42ZG+0*Hl?m6-*^fa(?gfQpu-6Ytqh8U^|!zk7G@>-RqVWqR5qK)*hBnoK9;CtikB zDumNJARG~&G>AqX6Q2%8o%^MdnwAFMtZ`C^EAJF7d+ngLO4{3aY0*X@zdibYc$Y%DD`ln9#=hoKNLW9LiG zOC_Xo_JYm0>xMf*IuoIsiF8g^IoNXOxpHticDt8WI1i#A;k-YMy|jndE12pkuvg^7 zB-Qyt<4xrhuEaBt7leSa?$tqn?vd@GX6)Q9c4X`c`>Y-4!|hok7VV#}iO6SC>~@4o zSQ1a{4ivj5BpXfBHb;Fb=2E!wz^_fJR3cgAwnRR+Q4E%EV5Yigdl4=S07gq~Ug86q zaR^c*9T}<17o$L@?B_zY<4B3IL0eij+H_7q3-|~gFMKRRmZ5p6fhD9mWKPYCVigVq z*Go=;AaQ2>TiGoCA8i&4)NNoe*(#Z>zTJPl|6|7fHe;JLxiOloSh~CkXIhRowuP5uezFQL7Xi;J^&H5eoC5`gPoZ$4Q%a9X?W{aU Nm+9fcAA)D*_ZR*uN9+Iq literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-312.pyc b/pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c4e350d4f7043708494c689b9c511dc79d376be GIT binary patch literal 2081 zcmbVNO>7fK6rT0|+HsPW{6Q4RDyiDIfK3!yRfx7Kq@k|bfYer%ELE$uXK**Hy=Hc8 zB~)@rA)2Lv6!M8e0_KD(SCoPxMSE&N z4fnK)UeH6C>>8D1At{jrIYX#&g;13#cjU-^Ar(qBkm`NXftHjpHc(|bBMIe{?K7B1 z$}F(hrJBR-!11b9;8a*CvJ+9M%WRLs;u>KD1BD=^f=m-vNI_}I8AYh4>aE6t81Pw@ ze$IT~F0+!>XU2dvhPUm8R@#ZS)Rw8#R%xQGQ2DyPrctG>l@n`vo2`wW0I(Z_a| zZ9RySO4{n3?zuP-5^1R!ZS@=Hyy?(O=1KFN6DhNAcs0DT`M$YenzQCiQ0GN&W=Dg$ zKKl>-`B1;;RBhhcK&KlNNJbZ`?fWbcnqBegRh&!cL1>P@$SR&la(1!K{2)(7Dsuj1 ztHy+aNf$}4#;RvIWqdg!i*d}P)nrBAD_wvm>Yfxz)dpSJ4|v89iqG8hJPp1hR}HX2 z9nK=J2CYYrDpK9kmP0|o4s44$r9kMF=%svooj5PAmU3VDjQhEUQ}&v+dx7!XxiE&a zVY)s#m(SHgKDvQjb8<~TSNhhjRv~4%A{Iin))Izgm2B6wtkt2gII=N62;Tf9AeYJJ zI2oVn;BUG!KG8Wa+nGGr8J*f1HpWux$<0wRI(;Mg=f1bs_2)+Vu`zq!n7y%hD}OWp zQ}Z|Z-lx9~KQcbq21{i5wu%lhIhG|-mR0d+-Nkjx0?~t80F9!NC`Y+df25Pcl%L&D5^dy0080ca2<-)D%!4HEumm_GO~9x((|*3t}e4G z&u5PT#+0H*TVY8Ey#XZ;Pz4Oj4j@-`y(Z%#U3NXNX*F!O&P1wbo{vBfQ8kTWz)6nn zksn4ffg}u4i=6YLD47I;AP?ItM64hXeY|cAJu|9CEYH=0|5i3T5Xyjx-v9y-N|E%w zt6x7DnCk35@O{2BICAyUgTZNF*7MH~&30zyo|>~a&it6}%pAUzyP119v(S0#*weYg zKY#Z4$m#n>PCuMm+#1lvCN_u2*nDSVYHK9*T54SZXeI}DK`!{^i+huItw+YkAt08y z2?6joko2JRCbCHIzZ*)U>QWabZ({ZGb^qshs=D!uO=M;t`>4TWKLkBQoc}J6O<9tp uCuH~u8Gzq2GXI1OJtGUx$cdNQ0Vyx7FTNx=zkF{(T9SS^{x`un%+f!}U<=s* literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/candles.cpython-312.pyc b/pocketoptionapi/ws/channels/__pycache__/candles.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..41eebcff40c6b37f4ef245d998dc2a5a1553f734 GIT binary patch literal 1487 zcmb7Ey>A>v6rcU{`p&21uybG_u)>karnplOK`0;#NR-5djU_^J1*`GSti8#8TxRBc zIqNK4;lflPrAP`2Qvu3fK}{2c5YD8rlu)E|xX^@#H@mmCFrwf|``*l(nfHG0Yk#WM zDhTMwkKOQ&h0tTQDGByDjXnZ#7ZKD(L?e2vC3;)e)Y^!RwvkJ-Z4z@EwJjZ8Ma0@h z#HRXvqcG66`-V5M`OZ>Cx-oUbjJYdWaFYr*>xd{z-2kT~rrhn(RbCtf>o}!x^Qki6 zY0~@zbGjT9<_d0tQ1(af0Rwc}79#qVCbZ%hp&NR+I+6o4(C&}*pCQj!j&`OIicY)@ zUUX?Qz>y_#LdhrucxxkC%X&DzNm;9i=+iu)k5?93 zoji~tK-`I1J>F75K~%6P;%#>NaxzK@z3r#ngsDn6@bS~YhG@T5A70t7HHKH7RO??Y ze7SIMes}(ts`tS3MsNZBBO7JZqgUbNE~2QdLA`XML49C_6;KvEj?>5#|Vv>HrxZqZ^n5W1tUAqJ3j+SwtULYxX<0q*KN$tsJv- zl!4rhNwC0NbwQC_HVI4V_j~I3Ax&_&&)3-)FDDBlae+A5d-}2h3_pt5_XAuGltuXnt^D zqp8{9<&imUT_|p=JKhAF10mgG!`|%iW;yK5Rrqx=)!}SLF*P&!s28rzsI9`EyMN() wSioLj^Pp36!`}jSU}&255WW99I{ye&AEDYGwym9e{?e>=;p>?{5s2Kz-z-m%t^fc4 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-312.pyc b/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27538988dc83db3c117a90a98da302953849ce91 GIT binary patch literal 1148 zcma)5y>AmS6!(23T$2>3pnia$GOC1nOHN2gl}bS>t%QoyPzhMFSnk(1^^cX(-(at*VvncGWh)JwWUoKyuXFvvh1Vw`IBc z_RMlZnjwX?gu#`>U#IDVMj9kB^w)4)r;u+&t4Ro3bd_hPnV*K`A1aG$2>UMPwBqZW zS{i+$cUdaCfP$(a37W)^gv_c5Ms_xF@ec{Q4vK>W3o&+ z$93xWpOSlfeIW(8eQ2wj!8)Qza=XaV1LavFvAhVej0326p&f?XpQzwPu75@Fd#HegIYjY z`D|Dar<85tP)BJvNSX|1eVa~$h}L9!-P2Si?lW>vGKrFIudcjnid=>&@(s#@gjA$w zOuY*o_Z>01(WE>Tb}Uo7wy-%3Yhvj54Z<1l5=DYjjCjf@j=1W9diGJpd(0{0-eyow zS~y&%%sV}B^D9eUBO5W@b=(NN7WWj-n1))ZQ>5py+}IKhLOu>dgxaI0$EZATpO?Vg zlVTfm&x48U`=gWlW0Svf<}~aAbNt%#V%Gsf!(W`KPtMe<#Wzc@m)<`8?A+?9=2zUj z0#I*7NE8r?vTq{w5<(kI9QIGnAw&`%Ay$$>?1B{U0K2I45hc_=&4eQru3S6dz@G2s zLFv-=V$Uw-=JaiK(ap1Qxe0it4CNLt56VzpmEVo2nHIKcw8%3#Zb_t(CZzua{m7Zq qtnaWZ@<0tczbZx7G7RGY-2M)39D?E@82+6fG3H*}`~&2ch5rT5SwjE- literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-312.pyc b/pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53705f2d5fda68fbbe1324cb77731d9f75517125 GIT binary patch literal 876 zcmZ8fF>ljQ5WZ(S!K7)Z5EKvtmO3C0*s0Vm6+)t_6lG}X!eSvkz52ZdQ^!vIoJNU? z)S&|-TNeg80qU<{W&sIAWrTzT3tLgj(usR^QmUNfdw1`?yZi3>K1@$n0Oi;F?&cu@ z_^F(+lt#wTLE`{8a1uhBc!Vfh3pG#EpaERp2W|**q!)Nk?`wAHw{mQf8OuzHHNOZI z8vEojoWf3D>y(N_$Sya}+m@MmB+6cs8Pm@N>aiRcAtW$&prE5$Kof@?gGVjby3A64tij zP8!6Kqyd*pRv5_CiW4h{(sSIP+7ju#jnNbXecq|tT4qG7EwW2HB9WLrxPurv#$dX2 z(RVuiHCxY0odoMd!Y+mo*UltqyUr8_|-Gb#017*aa8-nj68obk0H zBI~I3;G_b#?jGN^{^;7w)fdKT87|j8*4)o#{fAloYR-K!=U%V8X&yG;reDm3A?CoE zT~Zy?^H7>qC~e2Q8!Ed>>2{ZeMI;|Lxq=DrAeq4`HaJj6BnVp_=#xpw`xUq@alFUehwkYaeL;ruTGxL5y?Ll$_18TjbGEQ_t$ak3k S22-cyX|nio;V1gh5S~4+jpNt_5duWDQmUi46Oa@{77`GIT*O2Inrl{<+qHA#>~nU{ShiB6 zNWmMpg$huff|`l~Azup=be0TFDrWD_7D6~kqA&#k9ta|=i1aMaB4EK|5T!E^R9fey+}A6O%XVdQXD=4RNU~0>*nS)w$%H)_ zBw^fV_xD>&>rk+fJkYr%IQ086a(rLxj^0~UTKpV8}iiu!Aa-P;W?`125a-H+zp&u2NOPq^1;9RZYCuL&4 z2h}k0x?yH#GnN&28MQN*(dN7Y^^Mcr1ud7ib8q9=wy82MDf_EFXQZ8Fea->yqcWS2 t2j4K#D&a-7nFGD2uAsrJh`xqwULu6d;O=+0^|P{0wqI@i0=%-1zX6{xIyiBB$L<-+4n+zV zp+J=W12j>71vL#NxfXta!O)~)=I$I&XqaO5o1NX6`DW%*tyTe)Zy!g!4-DWd87r|1 zu)Ky~4k7qpz(WYx3_?S)V>9>r#>8w|Q}1yUjs}wVBE{QLcULC-Nu2bfA-@-B$;Yyz z^V_JiBfE*)U8SMZD2(NG1apw!GfZcM%r`@02EHZj(44_>@yvH7R?|)`iad4i4+5?K zKQGce6Us|8mX}Zw#Wx_%oD*oW))7mqg7OG44E7|NmX?E_rYQXMf%jZXrM=hv?Pwef zcBS%i?m6|l?MGgmv5vA<1aaRRYcKDB_Bt5WjVEbYi2ksj2r;cuCU<3)F^675bpT(k z)(@?B)g=|z{hI;dj6og29P8hqC+FlTGMT<;t043{I$g_%5v-Db1Jwa6*5ShD`~A23pUZVc z_pN4$nnBNmNGn3@WjlpLZE4n zXK-TO`r$CUv2eiI_-@#CV`;8X{*`{Unx?vlXX@nB%0peon?K=C%eV6a@2D&2pi$^e XR11?ab^Ee_Pl literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc b/pocketoptionapi/ws/objects/__pycache__/candles.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92bacfba4e7a0450779318482fe5172dd7e536fd GIT binary patch literal 4603 zcmc&&&uv<=t|Qh%k0LaB;SMT$geD_<7l-6RIbHZyBd zTO6V`YIA^!OO+mbY{XyDb1yNpN?7&Q_Q1_Fsf4(+@6D_?>%>b_0b&l%GjHbYzVE%6 zH{bf_L?T9@{qa*}`l~o0zvH0URIjsf3OdWgA{k;ymRykLdH7OjHK^m+RV6BDH? zSM8jWdWerTBv*Mq%j}$Zhmf*2*th|mWnz)UYhnMn2s|k-)d?_a{Eo; zn`s7&4cS$gU6^*`0VP9+bp6TM^d)9fmcEgnDa~gK*KC>=X%bmFec@cX%(GMCS<9C5 z>3NnGnPO@2K$a?3UClJ}#k^yhwI1O^s;TINH?b}d3#6fuA!AATRXebO$a4}(ulW(u zK>-mWSDQ0|UrQQ*(M1CBI(LDV$~JYXx>M3;U|$JmbSFP&r(%9sCaLXIXpxB!wybH! zo8qf!2Z$Aka&OTuox<55e$eo-wY?rR@fZ_zJ+NqF9|%C#MSAwM04~l2T_E`wFT%pA5 z-GOUa>Z9`$x&vL8mpX1&>ub#?R}Mcvd||np&Cks44qkAjj}Gg|({qPr+jEDyvFC^F zVo2@^rTN`K3oP`JDWS+>Uf#f}wx=~~pi1uoR{_?9l@%y9xMjArYoMc26-srxQWRqI z0k@H>5kskk<=?56ce%ZTE1OYr)fsBrMK?liYs!#mKe$c#sSG>H_>}G20d;SIB}2h$ zS6A;^e6SuL{N7p{O4o#u20-cOsx0qZ$wD*{j~P7v0~&Z~%t~Q5*uX zBB~58#T2;-7g6Z2FF`Dl2a55RqNoPc-e~tDSyhj0M4;EeUZeYk=rnbJzvGb%Jstw? zRC}iKHF)_A?7JXWSt8RwsTQ?1d?k9d8w|F!77l})=6`XRCGv%oiNlqtxgFx*u-Zfz zb@3MLBxNmk7#1K-WpDsZ<`17^j3>Gqfn6FbdKZjC)FPL$v{;05k>0s}&JW}1TNEQlS1Td&sZ zf%FLqqF`9|A1{#Kw8X8MJ5F6Y@{2aMo*Z6MZpGJ!Mv$`%?!55u+T?-2T^m+hAoNl# zq+B*hTnJrxI^zSjl7jb!-EoXZq}Jbr8;sLOV8`&}`K)E6-ZQeQjR=f>5@7}QImS@t zI(Xi8W=j_GFy`|x57`u*0DCVj^f>fA<|z__iuN8}#HAiQfL)|U6kBB%2dShk2&D2>b)nUgK%Y-Hn;e4|ZX7Gd@iiPic<{<=?_ zQ}Zn4(dLwwiIgxod3lS(b1J$bi&BS>b|#lQ=<)ll&;_-hgWU%1$OW?5O?s1ethMA= zJvsKHR8PKkzh`_^8{fH=pFNPbTLTH-Zl$92@*>%X(R-s^2ou7!W(@aS!b8v4K&aA&eqJ*t@3gudDkX$+9|*GXo9m!IvuXiKu$iTMfNN z?^ATg__|H7IL49kyKBmba)9pewvXswHMjzQb5N{dZd4Qqar!wJPT27~ivxV3oe<>e uBs~o}tYQp<*oa7y^nkqmCwYA{Iw=h-eY#2DXR{`yq+?6g-voZRQ~v@Y2@;S1 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-312.pyc b/pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4739d5e59ffcc8d0a9100dfbaf6d1eaade2d917 GIT binary patch literal 3461 zcmbVOOK2QN5bc@$XtW>6`dCq9c{O$ z%u3N_1xnCiAt&R5bW1`4Nw5!w+;R&(g#@yTY*vf~F~pbL6v+_qDb+on9er#}(9FwpviI!Uk&OoIN21uZ>8 zbWJT_lIDB|(a#LPfBO~?`k6(P^4M(VNt+>;QAD$K?zq;w_j$nGclLlT*NkWZN&J|^ zS#<_Z>zZOnA?u)l$s8srYJe2MQCdsb&gODX z?VmUL_1m*JZ5sXTiUt_5FSlR`sg$azW-3*9bGL2#To$#D(FGM`NZ>DJL-=v$^m^u9l3|7EJ z{&+Mghqc#10Csp9A^q@$FFl)2s9Kt30h#&_9GT7Oj*}oLeQS`Kz-MGmRdnL_SxzQ$ zmT{c89Tq2TE&d&TkBhyzJY+h$N6c$*W)>T!oXtsn-mM@t5}JsuAmx%M3?-g4(3Pk! zMHuv}95(@@meC5Gd)(#Yw!^~g8x)7U#=yTOYukfnxZ zZg>C#a08l!es}vU2J4=wYuu%1EmbOBGW?t~y`(uCu1UKiH-h)qNh6iU?0)xvI0hw7 ztn!5~Jj428)$z6A0YK5k+p-};2jN)*gPb<=G7W9;ziOB`EBoE=hOFcB9olw8xf`DO z<8ZU99@I2loRL8>oVsJL{OBjG4?>xufcf8wd?07?_$nbfA=G&Q5eA4D&d50fD|Q4k z6gZO|VQe+hc%>+CxCOxJ&NA4yOX4V;V%!7*IEkUyfoim;674BR-=@iWv@$qa9=x&9 z+*v;S-dgjua_riRFlz5yS-87!@6)d)t34Mg@O$GzDfX8S@9Nr|iiybz!G7S9X|&VwNh^c%>=EVJJOn>@A4d#9<_bY?QV5 zkmHsStCeYS@Z_z!qV6}QKo`7hY~*>1to|7EFculC)L1P(1iF%i?$_bel^O&^#uyNW z)vmXyiJ?kjXf1KNEF5~?)m`p6x7PJeS?GM8I95%ZuE6@4k>6&1&-{{kocIuAo{6U( zD%G>275IsxW#RC8V|Q8T-dm2mJa`Nadlg7)faDM@IQdl&_K{WaHRj7sxc!QEoxSv~L8h0t&S!MD$ zYI2rH_Ng*H?j=xZGy`ECsgGBM_KMKH+Vw<`m{rH52z@tdGCXxtRwR|m>PkLC$FWrE zV@SC+ha3PERt$o~RMS~(&gcqzk+3T>Fq4xYLHdCFfS6|c*+NSTp@dczV*to9+TsJD zNp3TO!p(p4^`W-y0E{;2Xsb;K4Q#c>Lx;8!@lelpA{;tlE2Ao;uvM4Qr>9kIn&n;= zIP3w=!i60}=!>Uz{!8J!{XrMV8DP*%W*i2x8Q?hXDQb9%qJN;F3L5$+e2L>uY#~b7 G_J08uAZVQc literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-312.pyc b/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee8bb7669e8cb01b3692a3f4f536b62433f6c589 GIT binary patch literal 3296 zcmbVO-ES0C6u&b&vz>l1poJh?=+Mf-MBFuCA`%d)g8D$kP#~@*lV#_Y?y_IrnWc2$ zp$|>03C1S_uSOFk_!s!3&%Sg5W?|$Fec-L6H6c8C&Yiil)7>qgH`)7j&OLk1?|jVp zeRz0)!1(L8#!RJ;kcW5>Lk%~phhcMr*d#}6$(GAfPU5SalVMGi6BQ+=NJJ(d5L;O! zwn~-TiQsKcotMpI^WdqP-6&IIrpAoZwZbLp8Xwo)Vy$XS7c2D4e6?WA(F;yMsa+`1 zf}44S5~fVaSKiG#v=GP(W;r~p{sNmXK{ZN1C4%bY5=&$Tlw8zu3RUgIBDozh=aMv8 z+7upQ3#uIBQEfGL)<8xwcJ8PBJ!SN*<56ubb{+s3{ju}l61gJfhRzUkz}JNR%>(b1 z^N#bM5GqJ9GZ1k6tzLoYTj>UIBcdztBG<^*gCw$60(V{`R_H21+SF~k{6*;gD|p7HxFtAI#amV;&+3r|1Ho&`xx_HyxJ zZ7yHFL|Hb7!5{=DPk)rH^T@05kj&SM**Pa0M4^-A{|*6~sn0V^mF5j?Dc1)djHiDzzcasoZArPSjosTlzNGx2?OKHgWSt8U zFYdw}u(<)wDj`e9fUuF8XHK&kVCv2rZq2v|*%Ux!L{Mc028?hVX4Gx4s&m+wo~1n) z1>Y@+4a0xIqQl~#G6vfMv%k615zSX33_3|K;oHqHEs&KVvU#MXr#(Hrtfd)J3Q;7& z0r%Woq=2~?i?9pEykyGFu~XEYt=VX#)62*yHUiwH%r*A=BkKdt2imi3!14@*5o-rM z2nr|3#D4V6SfFgr^qL0NcyjgfQ7K9(U=9a(QxW_2dOQ3N?$u8=@T#46Dcbftr?&Zo zPtAm{iCceohSe$&MjRKm6;z44S`Ymx9yPajdRkD%@a1lp7RVYndV5PZJl$yN8Bfpr z1c_bh9B{!fS()`xieuef=!EUxESzG4)su2Csg8!ip=x#Iya2zn-}08?xis4UW? zFMPi)Nzj`cTbxCU!yFkR<0h|P-EPJB=5GBQHXGG1H_DA(`2blGeNI3~IDVEyo;2YG zaz$=_+L~3LHVO;F`Vf>Bo0i=?L!`Qb=jHalTS8)UG)kQw z)VDy4lZGj(lM|jk@xyE@eaK56`gNo=dDfdedpCW~)6Xqy=bj6;8x|5mO7R*Ce}JQR z@hL&W*Ez&jUI5Mu(`U~BJ1QtIf_98Kf?Hu2S$?u|390N=Jn&NPHtJ>C1@%Y_%t%~w z=QO;Q3;GvYqq zmT|rxgVV{+`08Ku_+Q8r5B7q$2Kb~qw s0tdXq4!{uu-9bQC5|Sj{CvQI_gMSkJZ}P@k@`yAkExG>?T)BXM0dENhX#fBK literal 0 HcmV?d00001 diff --git a/test.py b/test.py index b71d8d3..138efc7 100644 --- a/test.py +++ b/test.py @@ -2,30 +2,16 @@ import time from pocketoptionapi.stable_api import PocketOption - -ssid = (r'') +import logging +logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(message)s') +ssid = (r'42["auth",{"session":"vtftn12e6f5f5008moitsd6skl","isDemo":1,"uid":27658142,"platform":1}]') api = PocketOption(ssid) -def direction(): - # Selecciona aleatoriamente entre 'call' y 'put' - return random.choice(['call', 'put']) - - if __name__ == "__main__": api.connect() - time.sleep(2) + time.sleep(5) print(api.check_connect(), "check connect") - data_candles = api.get_candles("AUDNZD_otc", 60, time.time(), count_request=1) - - data, diff = api.process_candle(data_candles, 60) - print(data) - print(diff) - data.to_csv('datos_AUDNZD_otc_test.csv', index=False) - while api.check_connect(): - print(api.get_server_timestamp(), "server datetime") - time.sleep(1) - - # Cierra la conexión con la API + print(api.get_balance()) From 46fc4f7616d6876747d3b76fe88520973067225a Mon Sep 17 00:00:00 2001 From: vigo walker Date: Fri, 21 Jun 2024 14:40:38 -0400 Subject: [PATCH 31/33] sfeesf --- test.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test.py b/test.py index 138efc7..061e333 100644 --- a/test.py +++ b/test.py @@ -1,10 +1,15 @@ import random import time - +import dotenv from pocketoptionapi.stable_api import PocketOption import logging +import os logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(message)s') -ssid = (r'42["auth",{"session":"vtftn12e6f5f5008moitsd6skl","isDemo":1,"uid":27658142,"platform":1}]') + +dotenv.DotEnv() + +ssid = (r'42["auth",{"session":"vtftn12e6f5f5008moitsd6skl","isDemo":1,"uid":27658142,"platform":1}]') #os.getenv("SSID") +print(ssid) api = PocketOption(ssid) From 7a8e31805ce10e61b460684f3db50f51e558d753 Mon Sep 17 00:00:00 2001 From: vigo walker Date: Sat, 22 Jun 2024 11:41:18 -0400 Subject: [PATCH 32/33] fsefesf --- test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test.py b/test.py index 061e333..3be0cc8 100644 --- a/test.py +++ b/test.py @@ -12,7 +12,6 @@ print(ssid) api = PocketOption(ssid) - if __name__ == "__main__": api.connect() time.sleep(5) From 8cde0af887212c436176abd905b46d42615810ec Mon Sep 17 00:00:00 2001 From: vigo walker Date: Sat, 24 Aug 2024 08:36:17 -0400 Subject: [PATCH 33/33] Update --- .DS_Store | Bin 0 -> 6148 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 140 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 166 bytes .../__pycache__/api.cpython-311.pyc | Bin 0 -> 10821 bytes .../__pycache__/api.cpython-37.pyc | Bin 0 -> 7179 bytes .../__pycache__/api.cpython-38.pyc | Bin 0 -> 7244 bytes .../__pycache__/constants.cpython-37.pyc | Bin 0 -> 4797 bytes .../__pycache__/constants.cpython-38.pyc | Bin 0 -> 3471 bytes .../__pycache__/expiration.cpython-311.pyc | Bin 0 -> 3605 bytes .../__pycache__/expiration.cpython-37.pyc | Bin 0 -> 1795 bytes .../__pycache__/expiration.cpython-38.pyc | Bin 0 -> 1810 bytes .../__pycache__/global_value.cpython-311.pyc | Bin 0 -> 576 bytes .../__pycache__/global_value.cpython-37.pyc | Bin 0 -> 476 bytes .../__pycache__/global_value.cpython-38.pyc | Bin 0 -> 440 bytes .../__pycache__/stable_api.cpython-311.pyc | Bin 0 -> 17273 bytes .../__pycache__/stable_api.cpython-37.pyc | Bin 0 -> 12521 bytes .../__pycache__/stable_api.cpython-38.pyc | Bin 0 -> 10727 bytes pocketoptionapi/constants.py | 39 ++-- pocketoptionapi/global_value.py | 4 + pocketoptionapi/stable_api.py | 194 ++++++++++++------ .../ws/__pycache__/client.cpython-311.pyc | Bin 0 -> 15103 bytes .../ws/__pycache__/client.cpython-37.pyc | Bin 0 -> 7299 bytes .../ws/__pycache__/client.cpython-38.pyc | Bin 0 -> 6834 bytes .../channels/__pycache__/base.cpython-311.pyc | Bin 0 -> 1392 bytes .../channels/__pycache__/base.cpython-37.pyc | Bin 0 -> 1117 bytes .../channels/__pycache__/base.cpython-38.pyc | Bin 0 -> 1155 bytes .../__pycache__/buyv3.cpython-311.pyc | Bin 0 -> 2422 bytes .../channels/__pycache__/buyv3.cpython-37.pyc | Bin 0 -> 1661 bytes .../channels/__pycache__/buyv3.cpython-38.pyc | Bin 0 -> 1687 bytes .../__pycache__/candles.cpython-311.pyc | Bin 0 -> 1646 bytes .../__pycache__/candles.cpython-37.pyc | Bin 0 -> 1263 bytes .../__pycache__/candles.cpython-38.pyc | Bin 0 -> 1303 bytes .../__pycache__/change_symbol.cpython-311.pyc | Bin 0 -> 1288 bytes .../__pycache__/change_symbol.cpython-37.pyc | Bin 0 -> 1009 bytes .../__pycache__/change_symbol.cpython-38.pyc | Bin 0 -> 1045 bytes .../__pycache__/get_balances.cpython-311.pyc | Bin 0 -> 1018 bytes .../__pycache__/get_balances.cpython-37.pyc | Bin 0 -> 729 bytes .../__pycache__/get_balances.cpython-38.pyc | Bin 0 -> 765 bytes .../channels/__pycache__/ssid.cpython-311.pyc | Bin 0 -> 1008 bytes .../channels/__pycache__/ssid.cpython-37.pyc | Bin 0 -> 767 bytes .../channels/__pycache__/ssid.cpython-38.pyc | Bin 0 -> 801 bytes .../objects/__pycache__/base.cpython-311.pyc | Bin 0 -> 984 bytes .../objects/__pycache__/base.cpython-37.pyc | Bin 0 -> 766 bytes .../objects/__pycache__/base.cpython-38.pyc | Bin 0 -> 802 bytes .../__pycache__/candles.cpython-311.pyc | Bin 0 -> 4968 bytes .../__pycache__/candles.cpython-37.pyc | Bin 0 -> 3732 bytes .../__pycache__/candles.cpython-38.pyc | Bin 0 -> 3792 bytes .../__pycache__/time_sync.cpython-311.pyc | Bin 0 -> 3685 bytes .../__pycache__/time_sync.cpython-37.pyc | Bin 0 -> 2651 bytes .../__pycache__/time_sync.cpython-38.pyc | Bin 0 -> 2707 bytes .../__pycache__/timesync.cpython-311.pyc | Bin 0 -> 3533 bytes .../__pycache__/timesync.cpython-37.pyc | Bin 0 -> 2438 bytes .../__pycache__/timesync.cpython-38.pyc | Bin 0 -> 2498 bytes 53 files changed, 160 insertions(+), 77 deletions(-) create mode 100644 .DS_Store create mode 100644 pocketoptionapi/__pycache__/__init__.cpython-37.pyc create mode 100644 pocketoptionapi/__pycache__/__init__.cpython-38.pyc create mode 100644 pocketoptionapi/__pycache__/api.cpython-311.pyc create mode 100644 pocketoptionapi/__pycache__/api.cpython-37.pyc create mode 100644 pocketoptionapi/__pycache__/api.cpython-38.pyc create mode 100644 pocketoptionapi/__pycache__/constants.cpython-37.pyc create mode 100644 pocketoptionapi/__pycache__/constants.cpython-38.pyc create mode 100644 pocketoptionapi/__pycache__/expiration.cpython-311.pyc create mode 100644 pocketoptionapi/__pycache__/expiration.cpython-37.pyc create mode 100644 pocketoptionapi/__pycache__/expiration.cpython-38.pyc create mode 100644 pocketoptionapi/__pycache__/global_value.cpython-311.pyc create mode 100644 pocketoptionapi/__pycache__/global_value.cpython-37.pyc create mode 100644 pocketoptionapi/__pycache__/global_value.cpython-38.pyc create mode 100644 pocketoptionapi/__pycache__/stable_api.cpython-311.pyc create mode 100644 pocketoptionapi/__pycache__/stable_api.cpython-37.pyc create mode 100644 pocketoptionapi/__pycache__/stable_api.cpython-38.pyc create mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-311.pyc create mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-37.pyc create mode 100644 pocketoptionapi/ws/__pycache__/client.cpython-38.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/base.cpython-311.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/base.cpython-37.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/base.cpython-38.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-311.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-37.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-38.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/candles.cpython-311.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/candles.cpython-37.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/candles.cpython-38.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-311.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-37.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-38.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-311.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-37.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-38.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/ssid.cpython-311.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/ssid.cpython-37.pyc create mode 100644 pocketoptionapi/ws/channels/__pycache__/ssid.cpython-38.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-311.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-37.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/base.cpython-38.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-311.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-37.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/candles.cpython-38.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-311.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-37.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-38.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-37.pyc create mode 100644 pocketoptionapi/ws/objects/__pycache__/timesync.cpython-38.pyc diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d49d7754541bf1d9940550be7ac0eb32dcdb2fd2 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO())(?gd>&_Z zH)5&cK@cf3F#FBU&o29I*v$ff=uG>201g0HsDu?8n=gdoq)SpU9zvnU7(fORM%czn z+3fg_4A97>T2NGKvxzVdiTzO5#c8d2gapt*x!st-95)Zh{Ay z2U(a+C!KJ7MZI$=lc==A=pr8EJ!k7grdb%LgRv@z`vXk5zKqkp%sX4*duR9ftT#*^Q~9i^75Eh@*)Ukb3mQMH@+lan ziA?V?vmB+YW@HAK0cK#;7%=CY)mXKK@p_m6X5iNh(D~q^68Z)Ujq2#YhJGI@ULzzy zo8A(Hu0h{mp%Eh}LYE@yQemDLLYJf8HF>_lLZdDRp=QQ$%*?{PP=uNt{jN#};cMiU z8DIt$8K~;6L-+sb_wWD3BJME*%)m-9AZp#9+rcH7yLD-Cbl1A5x2PnPS7`hwK|@`| gm`hi26IBWNT`~}TgM~))pzx1?qJbM`;7=KN2g3bQM*si- literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/__init__.cpython-37.pyc b/pocketoptionapi/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13a4bf9e22627e48ff6523210f072fa0f7594f25 GIT binary patch literal 140 zcmZ?b<>g`kf>K!yVl7qb9~6oz01O-8?!3`HPe1o6u>*(xTqIJKxa zCM+{OKgK1sIJ+djASNllB&HxgIXe}|Dap*wODxEYiI30B%PfhH*DI*J#bJ}1pHiBW MY6mjzGY~TX0I2IC%m4rY literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/__init__.cpython-38.pyc b/pocketoptionapi/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67ab17c1d56596fd4881563cf6952528e03eec69 GIT binary patch literal 166 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 K(KG&XR^>lS(cxVH literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/constants.cpython-37.pyc b/pocketoptionapi/__pycache__/constants.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1c778572247b69182ee6d73819952fa0b88c5ac GIT binary patch literal 4797 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 LDF4!)RwDlfT9a5s literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/expiration.cpython-311.pyc b/pocketoptionapi/__pycache__/expiration.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5204f4318f454d84368f600283a729e4eb943c09 GIT binary patch literal 3605 zcmb_eUuYXg8lPQhrIl9BT3)qwYq#F~bxc#oj&pXfopKi^H0d?{LoSZVsWn^e+F4s# z>1Nm0#7I4H^g%U&*w9i3E}%R#=MWzlN+B-IToi z@c7_)b{5Fj$ZDF)qGD4IrmO89ydTs$=pOJqsPn<*%u@ek+W4!kVM~)24LSYEyk@24 znj*3y6HQD@No58=L!WL~73JtqKjZlct4T!4KVO_2i(fW1Y{vg+=yTVs_*urzx^fk;BQE6Wy%tmm4_sO*OC9;|p!UzPJ2N3*OIYA~z*4X!l~OECFcBxV`a zzd&*U;g_?%X4zzB37quY4&bz$ua#E~Yy@}dLAfkQ`&!HTS~+t5tRJ$5Upx#>3(L?Z zm1JTusmNLqGDS;eAa^vm632x8=vzZhJ-Tbk2@NL{BQ1ZTn2MT~HG||@J*<#!Fn9yT z6j@!w3SBrr#h?2nu_oCJYqF)`lx`^a(On`Hv@o@~MMF)G4G)4QNf{;=t@J>cN*l{4 zSV=WD9+Rp3YJ$tUp(k`DDHARtD)HzpF%DJ}ORI~Cf+R!7nC)UXU)+%pJlD2aCIwUc_d90FzYn+GcS& zRd*N`$yg9;nWO@)C8G4MT(;0G(JRX8l`HD4;S>tG#3z!Xd7Z$J< z2~V}PoLjc})TzD=f9ts;2+=yy+RGwx>Q%0a3Nb*Orc=DPyc}ytyZ8co?VDrg06Q!K zyVa)d!i}@&qftNxU$M!$8ZSbvcDCx>+GEfzefIQ2j=gzG<#SLxbAjdx_$xU68>5sB zWVtHV-)@c=;6C55tMR3VTJ317ts;jzuzkS#$=YItXN4S{U=I1awZaXCKAslf$;JP3!>F!UnCmL(X;g$xe* z6)i&9;NH2F4Yl}%Z}oihob^&eqj_?TpzYUgM?{lZwpAj7Zq8(bPyyTCqnM8OffyVm zgy143hXluf>=2`N$QfK>4`19Ncq~9S}-7ip3$1lS-?j!^fq=MiS%RLS&#+>E_ zluSm0a>1Jxo+aS#g*0O^r9lDGJUf`{Sr^P;;H=kC%mv7d2Q|5H#Z(e?Y?oRZ`=j?`nVIBa3d2Af7<0wKhz!m?H^BU z1uvG7pBsWIap%IiV)qO>J%cV#X^@l%zinQg=y{LJmu()z?`3G)6V#mJ3i%%UU5gSY)}8$j%&{J ztUEpHjLzEg#@2{InM)Dz);r7ZYPc^GUB*VO1=mbe1#87!oHRL%cr2IhB`}8Y30&dboKJ; ztA#U#Gf$(jl@C{6Dx4|t?YG2bajoOdrDF8<)IX-anf#Z3BXnQb5S&9N-9smx*G}49 zzjOEzmmjg||EVD5->2mj?k-0ldn&n3@}AyN=p}-t)_p|TX!`xkPo&c7Vp4kx4+1B- z6PbA+Wgo*ZB_!nOuY``;d;QD%5YxZsOnqrNz%u*6y)_cbNBF literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/expiration.cpython-37.pyc b/pocketoptionapi/__pycache__/expiration.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..384058d51799ec5815d4ea1ff58b0bd750a3ee5e GIT binary patch literal 1795 zcmZ{lPj4JG6u@oI-<>4eWC=}9#fKJYr7EIDqEdtqA_Z|My#S50S`?hIvrKpAPd#4P zRx_vNTB#pl_Xgs~N65FBE2sSeJs=Le=Sempq9fUUezxCxwtvs_#nx6t;QQx~;n{G5 zkiW2V`7sbahf+R)N)kyYWPmN3(3B2n$_9-7U%#E_NcUGVaHJ=FXk8h|5L!>tZ%Mzi z0*mBnpEaQrMwuj4O$TeKCPu^*N8!WPfpP?;+=R-IiY(}o%+Uya)j!I!pA)5x;?s=h zr_Yti`K3WFI9e=?NQ(pTUJW<{a}_6~}d%??^QG5N{b+ZKk4hew$1Kpk5d1P_V}#qOs7 z!N6`RvZOVu*mEZ7nCQD8Ig&~yo!6{(vi*t~SGv-BP4~$4k%~%p?CNKgV_cN?3C?*$ zY6msamqFVzUggYb?N%IIMP6SsII46}BaB_;bTZ@zPKQo@5FH0UP z9g8gIr=k=x=PJXKUhfnR8Cda;zsE-$%H;%qE(2ZRHJDo z^TUrnf=DJD2B#)Jh^)24LTHg*IX>jp{>An3BunB%OgPR$Q}Ou{HwUY6rx%McK)kd= z{^VM;;Hy+Z!ZO&gby>EnR(IfnG$IJ__@#>TOg0;766?I}tn3(V0=rC=E4*gF%KIsw z>ay=^>^ECyI#1UJrXj~j6KGXT1RO2GZ4v2v8sUI+xCpWdv;3D6M5_tmQd(*Eio7e@ zEWT|OqKWrL%ADMo*n@!*E7FOah;FleCvaig3<8s1T_34g*0p`VomsOHFgm+$fY3R8On%_Nrn3mp-kdHe zCI4Oh;`Ervu!e`D_TLrF?8nNlyfJx0wQrn?EkfB@LPRpU4bRq?>9=jX7$uBDv=HeA zMEdrIXJ0ydr1oz_@Y^wgn1k7Orh~ZzF@HT|wO5CgCxfvEUO$l$$ea6Qm(-mM^=PM4 z1&g5SfX5L1nrIQ>+qF;581C~8eR2DkQ~~7W*3%2pEFc=+I*rdrpXx5kcrW@ER4c?} zg%rJF_r6)7D!C8$w8D3#zhRlvJ0NSkZjD+Cm_@Dew8%!P@kLQ6pgAm!K0`K}j>@K~ zg8Wd8i;8|^dDOeO{(Yz#2asy$2|S~6)_6%K)oc)Im5MCMMh!IsCiP7ecM!$PIhNQ5 zV5)ow6`>LB(mQn9=~5S@F6}|C=!9PQ!N2ZizghqQ literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/expiration.cpython-38.pyc b/pocketoptionapi/__pycache__/expiration.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e45a9b8dc98024c36424ec0165bfcc0b43994de GIT binary patch literal 1810 zcmZ{l&2HQ_5P(TaT5;u{+KCanmsAKEpxYm#KZgQ~qG;i?Xwf7MP^1VJTWlGT-YC1G z6pGt8fppql1LP5Qd&{|x;CJXj*Piy02k4>b4CUC4(Fov>oFRuZKOWW_$L=B3)U3prJfHa-r0K}-mq|G9P0AKopMDThDkbo{^$ zZ>Vx&^I~`>PbSL#SlBezU*Gv&tH&Q@BGtpf>2s$SMLJYRMQQ|&+Ap3o+vs~_^U-Mx z8<+%cD`BP!GI4F}!xupDp}0&7XjsUzB1>AcialhKPKbFITArkmN$(k}J-t^k>q}n- z&*&~WZ>gyCC%*Z)@~n^TJ%VFCC$)zf*^yz}vq9y}Y3)}&>?WUGhwYAH_zuK0nN3Bk zrm%x5D_~Dm+@_bL$A9WLJ6@J?qD&%m9^V(Gka?^$p22Cha15Y)0y+`PnGtT{zH|T0 zo7|STm{GA+CQG$2$4m4IQIu*t(=zXW_Ax{Hkk3rn>lo}e8;2&(PB+XT-%V&#F%_`2h`qz47Z`*C zF3U-f4cGbO5#rTwIFz=vb4K48aSrTOaCC8btnBE*z)N5#QIKxrMRbepdEC3?Z8FZx z+n{~zKH`&so*bq3AjwloX+@Dzq!ZX=7Rh5aknj*7opU+|nvp}`^4s&4n(0l~@3bRp zHU>^DFgm9<$S*O_=`BL^Hm6HU$?J0;{VI74&r02SQzTWV3gGViYrTpsxa=+=5*b~A z2W`U4%QjAo4(t#mM7RbKzPzwzM|!)Y?p#>=4~R6hUA#jO>32g`2Q{w(8BT)d)Vwbv zXs_>)9a48S>d{BH3KwD3h1EE&X`@Aiuh||sWSHG^`Y5VGxQ!dP9bX2XW@0u`yoCY} zz-)t9ArmXKK4sT$tcnr118Ny?zWM; zS7RKWpMb0KQxJqkbdz4CTiz!1={mHxp!S`X(|zc3VA5w>s9~I5W9B`W1y|@ARBf84 mSH%JA?B^oD$K5#m`4?F(XH)eh-cI*B0pH;k(qUrvo&8 zl9==>9HbFD{TZBHoZlf$#6xD07UCzQKQ|!#HWDE7sD-i9BU_DwldT2Y8NsENdVh5`nMLQIO>|a2$Z2Nq&fm@sQy6XE zuq2JLT9>uXvLqS^iIve?CUV%x?w)7&Ze*Mb_^RGxlIqj+1rCohj^j+$Hpiqh`S5W} zRvw#V^UIj5PrSLpoosv_lhtzVQxy&t3%~T|3$F~9i*~uxDZ;W96wNXSF;EZTA_lxx N;g;3zs;gy8@(<;hzI*@x literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/global_value.cpython-37.pyc b/pocketoptionapi/__pycache__/global_value.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..268c77f9f7badc0cdfb831aa1d60638bb8dbb049 GIT binary patch literal 476 zcmZvZ!Ab)$5QekcwXJJw6-2~?_g=g!A|k6GQauzsEDIq`rZqHfLXx%Cr}65`_yD>3 z7M`50F7)7pZ)WlnCX>l!zn>Dc_s_TKZA{45YSUPR$pzvvbb{n7A|w`3-olt*+(6n$ z2k9c4NGeIbH6wWs=_A{y4Ma31!}$7cxD)mlFmamC!Bgod*JTOZg9v-hDLSfr#T12C zt|}*W84mwb>B346AsLTvvT(qkfY0e#)hPvQwOzld7N`a0ux2`8ij^Fw6ruB%hh8K4 zrGYSLc9juq)m__ytCSC^wgN0gku|wCP=?;G&Xsm}I&q%)kYrb*`wwDwae%e^KH;au zg9Gb|M>*3)25#=PDJI$%rXGnl9$(FjEM`h$5A=np3XaV(bkCl(s1%&zKM{9?E{T&C M5+_kjgmG>C0B>uR1ONa4 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/global_value.cpython-38.pyc b/pocketoptionapi/__pycache__/global_value.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe0c4c1e68fcb4497243011b191301e6229fb7c5 GIT binary patch literal 440 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 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/__pycache__/stable_api.cpython-37.pyc b/pocketoptionapi/__pycache__/stable_api.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae930450789720ebf77f5470ef9e68e2dc12d4aa GIT binary patch literal 12521 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 C9WopM literal 0 HcmV?d00001 diff --git a/pocketoptionapi/constants.py b/pocketoptionapi/constants.py index cba6738..58cc096 100644 --- a/pocketoptionapi/constants.py +++ b/pocketoptionapi/constants.py @@ -137,25 +137,26 @@ class REGION: REGIONS = { - # "EUROPA": "wss://api-eu.po.market/socket.io/?EIO=4&transport=websocket", - # "SEYCHELLES": "wss://api-sc.po.market/socket.io/?EIO=4&transport=websocket", - # "HONGKONG": "wss://api-hk.po.market/socket.io/?EIO=4&transport=websocket", - # "SERVER1": "wss://api-spb.po.market/socket.io/?EIO=4&transport=websocket", - # "FRANCE2": "wss://api-fr2.po.market/socket.io/?EIO=4&transport=websocket", - # "UNITED_STATES4": "wss://api-us4.po.market/socket.io/?EIO=4&transport=websocket", - # "UNITED_STATES3": "wss://api-us3.po.market/socket.io/?EIO=4&transport=websocket", - # "UNITED_STATES2": "wss://api-us2.po.market/socket.io/?EIO=4&transport=websocket", - "DEMO": "wss://demo-api-eu.po.market/socket.io/?EIO=4&transport=websocket", - # "DEMO_2": "wss://try-demo-eu.po.market/socket.io/?EIO=4&transport=websocket", - # "UNITED_STATES": "wss://api-us-north.po.market/socket.io/?EIO=4&transport=websocket", - # "RUSSIA": "wss://api-msk.po.market/socket.io/?EIO=4&transport=websocket", - # "SERVER2": "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket", - # "INDIA": "wss://api-in.po.market/socket.io/?EIO=4&transport=websocket", - # "FRANCE": "wss://api-fr.po.market/socket.io/?EIO=4&transport=websocket", - # "FINLAND": "wss://api-fin.po.market/socket.io/?EIO=4&transport=websocket", - # "SERVER3": "wss://api-c.po.market/socket.io/?EIO=4&transport=websocket", - # "ASIA": "wss://api-asia.po.market/socket.io/?EIO=4&transport=websocket", - # "SERVER4": "wss://api-us-south.po.market/socket.io/?EIO=4&transport=websocket" + "DEMO": "wss://demo-api-eu.po.market/socket.io/?EIO=4&transport=websocket", + "DEMO_2": "wss://try-demo-eu.po.market/socket.io/?EIO=4&transport=websocket", + "EUROPA": "wss://api-eu.po.market/socket.io/?EIO=4&transport=websocket", + "SEYCHELLES": "wss://api-sc.po.market/socket.io/?EIO=4&transport=websocket", + "HONGKONG": "wss://api-hk.po.market/socket.io/?EIO=4&transport=websocket", + "SERVER1": "wss://api-spb.po.market/socket.io/?EIO=4&transport=websocket", + "FRANCE2": "wss://api-fr2.po.market/socket.io/?EIO=4&transport=websocket", + "UNITED_STATES4": "wss://api-us4.po.market/socket.io/?EIO=4&transport=websocket", + "UNITED_STATES3": "wss://api-us3.po.market/socket.io/?EIO=4&transport=websocket", + "UNITED_STATES2": "wss://api-us2.po.market/socket.io/?EIO=4&transport=websocket", + + "UNITED_STATES": "wss://api-us-north.po.market/socket.io/?EIO=4&transport=websocket", + "RUSSIA": "wss://api-msk.po.market/socket.io/?EIO=4&transport=websocket", + "SERVER2": "wss://api-l.po.market/socket.io/?EIO=4&transport=websocket", + "INDIA": "wss://api-in.po.market/socket.io/?EIO=4&transport=websocket", + "FRANCE": "wss://api-fr.po.market/socket.io/?EIO=4&transport=websocket", + "FINLAND": "wss://api-fin.po.market/socket.io/?EIO=4&transport=websocket", + "SERVER3": "wss://api-c.po.market/socket.io/?EIO=4&transport=websocket", + "ASIA": "wss://api-asia.po.market/socket.io/?EIO=4&transport=websocket", + "SERVER4": "wss://api-us-south.po.market/socket.io/?EIO=4&transport=websocket" } def __getattr__(self, key): diff --git a/pocketoptionapi/global_value.py b/pocketoptionapi/global_value.py index f5e1c7c..356be65 100644 --- a/pocketoptionapi/global_value.py +++ b/pocketoptionapi/global_value.py @@ -17,3 +17,7 @@ balance_updated = None result = None order_data = {} +order_open = [] +order_closed = [] +stat = [] +DEMO = None diff --git a/pocketoptionapi/stable_api.py b/pocketoptionapi/stable_api.py index 9801c86..336432b 100644 --- a/pocketoptionapi/stable_api.py +++ b/pocketoptionapi/stable_api.py @@ -1,9 +1,9 @@ # This is a sample Python script. import asyncio import threading - +import sys from tzlocal import get_localzone - +import json from pocketoptionapi.api import PocketOptionAPI import pocketoptionapi.constants as OP_code # import pocketoptionapi.country_id as Country @@ -36,10 +36,11 @@ def get_balance(): class PocketOption: __version__ = "1.0.0" - def __init__(self, ssid): + def __init__(self, ssid,demo): self.size = [1, 5, 10, 15, 30, 60, 120, 300, 600, 900, 1800, 3600, 7200, 14400, 28800, 43200, 86400, 604800, 2592000] global_value.SSID = ssid + global_value.DEMO = demo self.suspend = 0.5 self.thread = None self.subscribe_candle = [] @@ -66,6 +67,8 @@ def __init__(self, ssid): def get_server_timestamp(self): return self.api.time_sync.server_timestamp + def Stop(self): + sys.exit() def get_server_datetime(self): return self.api.time_sync.server_datetime @@ -86,6 +89,34 @@ def get_async_order_id(self, buy_order_id): def start_async(self): asyncio.run(self.api.connect()) + def disconnect(self): + """Gracefully close the WebSocket connection and clean up.""" + try: + # Close the WebSocket connection + if global_value.websocket_is_connected: + asyncio.run(self.api.close()) # Use the close method from the PocketOptionAPI class + print("WebSocket connection closed successfully.") + else: + print("WebSocket was not connected.") + + # Cancel any running asyncio tasks + if self.loop is not None: + for task in asyncio.all_tasks(self.loop): + task.cancel() + + # If you were using a custom event loop, stop and close it + if not self.loop.is_closed(): + self.loop.stop() + self.loop.close() + print("Event loop stopped and closed successfully.") + + # Clean up the WebSocket thread if it's still running + if self.api.websocket_thread is not None and self.api.websocket_thread.is_alive(): + self.api.websocket_thread.join() + print("WebSocket thread joined successfully.") + + except Exception as e: + print(f"Error during disconnect: {e}") def connect(self): """ @@ -101,6 +132,16 @@ def connect(self): print(f"Error al conectar: {e}") return False return True + + def GetPayout(self, pair): + data = self.api.GetPayoutData() + data = json.loads(data) + data2 = None + for i in data: + if i[1] == pair: + data2 = i + + return data2[5] @staticmethod def check_connect(): @@ -121,7 +162,24 @@ def get_balance(): return global_value.balance else: return None - + @staticmethod + def check_open(): + #print(global_value.order_open) + return global_value.order_open + @staticmethod + def check_order_closed(ido): + + while ido not in global_value.order_closed : + time.sleep(0.1) + + for pack in global_value.stat : + if pack[0] == ido : + print('Order Closed',pack[1]) + + #print(global_value.order_closed) + return pack[0] + + def buy(self, amount, active, action, expirations): self.api.buy_multi_option = {} self.api.buy_successful = None @@ -139,6 +197,8 @@ def buy(self, amount, active, action, expirations): global_value.order_data = None global_value.result = None + + self.api.buyv3(amount, active, action, expirations, req_id) start_t = time.time() @@ -202,59 +262,77 @@ def get_candles(self, active, period, start_time=None, count=6000, count_request :param start_time: El tiempo final para la última vela. :param count_request: El número de peticiones para obtener más datos históricos. """ - if start_time is None: - time_sync = self.get_server_timestamp() - time_red = self.last_time(time_sync, period) - else: - time_red = start_time - time_sync = self.get_server_timestamp() - - all_candles = [] - - for _ in range(count_request): - self.api.history_data = None - - while True: - try: - # Enviar la petición de velas - self.api.getcandles(active, 30, count, time_red) - - # Esperar hasta que history_data no sea None - while self.check_connect and self.api.history_data is None: - time.sleep(0.1) - - if self.api.history_data is not None: - all_candles.extend(self.api.history_data) - break - - except Exception as e: - logging.error(e) - # Puedes agregar lógica de reconexión aquí si es necesario - - # Ordenar all_candles por 'index' para asegurar que estén en el orden correcto - all_candles = sorted(all_candles, key=lambda x: x["time"]) - - # Asegurarse de que se han recibido velas antes de actualizar time_red - if all_candles: - # Usar el tiempo de la última vela recibida para la próxima petición - time_red = all_candles[0]["time"] - - # Crear un DataFrame con todas las velas obtenidas - df_candles = pd.DataFrame(all_candles) - - # Ordenar por la columna 'time' de menor a mayor - df_candles = df_candles.sort_values(by='time').reset_index(drop=True) - df_candles['time'] = pd.to_datetime(df_candles['time'], unit='s') - df_candles.set_index('time', inplace=True) - df_candles.index = df_candles.index.floor('1s') - - # Resamplear los datos en intervalos de 30 segundos y calcular open, high, low, close - df_resampled = df_candles['price'].resample(f'{period}s').ohlc() - - # Resetear el índice para que 'time' vuelva a ser una columna - df_resampled.reset_index(inplace=True) - - return df_resampled + try: + print("In try") + if start_time is None: + time_sync = self.get_server_timestamp() + time_red = self.last_time(time_sync, period) + else: + time_red = start_time + time_sync = self.get_server_timestamp() + + all_candles = [] + + for _ in range(count_request): + self.api.history_data = None + print("In FOr Loop") + + while True: + logging.info("Entered WHileloop in GetCandles") + print("In WHile loop") + try: + # Enviar la petición de velas + print("Before get candles") + self.api.getcandles(active, 30, count, time_red) + print("AFter get candles") + + # Esperar hasta que history_data no sea None + for i in range(1, 100): + if self.api.history_data is None: + print(f"SLeeping, attempt: {i} / 100") + time.sleep(0.1) + if i == 99: + break + + if self.api.history_data is not None: + print("In break") + all_candles.extend(self.api.history_data) + break + + except Exception as e: + logging.error(e) + # Puedes agregar lógica de reconexión aquí si es necesario + #self.api.connect() + + # Ordenar all_candles por 'index' para asegurar que estén en el orden correcto + all_candles = sorted(all_candles, key=lambda x: x["time"]) + + # Asegurarse de que se han recibido velas antes de actualizar time_red + if all_candles: + # Usar el tiempo de la última vela recibida para la próxima petición + time_red = all_candles[0]["time"] + + # Crear un DataFrame con todas las velas obtenidas + df_candles = pd.DataFrame(all_candles) + + # Ordenar por la columna 'time' de menor a mayor + df_candles = df_candles.sort_values(by='time').reset_index(drop=True) + df_candles['time'] = pd.to_datetime(df_candles['time'], unit='s') + df_candles.set_index('time', inplace=True) + df_candles.index = df_candles.index.floor('1s') + + # Resamplear los datos en intervalos de 30 segundos y calcular open, high, low, close + df_resampled = df_candles['price'].resample(f'{period}s').ohlc() + + # Resetear el índice para que 'time' vuelva a ser una columna + df_resampled.reset_index(inplace=True) + + print("FINISHED!!!") + + return df_resampled + except: + print("In except") + return None @staticmethod def process_data_history(data, period): @@ -317,7 +395,7 @@ def process_candle(candle_data, period): data_df.drop_duplicates(subset='time', keep="first", inplace=True) data_df.reset_index(drop=True, inplace=True) data_df.ffill(inplace=True) - data_df.drop(columns='symbol_id', inplace=True) + #data_df.drop(columns='symbol_id', inplace=True) # Verificación opcional: Comprueba si las diferencias son todas de 60 segundos (excepto el primer valor NaN) diferencias = data_df['time'].diff() diff = (diferencias[1:] == period).all() diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-311.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c231de3da469909143f8bc1b91c340d278c2e6d1 GIT binary patch literal 15103 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 z�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 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/__pycache__/client.cpython-38.pyc b/pocketoptionapi/ws/__pycache__/client.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9049a4926bae59b9c2a76e8239ea0aaf4d8b3f83 GIT binary patch literal 6834 zcmai3O>i8?b)LW7on0&z3lIbW5TZs9<#1&Z1WAxqAlZ?G9|;k)UD@OXcy(XWS8XIY?tjy&O6Yq+ErQCeX~7i56ZgX*V;q&kgON{ zdVAO&Rux`69N}kPs`e-!I#BGhd>G{zE3(q3ihYimtc>?KtFQsQCq7VEl?{HXut7d~ zpxft}x~4R0Ut#@9v!SOZb7LNRZJw5?WZaM4)TC+>2E3uB#k)%%tgJRsGuJ^~+Yef( z*L(FX5e8nuMT-XP|LJJ_JDz9?MGR3LsHzgHhZ@sfqQ>-CcMN7=F@@x{k9oWmGAj

b7(OSE=u&}hYwtVk)a{m4iTg&%&5L>M< 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 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/base.cpython-311.pyc b/pocketoptionapi/ws/channels/__pycache__/base.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a9c9c14459800c0ec878690af86c1a2a6caec77 GIT binary patch literal 1392 zcmaJ>&rj4)5Pq-iF6#zd5;t%#G4Euu8hbK^G=xME4KX5d^|ER5DD49ZyY2E`S7gJ1 z0|yS=xq9+Pym<7_Kx35j>OZh%J#liT?G{{FU(I-U7u=9~82#6+3Ey8Yc=V>%%} z@i170OzGbQ<(PP+K{WE1c=UjHnxJpt{f}^`tD$*%oz#r(-KU|~X$rO$O1A1K!IndJ zOGNBhJMzOIeY7K1Rr=K3a01aZ-9Z@Kwd~Mmpd1rH8WgZKk2Z8qJ0K0iD|*HOZ4|r$ zAdbbx1Ayt8^G!#oQLz6a4p0ybb*!Xc1#wLF=pNyqrOTs$qIGx6EL&FFkxq*_ZQo)q zHU#qn6*++`Sh&V47qhTd(xTIv?=LUrz8GS*ozxyC4S^^o-a`&^D`xJqRHLyD@6@!| zP@=gekr;(JGj>*=x9pcnNM%0>{Pm50BnJb0V^EO&`)|sr3;)V7Zur6j4V8YV@dN*(vk6Q0*{K;sW(GEg?Ie zQqTgPr^hp&njwqO!PvkOVjYm<@_Dfe>A-=LW1z@!5Z&tupO;6QgcsBe5WsGgOjeIx z|EQQ>E9U#?Q~mR;FO`LFm4%big2X9+nUwhFs11a@_{6A($sKHBnr$}&4bv_uTx{@#F*)o3Wez&$;H)j;SueT|H(8yMqR4u z@*3=MFQxrijmxuR$C6?bK H>fjN5OqFwH(jxU6GGx*amytqPEo0#MM4}X6$K7aBsUv-+qBs@wX;->_Qw7Y zI3oU0uKbIN12axGT`gTpV^3_)yqWi$!^vb!VEp|Z&!|JlAN*Jk7o68%`WZ}|MC2Xe z7PnV~+rs+pL^gL$iSO1gKS;jF1)WJnr->HyM5b4wq94mDlSR9ABc{6DO)ru{HI|9t@`d%6r3t?y%4&hmE6)DO8q7j?NtcIeV-k#T`0?VxP7E6MT=xETHgB{ zw0%A1=$^JNU7kT1bA7%e22M6hP@-C>Lhlx~t4;@>gf3;F#fDJ6ZKP?QYM_Ai<*_ct zcNISA#>EyI2aucbeX~Z+c0!7k2NP1fgc5M6&HaV;V^AtWv)D;1c{A^=&xS*nzS(^CZ1ir{*?2@OwegA=_FQyp61E5DCy^-O!KTcT8fEkPLsuv}Ei6si-;XRYN4$-*_}h5Pvh! z?!m0NdjiIaT#+9JFlerTWDDPNle62vyQD-+39(#5W;nr;+b=477~5p)BRW zu1l4YX7OA!igY<>^S)}=J)v#7Sqf#$)y19|@NAbLMY)if+An!qo$|j3RpglxTM~L^ zEt-C+fCAQ)$J!XrmiXYcjV)*kkhOc?Y%O%NAjQ&w1u1TXajWOGFb`*jw<8B|*XyIG zn4U51GB&S&Qm`K}cC(0Qt!Ka(&lAREe*?4yjvC9l0s}1EDZJ(ww(Sfgo}GA>d<PBqqFWodT*#H0l literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-311.pyc b/pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5edc9792c41d78913116f30a98f71500a0a37195 GIT binary patch literal 2422 zcmbVN&2JM&6rc5e+HsPWd_fe5l~irq6hjm$Rfx7Km_qsykf1`cT&>og!7QwI&FnfR z(MF0Y4mon82P&l%f+EyI)mEZX`!_U+qIR_s5>ijOEea=2eKTu2HVK!`j(<33Lu&={CYLksgQ$J%(T03MnpAK&I}I^2xKkgy1brBFUy zUtE|Cdt74UFNy0K6;f6@3~4ZCuI_l;j-T)aU&MkhSXOf(wei`~W16+tTj9KmcX%QCa%hyqYobt<0&+`zKSGj^@Im)Q=XV!C-!b;2Yi zH|xap=5UybH^01CBca5?A10j|u`f_e=zLZThgn4R1}V8t`3788^UF}O4bT-`k7l({ za*1`7reW`Rs|B!vO-kZjHC&IcH%v9Z)=dlwhG*#5EPJ6^jc?3lx73Qu%gbj@7Qb={ zb&H?dX62e!%oF#9=hTW9xhEHR&_201XOqU!s$ts28efmkW7N!I!!4Gt8MX}pES6Y$ zln?V*%^q!SG0MXfhZ*91M;{{n}6}LIA7D zXb=sKuO-(Hyt}GC)6)NFlbhP)TK@jrkBvXYC!hV^|409Zc797czuxLQU>eOol9>lA zcDf#>biL}}y2Zw6UB6j3tXM(^L6;r@c!cOU8y{xC5}E^}yn7U2rTqjw2UqfuG%U{v z5!xSPOU%gsqSzphmtI=bsnLi@OE86+gUSqAt<5w933(R*yM!AFCZxdFW!2Ug-+KTN%~CAiQ?P)TBCHIHRUv-wK5y*;c)!20BTD04ns$dQpv%KJfT8$ z0oVj}01AX?LRpY4r$K0#u2>G()E5k^PQui#c{%`2#JM=c98S_DK_#BA`+@uySM zKYg+F-kFW5{MJ-H>QRP9BE+B%4b222W6?nB4PZFHssu$K+1tTu@3%`&Mt|0S)i<=W zTiV(6R_Cmmry1~*zQtgduWz#{1NPgWuY>ZZz}NjTw#2^8rb7(^NqBvhuDgy+--P8b z^GeCfHQZdQR;hcfO=N=(=nJ?M_oNYeJlJ4(Cm75575c=?j9+J1Xl9) e$JP9EE_u-@|6oL5LEj(0J@K4NUc5%mFXcbMF<_(s literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-37.pyc b/pocketoptionapi/ws/channels/__pycache__/buyv3.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46d6cd24218cbaa3652f424a9da020509ba22915 GIT binary patch literal 1661 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 C!M!8^ literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/candles.cpython-37.pyc b/pocketoptionapi/ws/channels/__pycache__/candles.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e03805745c9322843fd5329ba0b68e7f69303a5 GIT binary patch literal 1263 zcmb7EJ8u**5VpOK+Z+UhKu|!j9b9t=$_Sx|AcZDTBp$`;B+FU*62tELV*7F=x~oV* zPfI~c#6NON#a{plW_EJ{@hI@hZct7y#%Mp2KdsEFD%E@BzW`hdpGI~k|+421?Bd3+h$HwM6 zrhKJ*ZYExvCND)JE9LT;+I8JQxi1=34Zi>?8PE_v5>9QGxWmCj!DNNe5b+Q2Ga!}^g}@Sl8LFV{xT zow9E9LhqT;W943XGa2m~Kbo}kI@)5QM>97T`_aAzu@2MS0-;DjA<9frh$@4KMl!~T$^`sLLw{5GjSl7b-bN*y`=4Nj3r;n1 zOF1X@REeJAKyEnOSPnt)5WhEc9?zpWo5zyAPZo(}^JI@Ll6f27m#{m<{9|6@<8NEa z?;DwWlOsT0cL=!uXJY&P{A{dEgcWrzO0N$U*K#d?wy(~%cfmub5-nBZ^;j!A{QWb? zqq2vh>b~mWayhl4t*bj;*J=#ryQ1@8_>9ru4@;$)Hoh|hY1>scH{<2){K!o6nP@!v zv@Z_TIgLS5BrVC1v?&j%8IOT;NGHl_BSVZ7!j;Mh`9wQ!?9onpusw)EM z*xNKho8HSxZVznlnJ_z64SNmpS2ge_8!sv`zF#s~^@cU@#vwM8y|L+eC%_9}8vnY( z12-cpF7|0PDiaSp27*WkpKby7i-+|VkY$+WHV}a_3^^biL(B=pJK&*@H;=&6*tJ)M zU1=;GK3pl7G5-^4cg2W`uL)z=w#a=9ro&_OvyOBZ7z@!o#*=UoOvohU_+xYwaWaXv z$x$?^qyG-1Q(qxI^Wovyny>@KQ>#*MBrO{&UjAq5+wJsxEDo7wWy*3Z_XL%EF?}-- z=i&qK66#2DQCZoSLU(_^23Zz*j}^_W#$3urn$?we*UD1#L48w}78IW&>inT8SEI@{ zY9M`ELZ_-fJ)It?Q95Ro^*#;Qp16R~iL$5$>7qLIE>`_MV0Q6PXsNghJp?yjD8`>l zW0gMGs5jO-feVb)?uL&Uz32_9#qLNL>%t0PL*7Fpihee85g(UKeRffe*(F{;`8bfN^@2el->l%TmypIF(%D-7AFZgT=-dA-RbFdunku|3QAp@(z5Pv;Abh_ z9kJqkr$s4OIi-3Y6l-te5&&Ol+N03EAN+~BClVY6&=dY&r=@Sf;?mzbtUET{X@_;U o;C;~kNziki1fKYYsx|!0oJ*D(xQ{U$GyW9}$t+HA5+pM}0BpBn{{R30 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-311.pyc b/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ed93bbe79cfc3990d1d38093fdaed8834ea3916 GIT binary patch literal 1288 zcma)5%WD%s7@vJ4Zu2Nq=|hk*QV@d}6@)@x&<9AB)VVhJR8>O7LRTtJ+<>cq@A1+=u4Q> z^sS@?IT2^0ZO>ii*gVY4idNF{eb|i{$EOtyH z$uei9#NOq(h+Se+KA5yr3U+CxiWznwF8bCkMHZQXPb#!~yd!cz zeP|Kt`c}!JEPwHt<@%KEVmp2nyMv_0a8$XQzU9!8FdtXd7lylta%Yx;OkChN^Eow0 zL|%hrl`_jC>q0Xo<3jz)BSv>>l>3413e!0~&^fhB!B9Vj!06!$(ggb$ai3A_a9INx z_Nlo%V?O1Sar2RDl`FovLix7uRn7B_x45zD()w)&TdrA+S}yJZT(!(PHzjJ9+Obfk zDDKaEbuTawDq`D4s4;rJsq#Jbuz>ZSe>7%48?)`+cOv^>J(raJWFim>QV2QG6bU(l&`u58-J44Y5wD04 z%ZNwpvS9B4yCUTg$>cak%n$;gmK>2nJbfOxnpM*|_)x z@Iun^b)N4fEx#p(mC1PsblD_9l8ILJoEXT2(4T=jHRj@=7MPr4IS^cqd8jFh(gE{r mF#iqQYybUqK)MyJ4#>8m6(&a%fqam?y8laRfB)ku0`Uj*MQZK< literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-37.pyc b/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd305e0e2778777340b6df1cf45309d99117662f GIT binary patch literal 1009 zcma)5KX2496t^AU^|)RckYHl)$Sq+(s#GC_S_D%IQh_0gWclKE*H9-;ZC|UNj){H@ z1{e|Ffe+%935idD7_gJOaw-d!?7a69|9-#sC;K})LloBUule*RLFjvQ){6$?Y1sBr zI3&uD#F8jnk&NJICo0L3_DM7P0!b=+S4j4Nd`PmMOpejGzt}z0a;|_)wPCMxaSHBb z<4Rq#;zZOlVD_?_XvHpIV%xWE98~%vP@*yRbYECFDx$YuL1riGelP%KI7lNB2Pq_@ zGLiHO1^Qm3_oIWB=D1~9>>em#?S>Yn|4WSDwouDMuvW~VNLE5(dE!0@+p=&-yu?c) z$wx9H?~^6^gqG+XUM8Poxneo!;@cs(6D^t3EJCuX!;F3*YN^2fTZ-Y3t=3*6jHs9> zTzL+>lzZ&;39Q_QAv18Slu)~JT7pS$UMp({=3J=mR!7I=+=#Xx4_sNnG{ASgashay zX#5u`8+C2#>NzI9*RuM41E$pSC`9hXy!drLxq-7eSm$XSpvTlx3u@|bUFYBjYhBs4 z6i#sK42bFrGNVw^U(buZ{EY=;^S9+p=g+{NI^E2h*sVc0&=$c256R;0=8UB4?~cOsgiBF1=YGg})eds7N1UI{g<8GY z;#}&2a}zO5L~n&}96K=$#`~jLOAPN8g literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-38.pyc b/pocketoptionapi/ws/channels/__pycache__/change_symbol.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..027db20c710e88c26904f938c484beb3dc2d0e7a GIT binary patch literal 1045 zcma)5&2AGh5VpNex}+%wBsg*KkqEI|kSbLO0YO3tHB>6StX8tz^(0xkf3=-PjlzjO z1_wCu5-v=jO}l}`SH=t&H%Y_|64NsNf7$(mF}QUdFrNq zJHmwvpsL~TK zZ)%fOB}?a`oB`A4#c`FhB^>K!x3NPW{ctYP2wVDGXqcp4>kdb^rFPc|fMV?E5s4ig z5>pvSdVw5;o~K}k!~PZ4*K7e3HRSC-ng~-aJZrZ7> zt*EnPsT0q+guE4Iz}w!7>T?@%o{Bu@{HCvA^D4FocHi%iu5NexC%Qa2ah>I^`Di$| z1I~-4(VaZx{B$Am&CV9*vPwBup@UW)zX_{>k0 wQb(8ZM91!pDE}lZ_0_X|<$9pqL-e0v&qKV`ex^w_h#n3_s!e)VRSSLDA&K(tM3TF zcV(oK87RG5sB8lVPF$#wG9gOWT&=8WumD`&0&WPhs{`!e>`Pha+G8kWekij*B4dt8 zu~ZqHCJW|Eq&I=fHV7ya4rPrK<+}xCgXVD|dJxLudXD!!}p;Zqo#|ww|TKTF7r&b29Y3b9&QbCIhkJUtU>V*g- zy0@<29h%-jck8HK^j|I&^eE#87&p40%0ZiAMb<0p=oN^KhLB-kB6k&73U@U!I18Cn z^eyY~*}Yl&sl-h71J9|hh4#FV>tWrumy-yOk{8@vUi3tBs>U48_LKeo%b4%jO=(xw znCA&s+Q*1RCZ!eTx|FugFC6)6#dKTIlJ^nX5NF}i)$V00*0u4oF(AA)eviQEvCi0y zeY136mO5tXo03K>w z8qDpVBoztHpu;B!#&HS86sRUoKq>MXLVGy6xrz3CY-BSxV>k)@Aj%DU)H+tAVpA5= zA{AG#^#j$Kkr6sI(a(7f?Y}$@&D(w2cY=#}pgK}ML5OuiNEfC%|9)M_wUZH#j1pvb Q65h=GRJ*_abChKL1K05ZHvj+t literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-37.pyc b/pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c78d9d38b430196bc464d2c11ad7d328e8eaf825 GIT binary patch literal 729 zcmZ8fy^a$x5VpMzta7;$M0Z(Ov{PXQ=Q5jb$k}EER@Rr3r3W zDvcxrKbc#nX1dgMZXrDaTbpwWpjS3Wl7kQw5qymbPth1oAm7AS?vT(m(%iD|e9JzG zEx#2=dW6sq`qOcAC(~AUx{8|C6-^DQFffhE0$kK|QBk}9dHrN%-Sg!gn?5*AUc|!7 zT36OT{A@eG^8N&K)IJBxqr*69zbxXwkJ=7#{bL$OZR`@7{1U4=d$qRUI+})n!Il?Z z8twEC*3s+yd7DqO_kf+U55=m<-dMPFO`9znm$d`NZU)^J*#@%wqpoXPLUxaW50%Pw zSt=FM&d9Kl;Gqab|7d=&@MNF2z^A|>np7!2R;p^ux+H(1)YV#-yPJV|H$k|8?twX? zvw-@b0u2~)DTb3+rqMm}$p(@=`DBTor=v&q(iN2*Y7UTTFCD@A@a2xxEBYBjj|mTh Ef946g$p8QV literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-38.pyc b/pocketoptionapi/ws/channels/__pycache__/get_balances.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e1fd5a0abf6d1e8edd3b44119363598d0caec7a GIT binary patch literal 765 zcmZ8fO>fjN5VakrMBD8V#El#{5TQo&xcPVLX& zK#%+(4!&~YFK~gGY`2O!l1CnU=J`F(obK(72-x#q>Ddh>+Ro%b*8bE_4QD?+oFP=rJtw6r7?6^qqa97KmK|-8K0^ z*W@!>(;EileSqKT4o2avO&ZzCGOQb$*Od{uGLx{#jScHI%qx4B*Nqq2?$2)-b>2bz zB4UnLvefRu7u^~t@18)8*yccaIE>@w>n!q|-?V`19-$<$(sNU17f{ve%cVB9MKuU) zbaCdml2-mCEq3bfr{hU_YT%{xU6n7+ZTd!=3tKnoNssWMSMd7eZKYTHrOd0e>CZRH zWRs^WlV<0#s&rw}d&FEIL?(+uhyZ`GpA4T-_HV}vSod%`XhyuvoI#tQ41YifHxi<( z)w00-ScuD|EH*d2qIL|hy^Mj|#WN3_k8h&zfO6KKL_7)a(T`Uq-qMffFkCG*-*KCl Zx~~}^BmWlRUGQ?l>J?5+|HhaG-hW6|!;Sy| literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-311.pyc b/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..160e8f232af925602d626c3cafdeef080e030490 GIT binary patch literal 1008 zcmb7CF>ljA6n^JiLYgK66=GsI(J4Y$P|DCKLV`v@6>2C7ERm&?o4X{Yj-C1(MMN1g zFz^quc0dKxKNApw;t7d~EhtQ#cxNY(AYFL&z4y-V{J!trd+!Q`9H89#Vl}@JfFF9Z zko4S{ZJ{#;0d){W7%u4;b%THbk3pnfgP_tlO#z(YN~E3==^7L>gM0hF=(&MHvke_+biK|v(&)X6cAXTiT zBcvBPO-Bai@^H0iMAtO}Uly1L^0+5e7*WseNQ_e@-DZ%%nMKjP5&NhtT}QL~D#~)+uw9q) zK|wdgTx|0i_$I0mOmnbS_?q4Pl-)e3yxn^re#~xv&TdZ@?+i~twV2VlGQ zxX{mYe%!O&dE^S`!f$XMtl>|AM)?3iLHp}k>8XxYeDOQD8!ex6TAtAIGz0mKQDsWg z>HAYyRY@|Pr&^@JRkRWNrx0denTtZ0hd9WA9-st!Lwid;7uj-hj|agu4Co0`&rnTM igphOCnZV9>xI6j#oo3bvQd?DTwtwlbzb^^JkbeL~Nd{p6 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-37.pyc b/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7fb444f0be20386c4b8d7da527db830e2ba08e0 GIT binary patch literal 767 zcmb7Cv5pfl5VgHd2vI^oL3M=-nr*g#E&_DiorEYZoOD33TFG+OPO{u)z315|BD(JQ z5GWB}#I{uY0-|7Mb2*(54I|C0?eWfg^TtQx@sOeY{+7+ZbH;wqW^WP~hv@JagJmhR z+=`N~L@GFY#cX8dCuXG+*HIeT-Z_i=+oz}Au1lxpKBzOFU${oSshh%A>gCyM1yESE zaWmLu@};R`ma}5FHLMIF@o`AuLBUk;)x@+S?(w@*InApB$G4 z;J@HoNwjjpBBL*LevA$eF2 zaHwu#C-h7cL~Xm#4949}$ASl}!hCxpvUBvN9`&c?qtZ z2jcvdg#mtkJY5oyo~)7y?o-(;Ve#(la*476^CTCcjf<9ej^<=T`tnR{AWpKBfZSSrw4>loe% z_vtLcKsSKGfXhgV?ra*%@Boim^%w7C1IeCuGQ)Qhh-UZCo!TTuAb@u8Y)9|~K5_=6 Il@z1s4<1&^VE_OC literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-38.pyc b/pocketoptionapi/ws/channels/__pycache__/ssid.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30c5b8bca03b717ed851f2b706e258b57d377ece GIT binary patch literal 801 zcmb7DJ&)5s5ZzsGav@46D5$R3f+j+^fG$GlASWS&E}Rsuu`I3jyqm8<=Xt8 zhaC>ptxYTAP2O@cRqxjh8z2Z|Dz&bt(`D*>c(-{z5zRxIpzr9@-d%4T)Qv1m?yxSw zWlK+(zcD|+$M3~#8ef3(5Wg+b)w+&P9bDCA6?f8f%AhcX+dj!nTEtZ=OxY@Csx;n0 zOd_F55EDaT^|2XfotP}sdPK~$l=XIFVm{ng=94~cBV1ZHL#^}nR^a+6llZYxJx z+cMGG_pz0y+t}hh2={0$z(6~I!hp*_igs;2k^Vj|HR>Tf1g(S+B1AkSWLa9=c+Ty+GN&U3Cdf>W%XFSY_$c~?j3 zT&xqrz})FLQvN?b%3c}qlcf0u0!jV~Y*lmtS(L_^5|Ew9!y+=uD#8$EcQ(iRNqLOVoPN0Vrz-MORqN7MB?7rgsee3S*ypPG?amFy;m=#sppJ zxEL;E37XLvq^(kFLDNV={uM%lC zBcR@mnkH`I8t1dK%m{B`=ISRdi;puIPsD93&>_jE2#KaB$_%!qu$APi3KCw2@uLgM K{`yBLCHM`yqwlf+ literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/base.cpython-37.pyc b/pocketoptionapi/ws/objects/__pycache__/base.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbb7ac8cee3f96066e10a9960edd87f180d00000 GIT binary patch literal 766 zcma)4J#X7E5G5sAR-Jn9$f1iDbvJ?{ND6eS8=xP9K;SBibgINLRgy*!AzS=Yx)l9K zTKg}G4!xrsBW;%+aOB-leD~f_r_@*U66Q z#PIvHOmzB=%|!R&jn&(=kt^%uxvj5EkZ;@2*o{1`ypcC%>4&OaUYa@-HNqV%#pndx zKgY$el4GMp^D@;4zhk8^BQ5l3$L@KV=?oi=dqKEeakj3!|NpKiFB^_tx= zz!kCiV#fO;AbfyLb!{*e-mF*On4@w0Jg(>JgE!8rkIjWuuZ+J6wpB|TR2xOwsJv<$ zb>r0_*sCSt742=G12mf^0OZu0NHE?_sax@IQa`3iaip1HaK|nq#qQI&v#oLARt76C zaN2)QSQ7JMGLd_mI}^5Uq2%Lvn65c&~DgMh4i z5(Q9ofscb4DFo;z0N3%)!1yV^muhpH5$BqANM-z9{)6pO(^K>ES hBF)oSTg*~NRQhZfbu2z2d_d^)ZDDBX#fIJDm@Q0|NH?KAZobggjvK)EFd3;PxdPlBDDlkyHj7 zA_GP5!ZeWKS8~9bH(#_|Efk+?!>78qR*s+4uGAI(kXyyqYG%8to?WTJB?Ywm!$Qc8 z!0jtI6iF$71(K$r1c(hund(U5Zj$jLxAy;$f##!O9Dt9(Eh-_& zEfH`+e>&OHbWb3L5LLcZTiPF8iqLwbOOh3DEI> zKRvG0`f!<-RaScmwAUrC%WQ44P7a&R041q!+E|FPDxDB9PK2Wo+6-}q_%D5ZuG{1m-Jl_FFPRU@vcQ!K0txRP{{OnTsORndCeU&`EH#nWa zy?Hsh14n2XcHV=iBM>z&JOQjuU~Rw=Lm}FM5KI5xK)f%+_f@{w-SmZ!x)8$jv0+^A zxEPe>2^{XhAf`bP@MpF7BBm^i!+`qg<{9 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/candles.cpython-311.pyc b/pocketoptionapi/ws/objects/__pycache__/candles.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a6608a2d74f0bed525fcd4c60dc6702e938bde1 GIT binary patch literal 4968 zcmc&&%}*Og6rWx1n#I_dB$Vcx4GBdq#3@nJq$El|s9Hr)Xe638vMg;J?*dMY*O^&L zV{t$#QaL0Qmx`+DAtzeIUsCmABCAC!RjSleZjMN$Dwp=Xnf2nuHbG6=tj%Ng&BxB~ z_h#Pw)<48z5dzoXFX@RdI|%s$Z)%t76*kA9uuM#nBBo@@d1+cs$r6#tN5l**5L2;2 zD7}1v76k zeb&0kM1_6xmX&pqk8t>eEf$nh1}$nlm5VB zw;j8f7C{v;eedd}f;D?`I+H7;i#(<_k9DS)OV6^jh%ZZv;aReH*VPOoSI9YrQHqNh zC2Nj$crM!uW}Z|vax}51RJ4O-{@p}AvJzVF@_9Q94&aU4s@1?+KH!%*f0wROyJ%78 zuI||SB&>M-fwmoL(8+b9e##_WJZ_n-yR$W6MmC_Pb#ETd7D(wkI3tXpm zfk~W!_4xzJex|t%BLJgt;EV@yOrQ-;58KG&aBf1zQA(|%>)b8wa^cputnuKglhm>b zZirguSVE?FWKh1>T5V7qWqYvEcNTiGi(nwtMoF}*(sAfpvvTy*!;Vu`5^6uNvG3s0 z*^StqO6V?d-Wf*S6FsAwW59O#~+?mPb zy_z<|Fzu{i&?r3D)rwwDrd^0)3(7&fJ%Z*Km{pNNc!H&FIGDPI1hO1Q*Id!w|Y^UMywY1EnsH5MKd( z2wwIkn7`)9Z(8jBCz@_NcHLqCRsfhQ%@M}1|j zPr#}VEtWZ~9VGLiE0!~5n<)60FZeuQV{{ls@B&0n<5O`+UC21@Xgd9G_^t5`?3rSLRxp-siJ%X#>RaxX=i{o`D~wO3&--@xe-bu&fO>uH+X(=KUa<@TzGS%$LXJK4kDrGa6%J zYBe5T5usqofIEXd@gV=N==wTHS9XR{tMKwx-=n|bYR*@uH@6yLJvG9Detbn_4NFh1 z^bD@Yhbr-*vNpuIOhjoP@_HQ22{ip^FlW=((BRs4!;n}UI2v$&)3?!FKzGbb_*pBT zH;jZtQH1iBr*}o_=SK;eQLOk03}pM-XG1w(R?b(Ika`@1Sfhz}ss(CQ^|-Gjpj-t( zv$vw|ugbDISS4Vv_JHrvc+appR3%{ip6KX$cGXGjb+WFPaB%OI;q39Vax4+%q`AG@ zeif+CG&kYb9*UXV4U6O>G7Be&zmDKxz)5?mT@b4BB7F~hm?PO77?7fpv_a05$+_Rj n8|C1)8Xl2AaW$I7PamWA$yQZKN=ksJ(JY#e(fg!H6$kqdi_vhb literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/candles.cpython-37.pyc b/pocketoptionapi/ws/objects/__pycache__/candles.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef7c9cf1866b00442c7ee0eefcc958fcc2f3bc87 GIT binary patch literal 3732 zcmc&%U2o$=6dgN`<0MYn-R%}ue5{3#P+o#SNJ!DLyV@cULR(fU%c3a4bv={Tt!rmz z9I8frYo&bwegixr{*hmK>R&)eaPN%mIBnf#pLQxwW->GJJ?GxJ=k`gb(<0FR{cAKn zZ4>f0PV#2J;4wVnGw3K85~@)>)DHEbu92?^tx@BQP=nP@YeNI(b!x)gWID|2w6R5c z*6h=#F`b6Y8OPjt7W)S*alV@*K^!?7UPMDCoFld))Iz+o&-|o+4sRnpEj6Bag84Yf zTMY(};St-=F*4M^D4lA<8r5m-j0_D{rv|N`kyCAG!q}t@Ic~t%qD?urVBDf@Ic~z( zrX4wM!MICTZWB>SsK#tXnbFVJd<_<{;pZX+WFH8)MS-K<6h7+kA@Qotf@#49{`d-fp=>v2w=>(-@4C3Wr1{S) z%m+-7^RpLDZv;`^nL{~W9ts|Rs~QR}FA3#E1r$Gw1zQfw!qx%|I{$jV*ctKi{QVM| zJByBy>r29^^2}baySE&g^3DPbW}NH6TpbT?%Oco2_P8uGTxu-y8V}40<3)n^oN7T-7VY?)nk{On(<%R1wlyVigkQw`h=5Yjd`i zn_s43$*Sd@r!3ivDGIhI1Umx(6^XJ(R|1SKycopz-Bw{s?UL^$ad=M?nLDslI92u1 zFY`BJsW1*WR7VOyWvviIBJm=hVHGuyz8!2U@CDzPFdhUii?XMGB>Gv|)6e+nt0ND$ z=f#(*H*|UHIAW^ufiyF#&VDR#H|9PlZ+HzheqCe(O5-@9Z;lT5X8~&38|mmMJ2O7K z5+8RJ$D+Tm<24BRZIKXv$~lYPT!5Va2W<&Px|yLFCHo~x)^kc0xAbhj2D|uO?AEcv z5>Tc*{x*&<98(i+X9DRE3o7nl_W^$0$x@up!Z1&BnCl>X-@{EZn+a literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/candles.cpython-38.pyc b/pocketoptionapi/ws/objects/__pycache__/candles.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c911e673d2b911dc00ab740825468049c2aa07b GIT binary patch literal 3792 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 NU$g#ycG0pe{R?}Mtv3Jw literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-37.pyc b/pocketoptionapi/ws/objects/__pycache__/time_sync.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb26b23e6469064a74f979ab1732b5873029ec34 GIT binary patch literal 2651 zcmb7G&u`>36tV;}zdGblLWG$rAprXhuQCv`F>bTT(|GcWWg`G#uAQ*M=^+_) z{)DyUVC0rQXGWML6XhC~T%?ATJ~n4E7cow&pT_Y%^az5^LWfiCJR_kiyoHl%3NAXl z3w>SQ<37|qzQ+4d`+S`bpkCuc*uqA6?=g5ee459nO6JK-sF+r+utskW;jaTIIGK}Z zQBvc~$xHVJ4*r}%ug3{ka}Gwd>}e6poa<4iysw425GulhL`obBCGuF5+o_CMy3(uA zRrzjoB22U#$Kyxx_*e^5Zq|5I9pKB;B0c_vr~$0~>p{FX`3^kl$&=(nPQDiU+{o$V zNSeu1#^(ZFOd@kOO(vImB9G2QZ1lwLO~d)e)2F2$MM<8RDC&Vh-GzeCF8pTitfDlo zXT~@QAKbqK{{}8YUeX(KMWA+|2AJk_$AWg{%pHJ>&R+C`>iPD_BqA4qNCPhPG-WfE zL5Gp>8l)@$AXsoJ6;lZdEIxtA11(O9oJ&3KH-`3E`mX z>=q`*dT68p-fDi`u)icK^kI^vwCpbUvZO4EA(&EYP#{m*hl2Ec>eB(8eeyc6Z&W~x zTfztH2I_5inWF}Yp$Is%ARbVSv!5DN4wF2#`eukQK%Grx1tW;H)d!&msH%&EOVvho z$`s4&NTuh!;PJvrdqta*;Nxilk&J7CA_t$D(1vBx(YV6K%gGk5M7?+k8|=gyTocY&cU@Z!xqEB&7vULMN)A`!~i+;SH)4CRUG z5R*-H4+ZS30JQ>gkZtbDKL3@dSZ4AL`^y-BEbf@usHfh7W0oByA)zgD&+u5utO*;1 zc$6+=8HKQpItzxjTA0_FDcrVJDyEv=dTM>f2yBJ-tMyH%O=+v_ZncQ2XMPI1s2KJg z-?@hjfB0_<*9&i@F^oma@&+`JI>vJ`Zjy!tHu41@eOc4PaB>S*V z+ic#wBWJZH9*p{UDd!A6AfmD#MVaJ9itRxZeGkcFF`^K?asY}oNt_9DD!ILH>;|o} z)O#>P?P7tKP^++)69yb!_ZkP`YU&IIe&65pHx-VIx@9kwCnrgMV$*}wr~P2Ds+Z#JwYFk zQSUEUOZG-y6$oynO>2c@^MrrV5$hwC>dg-vz5A7%*aj3igylp7a-i&MAcH zi9Xo+Vju$O2VzYOp%28m*noabY{E9KR97EDqz6xmJzDBe4$v&1F2<^$Z9)N3C~un z8bej@#)s0z7taxfSREV~X{)UUm)Zcad?T}iUy0s;wSRwqXJ_&VBAUs!MS6H-CtpeP z*sAH|zDgcTdv9t}RouS+O(9P|$$45#rp~UMoln!rshOz#W0_bpaXU7E%y{~w3gS2| zQX9tu2xI!t5ZZ^|?44Eo#?8zGCp8zo8H0Zdq$MxtOL9h_XV3$Hb9%$UdB)}pfTXkM z!?3>Y?b}oqGL%^;q?u-X#&a-O1-D_wLx6~fM@n;@^3Wj{$|5xKuq=c!<6-M)M@w7k zVkZP#{=b`MJ0oA?yHsAGPOE-t6YMvwvcPD=ycZ2GD2xJ_mNig8~I)^+_s}?jk$on&<9Go$Wi}!-bdbiY_nV$I}w(9oK|q0WouFEYGK- zal0!J2#pz6`S?^LI3uRlp^Mf#g|&iawT@|97xWF7YNE!9AiynE$G@G^H>jtdnYaqtXbmlpF^zZYZ3 zbcEjlUk$(GSt;*ot+c)dR^Y}lu^}@)HBz_)2VMaC`ev1vEzI7|^AEs_afeNRn+Dz$ zHl#Dinq@&AuPj<(sRtgAT&F8z7=R=b)DuhR^qihC%Z|M{v;HxhJI~meH}`<0K5*mD zeOCg%wA|cL#Yrl)bvknyI~>y#8sz05ETumEJ}Hz8m;T9RF|`buEBu`@U$oSPPq4`wOxg~AP>F@ zH0p4pURx^;S8-e~r-*_pmR(q9oVxcf(XYVm_kMqCZ!I9H;~aJ&)6KY)lV zo@hj`+JLOJX_8BOq=Y+v+y-5C>GxoUzKIPUN}a|XR#992C=hwH&G*b25Z vJ{$F`L8cB5)8fzxh09X+apQ8+&FT1bA<%IZe6iT^m-yY~zB2G2-1hzfAtK>G literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc b/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f1d11fe97ff308dee57e781b434f29c23cb735b GIT binary patch literal 3533 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 literal 0 HcmV?d00001 diff --git a/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-38.pyc b/pocketoptionapi/ws/objects/__pycache__/timesync.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b011954a4aaa737a78757a6d86116586afdaa3cc GIT binary patch literal 2498 zcmb7GTW{Mo6ecBEmK{4u*KX~)715qnqnHP50|o@cZW%BPL$eG?3rsUWC??a$u`VO& zr7`lB0)5(lNFMWt_Mq22^)Kvc=g^X@+0NDqAbBVrQr~wjJbKdYwh26s{u~^|O+x;{ zN&RtP@-;N|8FZWkgi~&fX+X_r1s06<*p8jRq2znQ9o~3BctbcBcF^F~KIysBPamgz zG8X<(D*e55cp|j_Q>LRd@eiU{?4Kn=|5O~R*-Cmi5<}g81)n3kJ(@e;hDr=^R)6eb zqMm~w2*4o-C9q$TBLK+l7hd3q#thB{4P4=ln%qTjX4c?M?itwwtrl+^xg}blwN}j< zyu-U@r43r^e8b3VFNs5f4p7_7y^_K7lbvy>)EjXe(i$a{krg)e5IRjXJtr5|rFBIp znEjkETRWG|6#)rM3%$z;ps;rXPZx%Kg~#-oc|%PyAtfG`dyGX%q!|k~SP7T0B#cGw z;J*C5+G{1`??N(suXGq^`Tg3Wc%DTvM9&$8Yw(T|<0BYbj17@LW7p*Gr#st&CvcD& z{Fp?~j`iR>p-yy~4Q9@t`Tm=|9};o;Q5;6eATzE{O-zJYG&og*Ss18+0Rj=y&(5R^ zY&y`C2OXj7)TM1Yy;XARmpqs3ibmPNjd;R28KKqabbn8#U?hF!>(qY+K{?~@SKRyU zwqHEkQs{|H)V6AUIEhIm*Q;&=qAMw+MXjOHKrMJs z#%9>yN6s-WAUc4NHQjnF^l{3Ok6OiNS8l?Vo+Z~{$XgZB1*Gy8EZ>JV17|PU6T`|N zK!zIZc?l>+))k_l)1Pm!D-X56PyU}-=X#}8dv@-XZ}aYvOyfCp#JbYl8-*dujawBV zcY1Hp+NIJG)zzW1L~))OCVXzBxTIH7gurRt$Yj3D~*n#VYOl`Z!;E~e+iH~jQutV$HhvM zF`f zk2+SzwP?HP(6)nPA)C>nM!VbAnxc(vh;YhsI&E6UW1IE-2 U?~57lFY!Jy_0O?9>RBE8A0?!6H2?qr literal 0 HcmV?d00001