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

 
Alexandr Sokolov #:


2) Se un array è indicizzato al contrario, allora le nuove celle dovrebbero apparire all'inizio dell'array - il che non è il caso

Perché le nuove celle dovrebbero apparire all'inizio di una matrice? - Se non mi sbaglio, dovrebbe essere scritto nell'aiuto che quando si usa ArraySetAsSeries(), l'array non verrà fisicamente riallocato in memoria, ma verrà applicata l'indicizzazione inversa quando si accede agli elementi dell'array

SZZ: il tuo esempio è complicato, l'ho abbozzato:

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   int arr1[] = {1, 2, 3, 4, 5};
   int arr2[] = {1, 2, 3, 4, 5};
   ArraySetAsSeries(arr2, true);
   Print("Start size : ", ArraySize(arr1), " , ", ArraySize(arr2));
   Print("Resize : ", ArrayResize(arr1, 10), " , ", ArrayResize(arr2, 10));
   string s1 = "", s2 = "";
   for(int i = 0, j = 0; i < ArraySize(arr1) && j < ArraySize(arr2); i++, j++)
   {
      s1 += (string)arr1[i] + " , ";
      s2 += (string)arr2[j] + " , ";
   }
   Print("arr1 = ", s1);
   Print("arr2 = ", s2);
}

2022.04.18 21:31:59.223 tst EURUSD,H1: arr2 = 5 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: arr1 = 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 , 0 , 0 ,

2022.04.18 21:31:59.223 tst EURUSD,H1: Resize : 10 , 10

2022.04.18 21:31:59.223 tst EURUSD,H1: Start size : 5 , 5

 
Si prega di consigliare come funziona in MT5
iClose(NULL,PERIOD_CURRENT,shift)

Ottengo l'errore'iClose' - chiamata ambigua a funzione sovraccaricata.

In generale, l'obiettivo è quello di selezionare il TF.

Ho voluto sceglierlo con MT4 per abitudine

if(iClose(NULL, TF(), 1) < iOpen(NULL, TF(), 1))

int TF()
  {
   int tf;
   switch(TF)
     {
      case 1 :
         tf = 1;
         break;
      case 2 :
         tf = 5;
         break;
      case 3 :
         tf = 15;
         break;
      case 4 :
         tf = 30;
         break;
      case 5 :
         tf = 60;
         break;
      case 6 :
         tf = 240;
         break;
      case 7 :
         tf = 1440;
         break;
      case 8 :
         tf = 10080;
         break;
      case 9 :
         tf = 43200;
         break;
      default:
         tf = 10;
         Print(tf);
     }
   return(tf);
  }

Ma ho fallito".

 
Александр 'iClose' - chiamata ambigua a funzione sovraccaricata.

In generale, l'obiettivo è quello di selezionare il TF.

Ho voluto sceglierlo con MT4 per abitudine

Ma ho fallito.

periodi in MT5

se(Periodo()==1) ritorna "M1";

if(Periodo()==2) restituisce "M2";

if(Periodo()==3) restituisce "M3";

if(Periodo()==4) restituisce "M4";

if(Periodo()==5) restituisce "M5";

if(Periodo()==6) restituisce "M6";

se(Periodo()==10) ritorna "M10";

if(Periodo()==12) restituisce "M12";

if(Periodo()==15) restituisce "M15";

if(Periodo()==20) restituisce "M20";

se(Periodo()==30) ritorna "M30";

se(Periodo()==16385) ritorna "H1";

if(Periodo()==16386) ritorna "H2";

se(Periodo()==16387) ritorna "H3";

se(Periodo()==16388) ritorna "H4";

se(Periodo()==16390) ritorna "H6";

if(Periodo()==16392) restituisce "H8";

se(Periodo()==16396) ritorna "H12";

if(Periodo()==16408) ritorna "Quotidiano";

if(Periodo()==32769) ritorna "Settimanale";

if(Periodo()==49153) ritorna "Mensile";

 
Andrei Sokolov #:

periodi in mt5

se(Periodo()==1) ritorna "M1";

if(Periodo()==2) restituisce "M2";

if(Periodo()==3) restituisce "M3";

if(Periodo()==4) restituisce "M4";

if(Periodo()==5) restituisce "M5";

if(Periodo()==6) restituisce "M6";

if(Periodo()==10) restituisce "M10";

if(Periodo()==12) restituisce "M12";

if(Periodo()==15) restituisce "M15";

if(Periodo()==20) restituisce "M20";

se(Periodo()==30) ritorna "M30";

se(Periodo()==16385) ritorna "H1";

if(Periodo()==16386) ritorna "H2";

se(Periodo()==16387) ritorna "H3";

se(Periodo()==16388) ritorna "H4";

se(Periodo()==16390) ritorna "H6";

if(Periodo()==16392) restituisce "H8";

se(Periodo()==16396) ritorna "H12";

if(Period()==16408) restituisce "Daily";

if(Periodo()==32769) ritorna "Settimanale";

if(Periodo()==49153) ritorna "Mensile";

Grazie!

 
Александр #:

Grazie!

Perché non ti piace ENUM_TIMEFRAMES?

E puoi mettere le variabili in input sotto forma di enumerazione e selezionarle come vuoi... Perché dovresti fare un tale casino? E in mql4 questa enumerazione è stata disponibile per molto tempo...

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

Perché non ti piace ENUM_TIMEFRAMES?

E puoi mettere le variabili in input come un'enumerazione e selezionarle come vuoi... Perché devi fare tutto questo casino? E in mql4 questa enumerazione è stata disponibile per secoli...

+

 
Alexey Viktorov #:

Perché non ti piace ENUM_TIMEFRAMES?

E puoi mettere le variabili in input sotto forma di enumerazione e selezionarle come vuoi... Perché dovresti fare un tale casino? E in mql4 questa enumerazione è stata anche disponibile per molto tempo...

Grazie! Non ne avevo idea.

 

Colleghi, per favore consigliate il miglior algoritmo per trovare il prezzo dell'ordine limite precedentemente piazzato più vicino al prezzo corrente - rispettivamente al limite di vendita ascendente, all'offerta

il limite di acquisto che è più vicino al fondo.

Questo f-iio conta la quantità ma ho bisogno del PREZZO dell'ordine limite piazzato precedentemente per far tornare il f-iio...


Finora, sto usando il prezzo minimo per il limite di vendita e il prezzo massimo per il limite di acquisto ....

int Price_of_orders(int Magic_) // цена ближайшего ордера к цене по магику
  {
//--- получим общее количество ордеров
   int ord = 0; // итоговое значение кол-ва ордеров
   int orders=OrdersTotal();
//--- пробежим по списку ордеров
   for(int i=0;i<orders;i++)
     {
      ResetLastError();
      //--- скопируем в кэш ордер по его номеру в списке
      ulong ticket=OrderGetTicket(i);
      if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним
        {
         double price_open  =OrderGetDouble(ORDER_PRICE_OPEN);
         datetime time_setup=OrderGetInteger(ORDER_TIME_SETUP);
         string symbol      =OrderGetString(ORDER_SYMBOL);
         long magic_number  =OrderGetInteger(ORDER_MAGIC);
         if(magic_number==Magic_)
           {
            //  обработаем ордер с заданным ORDER_MAGIC - посчитаем
            ord++;
           }
         PrintFormat("Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d",ticket,symbol,TimeToString(time_setup),magic_number);
        }
      else         // вызов OrderGetTicket() завершился неудачно
        {
         PrintFormat("Ошибка при получении ордера из списка в кэш. Код ошибки: %d",GetLastError());
        }

     }
   return (ord);   
  }
 
Roman Shiredchenko #:

Colleghi, per favore consigliate il miglior algoritmo per trovare il prezzo dell'ordine limite precedentemente piazzato più vicino al prezzo corrente - rispettivamente al limite di vendita ascendente, all'offerta

il limite di acquisto che è più vicino al fondo.

Questo f-iio conta la quantità ma ho bisogno del PREZZO dell'ordine limite piazzato in precedenza per far tornare il f-iio...


Finora sto usando il prezzo minimo per il limite di vendita e il prezzo massimo per il limite di acquisto ....

Voglio salvare i prezzi richiesti con i biglietti e forse qualcos'altro, per esempio il tempo, nella mia struttura o array e ordinare immediatamente dopo l'aggiunta per prezzo. Per risorse, se cercate non spesso, è lo stesso o un po' più costoso, e se spesso, è meglio ricordare. Naturalmente, se non hai 100500 ordini) allora potrebbe essere troppo costoso. In generale, l'ordinamento in una struttura o array multidimensionale è risolto solo per il primo indice purtroppo.

A volte uso diversi array monodimensionali con gli stessi indici, biglietti, tempo, prezzi. E ricerca per indice della proprietà necessaria. Per esempio, otteniamo l'indice di un tempo minore o di un prezzo maggiore e otteniamo il biglietto dell'ordine necessario. Certo, è una stampella, ma funziona chiaramente.

 

È sorta una domanda, non trovata nella ricerca. È possibile abilitare l'algotrading dall'EA. Ottiene le proprietà del terminale, se è abilitato o meno.

Ed è possibile eseguire un EA in un terminale con algotrading abilitato e un altro no.