[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 403

 
ruslanchik :
lütfen bana yığın boyutunu nasıl hesaplayacağımı söyle

Sorunuz hakkında daha spesifik olun.
 

Optimizasyonda gereksiz bir adımı atlayıp bir sonrakine geçmek mümkün müdür?

Örnek: optimize edilmesi gereken giriş parametreleri ( çift tip ) vardır: x1, x2, x3, x4 bunların değerleri 1'den 5'e kadardır. adım 0.1

Bu durumda 41 * 41 * 41 * 41 = 2 825 761 arama seçeneği olacağı açıktır.

Ancak, aşağıdaki kısıtlamada arama yapmanız gerekir: 10.5 < x1+x2+x3+x4 < 11.5 Ve burada zaten, numaralandırma için çok daha az seçeneğin olacağı açıktır. (yani, miktar üzerinde böyle bir sınır gereklidir)

bu nedenle, bu kısıtlama EA koduna şu şekilde eklenirse:

 extern double     x1= 1 , x2= 1 , x3= 1 , x4= 1 ;

int start()

{

   if ( 10.5 <x1+x2+x3+x4 && x1+x2+x3+x4< 11.5 )

    {
       // основной код эксперта 

    }
   return ; 

} 

daha sonra optimizasyon sırasında (her yeni onay geldiğinde), uygun olmayan seçenekler alınacaktır, örneğin x1= 4 , x2= 4 , x3= 4 , x4= 4 ; kesinlikle olmayacak olan şey, ana kodun yürütülmesidir.

Yani, bu optimizasyon adımı tarihsel aralığı "sızdırana kadar" bir sonraki adıma geçiş olmayacaktır. 10.5 < x1+x2+x3+x4 < 11.5 koşulunun karşılanmadığına dair bir "inanç" olacaktır ve bu sadece ana kodun eylemlerinin yürütülmesini/hesaplanmasını engelleyecektir.

Bu kadar bariz şekilde uygunsuz seçenekler için zaman yoğun bir şekilde ve boşuna harcanacaktır.

Durum için açıkça uygun olmayan parametrelerle optimizasyonda bu tür adımların yürütülmesi nasıl hariç tutulabilir?

Yani, bir sonraki parametre seti uygun olmadığında - bu adım optimize edilmeyecek, ancak hemen yenisine mi geçilecek?

 
fmql :

Optimizasyonda gereksiz bir adımı atlayıp bir sonrakine geçmek mümkün müdür?


3 parametreyi optimize edebilir ve dördüncüyü istediğiniz miktar için ayarlayabilirsiniz.

veya istenen olayı kendiliğinden oluşturmak için üçüncü "Optimizasyon" sekmesini kullanın.

 
sergeev :

3 parametreyi optimize edebilir ve dördüncüyü istediğiniz miktar için ayarlayabilirsiniz.

veya istenen olayı kendiliğinden oluşturmak için üçüncü "Optimizasyon" sekmesini kullanın.

mesele şu ki, benim durumumda 4. parametrenin katılımı olmadan 3 parametreyi optimize etmek imkansız.

Burada önemli olan onların ortak seçimidir ve toplamları aralıkta sınırlıdır.

(bu, bir karışımın tüm bileşenlerinin oranlarını aramaya benzer ve bu karışımın toplam kütlesi kesin bir aralıkla sınırlıdır)

Üçüncü yer imi hakkında daha ayrıntılı olarak, istenen olayın ne tür kendiliğinden oluşması mümkündür?

 

Tünaydın.

ZigZag göstergesinin son ekstremumunun mum değerlerini (Yüksek, Düşük, Açık, Kapat) nasıl çıkaracağımı söyle?

 
Tıpkı diğer mumlar gibi. aynı işlevler. (Gezegeninizin çapını düşünün. (c) )
 
Son ekstremin kendisinin çubuk numarasını almanız gerekiyorsa, son ışının nesnesinin adıyla, çubuğun zamanına karşılık gelen ilk koordinatın zamanını alın. Çubuğun zamanına göre çubuk sayısını belirleyin. Çubuk numarasına göre çubuğun özelliklerini belirleyin.
 
fmql :

Üçüncü yer imi hakkında daha ayrıntılı olarak, istenen olayın ne tür kendiliğinden oluşması mümkündür?


yardımda daha fazla ayrıntı

kısacası - üçüncü sekmeden öğe için kendi koşullarınızı oluşturabilirsiniz (örneğin, arka arkaya 10 kayıp sipariş açın) ve test cihazı bu çalıştırmayı otomatik olarak atlayacak ve bir sonrakine geçecektir.

 
Stells :

Tünaydın.

ZigZag göstergesinin son ekstremumunun mum değerlerini (Yüksek, Düşük, Açık, Kapat) nasıl çıkaracağımı söyle?


Bu işlem, bazı ilişkili hesaplamalar gerektirir.

Bunu yapardım:

 int start()
  {
 double // экстремумы Зиг-Зага
  y3= 0 , 
   y2= 0 ,
    y1= 0 ,
     y0,
     zz;   
 int     x3, x2, x1, sh=ShiftBars; // номера баров  

  y0= iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , 1 );

//=============================================================================
   // Берём три экстремума Зиг-Зага
   while (y3== 0 ) 
      {
      zz= iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , sh);
       if (zz!= 0 && zz!= EMPTY_VALUE ) 
         {
         if       (y1== 0 ) { x1=sh; y1=zz; }
         else if (y2== 0 ) { x2=sh; y2=zz; }
         else if (y3== 0 ) { x3=sh; y3=zz; }
         }
      sh++;

//----- Вывод информации на экран -----------------------------------------------
string info= "" ;
string on_off= "---------------------------------------------------" +   "\r\n" ;

on_off= StringConcatenate (on_off, "Экстремум= " ,y1, " на " ,x1, " баре" , "\r\n" );
on_off= StringConcatenate (on_off, "Экстремум= " ,y2, " на " ,x2, " баре" , "\r\n" );
info= StringConcatenate (info,on_off, "\r\n" );
info= StringConcatenate (info, "\r\n" );
Comment (info);    

Artık son 2 ekstremumdaki (min ve maks) çubukların sayılarını ve sonra onların yükseklerini, loy'lerini biliyorsunuz.. Bulması kolay!

- Kapat[x1], Aç[x2], .... vb.

Belki birileri daha kolay bir seçenek sunacaktır.

 
Döngü yapılamaz, X ve Y her zaman 0'dır.
 //+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
extern double stoploss= 0 ; extern double takeprofit= 20 ; extern int otstup= 20 ; extern datetime expiration= 0 ;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett; double volume= 0.1 ; int i= 0 ,R1= 0 ,R2= 0 ,A= 1 ; double price= PRICE_OPEN ;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/ 2 ;            
//----
       Alert ( "OrdersTotal()" , OrdersTotal ());

if (OrderSymbol()== Symbol ()&&OrderMagicNumber( )== 1000 ){
 for ( int i= OrdersTotal ();i== 0 ;i--){
OrderSelect (i,SELECT_BY_POS ); if (OrderType( )==OP_BUYSTOP){X++;}}} Alert ( "X" , X);
if (X== 0 ){


   tiket= OrderSend ( Symbol (), OP_BUYSTOP,  volume*A, price +otstup* Point , Point * 3 , R1, price+takeprofit* Point +otstup* Point , "OP_BUYSTOP" , 1000 ,  expiration, Red ); 
   Alert ( "OP_BUYSTOP" , GetLastError ( )); }
   
if ( OrderMagicNumber( )== 2000 &&OrderSymbol()== Symbol ()) { 
   for ( i= OrdersTotal ();i== 0 ;i--){ OrderSelect (i,SELECT_BY_POS );
if (OrderType( ) ==OP_SELLSTOP) { Y++;}}} Alert ( "Y" , Y);
 if (Y== 0 ){ 
   tikett= OrderSend ( Symbol (), OP_SELLSTOP,  volume*A, price -otstup* Point , Point * 3 ,R2, price-takeprofit* Point -otstup* Point , "OP_SELLSTOP" , 2000 ,  expiration, C'0,128,255' );
     Alert ( "OP_SELLSTOP" , GetLastError ( )); 
    }       
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+