Fazer a gestão avançada do dinheiro do portfólio por meio do controle de ações
3 respostas
stearno
8 anos atrás #114345
Hoje, eu estava examinando o código de controle de ações. Tive uma ideia: talvez eu pudesse usá-lo para testar estratégias mais avançadas de gerenciamento de dinheiro para portfólios.
Uma estratégia que quero testar é interromper a negociação se atingir a perda de x% em um dia e voltar a negociar no dia seguinte.
(Não tenho treinamento formal para realmente entender classes, objetos etc., por isso estou um pouco confuso com a página da API e como encontrar o que preciso). Portanto, estou um pouco confuso com a página da API e como encontrar o que preciso)
O que eu preciso é da data (dia). Sei que posso obter o tempo de abertura da negociação em segundos, mas preciso ser capaz de parar a negociação até que seja um novo dia. No NT7, eu diria algo como:
se(Time[I-1].Day != Time[i].Day)
{
TradingHasReachedDailyLimit = false; //redefine o acionador que interrompe a negociação até o dia seguinte
TodaysLImitBalance = originalTrades[i].balanceOnOpen - ( originalTrades[i].balanceOnOpen * 0,05 )
}
Em seguida, eu usaria o seguinte trecho copiado de TrailingProfit:
"...trades[i].balanceOnOpen <= TodaysLImitBalance[i]..."
Agradeço a orientação e, em seguida, tentarei criar o código e, provavelmente, voltarei para pedir mais orientações. Obrigado.
-Stearno
Tamas
8 anos atrás #133556
Olá, Stearno,
usar a classe SQTime.
Por exemplo.
SQTime dt = new SQTime(trade.openTime);
dt.getDate();
ou qualquer outro método
https://strategyquant.com/qa_api/com/strategyquant/lib/time/SQTime.html
Tom
Tamas
8 anos atrás #133633
Olá, Stearno,
Talvez isso possa funcionar???
@Override public double[] computeBalanceControlLine(Trade[] originalTrades) throws Exception { double[] controlLine = new double[originalTrades.length]; int percent = getIntParameterValue("_PERCENT_"); for(int i=0; i<originalTrades.length; i++) { if(i==0 || !SQTime.toDateString(originalTrades[i].openTime).equals(SQTime.toDateString(originalTrades[i-1].openTime))) { controlLine[i] = computdailyriskamout(originalTrades, i, percent); } else { controlLine[i] = controlLine[i-1]; } } return controlLine; } private double computdailyriskamout(Trade[] trades, int i, int percent) { return trades[i].balanceOnOpen - (trades[i].balanceOnOpen * (percent/100) ); }
Com os melhores cumprimentos,
Tomas
stearno
8 anos atrás #133635
Obrigado, Tomas. Parece que está funcionando. Agora que consigo ver o gráfico, tenho outros problemas para resolver. Voltarei se ficar preso novamente.
-Stearno
Visualizando 3 respostas - 1 até 3 (de um total de 3)