Actually ALL websites (Worden’s too) talk about ZERO crossing.
I think the formula I used (TSV=(Sum( IIf( C > Ref(C,-1), V * ( C-Ref(C,-1) ), IIf( C < Ref(C,-1),–V * ( C-Ref(C,-1) ), 0 ) ) ,18));) has an unneeded “-” sign in front of the second reference of V (volume). Since it negates an already negative value, thus making it positive and affecting the subsequent sum.
Simply removing that minus sign appears to be the solution.
I actually found ONCE the correct formula (without the MINUS sign), but ALL other sites had that sign, so I used the most used, which, instead is the incorrect one. I think that is due to a wrong Copy & Paste by those websites.
Anyway, thanks to @Barrabas15 for spotting an issue that helped me work it out.
The correct code of TSV is:
// TSV Time Segmented Volume indicator
//
// 13 = number of daily HALF HOURS
// 7 = ????
//
// Example Settings:
// Short Term Trading : TSV period between 9 and 12
// Intermediate Term Trading: TSV period between 18 and 25
// Long Term Trading : TSV period between 35 and 45
//
// --------------------------------------------------------------------------------------
// apparently wrong formula:
//
// TSV=(Sum( IIf( C > Ref(C,-1), V * ( C-Ref(C,-1) ), IIf( C < Ref(C,-1),-V * ( C-Ref(C,-1) ), 0 ) ) ,18));
// ↑
// --------------------------------------------------------------------------------------
// apparently CORRECT formula:
//
// TSV=(Sum( IIf( C > Ref(C,-1), V * ( C-Ref(C,-1) ), IIf( C < Ref(C,-1), V * ( C-Ref(C,-1) ), 0 ) ) ,18));
//
// (the difference is not using the "-" sign if front of the second reference to V, since it negates
// a negative value, thus making it positive, thus invalidating the following summation)
// --------------------------------------------------------------------------------------
//ONCE p1 = 13
//ONCE p2 = 7
//ONCE Mtype = 0
p1 = max(1,min(999,p1))
p2 = max(1,min(999,p2))
Mtype = max(0,min(6,Mtype))
MyVol = 0
IF close <> close[1] THEN
//IF close > close[1] THEN
MyVol = volume * (close - close[1]) //It's automatically negative when current CLOSE is lower than the previous candles's
//ELSIF close < close[1] THEN
//MyVol = volume * (close - close[1])
ENDIF
TSV = summation[p1](MyVol)
Signal = average[p2,Mtype](TSV)
RETURN TSV AS "Tsv",Signal AS "Signal",0 AS "0"