Zaman ile ilgili sorunlar() - sayfa 2

 

Bu da çalışmıyor...

Day() == 1 || Day() == 2 || Day() == 3 || Day() == 4 

RaptorUK, TimeDayOfWeek () 'e atıfta bulunarak size zaten cevap verdi. Day() , TimeDayOfWeek() ve DayOfWeek() arasındaki fark (bunları dikkatlice okuyun)

int Day() = Ayın geçerli gününü, yani bilinen son sunucu saatinin ayın gününü döndürür.

int DayOfWeek() = Bilinen son sunucu saatinin haftanın geçerli sıfır tabanlı gününü (0-Sunday,1,2,3,4,5,6) döndürür.

int TimeDayOfWeek(datetime Time) = Belirtilen tarih için sıfır tabanlı haftanın gününü (0 Pazar,1,2,3,4,5,6 anlamına gelir) döndürür.


Yani Day() = 1 Pazartesi'den Pazar'a kadar herhangi bir gün olabilir.

BTW, Bugün 31 Mayıs, Day() işlevi 31 (Tarih) döndürürken DayOfWeek() 4 (Perşembe) döndürür.

Yarın 1 Haziran, Day() işlevi 1(Date) döndürür ve DayOfWeek() işlevi 5 (Cuma) döndürür.

Bunu komut dosyası olarak kullanın:

 Alert ( "TimeDay of local time " , TimeDayOfWeek ( TimeLocal ()), " and TimeDay of server time " , TimeDayOfWeek ( TimeCurrent ()));
Alert ( "Day () is " ,Day(), " and DayOfWeek is " , DayOfWeek ());
 
toCFx :

ÇOK KOMİK!

MT4'teki "Zaman" tabanlı işlevlerin çoğunun ciddi şekilde kusurlu olduğunu düşünmeye başlıyorum.

Demek istediğim, tüm konum kontrol mantığımı şu kadar sıradan bir şeye sıfırlarsam: TimeHour(TimeCurrent()) == 23 && TimeHour(TimeCurrent()) == 59 ve hiçbir şekilde tek başına bir işlemi kapatamazsam (EA sadece kodu görmezden gelir!), o zaman MT4'ün bu tür işlevlerle ilgili olarak düzeltilmesi gereken bazı sorunları olduğunu söyleyebilirim.

LOL, MQL4 Zaman tabanlı işlevlerin bu ciddi kusurları varsa, muhtemelen başka birinin şimdiye kadar fark edeceğini düşünmüyor musunuz?

İşlevlerin kusurlu olduğunu iddia etmeden önce kusurlu kodunuzu düzeltmeyi deneyebilirsiniz.

kapanış kriterlerinizde değiştirmeyi deneyin:

TimeHour(TimeCurrent()) == 23 && TimeHour(TimeCurrent()) == 59

ile:

if (TimeHour(TimeCurrent()) == 23 && Time Minute (TimeCurrent()) == 59)

toCFx :

Kod daha basit olamaz! EA'ya lanet ticareti 00:00 ile 00:05 arasında açma talimatı veriyorum. Bu kodlaması zor bir şey değil. Altı yaşındaki bir çocuk bunu kodlayabilir. İşte yine burada: [b]TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05[/b].

Ayrıca bunu düzeltmeyi de deneyebilirsin lol

değişiklik:

TimeHour(TimeCurrent()) == 00 && TimeHour(TimeCurrent()) <= 05

ile:

if (TimeHour(TimeCurrent()) == 0 && Time Minute (TimeCurrent()) <= 5)

 

Sevgili CFx,

Kırdıysam özür dilerim. Kötü bir günüm var. Sanırım yanıtlarımı tamamen doğru okumadığı için bilgisayarını yeniden yüklemesi gerekebilecek başka bir forum üyemiz var .

1. İşlemleri Pazartesi ve Perşembe günleri arasında 23:57'de ve Cuma 21:57'de kapatmak istiyorsanız

   if (
       (DayOfWeek () >= 1 && DayOfWeek() <= 4 && TimeHour ( TimeCurrent ()) >= 23 && TimeMinute ( TimeCurrent ()) >= 57 )
       || (DayOfWeek() == 5                    && TimeHour ( TimeCurrent ()) >= 21 && TimeMinute ( TimeCurrent ()) >= 57 )
      )
      {
       // close it
      }

Aynı kodu Açık Ticaret için de değiştirebilirsiniz.

Test etme hakkında bunu okuyun https://www.mql5.com/en/articles/1512


2. Bu önemli: "araçlardan" bahsettiniz . "Araçlar" ile ne demek istediğinizi ayrıntılı bir şekilde açıklayacak kadar nazikseniz - burada adını belirtmek sorun değil. Sadece MetaEditor kullanıyoruz. Burada bazı çevrimiçi araçları kullanan ve hataları düzeltmemizi isteyen çok sayıda forumcu var. Bize bunun ne olduğunu söylemelisiniz, çünkü kodlarınız hatalarla dolu olabilir - örneğin mantığınız doğru ama yanlış türde mql4 işlevleri kullanıyorsunuz.

... who uses a tool for helping me build EAs. That tool allows the use of some MQL structure, but it does not execute on explicit MQL functions. It simply takes MQL code, evaluates whether the MQL based condition is true/false, and then executes a custom function such as OpenBuy, OpenSell, CloseBuy, CloseSell, DeletePendingBuy, DeletePendingSell, etc. But, it does not run MQL code explicitly. For example, you can(not) use the Print or Comment function to get something to appear on the chart window of MT4 (just one example).


3. Bana öyle geliyor ki uzun sayfalar yazmayı çok seviyorsun, bu konuda yapabileceğim bir şey yok, lütfen şunu aklında tut :

Bu benim ilk yazım. İlk olarak, lütfen bir MQL geliştiricisi olmadığımı unutmayın.

bu yüzden biraz utanmayacaksın, özellikle dedikten sonra...

MQL geliştiricisi değilim, ancak mantıksal yapılar geliştirmede gerçekten iyiyim ve bir sistemik sorunu sezdiğimde algılayabilirim .

Uzun makalelerinizi okumak da dahil olmak üzere her zaman yardım etmek için buradayız.

İşte - çok uzun - ilk yazınız.

Merhaba MQL4 Topluluğu!

Bu benim ilk yazım. İlk olarak, lütfen ben bir MQL geliştiricisi değilim. EA'ları oluşturmama yardımcı olmak için bir araç kullanan bir Tüccarım. Bu araç, bazı MQL yapılarının kullanımına izin verir, ancak açık MQL işlevleri üzerinde çalışmaz. Yalnızca MQL kodunu alır, MQL tabanlı koşulun doğru/yanlış olup olmadığını değerlendirir ve ardından OpenBuy, OpenSell, CloseBuy, CloseSell, DeletePendingBuy, DeletePendingSell, vb. gibi özel bir işlevi yürütür. Ancak, MQL kodunu açıkça çalıştırmaz. Örneğin, MT4'ün grafik penceresinde bir şeyin görünmesini sağlamak için Yazdır veya Yorum işlevini kullanabilirsiniz (sadece bir örnek).

Dolayısıyla, MQL hakkında biraz bilgim var, bu da EA'larımı oluşturmak için kullandığım EA geliştirme aracını kullanmama yetecek kadar. Şimdiye kadar, aracı kullanarak 10 EA oluşturdum ve 7'sini, Excel'de ticari sistemler oluştururken elde ettiğim başarılı prototip oranımdan yaklaşık %30 daha iyi olan, kârlı olmaması nedeniyle terk ettim. Genelde, 10 fikirden 7-8'inin beklendiği kadar karlı olmayacağını ve optimizasyon sürecine başlamak için 2-3 tasarımın yeterince karlı olmasını bekliyorum. Tamam, benim ve nasıl yuvarlandığım hakkında bu kadar yeter.

İşte benim sorunum ve umarım yardım için doğru yere gelmişimdir!

İşlemleri kapatmak için [b] bu kodu çalıştırıyorum:[/b]

Gün() == 1 || Gün() == 2 || Gün() == 3 || Day() == 4 && TimeHour(TimeCurrent()) >=23 && TimeMinute(TimeCurrent()) >=57 || Day() == 5 && TimeHour(TimeCurrent()) >=21 && TimeMinute(TimeCurrent()) >=57

Not: Sorun, tüm işlemlerin Pazartesi'den Perşembe'ye 23:57'ye kadar açık kalmasıdır. Ayrıca, tüm işlemler Cuma günü 21:57'ye kadar açık kalır.


Ayrıca bu kodu, işlemleri açmak için bir MQL bloğu [b] üzerinden çalıştırıyorum:[/b]

TimeHour(TimeCurrent()) == 00 && TimeMinute(TimeCurrent()) <= 05

Not: 00:00 ile 00:05 arasında açılan tek işlem, Test Başlatma düğmesine tıklandığında geriye dönük testin ilk işlemidir. Bu ticaret tam olarak 00:00'da açılıyor. Ancak, diğer işlemlerin hiçbiri haftanın ilerleyen saatlerinde 00:00 ile 00:05 arasında açılmaz.

Özetle:

- 00:00'da Test Başlatma düğmesine tıkladıktan sonra bir işlem açılır.
- Hiçbir işlem daha sonra 23:57 (M-Per) veya 21:57 (Cum) saatlerinde kapatılmaz.
- Daha sonra 00:00 ile 00:05 arasında hiçbir işlem açılmaz.

Yukarıda gösterilen tüm zamanlar, bol miktarda kullanılabilir onay akışına sahiptir. Dolayısıyla, Tester tarafından kullanılan verilerde herhangi bir boşluk yoktu.

Herhangi bir yardım takdir edilecektir. Bu işlemler neden kodlanmış zamanda kapanmıyor? Pazartesiden Cumaya kadar 00:00 ile 00:05 arasında her zaman bir işlem sinyali varken neden hiçbir işlem gerçekleştirilmiyor?

Teşekkür ederim!
cfx

 
   if( DayOfWeek()<1 || DayOfWeek()>5 || TimeMinute(TimeCurrent()) < 57 )
      return(0);
   else if( TimeHour(TimeCurrent()) >= 23  || ( DayOfWeek() == 5 && TimeHour(TimeCurrent()) >= 21) ){
     //Close
   }
 
CFx :

Böyle bir amaç için hiçbir Print deyimi kullanmadım.

Neden ? kodunuzu MetaEditor'da açın, size neler olduğunu anlatmak için bazı Yazdırma işlevleri ekleyin. . .

MT4'ün hata ayıklayıcısı yoktur, bu nedenle elimizdeki tek araçlardan biri Print'tir. . . diğeri Yorum'dur. . ve bu sadece bununla ilgili.

 
RaptorUK :

Neden ? kodunuzu MetaEditor'da açın, size neler olduğunu anlatmak için bazı Yazdırma işlevleri ekleyin. . .

MT4'ün hata ayıklayıcısı yoktur, bu nedenle elimizdeki tek araçlardan biri Print'tir. . . diğeri Yorum'dur. . ve bu sadece bununla ilgili.


Alert()'i de bu amaç için oldukça fazla kullanıyorum .
 

Aletler. Bize araçlardan bahsedin, utanmayın, geçen gün RaptorUK, dabbler ve SDC'nin yorumlarından öğrendim. Yani, lütfen bize söyle.

:D

 
SDC :

Alert() 'i de bu amaç için oldukça fazla kullanıyorum.
Yapmıyorum . . . bu yüzden unuttum. . . düzeltme için teşekkürler :-)
 
onewithzachy :

ÇOK KOMİK. Gerçek olmayan sensin. Bu kodunuz...

... asla doğruya dönmez.

"Kendi" mantıksal yapınızı daha da geliştirmesi gereken kişi sizsiniz.

Ve bunu inşa et...


Belki de OP'yi okumayı denemelisin. Size açıkça benim bir MQL geliştiricisi olmadığımı söylüyor. Ayrıca, mantıksal olarak bir programlama dili oluşturabilmek ile tutarlı bir şekilde karlı bir ticaret sistemi oluşturabilmek arasında çok büyük (büyük) bir ayrım vardır. Ne yazık ki, bu işte, herhangi bir piyasa koşulunda gerçekten çalışan akıllı bir ticaret sistemini araştırmak, tasarlamak, mimarlamak, inşa etmek, mühendislik yapmak, entegre etmek ve uygulamak için ne gerektiğine dair tek bir ipucuna sahip olmayan birçok çevrimiçi programcı bulabilirsiniz. (boğa, ayı ve geçiş). Bu yüzden, nereden geldiğimi anlayamamanızı anlıyorum. Bu akıllı ticaret sistemini kurdum ve bunu Excel ile yaptım (her şeyden önce).

Son 7 yılda yarı zamanlı olarak ortalamadan çok daha iyi sonuçlar üretirken, halen tasarlanmakta, inşa edilmekte ve optimize edilmekteyken - tam olarak %100 özel gösterge çerçevesinden gelen girdilerle tasarlanmış entegre, karar destek ticaret sistemi. Sistemimde 50+ yıllık standart gösterge yok, çünkü sistem genelinde kullanımda olan her gösterge, yıllar süren araştırma ve testlerle sıfırdan oluşturduğum yeni bir tasarım ve gösterge konseptinden geliyor. Bana kalan tek şey bu konuda bir kitap yazmak.

Bu nedenle, çalışan ticaret sistemleri tasarlama açısından, muhtemelen bir süredir bu panoda benim türümdeki benzerleri görmemişsinizdir - eğer varsa. Yeni bir gösterge tasarımı sınıfı yaratan kimi tanıyorsunuz? Mevcut bir gösterge tasarımını almaktan, onu değiştirmekten ve ona yeni bir isim vermekten bahsetmiyorum - buna mevcut gösterge neslini ilerletmek denir. Kamuoyunda geniş çapta tartışılmayan bir piyasa teorisine dayanan yepyeni bir gösterge konseptinden mi bahsediyorum? Bunlara [b]Delta Diferansiyel Sınıf Göstergeleri[/b] denir ve daha önce gördüğünüz hiçbir şeyden geleneksel piyasa teorilerine dayanmazlar, sizi temin ederim.

MQL'ye olan ilgim, geldikleri prototip sistem SADECE Günlük, Haftalık, Aylık ve Yıllık verileri tek bir (1) üretmek için kullandığından, D2 sınıfı göstergelerin daha düşük zaman dilimlerinde değere sahip olup olmadığını keşfetmektir. Son 3.27 yılda belirli bir hedef için %91 ila %99 arasında doğru olan 24 saatte bir alım satım sinyali. Bu, 24 saatte 17 ila 67 pip (çekirdek medyan) hedef aralığında, yüzde 91-99 hedef doğruluğu arasında yaklaşık 850'den fazla ticaret sinyali demektir.

Mevcut prototip otomatik DEĞİLDİR ve MQL'nin işlemesi için çok karmaşıktır. OOP, bunun için en uygun ortam olurdu, ancak bana sağlanan diğer şeylerle, C veya C++ öğrenecek kadar uzun süre oturamayacak kadar meşguldüm.

Bu test, bir avuç gösterge tasarımımın Günlük çubuk zaman çerçevesinin çok altında çalışıp çalışamayacağını öğrenmek için bir POC'dir. Tasarımlarımı kullanarak daha düşük zaman dilimlerini otomatikleştirmek için teknik gerekçe bulabilirsem, OOP'yi öğrenmek ve prototipi bağımsız bir Windows Ticaret uygulamasına dönüştürmek için harcamam gereken süreyi haklı çıkarabilirim (hiçbir koşulda satılık değil) ).

Tüccarlar ticaret yapar. Programcılar, program. Henüz bir programcı DEĞİLİM .............

 
onewithzachy :

Bu da çalışmıyor...

RaptorUK, TimeDayOfWeek () 'e atıfta bulunarak size zaten cevap verdi. Day() , TimeDayOfWeek() ve DayOfWeek() arasındaki fark (bunları dikkatlice okuyun)

int Day() = Ayın geçerli gününü, yani bilinen son sunucu saatinin ayın gününü döndürür.

int DayOfWeek() = Bilinen son sunucu saatinin haftanın geçerli sıfır tabanlı gününü (0-Sunday,1,2,3,4,5,6) döndürür.

int TimeDayOfWeek(datetime Time) = Belirtilen tarih için sıfır tabanlı haftanın gününü (0 Pazar,1,2,3,4,5,6 anlamına gelir) döndürür.


Yani Day() = 1 Pazartesi'den Pazar'a kadar herhangi bir gün olabilir.

BTW, Bugün 31 Mayıs, Day() işlevi 31 (Tarih) döndürürken DayOfWeek() 4 (Perşembe) döndürür.

Yarın 1 Haziran, Day() işlevi 1(Date) döndürür ve DayOfWeek() işlevi 5 (Cuma) döndürür.

Bunu komut dosyası olarak kullanın:


Gönderilerimden birinde gösterildiği gibi DayOfWeek()'i kullandım ve yine de düzgün çalışmadı.

Neden: