=(INDIRECT(ADDRESS((ROW(J5)),(COLUMN(J5)-2)))+50*((IF(INDIRECT(ADDRESS((ROW(J5)-1),(COLUMN(J5))))="W",1,(IF(INDIRECT(ADDRESS((ROW(J5)-1),(COLUMN(J5))))="L",0,0.5))))-(1/(10^((INDIRECT(ADDRESS((ROW(J5)),(COLUMN(J5)-1)))-INDIRECT(ADDRESS((ROW(J5)),(COLUMN(J5)-2))))/500)+1))))
Can be changed to This
=(INDIRECT(ADDRESS(myrow,mycol-2))+50*((IF(INDIRECT(ADDRESS(myrow-1,mycol))="W",1,(IF(INDIRECT(ADDRESS(myrow-1,mycol))="L",0,0.5))))-(1/(10^((INDIRECT(ADDRESS(myrow,mycol-1))-INDIRECT(ADDRESS(myrow,mycol-2)))/500)+1))))
the row and column is only calculated once in the named range MyRow. Same for the column.
Now you can also remove the Indirect and Address parts, and use Index instead
=INDEX($A$1:$AZ$10000,myrow,mycol-2)+50*((IF(INDEX($A$1:$AZ$10000,myrow-1,mycol)="W",1,(IF(INDEX($A$1:$AZ$10000,myrow-1,mycol)="L",0,0.5))))-(1/(10^((INDEX($A$1:$AZ$10000,myrow,mycol-1)-INDEX($A$1:$AZ$10000,myrow,mycol-2))/500)+1)))
$A$1:$AZ$10000 = your entire data set.