-
Content Count
272 -
Joined
-
Last visited
-
Days Won
50
Content Type
Profiles
Forums
Calendar
Member Map
Everything posted by KyleK29
-
Updated: 6/30/2022 @ 2:34pm (PST) ** IMPORTANT NOTE: This program is released as-is without any warranty or implied support, please read all of the information, and understand what you're doing. This is a personal release by Kyle and not affiliated with BearBullTraders, so please do not request any support through the BBT support channels as they will not be answered. What it is: Bookmap Think-or-Swim Config Helper (say that five times fast) is a command line utility (.exe) you can use to run various functions against the Bookmap config file if you're using the Think-or-Swim version. For some reason, the ToS port of Bookmap does not include these features natively. The way the ToS version works is that it uses the lastUsed section of the config file to apply to any newly opened feeds if a symbol doesn't have a matching config. To make things more confusing, configs are stored with their feed# (e.g. AMD@DXFEED#3), so it's possible you will load an AMD chart and it will inherit the default settings stored in lastUsed, despite you previously setting the config for this symbol. I got tired of this and decided to make a fix. Functions: Print or Save the symbol list (saves the currently stored configs in the Bookmap config) Extract a Symbol's config to an external file (for importing later). Clear all stored configs from the Bookmap config. Inject a previously exported config to the lastUsed setting (so newly spawned charts will inherit the config you want them to). Overwrite all existing stored configs with a previously exported one (good if you use detached windows, as it leaves the window settings untouched). Auto backup of Bookmap config file before any destructive (change of data) action is taken. Instructions for Usage: Please see the ReadMe.md file on the GitHub for more detailed information, including the commands to use: https://github.com/kylek29/bookmap-tos-config/ DOWNLOAD: https://github.com/kylek29/bookmap-tos-config/tree/main/dist [zipfile: BookmapToSConfigEditor.zip] VIDEOS: - None yet, but I will make one on it. SUPPORT: Post here and I'll try to answer any issues as I have time. KNOWN ISSUES: None yet. Everyone should collectively cross their fingers. UPDATES: 06/30/2022 - Initial v1.0 release.
- 4 replies
-
- 1
-
- thinkorswim
- utilities
-
(and 2 more)
Tagged with:
-
I'd still recommend submitting the bug via email to bugs[at]dastrader.com and/or support[at]dastrader.com - I've been trying to get them to fix it for over a year now.
-
IMPORTANT NOTICE - 2021/12/08: I've noticed some major issues with interacting with DAS this way - a method I usually try to avoid at all costs, the User Input layer - where the script misfires and ends up interacting with the montage (in my test case, it canceled a bunch of Open Orders I had in place, including my stops), I feel that this is too major of a potential issue to recommend. Because of that, I do NOT recommend using this script. If there's enough interest (added a poll), I may replace it with a proper program that doesn't have to interact with DAS via the User Input layer. I'm leaving the script linked for REFERENCE ONLY. If you still feel that a utility like this is useful and want to see me create a better (and much safer) way of doing it, please vote in the poll. ----------------- Okay, I think I've got this in a decent enough state for an initial release, so here it goes, hopefully we don't break anything and if we do, I'm not responsible. Might not be the most elegant because it's using AHK's script syntax and I'm not that familiar with it ... in fact, I'm not fond of it. What it is: It's an AutoHotkey script that will detect if DasTrader.exe is running and then send a sequence of commands to export the Trade Logs (Orders, Tickets, Trades). This can be further automated using Windows Task Scheduler (instructions below). By default, the save-to folder is in your My Documents \ TradeLogs \ YYYY-MM-DD, but this can be changed by editing the top line of the script (see Config section below). As a note, if DAS is not found to be running it will try to start and login before proceeding. It uses the machines local DATE, so be aware of that as your exports will save to a date relative to the local timezone. Instructions for Configuration: VIDEO Tutorial: This script was covered in the 11/22/2021 Monday Tech Class, which can be found here (when it goes up): https://bearbulltraders.com/course/technology-monday/lesson/kyles-tech-webinars-2/ For the script to run, you'll need to download AutoHotkey from https://www.autohotkey.com Run the installer and choose "Express" install, unless you know what you're doing. Download the relevant script file here: Disclaimer: The following script is provided for REFERENCE ONLY and is not recommended for use at this time. If you choose to do so please note that you do it on your own accord. No warranties/guarantees and it is unsupported. v1.0: DOWNLOAD (Please see the warning at the top of this post) Unzip the download to a folder of your choosing, for simplicity sake, let's put it in a folder C:\scripts\ [you may need to create this] Now if you have DAS Trader Pro installed to C:\DAS Trader Pro\ and you don't mind the default save directory of your My Documents\TradeLogs\, you don't need to configure anymore and you can jump to the automation portion. IF you don't have DAS saved in C:\DAS Trader Pro\ or you want to change the save locations, right-click the DASExportTradeLogs.ahk file you unzipped and go to "Open With" -> "Notepad" (unless you have another txt editor of your choice, just don't use WordPad or MS Word). On the top of the file, there are two variables "logoutput" and "dasfolder", you can edit the right-hand side to a value of your choice. By default, these are set to these values: ; Default Settings logoutput = %A_MyDocuments%\TradeLogs\ dasfolder := % "C:\DAS Trader Pro\" ; Uncomment (remove semicolon) to make your own. ;logoutput := % "C:\Trade Logs\" ;dasfolder := % "C:\DAS Trader DEMO\" If you want to change these folders, uncomment the lower variables by removing the semicolon and edit between the parenthesis. Example edits below: ; Default Settings logoutput = %A_MyDocuments%\TradeLogs\ dasfolder := % "C:\DAS Trader Pro\" ; Uncomment (remove semicolon) to make your own. logoutput := % "C:\MY TRADELOGS FOLDER\" dasfolder := % "D:\MY DAS INSTALL LOCATION\" AUTOMATION: To automate this script, you need to use Windows Task Schedule Go to the Start Menu, type: Task Scheduler Once it has launched, on the right hand pane under "Actions" click "Create Task" In the dialog box that has popped up, the tab will be "General" Name: Give it a friendly name you may remember, I chose "DASTradeLogsForLoveOfKittens" Leave "Run only when user is logged on" selected Switch to the "Triggers" tab Example screenshot below: In "Triggers", select "New..." button towards bottom. Set: Begin the task to "On a schedule" Set to "Weekly" and select Monday, Tuesday, Wednesday, Thursday, Friday Under "Advanced Settings" Check: Stop task if it runs longer than: 5 minutes [type it in] Check: Enabled Hit OK Example Screenshot below: Select the "Actions" tab and hit "New..." alongside bottom. In the "New Action" dialog: Action: Start a program Program/Script box, copy and paste the following: "C:\Program Files\AutoHotkey\AutoHotkey.exe" In the "Add Arguments" box, type the location of our script and the name .. for this tutorial, we unzipped it to C:\scripts\DASExportTradeLogs.ahk Hit OK Select the "Conditions" tab and set .. Checkbox on "Start the task only if the computer is idle for:" Set to your choice, 10 minutes is a good number. Checkbox on "Wake the computer to run this task" See screenshot below: Switch to the "Settings" tab Leave checked "Allow to be run on demand" Check: "Run task as soon as possible after a scheduled start is missed" Check: "Stop the task if it runs longer than:" and set to 10 minutes Leave the rest as is, see screenshot below: Hit "OK" until you're out of the task creation screen. All done. You can test to make sure you got the parameters right by finding the task name you assigned it in the "Name" column, right-clicking, and choosing "Run". Hands off as it does it's thing. For best results, run DAS Trader and navigate to the main menu -> Trade -> Reports, then set your settings to be like the following screenshot, as a note check "Show training orders/trades" if you want to include both SIM and LIVE account (unchecked is just LIVE account). I'm sure I forgot something ... ChangeLog: 11/24/2021: Initial Release
-
Replay Mode Hotkey Scripts with working stops
KyleK29 replied to Mike Kerr's topic in DAS Trader Pro Tips and Tricks
As a note for users who find this thread, DAS now supports TriggerOrders via ReplayMode as of 5.6.4.15 (production release). So you no longer need the special hotkeys and you can use your normal hotkeys. -
Depending the timeline, I maybe down with this as well. I won't have a rental car, so I'll have to nab a ride. It's been a long time since I snowboarded though. Been meaning to go more regularly, but we don't have any major mountains in Las Vegas. Our local resort is basically a bunny slope with a lodge.
-
As in send a corresponding take-profit ahead of the price action on entry? You'd just need to add another TriggerOrder to the end of the script .. like this: TriggerOrder=RT:LIMIT PX:AvgCost-0.5 ACT:BUY QTY:Pos TIF:DAY; Bdshepherd is correct, DAS does not emulate TriggerOrders in Replay Mode so the Stop isn't created. From looking at the screenshot the Stop Price is roughly the same as the price you got in at, not 28.11. That would get you almost immediately. *Ignore this quote, forum software won't let me remove it on mobile. *Ignore this quote, forum software won't let me remove it on mobile. *Ignore this quote, forum software won't let me remove it on mobile. That's a bug with the DAS DEMO Broker for when a stock has an SSR status - it won't happen with a real broker.
- 588 replies
-
- 1
-
- scripts
- risk management
-
(and 3 more)
Tagged with:
-
The open order circled is a Buy order, not a sell. I'd caution using them for such a stock with a stop only .02 cents away from the entry, it's enough to slip you out immediately via the spread. Also, if you're not with Interactive Brokers you need to change all the SMRTL; to Limit; and SMRTM; to Market; As for the order colors on the chart flags, those are user configurable and differ for Long or Short positions. Mine are Green/Red and Blue/Orange.
- 588 replies
-
- scripts
- risk management
-
(and 3 more)
Tagged with:
-
Yes, that's the latest production version. I think the last time I checked these values (and noticed they were inverted) was in 5.6.4.1 ... that maybe the reason that 5.6.4.2 replaced 5.6.4.1 so quickly (it was like a few days). In my 5.6.4.2, it does calculate as it shows for you. Doesn't solve the actual issue of the hotkeys not having access to a BPLong and BPShort value (which I requested). Hopefully they add those.
- 588 replies
-
- 1
-
- scripts
- risk management
-
(and 3 more)
Tagged with:
-
I'm not at my desk, but what version of DAS are you using? I'd have to check my version, but I remember last time I checked this is how it was. It's why I have a TestBP hot button now, it seems to break every other release.
- 588 replies
-
- scripts
- risk management
-
(and 3 more)
Tagged with:
-
I think the problem is there's a disconnect between the MargRate you see in the symbol status popup and how the BP functions calculate. It could be true that on the broker side, 25%/25% is the normal. But if you have the montage calculate what the value will be for the hotkey, you'll notice it's not like that. 25% MargRate will return 25% of the accounts available Buying Power. 100% will return 100% of the Buying Power (includes the leverage given). You can test this by setting a Hotbutton to this: Price=1.00; SShare=BP; (price=1.00 sets the function to return dollars) The Display box will show what the BP function would return in number of dollars. If I pull up a symbol with 25% in my SIM account, it returns 25000. If I pull up a symbol with 100%, it pulls up 100000. A few versions back a bug existed that always returned 1/4 of your BP .. so this isn't exactly surprising that it maybe broke elsewhere. Now that doesn't mean you may not get the order through on the broker side. I'm just saying what is happening within the script that is throwing things off. A stock that shows 25% may very well let you buy worth the full account + leverage if you don't use the BP function.
- 588 replies
-
- scripts
- risk management
-
(and 3 more)
Tagged with:
-
You might want to suggest that Round option to DAS at [email protected] .. to be honest, I don't know anyone in the community that trades stocks that low of a price, and I know DAS gets picky with decimals, so you're likely on the right track there. What might be a good idea is to ask around the community to see if anyone else trades that type of stock and uses these hotkeys, compare notes. Sorry I'm not as helpful on this, it's one of those rare edge use cases that isn't easy to diagnose. What version of DAS are you using? Just to clarify, you're double clicking the QTY value on the on-chart order flag? There was a version of DAS that broke that functionality recently. As a work around, you should be able to load the order into the montage for editing by either double-clicking the order in the Open Orders window -or- in that same window, right-clicking it and select edit order (iirc). See if those work to load it into the montage. As a note, DAS calculates "margin" as your entire buying power, so 100% margin is the available equity * your leverage (a $25k acct would be $100k buying power, or 100% of the margin). 25% margin is your buying power * 0.25 (so $25k equity * 4:1 leverage = $100k, * 0.25 margin rate = $25k available BP on that stock). This is an issue with using Equity based hotkeys and the current market climate. It's something DAS didn't account for and is relatively new to being this widespread. It's not something I can fix and I have sent them suggestions to address it, but I don't know if they'll implement them. The way DAS works is it gets your leverage and the equity from the broker as a global value. BP is calculated off this global value. I know in the latest 5.6.4.2 they did modify the BP function to pull it from the stocks value, the problem is, they don't know which direction so they use the lesser of the two. Thus, if you go long on a stock with a 100% (long margin) and 25% (short margin), it'll always use the 25% calculation.
- 588 replies
-
- scripts
- risk management
-
(and 3 more)
Tagged with:
-
It's the crazy market volatility, lots of people are having trouble with delayed fills this week as various brokers/exchanges have experienced increased traffic (and outages). It'll likely go back to normal soon. I had a couple delays myself, first time in 2+ years. I wouldn't switch it to Market because you're really at the mercy of the market makers filling you at what price they feel like. Limit orders on entries are usually your best bet.
- 588 replies
-
- scripts
- risk management
-
(and 3 more)
Tagged with:
-
What's it do if you select the other tabs (INET, ARCA, IEX) and / or create a new Montage window? What does Ladder View look like [Right-Click L2 -> Level 2 Config -> Ladder View checkbox]. May also want to experiment with the render settings in that config --> Right-Click L2 -> Level 2 Config -> "Performance : Optimized Paint" and / or Less Flicker and / or Fast Paint. Try different combinations and see if one works.
-
Few users asked about this in chat, posting here so everyone can see how I do my ATR chart. 1) Create a new "Daily" chart 2) Download the linked .zip file and unpack it. --> https://drive.google.com/file/d/12JJGdg_SOeQVM-avM7_N-pNbDRQfN2wz/view?usp=sharing 3) Right-click the chart you created in DAS and select "Import Settings" --> Select the "ATR-chart-setup.cst" file you unpacked in #2. 4) You may need to select the chart and zoom all the way in for the effect to work. 5) Move the chart and place it where you want it. As a side tip, you can right-click the border and choose to hide the title-bar (making it smaller). I do it like this to fix a few issues .. DAS's ATR study doesn't allow you to hide the line on a chart and a chart must have either a volume or price study. If the chart is small, it'll make all of these lines behind the study info, making it hard to read .. if you make the line color white, it'll make the study color white. So I use the Volume Study with the same color as the background placed above the ATR studies to "hide" the lines. You then just need to zoom all the way in (should stay), and you'll end up with just the Study Info in the upper corner. Screenshot:
- 11 replies
-
- 4
-
- das trader pro
- atr
-
(and 2 more)
Tagged with:
-
adds Add hotkey with same risk amount
KyleK29 replied to Julien Maisan's topic in DAS Trader Pro Tips and Tricks
If I understand you correctly .. it's this scenario: 1) You enter a position, 100 shares at 10.00, stop at 9.00 (100 $risk). 2) As time goes on, you move your stop up to 9.50 (your new risk is $50), you want it to calculate the shares necessary to add the missing $50 risk at the current Last Price to get your risk back to $100. I have a hotkey that does this that I created around the same time I did Thor's. It just isn't out yet. I won't be releasing it until likely next month as it's still being tested. -
Have you checked out this thread?: DAS - Dynamically Calculate Shares on %Risk or $Risk - Hot Key + Configuration, Updated 9/10/19, v2.1 - DAS Trader Pro Tips and Tricks - Bear Bull Traders Forums As a side note, you can't currently do a lot of math in the Trigger Orders as it won't properly flatten the values so it tries to pass it as literal strings. The general syntax available is AvgCost+## or AvgCost-## and those tend to go in correctly.
-
Hi Jun, What are you trying to do with these hotkeys? The hotkeys you listed are used for setting take-profit orders for already open positions (AvgCost variable is only available for an open position). Are you using them to set take-profit orders? Side tip: Be sure to keep an Open Orders window viewable on your main trading screen at all times so you can see which orders are in the system and don't end up with duplicate Stop Orders.
-
Manually, the one Lightngo90 posted should work. Automatically? Will likely be out next month. I'm still testing scenarios with the automated ones.
-
Kyle's hotkey not working as intended
KyleK29 replied to rinran's topic in Day Trading Hardware, Software and Tools
CMEG has a different setup, DAS SIM keys don't work in CMEG. You need to make these changes: DAY+ --> Change to DAY And I think the ROUTE=LIMIT; needs to be changed. I'm not sure what CMEG is using .. maybe another user can chime in? As a general tip, I recommend having an "Positions" and "Open Orders" window open at all times on your main DAS monitor, that way you can easily see if a STOP wasn't placed in the system and correct it. You need to enable double-click to trade on the chart. Right-click chart -> Configure. Please see screenshot. Should be noted that DAS Replay Mode doesn't support Trigger Orders, so the stops won't go in the system when using that. Re: Orders disappearing on chart if you move ---> This was a bug that was fixed in DAS. Are you using the latest DAS version? The system can handle it. The scripts are processed on the local machine and use very little resources. I've been using them daily for 2 years without issues that aren't DAS backend related (occasionally they do something like reset users BP to 0), but everyones mileage may vary. With that said, you mentioned it was popping up the StudyConfig window. That is a very abnormal behavior and shouldn't occur. With multiple orders, users also sometimes lose track of their BP, so they don't realize that they may not have the BP necessary to get a $200 risk position on a stock so it takes what they can afford. It's also important to realize what the DAS montage is doing if you're trading multiple stocks. The values aren't tied to a SYMB, so if you switch between symbols on the same montage and open up positions, you should reset the StopPrice value in the montage. I do this --> If I have multiple positions and only using 1 active montage (how I do it), whenever I load a symbol with open orders I make it a habit of double-clicking the Chart Order QTY flag, this loads that value into the montage's StopPrice. If I switch to the other active position, I rinse and repeat. This way any hotkeys that use the StopPrice variable will have the proper value. As a general rule, I do not recommend using Stop Limit orders. Volatile stocks that are moving with momentum (e.g. a short squeeze) can jump your Stop Limit and leave in a worse position. This is the cause of most properly formatted Stop orders not being filled. It's because the price moved through the Stop Limit too fast to get filled. Always use stop markets. You don't want the massive added risk trying to save a few cents with a Stop Limit. -
Partial Hotkey based On Unrealized P&L
KyleK29 replied to Jinagt's topic in DAS Trader Pro Tips and Tricks
1) Overtime you'll learn how to read the price action and how your position size equalized to the $risk will be different based on the stock price and your stop distance. It gets easier. I use $50 risk hotkeys as well .. the key to understand is that the position size doesn't really matter (assuming there isn't an issue with the hotkey or your buying power), if you think in factors of R. When I enter a position, I think of a) how far do I think this will run and b) what is the current price / ATR / spread -- this allows me to think in factors of R (e.g. I think it'll run 2.5R). You can still return $100 (2R) on a position with 4 shares just as you can with a position that has 400 shares. Just keep in mind: - The closer you click the price-action (last price) for your stop, the more Slippage Risk you take on. A stop distance of 0.02 cents has a lot of risk, because it's not hard for many stocks to slip that 0.02 more cents on your fill (thus a $50 risk becomes $100). In contrast, a 0.10 cent stock distance with a 0.02 slippage is only slipped from $50 -> $60. You don't want to drag a stop further away from your entry point because you're increasing risk at that point. To help with the figuring out your current position risk (based on StopPrice), put a hot-button on your montage with this script: Price=AvgCost;Share=Price*100;Price=StopPrice;SShare=Price*100;Share=Share-SShare;Share=Share;Price=Share/100;Share=Pos;Price=Price*Share;TogSShare;Share=0; ^^ This will populate your montage's Price box with the current $Dollar risk factored from your StopPrice and AvgCost. So when you first enter a position with a $50 risk hotkey, this should show ~$50.00. This hotkey script is a calculator only and should be used for information only (checking your current $risk), don't use it to do anything with the orders. - Think of the optimal Stop Distance as a function of the symbols Average True Range, current price, and spread. A $10 stock with an ATR of 0.50 cents and a spread of 0.01 can have a 0.05 cent stop-distance and be relatively safe, because it moves in small increments. In contrast, a stock at a $600 price with an ATR of $30.00, and a spread of 0.60 cents can sometimes have a stop-distance of 3.00 or more. 2. I'll have more advanced hotkeys to help automate this stuff in (hopefully, knock on wood) the near future. But the way I do it is I: - 1) Drag the stop order on chart to adjust the level price (e.g. if I'm trailing a Moving Average). - 2) Double-click the "qty" on the chart stop order's flag, this will load the order into the montage. I then use a hot-button on my montage with the following script to replace that order with the new position size. DAS SIM users: TogSShare; Share=Pos; REPLACE; Share=Pos; ROUTE=LIMIT; TogSShare; IBCO SIM Users: TogSShare; Share=Pos; REPLACE; Share=Pos; ROUTE=SMRTL; TogSShare; -
Partial Hotkey based On Unrealized P&L
KyleK29 replied to Jinagt's topic in DAS Trader Pro Tips and Tricks
Just as a general note. I wouldn't do the price=ask; at the end of the entry script. DAS has quite a few toggle-able options that will erase this once the order executes it (different resets, e.g. reset price on execution). It can also be erased if you switch to a different symbol, enter another trade, and/or switch back. It can lead to this "can't get valid price" error. Since the way you suggested is a pair hotkey (one for entry, and one for taking profit). You can use Price=AvgCost; at the beginning of the take-profit hotkey instead .. that will get the exact price value without having to worry about the montage keeping it. You mentioned above that you're using the dynamic $Risk hotkeys to enter the position. If you are, then this would be best to do it as a factor of R, this normalizes the hotkeys to get best results. Example: - You enter a position with $50 risk at $10.00, stop is at 9.50. This purchases 100 shares. 1R = $50 With this in mind, for you to realize a take-profit of $100 you would either need to sell 100% of the position at $11.00 (2R move), or 75% of the position at $11.50 (3R move), and so fourth. [This math changes if you're using a $100 risk hotkey] How you break that profit taking down would be up to your strategy (e.g. maybe you sell 75% at 10.75, keeping 25% for further move). This is not too far off how I trade it. My entry triggers all of my take-profits at various R levels which I've premapped out (e.g. 10% @ 1.5R, 20% at 2R, etc.) according to my strategy. It's a semi-autonomous approach, allowing for management of the trade to just be adjusting the stop (e.g. if you're following using a MA as the support level). The advantage is it makes it so you can focus on multiple trades at once, which is why I switched to doing it this way over the manual approach of scaling out. -
Partial Hotkey based On Unrealized P&L
KyleK29 replied to Jinagt's topic in DAS Trader Pro Tips and Tricks
Hi Jina, Regarding the chat message this morning. Are you trying to do this on-the-fly (e.g. the price moves in your favor and you want it to dynamically calculate the shares needed to sell to return 1-R in profit at the current price area when you hit the hotkey) or as a pending order in the system? The latter method is way easier and a few scripts exist for this ... I haven't released these as they were pending DAS bug fixes and are complex to configure, I need to test them in the latest DAS production version. -
You may have figured this out, but for users just reading through this with a similar issue. If I'm understanding you correctly (or the other poster) .. the procedure of setting up hotkeys in StreamDeck is: 1) Create a Hotkey in the program you're wanting to control. For example in DAS maybe you create a FocusPrice hotkey with the combination of "Ctrl+F". You'd then go into the StreamDeck, create a new button (under the available actions -> System -> Hotkey), and assign that button the Ctrl+F command by clicking the "Hotkey: click-to-assign" section, it'll change to "Observing keystrokes" and then you hit Ctrl+F (the key combo you setup in DAS for the action). Give it a name + icon and it should now work within DAS. I wouldn't consider them the same class of device. Both can certainly be used and you should use what you're most comfortable with .. but I've always felt the X-Key and Genovation peripherals are overpriced these days given they haven't adapted to the competition in the marketplace. They used to command that price when they were the only options aimed at the Video/Sound Editing industry (has a ton of commands), but times have changed. If I was designing a product for them to compete, I'd bring out a modular StreamDeck-like device with modules for digital (StreamDeck like) keys, standard keys, touch, display panels, various sliders, and dials that you can mix and match to fit certain command intense workflows. The advantage the StreamDeck (and other digital button keypads) offers is the ability to swap the buttons on the fly for a limitless (I'm sure there's a hard cap somewhere) number of hotkey buttons. You can only display 32 at a time though. For example, I have three sets of 32 buttons .. one for Long positions, one for Short positions, and one for Premarket. This is in addition to multi-level profiles for Photoshop, Illustrator, Fusion360, gaming, and other software. As a cheap alternative, you can get a programmable gaming keypad for way less or a genetic keypad and assign the buttons with third-party software (targets that keypads HWID). I believe Norm uses a standard Numpad external (~$19) with mapped buttons and stickers on the buttons.