Number of trades from WF Matrix
Note – there is an updated version for SQX Build 140 and above – see attached snippet.
This Java snippet adds a new databank column functionality and allows you to calculate the number of trades of all combinations of a WF Matrix.
/*
* Copyright (c) 2017-2018, StrategyQuant - All rights reserved.
*
* Code in this file was made in a good faith that it is correct and does what it should.
* If you found a bug in this code OR you have an improvement suggestion OR you want to include
* your own code snippet into our standard library please contact us at:
* https://roadmap.strategyquant.com
*
* This code can be used only within StrategyQuant products.
* Every owner of valid (free, trial or commercial) license of any StrategyQuant product
* is allowed to freely use, copy, modify or make derivative work of this code without limitations,
* to be used in all StrategyQuant products and share his/her modifications or derivative work
* with the StrategyQuant community.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
package SQ.Columns.Databanks;
import com.strategyquant.lib.L;
import com.strategyquant.tradinglib.DatabankColumn;
import com.strategyquant.tradinglib.ResultsGroup;
import com.strategyquant.tradinglib.SettingsKeys;
import com.strategyquant.tradinglib.ValueTypes;
import com.strategyquant.tradinglib.WalkForwardResult;
import com.strategyquant.tradinglib.optimization.WalkForwardMatrixResult;
public class NumberOfTradeWF extends DatabankColumn {
public NumberOfTradeWF() {
super(L.tsq("# of trades WF"), DatabankColumn.Integer, ValueTypes.Aproximate, 0, 0, 100);
setWidth(70);
setTooltip(L.tsq("Number of trades WF"));
// this means that value depends on number of trading days
// and has to be normalized by days when comparing with another
// result with different number of trading days
setDependentOnTradingPeriod(true);
}
//------------------------------------------------------------------------
@Override
public String getValue(ResultsGroup results, String resultKey, byte direction, byte plType, byte sampleType) throws Exception {
/*
* Sample code to obtain the stat value of the WF result
* ----------------------------------------------------
* ----------------------------------------------------
* ----------------------------------------------------
*/
//Retrieve the WF matrix results
WalkForwardMatrixResult mwfResult = (WalkForwardMatrixResult) results.mainResult().get(SettingsKeys.WalkForwardResult);
if(mwfResult==null) {
return "NA";
}
/*
* WalkForwardMatrixResult opt params
* public int start1;
public int stop1;
public int increment1;
public int start2;
public int stop2;
public int increment2;
for(int j=mwfResult.start2; j<=mwfResult.stop2; j+=mwfResult.increment2) {
for(int i=mwfResult.start1; i<=mwfResult.stop1; i+=mwfResult.increment1) {
WalkForwardResult wfResult = mwfResult.getWFResult(i, j);
}
}
*/
int param1 = mwfResult.start1; //oos
int param2 = mwfResult.start2; //run
//Obtain a specific WF result from the matrix
WalkForwardResult wfResult = mwfResult.getWFResult(param1, param2);
/*
* WalkForwardResult calculated stats
* public SQStats stats = null; //Full Sample stats
* public SQStats statsOOS = null; //OOS stats
* public SQStats statsStability = null; //The stats stability
* public SQStats statsScore = null; //The stats score
* public SQStats statsSpecial = null; //The stats special
*/
//Return the calculated value of stats
return wfResult.stats.getInt("NumberOfTrades")+"";
}
}
Excellent Tomas !!!!!
good idea !
Thank you 🙂 🙂 🙂