Envia variáveis para o ficheiro de registo do StrategyQuant para depuração de estratégias no AlgoWizard. Ative o modo de depuração através do parâmetro DebugMode para monitorizar os valores das variáveis durante o backtesting e a otimização de estratégias.
Se criarmos um modelo ou executarmos uma estratégia no AlgoWizard, por vezes precisamos de enviar a variável para um registo para podermos depurá-la.
Temos esta função fdebug no CodeEditor, pelo que precisávamos de uma função semelhante no AlgoWizard.
Aqui está uma função fDebug para enviar a variável para um ficheiro de registo.
1/ Para a instalar, precisamos de importar esta SQExtension V2 no CodeEditor e reiniciar o SQX.
2/ Para a executar no AlgoWizard, basta clicar em “Add rule” e selecionar If Then / OnBarUpdate (consulte a Capture4a)
Nas if conditions, selecione a condição em que a função irá imprimir a variável no registo
consulte as imagens “Capture4a” e “Capture2a” em anexo
Em Then Action, atribua uma variável com a função Debug. Podemos selecionar esta função enquanto editamos uma nova condição
consulte a “Capture3” em anexo
Esta função utiliza a função fdebug em Java para a enviar para o registo do StrategyQuant neste diretório: “\StrategyQuantX135\user\log\StrategyQuant”
Um exemplo de saída é
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
Anexei um exemplo de estratégia com uma regra de depuração, onde tem de substituir a variable6 por qualquer variável que pretenda monitorizar. (A Variable6 é apenas uma variável vazia para ilustrar este exemplo)
Pode ativar o modo Debug alterando o parâmetro “DebugMode” para 1. O StrategyQuant ficará mais lento para escrever o registo no disco rígido.
Pode desativar o modo Debug alterando o parâmetro “DebugMode” para 0 para deixar o computador processar normalmente.
(No AlgoWizard veja a “Capture5” e no retestador veja as capturas “Capture6-7-8-9” em anexo para alterar o parâmetro de uma estratégia)
Espero que isto ajude a Comunidade 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;
}
}