Depurar uma variável em AlgoWizard
Se criarmos um modelo ou executarmos uma estratégia no AlgoWizard, precisamos, às vezes, emitir a variável em um log para poder depurá-la.
Temos esta função de fdebug no CodeEditor, precisávamos de uma função similar no AlgoWizard.
Aqui está uma função fDebug para emitir a variável para um arquivo de log.
1/ Para instalá-lo, precisamos importar este SQExtension V2 no CodeEditor e reiniciar o SQX.
2/ Para executá-lo em AlgoWizard, basta clicar em "Adicionar regra". selecione Se então / No BarUpdate (ver Capture4a)
No se as condiçõesselecionar a condição em que a função imprimirá a variável no log
ver "Capture4a" e "Capture2a" em anexo
Em Então Ação atribuir uma variável com a função Debug. Podemos selecionar esta função enquanto editamos um nova condição
ver "Captura3" em anexo
Esta função está usando a função fdebug em java para produzi-la no log de StrategyQuant neste diretório: "StrategyQuantX135}user`logStrategyQuant".
Um exemplo de saída é
19:51:54.087 [Bloqueio do computadorLinha comum #26 - Builder_2-Generation 3.0.61] INFO c.s.tradinglib.debug.Debugger - fDebug - Var : 0
19:51:54.087 [Bloqueio do computadorLinha comum #17 - Builder_2-Generation 3.0.43] INFO c.s.tradinglib.debug.Debugger - fDebug - Var : 0
Eu anexei um exemplo de estratégia com uma regra de debug, você tem que substituir a variável6 por qualquer variável que você queira observar. (Variable6 é apenas uma variável vazia para mostrar este exemplo)
Você pode ativar o modo Debug em trocando o "DebugMode” parâmetro para 1. StrategyQuant vai diminuir a velocidade para escrever o registro no disco rígido.
Você pode desativar o Debug ligando o modo "DebugMode” parâmetro para 0 para deixar o computador funcionar.
(Em AlgoWizard ver "Capture5" e No retester ver "Capture6-7-8-9" anexo para mudar o parâmetro de uma estratégia)
Espero que isto ajude a StrategyQuant Community.
pacote SQ.Blocos.Funções; importação 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 , Valor") @SortOrder(1700) @IgnoreInBuilder classe pública Debug estende o Bloco de Valor { @Parameter(defaultValue="Var : " ) @Help("Nome da Variável") varName de corda pública; @Parameter @Help("Valor da Variável") valor público do IBlock; //------------------------------------------------------------------------ @Override público duplo OnBlockEvaluate(int relativeShift) joga TradingException { fdebug("Debug", varName + Value.evaluationBlock(relativeShift)); retorno 1; } }
Parece que as Capturas 8 e 9 são as mesmas.
Você pode, por favor, recarregar as imagens?
Muito obrigado.
Obrigado por seu comentário, removi a Captura 9 , esta captura não foi útil
Nota importante :
Eu desenvolvi este Snippet para depurar variáveis dentro do SQX/AlgoWizard.
Não é feito para Metatrader, easylanguage, powerlanguage.source code output.
SQX/AlgoWizard não produzirá nenhum Código Fonte enquanto você estiver usando esta função de depuração.
Além disso, a função de depuração é escrever dados de registro em seu disco rígido e retardar a pesquisa do SQX.
É por isso que, assim que seu modelo ou estratégia for depurado, é melhor remover a função de depuração de sua estratégia ou modelo.