Rather than any link to Islamist terrorism, they say the suspect, identified only as Sergej W, had speculated on Dortmund’s share value falling after the bombing.
Spain international Marc Bartra and a police officer were injured in last Tuesday’s triple blasts as the players and coaching staff left a hotel ahead of a Champions League match in Germany.
Prosecutors say the suspect, who was held on Friday, bought a large number of so-called “put” options which would have entitled him to sell 15,000 shares at a pre-determined price – resulting in a substantial profit if their value fell.
“A significant share price drop could have been expected if a player had been seriously injured or even killed as a result of the attack,” they said.
They traced the computer used to purchase the put options to the hotel the team were staying at and said he had booked a room there himself.
Ralf Jaeger, the top security official in North Rhine-Westphalia state, said the suspect had hoped to earn millions.
“The man appears to have wanted to commit murder out of greed,” he said.
The 28-year-old suspect, who has dual German and Russian citizenship, faces charges of attempted murder, causing an explosion and inflicting serious bodily harm.
Three identical letters were found at the scene, linking the attack to German involvement in the fight against Islamic State in Syria. But there were doubts over their authenticity.
A fourth letter posted online also claiming responsibility, which could have come from anti-fascists, was discounted by police too.
The explosives used in the 11 April attack contained metal pins – one of which buried itself into a headrest on the coach – and had a range of 100m.
Police believe the explosives which shattered the windows of the team bus may have been hidden in a hedge near the car park of the L’Arrivee Hotel and Spa on the outskirts of Dortmund.
The blasts happened about six miles from the Westfalenstadion, where the team had been due to face French side Monaco in a quarter-final first-leg tie.
The match was postponed for 24 hours and travelling fans were offered a place to stay for the night by Borussia Dortmund supporters on social media.