指示器内的文本 - 页 3

 
supermagix:

你可以找到移动 OBJPROP_XDISTANCE 和 OBJPROP_YDISTANCE 的最佳点

如果我把OBJPROP_YDISTANCE的值改为500

标签没有移动一个像素

//--- create object
  
   ObjectCreate(0,objectName,OBJ_TEXT,window,0,0);
 //ObjectSetString(0,objectName,OBJPROP_TEXT,string(ExtRSIBuffer[rates_total-1]));
   ObjectSetString(0,objectName,OBJPROP_TEXT,DoubleToString(ExtRSIBuffer[rates_total-1],2));
   ObjectSetInteger(0,objectName,OBJPROP_COLOR,Red);
   ObjectSetString(0,objectName,OBJPROP_FONT,"Arial");
   ObjectSetInteger(0,objectName,OBJPROP_FONTSIZE,20);
 //ObjectSetInteger (0,objectName, OBJPROP_CORNER, corner);
   ObjectSetInteger(0,objectName,OBJPROP_XDISTANCE,0);
   ObjectSetInteger(0,objectName,OBJPROP_YDISTANCE,500);
   
   datetime tm[1];
   CopyTime(_Symbol,_Period,0,1,tm);
   ObjectSetInteger(0,objectName,OBJPROP_TIME,tm[0]);
   ObjectSetDouble(0,objectName,OBJPROP_PRICE,ExtRSIBuffer[rates_total-1]);
 
walb99:

我怎样才能把标签放到右上角

我们要研究这个问题,谢谢你。
 
Rosh:

在写这种指标之前,你应该先学习一下MQL5。你犯了这么多尴尬的错误。



我正在努力学习,但不存在简单的MQL5教程或课程:我必须从错误中学习,并寻求你的帮助。

我无法理解你写的这个指令。

 int i=prev_calculated;
   if (i>0) prev_calculated--;
   for(;i<rates_total;i++)

编译时出现了错误。

 
supermagix:

我正在努力学习,但不存在简单的教程或mql5的课程:我必须从错误中学习,并请求您的帮助。

我不能理解你写的这个指令。

当我编译时有一个错误。

我打错了字,对不起。正确的是

 int i=prev_calculated;
   if (i>0) i--;
   for(;i<rates_total;i++)
 
Rosh:

我打错了,对不起。右边是

这里有更多正确的代码,请使用它。

//+------------------------------------------------------------------+
//|                                                     CCIcolor.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Relative Strength Index"
//--- indicator settings
#property indicator_separate_window

#property indicator_buffers 4
#property indicator_plots 3
//--- input parameters
input int      CCIPeriod=14;         // Period for calculating the CCI
input int      CCIPeriodTurbo=6;     // Period for calculating the TURBOCCI
input ENUM_APPLIED_PRICE  price1=PRICE_CLOSE; // Method of calculating

//---- plot CCI_LINE
#property indicator_label1  "CCI_LINE"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Black
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//---- plot CCI_TURBO_LINE
#property indicator_label2  "CCI_TURBO_LINE"
#property indicator_type2  DRAW_LINE
#property indicator_color2  Navy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//---- plot CCI_HISTOGRAM
#property indicator_label3  "CCI_HISTO"
#property indicator_type3   DRAW_COLOR_HISTOGRAM
#property indicator_color3  Red,Green
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2


//----- level
#property indicator_level1       -100.0
#property indicator_level2        100.0
#property indicator_level3       -200.0
#property indicator_level4        200.0
#property indicator_level5       -50.0
#property indicator_level6        50.0
//--- indicator buffers

double         CCI_LINEBuffer[]; //  CCI_LINE
double         CCI_TURBOBuffer[]; //  CCI TURBO_LINE
double         HISTOGRAM[];       //  HISTOGRAM
double         HISTOGRAMColor[];       //  HISTOGRAM
int            copied;
int  CCIhandle;
int CCI_TURBO_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

void OnInit()
  {
//--- indicator buffers mapping

   SetIndexBuffer(0,CCI_LINEBuffer,INDICATOR_DATA);//buffer LINE
   SetIndexBuffer(1,CCI_TURBOBuffer,INDICATOR_DATA);//buffer Turbo
   SetIndexBuffer(2,HISTOGRAM,INDICATOR_DATA);//buffer Histogram
   SetIndexBuffer(3,HISTOGRAMColor,INDICATOR_COLOR_INDEX);//buffer Histogram

                                                          //name of separate window 
   IndicatorSetString(INDICATOR_SHORTNAME,"MYCCI");
//--- Create the indicator of CCI LINR
   CCIhandle=iCCI(NULL,0,CCIPeriod,price1);

//--- Create the indicator of CCI TURBO
   CCI_TURBO_handle=iCCI(NULL,0,CCIPeriodTurbo,price1);

//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]
                )
  {
//--- not all data may be calculated
   int calculated=BarsCalculated(CCIhandle);
   if(calculated<rates_total)
     {
      Print("Not all data of CCIhandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- not all data may be calculated
   calculated=BarsCalculated(CCI_TURBO_handle);
   if(calculated<rates_total)
     {
      Print("Not all data of CCI_TURBO_handle is calculated (",calculated,"bars ). Error",GetLastError());
      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++;
     }
//---- get CCI buffers
   if(CopyBuffer(CCIhandle,0,0,to_copy,CCI_LINEBuffer)<=0)
     {
      Print("getting CCIhandle is failed! Error",GetLastError());
      return(0);
     }

   if(CopyBuffer(CCI_TURBO_handle,0,0,to_copy,CCI_TURBOBuffer)<=0)
     {
      Print("getting CCI_TURBO_handle is failed! Error",GetLastError());
      return(0);
     }

   int i=prev_calculated;
   if(i>0) i--;
   for(;i<rates_total;i++)
     {
      HISTOGRAM[i]=CCI_LINEBuffer[i];
      if(CCI_LINEBuffer[i]<0)
        {
         HISTOGRAMColor[i]=0.0;//HISTOGRAM RED
        }
      if(CCI_LINEBuffer[i]>0)
        {
         HISTOGRAMColor[i]=1.0;//HISTOGRAM Green
        }
     }

//--- return value of prev_calculated for next call
   return(rates_total);

  }
//+------------------------------------------------------------------+
 
Rosh:

这里有更多正确的代码,请使用它。


我删除了这个结构

 int i=prev_calculated;
   if(i>0) i--;
  /////// if(prev_calculated!=0) return(prev_calculated);
   for(;i<rates_total;i++)

因为直方图没有更新到每个价格变化

我认为问题可能出在(返回)上。

是否正确?

谢谢你的帮助

...... 我正在做其他的修改.....

 
supermagix:

我删除了这一结构

因为直方图没有更新到每个价格变化

我认为问题可能出在(返回)上。

是正确的吗?

谢谢你的帮助

...... 我正在做其他的修改.....

你是对的,这是为调试目的而实施的。我已经从我的帖子中删除了它。
 

我已经修改了获得直方图颜色的程序,但并不奏效。

我认为问题出在循环 FOR..... 的 counter.... 上,这是否正确?

//+------------------------------------------------------------------+
//|                                                     CCIcolor.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "CCI"
//--- indicator settings
#property indicator_separate_window

#property indicator_buffers 4
#property indicator_plots 3
//--- input parameters
input int      CCIPeriod=14;         // Period for calculating the CCI
input int      CCIPeriodTurbo=6;     // Period for calculating the TURBOCCI
input ENUM_APPLIED_PRICE  price1=PRICE_CLOSE; // Method of calculating

//---- plot CCI_LINE
#property indicator_label1  "CCI_LINE"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Black
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

//---- plot CCI_TURBO_LINE
#property indicator_label2  "CCI_TURBO_LINE"
#property indicator_type2  DRAW_LINE
#property indicator_color2  Navy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//---- plot CCI_HISTOGRAM
#property indicator_label3  "CCI_HISTO"
#property indicator_type3   DRAW_COLOR_HISTOGRAM
#property indicator_color3  Gray,Gold,Red,Green
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2


//----- level
#property indicator_level1       -100.0
#property indicator_level2        100.0
#property indicator_level3       -200.0
#property indicator_level4        200.0
#property indicator_level5       -50.0
#property indicator_level6        50.0
//--- indicator buffers

double         CCI_LINEBuffer[]; //  CCI_LINE
double         CCI_TURBOBuffer[]; //  CCI TURBO_LINE
double         HISTOGRAM[];       //  HISTOGRAM
double         HISTOGRAMColor[];       //  HISTOGRAM
int            copied;
int  CCIhandle;
int CCI_TURBO_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

void OnInit()
  {
//--- indicator buffers mapping
   
   SetIndexBuffer(0,CCI_LINEBuffer,INDICATOR_DATA);//buffer LINE
   SetIndexBuffer(1,CCI_TURBOBuffer,INDICATOR_DATA);//buffer Turbo
   SetIndexBuffer(2,HISTOGRAM,INDICATOR_DATA);//buffer Histogram
   SetIndexBuffer(3,HISTOGRAMColor,INDICATOR_COLOR_INDEX);//buffer Histogram

                                                          //name of separate window 
   IndicatorSetString(INDICATOR_SHORTNAME,"MYCCI");
//--- Create the indicator of CCI LINR
   CCIhandle=iCCI(NULL,0,CCIPeriod,price1);

//--- Create the indicator of CCI TURBO
   CCI_TURBO_handle=iCCI(NULL,0,CCIPeriodTurbo,price1);

//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])

 {
//--- not all data may be calculated
   int calculated=BarsCalculated(CCIhandle);
   if(calculated<rates_total)
     {
      Print("Not all data of CCIhandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- not all data may be calculated
   calculated=BarsCalculated(CCI_TURBO_handle);
   if(calculated<rates_total)
     {
      Print("Not all data of CCI_TURBO_handle is calculated (",calculated,"bars ). Error",GetLastError());
      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++;
     }
//---- get CCI buffers
   if(CopyBuffer(CCIhandle,0,0,to_copy,CCI_LINEBuffer)<=0)
     {
      Print("getting CCIhandle is failed! Error",GetLastError());
      return(0);
     }

   if(CopyBuffer(CCI_TURBO_handle,0,0,to_copy,CCI_TURBOBuffer)<=0)
     {
      Print("getting CCI_TURBO_handle is failed! Error",GetLastError());
      return(0);
     }

   int i=prev_calculated;
   if(i>0) i--;
   for(;i<rates_total;i++)
     {
      HISTOGRAM[i]=CCI_LINEBuffer[i];
    
//--- set color histogram Long
        
     if(CCI_LINEBuffer[i+5]<0 && CCI_LINEBuffer[i+4]>0 && CCI_LINEBuffer[i+3]>0 && CCI_LINEBuffer[i+2]>0 && CCI_LINEBuffer[i+1]>0)
       HISTOGRAMColor[i]=1.0; // set color Yellow (only one histogram)
      }
       {
      if(CCI_LINEBuffer[i+5]>0 && CCI_LINEBuffer[i+4]>0 && CCI_LINEBuffer[i+3]>0 && CCI_LINEBuffer[i+2]>0 && CCI_LINEBuffer[i+1]>0);
        HISTOGRAMColor[i]=2.0; // set color Green
        } 
     
//--- set color histogram Short
      {
      if(CCI_LINEBuffer[i+5]>0 && CCI_LINEBuffer[i+4]<0 && CCI_LINEBuffer[i+3]<0 && CCI_LINEBuffer[i+2]<0 && CCI_LINEBuffer[i+1]<0)
        HISTOGRAMColor[i]=1.0; // set color Yellow (onli one histogram)
       }
       {
      if(CCI_LINEBuffer[i+5]<0 && CCI_LINEBuffer[i+4]<0 && CCI_LINEBuffer[i+3]<0 && CCI_LINEBuffer[i+2]<0 && CCI_LINEBuffer[i+1]<0)
         HISTOGRAMColor[i]=3.0; // set color Red
       }  

//--- return value of prev_calculated for next call
   return(rates_total);

  }
//+------------------------------------------------------------------+


我应该看到这一点。

谢谢你的帮助

 
Rosh:
我们将研究这个问题,谢谢你。

我做了一个概念验证的EA,通过使用不同的按键改变临时全局变量来与指标互动。

角部确实起作用,但必须记住,下角是相对于指标框架的,而不是时间线的--见视频。

不幸的是,视频上传在这个论坛上似乎不起作用 :(


目前,我把它放在

http://www.youshare.com/Guest/c94bb3e9cfe6a424.flv.html

(见全屏以获得最佳效果)

最好的结果。

 

经过多次测试,得出了这个结果。

黑色和绿色的值=差异直方图

黑色大值 = CCI的当前值

...但我对直方图的颜色有问题.....