Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1054

 

Igor Makanu :

standart CTrade hazır bir hizmet sağlamaz

MT4'te tek satırda kodlanmış ticari şeyler var. MT5'te aynı şeyi SB üzerinden yüz hat için bile yapmak mümkün değil, saf MQL5'te daha da kötü. İyi tamam.

 

teşekkürler, iyi bir örnek çalışacağım, burada MT4 için bir komut dosyası çizdim - karı puan olarak belirliyoruz:

 //+------------------------------------------------------------------+
//|                                        LastOrderProfitInPips.mq4 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   printf ( "Прибыль последнего закрытого ордера %d пунктов" ,LastHistoryProfit());

  }
//+------------------------------------------------------------------+
int LastHistoryProfit( int magic_=- 1 )
  {
   datetime t= 0 ;
   int profit=0;
   for ( int i= 0 ; i<OrdersHistoryTotal(); i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
        {
         if ((OrderMagicNumber()==magic_ || magic_==- 1 ) && (OrderSymbol()== _Symbol ))
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (OrderCloseTime()>t)
                 {
                  t=OrderCloseTime();
                  profit= ( int )( fabs (OrderOpenPrice()-OrderClosePrice())/ _Point );
                  profit= OrderProfit()>= 0.0 ? profit : -profit;
                 }
              }
           }
        }
     }
   return (profit);
  }
//+------------------------------------------------------------------+

10 dakikada sıfırdan mı yazdın? - peki, böyle bir şey, mantık basit ve anlaşılır - sen al ve yaz, MT5'te şimdiye kadar sadece bir boşlukta küresel bir atı tartışıyoruz ... işlemler varsa ve emirler varsa, tartışmaya devam ediyor hesap türleri netleştirme veya hedge .... iyi, sabaha bir şeyler - yazacağız

 
Igor Makanu :

teşekkürler, iyi bir örnek çalışacağım, burada MT4 için bir komut dosyası çizdim - karı puan olarak belirliyoruz

Peki, bu betiğin MT5'te nasıl çalıştırılacağını söylemeye gerek yok. Ancak, komut dosyasının kendisi hatalar içeriyor.

Önce sana hikayeyi göstereyim

ve yürütme sonucu

Прибыль последнего закрытого ордера - 259 пунктов


Ve hatalar burada

 int LastHistoryProfit( int magic_=- 1 )
  {
   datetime t= 0 ;
   int profit= 0 ;
   for ( int i= 0 ; i<OrdersHistoryTotal(); i++) // Надо бежать в обратную сторону, т.к. последняя позиция может быть закрыта в ту же секунду, что и предпоследняя.
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
        {
         if ((OrderMagicNumber()==magic_ || magic_==- 1 ) && (OrderSymbol()== _Symbol ))
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (OrderCloseTime()>t) // В отличие от MT4, в MT5 это можно не делать - сортировка по времени закрытия есть.
                 {
                  t=OrderCloseTime();
                  profit= ( int )( fabs (OrderOpenPrice()-OrderClosePrice())/ _Point ); // При таком вычислении легко потерять один пункт.
                  profit= OrderProfit()>= 0.0 ? profit : -profit;
                 }
              }
           }
        }
     }
   return (profit);
  }
 
fxsaber :

Ve hatalar burada

 При таком вычислении легко потерять один пункт.

nasıl düzeltilir? hiç düşünmedim, plan standart gibi görünüyor: 2 fiyat - farkı buldu ve puanlara ayrıldı

Geri kalanına katılıyorum, ancak sıralama düzeninin klasik olduğunu ve zamanı en uzun süre karşılaştırmak istemeniz durumunda düşünmelisiniz .... böyle bir görev ilk kez olmasına rağmen - vakaların %99,99'unda MT4'te hiç kimse hft TS'yi takas etmeye bile çalışmıyor

 
Igor Makanu :

nasıl düzeltilir? hiç düşünmedim, plan standart gibi görünüyor: 2 fiyat - farkı buldu ve puanlara ayrıldı

Çift döküm yaparken kayıp -> int.

Geri kalanına katılıyorum, ancak sıralama düzeninin klasik olduğunu ve zamanı en uzun süre karşılaştırmak istemeniz durumunda düşünmeniz gerekiyor .... böyle bir görev ilk kez olmasına rağmen - vakaların %99,99'unda MT4'te hiç kimse hft TS'yi takas etmeye bile çalışmıyor

HFT'nin bununla hiçbir ilgisi yok. CloseAll betiği, bir saniye içinde iki pozisyonu kapatabilir. MT4'te karşılaştırmanız gerekir, MT5'te ise gereksizdir. ArraySort'u kullanarak karşılaştırmak muhtemelen daha kolaydır (örneğin, sondan bir önceki kapalı konuma hızla geçmeniz gerekiyorsa).

 
fxsaber :

