Acemi bir kullanıcıya yardım edin - Gün ve Saat işlevleri

 

Merhaba,

Burada acemiyim, bu yüzden biraz yardıma ihtiyacım var.

Pazar günleri pazar açıldığında işlem yapan bir EA'm var. EA ile ilgili sorun, hafta boyunca esnaf da alması ve bunu istemiyorum.

Bunun gibi çalışmasını istiyorum:

harici int StartDay="pazar"

harici int Başlangıç Zamanı="23:00"

harici int StopDay="pazartesi"

harici int StopTime="15:00"

day="pazar" ve piyasa açıksa(pazar 23:00 ile pazartesi 15:00 arasında sadece bir işlem açık olabilir, işlemimiz TP veya SL nedeniyle kapalıysa yeni işlem olmaz)

{

Ticarete başla (zaten sahip olduğum bazı kodlar)

}

Bunu MQL'de nasıl yapabilirim?

 

Zamanı kontrol et[0]

Yardımdaki bu işlevler ile Tarih ve Saat işlevleri

 
// SEE IF THIS WORK FOR YOU..... (I'VE NOT TESTED IT....)



int start()
{
  bool sunday_cond = (TimeDayofWeek(TimeCurrent())>=0) && (Hour()>=23);
  bool monday_cond = (TimeDayofWeek(TimeCurrent())<=1) && (Hour()<=15); 
  if(sunday_cond  || monday_cond )
      go_trading();

}
 
abstract_mind :
   bool sunday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) > = 0 ) & & ( Hour ( ) > = 23 ) ;
   bool monday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) < = 1 ) & & ( Hour ( ) < = 15 ) ; 
   if ( sunday_cond   | | monday_cond )

Bunun doğru olduğundan emin değilim. "sunday_cond" haftanın her günü 23:00 ile gece yarısı arasında geçerlidir. Bu nedenle, kod ya sunday_cond ya da monday_cond yaptığından, potansiyel olarak her gün 23:00'ten sonra işlem görecektir. Ayrıca "monday_cond" Pazar günleri saat 15:00'e kadar karşılanmaktadır. Bu pek olası değil, ancak bazı zaman dilimlerinde işlem saatleri içinde de düşebilir. Daha da önemlisi, Hour() <= 15, 3:59'a kadar doğrudur, 3:00pm'ye kadar değil.


Ancak, EagleEye'in yapması gereken şey açısından ilke açıkça sağlamdır: DayOfWeek() veya TimeDayOfWeek() kullanarak saati ve ayrıca haftanın gününü kontrol edin.

 
jjc :

Bunun doğru olduğundan emin değilim. "sunday_cond" haftanın her günü 23:00 ile gece yarısı arasında geçerlidir. Bu nedenle, kod ya sunday_cond ya da monday_cond yaptığından, potansiyel olarak her gün 23:00'ten sonra işlem görecektir. Ayrıca "monday_cond" Pazar günleri saat 15:00'e kadar karşılanmaktadır. Bu pek olası değil, ancak bazı zaman dilimlerinde işlem saatleri içinde de düşebilir. Daha da önemlisi, Hour() <= 15, 3:59'a kadar doğrudur, 3:00pm'ye kadar değil.


Ancak, EagleEye'in yapması gereken şey açısından ilke açıkça sağlamdır: DayOfWeek() veya TimeDayOfWeek() kullanarak saati ve ayrıca haftanın gününü kontrol edin.



Haklısın. Bu çalışmalı:

   bool sunday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 0 ) & & ( Hour ( ) > = 23 ) ; 
   bool monday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 1 ) & & ( Hour ( ) < = 15 ) ;
   if ( sunday_cond   | | monday_cond )
go_trading();
 

Teşekkürler beyler,


Bunu deneyeceğim ve işe yarayıp yaramadığını size bildireceğim.

 

only one trade can be open between sunday 23:00 and monday 15:00

Yukarıdaki kod Pazar 23:00 ile Pazartesi 15:59 (Saat()<=15) arasında işlem yapmalıdır, 15:00 (Saat()<15) değil

