编码帮助 - 页 31

 

在处理多维数组时,我遇到了一个很简单的问题。

各位老师好。

我只是想从一个数组的屏幕行中获取一个单元格(同样的结果是警报),它错过了一些东西,这是肯定的,但一整天都在做这个,我不明白为什么。

请帮助我......

这就是它。

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

//| !XTEST sur arrays.mq4 |

//| |

//| |

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

#财产版权""

#property link ""

#属性 indicator_chart_window

Extern int Coin = 1 ;

extern int X_Col = 700 ;

extern int Y_Ligne = 30 ;

extern string FontCar = "Arial" ;

Extern int TailCar = 14 ;

外部颜色 Couleur = Lime ;

Extern int X = 1;

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

//|自定义指标初始化函数

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

string Tab1dim[2];

string Tab2dim[2,2];

string Tab3dim[2,2,2];

string Tab4dim[2,2,2,2];

// 5e Dimension de tableau non autorisée . int Tab5dim[20,20,20,80,2];

int init()

{

//---- 指标

string Tab1dim[2]={"tab1-c0","tab1C1"};

//----

return(0);

}

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

//|自定义指标去初始化函数|

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

int deinit()

{

//----

ObjectDelete("R")。

//----

return(0);

}

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

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

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

int start()

{

//----

Tab1dim[2]={"tab1-c0","tab1C1"};

string affich=Tab1dim[0];

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

ObjectCreate ("A1", OBJ_LABEL, 0, 0, 0 );

ObjectSet ("A1", OBJPROP_CORNER,Coin);

ObjectSet ("A1", OBJPROP_XDISTANCE,X_Col );

ObjectSet("A1", OBJPROP_YDISTANCE,Y_Ligne);

ObjectSetText("A1",affich,TailCar, FontCar , Couleur);

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

Alert(affich);

//----

return(0);

}

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

提前感谢。

 

...

试着这样做(数组初始化 的方式不同)。

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

//| !XTEST sur arrays.mq4 |

//| |

//| |

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

#property copyright ""

#property link ""

#property indicator_chart_window

extern int Coin = 1 ;

extern int X_Col = 10 ;

extern int Y_Ligne = 10 ;

extern string FontCar = "Arial" ;

extern int TailCar = 14 ;

extern color Couleur = Lime ;

extern int X = 1;

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

//| Custom indicator initialization function |

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

string Tab1dim[] = {"tab1-c0","tab1C1"};

string Tab2dim[2,2];

string Tab3dim[2,2,2];

string Tab4dim[2,2,2,2];

// 5eme Dimension de tableau non autorisée . int Tab5dim[20,20,20,80,2];

int init()

{

//---- indicators

string Tab1dim[2]={"tab1-c0","tab1C1"};

//----

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

//----

ObjectDelete("A1");

//----

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

//----

string affich=Tab1dim[0];

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

ObjectCreate ("A1", OBJ_LABEL, 0, 0, 0 );

ObjectSet ("A1", OBJPROP_CORNER,Coin );

ObjectSet ("A1", OBJPROP_XDISTANCE,X_Col );

ObjectSet ("A1", OBJPROP_YDISTANCE,Y_Ligne );

ObjectSetText("A1",affich,TailCar, FontCar , Couleur );

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

//----

return(0);

}

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

Ilevna:
嗨,先生们。

只是试图从一个数组的屏幕行中获取一个单元格(同样的结果信息警报),它错过了一些东西,这是肯定的,但所有的日子都在它身上,我不明白为什么。

如果能得到帮助就好了......

这就是它。

谢谢你的帮助。
 
mladen:
试试这样做(数组初始化的方式不同)。

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

//| !XTEST sur arrays.mq4 | !

//| |**************

非常感谢,运行良好,但我不明白为什么要这样做,因为通常我们可以声明,或在全局范围内,或在一个函数 内,就像他们在手册中写的那样: double Tab2Dim[2*n-3]; 或者其他

int [] values =new int[3];

values[0]=5。

values[1]=values[0]*2;

values[2]=values[1]*2;

但这对我来说是件好事,谢谢你,先生。

 

...

你可以用ArrayResize()函数 部分地克服这个问题(这样你就可以有动态大小的数组了)

问题是ArrayResize()只适用于单维数组和数组的第一维(例如,如果你有array[][2],你可以用ArrayResize()调整它的大小,比如array[anySize][2])。任何进一步的维度(从二维数组开始)必须是在编译时已知的恒定尺寸

Ilevna:
非常感谢,运行得很好,但我不明白为什么要这样做,因为通常我们可以声明,或在全局范围内,或在一个函数内,就像他们在手册中写的那样: double Tab2Dim[2*n-3]; 或者其他

int [] values =new int[3];

values[0]=5。

values[1]=values[0]*2;

values[2]=values[1]*2;

但这对我来说是件好事,谢谢你,先生。
 

对我的带状指标的帮助

大家好。

在尝试了很多Band指标后,如jband,tmaband等。最后,我决定写一个我自己的Band指标。

你会发现附件是我的Band指标,但是当EA调用它的Low Band线时给出了一个零除数,我看了我的代码,里面没有零除数。

如果你有这样的想法或经验,请让我帮助解决这个问题。

预先感谢....

附加的文件:
aband.gif  20 kb
 

...

没有源代码(或没有调用自定义指标 的代码),就不可能知道什么。如果你的指标有效,那么错误就在你的EA中。

kemal44:
大家好。

在尝试了很多带状指标后,如jband,tmaband等。最后,我决定自己写一个带状指标。

你会发现附件是我的Band指标,但是当EA调用它的Low Band线时给出了一个零除数,我看了我的代码,里面没有零除数。

如果你有这样的想法或经验,请让我帮助解决这个问题。

提前感谢....
 

需要帮助编码一个MA交叉的EA

大家好。

我想知道是否有人能帮助我编码一个MA交叉的EA,这样我就可以在我离开电脑的时候使用它。

我的想法是这样的。

1分钟图 - 3 EMA和8 SMA

如果3 EMA与8 SMA交叉,卖出货币对,参数中预设TP和SL。

如果3 EMA穿过8 SMA以上,则买入货币对,并在参数上预设TP和SL。

我不知道是否有可能编写这样一个简单的MA ea,但如果有人能帮我一把,我会非常感激。

谢谢您的帮助。

 

...

你是否检查过这个主题:https://www.mql5.com/en/forum/general

jacktrader:
大家好。

我想知道是否有人能帮助我编写一个MA交叉的EA,这样我就可以在我离开电脑的时候使用它。

我的想法是这样的。

1分钟图 - 3 EMA和8 SMA

如果3 EMA与8 SMA交叉,卖出货币对,参数中预设TP和SL。

如果3 EMA穿过8 SMA以上,则买入货币对,并在参数上预设TP和SL。

我不知道是否有可能编写这样一个简单的MA ea,但如果有人能帮我一把,我会非常感激。

提前感谢您!
 
kemal44:
大家好。

在尝试了很多Band指标后,如jband,tmaband等。最后我决定写一个自己的Band指标。

你会发现附件是我的Band指标,但当EA调用它时,Low Band线给出了一个零除数,我看了我的代码,里面没有零除数。

如果你有这样的想法或经验,请让我帮助解决这个问题。

预先感谢....

这里是波段指数的代码。

EA调用中段和上段信号,但低段对我来说是个问题。

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

//| IndicatorPlan.mq4 |/|

//| Copyright © 2007, MetaQuotes Software Corp.|

//|MetaTrader 5 交易平台 / MetaQuotes Software Corp.|

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

#property copyright "Copyright © 2007, MetaQuotes Software Corp.

#property link "http://www.metaquotes.net/"

//---- 在主窗口中绘制指标

#property indicator_chart_window

//---- 指标缓冲区的数量

#property indicator_buffers 3

//---- 指标颜色

#property indicator_color1 Gold

#property indicator_color2 品红

#property indicator_color3 BlueViolet

//---- 指标的输入参数

extern int MBand_Period = 15;

Extern int UpBand_Period = 15;

Extern int DnBand_Period = 15;

Extern int ABand_Timeframe =15;

Extern int shift =0;

//---- 指标缓冲区

double Ind_Buffer0[];

double Ind_Buffer1[];

double Ind_Buffer2[];

double Ind_Buffer3[];

双倍Ind_Buffer4[]。

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

//|自定义指标初始化函数

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

int init()

{

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS))。

IndicatorShortName("ABand "+ABand_Timeframe)。

//----,定义图形执行风格

SetIndexStyle(0, DRAW_LINE);

SetIndexLabel(0, "MBand "+MBand_Period)。

SetIndexStyle(2, DRAW_LINE);

SetIndexLabel(2, "UpBand "+UpBand_Period);

SetIndexStyle(1, DRAW_LINE);

SetIndexLabel(1, "DnBand "+DnBand_Period)。

//---- 3个指标缓冲区被用于计算

IndicatorBuffers(5);

SetIndexBuffer(0, Ind_Buffer0)。

SetIndexBuffer(1, Ind_Buffer1);

SetIndexBuffer(2, Ind_Buffer2);

SetIndexBuffer(3, Ind_Buffer3)。

SetIndexBuffer(4, Ind_Buffer4)。

//---- Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ

//----,在 "S "字形的基础上,增加了 "D "字形,即在 "S "字形的基础上增加了 "D "字形。

IndicatorDigits(Digits);

//----。

//---- 初始化结束

return(0);

}

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

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

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

int start()

{

//---- Ïğîâåğêà êîëè÷åååâà áàğîâ íà äîàòî÷íîàòîà äëüíåéøåãî ñ÷¸òà

如果(Bars < MBand_Period + UpBand_Period + DnBand_Period)

返回(0)。

//---- İÌÓËßÖÈß ÈÍÄÈÊÀÒÎĞÍÛÕ ÁÓÔÅĞÎÂ

如果(ArraySize(Ind_Buffer0) < Bars)

{

ArraySetAsSeries(Ind_Buffer0, false)。

ArraySetAsSeries(Ind_Buffer1, false);

ArraySetAsSeries(Ind_Buffer2, false)。

ArraySetAsSeries(Ind_Buffer3, false)。

ArraySetAsSeries(Ind_Buffer4, false)。

//----

ArrayResize(Ind_Buffer0, Bars)。

ArrayResize(Ind_Buffer1, Bars);

ArrayResize(Ind_Buffer2, Bars);

ArrayResize(Ind_Buffer3, Bars);

ArrayResize(Ind_Buffer4, Bars)。

//----

ArraySetAsSeries(Ind_Buffer0, true)。

ArraySetAsSeries(Ind_Buffer1, true)。

ArraySetAsSeries(Ind_Buffer2, true)。

ArraySetAsSeries(Ind_Buffer3, true);

ArraySetAsSeries(Ind_Buffer4, true)。

}

//----+ ÒÀÒÈ×ÅÑÊÎÉ ÖÅËÎÉ ÏÅĞÅÌÅÍÎÉ ÏÀÌßÒÈ

静态Int IndCounted。

//----+ 以浮点方式插入变量

double Resalt0, Resalt1, Resalt2;

双倍价格。

//----+ 插入整数变量并获得计算的条数

int limit, MaxBar,bar, counted_bars = IndicatorCounted();

int i,k;

//----,检查可能的错误

如果(counted_bars < 0)

返回(-1)。

//----,必须重新计算最后计算的条形图

如果(counted_bars > 0)

counted_bars--。

//----,定义最古老的条形图的数量。

//从它开始,新的条形将被重新计算

limit = Bars - counted_bars - 1;

//----,定义最古老的条形图的数量。

// 新的条形图将从该条形图开始重新计算。

MaxBar = Bars - 1 - (MBand_Period + UpBand_Period + DnBand_Period)。

//----,初始化为零

如果(limit > MaxBar)

{

limit = MaxBar;

for(bar = Bars - 1; bar >= MaxBar; bar--)

{

Ind_Buffer0 = 0.0;

Ind_Buffer1 = 0.0。

Ind_Buffer2 = 0.0。

Ind_Buffer3 = 0.0。

Ind_Buffer4 = 0.0。

}

}

//----+指标计算的第一个周期

i=Bars-DnBand_Period。

if(counted_bars>DnBand_Period) i=Bars-counted_bars-1;

while(i>=0)

{

i=Bars-DnBand_Period。

如果(counted_bars>DnBand_Period) i=Bars-counted_bars-1;

while(i>=0)

{

double min=1000000;

k=i+DnBand_Period-1。

while(k>=i)

{

price=Resalt1[k];

如果(min>price)min=price。

k--;

}

Ind_Buffer1=min;

i--;

}

}

for(i=0; i<limit; i++)

{

// 这里是变量Resalt0的计算代码。

//基于缓冲器UpBand[]的值

// 和外部变量0

Ind_Buffer3 =iMAOnArray(Ind_Buffer1,limit,DnBand_Period ,shift, ma_method,i);

}

//----+指标计算的第二个周期

{

i=Bars-UpBand_Period。

if(counted_bars>UpBand_Period) i=Bars-counted_bars-1;

while(i>=0)

{

double max=-1000000;

k=i+UpBand_Period-1;

while(k>=i)

{

price=Resalt2[k];

如果(max<price)max=price。

k--;

}

Ind_Buffer2=max。

i--;

}

}

//---- 信号线是简单的movimg平均值

for(i=0; i<limit; i++)

{

// 这里是变量Resalt0的计算代码。

//基于缓冲器UpBand[]的值。

// 和外部变量0

Ind_Buffer4 =iMAOnArray(Ind_Buffer2,limit,UpBand_Period,shift, ma_method,i);

}

//----+指标计算的主要周期

//---- 信号线是简单的移动平均线

for(i=0; i<limit; i++)

{

// 这里是变量Resalt0的计算代码

//基于缓冲器UpBand[]的值。

// 和外部变量0

Ind_Buffer0 =(Ind_Buffer2+Ind_Buffer1)/2。

}

return(0);

}

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

 