Çift döküm yaparken kayıp -> int.

Her şey açık, ancak tam puanlarda 2 fiyat arasındaki farkı doğru bir şekilde nasıl hesaplayabilirim?

 
Igor Makanu :

Her şey açık, ancak tam puanlarda 2 fiyat arasındaki farkı doğru bir şekilde nasıl hesaplayabilirim?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

bugün kapanan sipariş için hesaplanan toplam pip için yardıma ihtiyacım var (Mql5)

fxsaber , 2017.10.25 01:00

 #include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006

int PriceToInteger( const double Price, const double point )
{
   return (( int )(Price / point + 0.1 ));
}

int GetTotalPips( const datetime From = 0 )
{
   int Res = 0 ;
  
   for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
       if ( OrderCloseTime () < From)
         break ;
       else if ( OrderType () <= OP_SELL )
      {
         const double point = SymbolInfoDouble ( OrderSymbol (), SYMBOL_POINT );
        
        Res += OrderType () ? PriceToInteger( OrderOpenPrice (), point) - PriceToInteger( OrderClosePrice () , point)
                           : PriceToInteger( OrderClosePrice (), point) - PriceToInteger( OrderOpenPrice (), point);
      }
        
   return (Res);
}

void OnStart ()
{
   datetime Today = TimeCurrent ();
  
  Today -= Today % PeriodSeconds ( PERIOD_D1 );
  
   Alert (GetTotalPips(Today));
}
 
fxsaber :

teşekkür etmek!

özellikle sevdim

 const double point = SymbolInfoDouble ( OrderSymbol (), SYMBOL_POINT );

Servise götüreceğim, genellikle global görünürlükte bir kere hesaplanacak her şeyi yazarım, örneğiniz çok daha iyi okur


....


ve bu doğru mu? sipariş döngüsünde, her zaman SymbolInfoDouble(OrderSymbol(), SYMBOL_POINT ); yeniden hesaplandı, çünkü OrderSymbol () her seferinde farklı mı olacak?

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5

Igor Makanu , 2019.06.04 18:43

teşekkürler, iyi bir örnek çalışacağım, burada MT4 için bir komut dosyası çizdim - karı puan olarak belirliyoruz:

 //+------------------------------------------------------------------+
//|                                        LastOrderProfitInPips.mq4 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   printf ( "Прибыль последнего закрытого ордера %d пунктов" ,LastHistoryProfit());

  }
//+------------------------------------------------------------------+
int LastHistoryProfit( int magic_=- 1 )
  {
   datetime t= 0 ;
   int profit=0;
   for ( int i= 0 ; i<OrdersHistoryTotal(); i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
        {
         if ((OrderMagicNumber()==magic_ || magic_==- 1 ) && (OrderSymbol()== _Symbol ))
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (OrderCloseTime()>t)
                 {
                  t=OrderCloseTime();
                   profit= ( int )( fabs (OrderOpenPrice()-OrderClosePrice())/ _Point );
                   profit= OrderProfit()>= 0.0 ? profit : -profit;
                 }
              }
           }
        }
     }
   return (profit);
  }
//+------------------------------------------------------------------+

10 dakikada sıfırdan mı yazdın? - peki, böyle bir şey, mantık basit ve anlaşılır - sen al ve yaz, MT5'te şimdiye kadar sadece bir boşlukta küresel bir atı tartışıyoruz ... işlemler varsa ve emirler varsa, tartışmaya devam ediyor hesap türleri netleştirme veya hedge .... iyi, sabaha bir şeyler - yazacağız

Ve şunu sorabilirsiniz: Neden açılış fiyatı ile kapanış fiyatı arasındaki farkın mutlak değerini alıp, pozisyonun karı sıfırdan küçükse, değer için bir eksi işareti koyun.
 
Alexey Viktorov :
Ve şunu sorabilirsiniz: Neden açılış fiyatı ile kapanış fiyatı arasındaki farkın mutlak değerini alıp, pozisyonun karı sıfırdan küçükse, değer için bir eksi işareti koyun.

Anında istediğim gibi yazdım - +100 pp veya -100 pp çıktı almak istedim, diyelim ki bu bir zevk meselesi - sipariş türünü belirlemek ve açılış ve kapanışı karşılaştırmak için belirli bir görev ve yazma koşulları yoktu. fiyatlar fazladan bir sürü satır olacak gibi görünüyordu. . .

Not: Burada bir programcı forumu var mı? - böyleler, bir kodu (özellikle başka birinin) 10 kez optimize edebilirler, böylece 5 satır yerine 4) olur)))

Neden: