[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 284

 
hoz :
Bu yüzden önemli değil. Mutlak değeri, modulo'yu MathAbs aracılığıyla döndürüyorum ..


Bir giriş noktası arıyorsanız, MathAbs() bir bulanıklık sunar. Benim için, ne zaman ve hangi toleransla açıkça görülebilmesi için nereden ve ne zaman olduğunu belirtmek gerekiyor!
 
borilunad :

Bir giriş noktası arıyorsanız, MathAbs() bir bulanıklık sunar. Benim için, ne zaman ve hangi toleransla açıkça görülebilmesi için nereden ve ne zaman olduğunu belirtmek gerekiyor!


Düzeltildi ... Yine de koşulların hiçbiri karşılanmıyor.

 //+-------------------------------------------------------------------------------------+
//| Получение значений МА на указанном баре                                             |
//+-------------------------------------------------------------------------------------+
double GetMA( int index, int maPeriod)
{
   return ( iMA ( NULL , i_TF, maPeriod, 0 , MODE_EMA , MODE_CLOSE, index));
}
//+-------------------------------------------------------------------------------------+
//| Имеет ли место отскок?                                                              |
//+-------------------------------------------------------------------------------------+
void IsRebound( int crossDir[], bool & returnSign[])
{
   for ( int i = 0 ; i < 4 ; i++)
   {
       if (crossDir[i] == CROSS_NO)
         continue ;

      returnSign[i] = false ;
       double ema = GetMA( 1 , g_maPeriod[i]);

 //     VrPr (ND(MathAbs(ema - Ask)));
   //   VrPr (i_thresholdFromMa * pt);
       if (crossDir[i] == CROSS_UP)
      {
         if (ND(Ask - ema) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
         //   VrPr (ND(MathAbs(ema - Ask)) <= i_thresholdFromMa * pt);
            returnSign[i] = true ;
            VrPr ( " returnSign[" + 0 + "]" + " = " + returnSign[ 0 ]);
            VrPr ( " returnSign[" + 1 + "]" + " = " + returnSign[ 1 ]);
            VrPr ( " returnSign[" + 2 + "]" + " = " + returnSign[ 2 ]);
            VrPr ( " returnSign[" + 3 + "]" + " = " + returnSign[ 3 ]);
         }
      }
       if (crossDir[i] == CROSS_DN)
      {
         if (ND(ema - Bid) <= i_thresholdFromMa * pt) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true ;
            VrPr ( " returnSign[" + 0 + "]" + " = " + returnSign[ 0 ]);
            VrPr ( " returnSign[" + 1 + "]" + " = " + returnSign[ 1 ]);
            VrPr ( " returnSign[" + 2 + "]" + " = " + returnSign[ 2 ]);
            VrPr ( " returnSign[" + 3 + "]" + " = " + returnSign[ 3 ]);
         }
      }
   }
}

returnSign[i] = true olana kadar ; ve buna bağlı olarak, VrPr işlevinden önce (bu benim izlediğim verileri görüntüleyen işlevdir) kullanılmaz. Aşağıya geçiş başlamış olmasına rağmen.. Burada ekranda her hızlı fare yavaş fareyi geçerken crossDir[] dizisinin dolduğunu görebilirsiniz..

2 işaretin en kalın olanı geçtiğini ve 2 dizi öğesinin zaten 1 değerini yazdırdığını unutmayın. Bu da değerlerinin CROSS_DN olduğu anlamına gelir.

Bu da koşulun yerine getirilmesi gerektiği anlamına gelir.

  if (crossDir[i] == CROSS_DN)

ve ilerisi...

 
borilunad :

Bir giriş noktası arıyorsanız, MathAbs() bir bulanıklık sunar. Benim için, ne zaman ve hangi toleransla açıkça görülebilmesi için nereden ve ne zaman olduğunu belirtmek gerekiyor!

Kiminle ve neden.
 
tara :

Kiminle ve neden.

Görsel algı daha basit olmadıkça, alışkanlıktan MathAbc () olmadan ve böylece .. fark yoktur. Ama konudan uzaklaşıyoruz. Biraz var. koduma açıklamalar? Soru açık kalıyor...
 
Kod hakkında yorumum yok.
 
O zaman neden koşul karşılanmıyor? Mantıkla ilgili bir yorum var mı?
 

Numara.

 
Hmm. Akşamın sabahı daha akıllıca, umarım yarın bir şeyler olur. temizle.
 

Herkese iyi günler!

Alpari'den MT-4'te USD/JPY çiftini test ediyorum.

USD/JPY dakika geçmişi yüklendi

Not: Alıntı arşivindeki dakika geçmişini indirdikten sonra, "1 dakika" üzerine çift tıklayın.

Nedense, dakika alıntılarının listesi Veritabanındaki Alıntılar Arşivi penceresinde görünmüyordu.


TF-1 saat.

Tüm onaylar

Dönem 01.01.2000. - 01.01.2013.

Testin sonunda, RAPOR sekmesi kırmızı bir çubuk gösterir ve simülasyonun kalitesinin %25 olduğunu söyler.

Aynı periyodu aynı parametrelerle test ettim ...... ama her ay için ayrı ayrı

ve her ay için - şerit yeşildir ve simülasyonun kalitesi %90'dır

Sonra aynı dönemi test ettim ama 2000-2006 ve 2006-2013 olmak üzere 2 eşit parçaya böldüm.

Her parça için - şerit yeşildir ve modelleme kalitesi %90'dır.


SORU

13 yıllık bir süre boyunca test kalitesinin de bir bütün olarak %90 olması için ne yapılması gerekiyor?

teşekkürler

 

Böyle. bitmiş gibi. İşte onları ikinci mumlara yerleştiren yeniden tasarlanmış bir kene seçici.

Öyleydi:

 int start()
  {  
//----
if (flag == true )
  {
   if (tick.time.local == true )
    {
    time = TimeLocal ();
    }
     else {
    time = TimeCurrent ();
    }
   if (t < time)
    { 
         t = time; 
    }
     else { 
         t ++;
    }   

   if ( FileSeek (hand1e, fpos, SEEK_SET ) == false )
           { 
           error = GetLastError ();
           Print ( "out: error(" ,error, "): " ,ErrorDescription(error));
           flag = false ;
           return ;
           }
           else {
           bid = MarketInfo(symbol, MODE_BID);
           ask = MarketInfo(symbol, MODE_ASK);
           
                 FileWriteInteger (hand1e,    t,   LONG_VALUE);            
                 FileWriteDouble (hand1e,  bid, DOUBLE_VALUE);          
                 FileWriteDouble (hand1e,  bid, DOUBLE_VALUE);            
                 FileWriteDouble (hand1e,  ask, DOUBLE_VALUE);    
                 FileWriteDouble (hand1e,  ask, DOUBLE_VALUE);                            
                 FileWriteDouble (hand1e, time, DOUBLE_VALUE);                   
       FileFlush        (hand1e);  

      fpos = FileTell (hand1e);

Dönüştü:

 int i; //аналогично i=0
         while (( TimeCurrent ()-time)> 1 ){ //то заносим старые значения столько раз, сколько было пропущено секунд минус один
                 if ( FileSeek (hand1e, fpos, SEEK_SET ) == false ){ //перемещаем указатель на новую позицию, которую мы запомнили в FileTell
                                error = GetLastError (); //если ошибка
                                 Print ( "out: error(" ,error, "): " ,ErrorDescription(error)); //записываем её в лог
                                flag = false ;
                                 return ; //и выходим
                        } else { //выдумываем несуществующую свечу (т.к. тика в эту секунду не было)
                                time++;
                                 FileWriteInteger (hand1e,  time,   LONG_VALUE); //TimeCurrent()
//выбор выдуманной свечи (секунда, при которой тика не было):
//прочерк на Close[]
/*
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Open[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//High[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Low[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Close[]
                                FileWriteDouble (hand1e,  0, DOUBLE_VALUE);//Volume[]
*/
//свеча без теней
/*
                                FileWriteDouble (hand1e,  bid[0], DOUBLE_VALUE);//Open[]
                                FileWriteDouble (hand1e,  bid[0], DOUBLE_VALUE);//High[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Low[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Close[]
                                FileWriteDouble (hand1e,  last.index+1, DOUBLE_VALUE);//Volume[]
*/
//такая же свеча, как и была (не прочерк и не без теней)
                                 FileWriteDouble (hand1e,  bid[ 0 ], DOUBLE_VALUE); //Open[]
                                 FileWriteDouble (hand1e,  bid[ ArrayMaximum (bid)], DOUBLE_VALUE); //High[]
                                 FileWriteDouble (hand1e,  ask[ ArrayMinimum (ask)], DOUBLE_VALUE); //Low[]
                                 FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE); //Close[]
                                 FileWriteDouble (hand1e,  last.index+ 1 , DOUBLE_VALUE); //Volume[]
//конец выбора
                                 FileFlush        (hand1e);
                                fpos = FileTell (hand1e); //запоминаем позицию записи в файле
                }
        }
ArrayResize (bid, 1 ); //урезаем и обнуляем использованные нмассивы
ArrayResize (ask, 1 );
if (flag== true ){
         if (tick.time.local== true ){ //если флаг работы с историей поднят
                        time = TimeLocal (); //работаем с локальным временем
                         while (time== TimeLocal ()){ //пока секунда не прошла
                                bid[i]=MarketInfo(symbol, MODE_BID); //заносим в индикаторный массив данные тиков
                                ask[i]=MarketInfo(symbol, MODE_ASK);
                                i++;
                        }
                } else { //иначе
                        time = TimeCurrent (); //работаем с временем сервера
                         while (time== TimeCurrent ()){ //пока секунда не прошла
                                bid[i]=MarketInfo(symbol, MODE_BID); //заносим в индикаторный массив данные тиков
                                ask[i]=MarketInfo(symbol, MODE_ASK);
                                i++;
                        }                       
        }
}
//Вышли из цикла, т.к. время изменилось. Заносим в файл:
if ( FileSeek (hand1e, fpos, SEEK_SET ) == false ){ //перемещаем указатель на новую позицию, которую мы запомнили в FileTell
                error = GetLastError (); //если ошибка
                 Print ( "out: error(" ,error, "): " ,ErrorDescription(error)); //записываем её в лог
                flag = false ;
                 return ; //и выходим
        } else {
                 int last.index= ArraySize (ask)- 1 ;
                 FileWriteInteger (hand1e,  time,   LONG_VALUE); //TimeCurrent()
                 FileWriteDouble (hand1e,  bid[ 0 ], DOUBLE_VALUE); //Open[]
                 FileWriteDouble (hand1e,  bid[ ArrayMaximum (bid)], DOUBLE_VALUE); //High[]
                 FileWriteDouble (hand1e,  ask[ ArrayMinimum (ask)], DOUBLE_VALUE); //Low[]
                 FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE); //Close[]
                 FileWriteDouble (hand1e,  last.index+ 1 , DOUBLE_VALUE); //Volume[]
                 FileFlush        (hand1e);
                fpos = FileTell (hand1e); //запоминаем позицию записи в файле
}

Kodla ilgili notlar.

1. Bir sanal mum seçiminde CPU zamanından tasarruf etmek için durum değiştirmedim, bunun yerine seçimin olduğu bölümleri yorumladım (çünkü derlemeden önce belirli ihtiyaçlar için seçim yapıldı).

2. Yerel saatle (çevrimdışı, yani) çalışmak aklıma gelmedi. " while (time== TimeLocal ()){ //bir saniye geçene kadar " döngüsünde, FileWriteDouble'da MarketInfo olması gerektiğinden şüpheleniyorum (bana göre bu aptallığın zirvesidir). Orada neyin daha mantıklı olacağını söylersen minnettar kalırım.

3. Yazarın tasarımı

 if (flag == true )
  {
   if (tick.time.local == true )
    {
    time = TimeLocal ();
    }
     else {
    time = TimeCurrent ();
    }

ilk defa init()'in en sonunda ilan ettim.

4. init() dinamik dizilerinin başında

   IndicatorBuffers( 2 );
   SetIndexBuffer ( 0 , bid);
   SetIndexBuffer ( 1 , ask);

kullanılan değişkenler yerine

5. Optimizasyon için, teorik olarak WinAPI dosya fonksiyonlarını kullanabilir ve geçmişe bir kerede 44 baytlık bir blokta yazabilirsiniz (MarketInfo yapısının uzunluğu veya .hst'de ne varsa).

6. Yazarın Zaman[] hücresine yazmak için zaman modellemesini tamamen kaldırdı. Aynı nedenle, ana while döngüsünde TimeLocal() denetimi yoktur, yalnızca TimeCurrent() vardır.

7. Kodu optimize etmek için başka ne önerirsiniz?