tamamen kayboldum

 

Ben sizin deyiminizle bir "EA" yaratmak istiyorum. Bunu bir kısaltma olarak kullanmaya devam etmen komik olsa da, bana kalırsa, "evrimsel algoritma" anlamına geliyor, bu da benim yöntemimin tam olarak ne olduğu. Çalışırsa. Yayılma yeterince düşükse, bunu yapar. Çitin üzerinde.

Her neyse, programlama deneyimim var. Ve gördüğüm kadarıyla MQL4, C++ ile hemen hemen aynı görünüyor. Ama bazı önemli detayları kaçırıyorum. Değişkenleri, sabitleri ve birçok farklı şeyi zaten biliyorum, ancak çalışmak için bir tür temel şablona ihtiyacım var ve birkaç kavramsal şeyde biraz eksikim. Birisi basit ama ihtiyacım olan tüm unsurlara sahip olan ve her bir parçasının ne yaptığını açıklayan bir tür berbat örnek ticaret robotu programı gönderebilir mi ve sonra "aha, yapmam gerekeni böyle yapıyorum" diyebilirim.

Temel olarak, programımın bilgisayarımın RAM'ine aşağıdakileri indirebilmesini istiyorum (verileri döviz alım satım platformu aracılığıyla bilgisayarıma indiriyor):

al ve sat fiyatları için yüksek,düşük,açık,kapalı verileri (çünkü spreadin değeri değişebiliyor) program içinde belirttiğim (eğer yapılabiliyorsa) en günceli de dahil olmak üzere belirli bir süre için ya en yakın zamanda tamamlanır (yani, zaman aralığı ne olursa olsun, her dakika veya her 5 dakikada bir veya 10 dakikada bir vb.) veya muhtemelen her tıklamada - fiyat her değiştiğinde - bunlardan hangisi yapılabilirse, ben de istiyorum. sonuncunun tamamlanmasından bu yana geçen süreyi temsil eden bir değişkene sahip olabilir (bu nedenle, her 10 dakikada bir ise, 0'dan 10 dakikaya kadar sayılan her tik ile güncellenen bir değişken olacaktır ve 10 dakika, verilerin başka bir güncellemesi var), ayrıca hesabın tasfiye anındaki toplam değerini de indirmek, toplam pozisyon sayısını ve pozisyonların büyüklüğünü ve pozisyonların türünü (örneğin USD/JPY) indirmek istiyorum. 10000 veya 100000 DOLAR değerinde yen, ancak EUR/USD 10000 veya 10000'dir 0 EUROS değerinde, ancak hesap değerim dolar cinsinden olacak, bu nedenle bir pozisyonun değişken lot büyüklüğünü belirleyebilmesi gerekiyor). Mevcut alış ve satış fiyatlarından program, elbette, spread'in mevcut değerini elde etmek için birini diğerinden çıkarabilir.

SONRA programın aşağıdaki işlemleri yapabilmesini istiyorum (bilgisayarımdan döviz alım satım platformu aracılığıyla veri yükleme)

piyasa emirleri veya limit emirleri yoluyla satın alma veya satma. Ayrıca, lütfen bana bir limit emri mi koydum, ancak geçtiğindeki fiyat, bana koyduğum limit fiyatı vermesini bekleyebilir miyim, yoksa daha iyi olabilir mi? Örneğin, alış için EUR/USD fiyatının 1.3500 olduğunu ve 1.3501'de bir limit emrim olduğunu varsayalım, 1.3501 mi yoksa 1.3500 mi ödeyeceğim? Komisyoncunun beni orada aldatmasını beklemeli miyim? Yoksa, emir sisteme girdiğinde fiyatın 1.3502 veya daha fazla olması durumunda, gerçekleşmeyecek olması dışında, bir piyasa emri vermekle işlevsel olarak aynı mı?

SON OLARAK, örnek programın başka bir işleve bir işlev çağrısını içermesini istiyorum. İçine iletilen verilerle bir tür basit hesaplama gerçekleştiren ve bir değer döndüren basit bir şey - MQL4'te olduğu gibi hem değere göre hem de referansa göre geçmek mümkünse, lütfen her birinin bir örneğini ekleyin (yorum yapıldı) ne yaptığınızı göstermek için) örnek programda.

Ayrıca, C++'da olduğu gibi genellikle birden fazla gerçek dosya içeriyorsa (mql4 uzantılı?) Bunun için bir derleyiciye ihtiyacım var ve sonra ticaret platformu makine kodunu veya derleyici tarafından üretilen her şeyi kullanıyor mu?

Eğer birisi bunu, tüm bu unsurları içeren sahte bir program yapmak için yapsa, sadece benim için değil, aynı zamanda başkaları için de faydalı olacağını hayal ediyorum. Bunu yapan herkese şimdiden teşekkür ederim.

 
Oh oh, daha da iyisi, 0'dan başlayan ve 10 dakikaya kadar sayan değişken için (veya ne zaman kullanırsanız kullanın) - normalleştirilmelidir - zaman birimine bölünür - böylece 0 ile 1 arasında değişen bir double olur Ölçeklendirme faktörü ile ilgili bir sorun olması durumunda bunu söylüyorum. Bu şekilde, belki 5 dakikalık bir grafiğe veya 10 dakikalık bir grafiğe veya 1 dakikalık bir grafiğe uygulanabilir, ancak zaman birimi ne olursa olsun, bu değişken her zaman 0 ile 1 arasındadır.
 
mql4 hakkında bilmeniz gereken her şeyi size bir anda verecek böyle bir program yok. Halihazırda bazı programlamalarınız olduğundan, örneğin ea kod tabanını gözden geçirmenizi tavsiye edeceğim. Kodlara bakarak öğrenmeyi sevmiyorsanız, bunun yerine bir dil açıklamasını seviyorsanız, mql4_book'a bakın . Ayrıca, kolay başvuru için belgeler var.
 
Biri yazacak mı diye soracaktım. Dilin temel formatını biliyorsanız, 5 dakika kadar sürmesi gerekir, yazımı okuması kadar sürmesi gerekir. Sadece programı yazın, bunların her birine birer örnek yazın ve koyun. mql4 kitabına baktım, bir değişkenin ne olduğunu açıklamadan, fonksiyonlar hakkındaki bilgim hakkında varsayımlarda bulunmaya doğru gidiyor ve ihtiyacım olandan çok daha basitten hazır olduğumdan daha fazlasına gittiği geçiş noktasını bulmaya çalışırken uykum geliyor. anlamak için. Biliyorsunuz, birinden benim için bir "ekonomik danışman" yazmasını istemiyorum, sadece içinde kullanmak isteyebileceğim her talimatı içeren aptalca bir şey. Kullanmak isteyebileceğim herhangi bir bilgiyi ve girmek isteyebileceğim her talimatı bilgisayarıma değişkenler halinde indiren bazı şeyler - ki şimdi düşününce, sadece alış ve satış limiti ve piyasa emirleri olmak değil, aynı zamanda ayrıca mevcut emirleri iptal eden bir şey, sonuçta, gerçekleşmemeleri durumunda ortalıkta dolaşan herhangi bir dağınık limit emri bırakmak istemem, programın onları unutmasını istemem.
 
zortharg : Biri yazacak mı diye soruyordum. Dilin temel formatını biliyorsanız, 5 dakika kadar sürmesi gerekir, yazımı okuması kadar sürmesi gerekir. Sadece programı yazın, bunların her birine birer örnek yazın ve koyun. mql4 kitabına baktım, bir değişkenin ne olduğunu açıklamadan, fonksiyonlar hakkındaki bilgim hakkında varsayımlarda bulunmaya doğru gidiyor ve ihtiyacım olandan çok daha basitten hazır olduğumdan daha fazlasına gittiği geçiş noktasını bulmaya çalışırken uykum geliyor. anlamak için. Biliyorsunuz, birinden benim için bir "ekonomik danışman" yazmasını istemiyorum, sadece içinde kullanmak isteyebileceğim her talimatı içeren aptalca bir şey. Kullanmak isteyebileceğim herhangi bir bilgiyi ve girmek isteyebileceğim her talimatı bilgisayarıma değişkenler halinde indiren bazı şeyler - ki şimdi düşününce, sadece alış ve satış limiti ve piyasa emirleri olmak değil, aynı zamanda ayrıca mevcut emirleri iptal eden bir şey, sonuçta, gerçekleşmemeleri durumunda ortalıkta dolaşan herhangi bir dağınık limit emri bırakmak istemem, programın onları unutmasını istemem.

