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

Re: [amibroker] Help with formula


  • Date: Sat, 23 Jan 2010 19:41:30 +0100
  • From: "Edward Pottasch" <empottasch@xxxxxxxxx>
  • Subject: Re: [amibroker] Help with formula

PureBytes Links

Trading Reference Links



ah yes I see. That shows there are many ways to solve a problem. Will be interesting if someone can solve it using array logic only.
 
rgds, Ed
 
 
 
----- Original Message -----
Sent: Saturday, January 23, 2010 6:58 PM
Subject: Re: [amibroker] Help with formula

 

Aron,
 
THANK YOU....that did it....I just could not see it...
 
Anthony
 
 
----- Original Message -----
From: Aron
Sent: Saturday, January 23, 2010 12:44 PM
Subject: Re: [amibroker] Help with formula

 

Ah,
your increment rule overwrites the reset rule. It should be:

if(posshort && !Sell[i])
    {
        if(C[i] < C[i-1])
        CumCst[i] = CumCst[i-1] + 0.003;
        else
        CumCst[i] = CumCst[i-1];
    }
    if(poslong && !Buy[i])
    {
        if(C[i] > C[i-1])
        CumCst[i] = CumCst[i-1] + 0.003;
        else
        CumCst[i] = CumCst[i-1];
    }


On 1/23/2010 6:24 PM, Anthony Faragasso wrote:

Aron,
 
I did what you suggested...but it just stays at 0.13 does not re-set or increment .
 
Here is what I have:
 

Buy=Cross(C,EMA(C,19));

Sell=Cross(EMA(C,19),C) ;

CumCst=0.00;

poslong=0;

posshort=0;

for (i=1; i < BarCount; i++)

{

if(Buy[i])

{

poslong=1;

posshort=0;

CumCst[i]=0.10;

}

if(Sell[i])

{

poslong=0;

posshort=1;

CumCst[i]=0.10;

}

 

if(posshort)

{

if(C[i] < C[i-1])

CumCst[i] = CumCst[i-1] + 0.003;

else

CumCst[i] = CumCst[i-1];

}

if(poslong)

{

if(C[i] > C[i-1])

CumCst[i] = CumCst[i-1] + 0.003;

else

CumCst[i] = CumCst[i-1];

}

if(CumCst[i] > 0.13)

CumCst[i] = 0.13;

}

per=19;

Smth=2/(per+1)+CumCst;

MovAvg=AMA(C,Smth);

Plot(movavg,"",colorBlue,1);

Plot(C,"",1,64);

 

PlotShapes(Buy*shapeUpArrow,colorGreen,0,L,-20);

PlotShapes(Sell* shapeDownArrow,colorRed,0,H,-20);

Title="cumulative value = "+WriteVal(Cumcst,1.3);

----- Original Message -----
From: Aron
Sent: Saturday, January 23, 2010 12:16 PM
Subject: Re: [amibroker] Help with formula [1 Attachment]

 

With the correction "==" to "=" your code works as it should.
remove it from the chart window and "apply indicator" again.


On 1/23/2010 4:34 PM, Anthony Faragasso wrote:

Ed,
 
Thank you...The code below is doing what is supposed to happen...still
curious what is wrong with the formula I posted...any ideas ?
 
Anthony
 
----- Original Message -----
Sent: Saturday, January 23, 2010 8:19 AM
Subject: Re: [amibroker] Help with formula

 
have a look at code below Anthony. I guess it could be programmed using arrays only, not sure,
 
regards, Ed
 
 
 
function cccc(Buy,Sell)
{

CumCst =
Null
;

for (i = 1; i < BarCount
; i++)
{

   
if(Buy
[i])
   {

      CumCst[i]=
0.10
;

      
for (j = i + 1; j < BarCount
; j++)
      {
      
         
if (Sell
[ j ] )
         {
            i = j -
1
;
            
break
;
            
         }      
         
else if(C[j] > C[j-1
])
         {
         
            CumCst[j] =
Min(CumCst[j-1] + 0.003,0.13
);
         
         }
         
else if(C[j] <= C[j-1
])
         {
         
            CumCst[j] = CumCst[j-
1
];         
         
         }
         
else if (j == BarCount - 1
)
         {
                        
            i =
BarCount
;
            
break
;
                        
         }
      
      }

   }
   
else if(Sell
[i])
   {

      CumCst[i]=
0.10
;

      
for (j = i + 1; j < BarCount
; j++)
      {
      
         
if (Sell
[ j ] )
         {
            i = j -
1
;
            
break
;
            
         }      
         
else if(C[j] < C[j-1
])
         {
         
            CumCst[j] =
Min(CumCst[j-1] + 0.003,0.13
);
         
         }
         
else if(C[j] >= C[j-1
])
         {
         
            CumCst[j] = CumCst[j-
1
];         
         
         }
         
else if (j == BarCount - 1
)
         {
                        
            i =
BarCount
;
            
break
;
                        
         }
      
      }

   }   

}

return
CumCst;

}

Buy=Cross(C,EMA(C,19
));
Sell=Cross(EMA(C,19),C
) ;

CumCst = cccc(
Buy,Sell
);

per=
19
;
Smth =
2/(per+1
)+CumCst;

MovAvg =
AMA(C
,Smth);

Plot(movavg,"",colorBlue,1
);
Plot(C,"",1,64
);

PlotShapes(Buy*shapeUpArrow,colorGreen,0,L,-20
);
PlotShapes(Sell* shapeDownArrow,colorRed,0,H,-20
);

Title="cumulative value = "+WriteVal(Cumcst,1.3);
 
 
 
----- Original Message -----
Sent: Saturday, January 23, 2010 1:47 PM
Subject: Re: [amibroker] Help with formula

 

Keith,
 
Have you tried the formula ? I made the adjustments as you stated still does not work...although
I had them the way you suggested earlier...I have been trying but something is not working properly.
 
Description:
When there is a new buy or sell signal the cumCst will reset to 0.10 and increment by 0.003
until it gets to a maximum of 0.13, this is not happening with the formula below....I can not
see the error, can anyone ?
 
Here is the complete formula
 

Buy=Cross(C,EMA(C,19));

Sell=Cross(EMA(C,19),C) ;

CumCst=0.00;

poslong=0;

posshort=0;

for (i=1; i < BarCount; i++)

{

if(Buy[i])

{

poslong=1;

posshort=0;

CumCst[i]=0.10;

}

if(Sell[i])

{

poslong=0;

posshort=1;

CumCst[i]=0.10;

}

 

if(posshort)

{

if(C[i] < C[i-1])

CumCst[i] = CumCst[i-1] + 0.003;

else

CumCst[i] = CumCst[i-1];

}

if(poslong)

{

if(C[i] > C[i-1])

CumCst[i] = CumCst[i-1] + 0.003;

else

CumCst[i] = CumCst[i-1];

}

if(CumCst[i] > 0.13)

CumCst[i] = 0.13;

}

per=19;

Smth=2/(per+1)+CumCst;

MovAvg=AMA(C,Smth);

Plot(movavg,"",colorBlue,1);

Plot(C,"",1,64);

 

PlotShapes(Buy*shapeUpArrow,colorGreen,0,L,-20);

PlotShapes(Sell* shapeDownArrow,colorRed,0,H,-20);

Title="cumulative value = "+WriteVal(Cumcst,1.3);

----- Original Message -----
Sent: Saturday, January 23, 2010 1:37 AM
Subject: Re: [amibroker] Help with formula

 

Anthony --

I have added comments to your code below:
// Anthony.afl

Buy=Cross(C,EMA(C,19));
Sell=Cross(EMA(C,19),C) ;
CumCst=0.00;
poslong=0;
posshort=0;
for (i=1; i < BarCount; i++)
{
    if(Buy[i])
    {
    poslong==1;    // == doesn't set poslong to 1, it stays 0
    posshort==0;   //  use = to set value
    CumCst[i]=0.10;
    }

    if(Sell[i])
    {
        poslong==0;
        posshort==1;    // == doesn't set posshort to 1, it stays 0
        CumCst[i]=0.10; 
//  use = to set value
    }

    if(posshort) // posshort is 0 and code below is never executed
    {
        if(C[i] < C[i-1])
            CumCst[i] = CumCst[i-1] + 0.003;
        else
            CumCst[i] = CumCst[i-1];
    }

    if(poslong) // poslong is 0 and code below is never executed
    {
        if(C[i] > C[i-1])
            CumCst[i] = CumCst[i-1] + 0.003;
        else
            CumCst[i] = CumCst[i-1];
    }

 
Keith,
 
Thanks...but that does not seem to be the problem..when there is a signal
buy or sell...cumCST starts at 0.10 and increments by 0.003 as per the
formula...that is not happening....it must be something else
 
Anthony
 
 
 
 
----- Original Message -----
Sent: Friday, January 22, 2010 10:35 PM
Subject: Re: [amibroker] Help with formula

 

In four places you used == where you should have used >
Anthony Faragasso wrote:

 

Hello,

Could someone look at this please...I can not see the error...

The cumCST should increment up to .13 but it is not happening..

 

Thank you

Anthony

 

Buy=Cross(C,EMA(C,19));

Sell=Cross(EMA(C,19),C) ;

CumCst=0.00;

poslong=0;

posshort=0;

for (i=1; i < BarCount; i++)

{

if(Buy[i])

{

poslong==1;

posshort==0;

CumCst[i]=0.10;

}

if(Sell[i])

{

poslong==0;

posshort==1;

CumCst[i]=0.10;

}

 

if(posshort)

{

if(C[i] < C[i-1])

CumCst[i] = CumCst[i-1] + 0.003;

else

CumCst[i] = CumCst[i-1];

}

if(poslong)

{

if(C[i] > C[i-1])

CumCst[i] = CumCst[i-1] + 0.003;

else

CumCst[i] = CumCst[i-1];

}

if(CumCst[i] >= 0.13)

CumCst[i] = 0.13;

}

per=19;

Smth=2/(per+1)+CumCst;

MovAvg=AMA(C,Smth);

Plot(movavg,"",colorBlue,1);

Plot(C,"",1,64);

 

PlotShapes(Buy*shapeUpArrow,colorGreen,0,L,-20);

PlotShapes(Sell* shapeDownArrow,colorRed,0,H,-20);

Title="cumulative value = "+WriteVal(Cumcst,1.3);





__._,_.___


**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___