Hey Hammer, Why not stick it all here for prosperity? :)
http://www.amibroker.com/library/addformula.php Cheers, Glenn --- In [email protected], "oceanchimes" <[EMAIL PROTECTED]> wrote: > > Hello Alistair, > You are correct as it is designed to work as an include file. The > following code shows how to use it and I have also provided the > include file as well. The filename is "TradeSimFn.afl" and it is saved > to the AB include directory set in preferences. > > The afl can be run as scan / exploration. Only trades between the AA > range dates are written to the Test.trt file. > > Please be specific with your description and difficulties. It can be > frustrating but information is needed to solve the problem. > > > This is the line that writes to the file > > fputs(sTicker + sEntryDate + sExitDate + > sEntryPrice + sExitPrice + > sBuyHiLo + sSellHiLo + > sVolume +"\n", fh ); > > And these are the translations from AB to Tradesim to construct the > above code. Some are concatonate, ie. sSellHiLo==(at exit High+low) > > TradeSim AmiBroker Format Comment/description > ______________________________________________________________________ > ticker Name() string > Type "L" string (L)ong trades only > Entry Date YYYYMMDD string Buy Date > Exit Date YYYYMMDD string Sell Date > InitialStop InitialStop 7.4 MUST be calculated > BuyPrice BuyPrice 7.4 > SellPrice SellPrice 7.4 > EntryLowPrice Low 7.4 optional - Low at Buy Date > EntryHighPrice High 7.4 optional - High at Buy Date > ExitLowPrice Low 7.4 optional - Low at Sell Date > ExitHighPrice High 7.4 optional - High at Sell Date > TradedSize Volume 3.0 optional - Volume at Buy Date > > > So, referring to TradeSim format in the include file, I have coded a > sample AFL system to run it, as an example. Not tried but straight > forward. Be Careful of the line wrap as I could not remove all of them. > regards > franc > > //////////////////////////////////////////////////////////////////// // > //Sample system > //////////////////////////////////////////////////////////////////// // > global TradedVol, InitialStop; > > Buy = Cross( EMA(C,11), EMA(C,51) ); > Sell = Cross( CCI(51), CCI(14) ); > > Capital = 100000; > SetOption("InitialEquity",Capital); > SetTradeDelays(1,1,0,0); > SetPositionSize(-10, spsPercentOfEquity); > BuyPrice = Open; > SellPrice = Open; > > InitalStop = Ref( C-2*ATR(10), -1); > > capital = 100000; > SetOption("InitialEquity", Capital); > SetPositionSize(-10, Capital); > > TradedVol = int( (Capital/10)/BuyPrice ); //number of shares bought > > //identify the file in the AB include directory > #include<TradeSimFn.afl> > > //call the TradeSim function, sort the trades and > //output to c:\Temp\ABtoMS.trt > //the shift (2nd parameter is to align with buy/sell tradedelays) > nshift = 1; > ABtoMS("", nshift); > > /*that's all (as far as I remember) > Note: the include file was written for an earlier TradeSim version. > I believe that TradeSim now also allows shorts. > This may mean modifying the ABtoMS function. > Refer to the TradeSim documentation for the text file input format. > */ > > > > //////////////////////////////////////////////////////////////////// // > //include file saved to AB include directory - "TradeSimFn.afl" > //////////////////////////////////////////////////////////////////// ///////////////////////////////// > > // Procedure ABtoMS( sFileName, Shift ): TextFile > > //////////////////////////////////////////////////////////////////// ///////////////////////////////// > // Function ABtoMS() > // writes a Tradesim compatible Trade Database textfile > // from a Scan/Exploration > // The completed buy/sell trades are within the AA Range setting > // Tradesim cannot accept incomplete trades; > // trades are closed at AA ToRange setting or lastBar. > > // NOTES: > // 1) output writen to msFileName = "C:\\Temp\\ABtoMS.trt" > // 2) The output is appended to an existing file > // OR creates a new file. > // 3) InitialStop MUST BE CALCULATED (global variable) > // 4) AA Range read, only quotations between the range are written > // to the file > // 5) Open Trades are completed using the ToRange Date values > // 6) Amibroker outputs buy/sell signals. > // Need delay for actual trade > > /* > -------------------------------------------------------------------- ------------------------------ > TRADESIM FIELD AMIBROKER FORMAT COMMENT > > -------------------------------------------------------------------- ------------------------------ > ticker Name() string > Type "L" string (L)ong trades only > Entry Date YYYYMMDD string Buy Date > Exit Date YYYYMMDD string Sell Date > InitialStop InitialStop 7.4 MUST be calculated > BuyPrice BuyPrice 7.4 > SellPrice SellPrice 7.4 > EntryLowPrice Low 7.4 optional - Low at Buy Date > EntryHighPrice High 7.4 optional - High at Buy Date > ExitLowPrice Low 7.4 optional - Low at Sell Date > ExitHighPrice High 7.4 optional - High at Sell Date > TradedSize Volume 3.0 optional - Volume at Buy Date > //------------------------------------------------------------------ --------------------------------- > TRADE RECORD CONSTRUCTION: > a single space between each field required > > sTicker symbol + " L" > sEntryDate EntryDate > sExitDate ExitDate > sEntryPrice InitialStop, Buyprice > sExitPrice Sellprice, > sBuyHiLO Low, High > sSellHiLo Low, High > sVolume Volume > **/ > //////////////////////////////////////////////////////////////////// ///////////////////////////////// > > procedure ABtoMS( msFileName, Shift ) > { > local bfirst, bRange; > local sTicker, sTradedSize; > local sPageDesc, sHeader; > local sEntryDate, sEntryPrice, sBuyHiLo; > local sExitDate, sExitPrice, sSellHiLo; > local y, m, d, i, fh; > > > if(msFileName=="") { msFileName="c:\\Temp\\ABtoMS.trt"; } > > //Read InBarRange; true when between From/To dates or n quotations > bRange = Status("barinrange"); > > // generate the year, month, day arrays for all the quotations > y = Year(); > m = Month(); > d = Day(); > > //------------------------------------------------------------------ --------------------------------- > /** this is an extract of the format Tradesim requires... > **# Text Trade Database Example > **# Comments always begin with the # character > ** > **# The compulsory fields are always required > **# in the order shown on the next line, > ** > **# [Symbol][Trade Position][Entry Date][Exit Date] > **# [Initial Stop][Entry Price][Exit Price] > ** > **# The optional fields which are NOT used in this example > **# should be ordered as follows, > **# [Low Entry Price][High Entry Price][Low Exit Price] > **# [High Exit Price][Traded Volume] > ** > **BHP L 19960419 19960607 0.0000 19.2200 18.5800 > **BHP S 19960607 19961018 0.0000 18.5800 17.0400 > */ > // create a new or open an existing file to append trade details > // make sure the directory exists > > // file does not exist, so create a new file > fh =fopen( msFileName, "a"); > if ( fh ) > { > // a buy must occur before a sell, > // only the first buy and sell accepted > // subsequent multiple Buy/Sell signals ignored, > // until trade details complete > // ignore signals until Buy found, > // then follow with Sell to construct trade record > bfirst = 0; > > for( i = 0; i < BarCount; i++ ) > { > //find the first buy, then construct Buy details > j = i - Shift; > if( j < 0 ) J = 0; > > if( Buy[j] AND bRange[i] == 1 AND bfirst == 0 ) > { > // initialise the output strings to default > bfirst = 1; > sTicker = " "; // (6) > sEntryDate = " "; // (9) > sExitDate = " "; // (9) > sEntryPrice = " "; //(16) > sExitPrice = " "; // (8) > sBuyHiLo = " "; //(16) > sSellHiLo = " "; //(16) > sVolume = " "; //(8+1) > > // Construct the Trade BUY details > sTicker = Name() + " L "; > sEntryDate = StrFormat("%04.0f%02.0f%02.0f ",y[i],m[i],d[i] ); > sEntryPrice = StrFormat("%07.4f %07.4f > ",InitialStop[j],BuyPrice[i] ); > sBuyHiLo = StrFormat( "%07.4f %07.4f ",L[i], H[i] ); > sVolume = StrFormat( "%3.0f ",TradedVol[j] ); > } // end if buy > > //find the first sell after buy, > //the (symbol lastbar -> [i] < barcount) > //OR (AA ToRange) could occur before Sell Signal > //construct the Trade Sell details to complete the trade record. > // if( ( Sell[i-Shift] OR ( bRange[i] == 0 ) > // OR ( i >= BarCount -1 ) ) AND bfirst == 1 ) > if((Sell[j] OR ( bRange[i]==0 ) OR (i>=BarCount-1)) AND bfirst ==1) > { > bfirst = 0; > // construct SELL details > sExitDate = StrFormat( "%04.0f%02.0f%02.0f ",y[i],m[i],d[i] ); > sExitPrice = StrFormat( "%07.4f ",SellPrice[i] ); > sSellHiLo = StrFormat( "%07.4f %07.4f ",L[i],H[i] ); > > //buy & sell details complete, > //now able to write the trade record > fputs(sTicker + sEntryDate + sExitDate + > sEntryPrice + sExitPrice + > sBuyHiLo + sSellHiLo + > sVolume +"\n", fh ); > } // end if sell > > } //end for > > fclose( fh ); > } //end fh > > } //end function ABtoMS > //////////////////////////////////////////////////////////////////// /////////////////////////////////--- > > > > > > > > In [email protected], "agkan24" <agkan24@> wrote: > > > > --- In [email protected], "justinwonono" <justinwonono@> wrote: > > > > > > Ok thanks franc, I'll check what I've done wrong. > > > > > > Regards > > > > > > --- In [email protected], "oceanchimes" <oceanchimes@> wrote: > > > > > > > > Justinwonono > > > > I used a call to the include file in my AFL. Then ran a > > > > backtest/exploration for the period using AA filter for all stocks. > > > > Worked as expected, no problems with single symbol out only. > > > > franc > > > > > > > > --- In [email protected], "justinwonono" <justinwonono@> > > wrote: > > > > > > > > > > > > > > > Hi franc, > > > > > > > > > > First, thanks for your code, much appreciated, I gave this a go > > but I > > > > > only seemed to get output for the current symbol backtest, I can't > > > > > output a filtered backtest. Any ideas what I might be doing > wrong or > > > > > is that what it is meant to do? ie only the current symbol. > > > > > > > > > > Regards > > > > > > > > > > Justinwonono > > > > > > > > > > --- In [email protected], "oceanchimes" <oceanchimes@> > > wrote: > > > > > > > > > > > > --- In [email protected], "Greg" <crootster@> wrote: > > > > > > > > > > > > > > I have a system or two that I have been working on and being > > > that I > > > > > > > have TradeSim I would like to put it across to its database to > > > > > test it > > > > > >.... > > > > > > > Cheers Greg > > > > > > > > > > > > > Greg, > > > > > > This is a function called from AFL exploration ( backtest > > > > > > whatever)that I wrote some time ago. It worked for long only > > > trades. > > > > > > I understand Tradesim allows text file input that include short > > > > > > trades. Perhaps you could modify? Hope this is what you were > > looking > > > > > for. > > > > > > franc > > > > > > > > > > > > > > > > > > > > > > I'm having trouble getting this to work. How do you actually use it? > > Am I supposed to modify the function (ie adjust buy details etc) or do > > you just call it as an #include in another AFL file which has my buy > > and sell commands? > > > > Any help would be appreciated, > > > > Alistair > > >