...

你能公布你是如何使用iCustom()调用的吗?

kemal44:
这里是带Ind的代码。

EA调用中段和上段信号,但低段对我来说是个问题。

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

//| IndicatorPlan.mq4 !

//| Copyright © 2007, MetaQuotes Software Corp.|

//|MetaTrader 5 交易平台 / MetaQuotes Software Corp.|

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

#property copyright "Copyright © 2007, MetaQuotes Software Corp.

#property link "http://www.metaquotes.net/"

//---- 在主窗口中绘制指标

#property indicator_chart_window

//---- 指标缓冲区的数量

#property indicator_buffers 3

//---- 指标颜色

#property indicator_color1 Gold

#property indicator_color2 品红

#property indicator_color3 BlueViolet

//---- 指标的输入参数

extern int MBand_Period = 15;

Extern int UpBand_Period = 15;

Extern int DnBand_Period = 15;

Extern int ABand_Timeframe =15;

Extern int shift =0;

//---- 指标缓冲区

double Ind_Buffer0[];

double Ind_Buffer1[];

double Ind_Buffer2[];

double Ind_Buffer3[];

双倍Ind_Buffer4[]。

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

//|自定义指标初始化函数

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

int init()

{

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS))。

IndicatorShortName("ABand "+ABand_Timeframe)。

//----,定义图形执行风格

SetIndexStyle(0, DRAW_LINE);

SetIndexLabel(0, "MBand "+MBand_Period)。

SetIndexStyle(2, DRAW_LINE);

SetIndexLabel(2, "UpBand "+UpBand_Period);

SetIndexStyle(1, DRAW_LINE);

SetIndexLabel(1, "DnBand "+DnBand_Period)。

//---- 3个指标缓冲区被用于计算

IndicatorBuffers(5);

SetIndexBuffer(0, Ind_Buffer0)。

SetIndexBuffer(1, Ind_Buffer1);

SetIndexBuffer(2, Ind_Buffer2);

SetIndexBuffer(3, Ind_Buffer3)。

SetIndexBuffer(4, Ind_Buffer4)。

//---- Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ Ǟ

//----,在 "S "字形的基础上,增加了 "D "字形,即在 "S "字形的基础上增加了 "D "字形。

IndicatorDigits(Digits);

//----。

//---- 初始化结束

return(0);

}

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

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

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

int start()

{

//---- Ïğîâåğêà êîëè÷åååâà áàğîâ íà äîàòî÷íîàòîà äëüíåéøåãî ñ÷¸òà

如果(Bars < MBand_Period + UpBand_Period + DnBand_Period)

返回(0)。

//---- İÌÓËßÖÈß ÈÍÄÈÊÀÒÎĞÍÛÕ ÁÓÔÅĞÎÂ

如果(ArraySize(Ind_Buffer0) < Bars)

{

ArraySetAsSeries(Ind_Buffer0, false)。

ArraySetAsSeries(Ind_Buffer1, false);

ArraySetAsSeries(Ind_Buffer2, false)。

ArraySetAsSeries(Ind_Buffer3, false)。

ArraySetAsSeries(Ind_Buffer4, false)。

//----

ArrayResize(Ind_Buffer0, Bars)。

ArrayResize(Ind_Buffer1, Bars);

ArrayResize(Ind_Buffer2, Bars);

ArrayResize(Ind_Buffer3, Bars);

ArrayResize(Ind_Buffer4, Bars)。

//----

ArraySetAsSeries(Ind_Buffer0, true)。

ArraySetAsSeries(Ind_Buffer1, true)。

ArraySetAsSeries(Ind_Buffer2, true)。

ArraySetAsSeries(Ind_Buffer3, true);

ArraySetAsSeries(Ind_Buffer4, true)。

}

//----+ ÒÀÒÈ×ÅÑÊÎÉ ÖÅËÎÉ ÏÅĞÅÌÅÍÎÉ ÏÀÌßÒÈ

静态Int IndCounted。

//----+ 以浮点方式插入变量

double Resalt0, Resalt1, Resalt2;

双倍价格。

//----+ 插入整数变量并获得计算的条数

int limit, MaxBar,bar, counted_bars = IndicatorCounted();

int i,k;

//----,检查可能的错误

如果(counted_bars < 0)

返回(-1)。

//----,必须重新计算最后计算的条形图

如果(counted_bars > 0)

counted_bars--。

//----,定义最古老的条形图的数量。

//从它开始,新的条形将被重新计算

limit = Bars - counted_bars - 1;

//----,定义最古老的条形图的数量。

// 新的条形图将从该条形图开始重新计算。

MaxBar = Bars - 1 - (MBand_Period + UpBand_Period + DnBand_Period)。

//----,初始化为零

如果(limit > MaxBar)

{

limit = MaxBar;

for(bar = Bars - 1; bar >= MaxBar; bar--)

{

Ind_Buffer0 = 0.0;

Ind_Buffer1 = 0.0。

Ind_Buffer2 = 0.0。

Ind_Buffer3 = 0.0。

Ind_Buffer4 = 0.0。

}

}

//----+指标计算的第一个周期

i=Bars-DnBand_Period。

if(counted_bars>DnBand_Period) i=Bars-counted_bars-1;

while(i>=0)

{

i=Bars-DnBand_Period。

如果(counted_bars>DnBand_Period) i=Bars-counted_bars-1;

while(i>=0)

{

double min=1000000;

k=i+DnBand_Period-1。

while(k>=i)

{

price=Resalt1[k];

如果(min>price)min=price。

k--;

}

Ind_Buffer1=min;

i--;

}

}

for(i=0; i<limit; i++)

{

// 这里是变量Resalt0的计算代码。

//基于缓冲器UpBand[]的值

// 和外部变量0

Ind_Buffer3 =iMAOnArray(Ind_Buffer1,limit,DnBand_Period ,shift, ma_method,i);

}

//----+指标计算的第二个周期

{

i=Bars-UpBand_Period。

if(counted_bars>UpBand_Period) i=Bars-counted_bars-1;

while(i>=0)

{

double max=-1000000;

k=i+UpBand_Period-1;

while(k>=i)

{

price=Resalt2[k];

如果(max<price)max=price。

k--;

}

Ind_Buffer2=max。

i--;

}

}

//---- 信号线是简单的movimg平均值

for(i=0; i<limit; i++)

{

// 这里是变量Resalt0的计算代码。

//基于缓冲器UpBand[]的值。

// 和外部变量0

Ind_Buffer4 =iMAOnArray(Ind_Buffer2,limit,UpBand_Period,shift, ma_method,i);

}

//----+指标计算的主要周期

//---- 信号线是简单的移动平均线

for(i=0; i<limit; i++)

{

// 这里是变量Resalt0的计算代码

//基于缓冲器UpBand[]的值。

// 和外部变量0

Ind_Buffer0 =(Ind_Buffer2+Ind_Buffer1)/2。

}

return(0);

}

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