[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Help on Debugging this If-Else Loop



PureBytes Links

Trading Reference Links

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 <zoopfree@xxxxxxxxxxx>:
> 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 amibroker@xxxxxxxxxxxxxxx, Graham <kavemanperth@xxx> 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@xxx>:
>> > 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: amibroker@xxxxxxxxxxxxxxx
>> > 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;
>> >
>> >
>> > }
>> >
>>
>
>
>
> ------------------------------------
>
> 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
>
>
>
>

------------------------------------

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

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/