Secondo me, c'è un algoritmo più veloce ed efficiente per aggiungere una nuova posizione (e le sue 6 proprietà) alla struttura della posizione? Da me funziona così - uso la forza bruta per assicurarmi che la posizione sia davvero nuova, ottengo i valori dei parametri richiesti, aumento l'array di 1 e scrivo un nuovo elemento. Ho letto nell'articolo che ingrandire e scrivere può e deve essere fatto in modo diverso. Non ho trovato la funzione specificata lì nel mio terminale e non so come riempirla.
Secondo me, c'è un algoritmo più veloce ed efficiente per aggiungere una nuova posizione (e le sue 6 proprietà) alla struttura della posizione? Da me funziona così - uso la forza bruta per assicurarmi che la posizione sia davvero nuova, ottengo i valori dei parametri richiesti, aumento l'array di 1 e scrivo un nuovo elemento. Ho letto nell'articolo che ingrandire e scrivere può e deve essere fatto in modo diverso. Non ho trovato la funzione specificata lì nel mio terminale e non so come riempirla.
Non cercate di cercare le posizioni per determinare "che la posizione è veramente nuova". Trova un altro modo. Per esempio in OnTradeTransaction. E provate a usare la funzione ArrayRemove invece dell'overflow dell'array
Non provate molte posizioni per determinare "che la posizione è veramente nuova". Trova un altro modo. Per esempio in OnTradeTransaction. E provate a usare la funzione ArrayRemove invece dell'overflow dell'array
Rispetto, grazie per il tuo rapido supporto e i tuoi utili consigli, inizierò. E come aggiungere alla coda dei dati dell'array senza +1 alla dimensione, formula da classi pronte per il lancio del terminale? Bene, ora per lo sviluppo generale, per non lasciare vuoti nella mia testa, per favore?
E come aggiungere alla coda dei dati dell'array senza +1 alla dimensione, formula da classi già pronte terminale buttare su? Bene, ora per lo sviluppo generale, per non lasciare vuoti nella mia testa, per favore?
Ho trovato il metodo da solo, ma come attaccarlo, non posso pensare, non ho abbastanza esperienza. È difficile padroneggiare una lingua straniera quando non si sa nemmeno che esiste. Questa è una digressione.
//+------------------------------------------------------------------+//| Adding an element to the end of the array |//| Добавление элемента в конец массива |//+------------------------------------------------------------------+bool CArrayInt::Add(constint element)
{
//--- check/reserve elements of array//--- проверка / резерв элементов массиваif(!Reserve(1))
return(false);
//--- add
m_data[m_data_total++]=element;
m_sort_mode=-1;
//--- successful//--- успешныйreturn(true);
}
Come si avvita? Dove mettete il tipo di matrice che volete coltivare? E se l'array è una struttura?
Rispetto, grazie per il tuo rapido supporto e i tuoi utili consigli, inizierò. E come aggiungere alla coda dei dati dell'array senza +1 alla dimensione, formula da classi pronte per il lancio del terminale? Bene, ora per lo sviluppo generale, per non lasciare vuoti nella mia testa, per favore?
Cerco di non usare classi già pronte. Uso solo CTrade per creare pannelli di trading. Sono troppo pigro per riscrivere CTrade per i miei bisogni, mentre i pannelli sono complicati per me e non ho nessuna voglia di capirli. Ecco perché sono sicuro che +1 all'array e il riempimento degli elementi della struttura non è un ritardo così grande rispetto a tre cicli.
Ho trovato il metodo stesso, ma non riesco a capire come applicarlo, perché non sono abbastanza esperto. È difficile padroneggiare una lingua straniera quando non si sa nemmeno che esiste. Questa è una digressione.
Ho trovato il metodo stesso, ma non riesco a capire come applicarlo, perché non sono abbastanza esperto. È difficile padroneggiare una lingua straniera quando non si sa nemmeno che esiste. Questa è una digressione.
Quindi come faccio ad avvitarlo?
E questo, se ho capito bene, è più per gli array di oggetti OOP.
Alexey Viktorov: Cerco di non usare classi già pronte. Uso CTrade solo per creare pannelli di trading. Sono troppo pigro per riscrivere CTrade per le mie esigenze, mentre i pannelli sono troppo complicati per me e sono riluttante a capirli. Ecco perché sono sicuro che +1 a un array e riempire gli elementi della struttura non è un gran ritardo rispetto a tre cicli.
L'idea è chiara, non è chiaro perché non dovremmo usare algoritmi già collaudati, ma sui "tre loop" - molto comprensibile, grazie. Quando si ottengono soluzioni semplici di alta qualità, mi chiedo sempre perché non l'ho capito io, perché è così ovvio. Grazie.
Этот класс находятся в файле "CDynamicArray.mqh" приложения. Файл должен располагаться в каталоге "MQL5\Include" каталога данных терминала.
class CDynamicArray
{
private:
int m_ChunkSize; // Размер блокаint m_ReservedSize; // Реальный размер массиваint m_Size; // Количество занятых элементов массиваpublic:
double Element[]; // Собственно массив. Находится в секции public, // чтобы в случае необходимости работать с ним напрямую//+------------------------------------------------------------------+//| Конструктор |//+------------------------------------------------------------------+void CDynamicArray(int ChunkSize=1024)
{
m_Size=0; // Количество занятых элементов
m_ChunkSize=ChunkSize; // Размер блока
m_ReservedSize=ChunkSize; // Реальный размер массиваArrayResize(Element,m_ReservedSize); // Подготовка массива
}
//+------------------------------------------------------------------+//| Функция добавления в конец массива |//+------------------------------------------------------------------+void AddValue(double Value)
{
m_Size++; // Увеличение количества занятых элементовif(m_Size>m_ReservedSize)
{ // Требуемое количество больше реального размера массива
m_ReservedSize+=m_ChunkSize; // Рассчитываем новый размер массиваArrayResize(Element,m_ReservedSize); // Увеличиваем реальный размер массива
}
Element[m_Size-1]=Value; // Добавляем значение
}
//+------------------------------------------------------------------+//| Функция получения количества занятых элементов массива |//+------------------------------------------------------------------+int Size()
{
return(m_Size);
}
};
Этот класс находятся в файле "CDynamicArray.mqh" приложения. Файл должен располагаться в каталоге "MQL5\Include" каталога данных терминала.
Сравним быстродействие при последовательном увеличении массива на 1 и при увеличении размера массива блоками:
int n=50000;
double ar[];
CDynamicArray da;
//--- Вариант 1 (увеличение размера по 1-му элементу)long st=GetTickCount(); // Запомним время начала ArrayResize(ar,0); // Установка нулевого размера массива for(int i=0;i<n;i++)
{
ArrayResize(ar,i+1); // Последовательное изменение размера массива
ar[i]=i;
}
Alert("Вариант 1: "+IntegerToString(GetTickCount()-st)+" мс"); // Сообщение о времени, затраченном на первый вариант//--- Вариант 2 (увеличение размера блоками)
st=GetTickCount(); // Запомним время начала for(int i=0;i<n;i++)
{
da.AddValue(i); // Добавляем элемент
}
Alert("Вариант 2: "+IntegerToString(GetTickCount()-st)+" мс"); // Сообщение о времени, затраченном на второй вариант
}
Ma non l'ho trovato nel pacchetto standard. Non è una buona ricerca o l'articolo non è aggiornato?
Secondo me, c'è un algoritmo più veloce ed efficiente per aggiungere una nuova posizione (e le sue 6 proprietà) alla struttura della posizione? Da me funziona così - uso la forza bruta per assicurarmi che la posizione sia davvero nuova, ottengo i valori dei parametri richiesti, aumento l'array di 1 e scrivo un nuovo elemento. Ho letto nell'articolo che ingrandire e scrivere può e deve essere fatto in modo diverso. Non ho trovato la funzione specificata lì nel mio terminale e non so come riempirla.
Secondo me, c'è un algoritmo più veloce ed efficiente per aggiungere una nuova posizione (e le sue 6 proprietà) alla struttura della posizione? Da me funziona così - uso la forza bruta per assicurarmi che la posizione sia davvero nuova, ottengo i valori dei parametri richiesti, aumento l'array di 1 e scrivo un nuovo elemento. Ho letto nell'articolo che ingrandire e scrivere può e deve essere fatto in modo diverso. Non ho trovato la funzione specificata lì nel mio terminale e non so come riempirla.
Non cercate di cercare le posizioni per determinare "che la posizione è veramente nuova". Trova un altro modo. Per esempio in OnTradeTransaction. E provate a usare la funzione ArrayRemove invece dell'overflow dell'array
Non provate molte posizioni per determinare "che la posizione è veramente nuova". Trova un altro modo. Per esempio in OnTradeTransaction. E provate a usare la funzione ArrayRemove invece dell'overflow dell'array
Rispetto, grazie per il tuo rapido supporto e i tuoi utili consigli, inizierò. E come aggiungere alla coda dei dati dell'array senza +1 alla dimensione, formula da classi pronte per il lancio del terminale? Bene, ora per lo sviluppo generale, per non lasciare vuoti nella mia testa, per favore?
E come aggiungere alla coda dei dati dell'array senza +1 alla dimensione, formula da classi già pronte terminale buttare su? Bene, ora per lo sviluppo generale, per non lasciare vuoti nella mia testa, per favore?
Ho trovato il metodo da solo, ma come attaccarlo, non posso pensare, non ho abbastanza esperienza. È difficile padroneggiare una lingua straniera quando non si sa nemmeno che esiste. Questa è una digressione.
Come si avvita? Dove mettete il tipo di matrice che volete coltivare? E se l'array è una struttura?
Rispetto, grazie per il tuo rapido supporto e i tuoi utili consigli, inizierò. E come aggiungere alla coda dei dati dell'array senza +1 alla dimensione, formula da classi pronte per il lancio del terminale? Bene, ora per lo sviluppo generale, per non lasciare vuoti nella mia testa, per favore?
Ho trovato il metodo stesso, ma non riesco a capire come applicarlo, perché non sono abbastanza esperto. È difficile padroneggiare una lingua straniera quando non si sa nemmeno che esiste. Questa è una digressione.
Quindi come faccio ad avvitarlo?
Alla vostra serie di strutture - non c'è modo.
Ho trovato il metodo stesso, ma non riesco a capire come applicarlo, perché non sono abbastanza esperto. È difficile padroneggiare una lingua straniera quando non si sa nemmeno che esiste. Questa è una digressione.
Quindi come faccio ad avvitarlo?
E questo, se ho capito bene, è più per gli array di oggetti OOP.
Non "più", ma da lì.
Cerco di non usare classi già pronte. Uso CTrade solo per creare pannelli di trading. Sono troppo pigro per riscrivere CTrade per le mie esigenze, mentre i pannelli sono troppo complicati per me e sono riluttante a capirli. Ecco perché sono sicuro che +1 a un array e riempire gli elementi della struttura non è un gran ritardo rispetto a tre cicli.
L'idea è chiara, non è chiaro perché non dovremmo usare algoritmi già collaudati, ma sui "tre loop" - molto comprensibile, grazie. Quando si ottengono soluzioni semplici di alta qualità, mi chiedo sempre perché non l'ho capito io, perché è così ovvio. Grazie.
Non "più", ma da qui.
Per favore ditemi, l'articolohttps://www.mql5.com/ru/articles/567 ha il seguente codice e menziona
Ma non l'ho trovato nel pacchetto standard. Non è una buona ricerca o l'articolo non è aggiornato?