Calculate profit per month

clc;clear;close all;

[fn,pt] = uigetfile({'*.htm','HTM'},'Select file');
if(fn==0)
    return;
end
ffn = fullfile(pt,fn);

if(exist('tmpPic','dir')~=7)
    mkdir('tmpPic');
end

DT = importdata(ffn);
L = length(DT);
line = 1;
dtTable = cell(1,10);
for m=1:L
    A = DT{m};
    B = strfind(A,'Type');    
    line = line+1;
    if(not(isempty(B)))
        c = ismember(A,'<');
        d = 2*ismember(A,'>');
        e = c+d;
        p = length(e);
        idx = false;
        for n=1:p
            if(e(n)==1)
                idx = true;
            end
            if(e(n)==2)
                idx = false;
            end
            if(idx)
                e(n) = 1;
            end
        end
        f = e==1;
        g = A;
        g(f) = [];
        h = regexp(g,'>','split');
        p = length(h);
        k = 1;
        for n=1:p
            if(not(isempty(h{n})))
                dtTable{1,k} = h{n};
                k = k+1;
            end
        end        
        break;
    end
end

rw = 2;
for m=line:L
    A = DT{m};
    B = strfind(A,'s/l');
    C = strfind(A,'t/p');
    D = strfind(A,'close');
    if(not(isempty(B)) || not(isempty(C)) || not(isempty(D)))
        c = ismember(A,'<');
        d = 2*ismember(A,'>');
        e = c+d;
        p = length(e);
        idx = false;
        for n=1:p
            if(e(n)==1)
                idx = true;
            end
            if(e(n)==2)
                idx = false;
            end
            if(idx)
                e(n) = 1;
            end
        end
        f = e==1;
        g = A;
        g(f) = [];
        h = regexp(g,'>','split');
        p = length(h);
        k = 1;
        for n=1:p
            if(not(isempty(h{n})))
                dtTable{rw,k} = h{n};
                k = k+1;
            end
        end 
        rw = rw+1;
    end
end


tmp = dtTable{2,2};
Y1 = str2double(tmp(1:4));
tmp = dtTable{end,2};
Y2 = str2double(tmp(1:4));
ny = 1;
QUS = cell(1);
for my=Y1:Y2
    QUS{ny} = num2str(my);
    
    L = size(dtTable,1);
    YR = zeros(1);
    for m=2:L
        A = dtTable{m,2};
        YR(m,1) = str2double(A(1:4));
    end

    id = YR==my;
    calDT = dtTable(id,:);

    BL = str2double(calDT{1,10})-str2double(calDT{1,9});
    L = size(calDT,1);
    MNT = zeros(1);
    for m=1:L
        tmp = calDT{m,2};
        MNT(m,1) = str2double(tmp(6:7));    
    end

    result = zeros(1,12);
    try
    for m=1:12
        a = MNT==m;
        b = calDT(a,:);
        c = str2double(b{end,10});
        PFd = c-BL;
        result(m) = 100*PFd/BL;
        BL = c;
    end
    catch
        
    end

    Mname = {'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'};
    figure('position',[200 200 1000 500],'menubar','none','numbertitle','off')
    set(gcf,'Color',[1 1 1]);
    bar(result,'g');
    set(gca,'XTickLabel',Mname)
    ylabel('Profit (%)')
    xlabel(QUS{ny})
    title('Monthly Gain(%)','fontsize',16)
    set(gca,'ylim',[min(result)-3 max(result)+5])
    for m=1:12
        v = result(m);
        y = 0.5;
        if(v<0)
            y = -0.5;
        end
        s = sprintf('%4.2f%%',v);
        text(m-0.5,v+y,s);
    end
    fwr = ['tmpPic\' QUS{ny} '.png'];
    frm = getframe(gcf);
    pic = frm.cdata;
    imwrite(pic,fwr);
    ny = ny+1;
    pause(0.1);
end

ความเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การแก้สมการ Differential ด้วย MATLAB

ว่าด้วยเรื่องของ ERROR

การหาค่าเฉลี่ยโดยไม่ต้องเก็บค่า