ThetaGang is an IBKR bot for collecting money

Overview

Docker publish Python Publish Docker Pulls PyPI download month

๐Ÿ’ฌ Join the Matrix chat, we can get money together.

ฮ˜ ThetaGang ฮ˜

Beat the capitalists at their own game with ThetaGang ๐Ÿ“ˆ

Decay my sweet babies

ThetaGang is an IBKR trading bot for collecting premium by selling options using "The Wheel" strategy. The Wheel is a strategy that surfaced on Reddit, but has been used by many in the past. This bot implements a slightly modified version of The Wheel, with my own personal tweaks.

I've been streaming most of the work on this project on Twitch, so follow me over there.

How it works

Start by reading the Reddit post to get some background.

The strategy, as implemented here, does a few things differently from the one described in the post above. For one, it's intended to be used to augment a typical index-fund based portfolio with specific asset allocations. For example, you might want to use a 60/40 portfolio with SPY (S&P500 fund) and TLT (20 year treasury fund). This strategy reduces risk, but may also limit gains from big market swings. By reducing risk, one can increase leverage.

The main difference between ThetaGang and simply buying and holding index funds is that this script will attempt to harvest volatility by selling options, rather than buying shares directly. This works because implied volatility is typically higher than realized volatility on average. Instead of buying shares, you write puts. This has pros and cons, which are outside the scope of this README.

You could use this tool on individual stocks, but I personally don't recommend it because I am not smart enough to understand which stocks to buy. That's why I just buy index funds.

ThetaGang will try to acquire your desired allocation of each stock or ETF according to the weights you specify in the config. To acquire the positions, the script will write puts when conditions are met (adequate buying power, acceptable contracts are available, enough shares needed, etc).

ThetaGang will continue to roll any open option positions indefinitely, with the only exception being ITM puts. Once puts are in the money, they will be ignored until they expire and are exercised (after which you will own the underlying).

If puts are exercised due to being ITM at expiration, you will own the stock, and ThetaGang switches from writing puts to writing calls at a strike at least as high as the average cost of the stock held.

Please note: this strategy is based on the assumption that implied volatility is, on average, always higher than realized volatility. In cases where this is not true, this strategy will cause you to lose money.

In the case of deep ITM calls, the bot will prefer to roll the calls to next expiration rather than allowing the underlying to get called away. If you don't have adequate buying power available in your account, it's possible that the options may get exercised instead of rolling forward and the process starts back at the beginning. Please keep in mind this may have tax implications, but that is outside the scope of this README.

In normal usage, you would run the script as a cronjob on a daily, weekly, or monthly basis according to your preferences. Running more frequently than daily is not recommended, but the choice is yours.

Paper account sample output

Project status

This project is, in its current state, considered to be complete. I'm open to contributions, but I am unlikely to accept PRs or feature requests that involve significant changes to the underlying algorithm.

If you find something that you think is a bug, or some other issue, please create a new issue.

"Show me your gains bro" โ€“ i.e., what are the returns?

As discussed elsewhere in this README, you must conduct your own research, and I suggest starting with resources such as CBOE's BXM and BXDM indices, and comparing those to SPX. I've had a lot of people complain because "that strategy isn't better than buy and hold BRUH"โ€“let me assure you, that is not my goal with this.

There are conflicting opinions about whether selling options is good or bad, more or less risky, yadda yadda, but generally the risk profile for covered calls and naked puts is no worse than the worst case for simply holding an ETF or stock. In fact, I'd argue that selling a naked put is better than buying SPY with a limit order, because at least if SPY goes to zero you keep the premium from selling the option. The main downside is that returns are capped on the upside. Depending on your goals, this may not matter. If you're like me, then you'd rather have consistent returns and give up a little bit of potential upside.

Generally speaking, the point of selling options is not to exceed the returns of the underlying, but rather to reduce risk. Reducing risk is an important feature because it, in turn, allows one to increase risk in other ways (i.e., allocate higher percentage to stocks or buy riskier assets).

Whether you use this or not is up to you. I have not one single fuck to give, whether you use it or not. I am not here to convince you to use it, I merely want to share knowledge and perhaps help create a little bit of wealth redistribution.

๐Ÿ’ซ

Requirements

The bot is based on the ib_insync library, and uses IBC for managing the API gateway.

To use the bot, you'll need an Interactive Brokers account with a working installation of IBC. If you want to modify the bot, you'll need an installation of Python 3.8 or newer with the poetry package manager.

One more thing: to run this on a live account, you'll require enough capital to purchase at least 100 shares of the stocks or ETFs you choose. For example, if SPY is trading at $300/share you'd need $30,000 available. You can search for lower priced alternatives, but these tend to have low volume on options which may not be appropriate for this strategy. You should generally avoid low volume ETFs/stocks. If you don't have that kind of capital, you'll need to keep renting out your time to the capitalists until you can become a capitalist yourself. That's the way the pyramid scheme we call capitalism works.

Installation

Before running ThetaGang, you should set up an IBKR paper account to test the code.

$ pip install thetagang

It's recommended you familiarize yourself with IBC so you know how it works. You'll need to know how to configure the various knows and settings, and make sure things like API ports are configured correctly. If you don't want to mess around too much, consider running ThetaGang with Docker.

Usage

$ thetagang -h

Up and Running with Docker

My preferred way for running ThetaGang is to use a cronjob to execute Docker commands. I've built a Docker image as part of this project, which you can use with your installation. There's a prebuilt Docker image here.

To run ThetaGang within Docker, you'll need to pass config.ini for IBC configuration and thetagang.toml for ThetaGang. There's a sample ibc-config.ini included in this repo for your convenience.

The easiest way to get the config files into the container is by mounting a volume.

To get started, grab a copy of thetagang.toml and config.ini:

$ mkdir ~/thetagang
$ cd ~/thetagang
$ curl -Lq https://raw.githubusercontent.com/brndnmtthws/thetagang/main/thetagang.toml -o ~/thetagang/thetagang.toml
$ curl -Lq https://raw.githubusercontent.com/brndnmtthws/thetagang/main/ibc-config.ini -o ~/thetagang/config.ini

Edit ~/thetagang/thetagang.toml to suit your needs. Pay particular attention to the symbols and weights. At a minimum, you must change the username, password, and account number. You may also want to change the trading move from paper to live when needed.

Now, to run ThetaGang with Docker:

$ docker run --rm -i \
    -v ~/thetagang:/etc/thetagang \
    brndnmtthws/thetagang:latest \
    --config /etc/thetagang/thetagang.toml

Lastly, to run ThetaGang as a daily cronjob Monday to Friday at 9am, add something like this to your crontab (on systems with a cron installation, use crontab -e to edit your crontab):

0 9 * * 1-5 docker run --rm -i -v ~/ibc:/etc/thetagang brndnmtthws/thetagang:latest --config /etc/thetagang/thetagang.toml

Determining which ETFs or stocks to run ThetaGang with

I leave this as an exercise to the reader, however I will provide a few recommendations and resources:

Recommendations

  • Stick with high volume ETFs or stocks
  • Careful with margin usage, you'll want to calculate the worst case scenario and provide plenty of cushion for yourself based on your portfolio

Resources

  • For discussions about selling options, check out r/thetagang
  • For backtesting portfolios, you can use this tool and this tool to get an idea of drawdown and typical volatility

Development

Check out the code to your local machine and install the Python dependencies:

$ poetry install
$ poetry run autohooks activate
$ poetry run thetagang -h
...

You are now ready to make a splash! ๐Ÿณ

FAQ

Error Cause Resolution
Requested market data is not subscribed. Requisite market data subscriptions have not been set up on IBKR. Configure your market data subscriptions. The default config that ships with this script uses the Cboe One Add-On Bundle and the US Equity and Options Add-On Streaming Bundle. Note: You must fund your account before IBKR will send data for subscriptions. Without funding you can still subscribe but you will get an error from ibc.
No market data during competing live session Your account is logged in somewhere else, such as the IBKR web portal, the desktop app, or even another instance of this script. Log out of all sessions and then re-run the script.
ib_insync.wrapper ERROR Error 200, reqId 10: The contract description specified for SYMBOL is ambiguous. IBKR needs to know which exchange is the primary exchange for a given symbol. You need to specify the primary exchange for the stock. This is normal for companies, typically. For ETFs it usually isn't required. Specify the primary_exchange parameter for the symbol, i.e., primary_exchange = "NYSE".

Support and sponsorship

If you get some value out of this, please consider sponsoring me to continue maintaining this project well into the future. Like everyone else in the world, I'm just trying to survive.

If you like what you see but want something different, I am willing to work on bespoke or custom trading bots for a fee. Reach out to me directly through my GitHub profile.

Stargazers over time

Stargazers over time

