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

 
yiduwi :

Yardım, trend çizgisinin ilk zaman koordinatını nasıl bulabilirim?

 long    ObjectGetInteger ( 
   long      chart_id,         // идентификатор графика 
   string    object_name,       // имя объекта 
   int       prop_id,           // идентификатор свойства 
   int       prop_modifier= 0    // модификатор свойства, если требуется 
   );
 

Neden global olarak bir değişken ve dizi bildiremiyorum ve değişkenden diziye değeri hemen atamak istiyorum.

 int yo= 6 ;
int masss[ 4 ]={ 0 , 0 ,yo, 0 };

Ve fonksiyonlarda, argüman bir değişkene atanırsa aynı sorun yemin ediyor

 void Fulr( int ty=yo){}
 
Seric29 :

Neden global olarak bir değişken ve dizi bildiremiyorum ve değişkenden diziye değeri hemen atamak istiyorum.

Ve fonksiyonlarda, argüman bir değişkene atanırsa aynı sorun yemin ediyor

Документация по MQL5: Основы языка
Документация по MQL5: Основы языка
  • www.mql5.com
Язык MetaQuotes Language 5 (MQL5) является объектно-ориентированным языком программирования высокого уровня и предназначен для написания автоматических торговых стратегий, пользовательских технических индикаторов для анализа разнообразных финансовых рынков. Он позволяет не только писать разнообразные экспертные системы, предназначенные для...
 
Alekseu Fedotov :

Sayesinde.

 
Artyom Trishkin :

Görünüşe göre söylemek imkansız. Bunu C++'da yapabilirsiniz, bence bunun nedeni mql4'ün bir tanımlayıcı aracılığıyla çalışmasıdır, yani. doğrudan bellek erişimi yoktur, çünkü her değerin bir adresi vardır ve bu adrese erişirseniz orada ne olduğunu öğrenebilirsiniz, bu mql4'ü aşırı statik hale getirir ve özellikle dizilerle çalışmayı birçok olasılığı sınırlar.

 

EA'da iki zamanlayıcı yapmak mümkün mü? Nedense OnTimer()'ın ayrı bir iş parçacığında çağrıldığını düşündüm. Ama OnInit()'e sonsuz bir döngü eklemeye çalıştım ve ondan önce bir timer ayarladım , sadece döngü çalıştı, OnTimer() çağrılmadı.

Bir zamanlayıcıda sürekli olarak iki bağımsız eylem gerçekleştirmem gerekiyor. Her birinin kendi aralığı vardır. Bu nasıl uygulanabilir, lütfen?

 
leonerd :

EA'da iki zamanlayıcı yapmak mümkün mü? Nedense OnTimer()'ın ayrı bir iş parçacığında çağrıldığını düşündüm. Ama OnInit()'e sonsuz bir döngü eklemeye çalıştım ve ondan önce bir timer ayarladım , sadece döngü çalıştı, OnTimer() çağrılmadı.

Bir zamanlayıcıda sürekli olarak iki bağımsız eylem gerçekleştirmem gerekiyor. Her birinin kendi aralığı vardır. Bu nasıl uygulanabilir, lütfen?

Örneğin: zamanlayıcıda yüze kadar sayın ve ilk kodu çalıştırın, 150'ye kadar sayın ve ikinci kodu çalıştırın. Ama iyi bir şekilde - kendiniz için bir multitimer sınıfı yapmanız gerekir.
 
Artyom Trishkin :

Bu başlıkta, yeni MQL4'te programlamayı gerçekten anlamak ve öğrenmek isteyenlere ve MQL5'e kolayca geçmek isteyenlere yardım etmeye başlamak istiyorum - diller çok benzer.

Burada görevleri, bunları çözmek için algoritmaları ve bu arada, MT için programlama ile ilgili soruları bir şekilde tartışmak mümkün olacak.

Umarım forumumuzun diğer deneyimli üyeleri sorunların çözümüne gelir ve konu herkesin ilgisini çeker.

Tünaydın. Kendi kendine çalışma ve pratik deneyim kazanmak için bir deneme danışmanı yazıyorum. Artık indikatörden sinyal alabiliyor ve AL ve SATIŞ pozisyonlarını açma fonksiyonu var ( Open_BUY_SELL() ). CodeBase'de yayınlanan betiklerden bu işlevi kör ettim.

SORU - Bu şubenin GURU'sundan birinden ortaya çıkan sakarlık koduna bakmasını isteyebilir miyim? ???

İşte şüphe ve endişe duyduğum yerlerden bazıları:

    m_trade         = new CTrade();
    m_symbol        = new CSymbolInfo();   
    m_position_info = new CPositionInfo();   
    m_account       = new CAccountInfo();
    
    m_symbol.Name( Symbol ());
    m_symbol.RefreshRates();

Bunu bir fonksiyonun içine yazmak uygun mudur? Bunu OnInit()'e taşımalı mıyım? İşlevi iki komut dosyasından yaptım, dosyalar gönderiye sabitlendi

CEngine        engine;
CTrade         trade;
CPositionInfo  apos;
CSymbolInfo    asymbol;

CTrade         *m_trade;
CSymbolInfo    *m_symbol;
CPositionInfo  *m_position_info; 
CAccountInfo   *m_account;

Bu yer de kafa karıştırıcı, eğer doğru anladıysam - aynı sınıfların nesneleri birbirini kopyalıyor. Sadece bazı bildirimler göstergeyle çalışmaktan, diğerleri ise komut dosyalarını bir işleve dönüştürmekten bırakıldı.


Fonksiyonu henüz sinyale bağlamadım, önce kodu anlamak ve temizlemek istiyorum. Bir yerde hata yaptığımı anlıyorum ama hala tam olarak nerede ve nasıl doğru yapılacağını anlamak için yeterli deneyim ve bilgi yok.

destek rica ediyorum.

 

Ekli dosyalar - Uzman Danışman, iki komut dosyası ve bir gösterge.

Derleyici yemin etmez, hata aramanıza gerek kalmaz, konuyla ilgili sadece stratejik/taktiksel hususlara ihtiyaç vardır - bunu yapmak mümkün mü ve yanlış yapılırsa olması gerektiği gibi.

Lütfen.

Dosyalar:
 
Artyom Trishkin :
Ama iyi bir şekilde - kendiniz için bir multitimer sınıfı yapmanız gerekir.

Basit görevleri fazla karmaşık hale getirmeyin! ... bir sınıfta yeni bir çubuk tanımlama işlevini bile tamamlayan ben dedim))))

konuya göre:

Leonard :

EA'da iki zamanlayıcı yapmak mümkün mü? Nedense OnTimer()'ın ayrı bir iş parçacığında çağrıldığını düşündüm. Ama OnInit()'e sonsuz bir döngü eklemeye çalıştım ve ondan önce bir timer ayarladım , sadece döngü çalıştı, OnTimer() çağrılmadı.

Bir zamanlayıcıda sürekli olarak iki bağımsız eylem gerçekleştirmem gerekiyor. Her birinin kendi aralığı vardır. Bu nasıl uygulanabilir, lütfen?


 #property strict
//--- input parameters
input int       Timer1= 13 ;
input int       Timer2= 21 ;
static int timer1= 0 ,timer2= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   EventSetTimer ( 1 );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   EventKillTimer ();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   if ((timer1++)>Timer1) { timer1 = 0 ; Print ( "Timer №1" ); }
   if ((timer2++)>Timer2) { timer2 = 0 ; Print ( "Timer №2" ); }
  }
//+------------------------------------------------------------------+