新人请求帮助,如何获取“线型回归通道”上下轨的值

要添加评论,请登录注册
mida100200
10
mida100200  
各位高手你好:

        我正在做一个“线型回归通道”的EA,就是从一个波浪的高点开始画到最近的一个低点的“线型回归通道”,只要价格碰到上轨就做空单,价格碰到下轨就做多单,现在的问题是如何获取“线型回归通道”的上轨和下轨的价格,并让他们在“数据窗口”显示出来,请求各位指点,非常感谢。

        下面是我写的代码,请指点,谢谢。
//+------------------------------------------------------------------+

//|                                                          B-1.mq5 |

//|                        Copyright 2019, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2019, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

//--- input parameters

input int      K线数目=500;

input int      深度=30;

input int      ExtBackstep=3;

//---

datetime time[],向上时间坐标,向下时间坐标;

double   open[],high[],low[],close[],A点值;

long     tick_volume[],real_volume[];

//---

int z=500,

    high_a,low_a,a,

    last_high_b,last_low_b,b,

    A点_high,A点_low,A点;

//---

string 向上箭头,向下箭头,

       最高点箭头,最低点箭头,

       向上拇指,向下拇指,

       A点线,A点字,

       线性回归通道(旧),线性回归通道(新);

double t1;

//+------------------------------------------------------------------+

int OnInit(){return(INIT_SUCCEEDED);}

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

    ObjectDelete(0,"向上箭头");

    ObjectDelete(0,"向下箭头");

    ObjectDelete(0,"最高点箭头");

    ObjectDelete(0,"最低点箭头");

    ObjectDelete(0,"向上拇指");

    ObjectDelete(0,"向下拇指");

    ObjectDelete(0,"线性回归通道(旧)");

    ObjectDelete(0,"线性回归通道(新)");

    ObjectDelete(0,"A点线");

    ObjectDelete(0,"A点字");

  }

//+------------------------------------------------------------------+

void OnTick()

{

//+---------------------------------+

//|

   int      K线总数  = iBars(NULL,0);

//---

   CopyTime(Symbol(),PERIOD_CURRENT,0,K线总数,time);

   ArraySetAsSeries(time,true);

   datetime 时间  = time[0];

//---

   CopyOpen(Symbol(),PERIOD_CURRENT,0,K线总数,open);

   ArraySetAsSeries(open,true);

   double 开盘价  = open[0];

//---

   CopyHigh(Symbol(),PERIOD_CURRENT,0,K线总数,high);

   ArraySetAsSeries(high,true);

   double 最高点  = high[0];

//---

   CopyLow(Symbol(),PERIOD_CURRENT,0,K线总数,low);

   ArraySetAsSeries(low,true);

   double 最低点  = low[0];

//---

   CopyClose(NULL,PERIOD_CURRENT,0,K线总数,close);

   ArraySetAsSeries(close,true);

   double 收盘价  = close[0];

//---

   CopyTickVolume(Symbol(),PERIOD_CURRENT,0,K线总数,tick_volume);

   ArraySetAsSeries(tick_volume,true);

   long 点击成交量  = tick_volume[0];

//---

   CopyRealVolume(Symbol(),PERIOD_CURRENT,0,K线总数,real_volume);

   ArraySetAsSeries(real_volume,true);

   long 交易成交量  = real_volume[0];

//+---------------------------------+

//|Comment函数可以将信息在屏幕左上角显示  

   Comment(Symbol(),","  ,EnumToString(Period()),"\n", 

           "时间: "      ,TimeToString(时间,TIME_DATE|TIME_SECONDS),"\n", 

           "开盘价: "    ,DoubleToString(开盘价,Digits()),"\n", 

           "最高点: "    ,DoubleToString(最高点,Digits()),"\n", 

           "最低点: "    ,DoubleToString(最低点,Digits()),"\n", 

           "收盘价: "    ,DoubleToString(收盘价,Digits()),"\n", 

           "点击成交量: ",IntegerToString(点击成交量),"\n", 

           "交易成交量: ",IntegerToString(交易成交量),"\n", 

           "K线总数: "   ,IntegerToString(K线总数),"\n"); 

//+------------------------------------------------------------------+

//+---------------------------------+

//|寻找五百根K线内的高点和低点 

//---五百根K线内的高点

double 五百根K线内的高点=high[0];

//---

for(int i=0;i<K线数目;i++)

  {

    if(high[i]>五百根K线内的高点)

     {

       五百根K线内的高点=high[i];

        high_a=i;

     }

  }

//---五百根K线内的低点

double 五百根K线内的低点=low[0];

//---

for(int i=0;i<K线数目;i++)

  {

    if(low[i]<五百根K线内的低点)

      {

        五百根K线内的低点=low[i];

        low_a=i;

      } 

  }

//+---------------------------------+

//|以K线位置为基准判断高点在前还是低点在前,以此决定通道的第一时间点和价格点 

  if(low_a>high_a)

    {

      a=low_a;

    }

  else

    {

      a=high_a;

    }

//+------------------------------------------------------------------+

//+---------------------------------+

//|以30根K线位置为基准获取最近高点和最近低点 

//---获取最近高点

double 最近高点=high[0];

for(int i=0;i<深度;i++)

  {

    if(high[i]>最近高点)

     {

       最近高点=high[i];

        last_high_b=i;

     }

  }

//---获取最近低点

double 最近低点=low[0];

//---

for(int i=0;i<深度;i++)

  {

    if(low[i]<最近低点)

      {

        最近低点=low[i];

        last_low_b=i;

      } 

  }

//+---------------------------------+

//|以K线位置为基准判断高点在前还是低点在前,以此决定通道的第二时间点和价格点

//+---------------------------------+ 

  if(last_low_b<last_high_b)

    {

      b=last_low_b;

    }

  else

    {

      b=last_high_b;

    }

//+------------------------------------------------------------------+

//+---------------------------------+

//|最高点前的第一个低点和最低点前的第一个高点,也就是A点

//+---------------------------------+ 

//---最高点前的第一个低点

double 最高点前的第一个低点=high[b];

//---

for(int i=b;i<b+深度;i++)

  {

    if(high[i]>最高点前的第一个低点)

     {

       最高点前的第一个低点=high[i];

        A点_high=i;

     }

  }

//---最低点前的第一个高点

double 最低点前的第一个高点=low[b];

//---

for(int i=b;i<b+深度;i++)

  {

    if(low[i]<最低点前的第一个高点)

      {

        最低点前的第一个高点=low[i];

        A点_low=i;

      } 

  }

//+---------------------------------+

//|以K线位置为基准判断高点在前还是低点在前,以此决定A点的位置

//+---------------------------------+ 

  if(A点_low<A点_high)

    {

      A点=A点_high;

      A点值=high[A点_high];

    }

  else

    {

      A点=A点_low;

      A点值=low[A点_low];

    }

//+------------------------------------------------------------------+

//---五百根K线内的高点画向上箭头(1小时图加0.0015,5分钟图加0.0003)

  ObjectCreate(0,"最高点箭头",OBJ_ARROW_UP,0,time[high_a],五百根K线内的高点+0.0003);

//--- 设置符号颜色 

  ObjectSetInteger(0,"最高点箭头",OBJPROP_COLOR,clrYellow); 

//--- 设置符号大小 

  ObjectSetInteger(0,"最高点箭头",OBJPROP_WIDTH,2);

//---

//---五百根K线内的低点画向下箭头

  ObjectCreate(0,"最低点箭头",OBJ_ARROW_DOWN,0,time[low_a],五百根K线内的低点);

//--- 设置符号颜色 

  ObjectSetInteger(0,"最低点箭头",OBJPROP_COLOR,clrYellow); 

//--- 设置符号大小 

  ObjectSetInteger(0,"最低点箭头",OBJPROP_WIDTH,2);

//+------------------------------------------------------------------+

//---最近高点画向上箭头(1小时图加0.0015,5分钟图加0.0003)

  ObjectCreate(0,"向上箭头",OBJ_ARROW_UP,0,time[last_high_b],最近高点+0.0003);

//--- 设置符号颜色 

  ObjectSetInteger(0,"向上箭头",OBJPROP_COLOR,clrBlue); 

//--- 设置符号大小 

  ObjectSetInteger(0,"向上箭头",OBJPROP_WIDTH,2);

//---

//---最近高点画向下箭头

  ObjectCreate(0,"向下箭头",OBJ_ARROW_DOWN,0,time[last_low_b],最近低点);

//--- 设置符号颜色 

  ObjectSetInteger(0,"向下箭头",OBJPROP_COLOR,clrBlue); 

//--- 设置符号大小 

  ObjectSetInteger(0,"向下箭头",OBJPROP_WIDTH,2); 

//+------------------------------------------------------------------+

//---最高点前的第一个低点画向上拇指(1小时图加0.0015,5分钟图加0.0003)

  ObjectCreate(0,"向上拇指",OBJ_ARROW_THUMB_UP,0,time[A点],最高点前的第一个低点+0.0003);

//--- 设置符号颜色 

  ObjectSetInteger(0,"向上拇指",OBJPROP_COLOR,clrYellow); 

//--- 设置符号大小 

  ObjectSetInteger(0,"向上拇指",OBJPROP_WIDTH,2);

//---

//---最低点前的第一个高点画向下拇指

  ObjectCreate(0,"向下拇指",OBJ_ARROW_THUMB_DOWN,0,time[A点],最低点前的第一个高点);

//--- 设置符号颜色 

  ObjectSetInteger(0,"向下拇指",OBJPROP_COLOR,clrYellow); 

//--- 设置符号大小 

  ObjectSetInteger(0,"向下拇指",OBJPROP_WIDTH,2);

//+------------------------------------------------------------------+

  ObjectCreate(0,"A点线",OBJ_HLINE,0,time[A点],A点值);

//+------------------------------------------------------------------+  

  ObjectCreate(0,"线性回归通道(旧)",OBJ_REGRESSION,0,time[a],low[a],time[b],high[b]);

//--- 设置影响通道宽度的偏差值

  ObjectSetDouble(0,"线性回归通道(旧)",OBJPROP_DEVIATION,1.0); 

//--- 设置通道颜色 

  ObjectSetInteger(0,"线性回归通道(旧)",OBJPROP_COLOR,clrBlue); 

//--- 设置通道线的风格 

  ObjectSetInteger(0,"线性回归通道(旧)",OBJPROP_STYLE,STYLE_SOLID); 

//--- 设置通道线的宽度 

  ObjectSetInteger(0,"线性回归通道(旧)",OBJPROP_WIDTH,2); 

//--- 启用 (true) 或禁用 (false) 延续向右显示通道的模式 

//---

  ObjectCreate(0,"线性回归通道(新)",OBJ_REGRESSION,0,time[b],low[b],time[0],high[0]);

//--- 设置影响通道宽度的偏差值

  ObjectSetDouble(0,"线性回归通道(新)",OBJPROP_DEVIATION,1.0); 

//--- 设置通道颜色 

  ObjectSetInteger(0,"线性回归通道(新)",OBJPROP_COLOR,clrYellow); 

//--- 设置通道线的风格 

  ObjectSetInteger(0,"线性回归通道(新)",OBJPROP_STYLE,STYLE_SOLID); 

//--- 设置通道线的宽度 

  ObjectSetInteger(0,"线性回归通道(新)",OBJPROP_WIDTH,1); 

//--- 启用 (true) 或禁用 (false) 延续向右显示通道的模式 

//+------------------------------------------------------------------+
}
通过MQL5社区和服务探索MetaTrader 5的新机遇
通过MQL5社区和服务探索MetaTrader 5的新机遇
  • www.mql5.com
