HELP !!!! 将一个指标从MT4转换到MT5。 - 页 5

 

你好,我想把一个指标 从mql4转换 到mql5。基本上我只需要在MFI中出现红条时有声音通知。我现在如何将这个声音代码附加到新的mfi上?

我附上一个旧工作版本的例子。

附加的文件:
 

告诉我正确的方法,这是一个平成的计算方法

这是从标准中剪下来的

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

问题来了:如果"开放 " 应该由前一栏来搜索,为什么由代码中的下一栏来搜索?

这样做可能是正确的,还是我误解了什么。

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
谢谢你!
 
Vitaly Muzichenko:

告诉我正确的方法,这是一个平成的计算方法

这是从标准中剪下来的

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

问题来了:如果"开放 " 应该由前一栏来搜索,为什么由代码中的下一栏来搜索?

这一定是正确的,还是我误解了什么?

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
谢谢你!
在mql5中,条形索引的方向 是默认进行的。因此,[i-1]将只是右边的第一个小节。
 
Vitaly Muzichenko:

告诉我正确的方法,这是一个平成的计算方法

这是从标准中剪下来的

for(i=pos/*pos=1*/; i<rates_total ;i++)
  {
   haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
   haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
   haHigh=MathMax(High[i],MathMax(haOpen,haClose));
   haLow=MathMin(Low[i],MathMin(haOpen,haClose));

问题来了:如果"开放 " 应该由前一栏来搜索,为什么由代码中的下一栏来搜索?

可能是正确的方法,还是我误解了什么。

haOpen=(ExtOpenBuffer0[i+1]+ExtCloseBuffer0[i+1])/2;
谢谢你!

要准确地看到哪个指数在图表上有最右边和最左边的柱子,请使用这个简单的方法。

在任何指标中,在MetaEditor中,将断点放在OnCakculate()内的第一个操作上(步骤1)。

索引检查

开始对历史数据进行调试。一旦你在你的断点上开始调试,调试就会暂停。然后在观察中添加两个表达式:"time[rate_total-1]"和 "time[0]"(步骤2和3)。现在我们可以很容易地看到,在这种情况下(time[]数组有默认的索引方向,ArrayAsSeries没有被应用),元素time[rate_total-1]将是图表中最右边的柱子(步骤4)。

我希望这个简单明了的方法能帮助你快速检查指标中的指数化方向。

 
Alexey Viktorov:
在mql5中,条形索引的方向是默认进行的。因此,[i-1]将是右边的第一个小节。

我大致了解,所以我没有忘记使用ArraySetAsSeries

问题是,在mql4和mql5代码中都应用了相同的 "i-1 "计算,如果公式中说的是前一栏而不是未来一栏,为什么要做减法?

弗拉基米尔-卡尔普托夫

要准确地看到哪个指数在图表上有最右边和最左边的柱子,可以使用这个简单的技巧。

在任何指标中,在MetaEditor中,将断点放在OnCakculate()内的第一个操作上(步骤1)。

开始对历史数据进行调试。一旦你在你的断点上开始调试,调试就会暂停。然后在观察中添加两个表达式:"time[rate_total-1]"和 "time[0]"(步骤2和3)。现在我们可以很容易地看到,在这种情况下(time[]数组有默认的索引方向,ArrayAsSeries没有被应用),元素time[rate_total-1]将是图表中最右边的柱子(步骤4)。

我希望这个简单明了的方法能帮助快速检查指标中的指数化方向。

谢谢你,我不知道这一点。

对计算的正确性有什么猜测吗?

 
你好。
我需要为CCI ARROWS指标制作一个警报。
我需要它在箭头出现后立即发出信号。
MT5
 

大家好!!!。我开始在MT5中修改该指标,但我无法理解iTime功能,我无法让它工作,谁能将该指标复制到工作状态?????。

该指标读取文件,该文件位于MQL5\Files\evolution-dvoid\文件夹中。

下载后,将其重命名为.csv

提前感谢。

附加的文件:
 

大家好,我不是程序员,但我的一个朋友说,在指标比尔-威廉姆斯的市场促进指数(BW MFI)的代码中,没有严格按照经典的公式进行 计算。 bw mfi = (high - low) / volume 此外,还使用了一些额外的数据校正。这实际上是一个错误,因此,指标 显示不正确的数据!

请告知如何修复指标中的这个错误(删除额外的数据校正),并收到
严格按照公式工作的指标。bw mfi = (high - low) / volume ?????


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

//|MarketFacilitationIndex.mq5|

//| Copyright 2009, MetaQuotes Software Corp.

//| http://www.mql5.com |

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

#property copyright "2009, MetaQuotes Software Corp.

#属性链接 "http://www.mql5.com"

//----指标设置

#属性 indicator_separate_window

#property indicator_buffers 2

#property indicator_plots 1

#property indicator_type1 DRAW_COLOR_HISTOGRAM

#property indicator_color1 Lime,SaddleBrown,Blue,Pink

#property indicator_width1 2

//----输入参数

input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; //volumes

//---- 缓冲区

双倍ExtMFIBuffer[]。

双重ExtColorBuffer[]。

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

//|自定义指标初始化功能

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

空白的OnInit()

{

//---- 指标

SetIndexBuffer(0,ExtMFIBuffer,INDICATOR_DATA)。

SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX)。

//----数据窗口的名称

IndicatorSetString(INDICATOR_SHORTNAME, "BWMFI")。

//---设置精度

IndicatorSetInteger(INDICATOR_DIGITS,_Digits)。

//----

}

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

//||

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

空白 计算MFI(const int start,const int rates_total.)

const double &high[],

const double &low[],

const long &volume[])

{

int i=start;

bool mfi_up=true,vol_up=true。

//---计算mfi_up和vol_up的第一个值

如果(i>0)

{

int n=i。

while(n>0)

{

if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; break; }

if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=false; break; }

//---- 如果MFI值相等,继续

n--;

}

n=i。

while(n>0)

{

如果(volume[n]>volume[n-1]) { vol_up=true; break; }

if(volume[n]<volume[n-1]) { vol_up=false; break; }

//------如果实际体积相等,继续

n--;

}

}

//---

while(i<rates_total && !IsStopped())

{

如果(volume[i]==0)

{

if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];

否则ExtMFIBuffer[i]=0。

}

否则ExtMFIBuffer[i]=(high[i]-low[i])/_Point/volume[i]。

//---计算变化

如果(i>0)

{

如果(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true。

如果(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false。

如果(volume[i]>volume[i-1])vol_up=true。

如果(volume[i]<volume[i-1])vol_up=false。

}

//---设置颜色

if(mfi_up && vol_up) ExtColorBuffer[i]=0.0。

if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0。

if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0。

if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;

i++;

}

}

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

//|自定义指标迭代函数|

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

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[])

{

//---

int start=0。

//---

如果(start<prev_calculated)start=prev_calculated-1。

//----用tick或实数计算

如果(InpVolumeType==VOLUME_TICK)

计算MFI(start,rate_total,high,low,tick_volume)。

否则

计算MFI(start,rate_total,high,low,volume)。

//------将最后的MFI值正常化

如果(rate_total>1)

{

datetime ctm=TimeTradeServer(),lasttm=time[rate_total-1],nexttm=lasttm+datetime(PeriodSeconds())。

如果(ctm<nexttm && ctm>=lasttm && nexttm! =lasttm)

{

double correction_koef=double(1+ctm-lasttm)/double(nexttm-lasttm)。

ExtMFIBuffer[rate_total-1]*=correction_koef。

}

}

//---

return(rate_total)。

}

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

 

请告诉我这是什么样的代码,如何把它变成一个MT5指标?


//这是一个基于成交量的指标。请务必使用适当的音量输入。


// 蹲栏是牛市和熊市的战斗,有大量的买入和卖出,但价格变动不大。
//深蹲杆在趋势结束时,85%的时间会是前三条或后三条之一。
//虽然所有的趋势都以下蹲结束,但所有的下蹲都不是趋势的结束。

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((high-low)/volume,1)
r_v=roc(volume,1)
squat_f=(r_hl < 0) and (r_v > 0)
barcolor(squat_f ? blue : na)
 
Olexiy Polyakov:

请告诉我这是什么样的代码,如何把它变成一个MT5指标?


//这是一个基于成交量的指标。请务必使用适当的音量输入。


// 蹲栏是牛市和熊市的战斗,有大量的买入和卖出,但价格变动不大。
//深蹲杆在趋势结束时,85%的时间会是前三条或后三条之一。
//虽然所有的趋势都以下蹲结束,但所有的下蹲都不是趋势的结束。

study("Williams Squat Bars", shorttitle="Squat Bars", overlay=true)
r_hl=roc((high-low)/volume,1)
r_v=roc(volume,1)
squat_f=(r_hl < 0) and (r_v > 0)
barcolor(squat_f ? blue : na)

BW MFI深蹲杆,3个缓冲区(如果没记错的话)。