EA birden çok çift için nasıl çalıştırılır? - sayfa 3

 

Jacques, bu konuya olan ilgini takdir ediyorum. Hala ilk para birimi için EA'mda hata ayıklıyorum, ancak uygun bulunursa birkaçında kullanmayı düşünüyorum. Bu öncülde, bu kavramın nasıl uygulanacağına dair bir strateji tasarlıyorum. Böylece, bu konuya olan ilgim.


Talebiniz üzerine üç çift için daha grafikler hazırladım ve bunu yaparken iki çiftin 24 saatte (Excel'deki grafik veri limiti) 32.000'den fazla tik aldığını keşfettim. Sonuç olarak, grafiği iki döneme ayırmak zorunda kaldım (1. 12 saat ve 2. 12 saat). İşleri nispeten tutarlı tutmak için üç çifti de 12 saatlik periyotlara böldüm.


Akılda tutulması gereken bir şey, bu grafiklerdeki dikey ölçek yatay çizgiler arasında orantılıdır, ancak yatay ölçek zamanla orantılı DEĞİLDİR (yani, tiklerin 1/12'sinin bir saati temsil ettiğini varsayamazsınız)


Bence bu grafiklerden en büyük çıkarım, tüm çiftlerin 24 saatlik bir periyotta keneler arasında önemli aralıkların olduğu periyotlara sahip olmasıdır. Sonuç olarak, birden fazla çifti tek bir EA'da birleştirirseniz, bir "While" döngüsü kullanmanın akıllıca olacağını düşünüyorum. StraightTrader'ın "Karmaşık Programların Genel Özellikleri" başlıklı https://book.mql4.com/special/index referansı, bu teknik hakkında iyi bir tartışmaya ve bu makalenin açılış bölümünde bir grafiğe sahiptir.


24 saat içinde GBPJPY 44.834 kene

24 saat içinde EURJPY 37.140 kene

24 saat içinde GBPUSD 29.313 kene

24 saat içinde 22.627 EURUSD kene













Şerefe!

 
FXtrader2008 :

Sonuç olarak, birden fazla çifti tek bir EA'da birleştirirseniz, bir "While" döngüsü kullanmanın akıllıca olacağını düşünüyorum. StraightTrader'ın "Karmaşık Programların Genel Özellikleri" başlıklı https://book.mql4.com/special/index referansı, bu teknik hakkında iyi bir tartışmaya ve bu makalenin açılış bölümünde bir grafiğe sahiptir.

Durum tam olarak bu. Bir EA'daki çoklu çiftler -> gelen keneler ile fonksiyon aktivasyonunu başlatmak yerine while döngüsü yaklaşımını kullanın.


Bir EA için bir döviz çiftine karşı olmak istiyorum.

Uzun vadeli yaklaşımım, BİR ÇOK PARA BİRİMLİ ÇOKLU STRATEJİ EA'dır. Bu fikirlerden bazılarını uygulayan Evrensel Uzman Danışman şemasını bir süre önce hazırladım.

Daha sonra yazımda yer almayarak bu kodu geliştirerek takip ettim ve Universaltrader adlı Google kod projesini başlattım. Bu proje beklentilerinizi karşılayabilir. Burada uygulanmayan tek şey, while döngüsü yaklaşımıdır (uygulaması kolay).


MULTICURRENCY MULTISTRATEGY EA'nın bazı avantajları:

  • tüm stratejiler bir arada
  • tüm stratejileri birlikte ve ayrıca bağımsız olarak ayarlamak/ayarlamak mümkün
  • farklı stratejileri/döviz çiftlerini AÇMAK/KAPATMAK mümkündür
  • eminim daha birçok varmı

dezavantajları:

  • aynı anda yalnızca bir döviz çiftini geriye dönük test etme imkanı - diğer çiftler kapalıyken kaç döviz çiftiyle işlem yaptığınızı birçok kez geriye dönük test yapmanız gerekir
  • performans sorunu - Performans sorununu yalnızca geriye dönük testte fark ettim, ancak gerçek ticarette de alakalı olduğundan eminim - uygulanan stratejilerin karmaşıklığına ve bunların sayısına bağlıdır.

Bu projenin hala iyileştirilmesi gerekiyor, bu yüzden herhangi birinin ilgisi varsa, onu bu Google kod projesine davet edebilirim.


Güncel komut dosyası buraya ekli:

 
FXtrader2008 wrote >>

Jacques, bu konuya olan ilgini takdir ediyorum. Hala ilk para birimi için EA'mda hata ayıklıyorum, ancak uygun bulunursa birkaçında kullanmayı düşünüyorum. Bu öncülde, bu kavramın nasıl uygulanacağına dair bir strateji tasarlıyorum. Böylece, bu konuya olan ilgim.

Talebiniz üzerine üç çift için daha grafikler hazırladım ve bunu yaparken iki çiftin 24 saatte (Excel'deki grafik veri limiti) 32.000'den fazla tik aldığını keşfettim. Sonuç olarak, grafiği iki döneme ayırmak zorunda kaldım (1. 12 saat ve 2. 12 saat). İşleri nispeten tutarlı tutmak için üç çifti de 12 saatlik periyotlara böldüm.

Akılda tutulması gereken bir şey, bu grafiklerdeki dikey ölçek yatay çizgiler arasında orantılıdır, ancak yatay ölçek zamanla orantılı DEĞİLDİR (yani, tiklerin 1/12'sinin bir saati temsil ettiğini varsayamazsınız)

Bence bu grafiklerden en büyük çıkarım, tüm çiftlerin 24 saatlik bir periyotta keneler arasında önemli aralıkların olduğu periyotlara sahip olmasıdır. Sonuç olarak, birden fazla çifti tek bir EA'da birleştirirseniz, bir "While" döngüsü kullanmanın akıllıca olacağını düşünüyorum. StraightTrader'ın "Karmaşık Programların Genel Özellikleri" başlıklı https://book.mql4.com/special/index referansı, bu teknik hakkında iyi bir tartışmaya ve bu makalenin açılış bölümünde bir grafiğe sahiptir.

24 saat içinde GBPJPY 44.834 kene

24 saat içinde EURJPY 37.140 kene

24 saat içinde GBPUSD 29.313 kene

24 saat içinde 22.627 EURUSD kene

Şerefe!

Çizelgeleriniz için çok teşekkürler.

Tik çalıştırma aktivasyonu yerine bir döngü seçelim, dakika hassasiyetine ihtiyaç duyanlar için daha bilimsel olacak ve uygulanması çok da önemli değil. Diğer bir avantaj da, EA'yı istediğiniz döviz çiftine ekleyebilmenizdir (grafiğe nesne çizdiğinde kullanışlıdır).

Şerefe

 
cloudbreaker wrote >>

Ayrıca MarketInfo() işlevini kullanarak mevcut grafiğin dışındaki semboller için en son talep ve teklif fiyatlarını alabilirsiniz.

Yani aşağıdaki gibi seçenekleriniz var.

- Aynı EA'nın birçok çizelgeye eklenmesini ve her grafiğin yerel sembolü için çalışmasını sağlayın (yerleşik Ask ve Bid değişkenlerini kullanarak)

- Seçilen tüm semboller için (yerel olmayan semboller için MarketInfo() işleviyle) çalışan belirli bir çizelgeye bir EA iliştirin - yalnızca yerel sembol işaretlerini bir tetikleme cihazı olarak kullanın

- Birinin diğeri tarafından tetiklendiği farklı çizelgelere eklenmiş ana ve bağımlı EA'lara sahip olun (örn. biri bir dosyaya bir değer yazar, diğeri bu verileri bulana kadar dosyayı sürekli okur ve ardından işlem yapar)

Şu anda, bu stratejilerin en basitini kullanıyorum - dört para biriminden oluşan üç zaman diliminde bir EA'm var, yani toplamda on iki. Hepsi, zaman çerçevesinin ilk tikinde çalışacak şekilde ayarlanmıştır. Ancak, MT4'ün her zaman tüm EA'ları yürütmemesiyle ilgili bir sorun yaşıyorum. Sadece ne olduğunu görmek için başlatma işlevinden hemen sonra bir baskı ifadesi koydum ve örneğin H1'in dört EA'sından yalnızca üçüne ulaşıyordu, ancak farklı zamanlarda farklı çiftler eksikti ve EA, ayarlar dışında aynıydı. her bir çift için optimizasyonlardan.

Soru - Birden çok EA aynı anda çalışacak şekilde ayarlandığında, MT4 bir seferde yalnızca bir EA yürütür mü? Bir EA'nın yürütülmesi herhangi bir şekilde diğerininkine bağlı mı (ticari bağlamın meşgul olması dışında) yoksa tamamen bağımsız mı?

Eğer öyleyse, ikinci seçeneği kullanabilirim, sadece EA'yı olabildiğince basit tutmaya çalışıyorum çünkü en azından benim için ne kadar karmaşık yazarsam, o kadar çok hata yaparım.

 
joetrader :

Şu anda, bu stratejilerin en basitini kullanıyorum - dört para biriminden oluşan üç zaman diliminde bir EA'm var, yani toplamda on iki. Hepsi, zaman çerçevesinin ilk tikinde çalışacak şekilde ayarlanmıştır. Ancak, MT4'ün her zaman tüm EA'ları yürütmemesiyle ilgili bir sorun yaşıyorum. Sadece ne olduğunu görmek için başlatma işlevinden hemen sonra bir baskı ifadesi koydum ve örneğin H1'in dört EA'sından yalnızca üçüne ulaşıyordu, ancak farklı zamanlarda farklı çiftler eksikti ve EA, ayarlar dışında aynıydı. her bir çift için optimizasyonlardan.

Soru - Birden çok EA aynı anda çalışacak şekilde ayarlandığında, MT4 bir seferde yalnızca bir EA yürütür mü? Bir EA'nın yürütülmesi herhangi bir şekilde diğerininkine bağlı mı (ticari bağlamın meşgul olması dışında) yoksa tamamen bağımsız mı?

Eğer öyleyse, ikinci seçeneği kullanabilirim, sadece EA'yı olabildiğince basit tutmaya çalışıyorum çünkü en azından benim için ne kadar karmaşık yazarsam, o kadar çok hata yaparım.

Grafiklerde böyle bir sorun olmadan çalışan birden fazla EA var. Anladığım kadarıyla, aynı anda çalışıyorlar, ancak birbirlerini fark ettikleri zaman, ticaret bağlamı bunlardan biri tarafından kullanıldığında oluyor. EA'nın kendisine gelince, tamamen bağımsızdır - her birinin kendi değişken kopyaları vardır, vb. Şunu açıklığa kavuşturmama izin verin - 12 çizelgeye eklenmiş 12 EA çalıştırıyorsunuz? Belki hafıza problemin var?

 
gordon wrote >>

Grafiklerde böyle bir sorun olmadan çalışan birden fazla EA var. Anladığım kadarıyla, aynı anda çalışıyorlar, ancak birbirlerini fark ettikleri zaman, ticaret bağlamı bunlardan biri tarafından kullanıldığında oluyor. EA'nın kendisine gelince, tamamen bağımsızdır - her birinin kendi değişken kopyaları vardır, vb. Şunu açıklığa kavuşturmama izin verin - 12 çizelgeye eklenmiş 12 EA çalıştırıyorsunuz? Belki hafıza problemin var?

Doğru. 12 listede 12 EA. 6GB belleğe sahip oldukça yeni bir bilgisayar, bu yüzden bellek olacağını düşünmezdim , ama dikkate almaya değer ve bunu göz ardı etmeyeceğim. Ama sorumu yanıtladınız - EA'ların aynı anda çalışabilmesi gerekiyorsa, belki de yanlış bir şey yapıyorum. İlk kez değil! Kodu kontrol edip biraz daha çalışacağım. Yardımın için teşekkürler.

 
Grafikleri MT4 istemcisinin ayrı örneklerinde mi çalıştırıyorsunuz? Tüm çizelgeleri tek bir durumda açıyorsanız, bunlar tek bir ticaret bağlamını paylaşacaklardır ve bu bağlamı paylaşmak için mantıkta kodlamanız gerekecektir - EA'larınızın davranışı, birden fazla ticaret işlemi gerçekleştirme olasılığı anlamına geliyorsa aynı zamanda. CB
 
cloudbreaker wrote >>
Grafikleri MT4 istemcisinin ayrı örneklerinde mi çalıştırıyorsunuz? Tüm çizelgeleri tek bir durumda açıyorsanız, bunlar tek bir ticaret bağlamını paylaşacaklardır ve bu bağlamı paylaşmak için mantıkta kodlamanız gerekecektir - EA'larınızın davranışı, birden fazla ticaret işlemi gerçekleştirme olasılığı anlamına geliyorsa aynı zamanda. CB

Evet - Onları aynı MT4 istemcisinde çalıştırıyorum. Ancak bu makaledeki ticaret bağlamı meşgul çözümlerinden birini kullanıyorum https://www.mql5.com/en/articles/1412 ve herhangi bir ticaret bağlamı meşgul hatası almıyorum.

Bir pozisyon açmaya çalışacak noktaya bile gelmiyor gibi görünüyor. Bazıları için EA'yı hiç başlatmıyor gibi görünüyor. Bunu söylüyorum çünkü başlatma işlevimin başına bir print ifadesi koydum.

İşte başlatma işlevim:

geçersiz başlangıç()
{
//---- sadece yeni çubuğun ilk tikleri için işlem yap
if(Volume[0]>1) dönüşü;
Print("Tık Kontrol");

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
başka CheckForClose();
}

CADJPY,EURCHF,GBPUSD ve USDJPY ile işlem yapıyorum

Ve şunu anlıyorum:

2010.01.22 8:59:45 [EAName]USDJPY,H1: Onay Kontrolü

2010.01.22 8:59:45 [EAName]CADJPY,H1: Onay Kontrolü

2010.01.22 8:59:45 [EAName]GBPUSD,H1: Onay Kontrolü

2010.01.22 9:59:45 [EAName]EURCHF,H1: Onay Kontrolü

2010.01.22 9:59:46 [EAName]GBPUSD,H1: Onay Kontrolü

2010.01.22 9:59:46 [EAName]CADJPY,H1: Onay Kontrolü

Bazı saatlerde dördü de ticaret yapacak, bazıları sadece üç. H4'lerin ticaret yapması için bir saat varsa, üçü ticaret yapabilir, ancak genellikle dördü H1'lerin üç veya dördü ile birlikte değil.

Her şeyin değişebildiğinden emin olmak için hacmi 3 veya 4 tike çıkaracağım bir geçici çözüm oluşturdum, ancak kök sorununu çözebilmek için MetaTrader'ı daha iyi anlamaya çalışıyorum.

Öyleyse sorum şu - EA'mın çalıştırılacak yalnızca bir onay işareti olduğundan, her EA'yı aynı anda çalıştırır mı ve belki de bu yüzden hepsi çalışmıyor mu? EA'mda bir stoploss bulmak için 1500'e kadar geçmiş fraktalları karşılaştıran bir döngü var, bu yüzden biraz zaman alabilir.

Yine, kodumda bir yerde bir sorun olabilir.

 
Kodunuzla ilgili bir sorununuz olduğunu tahmin ediyorum ve bunun birden fazla EA'nın konusu ile ilgisi yok. Neyin işe yaramadığını görmek için standart Print()/Alert() yöntemlerini kullanmaya başlamayanlar için sorunu tam olarak belirlemeniz gerekir.
 
tigersoft :
İşte EURUSD ve USDCHF'yi tek bir grafikte açmak için basit bir kod. Ea bile başka bir çizelgeye eklenir, böylece EURUSD ve USDCHF'yi açar.

 //+------------------------------------------------------------------+
//|                                                          jkh.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool wannaBuy = true ;
bool wannaBuy1 = true ;
extern double LotSize = 0.01 ;
extern string symbol1 = "EURUSD" ;
extern string symbol2 = "USDCHF" ;
extern int MaxDifference = 6 ;
extern int Slippage = 3 ;
extern int Magicnumber1 = 786 ;
extern int Magicnumber2 = 123 ;
int sendticket = 3 ;
string pairs[ 18 ];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
pairs[ 0 ] = symbol1;
pairs[ 1 ] = symbol2;
wannaBuy = true ;
wannaBuy1 = true ;

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   // Send order for EURUSD & USDCHF
   if (wannaBuy) {   
   int ticket1;
   RefreshRates();
   ticket1 = OrderSend(symbol1, OP_BUY, LotSize, MarketInfo(symbol1,MODE_ASK), Slippage, 0 , 0 , 0 , 0 ,Magicnumber1, 0 ) & OrderSend(symbol2, OP_BUY, LotSize, MarketInfo(symbol2,MODE_ASK), Slippage, 0 , 0 , 0 , 0 ,Magicnumber2, 0 );
   if (ticket1 < 0 )
   {
   Print ( "OrderSend failed with error #" , GetLastError());
   return ( 0 );
   }
   wannaBuy = false ;
   }

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

çalışmıyor?

geri test için
sipariş gönderme hatası 4106

orderend işlevi için USDCHF için bilinmeyen sembol adı

Ayar için EURUSD sembolünü veya EURUSD grafiğini seçersem, Ordersend EURUSD için çalışır.

Başka bir grafiğe geçersem, hem EURUSD hem de USDCHF için bilinmeyen bir sembol alacağım

Teşekkürler! peşin

Neden: