Bence soruyu daha açık bir şekilde formüle etmeye çalışacağım - Konum yapısına yeni bir konum (ve onun 6 özelliği) eklemek için daha hızlı ve daha verimli bir algoritma var mı ??? Benim için böyle çalışıyor - yineleme kullanarak, pozisyonun gerçekten yeni olduğundan emin oluyorum, gerekli parametrelerin değerlerini alıyorum, diziyi 1 arttırıyorum ve yeni bir eleman yazıyorum. Makalede, bir arkadaşa yazmanın ve yazmanın mümkün ve gerekli olduğunu okudum. Orada belirtilen işlevi terminalimde bulamadım, ancak olanları nasıl dolduracağımı bilmiyorum.
Bence soruyu daha açık bir şekilde formüle etmeye çalışacağım - Konum yapısına yeni bir konum (ve onun 6 özelliği) eklemek için daha hızlı ve daha verimli bir algoritma var mı ??? Benim için böyle çalışıyor - yineleme kullanarak, pozisyonun gerçekten yeni olduğundan emin oluyorum, gerekli parametrelerin değerlerini alıyorum, diziyi 1 arttırıyorum ve yeni bir eleman yazıyorum. Makalede, bir arkadaşa yazmanın ve yazmanın mümkün ve gerekli olduğunu okudum. Orada belirtilen işlevi terminalimde bulamadım, ancak olanları nasıl dolduracağımı bilmiyorum.
"Pozisyonun gerçekten yeni olduğunu" belirlemek için pozisyonları numaralandırmayı reddedin. Başka bir yol bul. Örneğin OnTradeTransaction'da . Ve diziyi yeniden doldurmak yerine ArrayRemove işlevini kullanın.
"Pozisyonun gerçekten yeni olduğunu" belirlemek için pozisyonları numaralandırmayı reddedin. Başka bir yol bul. Örneğin OnTradeTransaction'da . Ve diziyi yeniden doldurmak yerine ArrayRemove işlevini kullanın.
Saygılar, hızlı destek ve pratik tavsiye için teşekkürler, devam ediyorum. Ve dizinin kuyruğuna, boyutuna +1 olmadan nasıl veri eklenir, hazır terminal sınıflarından bir formül atılır ??? Peki, şimdi genel gelişme için, kafada boşluk bırakmamak için, pliz ,,, ???
Ve dizinin kuyruğuna, boyutuna +1 olmadan nasıl veri eklenir, hazır terminal sınıflarından bir formül atılır ??? Peki, şimdi genel gelişme için, kafada boşluk bırakmamak için, pliz ,,, ???
Yöntemin kendisini buldum ama nasıl sabitleyeceğimi bilmiyorum, yeterli tecrübem yok. Varlığından bile haberiniz olmadığı bir yabancı dile hakim olmak zordur. Bu böyle, lirik bir arasöz.
//+------------------------------------------------------------------+//| 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 );
}
Peki nasıl batırırsın??? Artırmak istediğiniz diziyi nereye çekiçlemelisiniz? Dizi bir yapıysa ne olur?
Saygılar, hızlı destek ve pratik tavsiye için teşekkürler, devam ediyorum. Ve dizinin kuyruğuna, boyutuna +1 olmadan nasıl veri eklenir, hazır terminal sınıflarından bir formül atılır ??? Peki, şimdi genel gelişme için, kafada boşluk bırakmamak için, pliz ,,, ???
Elimden geldiğince hazır dersleri kullanmamaya çalışıyorum. Yalnızca CTrade ve ticaret panelleri oluşturmak için kullanıyorum. CTrade'i kendim için yeniden yazmak tembel ve paneller benim için zor ve anlama arzusu yok. Bu nedenle, dizinin +1'inin ve yapının elemanlarının doldurulmasının üç döngü ile karşılaştırıldığında aynı gecikme olmadığından eminim.
Yöntemin kendisini buldum ama nasıl sabitleyeceğimi bilmiyorum, yeterli tecrübem yok. Varlığından bile haberiniz olmadığı bir yabancı dile hakim olmak zordur. Bu böyle, lirik bir arasöz.
Yöntemin kendisini buldum ama nasıl sabitleyeceğimi bilmiyorum, yeterli tecrübem yok. Varlığından bile haberiniz olmadığı bir yabancı dile hakim olmak zordur. Bu böyle, lirik bir arasöz.
Peki nasıl batırırsın???
Ve bu, eğer doğru anlarsam, daha çok OOP nesnelerinin dizileri için tasarlanmıştır.
Alexey Viktorov : Elimden geldiğince hazır dersleri kullanmamaya çalışıyorum. Yalnızca CTrade ve ticaret panelleri oluşturmak için kullanıyorum. CTrade'i kendim için yeniden yazmak tembel ve paneller benim için zor ve anlama arzusu yok. Bu nedenle, dizinin +1'inin ve yapının elemanlarının doldurulmasının üç döngü ile karşılaştırıldığında aynı gecikme olmadığından eminim.
Fikir açık, neden kanıtlanmış hazır algoritmaların kullanılmadığı açık değil, ancak "üç döngü" hakkında - çok anlaşılır, teşekkürler. Yüksek kaliteli basit çözümler elde ettiğinizde, neden kendim tahmin etmediğimi merak ediyorum, yüzeyde öyle. Teşekkür ederim.
Этот класс находятся в файле "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)+ " мс" ); // Сообщение о времени, затраченном на второй вариант
}
Ama standart pakette bulamadım. Kötü arandı veya makale güncel değil ???
Bence soruyu daha açık bir şekilde formüle etmeye çalışacağım - Konum yapısına yeni bir konum (ve onun 6 özelliği) eklemek için daha hızlı ve daha verimli bir algoritma var mı ??? Benim için böyle çalışıyor - yineleme kullanarak, pozisyonun gerçekten yeni olduğundan emin oluyorum, gerekli parametrelerin değerlerini alıyorum, diziyi 1 arttırıyorum ve yeni bir eleman yazıyorum. Makalede, bir arkadaşa yazmanın ve yazmanın mümkün ve gerekli olduğunu okudum. Orada belirtilen işlevi terminalimde bulamadım, ancak olanları nasıl dolduracağımı bilmiyorum.
Bence soruyu daha açık bir şekilde formüle etmeye çalışacağım - Konum yapısına yeni bir konum (ve onun 6 özelliği) eklemek için daha hızlı ve daha verimli bir algoritma var mı ??? Benim için böyle çalışıyor - yineleme kullanarak, pozisyonun gerçekten yeni olduğundan emin oluyorum, gerekli parametrelerin değerlerini alıyorum, diziyi 1 arttırıyorum ve yeni bir eleman yazıyorum. Makalede, bir arkadaşa yazmanın ve yazmanın mümkün ve gerekli olduğunu okudum. Orada belirtilen işlevi terminalimde bulamadım, ancak olanları nasıl dolduracağımı bilmiyorum.
"Pozisyonun gerçekten yeni olduğunu" belirlemek için pozisyonları numaralandırmayı reddedin. Başka bir yol bul. Örneğin OnTradeTransaction'da . Ve diziyi yeniden doldurmak yerine ArrayRemove işlevini kullanın.
"Pozisyonun gerçekten yeni olduğunu" belirlemek için pozisyonları numaralandırmayı reddedin. Başka bir yol bul. Örneğin OnTradeTransaction'da . Ve diziyi yeniden doldurmak yerine ArrayRemove işlevini kullanın.
Saygılar, hızlı destek ve pratik tavsiye için teşekkürler, devam ediyorum. Ve dizinin kuyruğuna, boyutuna +1 olmadan nasıl veri eklenir, hazır terminal sınıflarından bir formül atılır ??? Peki, şimdi genel gelişme için, kafada boşluk bırakmamak için, pliz ,,, ???
Ve dizinin kuyruğuna, boyutuna +1 olmadan nasıl veri eklenir, hazır terminal sınıflarından bir formül atılır ??? Peki, şimdi genel gelişme için, kafada boşluk bırakmamak için, pliz ,,, ???
Yöntemin kendisini buldum ama nasıl sabitleyeceğimi bilmiyorum, yeterli tecrübem yok. Varlığından bile haberiniz olmadığı bir yabancı dile hakim olmak zordur. Bu böyle, lirik bir arasöz.
Peki nasıl batırırsın??? Artırmak istediğiniz diziyi nereye çekiçlemelisiniz? Dizi bir yapıysa ne olur?
Saygılar, hızlı destek ve pratik tavsiye için teşekkürler, devam ediyorum. Ve dizinin kuyruğuna, boyutuna +1 olmadan nasıl veri eklenir, hazır terminal sınıflarından bir formül atılır ??? Peki, şimdi genel gelişme için, kafada boşluk bırakmamak için, pliz ,,, ???
Yöntemin kendisini buldum ama nasıl sabitleyeceğimi bilmiyorum, yeterli tecrübem yok. Varlığından bile haberiniz olmadığı bir yabancı dile hakim olmak zordur. Bu böyle, lirik bir arasöz.
Peki nasıl batırırsın???
Yapı dizinize - herhangi bir şekilde.
Yöntemin kendisini buldum ama nasıl sabitleyeceğimi bilmiyorum, yeterli tecrübem yok. Varlığından bile haberiniz olmadığı bir yabancı dile hakim olmak zordur. Bu böyle, lirik bir arasöz.
Peki nasıl batırırsın???
Ve bu, eğer doğru anlarsam, daha çok OOP nesnelerinin dizileri için tasarlanmıştır.
"Daha fazla" değil, oradan.
Elimden geldiğince hazır dersleri kullanmamaya çalışıyorum. Yalnızca CTrade ve ticaret panelleri oluşturmak için kullanıyorum. CTrade'i kendim için yeniden yazmak tembel ve paneller benim için zor ve anlama arzusu yok. Bu nedenle, dizinin +1'inin ve yapının elemanlarının doldurulmasının üç döngü ile karşılaştırıldığında aynı gecikme olmadığından eminim.
Fikir açık, neden kanıtlanmış hazır algoritmaların kullanılmadığı açık değil, ancak "üç döngü" hakkında - çok anlaşılır, teşekkürler. Yüksek kaliteli basit çözümler elde ettiğinizde, neden kendim tahmin etmediğimi merak ediyorum, yüzeyde öyle. Teşekkür ederim.
"Daha fazla" değil, oradan.
Lütfen söyleyin https://www.mql5.com/ru/articles/567 yazısında böyle bir kod var ve bahsi geçiyor.
Ama standart pakette bulamadım. Kötü arandı veya makale güncel değil ???