During the weekend I have been adding some new features. In particular, I am now displaying continuously the current margin requirements for each instrument. That is so nice to have because option margins change continuously (see the dodger blue figures, top left of each screenshot). (I have also been literally overwhelmed by requests and must say this is the first time I see so much "acceptance". It seems we are on the right track. Thanks to all!) Yesterday, the mkt gained a little bit: In the meantime, the 2 new option layers have begun takinge some position: ES FOP 20220520 2700 P GLOBEX 50 E-mini S&P 500 [EW3K2 P2700, 495662508, mult: 50] ES FOP 20220531 2700 P GLOBEX 50 E-mini S&P 500 [EWK2 P2700, 530344310, mult: 50] I am keeping almost half of the funds not used, to be ready to ride some possible correction, with options shooting up 63 days. Commissions: 5,135.63. Current global position 178. Average margins per option: about 6.5K. From IB: Δ NetLiquidation 37520.45 USD
Today we have seen a noticeable drop in the S&P (almost 3%) [horizontal lines are 1% marks here]: Let's take a look at the impact of this move on our 2 new option layers. This one expiring in 55 days and 40% away, has a delta of -0.0085 and sigma 57% and therefore is less sensitive than the other one: ES FOP 20220531 2700 P GLOBEX 50 E-mini S&P 500 [EWK2 P2700, 530344310, mult: 50] After the initial short ("double packet"), it fired a buy order to protect against the correction, consuming half of the short position and then closing the trade (see the blue and red circles on the right, corresponding to buy and sell.) The other layer (similarly 40% away, expiring in 44 days): looks obviously more "sensitive" (delta -0.0068 and sigma 61% ) [horizontal lines are 10% moves here]: ES FOP 20220520 2700 P GLOBEX 50 E-mini S&P 500 [EW3K2 P2700, 495662508, mult: 50] It has closed one "scalp" and has currently 2 "stranded" buy orders. The reason why it could afford the 3 buy orders, under the short constraint, is that it had previously opened 3 short packets. Remember that "stranded" buy orders will be recovered through rollovers (or "information transfer"). Or else too many stops will kill any profit ("stop recovery" mechanism).
Today ES recovered a little bit, but it seems to be going down. Another occasion to see how the algorithm deals with drawdown and hedges our options Let's look at the recent 2 option layers: ES FOP 20220531 2700 P GLOBEX 50 E-mini S&P 500 [EWK2 P2700, 530344310, mult: 50] ES FOP 20220520 2700 P GLOBEX 50 E-mini S&P 500 [EW3K2 P2700, 495662508, mult: 50] You see the bot is buying on corrections but always maintaining a short position. The buy orders that will be closed will result in higher profits, hedging action, and lower margins. Those that will remain "stranded", will anyway result in the same when, after a while, we roll over ("information transfer") to new option layers (with a higher price). This is the "basic recovery mechanism" that allows us to systematically "get rid" of old stop-loss orders (which would kill any algorithm).
During the weekend (while you guys are flying, skiing or... fasting ) I am just coding a useful new functionality that has the purpose of selecting automatically all the best candidates for rollover, from the options chain (or matrix) (one for each maturity, depending on the new option price we want to roll to). I'll show you how it works and some details on Monday. Have a wonderful weekend!
Let's take a look at the utility I added this weekend. By using the "Option Retriever" (context menu) one can get the whole matrix chain for any instrument. Now, in order to perform periodic rollovers ("information transfer"), clearly, we need the best candidates for this goal. So the utility I just added is essentially a filter that automatically selects the "best" candidates. For instance, by applying it now, we get for instance: Selection of PUT options: highest price (highest strike) for each expiry at a minimum distance of 0.6% per day to expiry [...] ES FOP 20220520 3380 P GLOBEX 50 # [38.9 days to expiry, -0.60% per day, total: -23.39%] ES FOP 20220531 3050 P GLOBEX 50 # [49.9 days to expiry, -0.62% per day, total: -30.87%] ES FOP 20220617 2600 P GLOBEX 50 # [66.9 days to expiry, -0.61% per day, total: -41.07%] ES FOP 20220630 2200 P GLOBEX 50 # [79.9 days to expiry, -0.63% per day, total: -50.13%] ES FOP 20220715 1500 P GLOBEX 50 # [94.9 days to expiry, -0.70% per day, total: -66.00%] So what is this and how does it work? Clearly, for each given maturity, we would like the option which has the highest price but on the condition that it has a strike that is "far enough", from the current price. Now, "far enough" is obviously arbitrary and can be controlled by a user parameter. For now, I just defaulted it (arbitrarily) as follows: 0.6% of the underlying price for each day to expiration (which seems reasonable enough, at least in the "middle" of the chain). We could probably later refine this criterion, which has both the pro and the cons to be "linear". For now, we can just use this simple but straightforward and easily understandable rule. So, in practice, the utility will scan the whole option matrix, and for each expiry, will provide the highest price option that is at least at an avg distance of 0.6% (or other value that you fixed) per day (which means, in each chain, the highest strike for PUTs or the lowest strike for CALLs, beyond the desired distance). How do we use this? Quite simply. Every time that we want to roll over a layer (say for instance every half month, or every month), we can simply load those few instruments and choose the one which has the expiry date and price we prefer (also depending on the "stranded" buy orders we wish to recover, and the situation on the underlying).
Today (Thursday) the ES situation is almost identical to our last chart: I have one layer which is expiring in a few hours: ES FOP 20220414 3400 P GLOBEX 50 E-mini S&P 500 [EW3J2 P3400, 495664410, mult: 50] and will free a good amount of funds to open new layers. Let's take a look at the 2 most recent layers we have been following: ES FOP 20220520 2700 P GLOBEX 50 E-mini S&P 500 [EW3K2 P2700, 495662508, mult: 50] This one was not "lucky", because it remained, so far, with 3 "stranded" buys (the maximum allowed by the algorithm), which are obviously lowering a lot its PNL. Therefore, we will need to roll this and close the buy orders to rise the "equivalent avg" of the sell orders, currently only 0.55, (otherwise the hedging orders would obliterate almost any profit of this layer). The second layer: ES FOP 20220531 2700 P GLOBEX 50 E-mini S&P 500 [EWK2 P2700, 530344310, mult: 50] had slightly better luck as it has only one buy still "open". And in fact, its avg sell is still decent (in the picture the "equivalent" avg sell price (that is, adjusted taking into consideration the buy orders) is represented by the horizontal red line) and there is still room for profit.
Let's transfer the "less lucky" layer: ES FOP 20220520 2700 P GLOBEX 50 E-mini S&P 500 [EW3K2 P2700, 495662508, mult: 50] to another one of higher price. Our option selection utility suggests the following target candidates: ES FOP 20220513 3650 P GLOBEX 50 # [29.4 days to expiry, -0.60% per day, total: -17.75%] ES FOP 20220520 3460 P GLOBEX 50 # [36.4 days to expiry, -0.61% per day, total: -22.03%] ES FOP 20220527 3250 P GLOBEX 50 # [43.4 days to expiry, -0.62% per day, total: -26.76%] ES FOP 20220531 3170 P GLOBEX 50 # [47.4 days to expiry, -0.60% per day, total: -28.57%] ES FOP 20220617 2700 P GLOBEX 50 # [64.4 days to expiry, -0.61% per day, total: -39.16%] [...] So we only need to choose the maturity (and therefore, the price) we like. So, in this case, we can select for instance: ES FOP 20220520 3460 P GLOBEX 50 E-mini S&P 500 [EW3K2 P3460, 529587863, mult: 50] And on rollover we get: and, after a while, also the hedging orders (those 3 "open" buy players) "take profit": and you can also see how the "equivalent avg of all orders" (horizontal red line) has now jumped up, and we have now more "room" to make this layer profitable. In practice, we continuously get the decay, but we also "recover" the hedging orders (which otherwise would eat up most of the PNL).
New "information transfer". From : ES FOP 20220502 3945 P GLOBEX 50 E-mini S&P 500 [E1AK2 P3945, 555018907, mult: 50] (note how the buy hedging order is spoiling the possibility of a profit, causing a too low overall average [red line] ) to: ES FOP 20220429 4080 P GLOBEX 50 E-mini S&P 500 [EWJ2 P4080, 524262149, mult: 50] we get, a higher average (stop recovered), ready for profit overall: Note that not always we will be able to "recover" the stop/hedging orders. In fact, if there is a fund shortage (and we can't "transfer" safely) we need to necessarily live with the "loss" (or PNL reduction) they imply.
And now that layer (that had a negative PNL) has turned positive: ES FOP 20220429 4080 P GLOBEX 50 E-mini S&P 500 [EWJ2 P4080, 524262149, mult: 50] Info from IB (about 78 days, and 5526.13 in commissions): Δ NetLiquidation 38710.00 USD
Today, we had a small rise in ES: The layer we recently "transferred to" has gained more profit: ES FOP 20220429 4080 P GLOBEX 50 E-mini S&P 500 [EWJ2 P4080, 524262149, mult: 50] while also the other two layers we were following have now become profitable: ES FOP 20220531 2700 P GLOBEX 50 E-mini S&P 500 [EWK2 P2700, 530344310, mult: 50] and ES FOP 20220520 3460 P GLOBEX 50 E-mini S&P 500 [EW3K2 P3460, 529587863, mult: 50] (earlier: ES FOP 20220520 2700 P GLOBEX 50 → ES FOP 20220520 3460 P GLOBEX 50) Overall situation: From IB: Δ NetLiquidation 42251.91 USD Trading now almost 79 solar days, 125 options currently working, with average margins of 10K. One layer expiring in 3 days: ES FOP 20220422 4260 P GLOBEX 50 E-mini S&P 500 [EW4J2 P4260, 550288549, mult: 50] will free margins of 30 options: about 500K.