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

 
Yani son sürümün danışmanı aptalca iki satır geride bıraktı..
 

Lütfen osilatörlerde sapma bulma sorununu doğru bir şekilde anlamama yardım edin. Bu durumda, MACD olsun. Aşağıdaki algoritmayı çizdim:

1) Çubukları baştan sayarız ve osilatörde tepe noktaları ararız:

   for ( int i=limit; i=> 0 ; i--)
    {
      MACD[i]= iMACD (Symb,TimeFrame,FastEMA,SlowEMA, 5 , PRICE_CLOSE , 0 , 0 ) 
      
       if (MACD[i]> 0 )
       {
         if (MACD[i]>MACD[i- 1 ] && MACD[i]>MACD[i- 2 ] &&
            MACD[i]>MACD[i+ 1 ] && MACD[i]>MACD[i+ 2 ])
           {
             //--- здесь вносим в массив данные о баре, чтобы его можно было снова найти (1)
           }
       }
       if (MACD[i]< 0 )
       {
         if (MACD[i]<MACD[i- 1 ] && MACD[i]<MACD[i- 2 ] &&
            MACD[i]<MACD[i+ 1 ] && MACD[i]<MACD[i+ 2 ])
           {
             //--- здесь вносим в массив данные о баре, чтобы его можно было снова найти (2)
           }
       }

2) En yoğun zamanları içeren diziler oluşturun:

 datetime Date_up[], Date_dn[];

ve koşul karşılanıyorsa, MACD[i] değerini bunlara girin. Ayrıca, son yeni zirvenin indeksi [n] ve sondan bir önceki [n+1];

3) Durum (1) çerçevesinde başka çözümler düşünün:

 if (Date_up[n]<Date_up[n+ 1 ]
 { // находим индекс бара
   int i1= iBarShift (Symb,TF,Date_up[n],false);
   int i2= iBarShift (Symb,TF,Date_up[n+ 1 ],false);
  // находим пик на графике баров в пределах пяти баров
   double High1= iHighest (Symb,TF,MODE_HIGH, 5 ,i1);
   double High2= iHighest (Symb,TF,MODE_HIGH, 5 ,i2);
  
   if (High1>High2)
   {
     // ЕСТЬ ДИВЕРГЕНЦИЯ!!!
   }
 }

Aslında sorun 2. noktadadır: Böyle bir dizi, bir zaman dizisinde olduğu gibi, değerlerin her yeni zirve ile değişmesi için nasıl düzgün bir şekilde organize edilir?

 
merkulov.artem :

Tavsiye ver. Forumda, kod kitaplığında ve internette bir cevap bulamadım, yardım istiyorum. Şimdiden teşekkürler.

1) "Dosya işlemleri". Ders kitabından alıntı: Dosyalarla çalışmak için bir grup fonksiyon.

Çalışma dosyalarının bulunabileceği üç dizin (alt dizinlerle) vardır:

/HISTORY/<geçerli aracı> - özellikle FileOpenHistory işlevi için;

/UZMANLAR/DOSYALAR - genel durum;

/TESTER/FILES - özellikle test için.

Diğer dizinlerdeki dosyalarla çalışma durdurulur.

Soru: Danışmanın, kullanıcının belirttiği dizine erişmesini sağlamak için kitaplıklar, komutlar veya başka yollar var mı? belirteceğim o klasöre adreslendi ???

2) Soru: MQL4'te veya kullanıcının komutuyla terminali kapatmak için kullanılabilecek kitaplıklarda komutlar var mı, yani. terminalin kapanacağı belirli koşulları belirtin. Sadece danışman kesilmekle kalmadı, terminalin kendisi de tamamen kapatıldı???

1. https://www.mql5.com/ru/code/10873

Bu kitaplık, sandbox dışındaki dizinlerle çalışmak içindir. Sanal alanda bir dosya oluşturur, onunla çalışır, sonra ihtiyacınız olan yere aktarırsınız.Dosya ile aynı olan ihtiyacınız olan dizine sembolik bir bağlantı kullanarak kopyalayarak, taşıyarak (yeniden adlandırarak) aktarabilirsiniz. veya dizin. Onlar. sanal alana sembolik bir bağlantı oluşturun, onunla dosyanızın bir dizini gibi çalışın, ardından silin veya gerekirse silmeyin.

2. https://www.mql5.com/ru/code/8577

Bu, MQL4 sarmalayıcılı eski bir WinAPI işlevleri kitaplığıdır. Dosya ve dizinlerle yapılan tüm işlemler. tavsiye etmem. İlkinden daha güvenilir.

3. https://www.mql5.com/ru/code/9951

 // 2.2.1. Функция закрывает окно терминала МТ4. Функция возвращает TRUE, если сообщение поставлено в очередь, иначе - FALSE.
 bool ServiceMetaTraderClose();

==================

Artyom, burada noktalı lakapların yasak olduğunu biliyor musun? Profiliniz nokta nedeniyle görünmüyor.

 
......

Artyom, burada noktalı lakapların yasak olduğunu biliyor musun? Profiliniz nokta nedeniyle görünmüyor.


Tavsiyen için teşekkür ederim. Sadece Vista'da mı yoksa 7'de mi çalışıyor? yoksa kimse kontrol etmedi mi?

Profili uzun süre oluşturdum, noktayı bilmiyordum. Uzun süre ve özenle düzenlemeye çalıştım, "Link çalışmıyor" hatası veriyor. Destekte yazdım, sessizlik. Bu yüzden uzlaştım, ana işlevi yerine getiriyor :)

 
merkulov.artem :


Tavsiyen için teşekkür ederim. Sadece Vista'da mı yoksa 7'de mi çalışıyor? yoksa kimse kontrol etmedi mi?

Profili uzun süre oluşturdum, noktayı bilmiyordum. Uzun süre ve özenle düzenlemeye çalıştım, "Link çalışmıyor" hatası veriyor. Destekte yazdım, sessizlik. Bu yüzden uzlaştım, ana işlevi yerine getiriyor :)

Vista'dan yazılmıştır.
 
Dimka-novitsek :

Tekrar merhaba!

1. Bir düşünün, son uzman nereye kayboldu.. Geriye bu kaldı.

2. Geri iade edebilir miyim!


Günaydın!

1. Böyle yönetiyorsun! i-net hattı ile ayrı bir kamp kurmanın tam zamanı! BENİM NACİZANE FİKRİME GÖRE! (Bilgisayarda birden fazla çalıştığınızda - böyle bir silme şaşırtıcı değil, büyük olasılıkla biri yoruldu, ama artık önemli değil - kod yıkıldı ...) Yine nasıl (kusmadan) piçler) kod neredeyse silinmiş ve "Kaydet" düğmesine basılmış olabilir (sol üstteki disket) ? Birisi parkta bir şeyi silmiş olsa bile, onu kurtarmak neden gerekliydi? Yine, bir program yazarken, ara kayıtların yapılması gerektiğini ve böyle bir durumda onlardan devam edilmesi gerektiğini (aranın aşırı versiyonunun yüklenmesi (son - bu program bittiyse) kaydetme) başınızı sallayın.

2. Yapamazsınız.

 

Merhaba!

İlk Uzman Danışmanımı sonuçlandırdım. İlk görev, fikrinizi bir kod biçiminde doğru bir şekilde sunmaktı.

Danışmanıma bakmanızı ve fikrinizi belirtmenizi rica ediyorum.

Expert Advisor'ı yazarken yaptığınız yardım için çok teşekkür ederiz!

Danışmanın mantığı şudur:

-Fiyat RSI seviyesini (1 koşul) kırar,

-daha sonra, bayrağı kullanarak ikinci koşulu yerine getirir (n sayıda çubuk için yüksek veya düşük olanı kırarak)

- ayrıca, birinci sıra açıkken ikinci sıranın açılmaması için bir işlev tanıttı.

Bir kez daha amaç, bir Uzman Danışmanı doğru bir şekilde yazmaktı. Lütfen hatalarımı ve eksikliklerimi belirtin.

Şimdiden teşekkür ederim.

Dosyalar:
proboitrsi.mq4  12 kb
 
Teşekkür ederim!
 
Pacman :

Merhaba!

İlk Uzman Danışmanımı sonuçlandırdım. İlk görev, fikrinizi bir kod biçiminde doğru bir şekilde sunmaktı.

...

Kodunuzda biraz dolaşmaya karar verdim.

1) init() ve deinit() eksikliği,

2) İşte:
 for ( int i= 1 ; i<= OrdersTotal (); i++)
      {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true)
         {
           if ( OrderSymbol () == Symb)
            {
             if ( OrderMagicNumber ()== 777 )
                 return ;
            }    
         }   
      }

şu şekilde yapılabilir:

 if ( OrdersTotal ()> 0 )
{   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {   if ( OrderSymbol () != Symb) continue ;
           if ( OrderMagicNumber () != 777 ) continue ;
           return ;
      }
   }
}

3) işte burada

Symb=   Symbol ();
...
Min_Lot= MarketInfo ( Symbol (),MODE_MINLOT);
...
Steep=   MarketInfo ( Symbol (),MODE_LOTSTEP);

init() içine yazın, başlatma sırasında onları bir kez tanımlamak yeterlidir, her onay işareti değil, çünkü " bir işlevi çağırmak, bir değişkene erişmekten daha fazla zaman alır."

4) Bu girişin mantığı benim için net değil

 while (true)
...

ne zaman yanlış olabilir?

Bu benim gözüme çarpanlardan sadece birkaçı.

 
paladin80 :

Kodunuzda biraz dolaşmaya karar verdim.


3) işte burada

init() içine yazın, başlatma sırasında onları bir kez tanımlamak yeterlidir, her onay işareti değil, çünkü "Bir işlevi çağırmak, bir değişkene erişmekten daha fazla zaman alır."


Piyasa ortamının her zaman init() içinde mevcut olmadığını unutmayın.