Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 273

 
Lowech:
   int nomber = OrdersHistoryTotal();
   int tip=OrderType();
   if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY))  
Boa tarde. Preciso de alguma ajuda. Se houver um pedido fechado de Venda, o próximo pedido pode ser aberto somente para Compra. O que há de errado no código? Por favor, informe.

Já foi dito que a segunda linha deste fragmento contém um erro: Antes da função OrderType() ser chamada, a ordem deve ser selecionada usando a função OrderSelect().

Há um erro na linha 3: Mas existe uma ordem com o número 1? Se o número mínimo fosse 1, ou seja, a conta começa com 1, então o número máximo seria igual ao número (que haja 5 ordens no total: ordens 1, 2, 3, 4, 5). Mas as ordens são numeradas a partir de 0 - coloque o cursor sobre OrderHistoryTotal e pressione F1 para ver um exemplo. Então, qual é o número máximo de pedidos?

 
Aleksey Vyazmikin:

Anteriormente, você sugeriu dividir a data do mês por 7 e arredondamento, o que é feito na segunda tabela.

Eu não entendo seu algoritmo.

Agora aqui está o que estou pensando:

1. determinar o dia da semana do primeiro dia do mês.

2. Descubra quantos dias faltam para o final da semana (era quarta-feira (3) a segunda-feira 7-3 = 4).

3. O 5º dia é o início da segunda semana

4. então, no loop, estamos procurando uma semana, se o número estiver dentro da faixa de 5 + 7 * x a 5 + 7 * (x +1), onde x - número da semana menos um, então encontramos a semana

Mas é complicado, talvez haja uma maneira mais fácil...

Alexey, estamos falando de coisas diferentes. O problema não era determinar qual semana do mês é o número do mês, mas o primeiro dia da semana com este nome no mês. Estas são tarefas diferentes e, conseqüentemente, soluções diferentes.

Durante 63 anos eu ainda não consigo descobrir como calcular o número de semanas do mês. Por exemplo, na Rússia, a segunda-feira é considerada o primeiro dia da semana. Se o mês começa no domingo, então como você conta na segunda-feira? A segunda semana já começou? Ou o quê???? A questão é retórica, não há necessidade de iniciar uma polêmica sobre isso.

 
Alexey Viktorov:

Alexei, estamos falando de coisas diferentes. O problema não era determinar em que semana do mês está o número do mês, mas se é o primeiro dia da semana com esse nome naquele mês. Estas são tarefas diferentes e, conseqüentemente, soluções diferentes.

Durante 63 anos eu ainda não entendo como contar o número da semana do mês. Digamos que na Rússia o primeiro dia da semana é segunda-feira. Se o mês começa no domingo, então como é contada a segunda-feira? A segunda semana já começou? Ou o quê???? A questão é retórica, não há necessidade de iniciar uma polêmica sobre isso.


Estou vendo. É uma pergunta definitiva para mim...

 
Alexey Viktorov:

Alexei, estamos falando de coisas diferentes. O problema não era determinar em que semana do mês está o número do mês, mas se é o primeiro dia da semana com esse nome naquele mês. Estas são tarefas diferentes e, conseqüentemente, soluções diferentes.

Durante 63 anos eu ainda não consigo descobrir como calcular o número de semanas do mês. Por exemplo, na Rússia, a segunda-feira é considerada o primeiro dia da semana. Se o mês começa no domingo, então como você conta na segunda-feira? A segunda semana já começou? Ou o quê???? A questão é retórica, não há necessidade de iniciar uma polêmica sobre isso.

Procurei a resposta em Yandex - 4 maneiras. Eu gosto do Quarto Caminho: "Crosscutting". O 1º de janeiro começa na primeira semana do ano, sete dias depois, 8 de janeiro na segunda semana do ano e assim por diante até o final do ano. É o mesmo mês por mês
Онлайн калькулятор: Определение номера недели по дате
  • Timur пользователь planetcalc
  • planetcalc.ru
Калькулятор ниже определяет порядковый номер недели в году. Как выяснилось, это не совсем тривиальный вопрос, и есть целых четыре разных способа подсчитать номер недели. Первый способ: Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 «ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ» — официальный способ расчета номера недели в Российской Федерации. По...
 
Darirunu Sai muito complicado. Deve haver uma opção mais simples. Qualquer um pode compartilhar?
//+-------------------------------------------------------+
//| Проверка дней недели                       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;
  }

  // Смотрим свечи, бары, бычьи, медвежьи
}
aqui está o algoritmo acima lido de baixo para cima
 
STARIJ:

Já foi dito que a segunda linha deste fragmento contém um erro: Antes da função OrderType() ser chamada, a ordem deve ser selecionada usando a função OrderSelect().

Há um erro na linha 3: Mas existe uma ordem com o número 1? Se o número mínimo fosse 1, ou seja, a conta começa com 1, então o número máximo seria igual ao número (que haja 5 ordens no total: ordens 1, 2, 3, 4, 5). Mas as ordens são numeradas a partir de 0 - coloque o cursor sobre OrderHistoryTotal e pressione F1 para ver um exemplo. Então, qual é o número máximo de pedidos?

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

Está correto agora?

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

e agora está certo?

escreva um script e após cada declaração exiba as informações + GetLastError() com Alert() - veja o script de exemplo logo acima
 
STARIJ:
escreva um script e depois que cada operador imprimir as informações + GetLastError() com Alert() - veja o script de exemplo acima

mas é melhor pegar o código de erro da variável _LastError para imprimi-lo, caso contrário você pode destruir a lógica com uma leve "impressão de depuração".

GetLastError() ao mesmo tempo faz uma coisa não óbvia para GetXXX() - muda seu código de erro interno de reinicialização de estado para 0.

 
Maxim Kuznetsov:

somente para impressão é melhor tirar o código de erro da variável _LastError, caso contrário é possível destruir a lógica por uma "impressão de depuração" leve

GetLastError() ao mesmo tempo faz uma coisa não óbvia para GetXXX() - ele muda o estado interno, redefinindo o código de erro para 0.

bem, é uma questão de gosto - ou armazenar o código de erro em uma variável e reiniciar o erro ou armazená-lo em _LastError para uso posterior

 
STARIJ:
aqui está o algoritmo acima para ler de baixo para cima
Isso foi rápido. Como você vai procurar por barras? Em loop ou usar a estrutura de tempo?