La prima cosa da capire è che non c'è nessuna regola o legge riguardo la strutturazione di un programma OOP. Detto questo, la prassi è quella di creare classi che siano riusabili. Tieni in mente questo principio quando strutturi le classi e le loro interazioni. Una classe che può essere usata in un altro programma, ovviamente non può avere parte della sua logica fuori dalla classe stessa, ma deve avere tutto quello che le serve internamente.
Riguardo l'istanziare altri oggetti dall'interno di una classe, è una relazione del tipo HAS-A. In pratica, usando una classe all'interno di un'altra classe, è come se la classe usata fosse un componente della classe che la usa ( così come una ruota è un componente di un auto ).
Ma ripeto, non esistono regole precise, bisogna affidarsi all'esperienza per stabilire come meglio strutturare la gerarchia delle classi.
Nel tuo caso specifico, la classe che controlla le condizioni di mercato può benissimo istanziare altre classi per svolgere attività specifiche. Ma potresti pure sviluppare tali funzionalità nel "main" ( che in fondo, da un punto di vista logico, altro non è che una classe pure lui ).
Piuttosto la difficoltà vera è nello sviluppare le altri classi e permettere che eventualmente possano interagire ( se è necessario ).