新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 282

 
Алексей Барбашин:

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis=", TimeToStr(timeis,TIME_SECONDS)); 这就是我试图销毁指针的地方 }


现在还不太清楚这里到底能摧毁什么。难怪内存会泄漏。什么是指针?指针是对存储创建的动态变量的内存地址的引用。基本上,你调用了获取类变量指针的程序,在这个程序中,类对象被创建,放在内存中,然后指针被返回到获取刻度的函数中,....在你退出该函数时被销毁。请注意,指针被销毁了,但内存没有被清空!而每一次新的勾选,都会有越来越多的内存被吞噬掉!为了避免在你的代码中出现这一点,你首先应该删除缩写,并将指针放到另一个变量中。TickReturn* temptick =returntick(period, 1);//获得指针并将其放入一个变量 int timeis = temptick.curtime; // 通过指针从对象中获取所需的值 ...... delete temptick; // 销毁指针并清除内存

而在销毁指针之前,最好先检查一下它是否正确,以避免出现删除错误。

总的来说,我不会特别为指针和类而烦恼,因为事实上任务要简单得多,没有必要使用这个类。创建一个具有必要字段的结构,声明一个 具有该结构类型的全局变量,制作一个函数,在每次打钩时更新该结构中的信息,并使用它来收集你需要的东西,因为该变量将是全局的,你不需要在函数中使用它,也不需要指针。


谢谢,我想起来为什么我改用速记了,这个变量在循环中没有更新(显然函数没有被调用),我必须为每个喷嚏做一个新的,然后把它杀掉。总之,把returntick换成switch比较容易。

 
Vitaly Muzichenko:

向服务器发送一个带有账户号码的后置请求

在服务器上,对照CSV文件中的所有行,检查传入的号码,如果有匹配的,就从文件中的这一行向终端发送一个响应。剩下的就是在终端读取服务器的响应,并在图表上显示。

一般来说,在MySQL上实现这样的事情比在文件上更容易。


谢谢你的回答,维塔利!

我三天来一直在努力理解它,但什么也没说出来(我是个初学者--在我职业生涯的初期)......

你能更详细地描述一下吗?我只是想给你一个例子...

对我的不理解表示抱歉...

 

还有一个问题...

我想让Beam从当前价格--到一天结束时的水平(23:59)(white2)画一条线,但它画到了一天结束时(按要求),但没有画到水平(white2),而且深入到边界图。

而我给它任何一个级别(红1,红2,等等),但它仍然向上或向下辐射到无限大。我是否写得正确,总是从High[0] 开始画梁,即随着 一个新的蜡烛图,它转移到一个新的蜡烛图(即跟随价格),或者它只画一次梁?级别是从CSV中获得的。请帮助...

if(уровни==Daily)
        {
         double red1 = d_input[0];
         double red2 = d_input[1];
         double blue1 = d_input[2];
         double blue2 = d_input[3];
         double white = d_input[4];
         double signal= d_input[5];
         double z_1 = d_input[6];
         double z_2 = d_input[7];
         double white2 = d_input[8];
                 
         t0 = дата_уровней + 1*PeriodSeconds(PERIOD_M1);
         t1 = дата_уровней + 24*PeriodSeconds(PERIOD_H1);

         Draw_Level("red1", red1, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("red2", red2, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("blue1", blue1, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("blue2", blue2, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("white", white,c_day_3, STYLE_SOLID,2);
         Draw_Level("white2", white2,c_day_3, STYLE_DOT,0);
        
         Draw_Level("green1",z_1, c_day_4, STYLE_SOLID,2);
         Draw_Level("green2",z_2,c_day_3, STYLE_DOT,2);
               
        string name = "Ray";
         int window = 0, time1 = (int)Time[0], time2 = (int)StrToTime(txt_data+" 23:59");
          double price1 = High[0], price2= white2;
         
          ObjectCreate(name, OBJ_TREND, window, time1, price1, time2, price2);
          ObjectSet(name, OBJPROP_COLOR, clrAqua);
          ObjectSet(name, OBJPROP_RAY_RIGHT, false);
          ObjectSet(name,OBJPROP_WIDTH,1);
          ObjectSet(name,OBJPROP_STYLE,2);
              
        
        if(показ_не отработанных)
            if(!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else(Draw_Level("white", white,c_day_3, STYLE_SOLID,1));// меняет толщину белой при достижении ценой
                
        }
 
MosheDayan:

还有一个问题...

我想让Beam从当前价格--到一天结束时的水平(23:59)(white2)画一条线,但它画到了一天结束时(按要求),但没有画到水平(white2),而且深入到边界图。

而我把它塞到任何一个级别(红1,红2,等等),但它仍然向上或向下辐射到无限大。从CSV得到的水平。请帮助我...

用Alert或Print 找出(检查)white2的值。
 
STARIJ:
使用警报或打印检查white2的值。
警报立即写下 "EURUSD ErrorFileOpen() for write",并且当日的所有水平都消失了...昨天的水平和以前所有的水平都还在......。所以...光斑上的光束从它应该出现的地方开始,一直到昨天的white2水平,但在一天结束时没有,今天垂直向下,我可以直观地看到它停在昨天的white2水平。
 
MosheDayan:
我试着用Alert来检查,结果马上写出 "EURUSD Error FileOpen() for writing",而且当天的所有级别都消失了......昨天的水平和以前所有的水平都还在......。所以...现场的光束从它应该开始的地方开始,到了昨天白2的水平,但在一天结束时没有,今天垂直向下可以直观地看到它停在昨天白2的水平。

你为什么需要访问文件? 你有white2的值,在使用它之前用Alert("white2 = ", white2)输出。

 
STARIJ:

为什么要引用文件? 你有white2的值,在使用它之前用Alert("white2 = ", white2)输出。

谢谢你的澄清....下面是它的内容。white2 = 0.0

p.s. 我才是那个愚蠢的人...White2 = 0.0是针对CSV中没有水平的其他货币对。但在CSV里有欧元兑美元的水平,Alert显示了它们的昨天(white2 1.1720)和今天(white2 1.1810)。

这条射线从它应该开始的地方开始,但它到了昨天的白色2的水平,即1.1720,而不是今天的白色2的水平,即1.1810,它没有到一天的结束时间23:59,但今天它停止在昨天的白色2,即1.1720。

 

难以理解的东西

描述了一个函数

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow")。

Alert("NextTick=",NextTick)。

//---------------------------


//---------------------------

Alert("NextTick=",NextTick)。

Alert("end IsBelow")。

}

//>>>>>>>>>>>>>>>>>>>>>>>

在分号前得到了一个信息,并扩展了身体{

问题是哪一个分号是应该的?

请解释...

 
buyanov:

难以理解的东西

描述了一个函数

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow")。

Alert("NextTick=",NextTick)。

//---------------------------


//---------------------------

Alert("NextTick=",NextTick)。

Alert("end IsBelow")。

}

//>>>>>>>>>>>>>>>>>>>>>>>

在分号前得到了一个信息,并扩展了身体{

问题是哪一个分号是应该的?

请解释...


空白的IsBelow()

 
buyanov:

难以理解的东西

描述了一个函数

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow")。

Alert("NextTick=",NextTick)。

//---------------------------


//---------------------------

Alert("NextTick=",NextTick)。

Alert("end IsBelow")。

}

//>>>>>>>>>>>>>>>>>>>>>>>

在分号前得到了一个信息,并扩展了身体{

问题是哪一个分号是应该的?

请解释...

答案就在这里
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4
原因: