MT4 geliştiricilerinden ve programcılarından yardıma ihtiyacınız var - sayfa 3

 
Döngüsel bir uzman kötü davranışlardır.
 
Integer :

2. Yeni bir özelliğe giden yolun yarısı. Daha önce, döngülü bir Expert Advisor'ın özellikler penceresi açılmıyordu. Temper şimdi açılıyor, parametreleri değiştirmeye bir tepki olsaydı şimdi iyi olurdu. Veya kullanıcının kafasını karıştırmamak için özellikler penceresinin açılmasına izin vermeyin.

Bu kadar! Bunu söylemeye çalışıyorum ama kimse duymuyor.

"Servis masası", bence, duruma hiç girmeden ve anlamadan reddedildi. İşte istek mesajından bir alıntı:

Programcıya neyi yapıp neyi yapamayacağını neden söylemeli? İletim hatasız geçti. Yürütme hatasız gider. Kullanıcı giriş parametreleri sekmesinde "A=5" görür ve sistem danışmana "A=1" verir. start() veya while() döngüsü kullanmak zevk meselesidir. Döngü, iddia ettiğiniz gibi hiçbir şekilde sonsuz değildir. EA metnine dikkatlice bakarsanız, while(true) değil while(!IsStopped()&&IsConnected()&&IsExpertEnabled()) vardır . Önceki MT4 sürümlerinde, kullanıcı Sleep() işlevinin yürütülmesi sırasında giriş parametrelerinin değerlerini değiştiremiyordu. Yeni mecliste artık böyle bir engel yok. Bu durumda, ya bu durumda giriş parametrelerini değiştirme yasağını iade edin ya da DEĞİŞİMLERİNİN SADECE " GİRİŞLER " SEKMESİ ÜZERİNDE DEĞİL, AYRICA UZMANDA GERÇEKTEN EMİN OLUN. Her şey.


tamsayı :

1. Kurulum penceresinde MetaTrader4 terminalini kurarken, başka bir foruma değil, foruma yani bu foruma bir davetiye vardır.

Özür dilerim. Ancak MT4 ve MT5 arasındaki çizginin giderek bulanıklaştığını fark ettim. Ve "servis masasına" (umarım ilk ve son kez) "www.mql5.com"daki profilimden döndüm. Orada, terminalin versiyonunu seçme olasılığının açıkça görülebildiği bir form doldurulur - "MT4" ü seçtim.

İşte kapatılmış bir uygulamadan bir alıntı daha (Aceleyle kapattıktan sonra başvuruları okurlar mı bilmiyorum?) (komik tabii ama aklıma sadece pire kapma deyimi geliyor).

O halde kullanıcı neden yeni değerlerini açıkça görüyor? EA bütünüyle işlev görebilirken, bu yeni değerler sahtedir ve EA tarafından kullanılamaz. RefreshRates() işlevi, EA'nın HERHANGİ BİR DÖNGÜDE güncel teklifler almasına olanak tanır. Neden güncellenmiş giriş parametresi değerlerini almak için benzer bir işlev sağlamıyorsunuz veya bu yeteneği mevcut RefreshRates() işlevine eklemiyorsunuz?

"Otomatik Ticaret" düğmesine iki kez basmak (Uzman Danışmanları devre dışı bırakın ve etkinleştirin) döngüyü gerçekten bozar, bundan sonra yeni değerler kullanılabilir hale gelir, ancak yalnızca GRAFİK SEMBOLÜNDE bir onay işareti (yeni fiyat teklifi) sonra. Ne zaman geleceği bilinmez ve danışmanın DİĞER SEMBOLLERİ işlemesi yasak değildir ve kullanıcının bu zaman kaybına ihtiyacı yoktur. Yani, "geleceğe dönüş" gibi bir şey ortaya çıkıyor. Yeni MT4 yayınlandı. Daha modern, daha hızlı. Bakın, DİĞER SEMBOLLER için birçok alıntı tüm hızıyla devam ederken, BİR SEMBOL'den bir alıntı beklentisiyle ekranda ne kadar yavaş yavaşladığını söylüyorlar. Yani, şimdi müşterilerime şunu söylüyorum: parametreleri değiştirin, onları kapatmak ve açmak için "Danışmanlar" düğmesine çift tıklayın ve deniz kenarında havanın gelmesini bekleyin - bir gün "işleyecek".

Daha önce hiç yardım istemedim ve umarım gelecekte de istemem. Er ya da geç, yine de bu "kancayı" atlatmak için bir fırsat bulacağım. Bu, MT4 var olduğu sürece her zaman böyle olmuştur ve tabii ki şimdi sessiz kalsam iyi olacak " strateji test cihazı ". Ancak herhangi bir gerçek zamanlı yanlışlık elbette çok ciddi bir şeydir, özellikle de parasını, bazen oldukça büyük meblağları yatıran bir kullanıcı için. Bu hatayı aşmak için başka etkili yöntemler görmediğimden, "servis masasına" döndüm ve açıkçası, düzeltmeyi reddedeceklerinden biraz şüphem bile vardı. Peki...

Elbette her şeyin "teşekkür" değil, "rağmen" elde edilmiş olması kötü.

 
Integer :
Wex, bir zamanlayıcı kullan, şimdi döngü olmadan yapabilirsin.

Haklısınız elbette, yeni Expert Advisor'lar tamamen farklı bir şekilde programlanabilir. Ancak zaten iyi programlanmış birçok Uzman Danışman var. Ve müşteriler, para ödedikleri şeyin neden aniden düzgün çalışmayı bıraktığını anlamıyorlar.

Yani, halihazırda geliştirilmiş yazılımların (EA'lar veya komut dosyaları, hatta göstergeler) yeni MT4 yapıları ile temel uyumsuzluğuna ilişkin son derece tatsız bir eğilim var.

Ayrıca, programlama sürecinde temelde standart olmayan hiçbir şey kullanmadım. Tüm P/O, yalnızca MQL4'ün REGULAR özelliklerine ve işlevlerine dayanıyordu. Ve zaten yeni MT4 yapılarında hiç çalışmayan veya mükemmel çalışıyor gibi görünen birçok gösterge ve Uzman Danışmanla (çoğunlukla karmaşık veya "çoklu para birimi" olarak adlandırılır) bombardımana tutuldum, ancak durumlar var verdiğim örnekte olduğu gibi. (Çeviri hatalarına gelince, örneğin ayrılmış kelimeler listesinin genişlemesi nedeniyle - anladığım kadarıyla - "yeni" adlı değişkenleri fark ettim.)

 

Belgeleri okumak için çok tembel. Gerisi çok akıllı olduklarını gösteriyor... Uffff

Kodu al :)

Yani senin sorunun ne anlamıyorum.

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright      "Grizzly_v :)"
#property link            "http://www.mql5.com"
//+------------------------------------------------------------------+
extern int       A1=       1 ;
extern int       A2=       2 ;
int       C1,C2;
//+------------------------------------------------------------------+
int OnInit (){
   C1=A1;
   C2=A2;
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
void OnDeinit ( const int reason){
   Comment ( "" );
}
//+------------------------------------------------------------------+
void OnTick (){
   string    t;

   t=TimeToStr( TimeCurrent (), TIME_MINUTES | TIME_SECONDS );
   Comment (t+ "\nA1=" +A1+ "   A2=" +A2+ "\nC1=" +C1+ "   C2=" +C2);
}
//+------------------------------------------------------------------+
 
grizzly_v :

Belgeleri okumak için çok tembel. Gerisi çok akıllı olduklarını gösteriyor... Uffff

Kodu al :)

Yani senin sorunun ne anlamıyorum.

Sorunu, EA'nın döngülü olması, bu nedenle OnTick olayının içinde olmaması ve değiştirilen parametreleri görmemesidir.
 

İyi o zaman. Aynı döngü yalnızca yeni özellikler aracılığıyla.

   extern int       A1=       1 ;
   extern int       A2=       2 ;
         int       C1,C2;
//+------------------------------------------------------------------+
int OnInit (){
   C1=A1;
   C2=A2;
   EventSetMillisecondTimer ( 100 );
   return ( 0 );
}
//+------------------------------------------------------------------+
void OnDeinit ( const int reason){
   EventKillTimer ();
}
//+------------------------------------------------------------------+
void OnTimer (){
   string    t;
   RefreshRates();
   t=TimeToStr( TimeCurrent (), TIME_MINUTES | TIME_SECONDS );
   Comment (t+ "\nA1=" +A1+ "   A2=" +A2+ "\nC1=" +C1+ "   C2=" +C2);
}
//+------------------------------------------------------------------+
 
stringo :

1. Wex profilini görüntüleyin. Bu profesyonel bir MQL4 geliştiricisidir. O aptalı oynuyor. Ya da bir trol. Neden belli değil.

2. Burada düşünmeniz gerekiyor. Yeni parametreler geldiğinde döngüyü zorla kesemezsiniz. Programcının kendisinin sonsuz bir döngüde çağırması gereken IsNewParameter işlevi gibi bir şey

1. Ben de tuhaflıklar fark ettim ...

2. Çok güzel olurdu.

 
stringo :

1. Wex profilini görüntüleyin. Bu profesyonel bir MQL4 geliştiricisidir. O aptalı oynuyor. Ya da bir trol. Neden belli değil.

2. Burada düşünmeniz gerekiyor. Yeni parametreler geldiğinde döngüyü zorla kesemezsiniz. Programcının kendisinin sonsuz bir döngüde çağırması gereken IsNewParameter işlevi gibi bir şey

Stringo.

Değişkenin böyle sonsuz bir döngüye girmediği anlaşılıyor. Değerleri değiştirirken init yöntemi çalışmıyor. Ve harici değişkenler yalnızca init'ten geçirilir. Artık OnTick, OnTimer'ı kullanabilirsiniz,

OnChartEvent. Expert Advisor'daki start fonksiyonu hatırladığım kadarıyla yeni bir tick oluştuğunda tetikleniyordu.

Belgelerden alıntı:

Program olayları yalnızca üzerinde çalıştığı grafikten alır. Tüm olaylar alındıkları sıraya göre birbiri ardına işlenir. Kuyrukta zaten bir NewTick olayı varsa veya bu olay işleniyorsa, yeni NewTick olayı mql4 programının kuyruğuna konmaz. Benzer şekilde, ChartEvent olayı zaten mql4 programının kuyruğundaysa veya böyle bir olay işleniyorsa, bu türden yeni bir olay kuyruğa alınmaz. Zamanlayıcı olayları aynı şekilde işlenir - bir Zamanlayıcı olayı kuyruktaysa veya halihazırda işleniyorsa, yeni bir zamanlayıcı olayı kuyruğa alınmaz.

Start fonksiyonumuz sonsuz olarak döndüğü için yeni bir olay meydana geldiğinde fonksiyonun başlamadığı ve içindeki değişkenlerin güncellenmeyeceği ortaya çıktı.

Tek bir çıkış yolu var, dilin yeni özelliklerini kullanmak ve eski işlevlerle uğraşmamak.

События клиентского терминала - Документация на MQL4
  • docs.mql4.com
События клиентского терминала - Документация на MQL4
 
artmedia70 :

1. Ben de tuhaflıklar fark ettim ...

Ve bir başkasının gözünde, bir saman bile her zaman görünür. Ve gözleriniz ne kadar çok kütük görürse, o kadar küçük saman görebilirsiniz.

Her durumda, süreç değil sonuç önemlidir. Sonuç şudur: siyah beyaz olarak sunulur - kelimenin tam anlamıyla - mecazi olarak değil - yürütme sistemi bir değer yerine kullanıcıya başka bir değer gösterir. Bunun NEREDE - orada bir işlevin içinde veya dışında - önemli değil. Çok görevli gerçek zamanlı bir sistem, aynı anda birden fazla işlemi işleme yeteneğine sahiptir. Bu süreçte, Sleep() işlevi çoğu zaman "çalışır" ve bu da herhangi bir sistem kaynağı tüketmez. Bu, esasen bir süreci askıya almak için kullanılan klasik bir şeydir. Diğer tüm işlemler engellenmeden çalışabilir.

- Yoldaşlar, planı %102 oranında gerçekleştirebilir miyiz?

- ... Yapabiliriz.

Neden: