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

 
dimkh87 :
Tünaydın. Söyleyin bana, MT4 ve MT5'te aynı enstrümanın farklı zaman dilimlerine sahip çizelgelerini ve bu zaman dilimleri için göstergeleri üst üste bindirmek mümkün mü? Örneğin, bir pencerede gün, 4 saat ve saat zaman dilimleriyle birlikte EUR/USD çiftinin 3 grafiğini ve ayrıca bu verilerden hareketli zaman dilimlerini bindirmek istiyorum. Mümkün mü? Herhangi bir yardım için mutlu olacağım.

Peki ya zaman çizelgesi? Veya birkaç çubuk genişliğinde daha küçük yarıları olan çubuklar mı çiziyorsunuz?

 
Вадим Мотеюнас :

Beyler, söyleyin bana, Kim'den son pozisyonun açılış bar numarasını veya -1'i döndüren bir fonksiyon aldım.

bu işlevi çağırdı ve koşulu yazdı

sonuç olarak bir emir açılıyor ama bara bir stop ile vurulursa ve poz girmek için yukarıdaki koşul yine de kaydedilirse anlaşma bu barda açılır, Print üzerinden fonksiyonun -1 döndürdüğüne baktım , ilk başta hiç emir olmadığı için düşündüm, ama sonra emirler ortaya çıktı ve hepsi aynı, durduktan sonra aynı barda, anlaşma açılıyor, yardım et, neyi yanlış yaptım?

 static datetime time_open = 0 ;
if ( Open [ 2 ]> Close [ 2 ] && Open [ 1 ]> Close [ 1 ] && Close [ 1 ]< Low [ 2 ])
     {
       Comment ( "цена входа = " , DoubleToStr ( Low [ 2 ], Digits ));
       if ( Open [ 0 ] != time_open )
         if (NumberOfBarOpenLastPos( "" , 0 ,- 1 ,- 1 )!= 0 ) //вызвал здесь
            ticket= OrderSend ( Symbol (), OP_SELLLIMIT , 0.1 , Low [ 2 ], 2 , 0 , 0 ,magic, 0 );

       if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
        {
         time_open = Open [ 0 ];
         TP= NormalizeDouble ( OrderOpenPrice ()-tp* Point , Digits );
         SL= NormalizeDouble ( OrderOpenPrice ()+sl* Point , Digits );
         modify= OrderModify (ticket, OrderOpenPrice (),SL,TP, 0 );
       }
      }
 
Konstantin Nikitin :
if ( iOpen [ 0 ] != time_open ) 'iOpen' - bildirilmemiş tanımlayıcıya işaret eden bir hata yazıyor

 
Вадим Мотеюнас :
if ( iOpen [ 0 ] != time_open ) 'iOpen' - bildirilmemiş tanımlayıcıya işaret eden bir hata yazıyor

Kim'in tüm fonksiyonları çalışıyor! Doğru uygulamamışsınız.

 
Vitaly Muzichenko :

Kim'in tüm fonksiyonları çalışıyor! Doğru uygulamamışsınız.

kimse tartışmıyor, nasıl yanlış kullandığımı anlamak isterim

 
Вадим Мотеюнас :

kimse tartışmıyor, nasıl yanlış kullandığımı anlamak isterim

Her şeyi yazdırın - bu, hataları ve eksiklikleri belirlemek için doğru karardır:

 Print ( NumberOfBarOpenLastPos( "" , 0 ,- 1 ,- 1 ) );
 
Vitaly Muzichenko :

Her şeyi yazdırın - bu, hataları ve eksiklikleri belirlemek için doğru karardır:

peki, -1'in döndüğünü söyledim, yani. fonksiyon açık siparişin olduğu son çubuğu bulamıyor, doğru parametreleri geçemediğim için günah işliyorum

 
int NumberOfBarOpenLastPos(string sym="",int tf=0,int op=-1,int mn=-1)
  {
   datetime oot;
   int      i,k=OrdersTotal();

   if(sym=="") sym=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==sym)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(oot<OrderOpenTime()) oot=OrderOpenTime();//что означает это строка?что текущее время раньше цены открытия ордера, это как?
                    }
                 }
              }
           }
        }
     }
 
Вадим Мотеюнас :

Çizgi, tüm pozisyonları gözden geçirdiğimiz ve zamanında en yenisini seçtiğimiz / hatırladığımız anlamına gelir, onunla çalışırız. Bu, konumların sıralı değil, rastgele olması durumunda geçerlidir.

 

Burada fonksiyonda, zamanın en yenisinin, yani sonuncusunun aranması ve seçilmesi var.

 int NumberOfBarOpenLastPos( string sym= "" , int tf= 0 , int op=- 1 , int mn=- 1 )
  {
   datetime oot=0; // Инициализируем нулём
   int       i,k= OrdersTotal ();

   if (sym== "" ) sym= Symbol ();
   for (i= 0 ; i<k; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()==sym)
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )
              {
               if (op< 0 || OrderType ()==op)
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn)
                    {
                     if (oot< OrderOpenTime ()) oot= OrderOpenTime (); // Ищем последнюю позицию
                    }
                 }
              }
           }
        }
     }
   return ( iBarShift (sym, tf, oot, True ));
  }

Ardından, bir tane seçtik ve onu iBarShift işlevine yerleştirdik (sym, tf, oot , true );

İşlev , çubuk numarasını zamana göre döndürür. Her şey.

Maalesef kontrol edemiyorum, ancak kullandığımda, burada I. Kim'den yayınlanan tüm işlevler gibi mükemmel çalıştı.