That review is totally obsolete. It was also structured and coded to maximize the speed difference. For example printing results to terminal instead of custom report could double the speed of that demo.
TradersStation multicore is 16.5X faster on the following hardware setup than it is for TradersStudio Professsional. We used a triple moving average crossover on 23 markets from January 1991 to date to do this benchmarket on the following computer , purchased late 2010.
⢠Intel Core i7 Processor Extreme Edition i7-990X 3.47GHz Six Core
⢠CORSAIR HYDRO ENCLOSED WATER COOLING SYSTEM
⢠Asus SABERTOOTH X58 Socket 1366/
⢠24GB (6 x 4GB) 240-Pin DDR3 1600MHz (PC3 12800) Triple Channel
⢠256GB Solid State Drive SATA 6.0
⢠HITACHI / WD 2TB 5900 RPM 32MB CACHE SATA 6.0Gb/s
⢠12X BLU-RAY DISK BURNER DVD-RW COMBO DRIVE w/3D Feature
⢠(2X) nVidia GeForce 9500GT 1GB DDR2 2DVI SLI PCI-EXP Video Card
⢠REALTEK 8-CHANNEL DIGITAL SOUND ONBOARD
⢠Gigabit 10/100/1000 Mbps PCI Adapter
⢠COOLER MASTER Storm Scout SGC-2000-KKN1-GP ATX Mid Tower Computer Case
⢠Microsoft Windows 7 Professional 64
This machine was purchased from EZ Trading Computers.
I know AMIBroker is also faster with it's multicore support but I believe TradersStudio is easier to do advance things. I will post some example of things and how to do them in TradersStudio, then someone can post how to do it in AMIBroker and we will let the member judge.
Here the code for a pick top ETF from a basket with dynamic rebalancing.
<Code>
Sub RankSystemPro()
Dim MADiff
Dim RawRank
Dim UsePermission
Dim Len1
Dim Len2
Dim Len3
Dim ScreenParm1
'************************
' Premission Screen Parameters
ScreenParm1=marketvar("ScreenParm1")
MADiff= Close-Average(Close,ScreenParm1,0)
Len1=marketvar("Len1")
RawRank=(Close-Close[Len1])/Close[Len1]
marketvar("MAPermission")=MADiff>0
marketvar("RawRank")=RawRank
marketbreakdown2()
End Sub
</Code>
Here now the code for the money management
<Code>
' Stock plan takes the top market from each session based on relative strenght measures
' or custom performance
' TradersStudio(r) copyright 2004-2011, All rights reserved
Sub MAR_TalkSept12_RSAnalysis(SMode,ScreenParm,Len1,TopN)
Dim M As Integer
Dim DollarPerTrade
Dim StartAccount
Dim DollarsPerTrade
Dim Measure
Dim custper As Array
Dim SessionMatrix As Array
ReDim(SessionMatrix,1,3)
SessionMatrix[0,0]="ETFRelative"
SessionMatrix[0,1]=TopN
SessionMatrix[0,2]=100
Dim sCount As Integer
For sCount =0 To tradeplan.SessionCount -1
'DollarsPerTrade=tradeplan.SummEquity/(TradePlan.SessionCount)
DollarsPerTrade=SessionAllocationPerMark_V3(TradePlan.Session(sCount).Name,SessionMatrix)
TradePlan.Session(sCount).UnitSize = 1
TradePlan.Session(sCount).RankingType() = Ordinal ' eordinal
custper=EquityRank_V3(TradePlan.Session(sCount))
Tradeplan.Session(sCount).SetCustomPerformance(custper)
' For each session Loop though the trading plans.
For M = 0 To TradePlan.Session(sCount).MarketCount - 1
' If Month(tradeplan.Session(sCount).Market(M).data(0,"Date",0))<>Month(tradeplan.Session(sCount).Market(M).data(0,"Date",1)) Then
TradePlan.Session(sCount).Market(M).MarketVar("ScreenParm1")=ScreenParm
TradePlan.Session(sCount).Market(M).MarketVar("Len1")=Len1
If DoReBalance(SMode,tradeplan.Session(sCount).Market(M).data(0,"Date",0),tradeplan.Session(sCount).Market(M).data(0,"Date",1)) Then
Measure = tradeplan.Session(sCount).CustomPerformance(tradeplan.session(sCount).Market(M).symbol(0))
' Print tradeplan.Session(sCount).Market(M).Symbol(0)," ",Measure
Dim sizeadjust As Integer
If Measure <= SessionAllocationPerMark_GetPosCount(TradePlan.Session(sCount).Name,SessionMatrix) And tradeplan.session(sCount).Market(M).marketvar("MAPermission")=True Then
'**************************************
If tradeplan.MarketType=3 Then
sizeadjust=Floor((DollarsPerTrade)/TradePlan.Session(sCount).Market(M).Data(0,"TSClose",0))-TradePlan.Session(sCount).Market(M).NumContractsHeld
End If
If tradeplan.MarketType=1 Then
sizeadjust=Floor((DollarsPerTrade)/TradePlan.Session(sCount).Market(M).Data(0,"Close",0))-TradePlan.Session(sCount).Market(M).NumContractsHeld
End If
If sizeadjust<>0 Then
If sizeadjust>0 Then
TradePlan.Session(sCount).Market(M).TSBuy("BuyReAdjust",sizeadjust,0,Market,Day)
End If
If sizeadjust<0 Then
sizeadjust=sizeadjust*-1
TradePlan.Session(sCount).Market(M).TSExitlong("ExitReadjust","",sizeadjust,0,Market,Day)
End If
End If
Else
If TradePlan.Session(sCount).Market(M).MarketPositionPlus("")=1 Then
TradePlan.Session(sCount).Market(M).TSExitlong("","",TradePlan.Session(sCount).Market(M).NumContractsHeld,0,Market,Day)
End If
End If
TradePlan.Session(sCount).Market(M).ExitNumUnits=TradePlan.Session(sCount).Market(M).NumContractsHeld
End If
If TradePlan.Session(sCount).Market(M).MarketPositionPlus("")=1 And TradePlan.Session(sCount).Market(M).marketvar("MAPermission")=False Then
TradePlan.Session(sCount).Market(M).TSExitlong("LostPermission","",TradePlan.Session(sCount).Market(M).NumContractsHeld,0,Market,Day)
End If
Next
Next
End Sub
</Code>
This code will trade the top N ETF as long as the meet the filter screen. It will also rebalance positions and reallocate the money dynamically once a month. How would you do this in Amibroker on a basket of ETF's. This example is free and comes with TradersStudio. We also use our advance stock analysis which handles splits/dividends and allow you to do money management at the real price . It also let's you purchase different dollar values of each security without distorting results. , since sizing is done on real price , not split adjusted prices. We included both this type of analysis and standard split adjusted analysis in our code that where we show
<Code>
tradeplan.MarketType=3 or tradeplan.MarketType=1 'in those if statements
</Code>
Type 3 is TradersStudio stock and type 1 is split adjusted only.