Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 273

 
Lowech:
   int nomber = OrdersHistoryTotal();
   int tip=OrderType();
   if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY))  
Buenas tardes. Necesito ayuda. Si hay una orden de venta cerrada, la siguiente orden puede abrirse sólo para la compra. ¿Qué está mal en el código? Por favor, aconséjelo.

Ya se ha dicho que la segunda línea de este fragmento contiene un error: Antes de llamar a la función OrderType(), el pedido debe ser seleccionado mediante la función OrderSelect().

Hay un error en la línea 3: Pero ¿hay algún pedido con el número 1? Si el número mínimo fuera 1, es decir, la cuenta comienza con 1, entonces el número máximo sería igual al número (que haya 5 pedidos en total: números de pedido 1, 2, 3, 4, 5). Pero los pedidos están numerados desde 0 - ponga el cursor en OrdersHistoryTotal y pulse F1 para ver un ejemplo. ¿Cuál es el número máximo de pedidos?

 
Aleksey Vyazmikin:

Antes sugeriste dividir la fecha del mes por 7 y redondear, lo que se hace en la segunda tabla.

No entiendo su algoritmo.

Esto es lo que estoy pensando:

1. Determine el día de la semana del primer día del mes.

2. Averigua cuántos días faltan para el final de la semana (era del miércoles (3) al lunes 7-3 = 4).

3. El 5º día - el comienzo de la segunda semana

4. entonces en el bucle, buscamos una semana, si el número cae dentro del rango de 5 + 7 * x a 5 + 7 * (x +1), donde x - número de semana menos uno, entonces hemos encontrado la semana

Pero es complicado, ¿quizás haya una forma más fácil?

Alexey, estamos hablando de cosas diferentes. El problema no era determinar qué semana del mes es el número del mes, sino el primer día de la semana con este nombre en el mes. Se trata de tareas diferentes y, en consecuencia, de soluciones diferentes.

Durante 63 años todavía no puedo averiguar cómo calcular el número de semana en el mes. Por ejemplo, en Rusia el lunes se considera el primer día de la semana. Si el mes comienza el domingo, ¿cómo se cuenta el lunes? ¿Ha comenzado la segunda semana? ¿O qué? La pregunta es retórica, no es necesario iniciar una polémica al respecto.

 
Alexey Viktorov:

Alexei, estamos hablando de cosas diferentes. El problema no era determinar en qué semana del mes está el número del mes, sino si es el primer día de la semana con ese nombre en ese mes. Se trata de tareas diferentes y, en consecuencia, de soluciones diferentes.

Desde hace 63 años todavía no entiendo cómo contar el número de la semana en el mes. Digamos que en Rusia el primer día de la semana es el lunes. Si el mes comienza en domingo, ¿cómo se cuenta el lunes? ¿Ha comenzado la segunda semana? ¿O qué? La pregunta es retórica, no hay necesidad de iniciar una polémica al respecto.


Ya veo. Es una pregunta definitiva para mí...

 
Alexey Viktorov:

Alexei, estamos hablando de cosas diferentes. El problema no era determinar en qué semana del mes está el número del mes, sino si es el primer día de la semana con ese nombre en ese mes. Se trata de tareas diferentes y, en consecuencia, de soluciones diferentes.

Durante 63 años todavía no puedo averiguar cómo calcular el número de semana en el mes. Por ejemplo, en Rusia el lunes se considera el primer día de la semana. Si el mes comienza el domingo, ¿cómo se cuenta el lunes? ¿Ha comenzado la segunda semana? ¿O qué? La pregunta es retórica, no hay necesidad de iniciar una polémica al respecto.

Busqué la respuesta en Yandex - 4 maneras. Me gusta la cuarta vía: la "transversal". El 1 de enero comienza la primera semana del año, siete días después, el 8 de enero la segunda semana del año y así hasta el final del año. Es lo mismo mes a mes
Онлайн калькулятор: Определение номера недели по дате
  • Timur пользователь planetcalc
  • planetcalc.ru
Калькулятор ниже определяет порядковый номер недели в году. Как выяснилось, это не совсем тривиальный вопрос, и есть целых четыре разных способа подсчитать номер недели. Первый способ: Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 «ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ» — официальный способ расчета номера недели в Российской Федерации. По...
 
Darirunu Sale muy complicado. Debe haber una opción más sencilla. ¿Puede alguien compartirlo?
//+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//+-------------------------------------------------------+

#property strict
string Дни[7]={"Вс","Понедельник","Вторник","Среда","Четверг","Пятница","Сб"};
void OnStart()
{
  int День=Day(), ДеньН=DayOfWeek();
  Alert("----------------------");
  Alert("Сейчас на компьютере: ", TimeToStr(TimeLocal(),TIME_DATE));
  Alert("Последний тик с сервера: ", TimeToStr(TimeCurrent(),TIME_DATE), " Число ", День, " ", Дни[ДеньН]);

  int ДеньНачалаМесяца = (ДеньН-День+36) % 7;
  Alert("ДеньНеделиПервогоЧисла = ", Дни[ДеньНачалаМесяца]);

  int ЧислоПервойПятницы = ДеньНачалаМесяца==6?7:6-ДеньНачалаМесяца;
  int ЧислоВторогоПонедл = (ДеньНачалаМесяца<2?9:16)-ДеньНачалаМесяца;

  Alert("ЧислоПервойПятницы = ", ЧислоПервойПятницы, "  ЧислоВторогоПонедл = ", ЧислоВторогоПонедл);

  if(ЧислоВторогоПонедл>День)
  {
    Alert("Надо подождать числа ", ЧислоВторогоПонедл+1);
    return;
  }

  // Смотрим свечи, бары, бычьи, медвежьи
}
aquí está el algoritmo anterior leído de abajo a arriba
 
STARIJ:

Ya se ha dicho que la segunda línea de este fragmento contiene un error: Antes de llamar a la función OrderType(), el pedido debe ser seleccionado mediante la función OrderSelect().

Hay un error en la línea 3: Pero ¿hay algún pedido con el número 1? Si el número mínimo fuera 1, es decir, la cuenta comienza con 1, entonces el número máximo sería igual al número (que haya 5 pedidos en total: números de pedido 1, 2, 3, 4, 5). Pero los pedidos están numerados desde 0 - ponga el cursor en OrdersHistoryTotal y pulse F1 para ver un ejemplo. ¿Cuál es el número máximo de pedidos?

int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
   int tip=OrderType();
   

¿Es correcto ahora?

 
Lowech:
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))   - так какой наибольший номер ордера?
   int tip=OrderType();

¿y ahora está bien?

escribir un script y después de cada declaración mostrar la información + GetLastError() con Alert() - ver el script de ejemplo justo arriba
 
STARIJ:
escribir un script y después de cada operador imprimir la información + GetLastError() con Alert() - ver el script de ejemplo anterior

pero es mejor tomar el código de error de la variable _LastError para imprimirlo, de lo contrario puede destruir la lógica con un ligero "debug print"

GetLastError() al mismo tiempo hace una cosa poco obvia para GetXXX() - cambia su estado interno restableciendo el código de error a 0.

 
Maxim Kuznetsov:

sólo para la impresión es mejor tomar el código de error de la variable _LastError, de lo contrario es posible destruir la lógica por un ligero "debug print"

GetLastError() al mismo tiempo hace una cosa poco obvia para GetXXX() - cambia el estado interno, restableciendo el código de error a 0.

bueno, es cuestión de gustos - o bien se almacena el código de error en una variable y se reinicia el error o se almacena en _LastError para su uso posterior

 
STARIJ:
aquí está el algoritmo de arriba para leer de abajo hacia arriba
Eso fue rápido. ¿Cómo buscará los bares? ¿En un bucle o utilizando la estructura temporal?
Razón de la queja: