With this, always start with the entity you want to fetch, i.e InvestmentEntity. Also, keep in mind that entity data can't be aggregated into entity instances, you've to fetch a typedlist or dynamic list for that for obvious reasons as the aggregation results have different meaning than an entity field.
The relations and filters work the same though.
So create a relationcollection (or RelationPredicateBucket if you're using adapter, you didn't specify that), and add to that in this order:
InvestmentEntity.Relations.Account....
AccountEntity.Relations.ClientAccount....
ClientAccountEntity.Relations.Client....
ClientEntity.Relations.AdvisorClient...
We don't need Advisor added as well, as you probably have the AdvisorID which is present in the AdvisorClient as well.
So now fabricate the predicate expression to filter on this set. So add a filter:
AdvisorClientFields.AdvisorID==_advisorIDToFilterOn_
This gives all investmententities.
If you want to aggregate data, you should create a dynamic list, add aggregate functions to the fields you want to aggregate on and of course a groupby collection with the fields to group on.