编码帮助 - 页 31 1...242526272829303132333435363738...786 新评论 Ilevna 2012.05.18 05:15 #301 在处理多维数组时,我遇到了一个很简单的问题。 各位老师好。 我只是想从一个数组的屏幕行中获取一个单元格(同样的结果是警报),它错过了一些东西,这是肯定的,但一整天都在做这个,我不明白为什么。 请帮助我...... 这就是它。 //+------------------------------------------------------------------+//| !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); } //+------------------------------------------------------------------+ 提前感谢。 Mladen Rakic 2012.05.18 07:00 #302 ... 试着这样做(数组初始化 的方式不同)。 //+------------------------------------------------------------------+ //| !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: 嗨,先生们。 只是试图从一个数组的屏幕行中获取一个单元格(同样的结果信息警报),它错过了一些东西,这是肯定的,但所有的日子都在它身上,我不明白为什么。如果能得到帮助就好了...... 。这就是它。 谢谢你的帮助。 Coding help 请问有高手免费写這個Label吗? 請問怎樣在編程裡加上這個Label Ilevna 2012.05.18 08:27 #303 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; 但这对我来说是件好事,谢谢你,先生。 Mladen Rakic 2012.05.18 17:19 #304 ... 你可以用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; 但这对我来说是件好事,谢谢你,先生。 kemal44 2012.05.21 09:39 #305 对我的带状指标的帮助 大家好。 在尝试了很多Band指标后,如jband,tmaband等。最后,我决定写一个我自己的Band指标。 你会发现附件是我的Band指标,但是当EA调用它的Low Band线时给出了一个零除数,我看了我的代码,里面没有零除数。 如果你有这样的想法或经验,请让我帮助解决这个问题。 预先感谢.... 附加的文件: aband.gif 20 kb Mladen Rakic 2012.05.21 10:05 #306 ... 没有源代码(或没有调用自定义指标 的代码),就不可能知道什么。如果你的指标有效,那么错误就在你的EA中。 kemal44: 大家好。在尝试了很多带状指标后,如jband,tmaband等。最后,我决定自己写一个带状指标。 你会发现附件是我的Band指标,但是当EA调用它的Low Band线时给出了一个零除数,我看了我的代码,里面没有零除数。 如果你有这样的想法或经验,请让我帮助解决这个问题。 提前感谢.... jacktrader 2012.05.21 10:41 #307 需要帮助编码一个MA交叉的EA 大家好。 我想知道是否有人能帮助我编码一个MA交叉的EA,这样我就可以在我离开电脑的时候使用它。 我的想法是这样的。 1分钟图 - 3 EMA和8 SMA 如果3 EMA与8 SMA交叉,卖出货币对,参数中预设TP和SL。 如果3 EMA穿过8 SMA以上,则买入货币对,并在参数上预设TP和SL。 我不知道是否有可能编写这样一个简单的MA ea,但如果有人能帮我一把,我会非常感激。 谢谢您的帮助。 Mladen Rakic 2012.05.21 11:05 #308 ... 你是否检查过这个主题: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 2012.05.21 21:26 #309 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); } //+------------------------------------------------------------------+ Coding help 求好人帮忙把这几行通达信代码改成MQl语言,很感谢 多时间框架指标 Mladen Rakic 2012.05.29 17:19 #310 ... 你能公布你是如何使用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); } //+------------------------------------------------------------------+ 1...242526272829303132333435363738...786 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在处理多维数组时,我遇到了一个很简单的问题。
各位老师好。
我只是想从一个数组的屏幕行中获取一个单元格(同样的结果是警报),它错过了一些东西,这是肯定的,但一整天都在做这个,我不明白为什么。
请帮助我...
...
这就是它。
//| !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);
}
//+------------------------------------------------------------------+
嗨,先生们。
只是试图从一个数组的屏幕行中获取一个单元格(同样的结果信息警报),它错过了一些东西,这是肯定的,但所有的日子都在它身上,我不明白为什么。
如果能得到帮助就好了......
。
这就是它。
谢谢你的帮助。试试这样做(数组初始化的方式不同)。
//+------------------------------------------------------------------+
//| !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])。任何进一步的维度(从二维数组开始)必须是在编译时已知的恒定尺寸
非常感谢,运行得很好,但我不明白为什么要这样做,因为通常我们可以声明,或在全局范围内,或在一个函数内,就像他们在手册中写的那样: 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线时给出了一个零除数,我看了我的代码,里面没有零除数。
如果你有这样的想法或经验,请让我帮助解决这个问题。
预先感谢....
...
没有源代码(或没有调用自定义指标 的代码),就不可能知道什么。如果你的指标有效,那么错误就在你的EA中。
大家好。
在尝试了很多带状指标后,如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?
大家好。
我想知道是否有人能帮助我编写一个MA交叉的EA,这样我就可以在我离开电脑的时候使用它。
我的想法是这样的。
1分钟图 - 3 EMA和8 SMA
如果3 EMA与8 SMA交叉,卖出货币对,参数中预设TP和SL。
如果3 EMA穿过8 SMA以上,则买入货币对,并在参数上预设TP和SL。
我不知道是否有可能编写这样一个简单的MA ea,但如果有人能帮我一把,我会非常感激。
提前感谢您!大家好。
在尝试了很多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()调用的吗?
这里是带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);
}
//+------------------------------------------------------------------+