A script for opening a grid of orders If you need to quickly open several pending orders (Buy Limit, Sell Limit, Buy Stop, Sell Stop) on a certain distance from the current price, this script will do all the routine for you! Allow AutoTrading before running the script. Usage: Run the script on a chart. Input Parameters: Language of messages...
Ziheng Zhuang
30806
Ziheng Zhuang  

他们在“数据窗口”显示出来

--

要达到这样的要求,应该写成指标而不是EA。

参考标准差通道:

https://www.mql5.com/en/code/18330

Standard Deviation Channel MT5
Standard Deviation Channel MT5
  • www.mql5.com
Colored Zerolag MACD It is the MQL5 version of ZeroLag MACD. MetaCOT 2 CFTC ToolBox (Set of Indicators) MT5 MetaCOT 2 CFTC ToolBox Indicators is a set of MetaCOT 2 indicators that provide access to CFTC reports. MetaCOT 2 supports COT...
mida100200
10
mida100200  
Ziheng Zhuang:

他们在“数据窗口”显示出来

--

要达到这样的要求,应该写成指标而不是EA。

参考标准差通道:

https://www.mql5.com/en/code/18330

hi:

    非常感谢你的帮助,我下载了那个指标,正在研究参考,我会把这个做成指标的,非常感谢。

要添加评论,请登录注册