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

 
Denis Diakonov :

örneğin, önce durum 1'i, ardından durum 2'yi vb. göndermeyin.

kasalar açılış emirlerini yürütür

Evet orda bir yerde açılmıyor. Böyle bir kodu anlamak için tam olarak düşündüğünüz gibi düşünmeniz gerekir ve bu zordur.

 
Expert Advisor'ın OnTick'inde oldukça fazla zaman alan bir döngü varsa, bu tamamen gerçekleştirilecek mi yoksa yeni bir tick'in gelmesi hepsini öldürecek mi?
 
Alexey Viktorov :

Evet orda bir yerde açılmıyor. Böyle bir kodu anlamak için tam olarak düşündüğünüz gibi düşünmeniz gerekir ve bu zordur.

       case 2 : // кейс для открытия Sell по AUD/USD
               if (TimeServer() == true )                                     
               {
                   if ( Symbol () == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend ( "AUDUSD" ,OP_SELL,lot,Bid, 0 , 0 , 0 ); 
                   Alert ( "Тикет открытого ордера " , Open_Order, GetLastError ());
//-------------------------------------------------------------------------------------------------------------
// другая функция
//-------------------------------------------------------------------------------------------------------------

int AUDUSD_Analizing()
{    
   if (AUDUSD_Prices_new > AUDUSD_Prices_old)
   {
      s1 = AUDUSD_Prices1;
      s2 = AUDUSD_Prices2;
      s3 = s1 - s2;    
       if (raznica > s5)
      {
         Alert ( "--- ВРЕМЯ ОТКРЫВАТЬ ОРДЕР НА ПОКУПКУ ---" );
вот в этом месте мне необходимо обратиться к case 2 - вызвать его запуск на исполнение, затем
отсюда же необходимо обратиться к case 5 (к примеру), case 9, case 16 и т.д.

и только потом завершить исполнение данной функции и вернуться в старт
 
Yevhenii Levchenko :
Expert Advisor'ın OnTick'inde oldukça fazla zaman alan bir döngü varsa, bu tamamen gerçekleştirilecek mi yoksa yeni bir tick'in gelmesi hepsini öldürecek mi?

evet, ben de anlamıyorum, benim döngüm emirleri açarken yürütülüyor ve hepsi açılmıyor, bazıları zaten ikinci turda açılıyor ve bazıları kaçırılıyor, anladığım kadarıyla, yeni tik başlangıcı başlatıyor ve kod yürütülmesini durdurur ve yeniden başlar

 
Denis Diakonov :

anladığım kadarıyla, yeni onay hem başlangıcı başlatıyor hem de kod yürütmeyi askıya alıyor ve yeniden çalışmaya başlıyor

telafi etme

yardımı okuyun, açıkça EA'da karmaşık hesaplamalar varsa, yeni onay işaretinin atlanacağını söylüyor

olay işleme işlevleriyle ilgili bir makalede veya belki ticaret işlemlerinde veya RefreshRates'te bir yerde

kodunuzdaki mantıkta bir hata arayın


Not: switch() - durum karmaşık mantıksal koşullar için kullanılmaz, if() else kombinasyonlarını kullanmak daha iyidir - bu şekilde daha açık mantıksal dallar elde edilir

 
Igor Makanu :

telafi etme

yardımı okuyun, EA'da karmaşık hesaplamalar varsa, yeni onay işaretinin atlanacağını açıkça söylüyor

olay işleme işlevleriyle ilgili bir makalede veya belki ticaret işlemlerinde veya RefreshRates'te bir yerde

kodunuzdaki mantıkta bir hata arayın


Not: switch() - durum karmaşık mantıksal koşullar için kullanılmaz, if() else kombinasyonlarını kullanmak daha iyidir - bu şekilde daha açık mantıksal dallar elde edilir

evet, teşekkürler, ben de her şeyi if-else yoluyla yazmaya karar verdim

 
Denis Diakonov :

Anahtar neden buraya vidalanmış? İşlemin yönünü ve fonksiyondaki gerekli açıklıkların sayısını almak ve döngüde belirtilen sayıda açmak daha kolaydır.

Bu yüzden senin mantığını anlamak bana göre değil diyorum. Neden böyle donmalar?

 
Alexey Viktorov :

Anahtar neden buraya vidalanmış? İşlemin yönünü ve fonksiyondaki gerekli açıklıkların sayısını almak ve döngüde belirtilen sayıda açmak daha kolaydır.

Bu yüzden senin mantığını anlamak bana göre değil diyorum. Neden böyle donmalar?

Sonuç olarak, kodumun hacmi büyüdü ama biraz daha kolay olacağını düşündüm.

Yarışlar olarak - bir işlevin yürütülmesi sırasında vakayı gerektiği kadar çağırmak mümkün olsaydı, daha kolay olurdu ve kod daha kompakt olurdu.

Bir döngüde aynı fırsatları açmama gerek yok, bir sinyal göründüğünde aynı anda (mümkün olduğunca) farklı enstrümanlar için açılıyorlar.

durum 1 - audusd satın al

durum 5 - gbpusd satın al

durum 9 - eurusd satın al

vb.

İlk durumda, vaka içeren bir sayfam ve analiz içeren ikinci sayfam var, bu nedenle etkileşime girerlerse 500 satır olacaktır.

Kullanılabilir ikinci seçenek, bir bebek bezine neyin çekildiğinin bir analiziyle bir fonksiyon içinde bir siparişin belirli bir açılmasını reçete etmeyi içerir ve toplam satırlar 1200+'dır, bu da sonuçta programın hızında oynayacaktır.

 

Uzmanlar, lütfen söyleyin! Expert Advisor, dinamik sapma hesaplamalı Zarflar göstergesini kullanır. Ancak bir grafikte görüntülendiğinde, önceki tüm çubuklardaki gösterge sapmalarındaki değişikliklerin tüm dinamiklerini çizer.

dinamik zarflar

1. Göstergeyi doğru şekilde çizmenin bir yolu var mı? Onlar. sadece kendi çubuğuna sapması ile bir gösterge çizdi.

2. Peki, Expert Advisor'daki gösterge çizimini nasıl kapatabilirim ve sadece hesaplamaları bırakabilirim? Uzman ayarlarında çekmeceyi kapatma özelliğini kapatmak istiyorum)

 
Denis Diakonov :

Sonuç olarak, kodumun hacmi büyüdü ama biraz daha kolay olacağını düşündüm.

Yarışlar olarak - bir işlevin yürütülmesi sırasında vakayı gerektiği kadar çağırmak mümkün olsaydı, daha kolay olurdu ve kod daha kompakt olurdu.

Bir döngüde aynı fırsatları açmama gerek yok, bir sinyal göründüğünde aynı anda (mümkün olduğunca) farklı enstrümanlar için açılıyorlar.

durum 1 - audusd satın al

durum 5 - gbpusd satın al

durum 9 - eurusd satın al

vb.

İlk durumda, vaka içeren bir sayfam ve analiz içeren ikinci sayfam var, bu nedenle etkileşime girerlerse 500 satır olacaktır.

Kullanılabilir ikinci seçenek, bir bebek bezine neyin çekildiğinin bir analiziyle bir işlev içinde bir siparişin belirli bir açılmasını reçete etmeyi içerir ve toplam satırlar 1200+ , bu da sonuçta programın hızında oynayacaktır.

Bu kadar çok kod satırını nasıl yazıyorsun? İşte son Uzman Danışmanlarımdan biri, FORTS'ta bir dizi menkul kıymetle çalışıyor

 sinput    string             Symbols           = "GAZP,LKOH,CHMF,MVID" ;   //  Символы для торговли через запятую

Bu listede kaç tane menkul kıymet listelenecek, o kadar çok işlem yapılacak. Ve bu Uzman Danışmanda, iki işlem periyodunun kontrolü, takip ve tabii ki sadece 326 satırın analizi ile.

Eğer dayanılmaz bir switch kullanma arzunuz varsa, o zaman her seçeneğe pozisyonların açılmasını girmenize gerek yoktur. Sonuçta, sembolün adını , ticaret işleminin türünü ve

 string symb;
ENUM_ORDER_TYPE ordType;
switch (???)
{
 case 1
  symb = "audusd" ;
  ordType = OP_BUY;
 break ;
 case 5
  symb = "gbpusd" ;
  ordType = OP_BUY;
 break ;
 case 9
  symb = "eurusd" ;
  ordType = OP_BUY;
 break ;
}
// И дальше получение цен, определение СЛ и ТП с последующем открытием ордера.

Ama bence, tüm bunları kullanıcı tanımlı bir işleve sarmak yine de daha iyi.

 void openOrder( string symb, ENUM_ORDER_TYPE ordType)
 {
   // Символ и тип ордера передаётся при вызове функции. Здесь достаточно получить соответствующие цены и открыть ордер.
 }