Deciding on a Backtesting and Trading Platform

Discussion in 'Trading Software' started by Gyles, Nov 5, 2007.

  1. 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.
     
    #411     Feb 14, 2014
  2. 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.
     
    #412     Feb 14, 2014
  3. #413     Feb 14, 2014
  4. 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.[​IMG]


    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>
     
    #414     Feb 17, 2014
  5. Murray Ruggiero

    Murray Ruggiero Sponsor

    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.
     
    #415     Feb 18, 2014
  6. 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, ...
     
    #416     Feb 18, 2014
  7. Murray Ruggiero

    Murray Ruggiero Sponsor

    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.
     
    #417     Feb 20, 2014
  8. tkmaxx

    tkmaxx

    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?
     
    #418     Jun 3, 2015
  9. 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
     
    #419     Jul 28, 2016