Networking Call (Part 3)
Posted by Mark on November 27, 2020 at 06:33 | Last modified: July 2, 2021 11:29Today I conclude summary of my recent networking call with GP: a self-proclaimed delta-neutral trader.
I asked GP why he is not trading full-time. He said he has an excellent job.
Wondering if this was a deflection I asked, “would you rather be trading full-time?”
“Yes, but I am building up my account for now. I’ve had an excellent last year and I continue on with a very delta- and vega-neutral butterfly position.”
I was not intending to discuss trading strategy, but since he volunteered I felt compelled to comment. I have seen greek-neutral strategies presented over the years and I am repeatedly unconvinced because they get sufficiently neutral to have little profit potential. Something with little gamma is going to have little theta. Something delta neutral will have to rely on theta or vega but with theta comes gamma, which will soon turn into delta—and it all falls apart.
In other words, “no risk, no reward” conundrum. He uh-huh’d me all the way to the bank on this point that he couldn’t be making much bank doing it. How ironic.
I explained that while I fall shy of MSFE in terms of academic skill, I have 12 years of extensive trading experience that few in the MSFE program are likely to match. I think I could be dangerous with an MSFE. Even without it, though, I do analysis all day long with strategy development, investigative writing, dissection of trade presentations and webinars, etc. I wouldn’t mind getting some gig as a consultant or junior financial analyst. The trading-related expertise I have accrued to date must be of some use for some clients somewhere.
Again, GP uh-huh’d a lot but really had nothing to add. He mumbled something about just having to call around to different firms, which seems like an obvious step I have begun to take.
I talked about spending thousands of hours doing manual backtesting over my first several years as a full-time trader and how I exhausted myself doing that.
I then discussed how I have interest in building an automated option backtester because those I have seen on the market lack the functionality I seek (more uh-huh’s as I went on). OptionStack looked promising but I think $200/month is far overpriced for an individual, retail trader. I said I am a green, newbie Python programmer thinking he might take the bait and suggest something about building software together. That was not forthcoming.
In fact, he said absolutely nothing about any sort of collaboration and asked nothing that might possibly help better even his situation. It was a very one-sided, closed conversation: closed in terms of opportunity.
When traders come together—even on a phone call like this—some effort should be made to see if we can help each other. No holy grail exists and what works one year may certainly not work the next. Even if we are performing well at the moment, our heads should always be on a swivel and we should constantly be on the prowl for something better and/or uncorrelated.
GP seemed outmatched when it wasn’t even a competition.
GP seemed quiet when I was looking for an exchange.
GP seemed humiliated, maybe, when I wasn’t posing any threat.
It’s almost hard to believe the person I saw represented on the website is the GP I spoke to over the phone. Maybe the website is stale and hardly used. The consulting services, now, seem quite hollow and bogus to me.
Onwards and upwards!
Categories: Networking | Comments (0) | PermalinkNetworking Call (Part 2)
Posted by Mark on November 23, 2020 at 07:33 | Last modified: July 2, 2021 10:55Today I continue presentation of my networking call with GP: a self-proclaimed delta-neutral trader with a business website advertising consulting services.
After he figured out who I was, we offered introductory greetings and I quickly ventured into what would be the meat of the conversation: “so I browsed your website and I see that you’re a full-time trader and trader consultant…”
“Actually I’m a software engineer. Trading is more like my side hustle.”
Say what?
His story begins with professional trading experience working for a firm. He then left to start a fund of his own. He took out a bank loan, which would constitute 50% of his trading capital, and used personal savings as the other 50%. He said the pressure of having to profit on a consistent basis was too great and the fund eventually failed. He didn’t say specifically how much he was trading, how much he lost, over what period of time, or any other details—just that things didn’t work out. He then got an “offer I couldn’t refuse” and went back to work as a software engineer.
I said that I have been a full-time option trader for the last 12 years, which he called the “perfect gig.” I said it was much better than being put through the pharmacy wringer every day working 8-12-hour shifts on my feet continuously for 50-60 hours/week. I faced relentless phone calls, being constantly pulled in multiple directions at once, no breaks for bathroom or food, and limited time to exercise.
I told him while I love what I’m doing now, I still seek something more.
He mentioned starting a fund, but I am not currently thinking about going in that direction because I know little about sales or how to proceed with marketing the fund.
“Just start with friends and family,” he said. “You can raise money from them and then solicit outside investors as you grow. It’s not really worthwhile to get $5M-$10M. You really want at least $50M to start, and then you can hire a sales person and someone to help with accounting.”
He didn’t realize raising money amounts to sales. “You still have to create a pitch book, present it, and sell it,” I said.
“Oh right, righttttt…” he said, and he uh-huh’d me the rest of the way. Perhaps this is something he went through before settling on the bank loan. I don’t know. I had lots of unanswered questions and was finding little new information from him to be of any use. Some of what he did say didn’t even make complete sense for someone with his alleged experience.
I will conclude next time.
Categories: Networking | Comments (0) | PermalinkReview of Python Courses (Part 5)
Posted by Mark on November 20, 2020 at 07:23 | Last modified: January 20, 2021 06:41In Part 4, I summarized my Datacamp courses 10-12. Today I will continue with the next three.
As a reminder, I introduced you to my recent work learning Python here.
My thirteenth course was Pandas Foundations. This course covers:
- Review of pandas DataFrames
- Building DataFrames from scratch
- Importing and exporting data [pd.read_csv() args: header, names, na_values, parse_dates]
- Plotting (arrays, series, DataFrames) with pandas
- Visual exploratory data analysis (line, scatter, box plots, histogram, and different plotting idioms)
- Statistical exploratory data analysis
- Separating populations
- Indexing time series (creating and using a Datetime index)
- Resampling time series data
- Manipulating time series data
- Time series visualization (pandas, not matplotlib)
- Reading and cleaning the data (cleaning and tidying datetime data)
>
Class #14 for me was Statistical Thinking in Python (Part 1). This course covers:
- Introduction to exploratory data analysis
- Plotting a histogram
- Plot all of your data: Bee swarm plots [sns.swarmplot()]
- Plot all of your data: Empirical Cumulative Distribution Functions (ECDF)
- Introduction to summary statistics: the sample mean and median
- Percentiles, outliers, and box plots
- Variance and standard deviation
- Covariance and the Pearson correlation coefficient
- Probabilistic logic and statistical inference
- Random number generators and hacker statistics
- Probability distributions and stories: the Binomial distribution (binomial PMF and CDF)
- Poisson processes and the Poisson distribution
- Probability density functions
- Introduction to the Normal distribution
- The Normal distribution: properties and warnings
- The Exponential distribution
>
My fifteenth course was Introduction to Data Visualization with Matplotlib. This course covers:
- Adding data to axes
- Customizing your plots (adding markers, setting linestyle, color, axis labels)
- Small multiples with plt.subplots
- Plotting time-series data (using fig/ax, zooming in on datetime range)
- Plotting time-series with different variables (using twin axes, coloring vars and ticks, all-encompassing function)
- Annotating time-series data
- Quantitative comparisons: bar charts (stacking, adding legend, color)
- Quantitative comparisons: histograms
- Statistical plotting
- Quantitative comparisons: scatter plots (encoding time by color)
- Preparing your figures to share with others (choosing plot style)
- Sharing your visualizations with others [fig.savefig()]
- Automating figures from data
>
Planning My Next Meetup [hopefully not MIS] Adventure (Part 10)
Posted by Mark on November 17, 2020 at 07:03 | Last modified: May 12, 2020 11:11I’ve been getting more organized this year by converting incomplete drafts into finished blog posts. This was the start of a nine-part mini-series. Not all of this makes sense to me now but just in case someone out there can possibly benefit, what follows is Part 10 from June 2017.
—————————
Last time, I restructured the Meetup pitch to focus on the research rather than the actual backtesting. Along these lines, I have one more idea that will conclude this mini-series of ideas (for the time being, at least).
I am a full-time, independent trader who is looking for collaboration. I am looking for someone to work with me on building an automated backtester and conducting option research. I have already done a lot of work in designing the research plan.*
Retirement savings: what are you going to do about it? Many people think “financial advisor” as a first response. When it comes to honesty in the workplace, though, some professions have a better reputation than others. Surveys over the last couple years have seen “stockbrokers” and “bankers” near the bottom (health care practitioners and grade school teachers near the top). What about financial advisors? A 2018 Harvard study found one in 12 financial advisors have been disciplined for serious misconduct with the bad apples rarely punished. You probably don’t have to ask around for long to find a salty taste in the mouth of someone who feels taken advantage of or defrauded by such deceptive promises at one time or another.
Personally, I think financial advisors can do a lot of good and deserve proper compensation. I am not convinced that they should manage your investments. For the self-starters out there, I think you can do better.
I am a Doctor of Pharmacy, but for the last 11 years I have worked for myself trading for a living.
One thing I find sorely missing from the financial industry is hardcore research and testing of investment strategies. The healthcare equivalent would be “evidence-based medicine.” I want to trade strategies that have worked in the past when I think they have reason to continue working in the future.
With regard to investing, why hire a financial advisor and pay 1-2% of your assets under management for strategies they have not personally backtested and studied? Without the data, recommendations are nothing more than hollow promises, sales, and marketing. I see a lot of this being presented.
I have spent thousands of manual hours backtesting trading strategies. With much more left to study, I seek a quicker solution: an automated backtesting app. I suggest a collaboration: you bring the programming muscle and statistics/data science background and I bring the trading know-how and experience. Let’s find out how the data suggest we invest.
While the exact percentage and time frame varies, numerous writings cite ~90% of all traders fail in their first couple years. I bring an alternative approach, though—one that may raise some eyebrows if your investment education is based on guru talk, financial media, or classic books.
Let’s work together: I help teach you about trading and you help build the app, which will benefit us both. This is your chance to get a fresh take from an industry outsider who ironically has more trading experience than the vast majority of financial professionals. Let’s do the work, make some money, and have a good time establishing Meetup community along the way!
>
* — I haven’t written in detail about why automated backtesting,
but the second paragraph here probably explains it.
Review of Python Courses (Part 4)
Posted by Mark on November 12, 2020 at 07:08 | Last modified: January 19, 2021 10:18In Part 3, I summarized the 6th through 9th Datacamp courses I took. Today I will continue with the next three.
As a reminder, I introduced you to my recent work learning Python here.
Course #10 was Introduction to Databases in Python. This course covers:
- Databases consist of tables
- Connecting to your database
- Introduction to SQL queries
- Filtering and targeting data
- Ordering query results
- Counting, summing, and grouping data
- SQLAlchemy and pandas for visualization
- Calculating values in a query
- SQL relationships
- Working with hierarchical tables
- Handling large ResultSets
- Creating databases and tables
- Inserting and updating data into a table
- Deleting data from a database
- Census case study
- Populating and querying the database
>
Course #11 was Introduction to Statistics in Python. This course covers:
- What is statistics?
- Measures of center
- Measures of spread and outliers (from scipy stats import iqr)
- What are the chances [probability and dataframe .sample() method from random module]?
- Discrete and continuous distributions
- Generating random numbers according to uniform distribution (from scipy stats import uniform)
- Computing cumulative distribution functions
- Binomial distribution (from scipy stats import binom)
- Normal distribution (from scipy stats import norm)
- Central limit theorem
- Poisson distribution (from scipy stats import poisson)
- Exponential distribution (from scipy stats import expon)
- Student’s t-distribution
- Log-normal distribution
- Correlation (and caveats)
- Experimental design and confounders
>
My twelfth course was Introduction to Data Visualization in Python. This course covers:
- Plotting multiple graphs
- Customizing axes
- Legends, annotations, and styles
- Working with 2-D arrays and meshgrid
- Visualizing bivariate functions (color bar, color map, axis tight, and contour plots)
- Visualizing bivariate distributions (rectangular and hexagonal binning)
- Working with images
- Visualizing regressions [sns.lmplot(), hue, col, sns.residplot()]
- Visualizing univariate distributions [sns.stripplot(), sns.swarmplot(), sns.violinplot()]
- Visualizing multivariate distributions [sns.jointplot(), kde, sns.pairplot(), hue, covariance sns.heatplot()]
- Visualizing time series (formatting datetime index)
- Time series with moving windows
- Histogram equalization in images
>
Networking Call (Part 1)
Posted by Mark on November 9, 2020 at 07:28 | Last modified: June 25, 2021 12:29I came across GP on a trading forum where he shared some free trader tools. I viewed his website to find:
> GP is an engineer with a deep passion for the financial markets….
Me too!
> He loves playing with numbers and got hooked onto derivative trading
> in his final years of grad school.
I got hooked a bit later but otherwise, me too!
> Over the years he has traded as a Series-7 licensed… trader…
Unlike me, he has actual experience working in the industry.
> …He also briefly served in a market data and analytics consulting
> role… advising various clients including hedge funds, commodity
> trading firms and exchanges…
This sounds great because I have thought about pursuing some sort of consulting role where I work with portfolio managers to design and/or teach trading strategies, etc.
> GP received… MS in Computer Networking and Telecommunications…
> and an inter-disciplinary Ph.D in Computer Science and
Unlike me, it sounds like he has extensive programming experience.
> Telecommunications… where he found a deep interest in probability
> theory while working on sample path analysis of stochastic processes
> using linear algebraic queueing theory as the main analytical tool.
Sounds like he has some additional financial engineering (see second-to-last paragraph here) expertise.
> He has traded extensively in Stocks, Options, Futures, Options on
> Futures and has even dabbled into Bonds and Commodties – trading
> them using various technical and fundamental models. Currently he
> mostly trades index and stock options using delta neutral strategies.
Sounds like he has extensive trading experience!
In a nutshell, then, he sounds like a full-time trader with actual industry experience: something I periodically consider. He seems to have more advanced analytical knowledge to get the job done (I have considered going back to pursue an MSFE or computer science degree). He markets himself as a consultant and has apparently worked as an industry strategy consultant.
GP sounds like a good person with whom to speak. He can probably identify with much of my experience and he may have some ideas how to get around road blocks that I have encountered (i.e. here and fourth-to-last paragraph here).
In combination with my experience, I thought we could have a good networking call. I have an advanced trading background along with at least five years spent probing the industry for potential entry points. Maybe I could help him, too.
I contacted him via e-mail through his website and we scheduled a call for last night at 5:00 PM.
I called promptly at 5 PM only to be greeted by someone who had no idea who I was. It took a good 20 seconds of silence before he said “did you find me through [the online forum]?”
“Yes.” In other words, yes that’s me… who else would it be when you agreed to schedule a call for this exact time?
Hopefully he just had a rough day.
I will continue next time.
Categories: Networking | Comments (0) | PermalinkReview of Python Courses (Part 3)
Posted by Mark on November 6, 2020 at 07:47 | Last modified: January 14, 2021 15:02In Part 2, I summarized the next three Datacamp courses I took. Today I will continue with courses 6-8.
As a reminder, I introduced you to my recent work learning Python here.
Course #6 was Python Data Science Toolbox, Part 2. This course covers:
- Iterators and iterables
- List and dictionary comprehensions
- Conditionals in comprehensions
- Generator expressions
- Using pandas read_csv iterator for streaming data
>
The next course I took was Merging Dataframes with pandas. Concepts covered in this course include:
- Reading multiple data files (including use of glob)
- Reindexing dataframes
- Arithmetic with series and dataframes
- Appending and concatenating series and dataframes
- Example of reading multiple files at once with a loop to build dataframe
- Concatenation, keys, and MultiIndexes
- Outer and inner joins
- Converting to, manipulating as, and stacking arrays
- Merging and joining dataframes
- Reshaping and plotting
>
My course #8 was Introduction to Importing Data in Python. Concepts covered here include:
- Importing text and tabular data
- Flat files
- Importing flat files using NumPy and pandas
- Importing pickled files and Excel spreadsheets
- Importing SAS/Stata files using pandas
- Importing HDF5 and MATLAB files
- Introduction to relational databases
- Creating a database engine in Python
- Querying relational databases in Python and directly with pandas
- Advanced querying: exploiting table relationships
>
As a bonus, let’s recap my class #9: Intermediate Importing Data with Python. Concepts covered here include:
- Importing flat files from the web with the urllib package
- HTTP requests to import files from the web
- Scraping the web in Python using BeautifulSoup
- Introduction to APIs and JSONs
- APIs and interacting with the world wide web
- The Twitter API and authentication
>
I will continue summarizing classes later.
Categories: Python | Comments (0) | PermalinkAutomated Backtester Research Plan (Appendix B)
Posted by Mark on November 3, 2020 at 07:44 | Last modified: May 12, 2020 14:33From Jan 2019, this should be the final entry of the current blog mini-series (see Appendix A introductory remarks).
—————————
More relevant to the WF approach, could we shorten the period to X months and look at the average and extremes of the distribution of daily price changes? We would be stopped out going into a big change. When placing trades in the new market environment placing trades, we should get compensated by higher option premiums. This gives us a fighting chance and if we can somehow decrease position size in accordance with ATR, then maybe we can keep the average PnL changes somewhat constant across anything from calm to volatile market environments. Stuff to think about.
I don’t believe this holds any relevance with regard to the daily/serial trades categorization (see Part 5 paragraphs 2-3). This may be something to study with regard to allocation or it may be something to monitor before trade entry. A study of ATR versus future MAE may help to determine what relationship (if any) exists between the two.
If the market goes up more than it goes down, then why not trade bullish butterflies rather than naked puts? Position sizing aside, the risk is much lower for the butterflies.
My initial thought on this was to study MAE and MFE of the underlying over the next ~30 days. Mild MAE numbers and better MFE would signify a market moving gradually higher. The key for butterfly profitability is when the market gets inside the expiration tent, which would not be indicated by this study. If we target something like 10%/-20% PT/max loss, though, then any movement up will likely get close to the PT unless the market skyrockets.
We could also study these max excursion distributions over different time intervals (e.g. 5-20 days by increment of 5). The butterfly would be indicated if MAE remains constant at some point while MFE continues to grow. Another indication would be a high percentage of cases showing MAE to be contained while MFE is large. Another indication would be MFE limited and positive within a certain time range. A final indication would be tip of bell curve corresponding to a set range. We could study butterflies that are centered X% above the money to X% below the money and calculate differences in profit.
We could also look at the asymmetrical butterfly (butterfly + PCS), but spread width would have to be specified, etc.
As backdrop from the easier scenario against which to compare all recent discussion (this blog mini-series), consider an all-equity portfolio where backtesting can easily be done with fixed position size throughout as defined by:
Number of shares traded = (initial number shares * initial stock price) / current stock price
Normalized drawdown can then be calculated at any point as a percentage of the initial account value.
Categories: Backtesting | Comments (0) | Permalink