Risposta

Gestione avanzata del portafoglio attraverso il controllo delle azioni

3 risposte

stearno

Cliente, bbp_partecipante, comunità, 379 risposte.

Visita il profilo

8 anni fa #114345

Oggi stavo esaminando il codice di controllo delle azioni. Ho pensato che forse potrei usarlo per testare strategie di gestione del denaro più avanzate per i portafogli.

 

Una strategia che voglio testare è quella di interrompere il trading se si raggiunge una perdita di x% in un giorno e poi riprendere il trading il giorno successivo. 

 

(Non ho una formazione formale che mi permetta di capire veramente le classi, gli oggetti, ecc. Quindi sono un po' confuso dalla pagina dell'API e da come trovare ciò di cui ho bisogno).

 

Quello che mi serve è la data (giorno). So che posso ottenere l'ora di apertura dell'operazione in secondi, ma devo essere in grado di interrompere il trading finché non è un nuovo giorno. In NT7 direi qualcosa come:

 

if(Ora[I-1].Giorno:= Ora[i].Giorno)

{

    TradingHasReachedDailyLimit = false; //ripristina il trigger che blocca il trading fino al giorno successivo

    TodaysLImitBalance = originalTrades[i].balanceOnOpen - ( originalTrades[i].balanceOnOpen * 0,05 )

}  

 

Quindi utilizzerei la seguente procedura copiata da TrailingProfit:

 

"...trades[i].balanceOnOpen <= TodaysLImitBalance[i]..."

 

Vi ringrazio per le indicazioni e poi cercherò di realizzare il codice e molto probabilmente tornerò a chiedere altri consigli. Grazie.

 

-Stearno

0

Tamas

Cliente, bbp_partecipante, comunità, sq-ultimate, 73 risposte.

Visita il profilo

8 anni fa #133556

Ciao Stearno,

utilizzare la classe SQTime.

es.

SQTime dt = new SQTime(trade.openTime);

dt.getDate();

o qualsiasi altro metodo

https://strategyquant.com/qa_api/com/strategyquant/lib/time/SQTime.html

Tom

0

Tamas

Cliente, bbp_partecipante, comunità, sq-ultimate, 73 risposte.

Visita il profilo

8 anni fa #133633

Ciao Stearno,

 

forse questo potrebbe funzionare?

@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) );
}

Cordiali saluti,

Tomas

0

stearno

Cliente, bbp_partecipante, comunità, 379 risposte.

Visita il profilo

8 anni fa #133635

Grazie, Tomas. Sembra funzionare. Ora che posso vedere il grafico, ho altri problemi da risolvere. Tornerò se mi dovessi bloccare di nuovo.

 

-Stearno

0

Stai visualizzando 3 risposte - da 1 a 3 (di 3 totali)