Cómo sin un objeto, sabemos el precio y esta es la línea, es necesario comprobar si ha cambiado o no, está claro que es necesario comparar este precio no sé cómo)
qué tipo de
donde obtener una medida del Precio2))
el precio de la última barra y será el Precio2, compare la Oferta con cualquier precio de la última barra de su elección - Apertura, Cierre, Alta, Baja.
Si quiere precios intermedios, debe guardar el historial de ticks y tomar el precio anterior de ahí, entonces la Oferta se comparará con el precio del tick anterior.
¿Y qué sentido tiene la normalización del precio? Es necesario normalizar los valores calculados que se utilizarán posteriormente en las órdenes comerciales, y el precio ya está normalizado.
El método de búsqueda en el siguiente es ligeramente diferente:
#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("Чёрт!");
}
}
No me tomes el pelo,ya no sé cómo dirigirme a él, pero no puedo hacer nada al respecto. Pensaba que si podía hacer una matriz, las condiciones se iban a dar a martillazos, filtrando la señal como si no hubiera nada que hacer.
No me hagas caso,ya no sé cómo dirigirme a él, pero no puedo hacer nada al respecto. Pensé que si podía hacer una matriz, entonces las condiciones serían un dolor de cabeza para filtrar la señal.
Podemos ir en otra dirección, no para obtener la diferencia de momentos en el tiempo, sino para comparar estos momentos (al mismo tiempo, podemos utilizar una expresión condicional de nuevo):
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
Una vez comprendida la esencia de las ideas aplicadas, y recordando lo que es el tipo datetime, trabajar con momentos de tiempo, si la precisión requerida no supera las unidades de segundos, no debería causar dificultades.
También podemos ir en la otra dirección, no para obtener la diferencia de momentos, sino para comparar estos momentos (al mismo tiempo, podemos utilizar una expresión condicional de nuevo):
Se da por vencido:
Una vez que se entienden las ideas, y recordando el tipo datetime, trabajar con puntos en el tiempo no debería ser un problema, siempre que la precisión requerida no supere las unidades de segundos.
Para ser sincero, no he descubierto cómo aplicarlo. Falta un milímetro, es una pena parar cuando está casi terminado.
Tarea, no escribir el precio en el array si el objeto tiempo(2º parámetro+3600seg>actual)||(1º parámetro tiempo - 2º parámetro tiempo)<3600seg )
/******************************************************************************/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;
}
Sí, muchas gracias, no hay palabras para describir lo útil que es, ¡tan claro! ¡¡¡Impresionanteooo!!!
Sería genial que pudieras enseñarte gradualmente habilidades importantes de la manera más directa y eficiente posible.
Y si otros pueden beneficiarse de la misma manera.
No se me ocurre nada) hay una línea Y cómo compruebo si la línea ha cambiado
No puedo pensar) hay una línea Y cómo puedo comprobar si esta línea ha cambiado
CHARTEVENT_OBJECT_CHANGE
Modificación de las propiedades de un objeto gráfico mediante el diálogo de propiedades
CHARTEVENT_OBJECT_CHANGE
Modificación de las propiedades de un objeto gráfico mediante el diálogo de propiedades
Cómo sin un objeto, si sabemos que el precio es una línea, tenemos que comprobar si ha cambiado, está claro que tenemos que comparar el precio).
qué tipo de
donde obtener una medida del Precio2))
Cómo sin un objeto, sabemos el precio y esta es la línea, es necesario comprobar si ha cambiado o no, está claro que es necesario comparar este precio no sé cómo)
qué tipo de
donde obtener una medida del Precio2))
el precio de la última barra y será el Precio2, compare la Oferta con cualquier precio de la última barra de su elección - Apertura, Cierre, Alta, Baja.
Si quiere precios intermedios, debe guardar el historial de ticks y tomar el precio anterior de ahí, entonces la Oferta se comparará con el precio del tick anterior.
¿Y qué sentido tiene la normalización del precio? Es necesario normalizar los valores calculados que se utilizarán posteriormente en las órdenes comerciales, y el precio ya está normalizado.
el precio de la última barra será Precio2
Si quieres precios intermedios, tienes que guardar el historial de ticks y tomar el precio anterior de ahí.
Lo tengo todo resuelto :)
No, no funcionaría con mis barras.
El método de búsqueda en el siguiente es ligeramente diferente:
No me tomes el pelo,ya no sé cómo dirigirme a él, pero no puedo hacer nada al respecto. Pensaba que si podía hacer una matriz, las condiciones se iban a dar a martillazos, filtrando la señal como si no hubiera nada que hacer.
No me hagas caso,ya no sé cómo dirigirme a él, pero no puedo hacer nada al respecto. Pensé que si podía hacer una matriz, entonces las condiciones serían un dolor de cabeza para filtrar la señal.
La función TimeCurrent( ) está sobrecargada. Si lees la descripción del tipo datetime, verás que la primera variante de la función sirve:
Lo hace:
Podemos ir en otra dirección, no para obtener la diferencia de momentos en el tiempo, sino para comparar estos momentos (al mismo tiempo, podemos utilizar una expresión condicional de nuevo):
La puesta en marcha da:
Una vez comprendida la esencia de las ideas aplicadas, y recordando lo que es el tipo datetime, trabajar con momentos de tiempo, si la precisión requerida no supera las unidades de segundos, no debería causar dificultades.
La función TimeCurrent( ) está sobrecargada. Si lees la descripción de lo que es el tipo datetime, verás que la primera versión de la función está bien:
Lo hace:
También podemos ir en la otra dirección, no para obtener la diferencia de momentos, sino para comparar estos momentos (al mismo tiempo, podemos utilizar una expresión condicional de nuevo):
Se da por vencido:
Una vez que se entienden las ideas, y recordando el tipo datetime, trabajar con puntos en el tiempo no debería ser un problema, siempre que la precisión requerida no supere las unidades de segundos.
Para ser sincero, no he descubierto cómo aplicarlo. Falta un milímetro, es una pena parar cuando está casi terminado.
Tarea, no escribir el precio en el array si el objeto tiempo(2º parámetro+3600seg>actual)||(1º parámetro tiempo - 2º parámetro tiempo)<3600seg )