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.
BTW here is an independent test from 2009 between AmiBroker and Ruggiero's Tradersstudio. http://www.automated-trading-system.com/amibroker-tradersstudio-speed-comparison/ Analysis in AB has improved even more since that year and is completely multithreaded (using all cores) and with completely new UI. I think it was implemented in 2010 or 2011. Anyway speed it ridiculously fast(er).
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. 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, ...
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?
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