JSParticipant
Senior
Weil in seinem Beispiel IG verwendet wird und nicht IB…
OK verstehe!! Aber ehrlich verstehe wer will ??!!
Ich habe noch eine andere Idee wie wir das machen können.
Du hast mir doch geschrieben, dass ich Tradeindex und dann die Zahl dahinter verweden soll. Das funktioniert leider nicht genau, weil die Anzahl der Balken gezählt werden, wenn aber Feiertage usw. dazwischen sind, dann steigt das System nicht genau nach 100 Tagen aus. Kann man den Code nicht ändern das das System genau nach 100 Tagen raus geht ohne dieses Tradeindex-Barindex Das kann auch auf Stundenbasis geschehen, die Ausstiegszeit ist eher unrelevant, kann irgend eine sein
Hier dein Code
DEFPARAM CumulateOrders=True
$moDate[1]=20250519
$moDate[2]=20250521
$moDate[3]=20250523
For i=1 to 3
If $moDate[i]=Date Then
EntryDate=$moDate[i]
Break
EndIf
Next
IF Date=EntryDate and Time=210000 then
Buy 1 Contract at Market
ENDIF
If LongOnMarket and BarIndex-TradeIndex(3)=2302 then
Sell 1 Contract at Market
ENDIF
Es ist aus mehreren Gründen nicht möglich, exakt 100 Tage zu berechnen:
- Datumsberechnungen sind mathematisch schwierig;
.
- Der 100. Tag nach Einstieg lässt sich zwar mit komplizierten Berechnungen ermitteln, aber es gibt keine Möglichkeit vorherzusagen, ob der Markt an diesem Tag geöffnet sein wird. Falls er geschlossen ist, wird die Position am nächsten Tag geschlossen, der ein, zwei oder mehr Tage später liegen kann.
Ok, das verstehe ich.
Leider können ja auf Tagesbasis keine Trades am Montag geöffnet werden…
Ist es möglich die Einstiegsbedingungen auf Stundenbasis zu ändern, sodass der Trade um 21 Uhr auf einem Montag eröffnet wird und die Ausstiegsbedingungen auf Tagesbasis zu lassen, wie in Ivans Code, oder dem Datum ein oder zu geben, sodass das der Trade, wenn das Datum ein Montag ist, der Trade auf einem Dienstag eröffnet??
DEFPARAM CumulateOrders = TRUE
$moDate[0] = 20250519
$moDate[1] = 20250521
$moDate[2] = 20250523
FOR i = 0 TO 2 DO
IF Date = $moDate[i] THEN
BUY 1 CONTRACT AT MARKET
$moDateidx[i] = BarIndex + 1
ENDIF
NEXT
IF LongOnMarket THEN
FOR j = 0 TO 2 DO
IF $moDateidx[j] > 0 THEN
IF BarIndex - $moDateidx[j] = 100 THEN
SELL 1 CONTRACT AT MARKET
$moDateidx[j] = 0
ENDIF
ENDIF
NEXT
ENDIF
Ivans Code funktioniert bereits korrekt, solange die eingegebenen Daten Montage sind (die Eingabe erfolgt um 21:00 Uhr am eingegebenen Datum).
Bezüglich des Abschlusses sagten Sie, Ivans Methode sei in Ordnung.
Ich verstehe nicht genau, was Sie am Dienstag tun möchten.
Hallo Roberto
am dienstag möchte ich nichts machen. Ich habe nur nicht verstanden, warum bei mir im Chart an Montagen wie auch am 19.05.2025 kein Trade eröffnet wird.
In anderen Systemen funktioniert es.
DEFPARAM CumulateOrders = TRUE
$moDate[0] = 20250519
$moDate[1] = 20250521
$moDate[2] = 20250523
FOR i = 0 TO 2 DO
IF Date = $moDate[i] THEN
BUY 1 CONTRACT AT MARKET
$moDateidx[i] = BarIndex + 1
ENDIF
NEXT
IF LongOnMarket THEN
FOR j = 0 TO 2 DO
IF $moDateidx[j] > 0 THEN
IF BarIndex - $moDateidx[j] = 100 THEN
SELL 1 CONTRACT AT MARKET
$moDateidx[j] = 0
ENDIF
ENDIF
NEXT
ENDIF
Ich glaube, ich verstehe, was Sie meinen: Jede Position muss nach 100 Bars geschlossen werden.
Dazu müssen Sie den ersten Bar jedes Trades in einem Array speichern, dessen Index durch abs(CountOfPosition) gegeben ist, also 1, 2, 3 usw. (in Ihrem Fall nur 3).
Ich habe außerdem DATE in OPENDATE geändert.
DEFPARAM CumulateOrders = TRUE
//
$moDate[0] = 20250519
$moDate[1] = 20250521
$moDate[2] = 20250523
FOR i = 0 TO 2 DO
IF OpenDate = $moDate[i] THEN
BUY 1 CONTRACT AT MARKET
$moDateidx[abs(CountOfPosition)] = BarIndex + 1
ENDIF
NEXT
//
IF LongOnMarket THEN
//FOR j = 0 TO 2 DO
//IF $moDateidx[j] > 0 THEN
//IF BarIndex - $moDateidx[j] = 100 THEN
//SELL 1 CONTRACT AT MARKET
//$moDateidx[j] = 0
//ENDIF
//ENDIF
//NEXT
FOR j = 0 TO abs(CountOfPosition) DO
IF $moDateidx[j] > 0 THEN
IF BarIndex - $moDateidx[j] = 100 THEN
SELL 1 CONTRACT AT MARKET
$moDateidx[j] = 0
ENDIF
ENDIF
NEXT
ENDIF
Ja richtig, vielen Dank!!!