Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Doğrusal, doğrusal olmayan... Programlamada yine operadan mı bahsediyorsunuz?
imkanı yok
TAMAM. Çözümünüz yalnızca keneler üzerinde çalışır. Benimki bir zamanlayıcıda . Çubukların görünümüyle senkronize etme yöntemimin bir dezavantajı olduğunu düşünüyor musunuz? TAMAM. Öyle olsun. Yeni bir çubuğun bayrağını ayarlamadan önce bir teklifin gelişi için bir çek ekleyeceğim. Fonksiyona başka bir parametre ekleyeceğim - bir sembol. Kullanıcı, yeni bir çubuğun olayını alması gereken sembolü seçecek ve fonksiyona gönderecektir. İşlev, verilen sembolün son alıntısının zamanını kontrol edecektir. Ardından, çubuğun resmi görünüm zamanını ve teklif zamanını karşılaştırın ve olay bayrağını ayarlayın.
Bu konuyu yeni anlamaya başladım, ancak herhangi bir zorluk görmüyorum.
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Mt4 Sonu desteği.
Artyom Trishkin , 2017.09.10 22:27
Fiyat teklifi almayı biliyorum :)
Çoklu para birimi programında - gerekli semboller aracılığıyla bir döngüde bir zamanlayıcıda . Ve yeni bir çubuğun açılması ( sizinki gibi fiziksel, sanal değil - hatalı -) son alıntının zamanı ve bu zamanın sembolün sıfır çubuğunun zamanı ile karşılaştırılmasıyla kontrol edilir .
Bunu rastgele yaparsınız - var olmayabilecek sanal bir çubuk. Hafta sonları müsait değiller, ama iddiaya göre sizde var - bu örnek olarak gösterilebilecek en basit şey.
Ve bunu tek başına yapmayacağını anla. Gerisi doğru ve güvenli olanı yapar. Ama bu, elbette, sadece kendi işiniz.
Size bunu nasıl doğru yapacağınızı anlatmak ve aynı problemi çözerken OOP'de yazmanın basitliği ve prosedürel stildeki karmaşık kıvrımlar ve dönüşler arasında büyük bir fark göstermek istedim.
Ama muhtemelen daha fazlasını biliyorsun ve buna ihtiyacın yok. Artık senin önünde bir şey biliyormuş gibi görünmeye cesaret edemiyorum. Afedersiniz.
Tabii, sorun değil. Müşteri bir manyaksa ve aynı anda tüm semboller üzerinde işlem yapacaksa, dizi operasyonlarının karşılaştırmasını kurtarmak için riskten korunma.
Ve öyle görünüyor ki, işlemlerden ve bellekten tasarruf edecek başka bir yer yok - sadece minimum
void OnTimer(){
Alert(Fn_new_bar("EURUSD", PERIOD_D1)); }
//+------------------------------------------------------------------+
uint Sp_Adler32(string line){
ulong s1 = 1;
ulong s2 = 0;
uint buflength=StringLen(line);
uchar char_array[];
ArrayResize(char_array, buflength,0);
StringToCharArray(line, char_array, 0, -1, CP_ACP);
for (uint n=0; n<buflength; n++){
s1 = (s1 + char_array[n]) % 65521;
s2 = (s2 + s1) % 65521;}
return ((s2 << 16) + s1);}
//+------------------------------------------------------------------+
bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf){
static datetime st_time[];
static uint st_id[];
//---- set
datetime new_time = iTime(symb, tf, 0); if(new_time==0) return(false);
uint new_id = Sp_Adler32(StringConcatenate(symb,EnumToString(tf)));
datetime old_time = 0;
uint old_id = 0;
//---- find
int size = ArraySize(st_time);
for(int i=0; i<size; i++){
if(st_id[i]!=new_id) continue;
old_id = st_id [i];
old_time = st_time[i];
break;}
//----add new element
if(old_time==0){
ArrayResize(st_time, size+1); st_time[size]=new_time;
ArrayResize(st_id, size+1); st_id [size]=new_id; }
//----
return(old_time>0 && old_time<new_time);}
bugün yapı olarak en mantıklı kod bu gibi görünüyor. yeni bir sembol ve tf için bir kontrol var, istisnasız her şeyi kontrol etmiyor, sadece gerekli olanı kontrol ediyor, gereksiz işlemler yok, bu da oldukça hızlı bir şekilde yapılması gerektiği anlamına geliyor.
Samimi olarak.
PS Buraya eklenebilecek tek küçük şey, st_time ve st_id dizilerini bir yapı içinde birleştirmek, çünkü bunlar birbirine bağlı olduğundan, bu koddaki dizi artırma işlemlerinin sayısını azaltacaktır.
Amacım, prosedürel stil kodunun şöyle bir döngüde çalışmasını sağlamaktı:
peki, bunun gibi bir şey (MQL5 kodu):
Ama tekrar ediyorum - Ben OOP'nin destekçisiyim.
Prosedürel programlama ile neler yapılamayacağını gösteren gerçekten kötü bir örnek.
Bu, bir Uzman Danışmanda bir işlevi çağırmakla ilgili değil, evrensel arabirimler (işleyiciler) yazmakla ilgilidir.
robot yazmak için 1000 referans şartınız var, aslında her biri
Açmak için 1 sinyal alma işlevi
2 sipariş açma fonksiyonu
3 sipariş takip fonksiyonu
Kapatmak için 4 sinyal alma işlevi
vb.
her robotun kendi işlevleri vardır, ancak 1000 proje içinde tekrarlanırlar. sonuç olarak, işlevleri evrensel modüllerde birleştirebilir ve göreve bağlı olarak doğru olanı arayabilirsiniz.
Eh, bu işlevler varsa, o zaman daha akıllıca hiçbir şeyin olması gerekmez. Fonksiyonun giriş parametreleri arayüzdür. Her ekstra bilgelik, olası hataların sayısını ve programcının çalışma süresini artırır.
peki, bunun gibi bir şey (MQL5 kodu):
Ama tekrar ediyorum - Ben OOP'nin destekçisiyim.
Prosedürel programlama ile neler yapılamayacağını gösteren gerçekten kötü bir örnek.
Böyle bir örnek gerçekten var mı? Seninki olmasın? Derin şüphelerim var. 2000'li yılların başında yazdığım kodların hata ayıklanmış ve çalışan satır sayısını saymayı bıraktım çünkü bir milyonu aştı, ilgimi çekmeye başladı. Ve görevlerin çeşitliliği ve kapsamı çok farklı olmasına rağmen, asla kendi sınıfınızı yaratmanıza gerek yoktu. Çalışmayı birkaç kişi için paralel hale getirmek gerektiğinde, prosedür tipi değişkenler kullanılmalıydı, ancak artık kullanılmamalıdır. Nedenmiş?
Bu arada, neden OOP'ye alternatif olarak prosedürel programlamadan bahsediyorsunuz? OOP'siz, temelde prosedürel olmayan (SQL) diller var, dillerin geliştirilmesi için bir yön bile var - işlevsel programlama https://ru.wikipedia.org/wiki/%D0%A4%D1% %83D0%BD%D0%BA%D1%%86D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_% D0%BF%D1%80%D0%BE% D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0% B0%D0%BD%D0%B8%D0% B5 : "Bazı kavramlar ve paradigmalar işlevsel programlamaya özgüdür ve çoğunlukla zorunlu programlamaya ( nesne yönelimli programlama dahil) yabancıdır", "İşlevsel programların bir diğer avantajı, hesaplamaların otomatik paralelleştirilmesi için en geniş olanaklar." OOP'nin hesaplamaların otomatik paralelleştirilmesini önlediği ortaya çıktı. Şimdi bu çok ciddi bir eksiklik olarak kabul edilmelidir, olasılık OOP için değildir.
Böyle bir örnek gerçekten var mı? Seninki olmasın? Derin şüphelerim var.
Bence böyle bir örneğin bulunamaması oldukça olası. Şahsen, OOP'nin ana avantajlarının büyük projelerin daha uygun programlanması ve gelecekteki gelişmeleri kullanmak için uygun bir mekanizma olduğunu düşünüyorum. Bu, burada defalarca kez haklı olarak söylendi.
Görünüşe göre, tek bir arayüzün herhangi bir hesaplama görevinin programlanması için tamamen uygulanamaz olduğu daha önce tartışılmıştı... Arayüzler şeklinde güzelliği getirmek, sadece hazır koda uygulanabilen ve dahası, önleyen tamamen kozmetik bir prosedürdür. kodun daha fazla desteklenmesi ve iyileştirilmesi .. .
Hayır. "Tamamen uygulanamaz" değil, "başvurmanın bir anlamı yok" ile ilgiliydi.
Arayüzler, "bitmiş koda uygulanabilecek tamamen kozmetik bir prosedür" değildir.
Tam tersine - arayüzler sistem mimarisinin temelidir. Tasarımın başladığı yer. Arayüzler "destek ve iyileştirmeyi" hiçbir şekilde engellemezler, aksine izin verilenlerin sınırlarını net bir şekilde belirleyerek onlara yardımcı olurlar. Arayüzler yoksa, bu sınırları aşmak ve amaçlanmayan yerlerde değişiklikler yapmak kolaydır, bunun sonucunda hesaplaması zor hatalar meydana gelir.
Herhangi bir karmaşık sistem (sadece programlamada değil), sadece parçalarının etkileşimi için temel ilkelerin geliştirilmesiyle başlar. Ve programlamada - başlangıçta görevin kural olarak çok küçük olması nedeniyle - ters yöne giderler. İlk önce, parçalar yazılır ve daha sonra bir bütün halinde birleştirilirler, genellikle parçaların birbiriyle zayıf uyumlu olduğu gerçeğiyle karşı karşıya kalırlar - bu arada, "mevcut tüm değişkenlere erişime sahip olma" arzusunu tam olarak açıklayan şey budur. "
isNewBar() işlevinin doğada hiç olmaması dışında her şey yolunda. Böyle önemsiz bir şeyin etrafında bu kadar çok dans olması komik.
Bu sadece bir değişkendir ve sadece çubuğun zamanı ile karşılaştırılır, eğer tüm durumlar başarılı olursa, sonunda değişkene yeni çubuğun zamanı atanır. Aksi takdirde, tüm durumlar için yalnızca bir deneme tahsis edilir.
isNewBar() işlevinin doğada hiç olmaması dışında her şey yolunda. Böyle önemsiz bir şeyin etrafında bu kadar çok dans olması komik.
Bu sadece bir değişkendir ve sadece çubuğun zamanı ile karşılaştırılır, eğer tüm durumlar başarılı olursa, sonunda değişkene yeni çubuğun zamanı atanır. Aksi takdirde, tüm durumlar için yalnızca bir deneme tahsis edilir.
+1