Eu tenho uma mesa t
como
q)trades: ([]
signalTime: 2024.01.05 2024.01.12 2024.01.19 2024.01.25 2024.02.02 2024.02.09 2024.02.16 2024.02.23 2024.03.01 2024.03.07;
exitTime: 2024.01.25 2024.02.01 2024.02.08 2024.02.15 2024.02.22 2024.02.29 2024.03.07 2024.03.14 2024.03.21 2024.03.28
);
signalTime exitTime
----------------------
2024.01.05 2024.01.25
2024.01.12 2024.02.01
2024.01.19 2024.02.08
2024.01.25 2024.02.15
2024.02.02 2024.02.22
2024.02.09 2024.02.29
2024.02.16 2024.03.07
2024.02.23 2024.03.14
2024.03.01 2024.03.21
2024.03.07 2024.03.28
Gostaria de manter apenas as negociações cujas datas intermediárias (entre signalTime
e exitTime
) não se sobreponham às de nenhuma outra negociação (linhas). Como alternativa, deve haver apenas uma negociação durante qualquer data. A saída esperada deve ser
signalTime exitTime
----------------------
2024.01.05 2024.01.25
2024.02.02 2024.02.22
2024.02.23 2024.03.14
Embora eu seja capaz de conceber uma solução usando um do
loop, como faço isso de forma mais eficiente e idiomática q
?
Aqui está minha tentativa fraca de solução usando um do
loop, embora não esteja totalmente correta.
removeOverlappingTrades:{[t]
n: count t;
accept: n#0b;
accept[0]: 1b;
lastExitTime: t[`exitTime][0];
do[n-1; {[t;lastExitTime;accept;x]
i: x+1; // Current index
if[t[`signalTime][i] >= lastExitTime;
accept[i]: 1b;
lastExitTime: t[`exitTime][i];
];
}[t;lastExitTime;accept] each til n-1];
t where accept
};
1 respostas