I will add one other item to this If you are entering your trade with one bar delay then you need to include this to find the buyprice SellPrice > valuewhen(ref(buy,-1),BuyPrice + 10);
-- Cheers Graham Kav AFL Writing Service http://www.aflwriting.com 2008/7/11 ozzyapeman <[EMAIL PROTECTED]>: > Graham, very helpful post. Thank you very much. I will continue to study. > > I haven't programmed for about twenty years, so it's taking me some > time to regain my footing on basic stuff. But the rework of my code > that you so kindly performed will allow me to make solid strides over > the next few weeks. > > > --- In [email protected], Graham <[EMAIL PROTECTED]> wrote: >> >> Buyprice, sellprice, shortprice and coverprice are arrays and have a >> value in every bar according to how they are defined >> eg Buyprice = O; means it is Open price in every bar >> >> you can use valuewhen(buy,buyprice) >> but if buy has many bars where it is true, even after entry then you >> are just referencing the most recent bar where it is true >> In this even exrem cannot help as it is only effective after it is used >> >> Buy = (myMA1 > MyMA2); means every bar that myMA1 is greater than >> MyMA2 gives buy==true >> You can use Cross(myMA1, MyMA2) to overcome the defficiency of using a >> straight > for the condition. >> Provided the ultimate Sell is reverse Cross(myMA2, MyMA1) then you can >> use the valuewhen as above because you would never get a true buy >> result when inside a trade >> >> Also be extremely careful with exit conditions, because if you do not >> get all conditions true then an exit may never occur, ie >> Sell = FastMA < SlowMA AND SellPrice > (BuyPrice + 10); >> what happens if the array you have defined as sellprice never gets >> above the (BuyPrice + 10)? It would not matter what happens to the >> MA's as the price has not recovered. You couyld be in the trade for >> years waiting for the price to recover to above the entry price >> Even changing to Sell = FastMA < SlowMA AND SellPrice > valuewhen(buy, >> BuyPrice + 10); will not help >> Also consider if you defined both buyprice and sellprice as Open, then >> a straight SellPrice > (BuyPrice+10) as both would be equal for every >> bar, like saying Open > Open+10, can never happen >> >> Of course if you have a stop loss defined then OK, exit will happen >> and your Sell would only be needed for a profitable exit >> >> Hard to express everything within 5 minutes I allot as a full >> explanation of the problems and what to look for would take pages, if >> not a book on designing trading systems in required computer logic >> >> >> -- >> Cheers >> Graham Kav >> AFL Writing Service >> http://www.aflwriting.com >> >> >> 2008/7/11 ozzyapeman <[EMAIL PROTECTED]>: >> > Thanks Graham. I think this does the trick. Much appreciated. >> > >> > If you have a chance, can you spot the logic flaw as to why my mod to >> > Prashanth's code in this same thread does not work? That one does not >> > use loops and looks much simpler. But if there is a reason why it >> > can't work in that format, I'll just stick with the more complex >> > looping and develop that. >> > >> > >> > --- In [email protected], Graham <kavemanperth@> wrote: >> >> >> >> Here is an approach from your code with some changes to make it > follow >> >> logic to me, and ensure variables are correctly initiated >> >> >> >> SetTradeDelays( 1, 1, 1, 1 ); >> >> >> >> Sell = Cover = 0; >> >> BuyPrice = SellPrice = ShortPrice = CoverPrice = O; >> >> >> >> myMA1 = MA(C,10); >> >> MyMA2 = MA(C,100); >> >> >> >> Buy = (myMA1 > MyMA2); >> >> Short = (myMA1 < MyMA2); >> >> >> >> inBuy = inShort = 0; >> >> ValueAtBuy = ValueAtShort = Null; >> >> >> >> >> >> for( i = 0; i < BarCount; i++ ) >> >> { >> >> if(myMA1[i]<MyMA2[i] AND inBuy AND C[i]>(ValueAtBuy + 0.0010) ) >> >> { >> >> Sell[i] = 1; >> >> inBuy= 0; >> >> ValueAtBuy = Null; >> >> } >> >> if(myMA1[i]>MyMA2[i] AND inShort AND C[i]<(ValueAtShort - 0.0010) ) >> >> { >> >> Cover[i] = 1; >> >> inShort = 0; >> >> ValueAtShort = Null; >> >> } >> >> >> >> if(inBuy) Buy[i] = 0; >> >> if(inShort) Short[i] = 0; >> >> >> >> if( inBuy==0 AND Buy[i] ) >> >> { >> >> inBuy= 1; >> >> ValueAtBuy = C[i]; >> >> } >> >> if( inShort==0 AND Short[i] ) >> >> { >> >> inShort = 1; >> >> ValueAtShort = C[i]; >> >> } >> >> } >> >> >> >> >> >> -- >> >> Cheers >> >> Graham Kav >> >> AFL Writing Service >> >> http://www.aflwriting.com >> >> >> >> 2008/7/11 Prashanth <prash454.ta@>: >> >> > I am not sure you require loops to do what you are looking for. >> >> > >> >> > >> >> > SlowMA = MA(C,20); >> >> > >> >> > FastMA = MA(C,5); >> >> > >> >> > Buy >> >> > >> >> > = FastMA > SlowMA ; >> >> > >> >> > Sell >> >> > >> >> > = Cross(SlowMA , FastMA) OR SellPrice > (BuyPrice + 10); >> >> > >> >> > Short >> >> > >> >> > = FastMA < SlowMA; >> >> > >> >> > Cover >> >> > >> >> > = Cross(FastMA, SlowMA) OR CoverPrice < (ShortPrice - 10); >> >> > >> >> > Instead of AND, I have used OR since both Crossover and Price >> > being above 10 >> >> > pips cannot happen simultaneously. >> >> > >> >> > Cheers >> >> > >> >> > Prashanth >> >> > >> >> > >> >> > >> >> > ----- Original Message ----- >> >> > From: ozzyapeman >> >> > To: [email protected] >> >> > Sent: Friday, July 11, 2008 3:09 AM >> >> > Subject: [amibroker] Re: Help on Debugging this If-Else Loop >> >> > Still toying around with this and still can't get it to work. I >> > just can't >> >> > seem to figure out how to specify the current price. Thought > that the >> >> > ValueWhen function might be able to help. >> >> > >> >> > All I'm trying to achieve is this very simple test system, for > Forex >> >> > Intraday: >> >> > >> >> > 1. Buy Long position when the fast MA is above the slow MA >> >> > 2. Sell the Long position when the fast MA falls below the slow >> > MA, AND >> >> > the current price is at least 10 pips higher than the original >> > entry price. >> >> > >> >> > 3. Enter Short position when fast MA is below the slow MA >> >> > 4. Sell the Short position when the fast MA rises above the slow >> > MA, AND >> >> > the current price is at least 10 pips lower than the original >> > entry price. >> >> > Code below. Anyone? >> >> > >> >> > >> >> > >> >> > Buy = (myMA1 > MyMA2); >> >> > Short = (myMA1 < MyMA2); >> >> > >> >> > PriceAtBuy = 0; >> >> > PriceAtShort = 0; >> >> > >> >> > for( i = 0; i < BarCount; i++ ) >> >> > { >> >> > if( PriceAtBuy == 0 AND Buy[ i ] ) >> >> > { >> >> > PriceAtBuy = Buy[ i ]; >> >> > ValueAtBuy = ValueWhen(Buy[i]>0,C,1); >> >> > } >> >> > >> >> > if( PriceAtShort == 0 AND Short[ i ] ) >> >> > { >> >> > PriceAtShort = ShortPrice[ i ]; >> >> > ValueAtShort = ValueWhen(Short[i]>0,C,1); >> >> > } >> >> > >> >> > >> >> > if( >> >> > (myMA1[i] < MyMA2[i]) AND (PriceAtBuy > 0) AND (C[i] > >> >> > (ValueAtBuy[i] + 0.0010)) >> >> > ) >> >> > { >> >> > Sell[ i ] = 1; >> >> > PriceAtBuy = 0; >> >> > >> >> > } >> >> > else >> >> > Sell[ i ] = 0; >> >> > >> >> > if( >> >> > (myMA1[i] > MyMA2[i]) AND (PriceAtShort > 0) AND (C[i] < >> >> > (ValueAtShort[i] - 0.0010)) >> >> > ) >> >> > { >> >> > Cover[ i ] = 1; >> >> > PriceAtShort = 0; >> >> > } >> >> > else >> >> > Cover[ i ] = 0; >> >> > >> >> > >> >> > } >> >> > >> >>
