[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 285

 
gyfto:

对。我想我已经完成了。这是重新制作的蜱虫收集器,其将它们打包成第二个蜡烛。

它是。

成为了。

对代码的评论。

1.为了节省CPU时间,没有在虚拟烛台选择中使用开关码,而是注释了有选择的部分(因为选择是在编译前根据具体需要进行的)。

2.在工作中,与当地时间(离线即)没有带来的想法。在"while(time==TimeLocal()){//until one second has passed"循环中,我怀疑 FileWriteDouble 一定有MarketInfo(对我来说听起来像一个白痴的顶部)。如果你告诉我在那里什么看起来更合理,我将非常感激。

3.一个作者的构造

我已经在init()的最后声明了它。

4.在init()动态数组的开始部分

而不是使用的变量。

5.为了优化,理论上你可以使用WinAPI文件函数,以44字节的块(MarketInfo结构的长度或.hst中的任何东西)一次性写入历史。

6.完全删除了作者对写入Time[]单元格的时间的建模。出于同样的原因,在头部的while循环中,没有检查TimeLocal(),只有检查TimeCurrent()。

7.你还有什么建议来优化代码?

从第4点来看,必须理解为你在做一个指标,那么这种行为就不清楚了。

ArrayResize (bid, 1);//урезаем и обнуляем использованные массивы
ArrayResize (ask, 1);

ArrayInitialize() 很可能适合?

而最有可能的是,你应该拒绝使用指标数组。

 
TarasBY:

ArrayInitialize()可能起作用?

ArrayInitialize(ask,EMPTY_VALUE); 你是说?我没有。我到底为什么要把它砍掉,我是怕出现这样的情况。

(a, b, c)//问中的数值,每秒3次(很奇妙,但让我们假设一下)。

ArrayInitialize(ask, 0);//是(0, 0, 0)。

FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[]

- 关闭单元格将得到0。这就是为什么我重新定义了尺寸,以防止这种情况发生。检查 ArrayInitialize(ask, EMPTY_VALUE); 。

TarasBY:

你必须停止使用指标数组。

他们很有活力,这就是我所喜欢的。更少的命令,更少的处理器周期数。你必须在任何理论上可能的时间内做500毫秒的处理。......来完成。

 
你知道是否可以用手动窗口取代EA中的发送和关闭订单,并通过该窗口进入市场,这对那些不允许使用EA的经纪商来说是必要的。
 
gyfto:

ArrayInitialize(ask, EMPTY_VALUE); 你是说?我没有。我害怕出现这样的情况,所以我开始削减它。

(a, b, c)//问中的数值在每秒3次点击后(很奇妙,但假设)。

ArrayInitialize(ask, 0);//是(0, 0, 0)。

FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[]

- 关闭单元格将得到0。这就是为什么我重新定义了尺寸,以防止这种情况发生。ArrayInitialize(ask, EMPTY_VALUE); ; ; 检查它们。


他们是有活力的,这就是我所爱的。更少的命令,更少的时钟周期。你必须在任何理论上可能的瓶颈处管理500毫秒的处理.........来完成。

我不是这个意思:有些东西告诉我,你不会设法缩小指标阵列。此外,如果在这样的数组中有未填充的单元格,那里总是有一些值:0或EMPTY_VALUE,在这些计算中你会得到什么。

bid[ArrayMaximum(bid)];
ask[ArrayMinimum(ask)];
按照一般的逻辑:我将在一个循环中运行整个tick集合,并分别控制时间,一旦 "新条 "时间过去,就将其写入文件,在此过程中对工作数组进行清零和剪裁。
 
ex_kalibur:
如果我知道,是否有可能改变顾问中的发送和关闭订单,以手动调用交易窗口并通过该窗口进入市场,这对那些不允许使用顾问的经纪商来说是必要的。
顾问的窗口 "属性"->标签 "常规"->"自动交易"。
 
TarasBY:

根据一般的逻辑:我将在一个循环中运行整个tick集合,并分别控制时间,一旦 "新条 "的时间过去,就将其写入文件,在此过程中对工作数组进行清零和剪裁。


很奇怪...我有这种方法...唯一的一点是,时间是在tick收集周期本身中控制的,工作数组不会被剪掉,直到tick的副本被画出的次数达到没有tick的次数减去1秒。一秒钟过去了--画出一个新的刻度线,二秒钟--前一个刻度线的副本和一个新的刻度线,三秒钟--前一个刻度线的两个副本和一个新的刻度线,等等。可以在收盘价边上画一个破折号,而不是复制前一个勾,这个变体在代码中做了注释。
 
gyfto:

很奇怪...我是这样安排的...唯一的一点是,时间是在循环本身中控制的,工作数组不会被剪掉,直到画出一个刻度的副本,其次数与没有刻度的次数减去1。一秒钟过去了--画出一个新的刻度线,二秒钟--前一个刻度线的副本和一个新的刻度线,三秒钟--前一个刻度线的两个副本和一个新的刻度线,等等。可以在收盘价边上画一个破折号,而不是复制前一个勾,这个变体在代码中做了注释。

你和我谈论的是不同的周期。我说的是这个。

    while (!IsStopped() && IsExpertEnabled())
    {
        //---- Сбор тиков
    }
 
谁能告诉我如何去除小数点后的零?由于某种原因,我的代码中有4位小数。以下是代码。string l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3)。
 
