これまで自分なりに色々と高速化を試行錯誤した結果がこちらなのですが、恥ずかしながらまだまだ改善の余地はあると思っております。
こちらを更に高速化する方法をご教示いただけないでしょうか。

ご参考として、実際私が実行しているループ文はab,cde,,,が計17個あり、変数のrangeのほとんどが3ですので約4000万通りほど実行しております。

for ab in range(3):
    for cde in range(2):
        for fg in range(3):
            for hi in range(3):
                Return=np.r_[Return_AB[ab], #Return_ABの中身は(1,41)のnp.array
                             Return_CDE[cde], #Return_CDEの中身は(1,41)のnp.array
                             Return_FG[fg], #Return_FGの中身は(1,41)のnp.array
                             Return_HI[hi]] #Return_HIの中身は(1,41)のnp.array
                Return_total = np.sum(Return, axis=0)
                Return_dif = Return_total-BM #BMは(1,41)のデータフレーム
                Num0 = max(Num0_AB[ab],Num0_CDE[cde],Num0_FG[fg],Num0_HI[hi]) #4~8の値
                Win_Pro = (Return_dif.iloc[:,Num0:] > 0).sum(axis=1) / (Number_Date-Num0)
                if Win_Pro.item() < 1:
                    continue
                Cum_return = np.prod(Return_dif.iloc[:,Num0:]+1, axis=1)-1
                if Cum_return.item() < 0.1:
                    continue
                TE = Return_dif.iloc[:,Num0:].std(axis=1)
                Result.append([Win_Pro.item(),Cum_return.item(),TE.item(),Num0,ab,cde,fg,hi])