Bence yanlış yere geldiniz.

Bu forumda başkaları için kod yazmıyoruz.

Kendi kodunuzu yazmanızı bekliyoruz.

Sıkışırsanız, sizi doğru yöne yönlendiririz.

Birinin sizin için kod yazmasını istiyorsanız, buraya gidin.

mql4 ve mql5 yaparlar.

 
zortharg :

[...]

Pekala, bu, birkaç gün içinde yapılacak olan MT4'e yapılan büyük güncellemeyi tartışmaktan bir değişiklik yapıyor.


Ben sizin deyiminizle bir "EA" yaratmak istiyorum. Bunu kısaltma olarak kullanmaya devam etmen komik olsa da

Geçmişinize bağlı. İyi ya da kötü, MT4 ve MQL4 şu anda dünya çapında perakende döviz piyasasında neredeyse tekele sahip ve "EA" terimi, en azından yüz binlerce insan için anlam ifade ediyor.


Gördüğüm kadarıyla MQL4, C++ ile hemen hemen aynı görünüyor.

MQL4 dilinin etkin olarak iki versiyonu vardır. Son 9 yıldır var olanın sınıfı veya nesnesi yoktur ve bu nedenle C++'dan çok C'ye benzer. Öte yandan, işaretçiler veya açık bellek tahsisi yoktur.

MT4 ve MQL4'ün yeni sürümü - gelecek Pazartesi canlı yayında olacak - sınıflar ekliyor, ancak yine de gerçekten açık bellek tahsisi ve yönetimi olmadan. Bunun daha çok C++ gibi mi yoksa Javascript'e mi benzediği, ancak ördek yazma ve lambda işlevleri vb. Olmaması tartışmalıdır.


Temel olarak, programımın bilgisayarımın RAM'ine aşağıdakileri indirebilmesini istiyorum [...]

İşleri biraz basitleştirirsek, platform bunu sizin için otomatik olarak yapar ve standart davranışını geçersiz kılmak için kolay bir yolunuz yoktur. Herhangi bir harici fiyat verisini indirmek ve ardından MQL4'te - özellikle yeni genişletilmiş sürüm yerine geleneksel MQL4'te - manipüle etmek hoş değil.

Güncel fiyatları alabilir ve platformun sunduğu tüm zaman dilimleri için geçmiş fiyatları kolayca değiştirebilirsiniz: M1, M5, M15 vb, ancak M3, H2 vb. değil.


alım ve satım fiyatları için yüksek, düşük, açık, kapalı veriler (çünkü spreadin değeri değişebilir)

Yayılma gerçekten değişebilir, ancak MT4 platformunun büyüleyici özelliklerinden biri, yalnızca tarihi teklif fiyatları sağlamasıdır. (Mevcut fiyatlar ve cari spread açıkça mevcuttur.)


Ayrıca tasfiye sırasında hesabın toplam değerini [...] toplam pozisyon sayısını ve boyutunu [...] indirmek istiyorum ama hesap değerim dolar olacak

Aslında, platform bu verileri sürekli olarak aktarır. Bunun açık bir "indirilmesi" yoktur. Örneğin, MQL4 kodu, AccountEquity() işlevi aracılığıyla hesabın mevcut özkaynağına sürekli olarak erişebilir. Açık pozisyonlar, mevduat para biriminizde otomatik olarak raporlanır.


Örneğin, alış için EUR/USD fiyatının 1.3500 olduğunu ve 1.3501'de bir limit emrim olduğunu varsayalım, 1.3501 mi yoksa 1.3500 mi ödeyeceğim?

Komisyoncuya bağlıdır, ancak genel olarak platform/komisyoncu, mevcut BBO'da veya ötesinde bir limit emri kabul etmeyecektir. Bunun için hemen bir istisna düşünemiyorum.


C++'da olduğu gibi genellikle birden fazla gerçek dosya içeriyorsa (mql4 uzantılı?) veya genellikle tek bir mql4 dosyasıysa

Genel olarak konuşursak, bir proje yalnızca bir .mq4 dosyasından oluşabilir, ancak birden çok #included .mqh dosyası olabilir. Bu nedenle ortak kod kitaplıklarına sahip olabilir ve bunları projeler arasında yeniden kullanabilirsiniz. Yapamayacağınız şey, pari passu'da bulunan, yani aynı projenin parçası olarak birlikte derlenen birden çok .mq4 dosyasına sahip olmaktır. MQL4'ün kökeni C'ye rağmen, tipik bir büyük projenin yapısı farklıdır: bir .mq4 dosyası ve ayrıca çeşitli türlerde bir veya daha fazla kitaplık (önceden derlenmiş veya #dahil edilmiştir).


daha sonra ticaret platformu makine kodunu veya derleyici tarafından oluşturulan her şeyi kullanır

Derleyici, makine kodu yerine bir tür bayt kodu/p kodu/aramak istediğiniz her neyse onu oluşturur. .mq4 dosyalarını açık bir şekilde derleyebilir veya bunları yazılımın gerekli klasörüne koyabilirsiniz; bunlar otomatik olarak derlenecek ve bir sonraki başlatmada kullanıma sunulacaktır.


Biri bunu yapsa, tüm bu unsurları içeren sahte bir program yapmak için sadece benim için değil, aynı zamanda başkaları için de faydalı olacağını düşünüyorum.

İyi bir zaman değil. Bu forumdaki herkes, 9 yıl içinde MQL4'e yapılan ilk gerçekten önemli güncelleme hakkında tartışmakla fazlasıyla meşgul.

 
zortharg : Biri yazacak mı diye soruyordum.
Sadece üç seçeneğiniz var: Arayın , kodlamayı öğrenin veya birine ödeme yapın. Bunu sizin için kodlamayacağız. Denemenizi ( SRC kullanarak) ve probleminizin doğasını yayınladığınızda size YARDIMCI olmaya hazırız.
 

Kimseden benim için ticari değeri olan bir şey üretmesini istemiyordum. Birinden "yöntemimi benim için kodlamasını" istemiyorum, WHRoeder. Sadece bir başlangıç noktasına ihtiyacım var. "Arama" altına koyduğunuz bağlantıdan bir şeyler anlayabilirim, ancak gerçekten çıplak bir kemik "gerekli olan bu" istiyorum. Programın gerçekte nasıl görünmesi gerektiğini bilmiyorum. İçinde olmak için kesinlikle neyin gerekli olduğunu bilmiyorum. Herhangi bir referans noktası olmadan birdenbire kendim yapmaya çalışırsam, derleyici hataları alacağım çünkü neyin eksik olduğunu bile bilmeyeceğim. Ve çalışması gereken bir şey yaparsam, onu yanlış başlatırım ve doğru yaptığımı bile bilmem. Tamam, buna ne dersin? Basit bir örnek. Gerçek hayatta yapsaydınız paranızı kaybedecek bir şey: cüretkarlık*(hesabınızın değeri)*(şimdiki fiyat ile 1 zaman birim önceki fiyat arasındaki fark)/X pozisyonunu koruyan uzman bir danışman ve X, 1'den başlar, ancak her birim zaman, X, X=.9*X+.1*(şimdiki fiyat-birim önceki 1 zamandaki fiyat)^2 olacak şekilde güncellenir ve cüret, kullanıcı tarafından belirlenen bir parametredir. Ve kaç tane alıp satacağını belirlemek için, zaten sahip olduğu pozisyonları da belirlemesi gerekiyor. Yani sadece aptal bir program ama hemen hemen başlangıç noktası olarak çalışmam gereken tüm unsurlara sahip.

gchrmt4 teşekkürler. Bir çok soruma cevap verdin. Ancak "platformun sunduğu tüm zaman dilimleri için tarihi fiyatları kolayca manipüle edebilirsiniz" dediğinizde, bunu nasıl yapabilirim? Belirli bir zamanda bir fiyat döndüren AccountEquity()'ye benzer bir fonksiyon var mı ve ona zaman birimlerini önce veriyorsunuz ve açık düşük yüksek kapanış isteyip istemediğinizi ve ne tür zaman birimleri kullandığını? Zaman birimlerinin türü, uyguladığınız grafiğin türüne göre mi belirleniyor? Yani, 1 dakikalık bir grafiğe uygularsanız, 1 zaman birimi önce 1 dakika öncesini ifade eder, ancak 5 dakikalık bir grafiğe uygularsanız, 1 zaman birimi önce 5 dakika öncesini ifade eder veya zaman adımı zor mu? bir grafiğe uygulanmak yerine programın kendisine kodlanmış mı? Ve mevcut yayılma, buna nasıl erişebilirim? Bu şeylerin "akış" olduğunu ve kolayca erişilebilir olduğunu söylüyorsunuz ama bunlara nasıl erişiliyor?

Vermeyi seçtiğiniz herhangi bir yardım için teşekkür ederiz.

 
zortharg :
Belirli bir zamanda bir fiyat döndüren AccountEquity()'ye benzer bir fonksiyon var mı ve ona zaman birimlerini önce veriyorsunuz ve açık düşük yüksek kapanış isteyip istemediğinizi ve ne tür zaman birimleri kullandığını? Zaman birimlerinin türü, uyguladığınız grafik türüne göre mi belirleniyor? Yani, 1 dakikalık bir grafiğe uygularsanız, 1 zaman birimi önce 1 dakika öncesini ifade eder, ancak 5 dakikalık bir grafiğe uygularsanız, 1 zaman birimi önce 5 dakika öncesini ifade eder veya zaman adımı zor mu? bir grafiğe uygulanmak yerine programın kendisine kodlanmış mı? Ve mevcut yayılma, buna nasıl erişebilirim? Bu şeylerin "akış" olduğunu ve kolayca erişilebilir olduğunu söylüyorsunuz ama bunlara nasıl erişiliyor?

Vermeyi seçtiğiniz herhangi bir yardım için teşekkür ederiz.

Bütün bir zaman serisi işlevi ailesi var. Örneğin, iHigh("USDJPY", PERIOD_H1, 2) size USDJPY H1 çubuğunun 2 çubuk gerisinin yüksek değerini verecektir (mevcut devam eden çubuğun #0 olduğu yerde). Zamanları çubuk indekslere dönüştürmek için işlevler vardır.

Mevcut yayılma çeşitli şekillerde kullanılabilir. En basiti Ask - Bid'dir (bu, kodunuzun grafiğinde çalıştığı sembolün dağılımını verir). Mevcut grafiğe farklı bir sembolün yayılması, farklı rotalar aracılığıyla kullanılabilir ve MarketInfo("symbol", MODE_ASK) - MarketInfo("symbol", MODE_BID) veya MarketInfo("symbol", MODE_SPREAD gibi farklı terimlerle ifade edilir. )

 

@zortharg

Burada dokümantasyon adı verilen bir şey var (kısmen kullanımdan kaldırıldı): docs.mql4.com/

ve burada (yakında, kısmen geçerli değil): mql5.com/en/docs


Orada bilmek istediğiniz her şeyi bulacaksınız; ayrıca terminalin kendisinde de örnekler var. Komut dosyası örnekleri, uzman danışmanlar ve göstergeler. Ayrıca MQL'nin ötesindeki şeyleri başarmak için DLL'leri içe aktarabilirsiniz .

Oradan alabilirsen, hazırsın, değilse de...


 

İsteğinizi anlıyorum, başlamak için çalışan bir örnek çok faydalı

https://www.mql5.com/en/code

ayrıca Google'da öğrenmek için ücretsiz uzman danışman kaynakları bulabilirsiniz.

basit görevler yapan kodu arayın, bunları işlevler halinde gruplandırın ve kodunuzu basit ve okunabilir tutmaya çalışın

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if ( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}
Neden: