任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 639

 
Top2n:

是的,非常感谢你,你简直是无话可说,多么有帮助,如此清晰!你是如何做到的?真棒!!!。

如果你能以最直接、最有效的方式逐渐学会自己的重要技能,那就太酷了。

而如果其他人也能以同样的方式受益。

 

我想不出来)有一条线,我怎么检查这条线是否有变化呢?

 
ClanVi:

我想不出)有一条线,我如何检查这条线是否有变化?



变化

通过属性对话框改变一个图形对象的属性

参数 "sparam "返回改变的对象的名称。如果该对象是你的,请检查对你的对象至关重要的属性。
 
barabashkakvn:


变化

通过属性对话框改变一个图形对象的属性

参数 "sparam "返回改变的对象的名称。如果该对象是你的,那么就检查对你的对象至关重要的属性。

如何没有一个对象,如果我们知道价格是一条线,我们要检查它是否有变化,很明显,我们要比较价格)。

什么样的

if(NormalizeDouble(Price,Digits)-NormalizeDouble(Price2,Digits)!=0)
Price2 = Price;

在哪里可以得到Price的衡量标准2))

 
ClanVi:

如何没有一个对象,我们知道价格和这是线,有必要检查它是否有变化,很明显,有必要比较这个价格我不知道如何)

什么样的

在哪里可以得到Price的衡量标准2))


是指最后一栏的价格,将是Price2,将Bid与您选择的最后一栏的任何价格进行比较--开盘价、收盘价、最高价、最低价。

如果你想要中间价格,你需要保存tick历史记录,并从那里获取之前的价格,然后Bid将与之前tick的价格进行比较。

你需要对以后用于交易订单 的计算值进行标准化,而价格已经被标准化了。

 
evillive:

最后一栏的价格将是Price2

如果你想要中间价格,你必须保存tick历史,并从那里获取以前的价格。

都搞清楚了 :)

不,它不能与我的酒吧一起使用。

 
在信号中,我只能设置作者使用的最大风险,不能再多了?
 
simpleton:

下面这个的搜索方法略有不同。

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))|| !FilTrenLin(subname+IntegerToString(i))) { \\ Вот куда вставил
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/
 bool FilTrenLin(string name) {

const  string   dt_123 = TimeToStr(TimeCurrent(),TIME_SECONDS); //
const  datetime   vremnin= StrToTime(dt_123); // Присваиваем время в секундах 
  
    
const  datetime     vrem2kor= ObjectGet(name,OBJPROP_TIME2);// время второй координаты
    MqlDateTime str1;
    TimeToStruct(vrem2kor,str2);
const  int     PjatPon=str1.sec;

    if(PjatPon+3600>=vremnin){ \\ если время 2-ой координаты + час > времени нынешнего то блокируем запись в массив
   Print("  PjatPon  ", PjatPon,"  vremnin ",vremnin,"  vrem2kor ",vrem2kor);
        return false;
    }  
   return true;
}
/******************************************************************************/ void FillAndPrint(double &array[], const bool buy) {   if (MassTrendNumber(array, buy)) {     const int limit = ArraySize(array);     Print("Найдено объектов: ", limit);     for (int i = 0; i < limit; i++) {       Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));     }   } else {     Print("Чёрт!");   } }

不要认为这是厚颜无耻,我甚至不知道该如何称呼它了,但我忍不住了我想,如果我可以组成一个阵列,那么条件就会被锤炼出来,过滤信号 就像其他东西一样。

 
Top2n:

不要管我,我甚至不知道如何解决这个问题了,但我也无 能为力。我想,如果我可以做一个数组,那么条件就会很麻烦,要过滤信号。

TimeCurrent()函数 被重载。如果你读了datetime类型 的描述,你会发现第一个函数的第一个变体就可以了。

#property strict

/******************************************************************************/
long DiffInSecs(const datetime dt1, const datetime dt2) {
  return dt1 - dt2;
}

/******************************************************************************/
void OnStart() {
  const datetime dt = TimeCurrent();

  Sleep(5555);
  Print("Diff in secs = ", DiffInSecs(TimeCurrent(), dt));
}

它确实如此。

01:10:43 Script 2 EURUSDm,H1: loaded successfully
01:10:43 2 EURUSDm,H1: initialized
01:10:49 2 EURUSDm,H1: Diff in secs = 6
01:10:49 2 EURUSDm,H1: uninit reason 0
01:10:49 Script 2 EURUSDm,H1: removed

我们可以朝另一个方向走,不是为了得到时间上的时刻差,而是为了比较这些时刻(同时,我们可以再次使用条件表达式)。

#property strict

/******************************************************************************/
void test(const datetime dt) {
  Sleep(2000);
  Print("Момент времени dt ", TimeCurrent() < dt ? "НЕ " : "", "достигнут");
}

/******************************************************************************/
void OnStart() {
  const datetime dt1 = TimeCurrent();
  const datetime dt2 = dt1 + 5;

  test(dt2);
  test(dt2);
  test(dt2);
  test(dt2);
}

创业公司给。

01:30:29 Script 2 EURUSDm,H1: loaded successfully
01:30:29 2 EURUSDm,H1: initialized
01:30:31 2 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:33 2 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:35 2 EURUSDm,H1: Момент времени dt достигнут
01:30:38 2 EURUSDm,H1: Момент времени dt достигнут
01:30:38 2 EURUSDm,H1: uninit reason 0
01:30:38 Script 2 EURUSDm,H1: removed

在理解了应用思想的精髓,并记住了什么是日期时间类型之后,如果所要求的精度不超过秒的单位,那么在处理时间的时刻时,应该不会有什么困难。

 
simpleton:

TimeCurrent()函数 被重载。如果你阅读了关于什么是datetime类型 的描述,你会发现第一个版本的函数是可以的。

它确实如此。

我们也可以朝另一个方向走,不是为了得到时间时刻的差异,而是为了比较这些时刻(同时,我们可以再次使用条件表达式)。

奔跑着的人。

一旦你理解了这些想法,并且记住了datetime类型,只要要求的精度不超过秒为单位,处理时间点应该是没有问题的。


说实话,我还没有想出如何应用它。还有一毫米的距离,在快完成的时候停下来是很可惜的。

任务,如果对象时间(第二参数+3600秒>当前)||(第一参数时间-第二参数时间)<3600秒,则不将价格写入数组。)

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit+2; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))||!FilTrenLin(subname + IntegerToString(i)) {// Условие вставил вот сюда
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }
 
  return true; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/
 bool FilTrenLin(string name) {

 const  datetime    dt = TimeCurrent();
 const  datetime   dt1 = ObjectGet(name,OBJPROP_TIME1);
 const  datetime   dt2 = ObjectGet(name,OBJPROP_TIME2);
  Print("  DiffInSecs(dt,dt2)  ", DiffInSecs(dt,dt2),"  DiffInSecs(dt2,dt1))  ",DiffInSecs(dt2,dt1),"  dt1  ",dt1);
  
     if(DiffInSecs(dt,dt2)<3600||DiffInSecs(dt2,dt1)<3600)// Если время объекта второго параметра + 3600 сек > текущего времени,
 или если разница первого и второго   параметра времени объекта < 3600 сек, то запускаем ошибку, чтоб цена не записалась в массив.
     {   return false;
     }  
   return true;
} 
/******************************************************************************/
long DiffInSecs(const datetime dt1, const datetime dt2) {
  return dt1 - dt2;
}