Realizar una gestión avanzada de la cartera mediante el control de las acciones
3 respuestas
stearno
hace 8 años #114345
Hoy he estado revisando el código de control de renta variable. Tuve una idea, tal vez podría usarlo para probar estrategias de gestión de dinero más avanzadas para las carteras.
Una estrategia que quiero probar es dejar de operar si se alcanzan pérdidas x% en un día y volver a operar al día siguiente.
(No tengo la formación formal para entender realmente las clases, objetos, etc.). Así que estoy un poco confundido por la página de la API y cómo encontrar lo que necesito)
Lo que necesito es la fecha (día). Sé que puedo obtener la hora de apertura de la operación en segundos, pero necesito poder dejar de operar hasta que sea un nuevo día. En NT7 diría algo como:
if(Hora[I-1].Día != Hora[i].Día)
{
TradingHasReachedDailyLimit = false; //restablecer el trigger que detiene la negociación hasta el día siguiente
TodaysLImitBalance = originalTrades[i].balanceOnOpen - ( originalTrades[i].balanceOnOpen * 0.05 )
}
Entonces yo usaría lo siguiente copiado de TrailingProfit:
"...trades[i].balanceOnOpen <= TodaysLImitBalance[i]..."
Agradezco la orientación y luego intentaré hacer el código y lo más probable es que regrese por más consejos. Gracias.
-Stearno
Tamas
hace 8 años #133556
Hola Stearno,
utilizar la clase SQTime.
Ej.
SQTime dt = new SQTime(trade.openTime);
dt.getDate();
o cualquier otro método
https://strategyquant.com/qa_api/com/strategyquant/lib/time/SQTime.html
Tom
Tamas
hace 8 años #133633
Hola Stearno,
tal vez esto podría funcionar???
@Override public double[] computeBalanceControlLine(Trade[] originalTrades) throws Exception { double[] controlLine = new double[originalTrades.length]; int porcentaje = getIntParameterValue("_PERCENT_"); for(int i=0; i<longitudTradesoriginal; 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) ); }
Saludos cordiales,
Tomas
stearno
hace 8 años #133635
Gracias, Tomas. Parece que funciona. Ahora que puedo ver el gráfico, tengo otros problemas que resolver. Volveré si me quedo atascado de nuevo.
-Stearno
Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)