Hatalar, hatalar, sorular - sayfa 37

 
kirill190982 :
Büyük olasılıkla şimdilik görmezden geleceğim, ancak derleyici MQL4'te bu tür açıklamalar yapmadı.
Bu tamamen farklı bir soru, orada pek bir şey yoktu ... :)
 
Interesting :

Değişkenlerle büyük olasılıkla her şey yolunda. Lütfen yukarıdaki mesajıma bakın...

double int'ye dönüştürülüp dönüştürülmediğini bilmiyorum, o zaman kesinlikle bir kayıp olacak, ancak tersi olursa, int türünün işlevinin ikinci değeri olduğundan, normalleştirme sırasında büyük olasılıkla bir hata olacaktır.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
Interesting :

Geliştiriciler için "özel" olaylar ve aynı terminalde çalışan birkaç Uzman Danışman hakkında bir soru.

Her şeyi karıştırmak isteyip istemediğimi sormak istiyorum.


fikir

Oyun sırasında, devam eden bazı süreçler hakkında "komşu" uzmanlara bilgi verilmesi gerekmektedir.

...

Fikir değerliyse, birisi onu sonlandırmayı ve bir makale şeklinde yayınlamayı kabul edebilir. Veya kullanıcı etkinliklerine ayrılmış yardım bölümüne katkıda bulunmak mı?

EventChartCustom işlevi için bir örnek var:

 //+------------------------------------------------------------------+
//|                                            ButtonClickExpert.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
 
string buttonID= "Button" ;
string labelID= "Info" ;
int broadcastEventID= 5000 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- создадим кнопку, для передачи пользовательских событий
   ObjectCreate ( 0 ,buttonID, OBJ_BUTTON , 0 , 100 , 100 );
   ObjectSetInteger ( 0 ,buttonID, OBJPROP_COLOR , White );
   ObjectSetInteger ( 0 ,buttonID, OBJPROP_BGCOLOR , Gray );
   ObjectSetInteger ( 0 ,buttonID, OBJPROP_XDISTANCE , 100 );
   ObjectSetInteger ( 0 ,buttonID, OBJPROP_YDISTANCE , 100 );
   ObjectSetInteger ( 0 ,buttonID, OBJPROP_XSIZE , 200 );
   ObjectSetInteger ( 0 ,buttonID, OBJPROP_YSIZE , 50 );
   ObjectSetString ( 0 ,buttonID, OBJPROP_FONT , "Arial" );
   ObjectSetString ( 0 ,buttonID, OBJPROP_TEXT , "Кнопка" );
   ObjectSetInteger ( 0 ,buttonID, OBJPROP_FONTSIZE , 10 );
   ObjectSetInteger ( 0 ,buttonID, OBJPROP_SELECTABLE , 0 );
 
//--- создадим метку для вывода информации
   ObjectCreate ( 0 ,labelID, OBJ_LABEL , 0 , 100 , 100 );
   ObjectSetInteger ( 0 ,labelID, OBJPROP_COLOR , Red );
   ObjectSetInteger ( 0 ,labelID, OBJPROP_XDISTANCE , 100 );
   ObjectSetInteger ( 0 ,labelID, OBJPROP_YDISTANCE , 50 );
   ObjectSetString ( 0 ,labelID, OBJPROP_FONT , "Trebuchet MS" );
   ObjectSetString ( 0 ,labelID, OBJPROP_TEXT , "Нет информации" );
   ObjectSetInteger ( 0 ,labelID, OBJPROP_FONTSIZE , 20 );
   ObjectSetInteger ( 0 ,labelID, OBJPROP_SELECTABLE , 0 );
 
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   ObjectDelete ( 0 ,buttonID);
   ObjectDelete ( 0 ,labelID);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
 
  }
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
//--- проверим событие на нажатие кнопки мышки
   if (id== CHARTEVENT_OBJECT_CLICK )
     {
       string clickedChartObject=sparam;
       //--- если нажатие на объекте с именем buttonID
       if (clickedChartObject==buttonID)
        {
         //--- состояние кнопки - нажата кнопка или нет
         bool selected= ObjectGetInteger ( 0 ,buttonID, OBJPROP_STATE );
         //--- выведем в лог отладочное сообщение
         Print ( "Кнопка нажата =" ,selected);
         int customEventID; // номер пользовательского события для отправки
         string message;     // сообщение для отправки в событии
         //--- если кнопка нажата
         if (selected)
           {
            message= "Кнопка нажата" ;
            customEventID= CHARTEVENT_CUSTOM + 1 ;
           }
         else // кнопка не нажата
           {
            message= "Кнопка отжата" ;
            customEventID= CHARTEVENT_CUSTOM + 999 ;
           }
         //--- отправим пользовательское событие "своему"графику
         EventChartCustom ( 0 ,customEventID- CHARTEVENT_CUSTOM , 0 , 0 ,message);
         //--- отправим сообщение всем открытым графикам
         BroadcastEvent( ChartID (), 0 , "Broadcast Message" );
         //--- отладочное сообщение
         Print ( "Отправлено событие с ID =" ,customEventID);
        }
       ChartRedraw (); // принудительно перерисуем все объекты на графике
     }
 
//--- проверим событие на принадлежность к пользовательским событиям
   if (id> CHARTEVENT_CUSTOM )
     {
       if (id==broadcastEventID)
        {
         Print ( "Получили широковещательное сообщение от графика с id=" +lparam);
        }
       else
        {
         //--- прочитаем текстовое сообщение в событии
         string info=sparam;
         Print ( "Обрабатывается ПОЛЬЗОВАТЕЛЬСКОЕ событие с ID =" ,id);
         //--- выведем сообщение в метке
         ObjectSetString ( 0 ,labelID, OBJPROP_TEXT ,sparam);
         ChartRedraw (); // принудительно перерисуем все объекты на графике
        }
     }
  }
//+------------------------------------------------------------------+
//| послать широковещательное сообщение всем открытм графикам        |
//+------------------------------------------------------------------+
void BroadcastEvent( long lparam, double dparam, string sparam)
  {
   int eventID=broadcastEventID- CHARTEVENT_CUSTOM ;
   long currChart= ChartFirst ();
   int i= 0 ;
   while (i< CHARTS_MAX )           // у нас наверняка не больше CHARTS_MAX открытых графиков
     {
       EventChartCustom (currChart,eventID,lparam,dparam,sparam);
      currChart= ChartNext (currChart); // на основании предыдущего получим новый график
       if (currChart== 0 ) break ;   // достигли конца списка графиков
      i++;                     // не забудем увеличить счетчик
     }
  }
//+------------------------------------------------------------------+

Dene.

 
kirill190982 :
double int'ye dönüştürülüp dönüştürülmediğini bilmiyorum, o zaman kesinlikle bir kayıp olacak, ancak tersi olursa, int türünün işlevinin ikinci değeri olduğundan, normalleştirme sırasında büyük olasılıkla bir hata olacaktır.

int olarak double yazarsanız, her şey normal şekilde işlenir, derleyici yalnızca kesirli kısmı atar (kural gereği).

Tersi durumda, derleyici şüphe etmeye başlar ve olası sorunlar hakkında (ona göründüğü gibi) bir uyarı verir.

Ve hepimiz benzer bir durumda vaftiz olmak göründüğünde, bunu yapmasını "tavsiye ederiz". :)

not

Belki de geliştiriciler gelecekte BAZI uyarıları devre dışı bırakacaklar ve ardından, tıpkı MQL4'te olduğu gibi, derleyici her küçük şey için küfretmeyi bırakacak...

 
Interesting :

Geliştiriciler için "özel" olaylar ve aynı terminalde çalışan birkaç Uzman Danışman hakkında bir soru.

Her şeyi karıştırmak isteyip istemediğimi sormak istiyorum.


fikir

Oyun sırasında, devam eden bazı süreçler hakkında "komşu" uzmanlara bilgi verilmesi gerekmektedir.

Örneğin, bu tür süreçlerin öncelikle izlenmesi gerekir:

1. Zapsk uzmanı;

2. Bir Uzman Danışmanı Boşaltma;

3. Ticaret işlemlerinin sona ermesi;

4. Alım satım işlemlerinin yeniden başlaması.


uygulama

I. 4 olay kimliği oluşturun:

1 - CHARTEVENT_CUSTOM +1 //Uzman Danışmanı Başlat

2 - CHARTEVENT_CUSTOM +2 //Uzman boşaltma

3 - CHARTEVENT_CUSTOM +3 //Ticaret işlemlerinin sonlandırılması

4 - CHARTEVENT_CUSTOM +4 //Ticaret işlemlerini sürdürme


II. Etkinlik İzleme

Expert Advisor'da belirli bir durum oluştuğunda, kullanılarak bir YAYIN mesajı oluşturulur. EventChartCustom .

Aynı zamanda, EA sparam'a (adı ve olay türü, belki başka bilgiler) ve grafiğinin tanımlayıcısını lparam'a bir yorum yazar.

Diğer çizelgelerdeki uzmanlar (olayın doğasını doğru bir şekilde analiz edebiliyorlarsa) bu özel uzmana yanıt verirler.


not

Fikir değerliyse, birisi onu sonlandırmayı ve bir makale şeklinde yayınlamayı kabul edebilir. Veya kullanıcı etkinliklerine ayrılmış yardım bölümüne katkıda bulunmak mı?

Ve özellikle birkaç enstrümanla oynuyorsanız, aynı anda birkaç danışman kullanmak için hiçbir neden göremiyorum - o zaman tek bir uzmanla kolayca anlaşabilirsiniz, modifikasyon, açma ve kapama da tek bir uzman tarafından yapılabilir, göstergelerin analizi de
 
Rosh :

EventChartCustom işlevi için bir örnek var:

Dene.

Evet, bu örneği henüz gördüm (ne kadar zaman önce olduğunu bile bilmiyorum). Fikrimin uygulama açısından ne kadar doğru ve ilginç olduğunu sormak istedim.

not

sertifikaya uymuyorsa, belki birileri onu sonlandırmayı ve böyle bir etkinlik uygulaması hakkında bir makale yazmayı kabul eder.

Bir uzmandan diğerine (veya diğerlerine) siparişler şeklinde özel olayları kullanmak da ilginç olacaktır. Bütün bunlar özetlenirse, bence çok ilginç bir makale ortaya çıkacak.

Maalesef bunu yapacak vaktim yok...

 
kirill190982 :
Ve özellikle birkaç enstrümanla oynuyorsanız, aynı anda birkaç danışman kullanmak için hiçbir neden göremiyorum - o zaman tek bir uzmanla kolayca anlaşabilirsiniz, modifikasyon, açma ve kapama da tek bir uzman tarafından yapılabilir, göstergelerin analizi de

Her zaman bir anlam vardır, özellikle de tüm Uzman Danışmanlar önceden çoklu para birimi olmadığı için (MQL4 deneyimine dayalıdır).

Bu, yeni başlayanlar için ve daha önce mekanik ticaret sorunlarıyla uğraşanların çoğu için çoklu para birimi ticaretini doğru bir şekilde organize etmenin kolay olmayacağı anlamına gelir...


Geliştiricilerin kendileri henüz örnek olarak normal bir çoklu para birimi belirlemediler. ve eğer birisi MACD Örneğinin 2-3 kopyasını tek bir hesapta çalıştırmak isterse ne olacağını sadece ALLAH bilir.


Ek olarak, durumlar farklıdır, belki de diğer uzmanlar ilkinden emir alarak yalnızca ikincil bir rol oynar.

Ayrıca, diğer uzmanlar ("komşular") alım satım işlemleri yapmıyorsa, yalnızca verileri işlerse veya belirli işleri gerçekleştirirse bu seçenek kabul edilebilir.

Ayrıca hindiler ve uzmanlarla (belirli bir yaklaşımla) iletişim kurarken de benzer şeyler uygulanabilir.

not

Bu yüzden bu konu üzerinde çalışmayı önerdim ve eğer deneyimli programcılardan herhangi biri bir makale yazmak isterse. Geliştiricilerin kendileri zamanlarının bir kısmını bu konuya ayırırlarsa özellikle memnun olacağım.

İstenirse birden fazla yazıya malzeme olur diye düşünüyorum...

 
Interesting :
................

Maalesef bunu yapacak vaktim yok...

Anlıyoruz. Herkes ve her şey hakkında yorum yapmak için çok fazla zaman harcandı....
 
AM2 :

vMA ve Close[] değerine bakıyorum. Saatte her şey yolunda. Bunu da denedim:

Yine hata yazıyor. Belki başka bir şekilde basit bir hareketli ortalama hesaplayabilirsiniz. Veya iMA tutamağını ve CopyBuffer'ı ihtiyacınız olan yere mi götürün?

1. Saatte, Kapat dizisinin adını (yalnızca genel bilgileri göreceksiniz) veya belirli bir Kapat[1], Kapat[2],..., Kapat[i] değerini belirtmeniz gerekir.

2. Kodunuza göre mrate dizisinin nasıl doldurulduğu belli değil

3. MovingAverages.mqh standart kitaplığına bakın - MA hesaplamasının bir örneği olacak

 
joo :
Anlıyoruz. Herkes ve her şey hakkında yorum yapmak için çok fazla zaman harcandı....


Ayrıca yorum yapmak ve belirli fikirlerin uygulanması için de yeterli zaman olacaktır.

Sadece, bu konuyu, uygulamasının tüm kapsamını kapsayacak kadar ciddiye almayacağım (ve bu fikri tamamen kendim için uygulamakla ilgili bazı konularla zaten ilgileniyorum).

Ancak her durumda, büyük olasılıkla bu konuda makale yazmayacağım (çeşitli nedenlerle) ...