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

 
Galim_V :

Görev, minimum kapanışa sahip bir bar bulmaktır.

for(int x=0; x<=xBars -1; x++)

{

sayaç++;

// Yazdır(Kapat[x],",,,",sayaç);

int h = DiziMinimum(Kapat[x]);

if(sayaç > 20) break;

}

Derleyici Kapat'a yemin ediyor

Kapanış fiyatlarını ayrı bir diziye ve ardından ArrauMin döngüsünün dışına yazın
 
Alekseu Fedotov :
Kapanış fiyatlarını ayrı bir diziye ve ardından ArrauMin döngüsünün dışına yazın
Sayesinde!
 
Galim_V :

Görev, minimum kapanışa sahip bir bar bulmaktır.

iHighest ve iLowest işlevleri vardır (şimdi MT5'te de vardır)

 
Taras Slobodyanik :

iHighest ve iLowest işlevleri vardır (şimdi MT5'te de vardır)

Teşekkür ederim!
 
Galim_V :

Görev, minimum kapanışa sahip bir bar bulmaktır.

for(int x=0; x<=xBars -1; x++)

{

sayaç++;

// Yazdır(Kapat[x],",,,",sayaç);

int h = DiziMinimum(Kapat[x]);

if(sayaç > 20) break;

}

Derleyici Close'a yemin ediyor

MQL4'te minimum/maksimum fiyatı bulma görevi tek satırda çözüldü:

 double fMinClose = iClose ( NULL , 0 , iLowest ( NULL , 0 , MODE_CLOSE , <сколько баров>, <начинать с бара>));
 
Taras Slobodyanik :

mümkün, ancak tam bir zamanlayıcı olmayacak

Teşekkür ederim.

Artışlarla bir lotun hacmi nasıl hesaplanır? Depozit =1000, lot =0,1 ise, mevduat 2000 lot = 0,2 oldu. Yani 1500 veya 1700'lük bir depo ile lot artmaz.

 
PolarSeaman :

Teşekkür ederim.

Artışlarla bir lotun hacmi nasıl hesaplanır? Depozit =1000, lot =0,1 ise, mevduat 2000 lot = 0,2 oldu. Yani 1500 veya 1700'lük bir depo ile lot artmaz.

 double percentLot = 0.01 ,
       lot = NormalizeDouble ( MathFloor ( AccountInfoDouble ( ACCOUNT_BALANCE )*percentLot/ 10 )/ 10 , 1);

Bunun gibi bir şey...

 
Konstantin Nikitin :

Bunun gibi bir şey...

Hayır, 1100 depo ile lot 0.11 olacak ama 2000 yılına kadar lotun artmamasına ihtiyacım var. Ayarlarda adım = 1000'i nasıl ayarlayabilirim?

 
İyi günler, lütfen bana dizine fare koordinatları eklemenin mümkün olup olmadığını söyleyin, mümkünse, bunu kim yapabilir ereminmikola@yandex.ru bana posta ile yazın.
 

Merhaba programcılar. Aşağıdaki duruma nasıl doğru bir şekilde yaklaşacağımı söyler misiniz:

1. EA, ayarlarda belirtilen aynı lot ile 2 piyasa emri (alış ve satış) açar. - Öğe açıklama yapılmadan yürütülür

Bir sonrakinde bir sorun ortaya çıktı, fiyat hem SAT hem de AL yönünde hareket edebilir. Kod nasıl düzenlenebilir ki, n puan geçerken danışman bu iki işlemin karlılığını CANLI olarak tarar ve n puan geçtikten sonra eksi bakiyesi olan siparişi tam olarak kapatır? Nasıl güzelleştirileceğine dair başka fikirleriniz varsa, lütfen bana söyleyin.

Kodu veriyorum - taslak, sadece ilk nokta yürütülüyor, TP ve SL ile 2 anlaşma açılıyor

2. Fiyat ayarlarda belirtilen puan sayısını geçtiğinde eksi bakiyeli bir emir kapatılır ve aynı lotla 2 emir (al-sat) daha açılır,

ayarlarda belirtilen ve tüm emirler için stoplar ilk emrin açılış fiyatından yapılır, yani trend tersine döndüğünde 3 emrin hepsi aynı anda kapatılmalıdır.


 extern int     _ms = 1000 ;  
extern double _lots = 0.01 ;
extern double _TP = 80 ;
extern double _SL = 35 ;

int _mn;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  { 
   pt = Point ;
   if ( Digits == 3 || Digits == 5 ) {pt*= 10 ;} else pt = Point ;
   _mn = MagicNumberGenerator(_ms);
   Print ( "The magic number is " ,_mn);
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
     if (IsNewCandle())
    {
       if (TotalOpenOrders(_mn)== 0 )
      {
        EnterTrade( OP_BUY );
        EnterTrade( OP_SELL );
      }
    }   
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   Открытие первых позиций                                        |
//+------------------------------------------------------------------+
void EnterTrade( int type)
{
   double price = 0 ; double sl = 0 ; double tp = 0 ; double lot = _lots;
   
   if       (type == OP_BUY )  price = Ask ;
   else if (type == OP_SELL ) price = Bid ;
   
   int err = 0 ;
   int ticket = OrderSend ( _Symbol , type, lot, price, 30 , 0 , 0 , NULL , _mn, 0 , clrGreen );
   if (ticket == - 1 )
   {
     err = GetLastError ();
     Print ( "Could not place the order due to error " ,err, " " ,ErrorDescription(err));
     if (err == ERR_TRADE_NOT_ALLOWED ) Alert ( "You need to enable you autotrade button" );
   }
   else 
   {
     if (! OrderSelect (ticket, SELECT_BY_TICKET ))
     {
       err = GetLastError ();
       Print ( "Could not select the order due to error " ,err, " " ,ErrorDescription(err));
     }
     else 
     {
       if ( OrderType ()== OP_SELL )
       {
         sl = OrderOpenPrice ()+(_SL*pt);
         if (_SL== 0 ) sl = 0 ; 
         tp = OrderOpenPrice ()-(_TP*pt);
       }  
       else if ( OrderType ()== OP_BUY )
       {
         sl = OrderOpenPrice ()-(_SL*pt);
         if (_SL== 0 ) sl = 0 ; 
         tp = OrderOpenPrice ()+(_TP*pt);
       }
       if (! OrderModify (ticket, OrderOpenPrice (), sl, tp, 0 , clrNONE ))
       err = GetLastError ();
       Print ( "Could not modify the order due to error " ,err, " " ,ErrorDescription(err));
     }
   }
}