MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 588

 
lil_lil :

Aynı anda 4 pozisyonu kapatıyorum, art arda kayıpları hesaplama işlevinde onları bir için nasıl sayabilirim?

Kapanış, kayma nedeniyle aynı fiyatta olmayabilir ve zaman muhtemelen farklıdır

Teşebbüs:

Broker sayaç kapatmaya izin veriyorsa, kapanış fiyatını sabitlemek için toplam kapatılan emir hacmine eşit hacimli bir karşı emir açmanız gerekir. Bundan sonra kapanış fiyatı sabitlenir ve yavaş yavaş zıt kapanış emirlerinin 4 alım satım işlemini gerçekleştirebilirsiniz .

 

Bana marjı hesaplama yöntemini nasıl belirleyeceğimi söyle.

Bazı brokerler her pozisyon için marj talep eder. Ve bazıları için, yalnızca alım ve satım hacimlerindeki farkla. (yani, hesapta tam bir kilit varsa, marj sıfırdır)


Marj hesaplama yöntemi programlı olarak nasıl belirlenir?

 

Merhaba. Bana yardım et lütfen.

MA'nın üzerinde bir fraktal arıyorum, çubuğu hatırlıyorum, ayrıca bu çubuktan bir fraktal arıyorum ve eğer ilk bulunandan küçükse, o zaman doğru

Bir yorumda sürekli yanlış

 Comment(f_ma(Symbol(),0,i));
//+----------------------------------------------------------------------------+

bool f_ma( string sy= "0" , int tf= 0 , int nf= 0 ) 
  {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ,MA= 0 ,fr1,fr2;
   int     d= MarketInfo (sy, MODE_DIGITS ),s;
   if (d== 0 ) if ( StringFind (sy, "JPY" )< 0 ) d= 4 ; else d= 2 ;
   int     i,k= iBars (sy,tf),kf,num_bar;

   for (i=nf+ 2 ; i<k; i++) 
     {
      f= iFractals (sy,tf, MODE_UPPER ,i);
      MA= iMA ( NULL , 0 , 35 , 0 , MODE_EMA , PRICE_CLOSE ,i);
       if (f!= 0 ) 
        {
         // kf++;
         if (f>MA) {num_bar=i; fr1= NormalizeDouble (f, d); continue ;}
         
        }
     }
     //
       for (i=nf+ num_bar; i<k; i++) 
     {
      f= iFractals (sy,tf, MODE_UPPER ,i);
       if (f!= 0 ) 
        {
        fr2= NormalizeDouble (f, d);
         if (fr2<fr1) return ( true );
        }
     }
     
     
   return ( false );
  }
 
Ghabo :

Merhaba. Bana yardım et lütfen.

MA'nın üzerinde bir fraktal arıyorum, çubuğu hatırlıyorum, ayrıca bu çubuktan bir fraktal arıyorum ve eğer ilk bulunandan küçükse, o zaman doğru

Bir yorumda sürekli yanlış

Sorun bu satırda

         if (f>MA) {num_bar=i; fr1= NormalizeDouble (f, d); continue ;}


Fraktal bulunursa ve MA'nın üzerindeyse, döngü kesilmeli ve devam edilmemelidir. Ne de olsa, ilki bulunduktan sonra, bir başkası ve üçüncüsü olacak ve bu böyle devam edene kadar ...

 
Alexey Viktorov :

Sorun bu satırda


Fraktal bulunursa ve MA'nın üzerindeyse, döngü kesilmeli ve devam edilmemelidir. Ne de olsa, ilki bulunduktan sonra, bir başkası ve üçüncüsü olacak ve bu böyle devam edene kadar ...

Sayesinde. Break ile değiştirildi; Artık her zaman doğrudur. ancak if (fr2<fr1) koşulu karşılanmaz.
 
Ghabo :
Sayesinde. Break ile değiştirildi; Artık her zaman doğrudur. ancak if (fr2<fr1) koşulu karşılanmaz.

Fonksiyonun sonucunun çıktısından önce bu koşulun eklenmesi gerektiği anlamına gelir. Bunun neresi zor???

 
Alexey Viktorov :

Fonksiyonun sonucunun çıktısından önce bu koşulun eklenmesi gerektiği anlamına gelir. Bunun neresi zor???

Koşul sağlanmadığında işlevin false döndürmesi gerekmez mi?

 #property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
if (rates_total< 100 ) return ( 0 );
int limit=rates_total-prev_calculated;
if (limit> 200 )limit= 200 ;
   for ( int i=limit; i> 0 ; i--)
     {
     
     
     Comment (f_ma( Symbol (), 0 ,i));
     }
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
   //-------------------
   bool f_ma( string sy= "0" , int tf= 0 , int nf= 0 ) 
  {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ,MA= 0 ,fr1,fr2;
   int     d= MarketInfo (sy, MODE_DIGITS ),s;
   if (d== 0 ) if ( StringFind (sy, "JPY" )< 0 ) d= 4 ; else d= 2 ;
   int     i,k= iBars (sy,tf),kf,num_bar;

   for (i=nf+ 2 ; i<k; i++) 
     {
      f= iFractals (sy,tf, MODE_UPPER ,i);
      MA= iMA ( NULL , 0 , 35 , 0 , MODE_EMA , PRICE_CLOSE ,i);
       if (f!= 0 ) 
        {
         // kf++;
         if (f>MA) {num_bar=i; fr1= NormalizeDouble (f, d); break ;}
         
        }
     }
     //
       for (i=nf+ num_bar; i<k; i++) 
     {
      f= iFractals (sy,tf, MODE_UPPER ,i);
       if (f!= 0 ) 
        {
        fr2= NormalizeDouble (f, d);
         if (fr2<fr1) return ( true );
        }
     }
     
     
   return ( false );
  }
  
 
Ghabo :

Koşul sağlanmadığında işlev false döndürmemeli mi?

iFractals'ın sıfır mı yoksa boş mu döndürdüğünü kontrol edin.

 
Alexey Viktorov :

iFractals'ın sıfır mı yoksa boş mu döndürdüğünü kontrol edin.

Veri penceresindeki boş değer. if (f!= 0 ) ile if(f!=EMPTY_VALUE) değiştirildi, sonuç değişmedi.
 
Ghabo :
Veri penceresindeki boş değer. if (f!= 0 ) ile if(f!=EMPTY_VALUE) değiştirildi, sonuç değişmedi.

1. Kontrol edin dedim, değiştirmeyin. Fraktal yoksa iFractals 0 döndürür. Düzenli olarak kullanmıyorum ve doğal olarak kurumamış hafızayı bu tür önemsiz şeylerle tıkamıyorum.

2. İşlev, çok kötü yazılmış olmasına rağmen, hala düzgün çalışıyor.

3. Son değer Yorum'da görüntülenir. Değişmek

     Print ( "************ " , f_ma( Symbol (), 0 , 0 ));
ve kaç kez basılacağını görün
 2018.07 . 30 21 : 02 : 43.656 00 EURUSD.e,H1: ************ true