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

 
sile :

Merhaba.

Lütfen yardım et.

Günün başlangıcından itibaren, kapalı pozisyonlarda kaybın %10 olduğunu nasıl öğrenebilirim?

Bu EA, sol üst köşede, belirlenen dönem için kâr veya zarar yüzdesini gösterir.

//+------------------------------------------------------------------+
//|                                                       test02.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link        "https://www.mql5.com/ru/users/sergey1294"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum mode_type
  {
   BUY= OP_BUY ,
   SELL= OP_SELL ,
   ALL = - 1
  };
input string Symbols= NULL ;
input int Magic=- 1 ; //Identification number
input mode_type ModeType=ALL;
input ENUM_TIMEFRAMES TimeFrame= PERIOD_D1 ;

double procent= 0.0 ;
double prev_balans= 0.0 ;
double Profit= 0.0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   Profit=LastProfit( iTime ( _Symbol ,TimeFrame, 0 ),Symbols,Magic,ModeType);
   prev_balans=Balans( 0 , iTime ( _Symbol ,TimeFrame, 0 ));
   if (prev_balans!= 0.0 )procent=Profit/prev_balans* 100.0 ;
   Comment (
           "\nTime = " , iTime ( _Symbol ,TimeFrame, 0 ),
           "\nProfit = " , DoubleToStr (Profit, 2 ),
           "\nprev_balans = " , DoubleToStr (prev_balans, 2 ),
           "\nprocent = " , DoubleToStr (procent, 4 ), " %"
           );
  }
//+------------------------------------------------------------------+
double LastProfit(
                   datetime time,       // Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
                   string symbol= NULL , // символ, если NULL то любой символ
                   int magic=- 1 ,       // идентификатор, если -1 то любой идентификатор
                   int cmd=- 1            // торговая операция, если -1 любая торговая операция
                  )
  {
   double profit= 0 ;
   int total= OrdersHistoryTotal ();
   for ( int i=total- 1 ;i>= 0 ;i--)
     {
       if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
       if ( OrderSymbol ()==symbol || symbol!= NULL )
        {
         if ( OrderMagicNumber ()==magic || magic==- 1 )
           {
             if ( OrderType ()==cmd || cmd==- 1 )
              {
               if ( OrderCloseTime ()<time) continue ;
               profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
              }
           }
        }
     }
   return (profit);
  }
//+------------------------------------------------------------------+
double Balans(
               datetime start_time, // C какой даты. Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
               datetime stop_time, // По какую дату. Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
              )
  {
   double profit= 0 ;
   int total= OrdersHistoryTotal ();
   for ( int i= 0 ; i<total; i++)
     {
       if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
       if ( OrderCloseTime ()<start_time || OrderCloseTime ()>stop_time) continue ;
      profit+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
     }
   return (profit);
  }
//+------------------------------------------------------------------+

...

Dosyalar:
test02.mq4  8 kb
 
Sergey Gritsay :

Bu EA, sol üst köşede, belirlenen dönem için kâr veya zarar yüzdesini gösterir.


Teşekkür ederim.

Tüm zamanlar için kârsız pozisyonların sayısını sayan bir fonksiyon var.

Neyi değiştirmek için   bugün arka arkaya kapatılan kârsız pozisyonların sayısını öğrenin.



int GetLastNegativeOrdersCount()
{
   int PosCnt = 0 ;
   int cnt = HistoryTotal ();
   for ( int i = cnt- 1 ; i >= 0 ; i--) {
    
     if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
     if ( OrderSymbol () != Symbol ()) continue ;
     if ( OrderMagicNumber () != Magic) continue ;

      
     int type = OrderType ();
     if (type != OP_BUY && type != OP_SELL ) continue ;
      
     if ( OrderProfit ()+ OrderSwap ()+ OrderCommission () > 0 ) break ;

    PosCnt++;
  }

   return (PosCnt);
}
 
sile :

Teşekkür ederim.

Tüm zamanlar için kârsız pozisyonların sayısını sayan bir fonksiyon var.

Neyi değiştirmek için   bugün arka arkaya kapatılan kârsız pozisyonların sayısını öğrenin.



int GetLastNegativeOrdersCount()
{
   int PosCnt = 0 ;
   int cnt = HistoryTotal ();
   for ( int i = cnt- 1 ; i >= 0 ; i--) {
    
     if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
     if ( OrderSymbol () != Symbol ()) continue ;
     if ( OrderMagicNumber () != Magic) continue ;

      
     int type = OrderType ();
     if (type != OP_BUY && type != OP_SELL ) continue ;
      
     if ( OrderProfit ()+ OrderSwap ()+ OrderCommission () > 0 ) break ;

    PosCnt++;
  }

   return (PosCnt);
}
bir koşul daha ekleyin: emrin kapanış zamanı , mevcut mum D1'in açılış zamanından daha az ise, devam edin;
 
Artyom Trishkin :
bir koşul daha ekleyin: emrin kapanış zamanı , mevcut mum D1'in açılış zamanından daha az ise, devam edin;

Teşekkür ederim.

if ( iTime ( Symbol (), 1440 , 0 )> OrderCloseTime ()) continue ;
 
sile :

Teşekkür ederim.

if ( iTime ( Symbol (), 1440 , 0 )> OrderCloseTime ()) continue ;


Kesinlikle bu şekilde değil.

Bunun gibi - OrderSymbol()

if ( iTime ( OrderSymbol (), PERIOD_D1 , 0 )>= OrderCloseTime ()) continue ;

veya bunun gibi:

if ( OrderCloseTime ()< iTime ( OrderSymbol (), PERIOD_D1 , 0 )) continue ;
 
Artyom Trishkin :

Kesinlikle bu şekilde değil.

Bunun gibi - OrderSymbol()


Sayesinde.

 
Sayın. Expert Advisor'ın giriş parametreleri penceresine nasıl metin ekleyeceğimi söyle.
 
Mikhail Goryunov :
Sayın. Expert Advisor'ın giriş parametreleri penceresine nasıl metin ekleyeceğimi söyleyin.
input int     MetaQuotes = 30 ;
input bool    MetaQuotes = true ;
input double MetaQuotes = 20.3 ;
input string MetaQuotes = "Corp" ;
 
Vitaly Muzichenko :
input int     MetaQuotes = 30 ;
input bool    MetaQuotes = true ;
input double MetaQuotes = 20.3 ;
input string MetaQuotes = "Corp" ;

Şalgam + teşekkür ederim. Anladım, biraz açıklama ile harici giriş değişkenleri hakkında bir eğitim okudum. Bir örnek daha açık ve net.

sinput string MetaQuotes = "бла бла текс" ;
 
Mikhail Goryunov :

Şalgam + teşekkür ederim. Anladım, biraz açıklama ile harici giriş değişkenleri hakkında bir eğitim okudum. Bir örnek daha açık ve net.

sinput string MetaQuotes = "бла бла текс" ;

Her satıra yorum eklerseniz, daha ilginç olacaktır:

input     int       MetaQuotes1    =   30 ;         // Описание входного параметра 1
input     bool      MetaQuotes2    =   true ;       // Описание входного параметра 2
input     double    MetaQuotes3    =   20.3 ;       // Описание входного параметра 3
input     string    MetaQuotes4    =   "Corp" ;     // Описание входного параметра 4

ve eğer başka bir numaralandırma yapar ve onu bool yerine kullanırsanız, o zaman daha da ilginç olacaktır:

enum enumYN
  {
   enYes =   1 ,     // Да
   enNo  =   0 ,     // Нет
  };

input     int       MetaQuotes1    =   30 ;         // Описание входного параметра 1
input     enumYN   MetaQuotes2    =  enYes;       // Описание входного параметра 2
input     double    MetaQuotes3    =   20.3 ;       // Описание входного параметра 3
input     string    MetaQuotes4    =   "Corp" ;     // Описание входного параметра 4

ve sinput , optimizasyon için değişkenler listesinden bir değişkeni çıkarmanıza izin verir. Örneğin, bu bağlamda MetaQuotes4 değişkeni optimizasyon için gerekli değildir ve hariç tutulabilir:

enum enumYN
  {
   enYes =   1 ,     // Да
   enNo  =   0 ,     // Нет
  };

input      int       MetaQuotes1    =   30 ;         // Описание входного параметра 1
input     enumYN   MetaQuotes2    =  enYes;       // Описание входного параметра 2
input      double    MetaQuotes3    =   20.3 ;       // Описание входного параметра 3
sinput    string    MetaQuotes4    =   "Corp" ;     // Описание входного параметра 4
Neden: