Invia le variabili al file di log di StrategyQuant per il debug delle strategie in AlgoWizard. Abilita la modalità debug tramite il parametro DebugMode per monitorare i valori delle variabili durante il backtesting e l'ottimizzazione della strategia.
Se creiamo un modello o eseguiamo una strategia in AlgoWizard, a volte abbiamo bisogno di inviare la variabile a un log per poterla sottoporre a debug.
Abbiamo questa funzione fdebug nel CodeEditor, avevamo bisogno di una funzione simile in AlgoWizard.
Ecco una funzione fDebug per inviare la variabile a un file di log.
1/ Per installarla, dobbiamo importare questa SQExtension V2 nel CodeEditor e riavviare SQX.
2/ Per eseguirla in AlgoWizard, basta fare clic su “Add rule”, selezionare If Then / OnBarUpdate (vedere Capture4a)
Nelle condizioni if, selezionare la condizione in cui la funzione scriverà la variabile nel log
vedere in allegato “Capture4a” e “Capture2a”
In Then Action, assegnare una variabile con la funzione Debug. Possiamo selezionare questa funzione mentre modifichiamo una nuova condizione
vedere in allegato “Capture3”
Questa funzione utilizza la funzione fdebug in Java per scriverla nel log di StrategyQuant in questa directory: “\StrategyQuantX135\user\log\StrategyQuant”
Un esempio di output è
19:51:54.087 [Blocking computeThread common #26 – Builder_2-Generation 3.0.61] INFO c.s.tradinglib.debug.Debugger – fDebug – Var : 0
19:51:54.087 [Blocking computeThread common #17 – Builder_2-Generation 3.0.43] INFO c.s.tradinglib.debug.Debugger – fDebug – Var : 0
Ho allegato un esempio di strategia con una regola di debug, è necessario sostituire variable6 con qualsiasi variabile che desideri monitorare. (Variable6 è solo una variabile vuota per mostrare questo esempio)
È possibile attivare la modalità Debug impostando il parametro “DebugMode” su 1. StrategyQuant rallenterà per scrivere il log sul disco rigido.
È possibile disattivare la modalità Debug impostando il parametro “DebugMode” su 0 per consentire al computer di funzionare a regime.
(In AlgoWizard vedere “Capture5” e nel retester vedere “Capture6-7-8-9” in allegato per modificare il parametro di una strategia)
Spero che questo sia d'aiuto alla community di StrategyQuant.
package SQ.Blocks.Functions;
import SQ.Internal.ValueBlock;
import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;
@BuildingBlock(name="(Deb) Debug", display="Debug(#varName# , #Value#)", returnType = ReturnTypes.PriceOrNumber)
@Help("Log to file VarName , Value")
@SortOrder(1700)
@IgnoreInBuilder
public class Debug extends ValueBlock
{
@Parameter(defaultValue="Var : " )
@Help("Name of the Variable")
public String varName;
@Parameter
@Help("Value of the Variable")
public IBlock Value;
//------------------------------------------------------------------------
@Override
public double OnBlockEvaluate(int relativeShift) throws TradingException
{
fdebug("Debug ", varName + Value.evaluateBlock(relativeShift));
return 1;
}
}