Comments
  • One final request and everything should be good.

    One final request and everything should be good.

    Sorry for the delay boss, just got home. I ran the code you sent and got this output.

    [email protected]:~/thetagang$ docker run --rm -it \

    -v ~/thetagang:/etc/thetagang \
    brndnmtthws/thetagang:latest \
    --config /etc/thetagang/thetagang.toml
    
    • export DISPLAY=:1
    • DISPLAY=:1
    • Xvfb :1 -ac -screen 0 1024x768x24
    • exec poetry run thetagang --config /etc/thetagang/thetagang.toml

    Config:

    Account details: Number = DU2275067 Cancel existing orders = True Margin usage = 0.3 (30.0%) Market data type = 1

    Roll options when either condition is true: Days to expiry <= 15 P&L >= 0.9 (90.0%)

    Write options with targets of: Days to expiry >= 45 Delta <= 0.3 Minimum open interest >= 10

    Symbols: GLD, weight = 0.4 (40.0%) TECL, weight = 0.3 (30.0%) SLV, weight = 0.3 (30.0%)

    My info is there, user id and all, no param for password except here.

    [ibc]

    IBC configuration parameters. See

    https://ib-insync.readthedocs.io/api.html#ibc for details.

    gateway = true ibcPath = '/opt/ibc' password = 'demo' tradingMode = 'paper' userid = 'demo'

    Change this to point to your config.ini for IBC

    ibcIni = '/etc/thetagang/config.ini'

    Do i fill this out too boss, including the path to where anything may be installedc, or is the bot running and does it self populate it all? Its probably because markets are closed that its not running fully?

    question 
    opened by Ianfinn1994 25
  • Issue on Ubuntu Mate.

    Issue on Ubuntu Mate.

    Want to run it on my Raspberry Pi and have the crontab execute every 10 minutes. Getting this issue when building the image.

    standard_init_linux.go:211: exec user process caused "exec format error" failed to resize tty, using default size.

    How could this error be rectified? Everything else is cool on the windows version.

    enhancement 
    opened by Ianfinn1994 21
  • ERROR:ib_insync.wrapper:Error 10197, reqId..... No market data during competing live session

    ERROR:ib_insync.wrapper:Error 10197, reqId..... No market data during competing live session

    I have this set up in a VM and I'm trying to run the Docker container with TWS 978 on my paper trading account.

    The Bot hangs on "Searching option chain for symbol=SPY right=P, this can take a while..."

    The ib_insync.loglogs show an error:

    ERROR:ib_insync.wrapper:Error 10197, reqId..... No market data during competing live session.

    I've verified that all my other IBKR sessions are closed, also it is getting market data, current prices for SPY show up in the console and in the error message. I can launch TWS by itself and it gets market data successfully on the same paper account.

    I found these two threads regarding the same error message, but none has a resolution:

    https://groups.io/g/insync/topic/19741887 https://groups.io/g/twsapi/topic/24929715

    bug 
    opened by jbieberly 13
  • Requested market data is not subscribed

    Requested market data is not subscribed

    First, thanks for making this tool!

    I finally got docker/wsl running along with the mounted paths and config, but I'm hitting an issue and I'm a bit stuck. Unsure if I need to modify part of the config or if there is a bug. I've basically copied the sample config files - the only changes are the addition of my username/password to both, although it wasn't clear to me if I needed to add it to both or just thetagang.toml.

    See the stack below:

    2021-02-11 16:55:41,008 ib_insync.Watchdog INFO Starting
    2021-02-11 16:55:41,008 ib_insync.IBC INFO Starting
    2021-02-11 16:56:11,035 ib_insync.client INFO Connecting to 127.0.0.1:4002 with clientId 1...
    2021-02-11 16:56:11,036 ib_insync.client INFO Connected
    2021-02-11 16:56:11,058 ib_insync.client INFO Logged on to server version 152
    2021-02-11 16:56:11,061 ib_insync.client INFO API connection ready
    2021-02-11 16:56:11,067 ib_insync.wrapper INFO Warning 2158, reqId -1: Sec-def data farm connection is OK:secdefil
    2021-02-11 16:56:12,075 ib_insync.ib INFO Synchronization complete
    2021-02-11 16:56:12,271 ib_insync.wrapper INFO Warning 2119, reqId -1: Market data farm is connecting:usfarm
    2021-02-11 16:56:12,318 ib_insync.wrapper INFO Warning 2104, reqId -1: Market data farm connection is OK:usfarm
    2021-02-11 16:56:12,383 ib_insync.wrapper ERROR Error 354, reqId 4: Requested market data is not subscribed.Delayed market data is available.Error&BEST/STK/Top&BEST/STK/Top, contract: Stock(symbol='SPY', exchange='SMART', currency='USD')
    2021-02-11 16:56:42,415 eventkit.event ERROR Value () caused exception for event Event<connectedEvent, [[None, None, <function start.<locals>.onConnected at 0x7fa844652c80>]]>
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/eventkit/event.py", line 181, in emit
        func(*args)
      File "/usr/local/lib/python3.7/dist-packages/thetagang/thetagang.py", line 113, in onConnected
        portfolio_manager.manage()
      File "/usr/local/lib/python3.7/dist-packages/thetagang/portfolio_manager.py", line 271, in manage
        self.check_if_can_write_puts(account_summary, portfolio_positions)
      File "/usr/local/lib/python3.7/dist-packages/thetagang/portfolio_manager.py", line 443, in check_if_can_write_puts
        self.wait_for_market_price(ticker)
      File "/usr/local/lib/python3.7/dist-packages/thetagang/portfolio_manager.py", line 60, in wait_for_market_price
        10,
      File "/usr/local/lib/python3.7/dist-packages/thetagang/util.py", line 60, in while_n_times
        while_n_times(pred, body, remaining - 1)
      File "/usr/local/lib/python3.7/dist-packages/thetagang/util.py", line 60, in while_n_times
        while_n_times(pred, body, remaining - 1)
      File "/usr/local/lib/python3.7/dist-packages/thetagang/util.py", line 60, in while_n_times
        while_n_times(pred, body, remaining - 1)
      [Previous line repeated 7 more times]
      File "/usr/local/lib/python3.7/dist-packages/thetagang/util.py", line 57, in while_n_times
        raise "Exhausted retries waiting on predicate. This shouldn't happen. "
    TypeError: exceptions must derive from BaseException
    
    question 
    opened by sirugh 10
  • Error when running Docker image

    Error when running Docker image

    org.w3c.dom.DOMException: jar:file:/root/Jts/978/jars/jts4launch-978.jar!/trader/common/images/gfis_blue_w47_h16.svg: The attribute "fill" represents an invalid CSS value ("url(#a)"). Original message: String index out of range: 4 at org.apache.batik.css.engine.CSSEngine.getCascadedStyleMap(CSSEngine.java:776) at org.apache.batik.css.engine.CSSEngine.getComputedStyle(CSSEngine.java:868) at org.apache.batik.bridge.CSSUtilities.getComputedStyle(CSSUtilities.java:81) at org.apache.batik.bridge.CSSUtilities.convertDisplay(CSSUtilities.java:563) at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:206) at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171) at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219) at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171) at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219) at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171) at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:82) at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:208) at org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:92) at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142) at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156) at feature.svg.b.a(b.java:90) at java.util.HashMap.computeIfAbsent(HashMap.java:1127) at feature.svg.b.a(b.java:79) at feature.svg.b.a(b.java:60) at feature.svg.c.a(c.java:66) at jtscomponents.plaf.dT.a(dT.java:2405) at feature.gfis.component.b.onFontChanged(b.java:109) at feature.gfis.component.b.b(b.java:76) at feature.gfis.component.b.(b.java:61) at feature.tabs.bf.f(bf.java:183) at feature.tabs.bf.(bf.java:156) at feature.tabs.bg.(bg.java:437) at jclient.qm.b(qm.java:847) at jclient.qm.eF(qm.java:831) at jclient.qm.cn(qm.java:978) at trader.tab.bc.cm(bc.java:1532) at trader.tab.bc.(bc.java:1522) at jclient.qk.(qk.java:216) at jclient.ql.(ql.java:492) at jclient.qm.(qm.java:513) at jclient.qm.(qm.java:509) at feature.mainwin.B.a(B.java:257) at feature.mainwin.B.a(B.java:139) at feature.mainwin.v.a(v.java:175) at trader.common.factory.U.a(U.java:249) at trader.common.factory.U.a(U.java:216) at feature.mainwin.B.a(B.java:173) at trader.tab.g.a(g.java:1227) at trader.common.factory.b.a(b.java:1509) at trader.common.factory.b.c(b.java:1524) at trader.common.factory.b.b(b.java:1583) at trader.common.factory.b.b(b.java:1467) at jclient.f7.b(f7.java:3778) at twslaunch.jutils.as.a(as.java:713) at jclient.f7.a(f7.java:3776) at jclient.f7.a(f7.java:2953) at feature.welcome.f.run(f.java:501) at feature.welcome.e.run(e.java:509) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) ERROR: null Enclosed Exception: jar:file:/root/Jts/978/jars/jts4launch-978.jar!/trader/common/images/gfis_blue_w47_h16.svg: The attribute "fill" represents an invalid CSS value ("url(#a)"). Original message: String index out of range: 4

    question 
    opened by matthew-jurewicz 5
  • class diagrams and use cases

    class diagrams and use cases

    I am University student and my job is to make class diagrams and uses cases for some project. I chose this project and can make it. Ofc if you need it. If you think that you don't need it now, I can make SRS document for the project. Also, if you need ofc. What is SRS document: https://en.wikipedia.org/wiki/Software_requirements_specification

    documentation Stale 
    opened by ALT-KIK 4
  • A key error raised

    A key error raised

    2021-10-28 02:21:41,205 ib_insync.ib INFO Synchronization complete 2021-10-28 02:21:41,493 eventkit.event ERROR Value () caused exception for event Event<connectedEvent, [[None, None, <function start..onConnected at 0x7f7b9dbc9f28>]]> Traceback (most recent call last): File "/usr/local/lib/python3.7/dist-packages/eventkit/event.py", line 186, in emit result = func(*args) File "/usr/local/lib/python3.7/dist-packages/thetagang/thetagang.py", line 141, in onConnected portfolio_manager.manage() File "/usr/local/lib/python3.7/dist-packages/thetagang/portfolio_manager.py", line 380, in manage (account_summary, portfolio_positions) = self.summarize_account() File "/usr/local/lib/python3.7/dist-packages/thetagang/portfolio_manager.py", line 234, in summarize_account "ExcessLiquidity": f"{float(account_summary['ExcessLiquidity'].value):,.0f}", KeyError: 'ExcessLiquidity' 2021-10-28 02:21:41,494 ib_insync.Watchdog INFO Stoppingg/thetagang.toml

    question Stale 
    opened by zhenqidong 3
  • Error when running Docker

    Error when running Docker

    I am trying to run the Docker Image without changing any params. I just entered my login info in the .toml file and config.ini and I am getting the following error. This is on IBKR paper trading account.


    _**+ export DISPLAY=:1

    • DISPLAY=:1

    • exec /usr/local/bin/thetagang -c /etc/thetagang/thetagang.toml

    • Xvfb :1 -ac -screen 0 1024x768x24 Config:

      Account details: Number = - Cancel existing orders = True Margin usage = 0.5 (50.0%) Market data type = 1

      Roll options when either condition is true: Days to expiry <= 15 and P&L >= 0.0 (0.0%) P&L >= 0.9 (90.0%)

      When contracts are ITM: Roll puts = False Roll calls = True

      Write options with targets of: Days to expiry >= 45 Default delta <= 0.3 Maximum new contracts = 15 Minimum open interest = 10

      Symbols: SPY weight = 0.40 (40.0%), delta = 0.30p, 0.30c QQQ weight = 0.30 (30.0%), delta = 0.50p, 0.30c, call strike >= $100.00, put strike <= $1000.00 TLT weight = 0.20 (20.0%), delta = 0.40p, 0.40c ABNB weight = 0.05 ( 5.0%), delta = 0.30p, 0.30c BRK.B weight = 0.05 ( 5.0%), delta = 0.30p, 0.30c

    Traceback (most recent call last): File "/usr/local/bin/thetagang", line 8, in sys.exit(cli()) File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 829, in call return self.main(*args, **kwargs) File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/usr/local/lib/python3.7/dist-packages/thetagang/main.py", line 35, in cli start(config) File "/usr/local/lib/python3.7/dist-packages/thetagang/thetagang.py", line 128, in start ibc = IBC(981, ibc_config) TypeError: init() got an unexpected keyword argument 'RaiseRequestErrors'_

    bug 
    opened by akh64bit 3
  • runtime error

    runtime error

    Hi,

    I'm getting runtime error when I iexcute the thetagang application, Please check and help me to fix this issue. Do I need to make any config changes? I got Snapshot requests limitation exceeded:100 per 1 second(s), contract: Option(conId=449748871, symbol='SPY'.. in one of my log. Not sure if i need to limit the number of request per sec to IBKR through some settings.

    Config:

    Account details: Number = DU******* Cancel existing orders = True Margin usage = 0.5 (50.0%) Market data type = 1

    Roll options when either condition is true: Days to expiry <= 15 and P&L >= 0.0 (0.0%) P&L >= 0.9 (90.0%)

    Write options with targets of: Days to expiry >= 45 Default delta <= 0.3 Maximum new contracts = 15 Minimum open interest = 10

    Symbols: SPY, weight = 0.4 (40.0%), delta = 0.3p, 0.3c QQQ, weight = 0.3 (30.0%), delta = 0.5p, 0.3c TLT, weight = 0.3 (30.0%), delta = 0.4p, 0.4c

    Account summary:

    Excess liquidity = 1000000.00 Net liquidation = 1000000.00 Cushion = 1 (100.0%) Full maint margin = 0.00 Buying power = 4000000.00 Total cash value = 1000000.00

    Portfolio positions:

    Checking positions...

    0 puts will be rolled 0 calls will be rolled

    Total buying power: $500000 at 50.0% margin usage Total value: $500000

    SPY Current position quantity 0 Target value $200000.0 Target quantity 511 Target additional quantity (excl. existing options) 511 QQQ Current position quantity 0 Target value $150000.0 Target quantity 451 Target additional quantity (excl. existing options) 451 TLT Current position quantity 0 Target value $150000.0 Target quantity 1033 Target additional quantity (excl. existing options) 1033

    Preparing to write additional 5 puts to purchase SPY, capped at 15

    Searching option chain for symbol=SPY right=P, this can take a while...

    An exception was raised, exiting Check log for details

    2021-02-20 09:48:11,465 ib_insync.Watchdog INFO Starting 2021-02-20 09:48:11,466 ib_insync.IBC INFO Starting 2021-02-20 09:48:41,479 ib_insync.client INFO Connecting to 127.0.0.1:4002 with clientId 1... 2021-02-20 09:48:41,481 ib_insync.client INFO Connected 2021-02-20 09:48:41,571 ib_insync.client INFO Logged on to server version 152 2021-02-20 09:48:41,587 ib_insync.client INFO API connection ready 2021-02-20 09:48:41,612 ib_insync.wrapper INFO Warning 2158, reqId -1: Sec-def data farm connection is OK:secdefil 2021-02-20 09:48:42,675 ib_insync.ib INFO Synchronization complete 2021-02-20 09:48:43,078 ib_insync.wrapper INFO Warning 2119, reqId -1: Market data farm is connecting:usfarm 2021-02-20 09:48:43,713 ib_insync.wrapper INFO Warning 2104, reqId -1: Market data farm connection is OK:usfarm 2021-02-20 09:49:33,012 ib_insync.wrapper ERROR Error 200, reqId 14: No security definition has been found for the request, contract: Option(symbol='SPY', lastTradeDateOrContractMonth='20210416', strike=352.5, right='P', exchange='SMART', tradingClass='SPY') 2021-02-20 09:49:33,017 ib_insync.wrapper ERROR Error 200, reqId 20: No security definition has been found for the request, contract: Option(symbol='SPY', lastTradeDateOrContractMonth='20210416', strike=357.5, right='P', exchange='SMART', tradingClass='SPY')

    2021-02-20 09:49:37,943 ib_insync.wrapper ERROR Error 200, reqId 250: No security definition has been found for the request, contract: Option(symbol='SPY', lastTradeDateOrContractMonth='20210716', strike=382.5, right='P', exchange='SMART', tradingClass='SPY') 2021-02-20 09:49:37,944 ib_insync.wrapper ERROR Error 200, reqId 256: No security definition has been found for the request, contract: Option(symbol='SPY', lastTradeDateOrContractMonth='20210716', strike=387.5, right='P', exchange='SMART', tradingClass='SPY') 2021-02-20 09:49:38,225 ib_insync.ib ERROR Unknown contract: Option(symbol='SPY', lastTradeDateOrContractMonth='20210416', strike=352.5, right='P', exchange='SMART', tradingClass='SPY') 2021-02-20 09:49:38,225 ib_insync.ib ERROR Unknown contract: Option(symbol='SPY', lastTradeDateOrContractMonth='20210416', strike=357.5, right='P', exchange='SMART', tradingClass='SPY') 2021-02-20 09:49:38,226 ib_insync.ib ERROR Unknown contract: Option(symbol='SPY', lastTradeDateOrContractMonth='20210416', strike=362.5, right='P', exchange='SMART', tradingClass='SPY') 2021-02-20 09:49:39,424 ib_insync.wrapper INFO Warning 2119, reqId -1: Market data farm is connecting:usopt 2021-02-20 09:49:39,613 ib_insync.wrapper INFO Warning 2104, reqId -1: Market data farm connection is OK:usopt 2021-02-20 09:49:54,275 eventkit.event ERROR Value () caused exception for event Event<connectedEvent, [[None, None, <function start..onConnected at 0x7fb4338158b0>]]> Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/eventkit/event.py", line 181, in emit func(*args) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/thetagang/thetagang.py", line 113, in onConnected portfolio_manager.manage() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/thetagang/portfolio_manager.py", line 271, in manage self.check_if_can_write_puts(account_summary, portfolio_positions) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/thetagang/portfolio_manager.py", line 499, in check_if_can_write_puts self.write_puts(symbol, puts_to_write) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/thetagang/portfolio_manager.py", line 390, in write_puts sell_ticker = self.find_eligible_contracts(symbol, "P") File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/thetagang/portfolio_manager.py", line 673, in find_eligible_contracts raise RuntimeError(f"No valid contracts found for {symbol}. Aborting.") RuntimeError: No valid contracts found for SPY. Aborting. 2021-02-20 09:49:54,287 ib_insync.Watchdog INFO Stopping 2021-02-20 09:49:54,288 ib_insync.ib INFO Disconnecting from 127.0.0.1:4002, 35.4 kB sent in 475 messages, 599 kB received in 2424 messages, session time 103 s. 2021-02-20 09:49:54,288 ib_insync.client INFO Disconnecting 2021-02-20 09:49:54,291 ib_insync.client INFO Disconnected 2021-02-20 09:49:54,297 ib_insync.Watchdog WARNING Disconnected 2021-02-20 09:49:54,298 ib_insync.IBC INFO Terminating

    question Stale 
    opened by wiselee978 3
  • Hey Brenden. New issues.

    Hey Brenden. New issues.

    2021-02-16 06:42:11,675 ib_insync.client INFO Connecting to 127.0.0.1:4002 with clientId 1... 2021-02-16 06:42:11,678 ib_insync.client INFO Disconnecting 2021-02-16 06:42:11,692 ib_insync.client ERROR API connection failed: ConnectionRefusedError(111, "Connect call failed ('127.0.0.1', 4002)") 2021-02-16 06:42:11,693 ib_insync.client ERROR Make sure API port on TWS/IBG is open 2021-02-16 06:42:11,694 ib_insync.IBC INFO Terminating 2021-02-16 06:42:14,971 ib_insync.IBC INFO Starting 2021-02-16 06:42:44,996 ib_insync.client INFO Connecting to 127.0.0.1:4002 with clientId 1... 2021-02-16 06:42:44,999 ib_insync.client INFO Disconnecting 2021-02-16 06:42:45,000 ib_insync.client ERROR API connection failed: ConnectionRefusedError(111, "Connect call failed ('127.0.0.1', 4002)") 2021-02-16 06:42:45,000 ib_insync.client ERROR Make sure API port on TWS/IBG is open 2021-02-16 06:42:45,001 ib_insync.IBC INFO Terminating 2021-02-16 06:42:47,966 ib_insync.IBC INFO Starting

    This really is the only error im getting, boss.

    opened by Ianfinn1994 3
  • Add error checking if gateway/client already open

    Add error checking if gateway/client already open

    I've already launched my full client via IBCLinux/twsstart.sh, can you add a check to see if the gateway is reachable/working before launching the client again?

    enhancement Stale 
    opened by talso 3
  • ValueError: cannot convert float NaN to integer

    ValueError: cannot convert float NaN to integer

    so boss, here is what i got, how to fix

    2022-12-17 09:59:16,079 ib_insync.wrapper INFO Warning 2104, reqId -1: Market data farm connection is OK:usfarm 2022-12-17 10:01:25,149 eventkit.event ERROR Value () caused exception for event Event<connectedEvent, [[None, None, <function start..onConnected at 0x7f905169fac0>]]> Traceback (most recent call last): File "/usr/local/lib/python3.10/dist-packages/eventkit/event.py", line 198, in emit result = func(*args) File "/usr/local/lib/python3.10/dist-packages/thetagang/thetagang.py", line 172, in onConnected portfolio_manager.manage() File "/usr/local/lib/python3.10/dist-packages/thetagang/portfolio_manager.py", line 460, in manage self.check_if_can_write_puts(account_summary, portfolio_positions) File "/usr/local/lib/python3.10/dist-packages/thetagang/portfolio_manager.py", line 762, in check_if_can_write_puts target_quantity = math.floor(targets[symbol] / ticker.marketPrice()) ValueError: cannot convert float NaN to integer 2022-12-17 10:01:25,152 ib_insync.Watchdog INFO Stopping 2022-12-17 10:01:25,153 ib_insync.ib INFO Disconnecting from 127.0.0.1:7497, 928 B sent in 16 messages, 84.5 kB received in 1756 messages, session time 163 s.

    question 
    opened by cjian0001 6
Releases(v1.1.0)
  • v1.1.0(Oct 18, 2022)

    What's Changed

    • Bump docker/setup-qemu-action from 1 to 2 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/192
    • Bump docker/metadata-action from 3 to 4 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/193
    • Bump docker/setup-buildx-action from 1 to 2 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/194
    • Bump docker/login-action from 1 to 2 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/195
    • Bump actions/checkout from 2 to 3 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/196
    • Bump actions/setup-python from 2 to 4 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/197
    • Bump docker/build-push-action from 2 to 3 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/200
    • Bump click-log from 0.3.2 to 0.4.0 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/198
    • Bump autoflake from 1.6.1 to 1.7.5 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/201
    • Bump autohooks from 2.2.0 to 22.8.1 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/199
    • Bump autohooks-plugin-black from 1.2.0 to 21.7.1 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/202
    • Bump black from 20.8b1 to 21.6b0 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/203
    • Bump click from 7.1.2 to 8.1.3 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/204
    • Bump pytest from 6.2.5 to 7.1.3 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/205
    • Bump autohooks-plugin-black from 21.7.1 to 22.8.1 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/206
    • Bump autohooks-plugin-isort from 1.0.0 to 22.8.0 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/209
    • Bump autoflake from 1.7.5 to 1.7.6 by @dependabot in https://github.com/brndnmtthws/thetagang/pull/208
    • Fix linter settings, add lint/format step to CI. by @brndnmtthws in https://github.com/brndnmtthws/thetagang/pull/211
    • add option to run without IBC by @asemx in https://github.com/brndnmtthws/thetagang/pull/210

    New Contributors

    • @dependabot made their first contribution in https://github.com/brndnmtthws/thetagang/pull/192
    • @asemx made their first contribution in https://github.com/brndnmtthws/thetagang/pull/210

    Full Changelog: https://github.com/brndnmtthws/thetagang/compare/v1.0.1...v1.1.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Oct 5, 2022)

  • v1.0.0(Oct 4, 2022)

  • v0.1.35(Oct 3, 2022)

    What's Changed

    • Add roll_when.close_at_pnl option to close early. by @brndnmtthws in https://github.com/brndnmtthws/thetagang/pull/187
    • Allow algo to be configured. by @brndnmtthws in https://github.com/brndnmtthws/thetagang/pull/188
    • Allow configuring order exchange routing. by @brndnmtthws in https://github.com/brndnmtthws/thetagang/pull/189

    New Contributors

    • @brndnmtthws made their first contribution in https://github.com/brndnmtthws/thetagang/pull/187

    Full Changelog: https://github.com/brndnmtthws/thetagang/compare/v0.1.34...v0.1.35

    Source code(tar.gz)
    Source code(zip)
  • v0.1.34(Sep 14, 2022)

  • v0.1.33(Sep 12, 2022)

  • v0.1.32(Aug 17, 2022)

  • v0.1.31(Apr 6, 2022)

  • v0.1.30(Mar 3, 2022)

  • v0.1.29(Feb 24, 2022)

  • v0.1.28(Feb 7, 2022)

  • v0.1.27(Feb 4, 2022)

  • v0.1.26(Dec 28, 2021)

  • v0.1.25(Dec 22, 2021)

  • v0.1.24(Oct 21, 2021)

    • Bump version.

    • Increase wait time from 60 -> 90s.

      Sometimes 60s is not sufficient for loading data.

    • Fix keyword handling bug w/ IBC and RaiseRequestErrors.

    • Add max_dte config, and limit quantity on roll.

      Sometimes we end up with contracts really far out (sometimes becoming LEAPs) if we're winning too much and rolling too many times. To limit this, don't roll contracts if their DTE is > roll_when.max_dte, if specified.

      Additionally, apply the target.maximum_new_contracts limit when rolling contracts before they approach their DTE limit to avoid bunching too many contracts together at the same strike and expiry.

    • This value should be a float.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.23(Sep 25, 2021)

  • v0.1.22(Aug 31, 2021)

    • Bump version for next release.

    • Round to 5 decimal places when checking weights sum.

    • Bump to stable openjdk.

    • Fix delta validation, add request errors

      If thetagang gets a timeout from ib_insync when fetching portfolio positions, it proceeds as if nothing happened. It loads the config file, but without knowing the portfolio positions, it starts to write puts instead of writing/rolling calls.

      I also removed unused imports from the files I touched.

    • Bump dependencies.

    • Revert "Bump to stable openjdk."

      This reverts commit a34eb483e6b4d5710d2329e052b75a90c33d2efb.

      Derp, 11 is the LTS.

    • Drop Docker armv7 builds.

      I'm dropping the Docker builds for armv7 because it's too much trouble to maintain. If someone wants to figure out how to make it reliable, I'd welcome their contributions.

    • Make 'RaiseRequestErrors' optional.

    • Add UseSSL=true setting to jts.ini.

      This should resolve the issue described at https://github.com/IbcAlpha/IBC/issues/133 if you bump into it.

    • Try another jts.ini path.

    • Try another jts.ini path.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.21(Jul 25, 2021)

    • Bump version.

    • In the event submission fails, report and continue.

    • When trying to write new puts, allow failure so we can continue.

    • Ignore positions where avgcost or position count is zero.

    • Fix quotes w/ installer.

    • Drop chmod.

    • Bump dependencies, TWS version.

    • Upgrade to current IBC, 3.8.7.

    • Use the default port of 7497.

    • dos2unix.

    • Bump jdk version.

    • Bump jdk to latest.

    • Try this a slightly different way (to fix jfx).

    • Use the uberjar instead.

    • Add the jar.

    • Add this other jar (what does it do? no one knows).

    • Fix cache keys.

    • Use jdk 11, openjfx.

    • Improve chain scanning.

    • Remove these.

    • Use the greater of the model price, or midpoint.

    • Remove uninstall file as it messes things up.

    • Update README.md

    • Using snapshot data doesn't work, suppress illegal access warnings.

    • Refactor contracts/tickers so it's less confusing.

    • Improve order submission handling.

    • Whitelist javax access.

    • Remove extraneous G.

    • Whitelist this package too.

    • Fix package name.

    • Whitelist another.

    • Refactor waiting/timeouts.

    • Derp, this doesn't work in python.

    • Remove print statement.

    • Filter out tickers missing prices.

    • Fallback to model price if needed.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.20(May 17, 2021)

    This release allows one to specify a primary exchange, for example when you want to wheel stocks instead of ETFs.

    For example, in thetagang.toml to wheel BRK.B:

     [symbols."BRK.B"]
     # For symbols that require an exchange, which is typically any company stock,
     # you must specify the primary exchange.
     primary_exchange = "NYSE"
     weight = 0.1
    
    Source code(tar.gz)
    Source code(zip)
  • v0.1.19(Apr 12, 2021)

    • Bump version.

    • Disable checksum on installer (they keep changing the binary).

    • Fix installer, add ITM column.

    • argument required on different python versions.

    • Fix this bad value.

    • Update README.md

    • Rename function.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.18(Apr 8, 2021)

    • Bump version.

    • Smart market and avg price for positions.

    • Update tws hash.

    • Add comment about TWS version.

    • Auto-pad position columns.

    • Improve position output a little more.

    • Improve formatting, but more!!

    • Add sweet gif.

    • Include thousands separator for greater readability.

    • Drop uneeded decimal places.

    • Rearrange account values, include decimal w/ cushion.

    • For options, need to div by multiplier for avg price.

    • Fix calculation of buying power.

      This doesn't need to include other positions, as net liquidity already accounts for those.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.17(Mar 10, 2021)

  • v0.1.16(Mar 8, 2021)

    • Bump version.

    • Add some colour about chain scanning.

    • Make sure target calls (when writing calls) is correct.

    • Improve function name, don't let call values go short.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.15(Mar 4, 2021)

    • Bump version.

    • Tidy up log message.

    • Add FAQ and a few known errors.

    • Update README.md

    • Add config log message about rolling ITM.

    • Fix raising exception.

    • Exclude current exp when rolling.

    • Increase timeout when waiting on data 3->5s.

    • Increase number of iterations from 10 to 25 when waiting on orders/data.

    • Improve handling of waiting on data, fail gracefully.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.14(Feb 17, 2021)

    • Bump version.

    • Update README.md

    • Allow delta to be specified per right or symbol.

      You can now set target.puts/calls.delta or symbol.S.delta to alter delta on a per-symbol or contract type basis.

    • Also allow separate delta per-symbol.

    • When writing calls, strike should be >= avgCost.

    • Use python3 -m pip command.

    • Simply default config value handling.

      Also fixed default value for min_pnl.

    • Clarify percent vs ratio.

    • Handle case of empty list.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.13(Feb 8, 2021)

    • Bump version to 0.1.13.

    • Update readme.

    • Change default ibc logfile path.

    • Add maximum_new_contracts config parameter.

      When operating in some accounts, you may encounter situations where many options are written for the same strikes/symbols/expiries. This might have the undesirable effect of creating too much exposure at a particular price/expiry.

      One simple solution is to allow an option to simply cap the number of new contracts written at any given time. With this, ThetaGang should normally spread the contracts out provided you are running ThetaGang at regular intervals (i.e., daily or weekly).

      Additionally, I tidied up/changed formatting of the toml files.

    • Fix slightly confusing config log statement.

    • Remove -t from docker commands.

    • Refactor Docker build, support multi-arch.

      This should resolve #172.

    • Fix buildx setup.

    • Use util.isNan() here.

    • Drop armv7 due to openjdk issues.

    • Rearrange docker build steps for caching.

    • Fix build cache handling.

    • Update config java path to work with Docker by default.

    • Remove extraneous text.

    • Add missing qemu step for buildx.

    • Can't use --load w/ buildx and multi-arch.

    • Switch base image version.

    • Add back armv7.

    • Add dev libraries back for docker build.

    • Raise exception on timeout waiting for data.

    • Filter out tickers that are missing prices.

    • Refactor dockerfile.

    • Refactor dockerfile a little more.

    • Allow more time when waiting on data.

    • When rolling near expiration, allow one to set a minimum P&L.

    • Print DTE for positions.

    • Better logger, more config comments.

    • Fix buildx cache arg.

    • Rearrange dockerfile, add to dockerignore.

    • Cache the TWS installer step.

    • Update ignore files, rearrange dockerfile slightly.

    • Add python 3.7 support, use debian for docker images.

    • Remove pandas dep.

    • Simplify docker build, make wheel outside docker.

    • Install CA certs.

    • Add wheel package.

    • Cache poetry.

    • Fix cache name.

    • Add cache ID.

    • Fix python version.

    • Fix file permissions.

    • Cache all of cache dir.

    • Update README.md

    • Update README.md

    • Update README.md.

    • Sort positions by DTE before printing.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.12(Jan 28, 2021)

    • Bump version.

    • Prefer primaryoverride config.ini setting.

    • Remove matrix badge.

    • Update README.md

    • Update installer hash.

    • Update README with more usage instructions.

    • Fix README code error.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.11(Jan 15, 2021)

    • Bump version.

    • Add sweet meme thanks reddit.

    • Wait for market prices after fetching tickers.

      Also bump python dependencies.

    • Prefer midpoint rather than market price for orders.

    • Update TWS hash.

    • Use docker build cache from dockerhub.

    • Include build cache info in Docker image.

    • Show cost rather than avg cost (avg cost * qty).

    • Make sure buildkit is enabled.

    • Update COPYING

    • Update workflow names.

    • Update README.md

    • Update TWS hash.

    • Fix hanging when market data unavailable.

      Set a limit when waiting on market data, rather than waiting indefinitely. We prefer the midpoint price rather than market price, but fall back to using the market price if midpoint isn't available.

    • Use buildx setup action.

    • Put buildkit var back in.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.10(Dec 29, 2020)

    • Bump version.

    • Change paper account # in sample.

    • Add a few more notes/details to config and code.

    • Run poetry update.

    • Allow config of rolling behaviour when ITM.

    • Use stable TWS (978), remove version config option.

      For the sake of keeping everything simple, I've removed the twsVersion config param in favour of hard coding the version to the latest stable.

      If you have the value in your config, it will be ignored.

    • Clarify buying power calculation, remove min().

    Source code(tar.gz)
    Source code(zip)
  • v0.1.9(Dec 16, 2020)

    • Bump version.

    • Wait for order status to leave pending state.

    • Config: replace minimum_cushion with margin_usage.

      I found the concept of maintaining a minimum cushion to be too hard to reason about, and it didn't properly reflect margin usage in a way that made sense to me.

      Thus, I've replaced it with margin_usage, which allows you to specify how much margin to use as a factor of the net liquidation value. I find this to be much better.

    • Update thetagang.toml

    Source code(tar.gz)
    Source code(zip)
Owner
Brenden Matthews
I like computers
Brenden Matthews
Raphtory-client - The python client for the Raphtory project

Raphtory Client This is the python client for the Raphtory project Install via p

Raphtory 5 Apr 28, 2022
A napari plugin for visualising and interacting with electron cryotomograms

napari-subboxer A napari plugin for visualising and interacting with electron cryotomograms. Installation You can install napari-subboxer via pip: pip

3 Nov 25, 2021
A basic Ubisoft API wrapper created in python.

UbisoftAPI A basic Ubisoft API wrapper created in python. I will be updating this with more endpoints as time goes on. Please note that this is my fir

Ethan 2 Oct 31, 2021
A python script fetches all your starred repositories from your GitHub account and clones them to your server so you will never lose important resources

A python script fetches all your starred repositories from your GitHub account and clones them to your server so you will never lose important resources

Ringo Hoffmann 27 Oct 01, 2022
Flask-SQLAlchemy API for daisuki-web

๐Ÿ’Ÿ Anime Daisuki! API API de animes com cadastro de usuรกrios. O usuรกrio autenticado pode avaliar e favoritar animes, comentar episรณdios e verificar o

Paulo Thor 1 Nov 04, 2021
Tsar-Bot - Crypto auto trade bot that use sentiment analysis from twitter

Tsar Bot - Crypto Sentiment Bot Tsar Bot is a Twitter Crypto Sentiment Bot that

Hilmi Azizi 26 Dec 15, 2022
Red-mail - Advanced email sending library for Python

Red Mail Next generation email sender What is it? Red Mail is an advanced email

Mikael Koli 313 Jan 08, 2023
Telegram-Voice Recoginiton Project (Python)

Telegram-Voice Recoginiton Project (Python) It is a telegram bot that analyses voice messages and convert it to text and reply back response on bot's

Krishnadev P Melevila 1 Jan 28, 2022
Telegram Userbot built with Pyrogram

Pyrogram Userbot A Telegram Userbot based on Pyrogram This repository contains the source code of a Telegram Userbot and the instructions for running

Athfan Khaleel 113 Jan 03, 2023
Changes your desktop wallpaper based on the weather.

WallPaperChanger ๐Ÿ–ผ๏ธ Description โ›ˆ๏ธ This Python script changes your desktop wallpaper based on the weather. Cloning ๐ŸŒ€ $ git clone https://github.com/

Clarence Yang 74 Nov 29, 2022
โ€œ Hey there ๐Ÿ‘‹ I'm Daisy โ€ž AI based Advanced Group Management Bot Suit For All Your Needs โค๏ธ.. Source Code of @Daisyxbot

