also this should work buyprice=buy*buyprice*0.01+not(buy)*buyprice, since you don't trade if buy is zero, the second part is useless, but is equivalent to the iif statemet proposed. I wonder if the above solution is slower tha IIF regards ly
--- In [email protected], "Louis Préfontaine" <[EMAIL PROTECTED]> wrote: > > Hi all, > > Wow what a nice thread! I feel like I finally asked omething that's > intelligent enough to be worthy! ;-) > > Some thoughts: > > 1)Graham and Tomasz: I really like the simplicity of the SetOption( > "PriceBoundChecking", 0 ); Kind of funny. I was scratching my head all > over and that was all there, so easy... Thanks! I was wondering, is > there any hidden danger of setting priceboundchecking to "off"? I mean: > what is the utility of this anyway? > > 2) Howard, thank you a lot for your loop. What I am wondering, is what can > be the advantage of such a loop over a more simple IIF command? I'd like to > use loops in my codes, but so far I found nothing that needed a loop badly, > or maybe I am missing something? What I am trying to do is to change that % > adjustment depending on situations. I'd like to set like 5-10 different > conditions of my own; would that be easier to do with a loop or with IIF? > Also, does it take longer for a loop? If I scan thousands of tickers in > 1-minute bars, can it be a problem? Thanks! > > 3) Barry: I understand your point. Why I badly need such slippage > adjustment is because I want to trade in less liquid markets and I want the > results to be more accurate. When there is a 1-2% difference between bid > and ask, well that's the difference between buying a new home or dinning at > the YMCA in the long run... > > Thank you all, > > Louis > > > > > 2008/7/2 Howard B <[EMAIL PROTECTED]>: > > > Hi Ed -- > > > > The question I received wanted the solution to be programmed using a loop. > > > > Thanks, > > Howard > > > > > > > > On Wed, Jul 2, 2008 at 10:26 AM, Edward Pottasch <[EMAIL PROTECTED]> > > wrote: > > > >> hi Howard, > >> > >> why use a loop, why not use IIF? > >> > >> BuyPrice = IIF(Buy,BuyPrice * 1.01, BuyPrice); > >> > >> rgds, Ed > >> > >> > >> > >> > >> ----- Original Message ----- > >> *From:* Howard B <[EMAIL PROTECTED]> > >> *To:* [email protected] > >> *Sent:* Wednesday, July 02, 2008 7:11 PM > >> *Subject:* Re: [amibroker] Re: Buyprice and sellprice... > >> > >> Greetings all -- > >> > >> I received a private email asking for more clarification about the code > >> segment I posted. Since the technique may be of general interest, I've > >> posted it to the forum. > >> > >> Here is a complete trading system that adjusts the BuyPrice and SellPrice, > >> > >> under the control of a Param. > >> > >> Replace the simple moving average crossover for the Buy with a more > >> intelligent one of your own. And the Sell as well. > >> > >> Run this with AdjustBuyPrice set to 0, and again with it set to 1. > >> > >> For each run, open the Report, then look at Trades and compare the price > >> of entry and exit. > >> > >> ///////////////////////////////////////////////////// > >> > >> // adjustBuyPrice.afl > >> > >> // In response to a question on the Yahoo AmiBroker Forum, > >> // this code shows one way to adjust the Buyprice and Sell Price, > >> // perhaps to model slippage. > >> > >> // Howard Bandy > >> // July 2, 2008 > >> > >> > >> SetTradeDelays(0,0,0,0); > >> BuyPrice = C; > >> SellPrice = C; > >> > >> // When AdjustBuyPrice is 0, no changes are made > >> // When AdjustBuyPrice is 1, BuyPrice and Sell Price are adjusted > >> > >> AdjustBuyPrice = Param("adjBuyPrice",0,0,1,1); > >> > >> MA1 = 10; > >> MA2 = 5; > >> Buy = Cross(MA(C,MA1),MA(C,MA2)); > >> > >> if (AdjustBuyPrice) > >> { > >> for (i=0; i<BarCount; i++) > >> { > >> // test to see if there was a Buy on this bar > >> // and if there was, adjust BuyPrice > >> if (Buy[i] == 1) > >> { > >> BuyPrice[i] = 1.01*BuyPrice[i]; > >> } > >> } > >> } > >> > >> Sell = BarsSince(Buy)>=3; > >> > >> > >> if (AdjustBuyPrice) > >> { > >> for (i=0; i<BarCount; i++) > >> { > >> // test to see if there was a Sell on this bar > >> // and if there was, adjust SellPrice > >> if (Sell[i] == 1) > >> { > >> SellPrice[i] = 0.99*BuyPrice[i]; > >> } > >> } > >> } > >> > >> > >> > >> > >> > >> ////////////////////////////////////////////////////// > >> > >> Thanks, > >> Howard > >> www.quantitativetradingsystems.com > >> > >> On Wed, Jul 2, 2008 at 9:08 AM, Dennis Brown <[EMAIL PROTECTED]> wrote: > >> > >>> Barry, > >>> > >>> About the only comment I can make is that I have produced systems the > >>> generate in real life what they backtest to. If you understand all > >>> the issues, you can make it match. Another point is that when I trade > >>> against my system --deciding the best second to send the order after > >>> it says to send it, I generally get a better result. This is trading > >>> one minute bars. It all just depends on the details of the system and > >>> the trader --and the delays from the data feed. > >>> > >>> Other than that, I generally agree with your assessment. > >>> > >>> BR, > >>> Dennis > >>> > >>> > >>> On Jul 2, 2008, at 11:40 AM, Barry Scarborough wrote: > >>> > >>> > I guess I will start a debate that I don't intend to participate in > >>> > but state it for consideration. It seems many are trying to tweak > >>> > their back tester to find the absolute best performance but include > >>> > intangibles like slippage. Back testing, in my opinion, should only > >>> > be used to compare systems to find which out performs another. That > >>> > is all you need to do because the market will change and the system > >>> > will not work as you expect. So it is a waste of time to try to eek > >>> > our more gain or try to factor in slippage or all such nonsense. > >>> > > >>> > Why do I say this? I have a system that consistently will back test > >>> > 200% to 1000% A DAY using 1 Russell emini contract ER2 and a 1 minute > >>> > chart. In longer periods the gain is less and I use various time > >>> > periods and data samples. In the real world it does not make a profit > >>> > on a 1 minute chart. But that system works much better than one that > >>> > back tests with less gain and the system does not even start to make > >>> > a consistent gain with a period under 15 minutes. Using hour charts > >>> > it is much better but no where near 200% a day the back tester shows. > >>> > > >>> > The problem is when you enter the real world, especially with auto > >>> > trading, whipsaw during sideways periods and during trend changes > >>> > will eat your lunch. Auto trading will come close to getting the > >>> > value of the close at the time the signal was generated by your > >>> > system. But there is slippage and that can be significant depending > >>> > on the buy/ask spread and the volatility of the market. You can't > >>> > predict what it will be. Don't even try! Even if you use a simple > >>> > button pushing auto trading system, where you hit the buy or sell > >>> > button when you see your signal, you can't hit the button fast enough > >>> > to simulate the price you get on the static chart. So your results > >>> > will not come close to your back test results. I REPEAT NOT EVEN > >>> > CLOSE!!! So it is a waste of time to do more than use back testing to > >>> > compare systems. Trying to predict what it will do in the real world > >>> > is deceitful, sheer folly, don't do it. > >>> > > >>> > Well that's my two cents worth. I am going back to sleep now. > >>> > > >>> > Cheers, > >>> > Barry > >>> > > >>> > --- In [email protected] <amibroker%40yahoogroups.com>, > >>> "Howard B" <howardbandy@> wrote: > >>> >> > >>> >> Hi Louis -- > >>> >> > >>> >> Perhaps write a simple loop? > >>> >> > >>> >> for (i=0; i<BarCount; i++) > >>> >> { > >>> >> // test to see if there was a Buy on this bar > >>> >> // and if there was, adjust BuyPrice > >>> >> if (Buy[i] == 1) > >>> >> { > >>> >> BuyPrice[i] = 1.01*BuyPrice[i]; > >>> >> } > >>> >> } > >>> >> > >>> >> Or am I missing something? > >>> >> > >>> >> Thanks, > >>> >> Howard > >>> >> > >>> >> > >>> >> > >>> >> > >>> >> On Tue, Jul 1, 2008 at 9:27 PM, tayamaan <tayamaan@> wrote: > >>> >> > >>> >>> Louis, you now assume your slippage to be 1%, which is a guess > >>> >>> anyways. It differs per situation what your system considers to be > >>> >>> the Buy/Sell Price and what you actually pay or get at the market. > >>> >>> These are still two different things. I wouln't know how to > >>> > calculate > >>> >>> the real slippage, all you can do is comparing the difference > >>> > over a > >>> >>> period of time and take some kind of average. > >>> >>> > >>> >>> Adrian > >>> >>> > >>> >>> --- In [email protected] <amibroker%40yahoogroups.com><amibroker% > >>> 40yahoogroups.com>, > >>> > Graham > >>> >>> <kavemanperth@> wrote: > >>> >>>> > >>> >>>> turn off the option of PriceBoundChecking in the Analyser > >>> > settings > >>> >>> of in the AFL > >>> >>>> > >>> >>>> SetOption( "PriceBoundChecking", 0 ); > >>> >>>> > >>> >>>> -- > >>> >>>> Cheers > >>> >>>> Graham Kav > >>> >>>> AFL Writing Service > >>> >>>> http://www.aflwriting.com > >>> >>>> > >>> >>>> > >>> >>>> 2008/7/2 Louis Préfontaine <rockprog80@>: > >>> >>>>> Hi, > >>> >>>>> > >>> >>>>> But is it possible to set the backtester to consider that the > >>> >>> buyprice was > >>> >>>>> let's say 1% higher than the Close on the bar the trade was > >>> > made? > >>> >>>>> > >>> >>>>> That's what I tried to do. If it's complicated, I can live > >>> > with > >>> >>> this (well, > >>> >>>>> I can at least try, since I believe I am still a beginner in > >>> >>> understanding > >>> >>>>> AFL), but I'd need to know if it is possible, and if yes, what > >>> >>> can be a good > >>> >>>>> start... > >>> >>>>> > >>> >>>>> Was I on the right track with > >>> >>>>> > >>> >>>>> SetTradeDelays( 1, 1, 1, 1 ); > >>> >>>>> BuyPrice = c*1.01; > >>> >>>>> SellPrice = c*0.99; > >>> >>>>> > >>> >>>>> Cause it does not work at all... > >>> >>>>> > >>> >>>>> Thanks again, > >>> >>>>> > >>> >>>>> Louis > >>> >>>>> > >>> >>>>> 2008/7/1 Graham <kavemanperth@>: > >>> >>>>>> > >>> >>>>>> Then you need to set out exactly what you need to do and > >>> > write > >>> >>> the afl to > >>> >>>>>> match > >>> >>>>>> It is all logical steps > >>> >>>>>> I do it by writing down all the restrictions and > >>> > possibilities > >>> >>> and > >>> >>>>>> what I need at the end and how I think is best way to achieve > >>> >>> this > >>> >>>>>> ......... in detail. There are no short cuts and can be very > >>> >>> tedious. > >>> >>>>>> I also more often than not write out a flow chart to map all > >>> >>>>>> decisions, inputs, outputs, calculations etc. > >>> >>>>>> > >>> >>>>>> -- > >>> >>>>>> > >>> >>>>>> Cheers > >>> >>>>>> Graham Kav > >>> >>>>>> AFL Writing Service > >>> >>>>>> http://www.aflwriting.com > >>> >>>>>> > >>> >>>>>> 2008/7/2 Louis Préfontaine <rockprog80@>: > >>> >>>>>>> Hi Adrian, > >>> >>>>>>> > >>> >>>>>>> Thanks for your suggestion. But still... How can I do > >>> > this? I > >>> >>> mean: I > >>> >>>>>>> want to be precise. With the kind of markets I am in and > >>> > what > >>> >>> I am > >>> >>>>>>> trying > >>> >>>>>>> to do, precision is very important... I need to be able to > >>> > set > >>> >>> a > >>> >>>>>>> particular % adjustment for particular situations... > >>> >>>>>>> > >>> >>>>>>> Louis > >>> >>>>>>> > >>> >>>>>>> 2008/7/1 tayamaan <tayamaan@>: > >>> >>> > >>> >>>>>>>> > >>> >>>>>>>> Hi, if you would really like to try to compensate for > >>> >>> slippage, > >>> >>>>>>>> adding this to your commissions as part of your > >>> > transaction > >>> >>> costs is > >>> >>>>>>>> perhaps an idea. > >>> >>>>>>>> > >>> >>>>>>>> Adrian > >>> >>>>>>>> > >>> >>>>>>>>> Hi Graham, > >>> >>>>>>>>> > >>> >>>>>>>>> How can I put more information so that my buy price is > >>> > 1% > >>> >>> higher > >>> >>>>>>>> than C and > >>> >>>>>>>>> sell price 1% lower than C? > >>> >>>>>>>>> > >>> >>>>>>>>> Thanks, > >>> >>>>>>>>> > >>> >>>>>>>>> Louis > >>> >>>>>>>>> > >>> >>>>>>>>> 2008/7/1 Graham <kavemanperth@>: > >>> >>>>>>>>> > >>> >>>>>>>>>> Without more information on what you are trying to > >>> > achieve > >>> >>>>>>>>>> The price will be for the bar of actual entry C*1.01 > >>> > or > >>> >>> C*0.99 > >>> >>>>>>>>>> > >>> >>>>>>>>>> Also the prices may be outside than the bar range in > >>> >>> which case > >>> >>>>>>>> the > >>> >>>>>>>>>> closer of high or low is used if you have the > >>> >>> PriceBoundChecking > >>> >>>>>>>> on > >>> >>>>>>>>>> > >>> >>>>>>>>>> -- > >>> >>>>>>>>>> Cheers > >>> >>>>>>>>>> Graham Kav > >>> >>>>>>>>>> AFL Writing Service > >>> >>>>>>>>>> http://www.aflwriting.com > >>> >>>>>>>>>> > >>> >>>>>>>>>> 2008/7/1 Louis Préfontaine <rockprog80@ <rockprog80% > >>> >>>>>>>> 40gmail.com> > >>> >>>>>>>>>>> : > >>> >>>>>>>>>> > >>> >>>>>>>>>>> Hi, > >>> >>>>>>>>>>> > >>> >>>>>>>>>>> I have been trying to set a formula for slippage: > >>> >>>>>>>>>>> > >>> >>>>>>>>>>> SetTradeDelays( 1, 1, 1, 1 ); > >>> >>>>>>>>>>> > >>> >>>>>>>>>>> BuyPrice = C*1.01; > >>> >>>>>>>>>>> SellPrice = C*0.99; > >>> >>>>>>>>>>> > >>> >>>>>>>>>>> It doesn't work at all. I tried to write C*50 just > >>> > for > >>> >>> fun, but > >>> >>>>>>>> it didn't > >>> >>>>>>>>>>> change the buyprice at all. What can possibly be > >>> > wrong? > >>> >>>>>>>>>>> > >>> >>>>>>>>>>> Thanks, > >>> >>>>>>>>>>> > >>> >>>>>>>>>>> Louis > >>> >>>> > >>> >>> > >>> >>> > >>> >>> > >>> >> > >>> > > >>> > > >>> > > >>> > ------------------------------------ > >>> > > >>> > Please note that this group is for discussion between users only. > >>> > > >>> > To get support from AmiBroker please send an e-mail directly to > >>> > SUPPORT {at} amibroker.com > >>> > > >>> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG: > >>> > http://www.amibroker.com/devlog/ > >>> > > >>> > For other support material please check also: > >>> > http://www.amibroker.com/support.html > >>> > Yahoo! Groups Links > >>> > > >>> > > >>> > > >>> > >>> > >> > > > > >
