#property strict/******************************************************************************/bool AddValue(double &array[], constdouble value) {
constint size = ArraySize(array);
if (ArrayResize(array, size + 1) != size + 1) {
returnfalse; // Ошибка, значение не может быть добавлено к массиву
}
array[size] = value; //записываемreturntrue; // Нет ошибки, значение добавлено к массиву
}
/******************************************************************************/bool AddValueIfFound(double &array[], conststring name) {
constint type = ObjectType(name);
if (type == OBJ_TREND) {
switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switchcase Goldenrod:
case Gainsboro:
case White:
if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
returnfalse; // Ошибка, значение найдено, но не может быть добавлено к массиву
}
}
}
returntrue; // Нет ошибки, значение, если найдено, добавлено к массиву
}
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))|| !FilTrenLin(subname+IntegerToString(i))) { \\ Вот куда вставилreturnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/boolFilTrenLin(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);
returnfalse;
}
returntrue;
}
/******************************************************************************/void FillAndPrint(double &array[], constbool buy) {
if (MassTrendNumber(array, buy)) {
constint limit = ArraySize(array);
Print("Найдено объектов: ", limit);
for (int i = 0; i < limit; i++) {
Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
}
} else {
Print("Чёрт!");
}
}
01:30:29 Script 2 EURUSDm,H1: loaded successfully
01:30:292 EURUSDm,H1: initialized
01:30:312 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:332 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:352 EURUSDm,H1: Момент времени dt достигнут
01:30:382 EURUSDm,H1: Момент времени dt достигнут
01:30:382 EURUSDm,H1: uninit reason 001:30:38 Script 2 EURUSDm,H1: removed
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit+2; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))||!FilTrenLin(subname + IntegerToString(i)) {// Условие вставил вот сюдаreturnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/bool FilTrenLin(string name) {
constdatetime dt = TimeCurrent();
constdatetime dt1 = ObjectGet(name,OBJPROP_TIME1);
constdatetime 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 сек, то запускаем ошибку, чтоб цена не записалась в массив.
{ returnfalse;
}
returntrue;
}
/******************************************************************************/long DiffInSecs(constdatetime dt1, constdatetime dt2) {
return dt1 - dt2;
}
是的,非常感谢你,你简直是无话可说,多么有帮助,如此清晰!你是如何做到的?真棒!!!。
如果你能以最直接、最有效的方式逐渐学会自己的重要技能,那就太酷了。
而如果其他人也能以同样的方式受益。
我想不出来)有一条线,我怎么检查这条线是否有变化呢?
我想不出)有一条线,我如何检查这条线是否有变化?
变化
通过属性对话框改变一个图形对象的属性
变化
通过属性对话框改变一个图形对象的属性
如何没有一个对象,如果我们知道价格是一条线,我们要检查它是否有变化,很明显,我们要比较价格)。
什么样的
在哪里可以得到Price的衡量标准2))
如何没有一个对象,我们知道价格和这是线,有必要检查它是否有变化,很明显,有必要比较这个价格我不知道如何)
什么样的
在哪里可以得到Price的衡量标准2))
是指最后一栏的价格,将是Price2,将Bid与您选择的最后一栏的任何价格进行比较--开盘价、收盘价、最高价、最低价。
如果你想要中间价格,你需要保存tick历史记录,并从那里获取之前的价格,然后Bid将与之前tick的价格进行比较。
你需要对以后用于交易订单 的计算值进行标准化,而价格已经被标准化了。
最后一栏的价格将是Price2
如果你想要中间价格,你必须保存tick历史,并从那里获取以前的价格。
都搞清楚了 :)
不,它不能与我的酒吧一起使用。
下面这个的搜索方法略有不同。
不要认为这是厚颜无耻,我甚至不知道该如何称呼它了,但我忍不住了。我想,如果我可以组成一个阵列,那么条件就会被锤炼出来,过滤信号 就像其他东西一样。
不要管我,我甚至不知道如何解决这个问题了,但我也无 能为力。我想,如果我可以做一个数组,那么条件就会很麻烦,要过滤信号。
TimeCurrent()函数 被重载。如果你读了datetime类型 的描述,你会发现第一个函数的第一个变体就可以了。
它确实如此。
我们可以朝另一个方向走,不是为了得到时间上的时刻差,而是为了比较这些时刻(同时,我们可以再次使用条件表达式)。
创业公司给。
在理解了应用思想的精髓,并记住了什么是日期时间类型之后,如果所要求的精度不超过秒的单位,那么在处理时间的时刻时,应该不会有什么困难。
TimeCurrent()函数 被重载。如果你阅读了关于什么是datetime类型 的描述,你会发现第一个版本的函数是可以的。
它确实如此。
我们也可以朝另一个方向走,不是为了得到时间时刻的差异,而是为了比较这些时刻(同时,我们可以再次使用条件表达式)。
奔跑着的人。
一旦你理解了这些想法,并且记住了datetime类型,只要要求的精度不超过秒为单位,处理时间点应该是没有问题的。
说实话,我还没有想出如何应用它。还有一毫米的距离,在快完成的时候停下来是很可惜的。
任务,如果对象时间(第二参数+3600秒>当前)||(第一参数时间-第二参数时间)<3600秒,则不将价格写入数组。)