Project still under heavy development Everything will be changed in the release โ€œ Hey there ๐Ÿ‘‹ I'm Daisy โ€ž AI based Advanced telegram Group Management

TeamDaisyX 43 Nov 12, 2022
A Python interface to AFL, allowing for easy injection of testcases and other functionality.

Fuzzer This module provides a Python wrapper for interacting with AFL (American Fuzzy Lop: http://lcamtuf.coredump.cx/afl/). It supports starting an A

Shellphish 614 Dec 26, 2022
A collection of discord tools I've made.

Discord A collection of discord tools i've made. What's in here? Basically every discord related project i've worked on can be found here, i'll try an

?? ?? ?? 6 Nov 13, 2021
Coin-based opinion monitoring system

ไป‹็ป ๆœฌไป“ๅบ“ๆไพ›ไบ†ๅŸบไบŽๅธๅฎ‰ (Binance) ็š„ไบŒ็บงๅธ‚ๅœบ่ˆ†ๆƒ…็ณป็ปŸ๏ผŒๅฏไปฅๆ นๆฎ่‡ชๅทฑ็š„้œ€ๆฑ‚ไฟฎๆ”นไปฃ็ ๏ผŒ่ฎพๅฎšๅ„็ฑปๅ‘Š่ญฆๆ็คบ ไปฃ็ ็ป“ๆž„ binance.py - ไธŽๅธๅฎ‰APIไบคไบ’ data_loader.py - ๆ•ฐๆฎ็›ธๅ…ณ็š„่ฏปๅ†™ monitor.py - ็›‘ๆŽง็š„ๆ ธๅฟƒๆ–นๆณ•ๅฎž็Žฐ analyze.py - ๅŸบไบŽๅŽ†ๅฒๆ•ฐ

luv_dusk 6 Jun 08, 2022
A Simple Voice Music Player

๐Ÿ“€ ๐•๐‚๐”๐ฌ๐ž๐ซ๐๐จ๐ญ โˆš๐™๐™š๐™–๐™ขโœ˜๐™Š๐™˜๐™ฉ๐™–๐™ซ๐™š NOTE JUST AN ENGLISH VERSION OF OUR PRIVATE SOURCE WAIT FOR LATEST UPDATES JOIN @๐’๐”๐๐๐Ž๐‘๐“ JOIN @๐‚?

TeamOctave 8 May 08, 2022
Notion4ever - Python tool for export all your content of Notion page using official Notion API

NOTION4EVER Notion4ever is a small python tool that allows you to free your cont

50 Dec 30, 2022
Discord bot written in discord.py

Orion Discord bot written in discord.py Installation Installation of code is supported for macOS only currently First open the terminal. If incase you

Zeus 3 May 19, 2022
Drover is a command-line utility for deploying Python packages to Lambda functions.

drover drover: a command-line utility for deploying Python packages to Lambda functions. Background This utility aims to provide a simple, repeatable,

Jeffrey Wilges 4 May 19, 2021
Updater for PGCG (Paradox Game Converters Group) converters written in Python.

Updater Updater for PGCG (Paradox Game Converters Group) converters written in Python. Needs to be put inside an "Updater" directory in the root conve

Paradox Game Converters 2 Jan 10, 2022
Evernote SDK for Python

Evernote SDK for Python Evernote API version 1.28 This SDK is intended for use with Python 2.X For Evernote's beta Python 3 SDK see https://github.com

Evernote 612 Dec 30, 2022