MT geliştiricileri için değil! INIT_PARAMETERS_INCORRECT nasıl değiştirilir? - sayfa 3

 
Georgiy Merts :

Bu ne? Düzeltmeleri en yakın düzeltmelerle değiştirme ??? Korkarım her şey bu düzeltmeleri nasıl dağıttığımıza bağlı. Bir sonraki düzeltmelerin yukarıdan uzak olması oldukça olasıdır.

Ve yanlış parametre kümeleri yerine - doğru sonuçları alacağız - bence bu da yapılamaz - o zaman ne bulacağız? Maksimumu alalım, ancak yanlış bir dizi parametreye sahip mi?

Dürüst olmak gerekirse, bir sorun görmüyorum. Ancak, tartışılan seçenekteki yetkinliğim sıfırdır.

 
fxsaber :

@Andrey Dik'in bu konularda yardımcı olabileceğini düşünüyorum. Ancak düzenli GA'nın yapıcı eleştirisi bile onun için iyi bitmedi ...

Yasak maalesef. Yönetime yasaksız ışınlar gönderiyorum, ne kadar yapabilirsin?

 
Georgiy Merts :

Sayıya göre yalnızca geçerli zincirleri döndürecek bir işlev yazarsak ne olur?

Akla ilk gelen 117649 değerinden oluşan bir tablodur ve bırakın genetiğin bu tabloda sayıları aramasına izin verin.

Hayır, doğru zincirlere sahip bir masa çok daha küçük olacak, ancak 5000 tane olsa bile, nasıl kayıt edilir ve kafanız karışmaz?

 
Сергей Таболин :

Hayır, doğru zincirlere sahip bir masa çok daha küçük olacak, ancak 5000 tane olsa bile, nasıl kayıt edilir ve kafanız karışmaz?

Dosyaya bırakın. Ardından, geçiş numarasına bakın ve dosyadakiyle eşleştirin.

 
fxsaber :

Dosyaya bırakın. Ardından, geçiş numarasına bakın ve dosyadakiyle eşleştirin.

Reçete yazma sürecinde kafa karıştırmamak, tekrar etmemek, kaçırmamak nasıl demek istedim?

 
Сергей Таболин :

Reçete yazma sürecinde kafa karıştırmamak, tekrar etmemek, kaçırmamak nasıl demek istedim?

 input int i1 = 0 ; 
input int i2 = 0 ; 
input int i3 = 0 ; 

sinput int NumPass;

void OnTesterInit ()
{
   int StopNumPass = 1 ;
  
   // Считали оптимизационные параметры входных
   // ...
  
   for ( int _i1 = Start1; _i1 < Stop1; _i1 += Step1)
     for ( int _i2 = Start2; _i2 < Stop2; _i2 += Step2)
       for ( int _i3 = Start2; _i3 < Stop3; _i3 += Step3)
         if (CheckCorrect(_i1, _i2, _i3))
        {
           // записали проход в файл
           //...
          
          StopNumPass++; // см. ниже
        }
        
   // Сбросили оптимизацию входных и назначили NumPass от 1 до StopNumPass с шагом 1.
}


Bu örnekte, sonuç büyük ölçüde for döngülerinin yerleştirildiği sıraya bağlı olacaktır. Hepsi bu özellik yüzünden

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MT geliştiricileri için değil! INIT_PARAMETERS_INCORRECT nasıl değiştirilir?

fxsaber , 2018.07.10 16:27

Açıkça, kapsamlı aramayı izlerseniz y = x^2. Ardından optimizasyon dizelerini rastgele karıştırın ve karıştırmaya dayalı olarak yeni bir küme oluşturun. O zaman GA parabolün tepe noktasını bulamayacak.

 

Daha bir hafta önce buna benzer bir konu için bir anlığına banlandım ve konu/anket gereksiz köklerle dolu bir sayfa olarak yırtıldı.

Soruda, yasaklanmış tüm kombinasyonları hariç tutmanın en uygun olacağını zaten yazdım, bu en iyi şekilde geliştirici tarafından yapılabilir, aksi takdirde tüm kombinasyonları çalıştıracak ve yalnızca geçerli olanları dosyaya kaydedecek bir komut dosyası oluşturmanız gerekir, ve bunu genetik dosyasını kullanarak optimizasyon için zaten yükleyin.

 
Yazarın sorununun programının mimarisinde olduğu sonucuna varma eğilimindeyim.
 
xFFFF :
Yazarın sorununun programının mimarisinde olduğu sonucuna varma eğilimindeyim.

Görüş için teşekkürler, burada sadece programın mimarisi tartışılmıyor. Eğer fark etmediyseniz...

 
fxsaber :

Açıkça, kapsamlı aramayı izlerseniz y = x^2. Ardından optimizasyon dizelerini rastgele karıştırın ve karıştırmaya dayalı olarak yeni bir küme oluşturun. O zaman GA parabolün tepe noktasını bulamayacak.

Paspas için bir doğrulama danışmanı fırlattım. optimize edici modu

 // #define TESTER_FILE // Советник будет работать не только на локальных Агентах, но и в Облаке.

#ifdef TESTER_FILE
// Нужно компилировать (не запускать) советник, когда этот файл (с любым содержанием, хоть пустой) лежит в Песочнице.
// Иначе Тестер не будет видеть эти данные, даже если соответствующий файл с ними положить после компиляции на место.   
   #property tester_file __FILE__ 
  
   const int FileCommon = 0 ;
#else
   const int FileCommon = FILE_COMMON ;
#endif // TESTER_FILE

sinput bool Rand = false ;     // Вкл/выкл. перемешивание
sinput int NumPass = 10001 ;   // Количество проходов

// Фитнесс-функция
double Func( const double X )
{
//  return(X); // Проверка, что Агенты считывают нужные данные
   return (-X * X + 1 ); // Парабола с максимальным значением в единице - его и будем искать
}

// Меняет местами элементы массива
template < typename T>
void Swap( T &Array[], const uint Pos1, const uint Pos2 )
{
   const T Tmp = Array[Pos1];
  
  Array[Pos1] = Array[Pos2];
  Array[Pos2] = Tmp;
}

// Возвращает случайный индекс массива
uint GetRandPos( const uint Size )
{
   return ( MathRand () * (Size - 1 ) / SHORT_MAX );
}

// Перемешивает элементы массива
template < typename T>
void Mixing( T &Array[], const uint AmountIterations )
{
   const int Size = ArraySize (Array);

   MathSrand (( uint ) TimeLocal ()); // Повторные запуски Оптимизатор будет игнорировать - build 1881
  
   for ( uint i = 0 ; i < AmountIterations; i++)
    Swap(Array, GetRandPos(Size), GetRandPos(Size));
}

// Вычисляет интервал оптимизации
void SetInterval( double &Array[], const double Begin, const double End, const uint Amount )
{
   if (Amount > 1 )
  {
     const double 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

void OnTesterInit ()
{
   ParameterSetRange (TOSTRING(NumPass), true , 0 , 0 , 1 , NumPass - 1 ); // Задали Оптимизатору количество проходов = NumPass
  
   double Array[];
  
  SetInterval(Array, - 1 , 1 , NumPass); // Выстроили значения интервала по порядку
  
   if (Rand)
    Mixing(Array, NumPass * 10 ); // Перемешали все в интервале
    
//  ArrayPrint(Array); // Проверка, что Агенты считывают нужные данные
    
   FileSave ( __FILE__ , Array, FileCommon); // Записали файл-интервал. А ведь так можно передать в Облако хоть содержимое всей Песочницы + полный стейтмент.
}

void OnTesterDeinit ()
{
   if (FileCommon)
     FileDelete ( __FILE__ , FileCommon); // Удалили файл-интервал
  
   ChartClose (); // Закрыли чарт Frame-выполнения советника
}

double OnTester ()
{
   double Array[];
  
   // Считали точку из интервала и вернули значение фитнесс-функции в ней
   return (( FileLoad ( __FILE__ , Array, FileCommon) != - 1 ) ? Func(Array[NumPass]): 0 ); // В режиме не-tester_file FileLoad будет выдавать ошибку, если два Агента одновременно обратятся.
}


Örnek yazarken ortaya çıkan MT5'in kırmızı güvenlik açıkları, zayıflıkları ve mevcut hataları ile işaretlenmiştir.