Ayrıca, izin verilen süre boyunca yalnızca bir Ticaret açmak için kodunuz olması gerekir.

 
sunday_cond ve monday_cond ne tür olmalıdır? int?
 

Bu kısımla ne demek istediğinizi anladığımdan emin değilim WHRoeder : Pazartesi 15:59 (Saat()<=15), 15:00 değil (Saat()<15)??

Evet haklısın benim de o koda ihtiyacım var Umarım birisi bana bunu sağlayabilir.

 
EagleEye :

Evet haklısın benim de o koda ihtiyacım var Umarım birisi bana bunu sağlayabilir.

Bu biraz olağandışı bir sorundur çünkü mevcut ticaret penceresinde zaten bir ticaret açtıysanız, ticaret şimdi kapalı olsa bile yeni bir ticaret yapmak istemezsiniz. Bu forumdaki tartışmaların çoğu, yalnızca şu anda açık olan bir ticaret olup olmadığını kontrol etmekle ilgilidir (ve bu çok fazla gündeme gelen bir konudur).


Özünde, kapanan işlemleri kontrol etmek için üç seçeneğiniz vardır:


  1. Yeni bir ticaret açarken, mevcut zamanı bir değişkende saklayın. Yeni bir işlem yapmayı düşünürken, son işlemin saklanan zamanının mevcut işlem penceresine denk gelmediğini kontrol edin.
  2. Yukarıdaki gibi, ancak son işlem zamanını MT4'ün global değişkenlerinde saklayın.
  3. MT4 işlem listesini tarayın, mevcut işlem penceresi sırasında açılan kapalı işlemleri arayın.


Bu seçenekler kabaca karmaşıklık sırasına göredir (ve ayrıca ters performans sırasına göredir, yani aralarındaki herhangi bir hız farkının gerçek hayatta sorun oluşturması pek olası olmasa da, 3 en yavaş olanıdır).


Bununla birlikte, seçenekler aynı zamanda dayanıklılık sırasına göredir:


  1. Son işlem zamanı bir değişkende (bellekte) saklanırsa, MT4 yeniden başlatılırsa veya başka bir nedenle EA'nızın yeniden yüklenmesi gerekiyorsa değer kaybolur. Başka bir deyişle, EA yeniden yüklenirse, aynı işlem penceresi sırasında potansiyel olarak birden fazla işlem yapacaktır.
  2. Zaman bir MT4 global değişkeninde depolanırsa, bunun kaydı EA'nın yeniden yüklemelerinde hayatta kalmalıdır. Ancak, ticaretin yeni bir bilgisayara aceleyle taşınması gerekiyorsa, son işlem zamanının kaydı kaybolacaktır (MT4'ün gvariables.dat dosyasının bir yedeği olmadığı sürece).
  3. MT4 ticaret listesini taramak, olağanüstü durum kurtarma açısından uygun şekilde esnek olan tek seçenektir: başka bir bilgisayarda MT4'ün bir kopyasından komisyoncu hesabına giriş yapabilir, EA'yı başlatabilir ve yanlış ekstra almama garantisini sağlayabilirsiniz. ticaret.


 

// Yaklaşım_1

   bool sunday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 0 ) & & ( Hour ( ) > = 23 ) ; 
   bool monday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 1 ) & & ( Hour ( ) < = 15 ) ;
   if ( sunday_cond   | | monday_cond )
if(OrdersTotal()==0)
go_trading();



// Yaklaşım_2

   bool sunday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 0 ) & & ( Hour ( ) > = 23 ) ; 
   bool monday_cond = ( TimeDayofWeek ( TimeCurrent ( ) ) = = 1 ) & & ( Hour ( ) < = 15 ) ;
   if ( sunday_cond   | | monday_cond )
{
if(number_of_longs()==0) // Count the longs from both "trade context" and history for the period in qestion. There is code for counting open longs/shorts in the forum
go_trading_longs();
if(number_of_shorts()==0)
go_trading_shorts();

}
Neden: