Day-Trading with AI: A Case Study In Higher Profits Using Transdimensional Machine Learning (TML)

Day-Trading with AI: A Case Study In Higher Profits Using Transdimensional Machine Learning (TML)

Imagine a Manifold Where Clusters are Driven By Your Use-Case

No alt text provided for this image

TLDR:

The average day-trading total profit was increased by 158% (232% max) over the baseline optimized best single “BUY-TO-OPEN” conditional-order profit level using TML with an “Accuracy-Driven” Fitness criteria, and by 200% (244% max) using TML with a “Profit-Driven” Fitness criteria. Ultimately demonstrating a profit level 95% of the ideal profit level using only (9) TML clusters!

No alt text provided for this image

Background Post #1: The New AI Gold Rush — Transdimensional Machine Learning (Pan Provided!)

Background Post #2: Day-Trading with AI: When to Hold, When to Fold, and When to Not Play!

An Example:

  • The in-house “2StrikeTrader” distributed profit optimization & backtesting application was developed to provide realistic “tick-by-tick” performance of “Thinkscript” compatible “conditional-orders” as evidenced on the TDAmeritrade “ThinkorSwim” trading platform.
  • A random sample of (20) trading days were selected from the time period January 2020 through October 2020.
  • A candidate “BUY-TO-OPEN” conditional-order format and structure consistent with “Thinkscript” was selected for evaluation and profit optimization of the, in this particular instance, (4) associated numeric parameters.
  • A realistic “Scalp” value was selected for the “SELL-TO-CLOSE” condition to help bound the computational requirements, though the “2StrikeTrader” application supports arbitrary OPEN & CLOSE conditional-orders in addition to chained conditional-order transactions.
  • A realistic “StopLoss” and various trading rules such as minimum time between successive trades and maximum trade time duration limits were selected.
  • All order “Fills” are nondeterministic and of randomized realistic finite duration and subject to the actual historic “tick-by-tick” price variance, regardless of the specifics of the associated triggering condition(s), and include actual trade fees and costs.
  • At the most basic level, the “2StrikeTrader” application is presented with an instance of a conditional-order and associated trading-rules for a specific time-period, in the present case a specified historical trading day corresponding to standard NYSE trading hours, and all resulting trades, if any, are tabulated along with associated P/L and various results data.
  • In the present case, each instance of a “BUY-TO-OPEN” conditional-order was presented to the “2StrikeTrader” application for each of the prior referenced random sample of (20) trading days, and all resulting trades, if any, were tabulated along with associated P/L and various results data.
  • An on-going distributed optimization on in-house/on-prem cluster was performed on trading profits over the “BUY-TO-OPEN” conditional-order parametric space, the intermediate results of which subsequent to approximately (3) Million backtested trades were used in this example.
  • A prior study using TML (Day-Trading with AI: When to Hold, When to Fold, and When to Not Play!) identified approximately (9) unique types of trading days/Clusters.
  • A list of “BUY-TO-OPEN” conditional-orders was compiled from P/L results from the above referenced optimization, the selection criteria being that for each of the prior referenced random sample of (20) trading days, the conditional-order providing the highest profit for the individual trading day was added to the list. Resulting in a list of (20) unique conditional-orders, (1) for each of the (20) trading days.
  • These intermediate results were utilized to determine the optimized single best “BUY-TO-OPEN” conditional-order and associated profit level when applied to all (20) of the above referenced list of trading days, forming the “baseline” of the presented results (i.e. $1122.36).
  • Furthermore, these intermediate results were also utilized to determine the optimized (20) best “BUY-TO-OPEN” conditional-orders and associated profit levels when applied to each individually of the (20) above referenced list of trading days, forming the “ideal” profit of the presented results (i.e. $4045.80).
  • A (20) dimensional raw data vector, using the above referenced list of conditional-orders, was created for each trading day, comprised of the profit results for each of the conditional-orders for each trading day, resulting in a matrix of (20) rows, each row corresponding to a trading day, by (20) columns, where each column corresponding to a specific conditional-order taken from the above referenced list of conditional-orders.
  • For purposes of the present analysis, the UMAP “n_components” parameter was limited to the range of (1) to (100) inclusive to help bound the computational requirements.
  • CASE #1: TML was performed as outlined in “Background Post #1” on the (20) dimensional raw data vector for the instances of (2) through (9) clusters of the (20) trading days, the “Fitness” being “Accuracy-Driven” as defined and shown below in “Code Snippet #1”.
  • CASE #2: TML was performed as outlined in “Background Post #1” on the (20) dimensional raw data vector for the instances of (2) through (9) clusters of the (20) trading days, except the “Fitness” being “Profit-Driven” as defined as the maximum profit obtained as a consequence of the best conditional-order applied to each of the member trading days contained in the same cluster and shown below in “Code Snippet #2”.

Code Snippet #1: CASE #1 — Accuracy Driven TML Fitness Definition

if ( num_clusters_found == desired_num_clusters ):
    genome.fitness = 10000.0 / abs( clustered_COMB_sum_SE + 1)
elif ( num_clusters_found == 0 ):
    genome.fitness = -99999.0
else:
    
    genome.fitness = 10000.0 / abs( clustered_COMB_sum_SE + 1) - ( abs( num_clusters_found - desired_num_clusters ) * 10000.0 )

Code Snippet #2: CASE #2 — Profit Driven TML Fitness Definition

if ( num_clusters_found == desired_num_clusters ):
    genome.fitness = round( max_profit_results_total , 2 )
elif ( num_clusters_found == 0 ):
    genome.fitness = -99999999.99
elif ( num_clusters_found > desired_num_clusters ):
    genome.fitness = round( max_profit_results_total , 2 ) - ( abs( num_clusters_found - desired_num_clusters ) * 999999.99 )
elif ( num_clusters_found < desired_num_clusters ):
    
    genome.fitness = round( max_profit_results_total , 2 )

CASE #1 Cluster Results: <cluster ID for each trading day>

2_groups =  [0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0]
3_groups =  [0, 2, 0, 0, 0, 2, 0, 2, 2, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0]
4_groups =  [1, 3, 1, 0, 1, 2, 0, 3, 2, 3, 3, 1, 3, 3, 3, 1, 3, 3, 0, 1]
5_groups =  [1, 2, 1, 1, 1, 3, 1, 2, 3, 4, 2, 0, 2, 4, 4, 1, 2, 4, 1, 0]
6_groups =  [4, 0, 5, 1, 4, 2, 1, 0, 2, 3, 2, 5, 2, 3, 3, 5, 2, 2, 1, 5]
7_groups =  [5, 3, 2, 6, 5, 4, 6, 3, 4, 4, 3, 0, 1, 4, 4, 2, 1, 4, 6, 0]
8_groups =  [2, 6, 4, 3, 2, 1, 3, 6, 1, 0, 7, 5, 7, 0, 0, 4, 7, 1, 3, 5]
9_groups =  [5, 2, 6, 6, 5, 7, 0, 2, 3, 4, 3, 1, 8, 7, 4, 6, 8, 3, 0, 1]

CASE #2 Cluster Results: <cluster ID for each trading day, -1 = Noise>

2_groups = [0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0]
3_groups = [0, 2, 0, 1, 0, 2, 1, 2, 2, 2, 2, 0, 1, 2, 2, 0, 1, 2, 1, 0]
4_groups = [3, 1, 3, 2, 3, 1, 2, 1, 1, 0, 1, 3, 1, 0, 0, 3, -1, 1, 2, 3]
5_groups = [4, 1, -1, 3, 4, 2, 3, 1, 2, 0, 2, 4, 2, 0, 0, 4, 2, 2, 3, 4]
6_groups = [1, 4, 2, 0, 1, 5, 0, 4, 5, 3, 5, 2, 5, 3, 3, 2, 5, 5, 0, 2]
7_groups = [1, 3, 0, 0, 1, 6, 2, 3, 4, 5, 3, -1, 6, 5, 6, 0, 4, 6, 2,-1]
8_groups = [4, 2, 6, 4, 7, 0, 5, 2, 0, 1, 2, 6, 3, 1, 1, 7, 3, -1, 5, 6]
9_groups = [7, 0, 7, 6, 5, 2, 8, 0, 2, 1, 0, 4, -1, 1, 3, 5, 6, 3, 8, 4]

CASE #1 “Accuracy-Driven” Transdimension Machine Learning Results:

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  6960.645449059028 283
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  0.9899501200650853
# New best: n_components              =  2
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  9.899501200650853
# OUT: num_clusters_found              =  2
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  1.0
# OUT: clusterer_probabilities_sum_SE  =  0.0
# OUT: clusterer_outlier_scores_sum    =  0.0015822293367931729
# OUT: clusterer_outlier_scores_sum_SE =  0.43664837882984625
# OUT: clustered_COMB_sum_SE           =  0.43664837882984625
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  6720.868483129303 373
# New best: metric                    =  euclidean
# New best: n_neighbors               =  3
# New best: min_dist                  =  0.9806751960376385
# New best: n_components              =  18
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  1.6702124432516032
# OUT: num_clusters_found              =  3
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9993063223980639
# OUT: clusterer_probabilities_sum_SE  =  0.09623772308554056
# OUT: clusterer_outlier_scores_sum    =  0.0025235186134864853
# OUT: clusterer_outlier_scores_sum_SE =  0.39166522057448777
# OUT: clustered_COMB_sum_SE           =  0.48790294366002834
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  2939.8809783443057 4630
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  0.9844851363095762
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  1.1229283586031105
# OUT: num_clusters_found              =  4
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9968783377316119
# OUT: clusterer_probabilities_sum_SE  =  1.2007491244818755
# OUT: clusterer_outlier_scores_sum    =  0.0031216622683879758
# OUT: clusterer_outlier_scores_sum_SE =  1.2007491244818773
# OUT: clustered_COMB_sum_SE           =  2.401498248963753
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  3045.165030327623 3917
# New best: metric                    =  euclidean
# New best: n_neighbors               =  7
# New best: min_dist                  =  0.6260033494778696
# New best: n_components              =  12
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  1.2862412571303103
# OUT: num_clusters_found              =  5
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9975813533345275
# OUT: clusterer_probabilities_sum_SE  =  0.5958724223069191
# OUT: clusterer_outlier_scores_sum    =  0.005716892648354481
# OUT: clusterer_outlier_scores_sum_SE =  1.6880218495658013
# OUT: clustered_COMB_sum_SE           =  2.2838942718727204
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  1732.0858838985607 4545
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  0.00014802695356725215
# New best: n_components              =  100
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  0.0014802695356725215
# OUT: num_clusters_found              =  6
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9956191549442621
# OUT: clusterer_probabilities_sum_SE  =  2.3866928865825363
# OUT: clusterer_outlier_scores_sum    =  0.0043808450557378305
# OUT: clusterer_outlier_scores_sum_SE =  2.3866928865825368
# OUT: clustered_COMB_sum_SE           =  4.773385773165073
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  2285.7317026684736 5927
# New best: metric                    =  euclidean
# New best: n_neighbors               =  4
# New best: min_dist                  =  0.9897506613403609
# New best: n_components              =  4
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  1.5290874475004406
# OUT: num_clusters_found              =  7
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9961980874927786
# OUT: clusterer_probabilities_sum_SE  =  1.4769404959232644
# OUT: clusterer_outlier_scores_sum    =  0.005252921933911367
# OUT: clusterer_outlier_scores_sum_SE =  1.8980261671918843
# OUT: clustered_COMB_sum_SE           =  3.3749666631151487
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  810.1674860187684 1423
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  1.4868494804381109e-06
# New best: n_components              =  8
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  1.4868494804381112e-05
# OUT: num_clusters_found              =  8
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9909003457401072
# OUT: clusterer_probabilities_sum_SE  =  5.6715633943426
# OUT: clusterer_outlier_scores_sum    =  0.009099654259892849
# OUT: clusterer_outlier_scores_sum_SE =  5.671563394342598
# OUT: clustered_COMB_sum_SE           =  11.343126788685197
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  325.6759659174568 5198
# New best: metric                    =  euclidean
# New best: n_neighbors               =  18
# New best: min_dist                  =  8.039789228616619e-05
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  0.000803978922861662
# OUT: num_clusters_found              =  9
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9896990917080315
# OUT: clusterer_probabilities_sum_SE  =  14.852683413142193
# OUT: clusterer_outlier_scores_sum    =  0.010300908291968587
# OUT: clusterer_outlier_scores_sum_SE =  14.852683413142191
# OUT: clustered_COMB_sum_SE           =  29.705366826284383
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$


