MQL5 dilini sıfırdan kendi kendine öğrenme - sayfa 28

 
Vasiliy Sokolov :

Doğru! Herkes hayat tecrübesinden yola çıkarak programla ilgili kavram yanılgılarını kullanarak programlamayı öğrenmeye çalışır. Örneğin, bir program, içindekiler, giriş, içerik ve sonuç bölümlerinin bulunduğu bir kitaptaki bir metin gibidir. Onlar. programın baştan sona bir tür sıralı şema olduğunu. İlk aşamalarda bu temsil çalışır, daha sonra programın karmaşıklığı ile zorluklar başlar ve normal bir şekilde güvenilir bir çalışma programı yazmak mümkün değildir. Hızlı bir hayal kırıklığı ve arka planda programlama çalışmasının ertelenmesi geliyor. Ve bu bağlamda Kovalev, kötülük yapmakta asil bir iş adamıdır: erişilebilir kavramsal aparatını kullanarak okuyucuya, programın şu ve şu şema ile aynı kitap olduğunu açıklamaya çalışır. Ama plan yok! Komut dosyasının, Uzman Danışmandan temel olarak farklı bir "şeması" vardır ve Uzman Danışmanın, göstergeden farklı bir planı vardır.

Peki sizce bir insan nasıl eğitilmelidir? OOP felsefesinden hemen mi? İmkansız.
 

Vasiliy Sokolov :

... 4) En tuhaf blok "hata işleme" bloğudur. İçine girebilirsin ama çıkamazsın. Onlar. program bir hata yakaladı ve bu blokta oturuyor (muhtemelen tam bir yeniden başlatmaya kadar donuyor, daha fazla hata yapmamak için terminali sıkıca dondurmak daha da iyi - fikir bu!) ...

Merhaba Vasili! Ayrıntılı ve yüksek nitelikli açıklama için teşekkür ederiz! Katılamadığım tek şey 4. nokta. Gerçek şu ki, oklar hem “ Hata İşleme Bloğuna” hem de ondan gidiyor. Bu bloğu diğerine bağlayan çizginin sonunda oklar var ve enstitünün bilgisayar bilimi programından bunun iki yönlü bir süreç anlamına geldiğini hatırlıyorum, yani. gidiş. Bu nedenle, bu durumda hiçbir şüphem yoktu. Ve mesajınızın geri kalanı benim için açık.

Saygılarımla, Vladimir.

 
MrBrooklin :

Merhaba Vasili! Ayrıntılı ve yüksek nitelikli açıklama için teşekkür ederiz! Katılamadığım tek şey 4. nokta. Gerçek şu ki, oklar hem "Hata İşleme Bloğu"na gidiyor hem de ondan uzaklaşıyor. Bu bloğu diğerine bağlayan çizginin sonunda oklar var ve enstitünün bilgisayar bilimi programından bunun iki yönlü bir süreç anlamına geldiğini hatırlıyorum, yani. gidiş. Bu nedenle, bu durumda hiçbir şüphem yoktu. Ve mesajınızın geri kalanı benim için açık.

Saygılarımla, Vladimir.

İşte şanslı olduğum ilk kişi :-)

Araştırmanız için bir şablon olarak expa'sını kullanın - akıllı kod!

burada ve


"
  • EA, çalışma zaman aralığı için optimize edilebilir (' Çalışma zaman aralığı ')
  • Çubuk başına sadece bir 'piyasaya giriş' işlemi olabilir (bu dahili bir parametredir, giriş parametrelerine dahil değildir ve ' Yalnızca bir pozisyon ' parametresi ile ilgisi yoktur)
  • 'İç çubuk' modunda çalışırken (' Saniye cinsinden arama sinyalleri', '10'dan büyük veya buna eşit) mevcut çubuk, 'yalnızca yeni bir çubuğun doğum anında' çalışırken 0 numaralı çubuktur. mod (' Arama sinyalleri, saniye cinsinden ' '10'dan az) mevcut çubuk - çubuk #1
  • Parametre ' Ticaret modu: ' - hangi yönde ticaret yapılacağına dair kısıtlama. ' Yalnızca ALMA pozisyonları ', ' Yalnızca SATIŞ pozisyonları ' ve ' İzin verilen AL ve SATIŞ pozisyonları ' değerlerini alabilir.
  • Parametre ' Zaman kontrolünü kullan ' - ' Başlangıç Saati '::' Başlangıç Dakikası ' ile ' Bitiş Saati '::' Bitiş Dakikası' arasındaki alım satım sinyallerini aramak için zaman aralığı . Zaman aralığı hem gün içinde hem de gün içinde geçiş ile ayarlanabilir
  • ' Pip Veya Puan: ' parametresi, Zarar Durdur, Kar Al ve Takip Etme hesaplama standardını belirler

  • ve

    pozisyon açma fonksiyonlarının basitleştirilmiş yazılması için başlangıçta koddaki ters ve diğer çipler ve standart kitaplıkların bağlanması - ÇALIŞIN VE ENDİŞE ETMEYİN, ayrıca standart kod yazmaya hemen alışın - girintiler ve diğer her şey var

    ' Pozisyonlar' İşareti: Yalnızca bir '' true ' olarak ayarlanmış, EA'nın piyasada birden fazla pozisyona sahip olmamasına izin verir. ' Pozisyonlar: Geri ' bayrağı, sinyalin ters çevrilmesinden sorumludur. İlginç bir bayrak ' Pozisyonlar: Karşıt kapat ' - bir pozisyon açmadan önce ' true ' olarak ayarlandığında, zıt pozisyonların kaldırılması garanti edilir. ' Günlüğü yazdır ', tüm işlemlerin genişletilmiş bir günlüğünü yazdırır. ' Dondur ve Durdur Düzeyleri Katsayısı ' parametresi, bir sembolün bu düzeylerinin sıfıra eşit olduğu durumlarda durma ve donma düzeylerinin katsayısını ayarlar. Önerilen değer '3'tür.

    iFractals iAMA
    iFractals iAMA
    • www.mql5.com
    Получать сигнала на откате (по iFractals (Fractals) ), а тренд определять по iAMA (Adaptive Moving Average, AMA). По индикатору iAMA (Adaptive Moving Average, AMA) определяется тренд. Условия тренда: на текущем баре и на двух предшествующих индикатор равномерно растёт (тренд вверх) или равномерно падает (тренд вниз). При этом цена (High или...
     

    Bir programın ne olduğunu anlamak için yazara şiddetle tavsiye ettiğim ilkeleri yazacağım. Bazı bilgilerin doğru olduğu, bazılarının yanlışlar içerdiği ve bazılarının okuyucu ile ortak bir spekülasyon olduğu Kovalev'in broşürlerinden farklı olarak, MQL'de ne yazarsanız yazın bu ilkeler HER ZAMAN doğrudur ve %100'dür: Uzman Danışmanlar, senaryolar veya Uzman Danışmanlar :

    İlk ilke. Herhangi bir MQL programı olayları işler. Olay, bir şey hakkında, genellikle bir şeyin değiştiği hakkında bilgi içeren bir tür bildirimdir. Örneğin, yeni bir onay geldi veya bekleyen siparişimiz uygulandı. Herhangi bir bilgi içermeyen, sadece meydana gelen olaylar vardır. Örneğin, bir "zamanlayıcı" olayı, belirli bir aralıkta özel bir işlevi çağırabilir. Kullanıcıya bir şeyin değiştiğini bildirmez. Sadece kullanıcı kodunu çağırır, bu nedenle herhangi bir ek bilgiye ihtiyaç duymaz. Olay tanımından, önemsiz olmayan birkaç yöntem takip eder:

    • İlk sonuç, bir olay aldığımızda, onu mümkün olan en kısa sürede işlememiz gerektiğidir. Birçok olay olabilir, olaylar bir kuyrukta birikebilir. MeteTrader olaylarını yönetir (programımız değil). Bunu yapmak için thread adı verilen özel bir kaynak kullanır. Bu kaynak çok değerli ve sınırlıdır. MetaTrader'ın sahip olduğu bir iş parçacığı, bilgisayarımızın CPU'sunda kaba, optimal olmayan ve yavaş komut dosyası kodumuzu cömertçe yürütür. Olay işleme , kodumuzdaki akışı yavaşlatırsa, bazı durumlarda metatrader'da çalışan diğer programlar normal şekilde çalışamaz. İş parçacığını gereksiz hesaplamalarımızdan çıkarana kadar bekleyecekler ve kodlarını aynı serbest dizi üzerinde yürütecekler.
    • Birçok olay var. Mevcut olayların çoğunu işleyebiliriz, ancak yalnızca birini işleyebiliriz. Bir komut dosyası oluşturduğumuzda, yalnızca bir kez gerçekleşen OnStart olayını işler. Bir Expert Advisor yazdığımızda, aynı anda birkaç olayı işleyebilir. Bu, programınızı "bu kitabı programla" paradigmasına sıkıştırmanın faydasız olduğu anlamına gelir. Bunun yerine, programın belirli olaylar için bir işleyici olduğunu anlamanız yeterlidir. Herhangi bir sırayla çağrılabilirler veya hiç çağrılmayabilirler. Olaylar birbirinden bağımsızdır. Bu, programın bu olayları işleyen bölümlerinin birbirine bağlı olmadığı anlamına gelir. Doğrusal değildirler ve sıralı değildirler .

    (şimdilik bu kadar, bir arzu olacak - devam edeceğim).
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    • www.mql5.com
    В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
     
    Roman Shiredchenko :

    İşte şanslı olduğum ilk kişi :-)

    Araştırmanız için bir şablon olarak expa'sını kullanın - akıllı kod!

    burada ve


    "
  • EA, çalışma zaman aralığı için optimize edilebilir (' Çalışma zaman aralığı ')
  • Çubuk başına sadece bir 'piyasaya giriş' işlemi olabilir (bu dahili bir parametredir, giriş parametrelerine dahil değildir ve ' Yalnızca bir pozisyon ' parametresi ile ilgisi yoktur)
  • 'İç çubuk' modunda çalışırken (' Saniye cinsinden arama sinyalleri', '10'dan büyük veya buna eşit) mevcut çubuk, 'yalnızca yeni bir çubuğun doğum anında' çalışırken 0 numaralı çubuktur. mod (' Arama sinyalleri, saniye cinsinden ' '10'dan az) mevcut çubuk - çubuk #1
  • Parametre ' Ticaret modu: ' - hangi yönde ticaret yapılacağına dair kısıtlama. ' Yalnızca ALMA pozisyonları ', ' Yalnızca SATIŞ pozisyonları ' ve ' İzin verilen AL ve SATIŞ pozisyonları ' değerlerini alabilir.
  • Parametre ' Zaman kontrolünü kullan ' - ' Başlangıç Saati '::' Başlangıç Dakikası ' ile ' Bitiş Saati '::' Bitiş Dakikası' arasındaki alım satım sinyallerini aramak için zaman aralığı . Zaman aralığı hem gün içinde hem de gün içinde geçiş ile ayarlanabilir
  • ' Pip Veya Puan: ' parametresi, Zarar Durdur, Kar Al ve Takip Etme hesaplama standardını belirler

  • ve

    pozisyon açma fonksiyonlarının basitleştirilmiş yazılması için başlangıçta kodda ters ve diğer hileler ve standart kitaplıkları bağlama - ÇALIŞIN VE ENDİŞE ETMEYİN, ayrıca standart kod yazmaya hemen alışın - girintiler ve diğer her şey var

    ' Pozisyonlar' İşareti: Yalnızca bir '' true ' olarak ayarlanmış, EA'nın piyasada birden fazla pozisyona sahip olmamasına izin verir. ' Pozisyonlar: Ters ' bayrağı sinyalin ters çevrilmesinden sorumludur. İlginç bir bayrak ' Pozisyonlar: Karşıt kapat ' - bir pozisyon açmadan önce ' true ' olarak ayarlandığında, zıt pozisyonların kaldırılması garanti edilir. ' Günlüğü yazdır ', tüm işlemlerin genişletilmiş bir günlüğünü yazdırır. ' Dondur ve Durdur Düzeyleri Katsayısı ' parametresi, bir sembolün bu düzeylerinin sıfıra eşit olduğu durumlarda durma ve donma düzeylerinin katsayısını ayarlar. Önerilen değer '3'tür.

    Merhaba Roman! Örnek için teşekkürler. Birçok kez Vladimir Karputov'un yazdığı kodları anlamaya çalıştım ama şu ana kadar bu benim için henüz ulaşılabilir bir seviye değil. Biraz sonra, zaten kafamda daha fazla bilgi olduğunda, onun kodlarına geri döneceğim. Yine de tavsiye için teşekkürler!

    Saygılarımla, Vladimir.

     
    Vasiliy Sokolov :

    Bir programın ne olduğunu anlamak için yazara şiddetle tavsiye ettiğim ilkeleri yazacağım. Bazı bilgilerin doğru olduğu, bazılarının yanlışlar içerdiği ve bazılarının okuyucu ile ortak bir spekülasyon olduğu Kovalev'in broşürlerinden farklı olarak, MQL'de ne yazarsanız yazın bu ilkeler HER ZAMAN doğrudur ve %100'dür: Uzman Danışmanlar, senaryolar veya Uzman Danışmanlar :

    İlk ilke. Herhangi bir MQL programı olayları işler. Olay, bir şey hakkında, genellikle bir şeyin değiştiği hakkında bilgi içeren bir tür bildirimdir. Örneğin, yeni bir onay geldi veya bekleyen siparişimiz uygulandı. Bilgisi olmayan, sadece gerçekleşen olaylar vardır. Örneğin, bir "zamanlayıcı" olayı, belirli bir aralıkta özel bir işlevi çağırabilir. Kullanıcıya bir şeyin değiştiğini bildirmez. Sadece kullanıcı kodunu çağırır, bu nedenle herhangi bir ek bilgiye ihtiyaç duymaz. Olay tanımından, önemsiz olmayan birkaç yöntem takip eder:

    • İlk sonuç, bir olay aldığımızda, onu mümkün olan en kısa sürede işlememiz gerektiğidir. Birçok olay olabilir, olaylar bir kuyrukta birikebilir. MeteTrader olaylarını yönetir (programımız değil). Bunu yapmak için thread adı verilen özel bir kaynak kullanır. Bu kaynak çok değerli ve sınırlıdır. MetaTrader'ın sahip olduğu bir iş parçacığı, bilgisayarımızın CPU'sunda kaba, optimal olmayan ve yavaş komut dosyası kodumuzu cömertçe yürütür. Olay işleme , kodumuzdaki akışı yavaşlatırsa, bazı durumlarda metatrader'da çalışan diğer programlar normal şekilde çalışamaz. İş parçacığını gereksiz hesaplamalarımızdan çıkarana kadar bekleyecekler ve kodlarını aynı serbest dizi üzerinde yürütecekler.
    • Birçok olay var. Mevcut olayların çoğunu işleyebiliriz, ancak yalnızca birini işleyebiliriz. Bir komut dosyası oluşturduğumuzda, yalnızca bir kez gerçekleşen OnStart olayını işler. Bir Expert Advisor yazdığımızda, aynı anda birkaç olayı işleyebilir. Bu, programınızı "bu kitabı programla" paradigmasına sokmanın faydasız olduğu anlamına gelir. Bunun yerine, programın belirli olaylar için bir işleyici olduğunu anlamanız yeterlidir. Herhangi bir sırayla çağrılabilirler veya hiç çağrılmayabilirler. Olaylar birbirinden bağımsızdır. Bu, programın bu olayları işleyen bölümlerinin birbirine bağlı olmadığı anlamına gelir. Doğrusal değildirler ve sıralı değildirler .

    (şimdilik bu kadar, bir arzu olacak - devam edeceğim).

    Mükemmel Vasily, yazmak senin için zor değilse devam etmeyi dört gözle bekliyorum! Söylediğin her şey benim için kısa ve anlaşılır!

    Saygılarımla, Vladimir.

     
    MrBrooklin :

    Mükemmel Vasily, yazmak senin için zor değilse devam etmeyi dört gözle bekliyorum! Söylediğin her şey benim için kısa ve anlaşılır!

    Saygılarımla, Vladimir.

    Evet, ilginç görüşler.

    1. Herhangi bir program yapısal olarak işlevsel blokların bir hiyerarşisidir ve ilgili ve karşılıklı olarak bağımlı parametrelerden oluşan bir sistemdir.

    2. Olay - programın harici yazılım ortamıyla veya dahili değişikliklerle etkileşiminin sonucu. Çevre, programı çağırarak olayı "rapor eder" (OnTick, OnChartEvent ...).

    4. Ortam (terminal) programa karşı nötrdür ancak programı etkileyebilir.

    5. Program, terminaldeki ve piyasadaki ortamı hakkında özel fonksiyonlar yardımıyla bilgi alır ve mantığında kullanabilir.

    6. Program, kendisi veya nesneleri hakkında özel istekler kullanarak bilgi alabilir ve mantığında kullanabilir.

    7. Olaylar if() ifadelerinde açıklanmıştır.

    8. Olaylarda, meydana gelen değişikliklere tepki veren işleyiciler çağrılır.

    9. Reaksiyon, nesne (ler) - (parametrelerinin değerlerinde kütle değişikliği) veya bir tür hesaplama çalışması durumundaki değişiklikler olabilir.

    10. Olay işleyicileri hiyerarşik yapılar (olay modelleri) halinde gruplandırılmıştır.

    11. Program nesneleri çeşitli olaylara "abone olabilir" ve alıcı alıcılar listesinde olabilir.

    ... ve daha fazlası... :)

    not Vasily daha iyi ve daha net bir şekilde tanımlayacaktır.
     

    Devam ediyoruz:

    • Birçok olay olduğundan, birçok olay işleyicisi vardır. Olaylar tutarsız olarak adlandırıldığından, işleyicileri de tutarsız olarak adlandırılır. Çağrı tutarsızlığı olduğu için olay işleyicileri birbirlerini kıskanamazlar ve birbirlerinin verilerine de bağımlı olamazlar. Bu katı gereksinimleri karşılayan tek yapı .
    • Fonksiyonlar birbirinden bağımsızdır. Bir işlev a + b'nin toplamını ve ikincisi a * b'nin çarpımını döndürürse, bu iki işlevin sonucu çağrıdaki sıraya bağlı olmayacaktır. İlk fonksiyonu 3 ve 5 argümanlarıyla çağırıp 8'i alabiliriz. Sonra aynı argümanlarla ikinci fonksiyonu alıp 24'ü alırız. Sonra onların çağrılarını değiştiririz. Sonuçlar canlı yayına konu olacak. Toplama işlevi, 3 ve 5 bağımsız değişkenleri verildiğinde her zaman 8 döndürür. Çarpma işlevi, aynı bağımsız değişkenler verildiğinde her zaman 24 döndürür.
    • Yukarıdan, yalnızca bir işlevin bir olay işleyicisi olabileceği açıkça ortaya çıkıyor. Yeni bir tick olayı meydana geldiyse, bu amaca özel OnTick fonksiyonu tarafından işlenir. Start olayı (tek seferlik bir komut dosyası başlatma) meydana geldiyse, bunun için özel olan OnStart işlevi tarafından işlenir.
    • İşlev evrenseldir. Olaylardan daha fazlasını işleyebilir. İşlev, geçerli saat gibi yararlı bir şey döndürebilir. Bir fonksiyon, geçtiği argümanlarla karmaşık hesaplamalar yapabilir ve bu hesaplamaların sonucunu tek bir değer olarak döndürebilir. Son olarak, bir işlev bir veri sağlayıcı olabilir: bir işlevi çağırır ve ondan tırnak işaretleri gibi ihtiyacınız olan verileri alırsınız.
    • MetaTrader dahili olarak yaklaşık 1500 bini kullanıcılar tarafından sağlanan binlerce farklı fonksiyondan oluşmaktadır. Bunlar çok kullanışlı özellikler. Sistem zamanını öğrenmenize izin verir, bunlar aracılığıyla istediğiniz enstrüman hakkında veri alabilirsiniz. Fonksiyonlar aracılığıyla ticaret emirleri gönderilir. MKL referans kitabını açabilir ve tamamen işlevlerden ve bunlara ilişkin argümanlardan oluştuğundan emin olabilirsiniz. Onlar. Kullanıcı programları açısından MetaTrader, büyük bir işlevler kümesidir.
    • Yeterli evrensel işlev yok. Sistemde ne kadar yeni özellik görünürse görünsün, her zaman bir eksiklik olacaktır. Bunun nedeni herkesin ihtiyaçlarının farklı olmasıdır. Tüm durumlar için evrensel bir işlev yoktur. En yaygın ve çok yönlü işlevler MetaTrader'a zaten dahil edilmiştir ve bize nazikçe sağlanmıştır. Ancak, kullanıcı ihtiyaçları sonsuzdur. MetaQuotes, terminallerinin 100.000 kullanıcısının bireysel ihtiyaçlarını karşılayamaz. Bunun yerine daha esnek davrandılar: Kullanıcılara ihtiyaç duydukları işlevleri yaratma fırsatı verdiler. Bundan sadece kullanıcılar yararlanır. Kendilerine pek uygun olmayan bir sistem fonksiyonu kullanmak yerine, ideal olarak tam olarak görevlerini çözen kendi fonksiyonlarını yazabilirler. Çok yönlülüğü nedeniyle hiçbir sistem işlevi mükemmel değildir.
    • Kullanıcının kendi fonksiyonlarını ne kadar iyi yazacağını ve yaptığı işin özünü ne kadar iyi anladığını ve programcının ne kadar nitelikli olduğunu gösterir. Programın, gelen olayları sırayla işlemeyen farklı bir işleyiciler kümesi (fonksiyonlar biçiminde) olduğunu anlarsa, bu iyidir. Kendi fonksiyonlarını nasıl yazacağını biliyorsa - başka bir artı. Birkaç işlevin (hem kendisinin hem de sistemin) çalışmasını ortak bir algoritmada birleştirebilirse, bu onun için başka bir artıdır.
    • MetaTrader'da (dördüncü ve beşinci) her şeyin bir şekilde işlevlerle ilgili olduğunu, işlevlere dayalı olduğunu, işlevler üzerinde çalıştığını anlarsanız, aniden her şey netleşir. Yardım artık bir dizi farklı kod parçası içeren kalın bir Talmud olarak değil, mevcut işlevlere ve ne yaptıklarına dair bir kılavuz olarak sunulmaktadır. Veri türleri, diziler, yapılar, sınıflar gibi diğer her şey önemli değildir. Bütün bunlar, bir şeyi iade edebilmeleri ve bir şeyi kabul edebilmeleri için işlevleri desteklemek içindir.

    (şimdiye kadar)
     
    Acemiyi onun için gereksiz bilgilerle bombaladılar.))
     
    Реter Konow :
    Acemiyi onun için gereksiz bilgilerle bombaladılar.))

    Bu, arzularınızın bu şekilde reklamını yapmanıza gerek olmadığını gösterir. Aynı başarı ile Vladimir, C ++ öğrenmek veya montajcı öğrenmek gibi "uzmanların" saçmalıklarını değil, özellikle belirli bir işlev hakkında sorular sorabilir ve faydalı tavsiyeler alabilir. Delikli kartları inceleyerek başlayabilirsin.

    Neden: