<div>abaixo, nao testado, deve estar bem proximo do q vc precisa. b</div><div><br></div>loop 1:<div><br></div><div>y[,4] = ifelse(y[,2] == 10, 'NC', 'C')</div><div><br></div><div>loop 2:</div><div><br></div>

<div>n = nrow(y)</div><div>y[-1, 4] = ifelse(diff(y[,3]) == 0 & y[-n, 4] == 'NC', 'NC', y[-1, 4])<br><br></div><div>loop 3:</div><div><br></div><div>dy = diff(y[,3])</div><div>y[-1, 4] = ifelse(y[-1, 4] == 'C' & dy > 0, 'DOWNTICK', y[-1, 4])</div>

<div>y[-1, 4] = ifelse(y[-1, 4] == 'C' & dy < 0, 'UPTICK', y[-1, 4])</div><div>y[-1, 4] = ifelse(y[-1, 4] == 'C' & dy == 0 & y[-n, 4] %in% c('UPTICK', 'ZERO.UPTICK'), 'ZERO.UPTICK', y[-1, 4]) </div>

<div><meta charset="utf-8"><div>y[-1, 4] = ifelse(y[-1, 4] == 'C' & dy == 0 & y[-n, 4] %in% c('DOWNTICK', 'ZERO.DOWNTICK'), 'ZERO.DOWNTICK', y[-1, 4]) </div><div><br></div><div><br>

</div><div class="gmail_quote">2011/6/20 Luciano Ramos Gonçalves <span dir="ltr"><<a href="mailto:lrg.financas@gmail.com">lrg.financas@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<u></u>

  

    
  
  <div text="#000000" bgcolor="#ffffff">
    <tt><span style="font-size:10pt;line-height:115%">Colaboradores
        do grupo, realizei um teste de financas em R, conhecido como
        TICKTEST, porém meu código ficou muito lento. Talvez alguém
        possa ajudar a torná-lo mais ágil. <br>
        <br>
        Grato,<br>
        Luciano<br>
        <br>
        Resumidamente:<br>
        1 - Prentende-se classificar mudanças de preço em uma ação.<br>
        2 - O primeiro negócio do dia não é classificado. Os negócios
        subsequentes em que haja estabilidade no preço tb não são
        classificados.<br>
        3 - Classifica-se as restantes conforme o movimento do preço. Se
        sobe, UPTICK. Se desce, DOWNTICK. Se é estável e a última
        variação foi positiva, ZERO.UPTICK. </span></tt><tt><span style="font-size:10pt;line-height:115%">Se é estável e a
        última variação foi positiva, ZERO.DOWNTICK.</span></tt><br>
    <tt><span style="font-size:10pt;line-height:115%"><br>
        Um exemplo dos dados:<br>
        <br>
      </span></tt>
    <table width="357" border="0" cellpadding="0" cellspacing="0" height="232">
      <colgroup><col style="width:59pt" width="78" span="2"> <col style="width:57pt" width="76"> <col style="width:94pt" width="125"> </colgroup><tbody>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt;width:59pt" width="78" align="center" height="20">Data</td>
          <td style="width:59pt" width="78" align="center">Operação</td>
          <td style="width:57pt" width="76" align="center">Preço</td>
          <td style="width:94pt" width="125" align="center">Classificação</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/1/2011</td>
          <td align="center">10</td>
          <td align="center">$10.00</td>
          <td align="center">NC</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/1/2011</td>
          <td align="center">20</td>
          <td align="center">$9.90</td>
          <td align="center">DOWNTICK</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/1/2011</td>
          <td align="center">30</td>
          <td align="center">$9.90</td>
          <td align="center">ZERO.DOWNTICK</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/1/2011</td>
          <td align="center">40</td>
          <td align="center">$10.10</td>
          <td align="center">UPTICK</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/1/2011</td>
          <td align="center">50</td>
          <td align="center">$10.20</td>
          <td align="center">UPTICK</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/2/2011</td>
          <td align="center">10</td>
          <td align="center">$9.80</td>
          <td align="center">NC</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/2/2011</td>
          <td align="center">20</td>
          <td align="center">$9.80</td>
          <td align="center">NC</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/2/2011</td>
          <td align="center">30</td>
          <td align="center">$9.90</td>
          <td align="center">UPTICK</td>
        </tr>
        <tr style="min-height:15pt" height="20">
          <td style="min-height:15pt" align="center" height="20">1/2/2011</td>
          <td align="center">30</td>
          <td align="center">$9.90</td>
          <td align="center">ZERO.UPTICK</td>
        </tr>
      </tbody>
    </table>
    <tt><span style="font-size:10pt;line-height:115%"><br>
        <u><b>O CÓDIGO EM SI:</b></u><br>
        <b><big>#</big></b> Abre o arquivo de dados, cria um novo objeto
        "y" com uma coluna vazia.<br>
        x <-
        read.table("dados.txt",sep=";",header=F,skip=1)</span></tt><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><br>
      <tt><span>y
          <- cbind(x,(rep(NA,nrow(x))))</span></tt><br>
      <tt><span></span></tt><tt><span><br>
          <big><b># 1º Loop:</b></big> Se a operação foi nº 10 não
          classifica, o resto classifica.<br>
        </span></tt>
      <tt><span></span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span>z
          <- 1:nrow(x)</span></tt></span><br>
    <span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span>for
          (t in z)</span></tt><br>
      <tt><span>{</span></tt><br>
      <tt><span>  
           if (y[t,2]==10)</span></tt><br>
      <tt><span>  
               y[t,4]<-"NC"</span></tt><br>
      <tt><span>  
           else y[t,4] <-"C"</span></tt><br>
      <tt><span>}<br>
          <br>
          <big><b># 2º Loop:</b></big> Se a operação anterior não foi
          classificada e o preço não mudou na atual, desclassifica esta
          também.<br>
        </span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span>w
          <- 1:(nrow(x)-1)</span></tt></span><br>
    <span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span></span></tt>
      <tt><span>for
          (i in w)</span></tt><br>
      <tt><span>{</span></tt><br>
      <tt><span>  
           if (y[i,4]=="NC" & y[i,3]==y[i+1,3])</span></tt><br>
      <tt><span>  
               y[i+1,4]<-"NC"</span></tt><br>
      <tt><span>}<br>
          <big><b># 3º Loop:</b></big> divide as operações classificadas
          em quatro classes:<br>
        </span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span>for
(i
          in w)</span></tt><br>
      <tt><span>{   
        </span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span><br>
        </span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span><b><big>#</big></b></span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span> Se o preço diminuiu,
          DOWNTICK;</span></tt></span><br>
    <span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span></span></tt>
      <tt><span>  
           if (y[i+1,4]=="C" & y[i,3]>y[i+1,3])</span></tt><br>
      <tt><span>  
               y[i+1,4]<-"DOWNTICK"<br>
        </span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span><b><big>#</big></b></span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span> Se o preço aumentou,
          UPTICK;</span></tt></span><br>
    <span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span></span></tt>
      <tt><span>  
           if (y[i+1,4]=="C" & y[i,3]<y[i+1,3])</span></tt><br>
      <tt><span>  
               y[i+1,4]<-"UPTICK"<br>
        </span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span><b><big>#</big></b>
          Se o preço permaneceu constante, mas a ultima variação foi
          positiva, ZERO.UPTICK;</span></tt></span><br>
    <span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span></span></tt>
      <tt><span>  
           if (y[i+1,4]=="C" & y[i,3]==y[i+1,3] & </span></tt><br>
      <tt><span>  
                   (y[i,4]=="UPTICK" | y[i,4]=="ZERO.UPTICK"))</span></tt><br>
      <tt><span>  
               y[i+1,4]<-"ZERO.UPTICK"<br>
        </span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span></span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span></span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span><b><big>#</big></b></span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span> </span></tt></span><span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span>Se o preço permaneceu
          constante, mas a ultima variação foi negativa, ZERO.DOWNTICK;</span></tt></span><br>
    <span style="font-size:10pt;line-height:115%;font-family:"Courier New""><tt><span></span></tt>
      <tt><span>  
           if (y[i+1,4]=="C" & y[i,3]==y[i+1,3] & </span></tt><br>
      <tt><span>  
                   (y[i,4]=="DOWNTICK" |
          y[i,4]=="ZERO.DOWNTICK"))</span></tt><br>
      <tt><span>  
               y[i+1,4]<-"ZERO.DOWNTICK"</span></tt><br>
      <tt><span>}</span></tt></span>
  </div>

<br>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div><br><br clear="all"><br>-- <br>Successful people ask better questions, and as a result, they get better answers. (Tony Robbins)<br>


</div>