CASE #2 “Profit-Driven” Transdimension Machine Learning Results :

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  2535.44 1395
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  0.9898727892678176
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  9.898727892678176
# OUT: num_clusters_found              =  2
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  1.0
# OUT: clusterer_probabilities_sum_SE  =  0.0
# OUT: clusterer_outlier_scores_sum    =  0.10330661568964306
# OUT: clusterer_outlier_scores_sum_SE =  476.4889195566858
# OUT: clustered_COMB_sum_SE           =  476.4889195566858
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  2862.08 6642
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  0.9889775140187894
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  5.439376327103341
# OUT: num_clusters_found              =  3
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9008155222968117
# OUT: clusterer_probabilities_sum_SE  =  494.3500852332057
# OUT: clusterer_outlier_scores_sum    =  0.1796910875126781
# OUT: clusterer_outlier_scores_sum_SE =  973.9897235113592
# OUT: clustered_COMB_sum_SE           =  1468.3398087445648
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  3168.96 544
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  0.9899646227970397
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  1.268392172958707
# OUT: num_clusters_found              =  4
# OUT: ratio_clustered                 =  0.95
# OUT: clusterer_probabilities_sum     =  0.9040157841809119
# OUT: clusterer_probabilities_sum_SE  =  783.7466136449924
# OUT: clusterer_outlier_scores_sum    =  0.10391968348217817
# OUT: clusterer_outlier_scores_sum_SE =  687.0016157510179
# OUT: clustered_COMB_sum_SE           =  1470.7482293960102
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  3400.26 3984
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  0.07610414130677623
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  0.6754242540976391
# OUT: num_clusters_found              =  5
# OUT: ratio_clustered                 =  0.95
# OUT: clusterer_probabilities_sum     =  0.9173306574389718
# OUT: clusterer_probabilities_sum_SE  =  620.9235863442633
# OUT: clusterer_outlier_scores_sum    =  0.14005500094976522
# OUT: clusterer_outlier_scores_sum_SE =  1125.5807144701594
# OUT: clustered_COMB_sum_SE           =  1746.5043008144225
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  3571.48 4003
# New best: metric                    =  euclidean
# New best: n_neighbors               =  2
# New best: min_dist                  =  0.11196689952462023
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  0.48985518542021356
# OUT: num_clusters_found              =  6
# OUT: ratio_clustered                 =  1.0
# OUT: clusterer_probabilities_sum     =  0.9554661189961415
# OUT: clusterer_probabilities_sum_SE  =  240.74812753244228
# OUT: clusterer_outlier_scores_sum    =  0.04453388100385862
# OUT: clusterer_outlier_scores_sum_SE =  240.74812753244228
# OUT: clustered_COMB_sum_SE           =  481.49625506488456
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  3672.64 3289
# New best: metric                    =  euclidean
# New best: n_neighbors               =  17
# New best: min_dist                  =  1.1788093535203123e-05
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  0.00011788093535203124
# OUT: num_clusters_found              =  7
# OUT: ratio_clustered                 =  0.9
# OUT: clusterer_probabilities_sum     =  0.8712199643328573
# OUT: clusterer_probabilities_sum_SE  =  1083.217201695875
# OUT: clusterer_outlier_scores_sum    =  0.05462809203438301
# OUT: clusterer_outlier_scores_sum_SE =  193.552372568906
# OUT: clustered_COMB_sum_SE           =  1276.769574264781
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  3837.86 2136
# New best: metric                    =  euclidean
# New best: n_neighbors               =  4
# New best: min_dist                  =  0.8185177469639503
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  0.8185177469639503
# OUT: num_clusters_found              =  8
# OUT: ratio_clustered                 =  0.95
# OUT: clusterer_probabilities_sum     =  0.9702919848658391
# OUT: clusterer_probabilities_sum_SE  =  63.60717739223244
# OUT: clusterer_outlier_scores_sum    =  0.03424018339893043
# OUT: clusterer_outlier_scores_sum_SE =  67.71528722826933
# OUT: clustered_COMB_sum_SE           =  131.32246462050176
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
# New best_fitness_so_far =  3860.24 4165
# New best: metric                    =  euclidean
# New best: n_neighbors               =  20
# New best: min_dist                  =  0.08596176527296671
# New best: n_components              =  1
# New best: min_samples               =  2
# New best: min_cluster_size          =  1
# New best: cluster_selection_epsilon =  0.08596176527296671
# OUT: num_clusters_found              =  9
# OUT: ratio_clustered                 =  0.95
# OUT: clusterer_probabilities_sum     =  0.9449802983006546
# OUT: clusterer_probabilities_sum_SE  =  505.03948103008213
# OUT: clusterer_outlier_scores_sum    =  0.012417795839334533
# OUT: clusterer_outlier_scores_sum_SE =  15.985840410910544
# OUT: clustered_COMB_sum_SE           =  521.0253214409927
# $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

No alt text provided for this image
No alt text provided for this image

Summary:

  • Profit was increased by 232% and on average 158% above the optimized best single conditional-order using TML with an “Accuracy-Driven” fitness criteria (Figure 1).
  • Profit was increased by 244% and on average 200% above the optimized best single conditional-order using TML with a “Profit-Driven” fitness criteria (Figure 1).
  • Using TML, a profit level equal to over 95% of the ideal profit level was achieved with only (9) TML clusters (Figure 1).
  • Combined error by itself is not necessarily indicative of the best use-case specific TML manifold selection criteria (Figure 2).
  • Given that the TML manifold dimensionality was constrained from (1) to (100) dimensions, it appears that the CASE #1 “Accuracy-Driven” results might have benefited from an increase in the upper bound (Figure 3).
  • The TML manifold dimensionality of the CASE #2 “Profit-Driven” results should be viewed as unique to this specific use-case (Figure 3).
  • It is worth noting that in the instance of CASE #2 Cluster Results, trading days identified with a Cluster ID of “-1” are identified as “Noise” and as such contribute (0) profit to the total profit associated instance of number of clusters/groups (i.e. only 2, 3 & 6 cluster groupings include profit contribution for all (20) trading days).
  • As a starting point, “Accuracy-Driven” fitness criteria provided excellent improvement in day-trading profits, though “Profit-Driven” (i.e. use-case specific) fitness criteria was superior in every case except in the instance of (6) TML clusters where the results were the same (Figure 1). It is worth noting that in the instance of (6) TML clusters where the “Profit” results were the same, the corresponding “Accuracy” results (Figure 2) and the TML manifold “dimensionality” results (Figure 3) are distinctly different.
  • GENERAL-TAKEAWAY: Even for the same data, there are an infinite number of TML manifolds available. And they each perform differently for your specific use-case! Using TML with Hybrid-NEAT based reinforcement learning you can mine for the results that satisfy your use-case best!

Inspiration:

  • UMAP, Leland McInnes
  • HDBSCAN, Leland McInnes, John Healy, Steve Astels
  • NEAT, Kenneth Stanley

About Andrew (Andy) Carl:

“TransDimentional Machine Learning” (TML) application evangelist, the enthusiastic developer of the “2StrikeTrader” Day-Trade application, “2StrikeHitter” computer-controlled Baseball pitching machine controller, “GitHub AI Brain-of-Brains” and “GITHUB2VEC” NLP productivity tools. A passionate multi-discipline Aerospace Mechanical Engineer with extensive experience integrating Artificial Intelligence, Hybrid Reinforcement Machine Learning (Hybrid-NEAT), data science and multi-discipline based simulation in Hybrid Reinforcement Learning based Optimization, design and analysis of complex air, space and ground-based systems and engineering tool development.

Originally Posted on Medium.com:


Aaron Dunne

Principal Consultant

2 年

Fascinating

回复

要查看或添加评论,请登录

社区洞察

其他会员也浏览了