Belirli bir saatte mumun açık fiyatına sahip olun.

 

Merhaba millet,

Yeni bir sorum var, sanırım basit.

Örneğin saat 15:00 olduğunda, mumun açılış fiyatını hangi saatin 9:00 olduğunu bilmek istiyorum.

 if (TC >= 15 : 00 )
{
     if (Openprice < iclose(symbol(), period_H1, 1 )
    {
       Action
    }
}
Peki, mumun önceden tanımlanmış zaman saatinin Açık Fiyatını elde etmek için kod nasıl yazılır?
 

Saati bir tarih saat değişkeni olarak hesaplayın ve bar numarasını almak için iBarshift() ile kullanın, bar numarasına sahip olduğunuzda bunu Open[] veya iOpen() ile kullanın

 
RaptorUK :

Zamanı bir tarih saat değişkeni olarak hesaplayın ve çubuk numarasını almak için iBarshift() ile kullanın, çubuk numarasına sahip olduğunuzda bunu Open[] veya iOpen() ile kullanın


evet fena fikir değil :)

Teşekkür ederim kullanacağım!

 

Ve bunu yapmak mümkündür:

   int Bar;
   double OpenPrice;
   
   int B(k);
   {
       switch (HeureSH[k])
      {
         case 0 : Bar= iBarShift( Symbol (), PERIOD_H1 , StrToTime( "23:00" ));
         break ;
            
         case 1 : Bar= iBarShift( Symbol (), PERIOD_H1 , StrToTime( "09:00" ));
         break ;
            
         case 1 : Bar= iBarShift( Symbol (), PERIOD_H1 , StrToTime( "15:00" ));
         break ;
            
         case 3 : Bar= iBarShift( Symbol (), PERIOD_H1 , StrToTime( "19:00" ));
         break ;
      }
   }
   OpenPrice= iOpen( Symbol (), PERIOD_H1 , B);


HeureSH, dört saat ile dizi boyutundadır

Çünkü belirli bir saatse, çubuğun farklı olması gerekir, ancak dört farklı satıra değil, yalnızca bir satıra sahip bir anahtar oluşturun.

Ah doğru mu? kod doğru yazılmış mı?

 
Kane59 :

Ve bunu yapmak mümkündür:


HeureSH, dört saat ile dizi boyutundadır

Çünkü belirli bir saatse, çubuğun farklı olması gerekir, ancak dört farklı satıra değil, yalnızca bir satıra sahip bir anahtar oluşturun.

Ah doğru mu? kod doğru yazılmış mı?

Durum 1'de iki kez olduğu için bir kopyala/yapıştır hatası olduğunu varsayıyorum. . . bu yüzden ikinci durum 1'in durum 2 olması gerektiğini varsayacağım

Bunun çalışması için HeureSH[] dizisinde depolanan değerler 1, 2, 3 veya 4'tür, bu doğru mu? sadece int tipi değerler olabilirler. dizeler veya çiftler yok. . .

iOpen() çağrınızda B'nin Bar olması gerektiğini varsayıyorum? yoksa B(int) mi demek istediniz? bu çağrıda işlevi kullanmak istiyorsanız, işlevin doğru değeri döndürmesini sağlamalısınız.


Anlamlı değişken ve işlev adları kullanırsanız, kendinize ve diğer herkese büyük bir iyilik yapmış olursunuz. . . B, k ve Bar çok açıklayıcı değil.

 

Oh, benden bir hata, kodumu kopyaladım ama ne yazdığımı bilmiyorum....... Öyle çözdüm.

Iopen'ımda "Bar" olan B yazdım çünkü zaman farklı, yani Bar da farklı.


Ah evet string değerleri bazı problemler yaratacak, bence problem bu, bu yüzden değiştirmeye çalışacağım.

 
   int B(k);
   {
       switch (HeureSH[k])
      {
         case 0 : Bar= iBarShift( Symbol (), PERIOD_H1 , StrToTime( "23:00" ));
         break ;
            
         case 1 : Bar= iBarShift( Symbol (), PERIOD_H1 , StrToTime( "09:00" ));
         break ;
            
         case 1 : Bar= iBarShift( Symbol (), PERIOD_H1 , StrToTime( "15:00" ));
         break ;
            
         case 3 : Bar = iBarShift( Symbol (), PERIOD_H1 , StrToTime( "19:00" ));
         break ;
      }
   }
   OpenPrice= iOpen( Symbol (), PERIOD_H1 , B );
Bu işe yaramayacak. 1) iBarShift, Bar'a atanır, ancak iOpen B kullanır. 2) StrToTime("23:00"), her zaman gelecekte (veya mevcut H1 çubuğu) olacak olan bugün 23:00 tarihini döndürür.
 #define HR2400       86400            // 24 * 3600
datetime TimeOfDay( datetime when){   return ( when % HR2400          );       }
datetime DateOfDay( datetime when){   return ( when - TimeOfDay(when) );       }
   int B(k);
   {
     #define HR0900 23400      // 9*3600
     #define HR1500 54000
     #define HR1900 68400
     #define HR2300 59800
     int times[]={ HR2300, HR0900, HR1500, HR1900 };
     datetime     now = TimeCurrent (),
                Bod = DateOfDay(now),
                want= Bod + times[HeureSH[k]];
     if (want > now){     // Yesterdays?
         datetime prevTradingDate = iTime( Symbol (), PERIOD_D1 , 1 );
        want = prevTradingDate + times[HeureSH[k]];
    }
   int iBar= iBarShift( Symbol (), PERIOD_H1 , want);
   OpenPrice= iOpen( Symbol (), PERIOD_H1 , iBar);
   }
 

Merhaba WHRoeder,

Kodlamanızın benimkinden daha verimli olduğunu ve zaman değerinin dün mü yoksa bugün mü olduğunu anladığınızı düşünüyorum. Katılıyorum: 23:00, kodumla, çok geç olduğunda her zaman gelecek veya günceldir ...


Çok teşekkür ederim ! Tam aradığım.

 

Merhaba WHRoader,

bilgi için:

ibarshift'in Bar'a, iOpen'ın B'ye atandığını söylediniz. Tamam

Ama fonksiyon B(k), bu fonksiyon nedir? neden burada?

Kodumda, dizi boyutu zamanları (HeuresSH) ile farklı StrToTime arasında bir ilişki istediğim için yerleştirdim. yalan oldu yani.


Yine kullandın, neden?

Saygılarımızla :)

 

Evet, söylemeyi unuttum, HeureSH[] string değerlerinde dört farklı saatten oluşan bir arraySize.

 

Tamam, kodunuzu EA'ma ekledim ve mükemmel çalışıyor! EA'nın istediğim gibi çalıştığını gördüğümde gülümsedim !!!

Çok teşekkürler çok çok......

Geri testte çünkü piyasa kapalı...

Ama bir problem var:

Ea Doğru pozisyonlar açın, ancak alış asla kapanmaz ve açıldığında hemen kapanır.

Benim stratejim:

Aynı zamanda, parametreler doğruysa EA Sat VEYA Satın Al'ı açmalıdır. SL veya TP yok.

Aynı zamanda, sonraki işlevler doğruysa tüm ticareti döngüye sokmalı ve kapatmalıdır:

 if ( OrdersTotal ()> 0 )
            { 
               for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
               {
                   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
                  {
                     if (OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime( Symbol (), PERIOD_H1 , 1 ))
                     {
                         if (OrderType() == OP_BUY)
                        {
                           OrderClose(OrderTicket(),LotsSH, bid, 300 , CLR_NONE );
                        }
                         if (OrderType() == OP_SELL)
                        {
                           OrderClose(OrderTicket(),LotsSH, ask, 300 , CLR_NONE );
Bir kar filtresi eklemem gerekiyor, ancak bunun üzerinde çalışacağım. Bu olmadan Al'ı kapatması gerekir, ancak asla kapanmaz ve satışın çalışmasına izin vermesi gerekir, ancak satışlar hemen kapatılır. Son kodda bir yanlışlık var mı?
Neden: