1

取引データを使用して、特定のボリュームが満たされる価格変動の平均、メディア、およびパーセンタイル範囲を見つけようとしています。以下にコードを添付します。問題は、コードを ~80k レコードで実行すると wsfull エラーが発生することです。4g Linux ボックスを使用しています。現時点では、最大 30,000 レコードに対してしか実行できず、それでも q は RAM の 70% 以上を使用しています。よりメモリフレンドリーにする方法はありますか?

rangeForVol : {[symIn; vol; dt] 
data: select from table where sym=symIn, date=dt;    
data: update cumVol: sums quantity, cVol: sums quantity from data;
data: update cumVolTgt: cumVol + vol from data;
data: update pxLst: price[where each ((cumVol>=/:cVol) and (cumVol<=/:cumVolTgt))=1] from data;
.Q.gc[];
data: update minPx: min each pxLst, maxPx: max each pxLst from data;
data: update range: maxPx - minPx from data;
data
};
select count i by floor range%0.5 from rangeForVol[`ABC; 2500; 2012.06.04]
4

1 に答える 1