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

 
Alexey Viktorov # :

Valery, çizgiye dikkat et

kodumda… Uzun süredir beşli işlevler kullanıyorum, ancak işte benzer bir işlev

ssstakaya 0 verdi.

Öyleyse hamamböceklerinin nerede olduğunu bir düşünün... Ve MT4'ü desteklemeyi reddetmeleri nedeniyle, bunun asla düzeltilmeyeceğini varsayabiliriz...

Diğer her şeyin kontrol edilmesi gerekiyor. O kadar uzun zamandır bununla uğraşmadım ki hatırlamak bile istemiyorum.

hmm ... Zaman öykünüyor) Kafamız karıştı)

 int sd;
/*******************Expert initialization function*******************/
int OnInit ()
 {
  sd = ( int )MarketInfo( "EURJPY" , MODE_DIGITS);
   return ( INIT_SUCCEEDED );
 } /******************************************************************/

/************************Expert tick function************************/
void OnTick ()
 {
   datetime lt = iTime ( _Symbol , PERIOD_M15 , 0 );
   static datetime ct = 0 ;
   if (ct != lt)
  {
   ct = lt;
   Print ( DoubleToString ( iMA ( "EURJPY" , PERIOD_M15 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 ), sd),
     " Time[0] " ,TimeToStr( Time[ 0 ]), " iTime(EURJPY,0,0) " ,TimeToStr( iTime ( "EURJPY" , 0 , 0 )));
  }

Sonuç

 2021.09 . 21 15 : 30 : 48.696 2021.08 . 13 20 : 15 : 00   testMulti EURUSD,M15: 129.482 Time[ 0 ] 2021.08 . 13 20 : 15 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 20 : 15
2021.09 . 21 15 : 30 : 48.632 2021.08 . 13 20 : 00 : 00   testMulti EURUSD,M15: 129.495 Time[ 0 ] 2021.08 . 13 20 : 00 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 20 : 00
2021.09 . 21 15 : 30 : 48.568 2021.08 . 13 19 : 45 : 00   testMulti EURUSD,M15: 129.512 Time[ 0 ] 2021.08 . 13 19 : 45 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 19 : 45
2021.09 . 21 15 : 30 : 48.504 2021.08 . 13 19 : 30 : 00   testMulti EURUSD,M15: 129.527 Time[ 0 ] 2021.08 . 13 19 : 30 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 19 : 30
2021.09 . 21 15 : 30 : 48.440 2021.08 . 13 19 : 15 : 00   testMulti EURUSD,M15: 129.539 Time[ 0 ] 2021.08 . 13 19 : 15 iTime (EURJPY, 0 , 0 ) 2021.08 . 13 19 : 15

PS Diğer sembollerden çubukların verilerini almaya çalışır))) Ancak geçmişin özel olarak yüklenmesi gerekir, dizinin ötesine geçmek, boş bir cihazda veya uzaktaki bir çubuktan veri istemek için tek yoldur.

PS PS

Gerçekten işe yarıyor!!! Hepsinin alıntı arşivlerini yüklemek zorunda kaldım !!! gerekli döviz çiftleri ve 21 Haziran'dan beri bir dakikadır çalışıyor, daha eski olanlar için ve daha sonra başlıyor)

 
giros # :

MQL5'i (Rusça) nerede öğrenebileceğimi söyleyebilir misiniz?

burada . Başka bir şey okumadım.
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 


 double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   
   for ( int i= OrdersTotal ()- 2 ; i>= 0 ; i--)
   {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
             if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}

Merhaba. Sondan bir önceki emrin açılış fiyatını bulmaya çalışıyorum ama Satış emri yoksa bu iyi çalışıyor. Söyle bana, sorun ne? Onları da saydığını anlıyorum. MQL4

 
makssub # :


Merhaba. Sondan bir önceki emrin açılış fiyatını bulmaya çalışıyorum ama Satış emri yoksa bu iyi çalışıyor. Söyle bana, sorun ne? Onları da saydığını anlıyorum. MQL4

 double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   
   for ( int i= OrdersTotal ()- 2 ; i>= 0 ; i--)
   {
       if ( OrderSelect ( i , SELECT_BY_POS, MODE_TRADES)) // внимательней к копипасту) цикл по i а перебираешь cnt))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
             if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}
 
Valeriy Yastremskiy # :


 double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   
   for ( int cnt= OrdersTotal ()- 2 ; cnt>= 0 ; cnt--)
   {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
             if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}

Teşekkür ederim. Tekrar kontrol ettim, yine de Satmayı düşünüyorum (

 
makssub # :


Teşekkür ederim. Tekrar kontrol ettim, yine de Satmayı düşünüyorum (

Muhtemelen toplam sipariş sayısından çıkardığın için

 OrdersTotal ()- 2 

ve sen sadece arıyorsun

OP_BUY
 
makssub # :


Teşekkür ederim. Tekrar kontrol ettim, yine de Satmayı düşünüyorum (

Numarayı, bileti ve sipariş türünü ikinci if'den önce ve ikinci if'nin içinde yazdırın.

 double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   
   for ( int cnt= OrdersTotal ()- 2 ; cnt>= 0 ; cnt--)
   {
     if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
Print (" Print 1 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
Print (" Print 2 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
            oldticket = OrderTicket();
             if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}
 
 private:
   CPoint             *startPoint;
   CPoint             *endPoint;

İki kurucu var. İkincisinden birinciyi çağırıp yukarıdaki değişkenlere değerleri ayarladığımda ondan ikinciye döndüğümde bu değişkenler NULL oluyor.
Ayrıca, kodu ilk kurucudan ikinciye kopyalarsanız ve arama yapmazsanız, her şey çalışır. Sorun nedir?

CWave::CWave( string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime)
  {
   prevWave = NULL ;
   nextWave = NULL ;
   name = namePref+ "_" + TimeToString (startTime, TIME_DATE | TIME_MINUTES );
   startPoint = new CPoint(startPrice, startTime);
   endPoint = new CPoint(endPrice, endTime);
   dir = startPrice < endPrice ? true : false ;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CWave::CWave( string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime,
             CWave *prevWave)
  {
   CWave(namePref, startPrice, startTime, endPrice, endTime);
   this .prevWave = prevWave;
   prevWave.nextWave = & this ;
  }
 
Roman Sharanov NULL oluyor.
Ayrıca, kodu ilk kurucudan ikinciye kopyalarsanız ve arama yapmazsanız, her şey çalışır. Sorun nedir?


Sorun MQL'de.

Benzer durumlarda, farklı kuruculardan çektiğim ayrı bir yöntemle başlatmayı alıyorum.

---

Yine de ebeveynin yapıcısının çağrısıyla ilgili bir sorun var.

 
Valeriy Yastremskiy # :

Numarayı, bileti ve sipariş türünü ikinci if'den önce ve ikinci if'nin içinde yazdırın.

Teşekkür ederim. Bugün kontrol edeceğim.