Fortgeschrittene Geldverwaltung durch Aktienkontrolle
3 Antworten
stearno
vor 8 Jahren #114345
Ich habe mir heute den Code für die Aktiensteuerung angesehen. Mir kam der Gedanke, dass ich ihn vielleicht verwenden könnte, um fortgeschrittenere Geldverwaltungsstrategien für Portfolios zu testen.
Eine Strategie, die ich testen möchte, ist, den Handel zu beenden, wenn x% Verlust an einem Tag erreicht wird, und dann am nächsten Tag wieder zu handeln.
(Ich habe nicht die formale Ausbildung, um Klassen, Objekte usw. wirklich zu verstehen. Daher bin ich ein wenig verwirrt von der API-Seite und wie ich finde, was ich brauche)
Was ich brauche, ist das Datum (Tag). Ich weiß, dass ich die Eröffnungszeit des Handels in Sekunden erhalten kann, aber ich muss in der Lage sein, den Handel zu stoppen, bis es ein neuer Tag ist. In NT7 würde ich sagen, etwas wie:
if(Zeit[I-1].Tag != Zeit[i].Tag)
{
TradingHasReachedDailyLimit = false; //setzt den Trigger zurück, der den Handel bis zum nächsten Tag stoppt
TodaysLImitBalance = originalTrades[i].balanceOnOpen - ( originalTrades[i].balanceOnOpen * 0.05 )
}
Dann würde ich die untenstehende Kopie von TrailingProfit verwenden:
"...trades[i].balanceOnOpen <= TodaysLImitBalance[i]..."
Ich danke für die Anleitung und werde dann versuchen, den Code zu erstellen und wahrscheinlich wiederkommen, um weitere Ratschläge zu erhalten. Danke.
-Stearno
Tamas
vor 8 Jahren #133556
Hallo Stearno,
die Klasse SQTime verwenden.
z. B.
SQTime dt = new SQTime(trade.openTime);
dt.getDate();
oder eine andere Methode
https://strategyquant.com/qa_api/com/strategyquant/lib/time/SQTime.html
Tom
Tamas
vor 8 Jahren #133633
Hallo Stearno,
Vielleicht könnte das funktionieren?
@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) ); }
Mit freundlichen Grüßen,
Tomas
stearno
vor 8 Jahren #133635
Danke, Tomas. Es scheint zu funktionieren. Jetzt, wo ich das Diagramm sehen kann, habe ich andere Probleme zu lösen. Ich werde wiederkommen, wenn ich wieder nicht weiterkomme.
-Stearno
Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)