You cant stop them, but you may be able to direct them to your junk folder.
"What have I done wrong" - we dont know, but posting your email address on open public forums wont help, or registering for "dodgy" web sites (not porn but just dodgy like dubious dating web sites), also entering online competitions by giving them your email address. Any or all of the above (if you have done them) will get your email address onto spammers lists.
Solution - create 3 or 4 (or more) email addresses.
Keep one for JUST your friends and family and use it for NOTHING else.
Keep another for registering for "genuine" web sites.
Maybe another for banking or other online transactions.
Then keep another (or more than one) for entering competitions and so on. Once it starts to get a lot of spam stop using it and create another.
You can use web sites like googlemail (gmail), outlook.com (or hotmail.com) to create lots of email addresses for free.
I have about 10 different emails for different things, and I try to keep all my stuff separate.