Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 273

 
Lowech:
   int nomber = OrdersHistoryTotal();
   int tip=OrderType();
   if(OrderSelect(nomber,SELECT_BY_POS,MODE_HISTORY))  
Buon pomeriggio. Ho bisogno di aiuto. Se c'è un ordine Sell chiuso, l'ordine successivo può essere aperto solo per Buy. Cosa c'è di sbagliato nel codice?

Vi è già stato detto che la seconda linea di questo frammento contiene un errore: prima che la funzione OrderType() sia chiamata, l'ordine deve essere selezionato usando la funzione OrderSelect().

C'è un errore nella linea 3: ma c'è un ordine con il numero 1? Se il numero minimo fosse 1, cioè il conto inizia con 1, allora il numero massimo sarebbe uguale al numero (che ci siano 5 ordini in totale: numeri d'ordine 1, 2, 3, 4, 5). Ma gli ordini sono numerati da 0 - metti il cursore su OrdersHistoryTotal e premi F1 per vedere un esempio. Qual è il numero massimo di ordini?

 
Aleksey Vyazmikin:

Prima hai suggerito di dividere la data del mese per 7 e di arrotondare, cosa che viene fatta nella seconda tabella.

Non capisco il suo algoritmo.

Ora ecco cosa sto pensando:

1. Determinare il giorno della settimana del primo giorno del mese.

2. Scopri quanti giorni mancano alla fine della settimana (era mercoledì (3) a lunedì 7-3 = 4).

3. Il 5° giorno - l'inizio della seconda settimana

4. poi nel ciclo, stiamo cercando una settimana, se il numero rientra nell'intervallo da 5 + 7 * x a 5 + 7 * (x +1), dove x - numero della settimana meno uno, allora abbiamo trovato la settimana

Ma è complicato, forse c'è un modo più semplice?

Alexey, stiamo parlando di cose diverse. Il problema non era determinare quale settimana del mese è il numero del mese, ma il primo giorno della settimana con questo nome nel mese. Si tratta di compiti diversi e, di conseguenza, di soluzioni diverse.

Per 63 anni non riesco ancora a capire come calcolare il numero di settimane nel mese. Per esempio, in Russia il lunedì è considerato il primo giorno della settimana. Se il mese inizia di domenica, come si conta il lunedì? È iniziata la seconda settimana? O cosa? La domanda è retorica, non c'è bisogno di iniziare una polemica su di essa.

 
Alexey Viktorov:

Alexei, stiamo parlando di cose diverse. Il problema non era determinare in quale settimana del mese si trova il numero del mese, ma se è il primo giorno della settimana con quel nome in quel mese. Si tratta di compiti diversi e, di conseguenza, di soluzioni diverse.

Per 63 anni non ho ancora capito come contare il numero della settimana nel mese. Diciamo che in Russia il primo giorno della settimana è il lunedì. Se il mese inizia di domenica, come si conta il lunedì? È iniziata la seconda settimana? O cosa? La domanda è retorica, non c'è bisogno di iniziare una polemica su di essa.


Capisco. È una domanda definitiva per me...

 
Alexey Viktorov:

Alexei, stiamo parlando di cose diverse. Il problema non era determinare in quale settimana del mese si trova il numero del mese, ma se è il primo giorno della settimana con quel nome in quel mese. Si tratta di compiti diversi e, di conseguenza, di soluzioni diverse.

Per 63 anni non riesco ancora a capire come calcolare il numero di settimane nel mese. Per esempio, in Russia il lunedì è considerato il primo giorno della settimana. Se il mese inizia di domenica, come si conta il lunedì? È iniziata la seconda settimana? O cosa? La domanda è retorica, non c'è bisogno di iniziare una polemica su di essa.

Ho cercato la risposta su Yandex - 4 modi. Mi piace la quarta via: "trasversale". Il 1° gennaio inizia la prima settimana dell'anno, sette giorni dopo, l'8 gennaio la seconda settimana dell'anno e così via fino alla fine dell'anno. È lo stesso mese per mese
Онлайн калькулятор: Определение номера недели по дате
  • Timur пользователь planetcalc
  • planetcalc.ru
Калькулятор ниже определяет порядковый номер недели в году. Как выяснилось, это не совсем тривиальный вопрос, и есть целых четыре разных способа подсчитать номер недели. Первый способ: Стандарт ISO 8601 и соответствующий ему ГОСТ ИСО 8601-2001 «ПРЕДСТАВЛЕНИЕ ДАТ И ВРЕМЕНИ» — официальный способ расчета номера недели в Российской Федерации. По...
 
Darirunu Viene fuori molto complicato. Ci deve essere un'opzione più semplice. Qualcuno può condividere?
//+-------------------------------------------------------+
//| Проверка дней недели                       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;
  }

  // Смотрим свечи, бары, бычьи, медвежьи
}
Ecco l'algoritmo di cui sopra letto dal basso verso l'alto
 
STARIJ:

Vi è già stato detto che la seconda linea di questo frammento contiene un errore: prima che la funzione OrderType() sia chiamata, l'ordine deve essere selezionato usando la funzione OrderSelect().

C'è un errore nella linea 3: ma c'è un ordine con il numero 1? Se il numero minimo fosse 1, cioè il conto inizia con 1, allora il numero massimo sarebbe uguale al numero (che ci siano 5 ordini in totale: numeri d'ordine 1, 2, 3, 4, 5). Ma gli ordini sono numerati da 0 - metti il cursore su OrdersHistoryTotal e premi F1 per vedere un esempio. Qual è il numero massimo di ordini?

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

È corretto ora?

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

e ora è giusto?

scrivere uno script e dopo ogni dichiarazione visualizzare le informazioni + GetLastError() con Alert() - vedere lo script di esempio appena sopra
 
STARIJ:
scrivere uno script e dopo ogni operatore stampare le informazioni + GetLastError() con Alert() - vedere lo script di esempio sopra

ma è meglio prendere il codice di errore dalla variabile _LastError per stamparlo, altrimenti si può distruggere la logica con un leggero "debug print"

GetLastError() allo stesso tempo fa una cosa non ovvia per GetXXX() - cambia il suo stato interno resettando il codice di errore a 0.

 
Maxim Kuznetsov:

solo per la stampa è meglio prendere il codice di errore dalla variabile _LastError, altrimenti è possibile distruggere la logica con un leggero "debug print".

GetLastError() allo stesso tempo fa una cosa non ovvia per GetXXX() - cambia lo stato interno, resettando il codice di errore a 0.

beh, è una questione di gusti - o memorizzare il codice di errore in una variabile e resettare l'errore o memorizzarlo in _LastError per un uso successivo

 
STARIJ:
ecco l'algoritmo qui sopra da leggere dal basso verso l'alto
È stato veloce. Come cercherete i bar? In un ciclo o usare la struttura temporale?