A thing I want to see in the game is that, given certain conditions, it should be possible to change the flow of trade - it doesn't seem sensible to me that the flow of trade is static. Two ways to do this would be A: historical changes, if any do exist (not too knowledgeable about this) to trade flow, or B: flow is somehow based on size/power/advancement of nations. If I modernize as, say, Japan and take swathes of Asia, or America, why should I not be able to pull trade from India back towards Japan? Or from the Americas back to Japan? (all of the Americas, that is, not just Mexico) Same argument can be made for most nations in most places, if you are a dominant, modernized power why is it inevitable that you cannot pull trade away from Europe, to you? Sure, with trade capitals the problem is a little ameliorated but trade between your capital and Europe still gets pulled away from you, regardless of your actual power in downstream nodes. However! Changing the entire stream seems a bit drastic, so the solution I think would work best is a rather simple one:
You should be able to pull actual trade value upstream, not just trade power. To prevent trade just going back and forth, apply this only to local trade value in nodes, and incoming trade from fruther downstream nodes, if any.
Example (Warning: The rest of the post is a lot of arithmetic): Trade regularly flows downstream from Node 1 to Node 2, and from Node 2 to Nodes 3 and 4. The trade value in a node is presently determined by: Incoming (from upstream)+Local-Outgoing (from downstream), but would now with my suggestion be defined as Incoming (from upstream)+Incoming(from downstream)+Local-Outgoing(from downstream)-Outgoing(from upstream). If you then want to pull trade value upstream from Node 2 to Node 1, Outgoing(upstream), it is given by trade power would influence in Node 2 is: Incoming(downstream)+Local, where Incoming(downstream) equals the trade value from downstream nodes (Nodes 3 and 4), if any exists, and Local simply is the local trade value. You do not influence the value given from Incoming (upstream) in Node 2, which is the value that comes in from upstream (Node 1, where you are pulling power towards). Similarly, if someone else pulls trade from Node 1 to Node 2, the value you have now pulled from Node 2 to Node 1 will stay in Node 1 (or be pulled further upstream to Node 0, if one exists). This ensures that if trade is pulled away from a node, it doesn't come back, but you can still pull trade that already exists in downstream nodes up towards your nodes. This is a sensible restriction I think that adds balance and a more fluid trade system where upstream trade powers can actually grab trade elsewhere than simply locally.
Now there are several ways to figure how your trade power would affect the local note, one of which is very simple compared to the other ones, so I'll only outline that. First, assume for the three cases that a given node has 20 local value, 14 incoming trade value (upstream) and 5 incoming value (downstream). In other words, the total trade value of this node is 39 before calculating outgoing. Since 14 of it is from upstream, it cannot be pulled back to the previous node. Likewise, 5 of it comes from downstream and can't go back downstream.
Now, let's say you have 60 power in this node, while three other nations have 40, 70 and 30 each. You want to pull trade upstream, Nation A with 40 is collecting, and Nation B at 70 and Nation C at 30 want to pull trade downstream. The simple way to calculate the values, is to do it separately for the three trade value sources.
Incoming (downstream): 5 - Nation C and Nation A want to pull trade downstream so they cannot influence this. You have 60 and the other nation has 40, for a total of 100 trade power, so you pull 60% of this (3 ducats) upstream while Nation A collects 40% (2 ducats).
Local: 20 - Everyone can use this. The total trade power is 60+40+70+30=200, giving shares of 30% (you), 20% (A), 35% (B) and 15% (C), or precisely 6 ducats (you), 4 ducats (A), 7 ducats (B) and 3 ducats (C) respectively
Incoming (upstream): 14 - you don't have access to this, so the trade power is 40+70+30=140. This gives shares 28% (A), 50% (B), 22% (C) each, or 4 ducats (A), 7 ducats (B) and 3 ducats (C)
Adding up, you get 3+6=9 ducats, nation A gets 2+4+4=10 ducats, nation B gets 7+7=14, nation C gets 3+3=6 ducats - the total is 39 which corresponds to the starting value. Now, of course, you add any modifiers to trade value before the trade is sent on its way (or collected).
As you can see, if you want to pull upstream, even if you have more power than a nation collecting or as one sending downstream, you're not gonna collect more ducats unless the proportion of trade that comes from downstream is quite high (in the previous example, only 5/39=~12.5% of the value went to you even if you had 60/200=30% of the power), and if the incoming trade from downstream is a lot, then that's the way trade is flowing so it makes sense that it'll continue go upstream if pulled there - assuming of course that there's no strong nations collecting trade from the node, in which case they might very well be the source of (or a major contributor to) this trade flow.
Got a little longwinded with the numbers but the general idea is: Pulling trade upstream is possible and it can be balanced in a way that ensures trade still flows downstream unless there's a strong power pulling trade the other way. This also gives interesting competition among large powers for the trade value of lucrative nodes, if they live in different directions from it (say, a strong, trade-focused China competing with the Europeans for Indian trade, or an American nation taking trade from the Cape).
An important addendum is that if a node is getting trade value from several different upstream nodes, then Incoming(upstream) might have to be calculated separately as well. For example, Antwerpen gets trade incoming from both Lubeck and Bordeaux. In the previous example it would seem that I lump incoming trade from Bordeaux together with Lubeck (both are Incoming(upstream) in Antwerpen), but if France is taking trade back upstream from Antwerpen to Bordeaux, they should be able to pull the trade value Antwerpen gets from Lubeck. Specifically,
If you pull from Antwepren to Bordeaux, the value you can pull from Antwerpen is the local value, the incoming from the Isles, Lubeck, Germany and Genoa. In fact, since Antwerpen is an end node there's no value there you can't access.
If you're taking from the Lubeck node back to Wien, you can take the trade that comes from the North Sea and Baltic nodes as well as Lubeck's local trade and whatever goes upstream from Antwerpen, , but not the value that comes from Wien itself.
The reverse, if a node has several downstream nodes - Wien goes to Germany, Venice and Lubeck for example, can be problematic however. Assume it can be done, that is, if you want to pull trade from Wien to Germany, you cannot take the trade that goes upstream from Germany to Wien, but you can take the trade that goes from Lubeck to Wien and from Venice to Wien. This means that you can pull trade from Lubeck to Wien, and then from Wien to Germany, but then it can go from Germany back to Lubeck! Another similar example is Western Europe, which is downstream from the Caribbean and Chesapeake Bay. You can pull from upstream from WE to the Caribbean. However, you can also pull trade downstream from the Caribbean to Chesapeake Bay, and from there to WE.
In other words, trade risks going in circles (but since trade power is held up a every node it's nothing that amplifies and therefore note a considerable problem). To deal with this there must be imposed a limitation that if trade has first been pulled upstream, it cannot possibly go downstream again. That is, if you pull trade from Lubeck to Wien, it can be pulled back to Krakow and Ragusa, but it cannot be pulled forward to Germany and Venice. Similarly, you can TThis is a simple measure and then prevents trade from going in circles, which is a big potential problem of trade flows being fluid.
In conclusion:
Trade should be able to be pulled upstream, and the way to calculate trade being pulled upstream is as follows:
I. Identify all nodes connected to the one you are calculating for, and how much value, if any, they contribute to this node.
II. Identify which countries are trying to do what (pull downstream in a given direction, pull upstream in a given direction, or collect).
III. For every one of the identified trade value sources, find out which countries are eligible for a cut of it (with the general rules a) cannot access trade value that came from the node you are trying to pull it to b) can only access trade value coming from down stream if you're not pulling trade downstream somewhere else), and calculate their share of it from their trade power share
IV. Add together a nation's income from the various sources, add this together, and apply relevant trade value modifiers before sending trade on its way (or collecting it)
Now, I am not very familiar with computer programming but the added calculations do not seem to be too many to be feasible? If so I personally think this system (with maybe some refinements) could work very well to create a more fluid trade game.