Deciding on a Backtesting and Trading Platform

Thanks for the feedback!

I have no programming experience at all, so I want it as intuitively as possible. Cannot really judge from the code which one is most intuitively.

But I guess that from all the software out there, EasyLanguage is the most widely used and thus have to biggest user base for tips, feedback and support.

Still have to think about this for awhile. It will be a lot of work when I have decided.
 
EL is not the most widely used language. C/C++/NET are the most widely used languages. Also EL has its limitations. Besides that platforms that I have tested and that use EL or EL like languages operate pretty slowly. My advice start learning a "real" programming language before deciding on programmable softwares. To me it makes not sense entering the world of backtesting and what not if you are dependent on a decision about what is simple and what is not. Designing a trading system isn't something that comes close to ordering a Hamburger at McDonuts. It is a comprehensive and yes it's also a complicated process. If you don't know what you are doing then it is a waste of time and energy that will end in a disaster. You don't become surgeon or craftsman from today to tomorrow, do you? It's a learning process that needs time and effort. Of course it will not guarantee success that' for sure. Life is hard.
 
Mr. Ruggiero, are you in the house or have you left the building? Any more clearer responses to the two user questions, please? I hate unclear issues. Call me Inspector Columbo. Sorry! Thanks!

Here are some answers from user perspective. No slippage and trading costs added.
Is this what you were referring to? If so then it has been possible to output that or anything else in report for many years too.
8xpp.png



And here is a custom metric code.
Code:
<code>[COLOR=#0000ff][B]SetOption[/B][/COLOR][COLOR=#000000]( [/COLOR][COLOR=#800080]"InitialEquity"[/COLOR][COLOR=#000000], [/COLOR][COLOR=#800080]100000[/COLOR][COLOR=#000000] );   
[/COLOR][COLOR=#0000ff][B]SetOption[/B][/COLOR][COLOR=#000000]( [/COLOR][COLOR=#800080]"FuturesMode"[/COLOR][COLOR=#000000], [/COLOR][COLOR=#000000][B]True[/B][/COLOR][COLOR=#000000] ); 
[/COLOR][COLOR=#0000ff][B]SetPositionSize[/B][/COLOR][COLOR=#000000]( [/COLOR][COLOR=#800080]1[/COLOR][COLOR=#000000], [/COLOR][COLOR=#000000][B]spsShares[/B][/COLOR][COLOR=#000000] ); [/COLOR][COLOR=#008000]// one contract[/COLOR][COLOR=#000000] 
[/COLOR][COLOR=#0000ff][B]SetOption[/B][/COLOR][COLOR=#000000]( [/COLOR][COLOR=#800080]"ExtraColumnsLocation"[/COLOR][COLOR=#000000], [/COLOR][COLOR=#800080]7[/COLOR][COLOR=#000000] );[/COLOR][COLOR=#008000]// defines where you wanna have custom columns in AA being located[/COLOR][COLOR=#000000] 

[/COLOR][COLOR=#008000]//Start of Custom Backtest Interface[/COLOR][COLOR=#000000] 
[/COLOR][COLOR=#0000ff][B]SetCustomBacktestProc[/B][/COLOR][COLOR=#000000]([/COLOR][COLOR=#800080]""[/COLOR][COLOR=#000000]);   
[/COLOR][COLOR=#800000][B]if[/B][/COLOR][COLOR=#000000] ( [/COLOR][COLOR=#0000ff][B]Status[/B][/COLOR][COLOR=#000000]( [/COLOR][COLOR=#800080]"action"[/COLOR][COLOR=#000000] ) == [/COLOR][COLOR=#000000][B]actionPortfolio[/B][/COLOR][COLOR=#000000] ) 
{ 
    bo = [/COLOR][COLOR=#0000ff][B]GetBacktesterObject[/B][/COLOR][COLOR=#000000](); 
    bo.Backtest([/COLOR][COLOR=#800080]1[/COLOR][COLOR=#000000]); 

    Sumtick = [/COLOR][COLOR=#800080]0[/COLOR][COLOR=#000000]; 

    [/COLOR][COLOR=#008000]// iterate through closed trades and add some info[/COLOR][COLOR=#000000] 
    [/COLOR][COLOR=#800000][B]for[/B][/COLOR][COLOR=#000000] ( trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade() ) 
    { 
        PLTicks = [/COLOR][COLOR=#0000ff][B]IIf[/B][/COLOR][COLOR=#000000]( trade.IsLong(), [/COLOR][COLOR=#008000]/*Long*/[/COLOR][COLOR=#000000]  ( trade.ExitPrice - trade.EntryPrice ) / trade.TickSize, 
                                      [/COLOR][COLOR=#008000]/*Short*/[/COLOR][COLOR=#000000] ( trade.EntryPrice - trade.ExitPrice ) / trade.TickSize ); 

        trade.AddCustomMetric( [/COLOR][COLOR=#800080]"P/L Ticks"[/COLOR][COLOR=#000000], PLTicks, [/COLOR][COLOR=#800080]1[/COLOR][COLOR=#000000] ); 

        Sumtick += PLTicks; 
        trade.AddCustomMetric( [/COLOR][COLOR=#800080]"Cum. Ticks"[/COLOR][COLOR=#000000], Sumtick, [/COLOR][COLOR=#800080]1[/COLOR][COLOR=#000000] ); 
    } 

    bo.ListTrades(); 
} [/COLOR]</code>
<code></code>
 
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.
 
Why do you say it is obsolete? The review is from 2009. Of course it's obsolete in comparison to standards of 4 years later since things evolve most of the time. That applies to both or most available softwares. As for your believing. Belief is not equal to fact. I'm not a believer. I rather like facts. You have already believed before and have been proved wrong. As for your code I don't have the time to extract the rules out of it and which was made some time ago so it would be better if you could tell the exact rules in English words. All I can say is that AmiBroker can handle rebalancing and reallocation and money management etc also. But I find it interesting that you say that you believe that in TS it was easier to do advance things but you actually don't know how to do things in AB. *scratching my head* I have to repeat that I'm not a developer of any software firm. I'm just a user of few trading related softwares including Amibroker, Sierra Chart, ...
 
Why do you say it is obsolete? The review is from 2009. Of course it's obsolete in comparison to standards of 4 years later since things evolve most of the time. That applies to both or most available softwares. As for your believing. Belief is not equal to fact. I'm not a believer. I rather like facts. You have already believed before and have been proved wrong. As for your code I don't have the time to extract the rules out of it and which was made some time ago so it would be better if you could tell the exact rules in English words. All I can say is that AmiBroker can handle rebalancing and reallocation and money management etc also. But I find it interesting that you say that you believe that in TS it was easier to do advance things but you actually don't know how to do things in AB. *scratching my head* I have to repeat that I'm not a developer of any software firm. I'm just a user of few trading related softwares including Amibroker, Sierra Chart, ...

Its a simple relative strength model based on momentum. We first have a filter , we require the security to be above a longer term moving average call it's period N.
Next we take a momentum of length Y for each security and as long as the security is above it's longer term moving average we rank it for the basket. We then take the top Z securities and divide our money between then and buy them. If one drops out of the top Z we sell that position. We also once a month, look at the value owned for each security and adjust the number of shares so the value of each security owned is the same. We do this based on real price not split adjusted price.
 
I thought better to post here rather than start a new thread. My coding experience is VBA, Python and MT4. Happy to put in the hours and learn new syntax.

I am looking for software that would take me from development & backtesting to live unassisted trading with the least amount of faff. The little spare time I have is precious so I want to spend it on strategy evaluation rather than setting things up (feeds, brokers, etc) and figuring out why they are not working.

Is Tradestation my best pick?
 
Hello Murray,
I think this is the first time we’ve chatted. I’ve read your books and followed your writings in Futures for a while, and as you’ve confirmed, I’m one of your customers.

Let’s discuss a few items so that we can leave the record clean. Gyles was the person asking about the manual. My comments were intended to share what I knew about written manuals from TradersStudio and Trading Blox. Hopefully he’ll read past your overly long quotation to see your comments and know what is possible for manuals.

RE: HOW TO CHOOSE BACK-TESTING SOFTWARE - For Beginners

Hi Roger,

Wow, thanks so much for all that detail and effort. Very much appreciated.

It would be very much appreciated if you (or others) could perhaps guide me on my way:

1. I'm looking for top-quality back-testing and scanning software that can run portfolio back-tests. EOD, but I would like intra-day optionality.
2. I'm new to back-testing but not new to trading. I'm technical and not silly so YES I actually plan on learning to code.
3. I appreciate your comments about back-testing software being a LONG TERM INVESTMENT, particularly if I'm learning new coding skills. I would very much like to learn a language that has use outside of one piece of software (e.g. C# ideally, or Python)
4. So, given that I barely even know what I need at this stage, what are the, say, top 5 applications on the market for top-notch backtesting; including general market scanning; where I don't mind if I have to learn to code; mainly portfolio based, EOD; that are going to give me useful, transferable skills and many years of usage?
5. Cost is secondary, but given I might make a mistake, not completely irrelevant.

e.g. Amibroker? NinjaTrader? TradeStation? Quantopian (seems like the new generation??); Quantconnect; Tradersstudio; TradingBlox?

What are some general principles for me to narrow this down and make an informed choice?

Thanks so much!

Wave
 
Back
Top