Demon2057:
谁能告诉我如何去除小数点后的零?由于某种原因,我的代码中有4位小数。以下是代码。string l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3)。
https://docs.mql4.com/ru/strings/StringSubstr
 

你能告诉我我做错了什么吗...

我需要一个双倍类型 的变量来包含日期为0,20130429164459(指2013.04.29 16:44:59)。

EA代码的一部分。

#include <stdlib.mqh>
bool once=false;
int start()
  {
  if (once==false)
     {
    double DTM; // дата и время в формате 0,20130429164459
    int YY=TimeYear(   TimeCurrent());   // Year
    int MN=TimeMonth(  TimeCurrent());   // Month         
    int DD=TimeDay(    TimeCurrent());   // Day
    int HH=TimeHour(   TimeCurrent());   // Hour         
    int MM=TimeMinute( TimeCurrent());   // Minute
    int SS=TimeSeconds(TimeCurrent());   // Second
    DTM = YY*0.0001+MN*0.000001+DD*0.00000001+HH*0.0000000001+MM*0.000000000001+SS;
    
   Alert ("Значение переменной DTM с 06 знаками равно ", DoubleToStrMorePrecision(DTM,6));
   Alert ("Значение переменной DTM с 07 знаками равно ", DoubleToStrMorePrecision(DTM,7));
   Alert ("Значение переменной DTM с 08 знаками равно ", DoubleToStrMorePrecision(DTM,8));
   Alert ("Значение переменной DTM с 09 знаками равно ", DoubleToStrMorePrecision(DTM,9));
   Alert ("Значение переменной DTM с 10 знаками равно ", DoubleToStrMorePrecision(DTM,10));
   Alert ("Значение переменной DTM с 11 знаками равно ", DoubleToStrMorePrecision(DTM,11));
   Alert ("Значение переменной DTM с 12 знаками равно ", DoubleToStrMorePrecision(DTM,12));
   Alert ("Значение переменной DTM с 13 знаками равно ", DoubleToStrMorePrecision(DTM,13));
   Alert ("Значение переменной DTM с 14 знаками равно ", DoubleToStrMorePrecision(DTM,14));
   Alert ("Значение переменной DTM с 15 знаками равно ", DoubleToStrMorePrecision(DTM,15));
   once=true;
      }
   return(0);
  }

精度12、13和14的事件日志给出了错误的结果,见图