MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1144

 
Valeriy Yastremskiy :

Bu anlaşılabilir bir durumdur, ancak ne yazık ki mql5'i hemen anlamak zordur. fxsaber'a katılıyorum, 4k'da daha kolay olduğunu düşünüyorum, ancak optimizasyon ve diğer güzellikler için danışmanı 5k'ye çekiyoruz. Genel olarak, OOP uygulaması olmadan mql5'te hemen ustalaşacak biri olup olmadığını bilmek isterim. C++ 4'ten sonra tabii ki alakası yok ama yanılıyor olabilirim.

Tamamen aynı iki dil. Ne fazla ne az. Ve OOP (ki herkesin gözünü korkuttu) her ikisinde de tamamen aynı. Bilmiyordum? İnternette korku hikayeleri okudunuz ve YouTube'da "iyi-makul-ebedi" eken yeterince blogcu gördünüz mü? İnsanları bilinçli olarak MQL5'ten korkutarak, akıllıca saçma sapan şeyler söylüyorlar.

Hayal kırıklığına uğratmak için acele ediyorum - her iki dil de tamamen aynı. Hem anlama kolaylığı açısından hem de OOP'nin olanakları ve kullanılabilirliği açısından.
Doğru, MQL5'te daha fazla fırsat var.

 
Alexey Viktorov :

Sana oraya bir İspanyol gönderdim - peki, kork. Onu bir gösterge yap - zamanım yok. İngilizce yazar. Eğer öyleyse, açıklayacağım. Ama .. bunu kendin anlayacaksın.

 
Alexey Viktorov :

Artyom'un cevabını hatırlamıyorum ve aramayacağım, cevap verebileceğini tahmin edeceğim. Makalelerinde bunun için gerekli tüm işlevsellik var ve makalelerindeki tüm kodlar ya çok terminalli ya da mql5 ve mql4 için iki versiyonu. Bu seçenekleri mql4'te kontrol ettim, her şey “patlama” ile çalışıyor, dur veya al ile kapanmayı yakalıyor ve hata yapmıyor.

Evet bu yazıları anlamak zor ama benden büyük değilseniz buna değer. Ve bana göre, bir programcı için uygunsuz bir şekilde çok fazla.

Başka bir seçenek daha basittir, ancak çok daha yavaş çalışacaktır. Bir diziye sipariş biletleri yazın ve bu diziyi kullanarak bir sipariş seçin, sipariş kapanış saatini kontrol edin. Sıfırdan büyükse kapalıdır. Bu kapatılan emrin yorumlarında “sl” harfleri varsa emir stop ile kapatılır. Ayrıca, sipariş kapalıysa diziden sileriz. Veya tüm dizi boyunca geçişi tamamladıktan sonra, kalan açık siparişlerle yeniden doldururuz. Sonuçta, bir fantezi uçuşu ...

Hangi seçeneği seçeceğiniz size kalmış. Ve Kovalev'in ders kitabıyla ilgili birkaç yazımı okuyun. Eğitimde int start() yazmanız önerilir, danışmanlar için güncellenmiş mql4'te ise void OnTick() yazmanız gerekir.

Göstergeler ve komut dosyaları için belgelere bakın. Ve bu arada, güncellenmiş mql4'te gösterge yazmak, Sergey'in bu öğreticiyi yazdığı zamandan çok daha kolay.

Çok teşekkürler. Bilgileriniz benim için çok değerliydi. Özellikle start() işlevi hakkında

 
Alexey Viktorov :

Artyom'un cevabını hatırlamıyorum ve aramayacağım, cevap verebileceğini tahmin edeceğim. ...

İşte cevabım. Yapılması gerekenler hakkında net talimatlar:

Emir ve pozisyon sayısını takip etmeniz ve bunları önceki durumla karşılaştırmanız gerekir. Son tikte 12 pozisyon varsa ve mevcut tikte 8 tane varsa, o zaman 4 pozisyon değişikliğimiz olur. Buna göre, onlara ne olduğunu anlamak için son dört pozisyonu (kapanış süreleri açısından) almanız gerekiyor.

Ancak, "mucizelerin" yazıldığı ekli koda bakılırsa, kelimelerle gerçekten bir açıklamaya ihtiyacınız yok. Ama burada yardım ediyorlar ve için / için yazmıyorlar.


 
ANDREY :

Çok teşekkürler. Bilgileriniz benim için çok değerliydi. Özellikle start() işlevi hakkında

İyi için editörde ihtiyacımız olanı yaratırız, danışman, komut dosyası, gösterge ve editör doğru alanlara sahip bir şablon oluşturur.
 
Artyom Trishkin :

Kodunuz, her biri kesin olarak belirlenmiş bir zamanda iki satış pozisyonu açmanın ve izin verildiğinde son pozisyonun açılış saatini yazdırmanın yanı sıra gerçekte ne yapar? Her şey. Aynı zamanda, kodun davranışında "mucizelere" yol açabilecek başlatılmamış değişkenler ve uzun yıllar örümcek ağlarıyla tozlu bir raftan çekilen ve çok, çok eski bir başlangıç () işleyicisi kullanarak, piyasa (bir gün bir şey satmak istersiniz) eski işleyicilerle doğrulayıcıyı asla kaçırmaz - program türünün yanlış olduğunu tekrarlar.

Katıldığınız için teşekkürler. İngiliz Sterlini-ABD Doları çiftinde, test sırasında fiyat davranışında bir model buldum. Küçük düzeltmeler ve ayrıca küçük düşüşler içeren bu formasyon, 2008'den bu yana ve şu ana kadar denge tablosu sürekli olarak yukarı çıktı. Dediğim gibi, denge tablosundaki düzeltmeler ve düşüşler küçüktür, ancak birkaç ay boyunca uzun zaman alırlar.Diğer çiftlerde bu model telaffuz edilir, ancak sterlin - dolar kadar net değildir.
Bu kalıbın çeşitli varyasyonlarını test etmeye başladım ve bu amaçla optimizasyona başvurdum. Ancak ortaya çıktığı gibi, aynı anda birkaç parametreyle optimizasyon çok fazla zaman alıyor. Benim durumumda, yaklaşık bir yıl. Genetik algoritma bana uymuyor.
Sonra doğru şekilde oluşturulmuş kod, Print() işlevi ve bir Excel elektronik tablosu yardımıyla daha hızlı test etmenin ve optimize etmenin mümkün olduğu düşüncesi geldi.

Aşağıdaki kod sadece böyle bir kod yazma girişimidir. Gelecekte bu kodu geliştirmeye devam edeceğim. Ama şimdi çözecek bilgiye sahip olmadığım bir problemle karşılaşıyorum.
Lütfen beni yargılamayın ve kodum çok sert.... Kodlamanın temellerini ve biraz daha fazlasını yeni yeni anlamaya başlayan bir acemiyim. Ama eleştiriyi sakince alıyorum ve gücenmiyorum ..... özellikle yapıcı.

Yardım için teşekkürler.

 int s1,Mn,a,CH;
double Hay,Lou=Bid,Nm_PL[ 700 ]={ 0 },PrS,DL= 0.0030 ,X;
int start()
{
int ot = OrdersTotal ();                                         
int Ht = OrdersHistoryTotal();
////******************************************************************
if ( OrderSelect (Ht- 1 ,SELECT_BY_POS, MODE_HISTORY))                                             
if (X!=OrderTicket( ))
{
Mn=OrderMagicNumber();CH=TimeHour(OrderOpenTime());PrS=OrderProfit( );Nm_PL[CH+Mn* 24 ]=Nm_PL[CH+Mn* 24 ]+PrS;
Print ( "----------------- ПРОФИТ-----------------------=" ,CH, "    Ном орд.(1-26)   " ,Mn, " ТП    " ,PrS, " ФИН.РЕЗУЛЬТ.   " ,Nm_PL[CH+Mn* 24 ], " НОМ. ИНДЕКСА   " ,Mn* 24 );X=OrderTicket();
}
////******************************************************************
if (Bid < Lou)
{
Lou=Bid;
}
//=======================
if (Bid > Hay)
{
Hay=Bid;
}
////=======================
if (Bid - Lou > DL&& Lou!= 0 )
{
for ( int c= 0 ; c<= 500 ;c+= 20 ) 
{
a++;
OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,Ask+ 0.0030 +c* Point ,Ask- 0.0010 -c* Point , "300" ,a );
}
Lou=Bid;
Hay=Bid;
a= 0 ;
s1= 0 ;
}
return ( 0 );
}

Eğer iki veya daha fazla sipariş aynı tik üzerinde kapatılmışsa, program Print()'i ancak bu tik üzerinde son sipariş kapatıldıktan sonra yazdırır. Ve her kapalı siparişten sonra Print()'e ihtiyacım var. Bunu nasıl başaracağımı bilmiyorum. Ama doğru kodu görürsem hemen her şeyi anlayacak ve hatırlayacağım.

Aşağıda benim sorunumun bir örneği var


Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • www.mql5.com
Введение Генетический алгоритм (ГА) относится к эвристическим алгоритмам (ЭА), который даёт приемлемое решение задачи в большинстве практически значимых случаев, однако при этом правильность решения математически не доказана и применяют чаще всего для задач, аналитическое решение которых весьма затруднительно или вовсе невозможно. Классическим...
 
Valeriy Yastremskiy :
İyi için editörde ihtiyacımız olanı yaratırız, danışman, komut dosyası, gösterge ve editör doğru alanlara sahip bir şablon oluşturur.

Evet. Bu doğru alanlara, yani BAŞLAT yerine yeni işlevlere dikkat ediyordum. Ancak bunlara hiç önem vermedi ve yine de BAŞLAT'ı test için kullandı.
En son MQL4 güncellemeleri hakkında daha fazla bilgiyi nerede bulabileceğinizi biliyor musunuz?Aksi takdirde, her yerde çok fazla bilgi vardır ve doğru olanı bulmak çok zordur. Bazen nereye bakacağımı bile bilmiyorum.Kovalev'in ders kitabını gerçekten seviyorum çünkü içindeki tüm bilgiler mantıksal olarak yapılandırılmış ve bu nedenle beyne kolay ve hızlı bir şekilde giriyor. Ve gerekli tüm incelikleri anlayacak kadar ayrıntılı. Neden MQL5 için de bir eğitim yazmadığını merak ediyorum.

 
Artyom Trishkin :

Tamamen aynı iki dil. Ne fazla ne az. Ve OOP (ki herkesin gözünü korkuttu) her ikisinde de tamamen aynı. Bilmiyordum? İnternette korku hikayeleri okudunuz ve YouTube'da "iyi-makul-ebedi" eken yeterince blogcu gördünüz mü? İnsanları bilinçli olarak MQL5'ten korkutarak, akıllıca saçma sapan şeyler söylüyorlar.

Hayal kırıklığına uğratmak için acele ediyorum - her iki dil de tamamen aynı. Hem anlama kolaylığı açısından hem de OOP'nin olanakları ve kullanılabilirliği açısından.
Doğru, MQL5'te daha fazla fırsat var.

Evet, genel olarak katılıyorum ve 4k'de OOP memnun))), ancak yeni başlayanların erişiminde, kendi deneyimlerine göre, 4k'da Kovalev, Zhdan'ın ders kitapları ve 5k ve OOP'ta anlaşılmaz Mishin. Onu nasıl anlayacağımı bilmiyorum. Kapsüllemeyi tekrar etmeyen ne kadar çok biçimcilik anlayışı gelmeyecek. Ve önce hangisini okuyacağını bilmediğin makaleler. Ve nereye bakmalı. Bu nedenle, başlatma işlevinden çıkış hala ontik'teki kod tabanında bulunur)))))
 
ANDREY :

Evet. Bu doğru alanlara, yani BAŞLAT yerine yeni işlevlere dikkat ediyordum. Ancak bunlara hiç önem vermedi ve yine de BAŞLAT'ı test için kullandı.
En son MQL4 güncellemeleri hakkında daha fazla bilgiyi nerede bulabileceğinizi biliyor musunuz?Aksi takdirde, her yerde çok fazla bilgi vardır ve doğru olanı bulmak çok zordur. Bazen nereye bakacağımı bile bilmiyorum.Kovalev'in ders kitabını gerçekten seviyorum çünkü içindeki tüm bilgiler mantıksal olarak yapılandırılmış ve bu nedenle beyne kolay ve hızlı bir şekilde giriyor. Ve gerekli tüm incelikleri anlayacak kadar ayrıntılı. Neden MQL5 için de bir eğitim yazmadığını merak ediyorum.

