Quote:
Originally Posted by newdigital
Just found one thread with EA here 3cci ea
|
Newdigital,
Sorry to disturb you. can you please assist me finetune this ea. it works for cci. but problem is when it should open buy it will open sell and vice versa. however, i could see it has a promising use for me, this is why i come to you as an expert to help me look at the ea,
*********************
//+------------------------------------+
//| Expert Framework |
//+------------------------------------+
#property copyright ""
#property link ""
// User Input
extern double Lots = 0.01;
extern int TakeProfit=25;
extern int StopLoss=0;
extern int Interval=1;
extern int myCCIs=30; // 5 days
extern int myCCIl=150; // 25 days
// Global scope
double barmove0 = 0;
double barmove1 = 0;
int itv = 0;
double Poin;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//|------------------------------------------------------------------|
int init()
{
//Checking for unconvetional Point digits number
if (Point == 0.00001) Poin = 0.0001; //5 digits
else if (Point == 0.001) Poin = 0.01; //3 digits
else Poin = Point; //Normal
itv=Interval;
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
bool found=false;
bool rising=false;
bool falling=false;
bool cross=false;
double slA=0, slB=0, tpA=0, tpB=0;
double p=Poin;
double cCIs;
double cCIm;
double cCIf;
int cnt=0;
// Error checking
if(AccountFreeMargin()<(1000*Lots)) {Print("-----NO MONEY"); return(0);}
if(Bars<100) {Print("-----NO BARS "); return(0);}
if(barmove0==Open[0] && barmove1==Open[1]) { return(0);}
// bars moved, update current position
barmove0=Open[0];
barmove1=Open[1];
// interval (bar) counter
// used to pyramid orders during trend
itv++;
// since the bar just moved
// calculate TP and SL for (B)id and (A)sk
tpA=Ask+(p*TakeProfit);
slA=Ask-(p*StopLoss);
tpB=Bid-(p*TakeProfit);
slB=Bid+(p*StopLoss);
if (TakeProfit==0) {tpA=0; tpB=0;}
if (StopLoss==0) {slA=0; slB=0;}
// get CCI based on OPEN
cCIs=iCCI(Symbol(),0,125,PRICE_OPEN,0);
cCIm=iCCI(Symbol(),0, 25,PRICE_OPEN,0);
cCIf=iCCI(Symbol(),0, 5,PRICE_OPEN,0);
// is it crossing zero up or down
if (cCIm<=0 && cCIs>=0 && cCIf>0) { rising=true; cross=true; Print("Rising Cross");}
if (cCIm>=0 && cCIs<=0 && cCIf<0) {falling=true; cross=true; Print("Falling Cross");}
// close then open orders based on cross
// pyramid below based on itv
if (cross)
{
// Close ALL the open orders
for(cnt=OrdersTotal();cnt>0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if (OrderType()==0) {OrderClose(OrderTicket(),Lots,Bid,3,White);}
if (OrderType()==1) {OrderClose(OrderTicket(),Lots,Ask,3,Red);}
itv=0;
}
}
// Open new order based on direction of cross
if (rising) OrderSend(Symbol(),OP_BUY,Lots,Ask,3,slA,tpA,"ZZZ1 00",11123,0,White);
if (falling) OrderSend(Symbol(),OP_SELL,Lots,Bid,3,slB,tpB,"ZZZ 100",11321,0,Red);
// clear the interval counter
itv=0;
}
// Only pyramid if order already open
found=false;
for(cnt=OrdersTotal();cnt>0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if (OrderType()==0) //BUY
{
if (itv >= Interval)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,slA,tpA,"ZZZ1 00",11123,0,White);
itv=0;
}
}
if (OrderType()==1) //SELL
{
if (itv >= Interval)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,slB,tpB,"ZZZ 100",11321,0,Red);
itv=0;
}
}
found=true;
break;
}
}
return(0);
}
*********************
and the code -- that appears to be the right way for the ea to operate, but dont know how to code it into the ea.
**************
{==Variable Setup}
Var: vCCI(0);vCCI=CCI(14); {Or 20 as you like.}
Var: LSMA(0);LSMA=LinearRegValue(C,25,0);
Var: EMA34(0);EMA34=Xaverage(C,34)
Var: ExitTrail(0),ExitValue(0),ExitReason("None"); {Used for exit}
{==ZLRs Entry}
If 1=1
and vCCI[1]>=0 and vCCI[2]>0 and vCCI[3]>0 and vCCI[4]>0 and vCCI[5]>0 {6 bars Above Zero}
and Highest(vCCI,5)>=100 {Comes from outside 100s -- Also - no chop mode}
and vCCI[1]<100 {Pulled back inside 100s}
and vCCI>vCCI[1] and vCCI[2]>vCCI[1] {Hook}
and vCCI<130 {Not oversold}
and vCCI-vCCI[1]>5 {Strong V -- Optional, adjust as you wish.}
and C>EMA34 and EMA34>EMA34[1] {Close above rising 34EMA}
and C>LSMA and LSMA>LSMA[1] {Close above rising LSMA}
Then Begin
Buy ("ZLR") This Bar at close;
End;
{==1st Hook Exit}
{You will notice that the trailing routine exits at the ExitValue-.0005}
{You can change the .0005 to a higher or lower value to let your trades breathe.}
{You can also change it to exit AT MARKET if you just want to exit at 1st hook immediately.}
If MarketPosition=1 and vCCI<vCCI[1] Then Begin ExitValue=L; ExitTrail=1; ExitReason="Hook"; End;
If vCCI>vCCI[1] then ExitTrail=0; {Hooked back, Turn off, keep going.}
{==Trailing Routine}
If ExitTrail=1 and MarketPosition=1 then sell ("eXit") next bar at ExitValue-.0005 stop;
*****************
i send with it. the code shows how to trade cci, but i dont know how to incorporate it into the ea to work better.
regards,
your student.
ay