Ciao,
ho provato a backtestare delle strangle su indici azionari aperte sistematicamente ogni terzo venerdì del mese (in corrispondenza con la scadenza delle opzioni mensili). Nello script che condivido imposto che la data di apertura sia uguale alla data dell'ultima scadenza disponibile (variabile Zen=0), tuttavia il system launcher non produce risultati nei trades. Se invece imposto che la data di apertura è il giorno prima della scadenza (variabile Zen=1), ottengo la lista dei trades dal system launcher. Aggiornatemi per favore se si tratta di un bug o come impostare lo script.
Grazie
//Input
double DeltaCall = 0.2, DeltaPut = 0.2, SL1=3, SL2=3, TP1=0.8;
//input int Mat=35;
//Var
int Bin, GroupN = 0, Zen = 0;
double StrikeCall, StrikePut, PCall, PPut, Ptot;
OLDate MyMaturity, MyMaturity1;
MyMaturity = GetMaturity(MinDays, 28);
MyMaturity1 = GetMaturity(MinDays,0);
Zen = MyMaturity1 - Date;
//A scadenza i trade vengono chiusi in automatico, quindi per questo sistema non devo preoccuparmi dell'uscita. Ma appena torno Flat (gruppo precedente giunto a scadenza), devo cominciare i controlli per la struttura successiva.
if Position = Flat or Position <> Flat then begin
//Garantisce di non fare trade più lunghi di 30 giorni
if Zen <= 1 then begin
//Garantisce di avere sempre un gruppo nuovo, parte da 0 e si incrementa di uno ogni volta che apro una nuova struttura
GroupN = GroupN + 1;
//Elaboro gli strike con Delta = DeltaCall e DeltaPut
StrikeCall = GetStrike(MyMaturity, Call, Delta, DeltaCall);
StrikePut = GetStrike(MyMaturity, Put, Delta, DeltaPut);
//Rileva il premio dell'opzione Put da vendere
PCall = GetChainInfoDouble(MyMaturity, StrikeCall , Call, Premium);
PPut = GetChainInfoDouble(MyMaturity, StrikePut , Put, Premium);
Ptot = PCall + PPut;
//Eseguo la vendita e sfogo il Ticket restituito in una variabile cestino
//if ((PCall+PPut)*BigPointValue) >= 250 then begin
Bin = Sell(Call, StrikeCall, MyMaturity, 1, GroupN, "Call");
Bin = Sell(Put, StrikePut, MyMaturity, 1, GroupN, "Put");
//end;
end;
end;
SetStop(SL,Label,"Call",-SL1*PCall*BigPointValue);
SetStop(SL,Label,"Put",-SL2*PPut*BigPointValue);
SetStop(TP,Group, GroupN,TP1*Ptot*BigPointValue)