Vypisuje proměnné do logovacího souboru StrategyQuant pro ladění strategií v AlgoWizardu. Aktivujte režim ladění pomocí parametru DebugMode a sledujte hodnoty proměnných během backtestingu a optimalizace strategií.
Pokud v AlgoWizardu vytváříme šablonu nebo spouštíme strategii, občas potřebujeme vypsat proměnnou do logu, abychom ji mohli ladit.
V CodeEditoru máme k dispozici funkci fdebug, podobnou funkci jsme potřebovali i v AlgoWizardu.
Zde je funkce fDebug pro zápis proměnné do logovacího souboru.
1/ Pro instalaci musíme importovat toto SQExtension V2 do CodeEditoru a restartovat SQX.
2/ Pro spuštění v AlgoWizardu stačí kliknout na „Add rule“ a vybrat If Then / OnBarUpdate (viz Capture4a)
V sekci if conditions vyberte podmínku, při které funkce zapíše proměnnou do logu
viz přiložené „Capture4a“ a „Capture2a“
V Then Action přiřaďte proměnnou pomocí funkce Debug. Tuto funkci můžeme vybrat při úpravě nové podmínky
viz přiložený „Capture3“
Tato funkce používá funkci fdebug v Javě pro zápis do logu StrategyQuant v tomto adresáři: „\StrategyQuantX135\user\log\StrategyQuant“
Příklad výstupu je
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
Přiložil jsem příklad strategie s ladicím pravidlem,kde musíte nahradit variable6 libovolnou proměnnou, kterou chcete sledovat. (Variable6 je pouze prázdná proměnná pro ukázku tohoto příkladu)
Režim ladění můžete zapnout přepnutím parametru „DebugMode“ na 1. StrategyQuant se zpomalí z důvodu zápisu logu na pevný disk.
Režim ladění můžete vypnout přepnutím parametru „DebugMode“ na 0, aby počítač běžel na plný výkon.
(Pro změnu parametru strategie viz „Capture5“ v AlgoWizardu a přiložené „Capture6-7-8-9“ v Retesteru)
Doufám, že to komunitě StrategyQuant pomůže.
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;
}
}