Here is the final version of the System Performance Score (SPS). The previous versions suffered from too much focus on the NOBF , which it turns out is entirely unnecessary.
SPS = (p*(W/L) - q)*min[1, N/1000] ,
where
p is the winrate,
W is the average winning trade return (%),
L is the average losing trade return (%),
q is 1-p,
N is the number of trades in the backtest.
Now let's revisit the systems listed by nonlinear5 :
System A : [+10, +10, +10, +10]
System B : [+20, +20, +20, +20]
SPS(A) = (1(10/0) - 0) = infinity, as expected.
SPS(B) = (1(20/0) - 0) = infinity, as expected.
System C : [+10, -5, +10, -5]
System D : [+20, -10, +20, -10]
SPS(C) = (.5(10/5) - .5) = .5;
SPS(D) = (.5(20/10) - .5) = .5 = SPS(C), as expected.
System E : [-8, -8, -8, +25, +25]
System F : [-1, +1, +1, +21, +50]
SPS(E) = (.4(25/8) - .6) = .65,
SPS(F) = (.8(18.25/1) - .2) = 14.4

SPS = (p*(W/L) - q)*min[1, N/1000] ,
where
p is the winrate,
W is the average winning trade return (%),
L is the average losing trade return (%),
q is 1-p,
N is the number of trades in the backtest.
Now let's revisit the systems listed by nonlinear5 :
System A : [+10, +10, +10, +10]
System B : [+20, +20, +20, +20]
SPS(A) = (1(10/0) - 0) = infinity, as expected.
SPS(B) = (1(20/0) - 0) = infinity, as expected.
System C : [+10, -5, +10, -5]
System D : [+20, -10, +20, -10]
SPS(C) = (.5(10/5) - .5) = .5;
SPS(D) = (.5(20/10) - .5) = .5 = SPS(C), as expected.
System E : [-8, -8, -8, +25, +25]
System F : [-1, +1, +1, +21, +50]
SPS(E) = (.4(25/8) - .6) = .65,
SPS(F) = (.8(18.25/1) - .2) = 14.4