SOLO LETTURA

Il forum è ora un archivio di sola lettura.

Per segnalazioni di bug e domande sulla piattaforma → [email protected]

La nostra comunità vive su Discord e YouTube: unisciti a noi!

UNISCITI A NOI SU Discordia YouTube

La colonna Databank mostra sempre il valore zero

1 risposte

Julian Gonzalez

Abbonato, bbp_partecipante, sq-ultimate, cliente, comunità, 8 risposte.

Visita il profilo

10 mesi fa #291831

Ho creato una colonna Databank e un codice modello viene generato automaticamente calcolando netProfit. Lo compilo e riavvio SQX UI. Quando apro il DataBank dal Builder e aggiungo la colonna, mostra sempre il valore zero. Lo stesso accade se scarico gli snippet dalla comunità.

Se ne creo uno nuovo con solo getNumericValue() e getValue() funziona perfettamente. Sembra quindi che la funzione compute() non faccia nulla, perché?

Ho già provato con le versioni 136, 142 e 143. Aiuto!

Questo è il modello:

pacchetto SQ.Columns.Databanks;
importare com.strategyquant.lib.*;
importare com.strategyquant.datalib.*;
importare com.strategyquant.tradinglib.*;
public class Prueba2 extends DatabankColumn {
  public Prueba2() {
    super(“Prueba2”,
          DatabankColumn.Decimal2, // formato di visualizzazione del valore
          ValueTypes.Maximize, // se il valore deve essere massimizzato / minimizzato / approssimato a un valore
          0, // valore target se è stata scelta l'approssimazione
          0, // media minima di questo valore
          100); // media massima di questo valore
    setWidth(80); // larghezza predefinita della colonna in pixel
    setTooltip(“La tua descrizione degli strumenti qui”);
    /* Se questa nuova colonna dipende da altre colonne che devono essere calcolate prima, inserirle qui.
       Assicurarsi di non creare dipendenze circolari, come ad esempio A dipende da B e B dipende da A.
       Le colonne (=valori delle statistiche) sono identificate dal nome della classe)
    */
    //setDependencies(“DrawdownPct”, “NumberOfTrades”);
  }
  //————————————————————————
  /**
   * Questo metodo deve restituire il valore calcolato di questa nuova colonna. In genere, si dovrebbe calcolarlo dall'elenco degli ordini
   * o da alcuni valori statistici già calcolati (altre colonne della banca dati).
   */
  @Override
  public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception {
    /* un esempio: ecco come si possono ottenere altri valori da cui dipende questo nuovo valore */
    //int numberOfTrades = stats.getInt(“NumberOfTrades”);
    //doppio drawdownPct = stats.getDouble(“DrawdownPct”);
    /* un esempio: calcolare il profitto netto dall'elenco delle operazioni */
    doppio netProfit = 0;
    for(int i = 0; i<ordersList.size(); i++) {
      Ordine = ordersList.get(i);
      if(order.isBalanceOrder()) {
        // non contare gli ordini di saldo (depositi, prelievi) in
        continuare;
      }
      /* il metodo getPLByStatsType restituisce automaticamente il PL a seconda del tipo di statistiche date - in denaro, % o pip */
      double PL = getPLByStatsType(ordine, combinazione);
      netProfit += PL;
    }
    /* arrotonda e restituisce il valore. Verrà salvato nelle statistiche sotto la chiave “Prueba2” */
    restituire round2(netProfit);
  }
}

0

Julian Gonzalez

Abbonato, bbp_partecipante, sq-ultimate, cliente, comunità, 8 risposte.

Visita il profilo

10 mesi fa #291832

Risolto!

Sembra che la funzione compute() si aggiorni solo quando si forza la strategia a essere testata nuovamente (ritestandola o generando una nuova strategia). Invece, le funzioni getNumericValue() e getValue() non ne hanno bisogno.

🙂

1

Stai visualizzando 1 risposte (di 1 totali)