CCI Arrows - Page 2 - Forex Forum - EarnForex
Forex Forum - EarnForex
Serving Traders Since 2005
 

Go Back   Forex Forum - EarnForex > MetaTrader > MetaTrader Indicators

MetaTrader Indicators Post and discuss the MetaTrader indicators here.

Reply
 
LinkBack Thread Tools Display Modes
  #11 (permalink)  
Old 21st December 2009, 07:29
Enivid's Avatar
Administrator
 
Join Date: Nov 2008
Posts: 2,075
Thanks: 71
Thanked 109 Times in 66 Posts
Default

Do you see the value on the chart, but it doesn't make sense? What kind of values do you see?
Reply With Quote
  #12 (permalink)  
Old 21st December 2009, 07:47
Default Avatar
Member
 
Join Date: Dec 2009
Posts: 31
Thanks: 0
Thanked 0 Times in 0 Posts
Default

Quote:
Originally Posted by Enivid View Post
Do you see the value on the chart, but it doesn't make sense? What kind of values do you see?
There are displayed various switching values, which do not match the current true readings of the standard CCI indicator in MT5.
The arrows are displayed correctly though when the zero-line is crossed.

If I do the same in MT4, it works correctly.
Reply With Quote
  #13 (permalink)  
Old 21st December 2009, 08:09
Enivid's Avatar
Administrator
 
Join Date: Nov 2008
Posts: 2,075
Thanks: 71
Thanked 109 Times in 66 Posts
Default

I can't say much without seeing a screenshot, but I see 2 potential problems in your code:

1. If you call that code in OnCalculate() function then you create an object each tick. Do you delete it each tick? It's better to create it only once and then only change the displayed value.

2. You have a variable containing current CCI value and the object with the same name - myCCInow. Ideally that shouldn't be a problem, but maybe it's the cause?
Reply With Quote
  #14 (permalink)  
Old 21st December 2009, 08:20
Default Avatar
Member
 
Join Date: Dec 2009
Posts: 31
Thanks: 0
Thanked 0 Times in 0 Posts
Default

Quote:
Originally Posted by Enivid View Post
I can't say much without seeing a screenshot, but I see 2 potential problems in your code:

1. If you call that code in OnCalculate() function then you create an object each tick. Do you delete it each tick? It's better to create it only once and then only change the displayed value.

2. You have a variable containing current CCI value and the object with the same name - myCCInow. Ideally that shouldn't be a problem, but maybe it's the cause?
Thanks for the advice. I changed the name of the objact and the position of the inserted code, it's now inside on the OnCalculate but directly above the

...
return(rates_total);
...

line.

Works now properly as far as I see it.
Reply With Quote
  #15 (permalink)  
Old 21st December 2009, 08:58
Enivid's Avatar
Administrator
 
Join Date: Nov 2008
Posts: 2,075
Thanks: 71
Thanked 109 Times in 66 Posts
Default

I think that you can greatly reduce the indicator's load by placing this part of the code in the OnInit() function:

ObjectCreate(0, "myCCInow", OBJ_LABEL, 0, 0, 0);
ObjectSetString(0, "myCCInow", OBJPROP_FONT, font_face);
ObjectSetInteger(0, "myCCInow", OBJPROP_FONTSIZE, font_size);
ObjectSetInteger(0, "myCCInow", OBJPROP_COLOR, White);
ObjectSetInteger(0, "myCCInow", OBJPROP_CORNER, corner);
ObjectSetInteger(0, "myCCInow", OBJPROP_XDISTANCE, 1+distance_x);
ObjectSetInteger(0, "myCCInow", OBJPROP_YDISTANCE, 1+distance_y);

And this one leave in the OnCalculate():

ObjectSetString(0, "myCCInow", OBJPROP_TEXT,"CCI @ "+DoubleToString(myCCInow,1));
Reply With Quote
  #16 (permalink)  
Old 21st December 2009, 09:12
Default Avatar
Member
 
Join Date: Dec 2009
Posts: 31
Thanks: 0
Thanked 0 Times in 0 Posts
Default

Quote:
Originally Posted by Enivid View Post
I think that you can greatly reduce the indicator's load by placing this part of the code in the OnInit() function:

ObjectCreate(0, "myCCInow", OBJ_LABEL, 0, 0, 0);
ObjectSetString(0, "myCCInow", OBJPROP_FONT, font_face);
ObjectSetInteger(0, "myCCInow", OBJPROP_FONTSIZE, font_size);
ObjectSetInteger(0, "myCCInow", OBJPROP_COLOR, White);
ObjectSetInteger(0, "myCCInow", OBJPROP_CORNER, corner);
ObjectSetInteger(0, "myCCInow", OBJPROP_XDISTANCE, 1+distance_x);
ObjectSetInteger(0, "myCCInow", OBJPROP_YDISTANCE, 1+distance_y);

And this one leave in the OnCalculate():

ObjectSetString(0, "myCCInow", OBJPROP_TEXT,"CCI @ "+DoubleToString(myCCInow,1));

Yes, you are right, this is even better.
Thanks.
Reply With Quote
  #17 (permalink)  
Old 6th February 2010, 10:39
Default Avatar
Member
 
Join Date: Dec 2009
Posts: 31
Thanks: 0
Thanked 0 Times in 0 Posts
Default

is it possible to get the arrows from the calculation based on another timeframe.

i.e. can I have access to CCI values of other timeframes by writing

int myCCI = iCCI(NULL,TimeFrame, CCI_Period, PRICE_TYPICAL);


?????
Reply With Quote
  #18 (permalink)  
Old 6th February 2010, 22:19
Enivid's Avatar
Administrator
 