Alexey Viktorov'un dediği gibi: mql5'in mql4'ten yalnızca OrderSend() işlevinde ve belki de hatırlamadığım birkaç işlevde farklı olduğu basit gerçeğini anlayın. Bir diğer önemli fark, indeksleme göstergesi tamponlarının yönüdür . Ancak bu, yeniliğe alışmak daha iyi olsa da, bir çimdik içinde çözüldü. Ve gösterge değerlerini almak aynı kalır.
Yeni başlayanlar için OOP ile ilgili makaleler yardımcı oldu. Ve bir editörün notu.
 
ANDREY :

Katıldığınız için teşekkürler.

...

Aşağıdaki kod sadece böyle bir kod yazma girişimidir. Gelecekte bu kodu geliştirmeye devam edeceğim. Ama şimdi çözecek bilgiye sahip olmadığım bir problemle karşı karşıyayım.
Lütfen beni yargılamayın ve kodum çok sert.... Kodlamanın temellerini ve biraz daha fazlasını yeni yeni anlamaya başlayan bir acemiyim. Ama eleştiriyi sakince alıyorum ve gücenmiyorum ..... özellikle yapıcı.

Yardım için teşekkürler.

Eğer iki veya daha fazla sipariş aynı tik üzerinde kapatılmışsa, program Print()'i ancak bu tik üzerinde son sipariş kapatıldıktan sonra yazdırır. Ve her kapalı siparişten sonra Print()'e ihtiyacım var. Bunu nasıl başaracağımı bilmiyorum. Ama doğru kodu görürsem hemen her şeyi anlayacak ve hatırlayacağım.

Aşağıda benim sorunumun bir örneği var


Sana zaten cevap verdim:

Sözlü açıklama:Emir ve pozisyon sayısını takip etmeniz ve bunları önceki durumla karşılaştırmanız gerekir. Son tikte 12 pozisyon varsa ve mevcut tikte 8 tane varsa, o zaman 4 pozisyon değişikliğimiz olur. Buna göre, onlara ne olduğunu anlamak için son dört pozisyonu (kapanış süreleri açısından) almanız gerekiyor.

Listedeki son siparişi alırsınız:

 int Ht = OrdersHistoryTotal();
////******************************************************************
if ( OrderSelect (Ht- 1 ,SELECT_BY_POS, MODE_HISTORY))

Ve önce devletin siparişler listesinde ne kadar değiştiğini bulmanız gerekiyor. 12 oldu, 8 oldu - 4 siparişe dönüştü. Buna göre, dört siparişi de yazdırmanız gerekir. Ve her zaman listedeki yalnızca sonuncuyu yazdırırsınız.

Ne kadar değiştiğini nereden biliyorsun? Danışmanı başlatırken bir değişkene emir sayısını yazmak gerekir, örneğin int last_total. Ardından, her işarette OrdersTotal() ile last_total'ı karşılaştırın. Eşit DEĞİLSE, bir değişiklik meydana gelmiştir. OrdersTotal() ve last_total arasındaki farkı num_changes gibi bir değişkene yazın ve OrdersTotal() öğesinin yeni durumunu last_total içinde saklayın.
Burada, örneğin bekleyen siparişler tetiklendiğinde nüanslar olabilir. Ama şimdilik, başlamak için gerekeni yapacaksın.
Eksik siparişlerin sayısını bilerek, bunları geçmişte görebilirsiniz. Ancak, kendinizi yalnızca geçmiş listedeki siparişleri kontrol etmekle sınırlayabilirsiniz - yukarıda açıklanan her şeyi piyasa listesi için değil, geçmiş siparişler listesi için yapın. Olan ve ne olduğu arasındaki fark, analiz edilmesi gereken siparişlerin sayısıdır. Her zaman listedeki yalnızca sonuncuyu analiz edersiniz.

Aynı zamanda, hiç kimse tarihsel listedeki son siparişin kapatılan son sipariş olacağını garanti etmez. Bunlar ayrıca dikkate alınması gereken nüanslardır. Ama sonra.

Neden: