Ranking based on turnover, was: Sortowanie i indeks

Dzień dobry,

Mam następujący problem. Mam opracowany system wskazań do portfela działający w trybie Rotational Trading.

Teraz chciałbym wprowadzić warunek, aby do scoringu opartego o inne wskaźniki AT uwzględniano 20 spółek o najwyższych obrotach na dany dzień. Mój pomysł był aby korzystając z funkcji: StaticVarGenerateRanks znaleźć każdego dnia tą 20 spółkę, obliczyć dla niej wartość obrotu i dostawić do indeksu (np.~obrot_min) na dany dzień funkcją AddtoComposite. Wówczas do Positionscoring byłby użyty dodatkowy warunek , że C*V >= obrot_min. Napisałem do tego kod jak poniżej, ale nie działa prawidłowo:

symlist = CategoryGetSymbols( categoryMarket, 1);
 
StaticVarRemove("SortFund*");
for( i = 0; ( sym_fund = StrExtract( symlist, i ) ) != ""; i++ )
{
SetForeign(sym_fund);
Value_f = V*C;
RestorePriceArrays();
StaticVarSet( "SortFund" + sym_fund, Value_f);
}
StaticVarGenerateRanks( "top", "SortFund", 20, 1224 );
sdt = SelectedValue( DateTime() ); 
Sorto = StaticVarGetRankedSymbols( "top", "SortFund", sdt);
Nazwa = StrExtract(sorto,19);
 
cena = Foreign(Nazwa,"Close");
wolumen = Foreign(Nazwa,"Volume");
 
obrot_min = cena * wolumen / 1000;
 
AddToComposite(obrot_min,"~obrot_min","Close",atcFlagResetValues|atcFlagEnableInExplore);

Prośba o jak zwykle nieocenioną pomoc z Państwa strony,

Marcin Brendota

@Marcin - welcome to the forum. Please note that the forum is english only.

Since this post is in Polish here is short translation of what the poster asks for:

I would like to add extra condition to ranking so only top 20 stocks with highest turnover are considered for trading. The that I wrote does not work. Please help.

1 Like

Normally (to rank only based on turnover), you would just need to write single line

PositionScore = Volume * Close; // stocks with highest turnover are preferred

This automatically would rank and select top-turnover symbols.

But if you want to combine different rankings you can either create weighted score or use two pass ranking.

For two pass ranking the code here: How to code for double ranking process?
already implements what you are after.

2 Likes