Che cos'è? Sostituendo gli errati con le correzioni più vicine ??? Temo che tutto dipenda da come distribuiamo queste stesse incorrezioni. È molto probabile che le correzioni più vicine - saranno lontane dalla cima.
E si scoprirà che invece di set di parametri sbagliati - avremo risultati corretti - che anche, secondo me, non si dovrebbe fare - cosa troviamo allora? Otterremo un massimo, e avrà un set di parametri errato?
Onestamente, non vedo il problema. Tuttavia, la mia competenza sulla variante in discussione è pari a zero.
Ovviamente se si traccia un'enumerazione completa di y = x^2. Poi mescolare casualmente le righe di opimizzazione e creare un nuovo set basato sul mescolamento. Allora la GA non troverà il vertice della parabola.
Non più di una settimana fa sono stato bannato per un attimo per un thread simile e il thread/sondaggio è stato strappato come una pagina inutile con radici.
Per quanto riguarda la domanda, ho già scritto che sarebbe ottimale escludere tutte le combinazioni che sono proibite, questo può essere fatto in modo ottimale dallo sviluppatore, altrimenti è necessario fare uno script che esegue attraverso tutte le combinazioni e salva solo le combinazioni consentite in un file, e già caricare quel file per l'ottimizzazione utilizzando la genetica.
Ovviamente, se si traccia un'enumerazione completa di y = x^2. Poi mescolare casualmente le righe di opimizzazione e creare un nuovo set basato sul mescolamento. Il GA non troverà la cima della parabola.
Ho creato un Expert Advisor di prova per la modalità mat dell'ottimizzatore
// #define TESTER_FILE // Советник будет работать не только на локальных Агентах, но и в Облаке.#ifdef TESTER_FILE
// Нужно компилировать (не запускать) советник, когда этот файл (с любым содержанием, хоть пустой) лежит в Песочнице.// Иначе Тестер не будет видеть эти данные, даже если соответствующий файл с ними положить после компиляции на место. #property tester_file__FILE__constint FileCommon = 0;
#else
constint FileCommon = FILE_COMMON;
#endif // TESTER_FILEsinputbool Rand = false; // Вкл/выкл. перемешиваниеsinputint NumPass = 10001; // Количество проходов// Фитнесс-функцияdouble Func( constdouble X )
{
// return(X); // Проверка, что Агенты считывают нужные данныеreturn(-X * X + 1); // Парабола с максимальным значением в единице - его и будем искать
}
// Меняет местами элементы массиваtemplate <typename T>
void Swap( T &Array[], constuint Pos1, constuint Pos2 )
{
const T Tmp = Array[Pos1];
Array[Pos1] = Array[Pos2];
Array[Pos2] = Tmp;
}
// Возвращает случайный индекс массиваuint GetRandPos( constuint Size )
{
return(MathRand() * (Size - 1) / SHORT_MAX);
}
// Перемешивает элементы массиваtemplate <typename T>
void Mixing( T &Array[], constuint AmountIterations )
{
constint Size = ArraySize(Array);
MathSrand((uint)TimeLocal()); // Повторные запуски Оптимизатор будет игнорировать - build 1881for (uint i = 0; i < AmountIterations; i++)
Swap(Array, GetRandPos(Size), GetRandPos(Size));
}
// Вычисляет интервал оптимизацииvoid SetInterval( double &Array[], constdouble Begin, constdouble End, constuint Amount )
{
if (Amount > 1)
{
constdouble Step = (Begin - End) / (Amount - 1);
double Tmp = End;
for (int i = ArrayResize(Array, Amount) - 1; i >= 0; i--, Tmp += Step)
Array[i] = NormalizeDouble(Tmp, 8);
}
}
#define TOSTRING(A) #A
voidOnTesterInit()
{
ParameterSetRange(TOSTRING(NumPass), true, 0, 0, 1, NumPass - 1); // Задали Оптимизатору количество проходов = NumPassdouble Array[];
SetInterval(Array, -1, 1, NumPass); // Выстроили значения интервала по порядкуif (Rand)
Mixing(Array, NumPass * 10); // Перемешали все в интервале// ArrayPrint(Array); // Проверка, что Агенты считывают нужные данныеFileSave(__FILE__, Array, FileCommon); // Записали файл-интервал.А ведь так можно передать в Облако хоть содержимое всей Песочницы + полный стейтмент.
}
voidOnTesterDeinit()
{
if (FileCommon)
FileDelete(__FILE__, FileCommon); // Удалили файл-интервалChartClose(); // Закрыли чарт Frame-выполнения советника
}
doubleOnTester()
{
double Array[];
// Считали точку из интервала и вернули значение фитнесс-функции в нейreturn((FileLoad(__FILE__, Array, FileCommon) != -1) ? Func(Array[NumPass]): 0); // В режиме не-tester_file FileLoad будет выдавать ошибку, если два Агента одновременно обратятся.
}
Ho segnatoin rosso le vulnerabilità, le debolezze e gli errori attuali di MT5 che sono apparsi durante la scrittura dell'esempio.
Che cos'è? Sostituendo gli errati con le correzioni più vicine ??? Temo che tutto dipenda da come distribuiamo queste stesse incorrezioni. È molto probabile che le correzioni più vicine - saranno lontane dalla cima.
E si scoprirà che invece di set di parametri sbagliati - avremo risultati corretti - che anche, secondo me, non si dovrebbe fare - cosa troviamo allora? Otterremo un massimo, e avrà un set di parametri errato?
Onestamente, non vedo il problema. Tuttavia, la mia competenza sulla variante in discussione è pari a zero.
Penso che @Andrey Dik possa aiutare su questi problemi. Ma anche la critica costruttiva del GA regolare non è finita bene per lui...
Bandito, purtroppo. Mandare raggi di unbanning all'amministrazione, beh, per quanto tempo ancora si può?
Che ne dite di scrivere una funzione che emette solo catene valide per numero?
La prima cosa che viene in mente è una tabella di 117649 valori, e lasciamo che la genetica cerchi dei numeri in questa tabella.
No, la tabella con le catene valide sarebbe molto più piccola, ma anche se ce ne sono 5000, come possiamo scriverle e non confonderci?
No, la tabella con le catene corrette sarà notevolmente più piccola, ma anche se ce ne sono 5000, come si fa a scriverle e a non confondersi?
A un file dump. Poi cercate il numero di pass e abbinatelo a quello che c'è nel file.
Nella reimpostazione del file. Poi vedere il numero di pass e abbinarlo a quello che c'è nel file.
Intendevo come non confondere, non ripetere, non perdere durante il processo di prescrizione stesso?
Intendevo come non confondersi, non ripetere, non saltare durante il processo di prescrizione stesso?
In questo esempio, il risultato dipenderà molto dall'ordine in cui i cicli for sono posizionati. Tutto a causa di questa peculiarità.
Forum sul trading, sistemi di trading automatico e test di strategia
Non per gli sviluppatori MT! Con cosa sostituire INIT_PARAMETERS_INCORRECT?
fxsaber, 2018.07.10 16:27
Ovviamente se si traccia un'enumerazione completa di y = x^2. Poi mescolare casualmente le righe di opimizzazione e creare un nuovo set basato sul mescolamento. Allora la GA non troverà il vertice della parabola.
Non più di una settimana fa sono stato bannato per un attimo per un thread simile e il thread/sondaggio è stato strappato come una pagina inutile con radici.
Per quanto riguarda la domanda, ho già scritto che sarebbe ottimale escludere tutte le combinazioni che sono proibite, questo può essere fatto in modo ottimale dallo sviluppatore, altrimenti è necessario fare uno script che esegue attraverso tutte le combinazioni e salva solo le combinazioni consentite in un file, e già caricare quel file per l'ottimizzazione utilizzando la genetica.
Sono propenso a concludere che il problema dell'autore è l'architettura del suo programma.
Grazie per la tua opinione, ma qui non c'è nessuna discussione sull'architettura del programma. Nel caso non l'abbiate notato...
Ovviamente, se si traccia un'enumerazione completa di y = x^2. Poi mescolare casualmente le righe di opimizzazione e creare un nuovo set basato sul mescolamento. Il GA non troverà la cima della parabola.
Ho creato un Expert Advisor di prova per la modalità mat dell'ottimizzatore
Ho segnatoin rosso le vulnerabilità, le debolezze e gli errori attuali di MT5 che sono apparsi durante la scrittura dell'esempio.