Join Date: Nov 2008
Posts: 2,075
Thanks: 71
Thanked 109 Times in 66 Posts
Default

Yes, why not?
__________________
Please, read the Forum Rules and the Signature Rules to avoid termination of your account.
Reply With Quote
  #19 (permalink)  
Old 7th February 2010, 09:38
Default Avatar
Member
 
Join Date: Dec 2009
Posts: 31
Thanks: 0
Thanked 0 Times in 0 Posts
Default

Quote:
Originally Posted by Enivid View Post
Yes, why not?
Thanks for the reply

I tried a multitimeframeversion of this indicator

my code is as follows

Quote:
//+------------------------------------------------------------------+
//| CCI Arrows |
//| Copyright © 2009, EarnForex |
//| http://www.earnforex.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, EarnForex"
#property link "http://www.earnforex.com"
#property version "1.01"
#property description "CCI Arrows - direct trading signals based on CCI indicator."
#property description "Displays red and blue arrows for Short and Long signals."

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2

#property indicator_color1 Red
#property indicator_type1 DRAW_ARROW
#property indicator_style1 STYLE_SOLID
#property indicator_width1 5

#property indicator_color2 Lime
#property indicator_type2 DRAW_ARROW
#property indicator_style2 STYLE_SOLID
#property indicator_width2 5



input ENUM_TIMEFRAMES TimeFrame = PERIOD_H4;
input double Arrow_Offset=20.0;


input double UpLevel=100;
input double DnLevel=-100;


double myCCInow;

double dUpCCIBuffer[];
double dDownCCIBuffer[];

input int CCI_Period = 21; //This value sets the CCI Period Used, The default is 21

int myCCI;
double CCIBuffer[];
double mtf_CCIBuffer[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+

void OnInit()
{
IndicatorSetString(INDICATOR_SHORTNAME, "CCI_Arrows(" + IntegerToString(CCI_Period) + ")");

//---- indicator buffers mapping

SetIndexBuffer(0, dUpCCIBuffer, INDICATOR_DATA);
SetIndexBuffer(1, dDownCCIBuffer, INDICATOR_DATA);

//---- drawing settings


PlotIndexSetInteger(0, PLOT_ARROW, 115);//233
// PlotIndexSetInteger(0, PLOT_ARROW_SHIFT, -Arrow_Offset);
PlotIndexSetString(0, PLOT_LABEL, "CCI Buy");

PlotIndexSetInteger(1, PLOT_ARROW, 115);//234
// PlotIndexSetInteger(1, PLOT_ARROW_SHIFT, Arrow_Offset);
PlotIndexSetString(1, PLOT_LABEL, "CCI Sell");



myCCI = iCCI(NULL,TimeFrame, CCI_Period, PRICE_TYPICAL);

}

//+------------------------------------------------------------------+
//| Custom CCI Arrows |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &High[],
const double &Low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])



{

//--------------------
datetime TimeArray[];


CopyTime(Symbol(), TimeFrame, 0, rates_total, TimeArray);
int shift, limit, y;

if(BarsCalculated(myCCI) < rates_total) return(0);

//--- we can copy not all data
int to_copy;
if(prev_calculated > rates_total || prev_calculated < 0) {
to_copy = rates_total;
}
else {
to_copy = rates_total-prev_calculated;
if(prev_calculated > 0)
to_copy++;
}

if(CopyBuffer(myCCI, 0, 0, rates_total, mtf_CCIBuffer) <= 0) {
Print("Getting MA buff failed! Error", GetLastError());
return(0);
}

for(int i=0, y=0; i<limit; i++) {
if (time[i] < TimeArray[y])
y++;

CCIBuffer[i] = mtf_CCIBuffer[y];

}


//--------------------


ArraySetAsSeries(High, true);
ArraySetAsSeries(Low, true);


for (int i = rates_total; i > 1; i--)
{
dUpCCIBuffer[rates_total - i + 1] = 0;
dDownCCIBuffer[rates_total - i + 1] = 0;

myCCInow = CCIBuffer[rates_total - i + 1];

double myCCI2 = CCIBuffer[rates_total - i]; //CCI One bar ago

//---

if (myCCInow >= 0) //is going long
{
if((myCCInow > 0) && (myCCI2 < 0)) //did it cross from below 50
{
dUpCCIBuffer[rates_total - i + 1] = Low[i] - 2 * _Point*Arrow_Offset; //
}
}

if (myCCInow < 0) //is going short
{
if((myCCInow < 0) && (myCCI2 > 0)) //did it cross from above 50
{
dDownCCIBuffer[rates_total - i + 1] = High[i] + 2 * _Point*Arrow_Offset; //
}
}
}

//-----
return(rates_total);
}
The result is as shown in the picture.
Is there a mistake in my code?
Attached Images
File Type: jpg 2010-02-07 10.35.jpg (79.3 KB, 53 views)
Reply With Quote
  #20 (permalink)  
Old 7th February 2010, 22:14
Enivid's Avatar
Administrator
 
Join Date: Nov 2008
Posts: 2,075
Thanks: 71
Thanked 109 Times in 66 Posts
Default

Quote:
Originally Posted by fxwalb View Post
The result is as shown in the picture.
Is there a mistake in my code?
I don't know but the second check on myCCInow in the end is unnecessary. Do you see any errors in the Experts log output?
__________________
Please, read the Forum Rules and the Signature Rules to avoid termination of your account.
Reply With Quote
Reply

Bookmarks

Tags
arrows, cci, cross, indicator, metatrader


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 17:45.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2013, vBulletin Solutions, Inc.
Inactive Reminders By Icora Web Design

SEO by vBSEO 3.3.2