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

 
LOA :


Dönem için üç yüksek, sonuncular değil. Ya da daha doğrusu, mutlaka ikincisi değil.

Bakın: değerler içeren bir diziniz var. Bu dizide üç maksimum bulmanız gerekiyor. Zaman serisi dizisinde son veya ilk olmaları gerekmez. Sadece üç maksimumu bulmanız gerekiyor.

1. Dizinizi geçici bir diziye kopyalayın (geçici bir dizide arama yapacağız):

int ArrayCopy ( nesne &hedef[], nesne kaynağı[], int başlangıç_hedef=0, int başlangıç_kaynak=0, int sayı=WHOLE_ARRAY)

Bir diziyi diğerine kopyalar. Diziler aynı türden olmalıdır. double[], int[], datetime[], color[] ve bool[] türündeki diziler aynı türden diziler olarak kopyalanabilir.
Kopyalanan öğelerin sayısını döndürür.
Seçenekler:
hedef[] - Hedef dizi.
kaynak[] - Kaynak dizisi.
start_dest - Alıcı dizi için başlangıç dizini. Varsayılan olarak, başlangıç dizini 0'dır.
start_source - Orijinal dizi için başlangıç dizini. Varsayılan olarak, başlangıç dizini 0'dır.
saymak - Kopyalanacak öğe sayısı. Varsayılan olarak, dizinin tamamı ( WHOLE_ARRAY ).


2. Geçici dizideki maksimum değeri arıyoruz:

int ArrayMaximum ( çift dizi[] , int sayı=WHOLE_ARRAY, int başlangıç=0)

Maksimum değere sahip öğeyi arayın. İşlev, dizideki maksimum öğenin konumunu döndürür.
Seçenekler:
sıralamak[] - Aranacak sayısal dizi.
saymak - Aranacak öğe sayısı.
Başlat - Aramak için başlangıç dizini.


3. Bulunan dizini bir dizide saklayın (örn . MassIndexMaxValue[] )

4. Geçici dizide bulunan maksimumun değerini sıfırlayın - oraya sıfır yazmanız yeterlidir

5. Yine, geçici dizide bir sonraki maksimum değeri arıyoruz (bulduğumuz ilkinin indeksi MassIndexMaxValue[] içinde zaten kayıtlı ve bu maksimumun değeri sıfır olarak ayarlanmış)

Geçici dizide gerekli sayıda maksimum değeri bulana kadar bu döngüye devam ediyoruz.

Artık MassIndexMaxValue[] dizisi, dizinizde istenen maksimum değer sayısının dizinlerini içerecektir.
Arama tamamlandıktan sonra geçici dizinin boyutu sıfırlanır - belleğin tıkanmasına gerek yoktur

Bunun gibi bir şey...

Not ... burada dizimin üzerinde hızlıca çizdim ... belki bir yerde hata yaptım - uyanık yazdım ve hiçbir şeyi kontrol etmedim, ancak işlev şöyle bir şeydi:

 void FindMaxValue( double &ms[], int &ind[], int NumMaxValue) {   
   int i, IndMax;
   double tmp[];                       // создаём временный массив
   ArrayResize (ind,NumMaxValue);       // изменяем размер массива индексов максимальных значений под количество макс. значений
   ArrayResize (tmp, ArraySize (ms));     // размер временного массива = размеру вашего массива значений
   ArrayCopy (tmp, ms);                 // копируем ваш массив во временный
   for (i= 0 ; i<NumMaxValue; i++) {     // цикл по количеству искомых максимумов
      IndMax= ArrayMaximum (tmp);         // ищем индекс максимального значения
      ind[i]=IndMax;                   // сохраняем индекс i-го максимального значения
      tmp[IndMax]= 0 ;                   // обнуляем i-е найденное максимальное значение во временном массиве
      }
   ArrayResize (tmp, 0 );                 // обнуляем размер временного массива
   return ;   
}

Çağrıldığında:

FindMaxValue(Ваш_Массив_Значений, MassIndexMaxValue, 3 );

... daha önce tanımlanan dizi int MassIndexMaxValue[] Your_Array_Values[] içinde bulunan üç maksimum değerin dizinlerini içermelidir ;

 

İşlem başına kâr yüzdesinin ve işlem başına kayıp yüzdesinin nasıl hesaplandığını anlayamıyorum. Söylemek?

http://www.assessor.ru/forum/index.php?t=822

 
artmedia70 :

Bakın: değerler içeren bir diziniz var. Bu dizide üç maksimum bulmanız gerekiyor. Zaman serisi dizisinde son veya ilk olmaları gerekmez. Sadece üç maksimumu bulmanız gerekiyor.


Artyom, çok teşekkür ederim!

Dizinin maksimum değerini sıfırlama fikrimin doğru olduğuna ve her şeyi başka bir diziye kopyalayarak ayrıntılı olarak çizdiğinize sevindim, şimdi küçük şeyleri anlayacağım

ve Vladimir'in tavsiyesi üzerine, program algoritmasıyla başlayacağım, bilgilerinizi işleyeceğim ve eminim her şey yoluna girecek - öğretmenler iyi.

MAKALE İÇİN ÖZEL TEŞEKKÜRLER https://www.mql5.com/ru/articles/1357

 

Tünaydın!

Lütfen bana özel bir göstergeden bir Uzman Danışmana nasıl sinyal alacağımı söyler misiniz?

iCustom kullandım, ancak baykuş hala sinyal almıyor

 double Signal_I= iCustom ( NULL , 0 , "FL" , 0 , 0 );
 
skyjet :

Tünaydın!

Lütfen bana özel bir göstergeden bir Uzman Danışmana nasıl sinyal alacağımı söyler misiniz?

iCustom kullandım, ancak baykuş hala sinyal almıyor


Belki de iCustom gösterge kodu... sorunuzda yanıtlanacak çok az bilgi var.
 
skyjet :

Tünaydın!

Lütfen bana özel bir göstergeden bir Uzman Danışmana nasıl sinyal alacağımı söyler misiniz?

iCustom kullandım, ancak baykuş hala sinyal almıyor


Diğer göstergelerle aynı hikaye mi? Cevabınız evet ise, iCustom() işlevini yanlış kullanıyorsunuz demektir. Değilse, gösterge koduna bakmayı deneyin - göstergeniz herhangi bir gösterge arabelleği kullanmıyor olabilir - grafik nesnelerin oluşturulmasıyla çalışır.
 

Merhaba. Bir işlev var:

 bool Trade()
{
   if (! IsConnected ())
  {
     Print ( "Связь отсутствует." );
     return (false);
  }

   if (! IsExpertEnabled ())
  {
     Print ( "Торговля экспертами выключена." );
     return (false);
  }
  
   if (DayOfWeek()== 0 || DayOfWeek()== 6 )
  {
     Print ( "В выходные не торгуем." );
     return (false);
  }
  
   if (! IsTradeAllowed ())
  {
     Print ( "Торговля запрещена? WTF???." );
     return (false);
  }
   return (true);
}

Ama nedense çalışmıyor. EA'da int start()'tan hemen sonra şu şekilde çağrılır:

   if (!Trade())
  {
     Sleep ( 5000 );
     return ;
  }

Dergi ve Uzman Danışman sekmelerinde başarıyla yüklendi ve başka bir şey yok. Her ne kadar "Hafta sonları ticaret yapmıyoruz" görünmelidir. 26.11.2011 - Cumartesi.

Hata nerede ve neyi yanlış yapıyorum?

 
Roman. :

Belki de iCustom gösterge kodu... sorunuzda yanıtlanacak çok az bilgi var.
Gösterge, görselleştirme sırasında yönettiği destek ve direnç çizgilerini çizer . Göstergenin kendisi, geçerken LT_1 == 1 veya -1 sinyali verir.
 if ((Close[i] > BuyLevel) 
         {
    
          LT_1= 1 ;
               
         }                                 
       if ((Close[i] < CloseLevel)
         {
           
           LT_1=- 1 ;
               
         }
 
ivan2k2 :

Merhaba. Bir fonksiyon var:

Ama nedense çalışmıyor. EA'da int start()'tan hemen sonra şu şekilde çağrılır:

Dergi ve Uzman Danışman sekmelerinde başarıyla yüklendi ve başka bir şey yok. Her ne kadar "Hafta sonları ticaret yapmıyoruz" görünmelidir. 26.11.2011 - Cumartesi.

Hata nerede ve neyi yanlış yapıyorum?


Bugün Cumartesi izin günü. Expert Advisor'ı başlatırsınız, başlatma gerçekleşir, ancak çıkış olmadığı ve onay işareti olmadığı için başlatma işlevi başlatılmaz (yani, Trade() çağrılmaz.). İşleminin doğruluğunu kontrol etmek için, başlatma bloğunda bu fonksiyona bir çağrı koymanız veya test cihazında test etmeniz gerekir.
 
skyjet :
Gösterge, görselleştirme sırasında yönettiği destek ve direnç çizgileri çizer. Göstergenin kendisi, geçerken LT_1 == 1 veya -1 sinyali verir.

O zaman hiç endişelenme - ticaret kriterlerini yerine getirmek için olduğu gibi sadece hindi kodunu uzmana aktarın ve hepsi bu - o zaman baykuşta, bu hindiden aktarılan bu ticaret koşullarına göre, üzerinden pozlar açarsınız. danışman ve bu kadar...
Neden: