Antwort

Snipped für whatif erlauben max simultainios Trades pro Instrument

1 Antworten

mabi

Kunde, bbp_participant, Gemeinschaft, 261 Antworten.

Profil besuchen

vor 5 Jahren #238012

Heute gibt es die Möglichkeit, die maximale Anzahl von Trades pro Tag zu testen, aber ich bin mir nicht sicher, ob es so funktioniert, wie gesagt, denn selbst wenn Sie 1 Trade pro Tag einstellen, gibt es manchmal 3 Trades pro Tag. Beim Aufbau eines Portfolios ist die Korrelation immer ein Problem für dasselbe Instrument. Die Trades werden sehr nahe beieinander getätigt, aber mit unterschiedlichen Ausgängen, was QA denken lässt, dass sie nicht korreliert sind, aber sie sind in Wirklichkeit sehr korreliert, besonders in Verlustphasen. Es gibt Möglichkeiten zu vermeiden, dass mehr als 1 Handel mit demselben Instrument gleichzeitig getätigt wird, indem ein Kopierer verwendet wird, aber es gibt keine Was-wäre-wenn-Funktion in QA, um zu prüfen, wie die Leistung aussehen würde.

Ich hoffe, dass jemand mit dieser Funktion helfen kann, da ich denke, dass es eine Funktion sein kann, die den Drawdown von großen Portfolios stark senken kann. Ich habe dies auf einem Live-Konto für die Nutzung getestet und was ich sehen kann, ist, dass die EQ-Kurve wird viel glatter und Drawdown viel kleiner und Gewinn besser als auf dem Konto wo es nicht verwendet wird.

0

stearno

Kunde, bbp_participant, Gemeinschaft, 379 Antworten.

Profil besuchen

vor 2 Jahren #270964

Hier ist der Code zur Begrenzung der Anzahl der gleichzeitig geöffneten Geschäfte in der WENN-Analyse. Ich bin kein Programmierer, daher ist es nicht die effizienteste und nicht die beste Methode. Aber es ist ein Weg, der funktioniert, so dass ich es teilen, falls es jemand hilft:

 

Paket com.strategyquant.extend.WhatIf;

import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.Arrays;

import com.strategyquant.lib.comparators.OrderComparatorByOpenTime;
import com.strategyquant.lib.language.L;
import com.strategyquant.lib.results.SQOrder;
import com.strategyquant.lib.results.SQOrderList;
import com.strategyquant.lib.snippets.WhatIf;
import com.strategyquant.lib.time.SQTime;

public class TakeMaxTradesAtOneTime extends WhatIf
{

public TakeMaxTradesAtOneTime()
{
setName(L.t("Nehmen Sie die maximale Anzahl von Geschäften auf einmal"));

addIntParameter("Trades", L.t("Trades"), 1, 1, Integer.MAX_VALUE, 1);
setFormatedName(L.t("Nehmen Sie maximal {Trades} Trades auf einmal"));
}

public void filter(SQOrderList originalOrders) throws Exception
{
int trades = getIntParameterValue("Trades");
long[] Closedatetime = new long[1];
int FirstRun = 0;

Collections.sort(originalOrders, new OrderComparatorByOpenTime());

for(Iterator i = originalOrders.listIterator(); i.hasNext();)
{
SQOrder order = i.next();

if(Auftrag.isBalanceAuftrag())
weiter;
long closedatetime = order.CloseTime;

wenn (FirstRun == 0)
{
GeschlosseneZeit[0] = GeschlosseneZeit;
FirstRun = 1;
}
int count = Closedatetime.length;
wenn (Anzahl <= Gewerke)
{
Closedatetime = Arrays.copyOf(Closedatetime, Closedatetime.length + 1);
Closedatetime[Closedatetime.length - 1] = closedatetime;
}
sonst
{
Arrays.sort(GeschlosseneZeit);
long opendatetime = order.OpenTime;
for (int j = 0; j < Closedatetime.length; j++)
{
if (öffnungszeit > Schließzeit[j])
Closedatetime = removeElement(Closedatetime,j);
}
count = Closedatetime.length;
wenn (Anzahl <= Gewerke)
{
Closedatetime = Arrays.copyOf(Closedatetime, Closedatetime.length + 1);
Closedatetime[Closedatetime.length - 1] = closedatetime;
}
sonst
i.remove();
}
}
}

private long[] removeElement(long[] arr, int index)
{
long[] anotherArray = new long[arr.length - 1];
for (int l = 0, k = 0; l < arr.length; l++)
{
wenn (l == index)
weiter;
anotherArray[k] = arr[l];
k++;
}
return anotherArray;
}
}

0

Ansicht von 1 Antwort (von insgesamt 1)