2010-09-23 25 views

Répondre

1

Voici une fonction simple basée sur boxplot comme suggéré par zellus:

function hh = equivolumechart(x,w) 
% EQUIVOLUMECHART - simple equivolume chart based on barplot 
% x - 2xn high/low values, w - volume (box width) 

h = boxplot(x,'width',w); 
% make median unvisible 
for ii=1:size(h,2) 
    set(h(6,ii),'visible','off') 
end 
if nargout>0, hh = h; end 

end 

Exemple:

a = randi(10,2,10); 
w = randi(10,1,10)/10; 
equivolumechart(a,w) 

La fonction peut être réécrite en utilisant des correctifs, mais celui-ci fonctionne assez bien.

Vous pouvez probablement utiliser la fonction CANDLE de la largeur de paramètre de la boîte à outils financière pour patcher des objets, mais je n'ai pas la boîte à outils.

0

boxplot pourrait être un point de départ pour créer votre propre equivplot.

0
function [ ] = equivolumechart(highs, lows, volumes) 
    % calculate pos of each box 
    pos = zeros(length(volumes), 1);  
    for i=2:length(volumes) 
     pos(i) = pos(i-1) + (volumes(i-1) + volumes(i))/2; 
    end 

    h = boxplot([highs'; lows'], 'width', volumes', 'positions', pos); 
end 

La clé est de trouver la position de chaque boîte. Puisque les «positions» définissent la ligne centrale verticale des boîtes, la distance entre deux boîtes devrait être (volumes (i-1) + volumes (i))/2