Both input methods are valid. It depends on how you want to convey the intention. It's a matter of nuance.
First, to improve your examples a bit, start with a form group with a title above it. In HTML this would be created using a <fieldset>
with a <legend>
. The title/legend adds a clear relation between the options that better communicates what the intention is. Radio buttons are supposed to be mandatory (that's why you can't unselect a radio button), but the checkboxes need a little instruction beforehand to make clear at least one is mandatory and need validation.
Choose at least one to include:
[ ] Internal stock
[ ] External stock
You don't have to mention in the label that multiple can be selected for checkboxes, nor that only one can be selected for radio buttons, that is common knowledge you can expect users have.
As you mentioned, in this case, the radio buttons only make sense when there are two options (plus a "both" option). The benefit of this opposed to checkboxes is that it communicates explicitly that Internal and External stock can be combined. With checkboxes you leave this to the user to discover. The need for this nuanced difference depends a lot on the context and the users. So without more context I can't advise on that. Important is to label the third option as unambiguous as possible:
Choose what to include:
( ) Internal stock
( ) External stock
( ) Internal and external stock