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

 
Vitaly Muzichenko :

Tasarruftan başka bir hedefim daha vardı.

Grafiklerde Uzman Danışmanlarım var ve panelden alım satım için ek pencere kopyaları açmak bir şekilde doğru değil. Bu nedenle, ticaret paneli bir gösterge şeklinde yazılmıştır - birçoğunu tek bir grafiğe koyabilirsiniz.

Küçük bir kesim, kod biraz kısaltılmış, ancak mantık açık:

Gösterge

 // Открыть позиции
   // Открыть позицию Buy
   if ( sparam ==prefix+ "_openBuy" ) {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger ( 0 ,prefix+ "_openBuy" , OBJPROP_STATE , false );
     ChartRedraw ();
   }
   // Открыть позицию Sell
   if ( sparam ==prefix+ "_openSell" ) {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger ( 0 ,prefix+ "_openSell" , OBJPROP_STATE , false );
     ChartRedraw ();
   }

//===============================================================================================
//------------------ Функция посылает сообщение всем открытым графикам -------------------------+
//===============================================================================================
void BroadcastEvent( long lparam, double dparam, string sparam) {
 ushort eventID= 9784 - 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==- 1 ) break ;         // достигли конца списка графиков 
    i++;                             // не забудем увеличить счетчик 
   } 
 }

danışman

 // -- Получим нажатие кнопки с индикатора
// Открыть позицию
 if (id== 9784 )     
  {
   if (UseSound) PlaySound ( "tick.wav" );
   OpenPosition(sparam,OP_BUY,dparam, 0 , 0 , "comm" ,( int )lparam, clrNONE );
  }
 
Aleksei Stepanenko :

Gösterge nerede? Forum konuları arasında dolaşmamak için lütfen buraya ekleyin.

gösterge
Dosyalar:
 
Evet, grafiğimin ChartID'sini bir EA olarak terminalin global değişkenine yazmayı da düşündüm, o zaman tüm göstergeler olayı nereye göndereceğini biliyor. BroadcastEvent olmadan noktasal.
 
Aleksei Stepanenko :
Evet, grafiğimin ChartID'sini bir EA olarak terminalin global değişkenine yazmayı da düşündüm, o zaman tüm göstergeler olayı nereye göndereceğini biliyor. BroadcastEvent olmadan noktasal.

Global değişken - aynı dosya, terminal onunla çok çalışır ve diski öldürür ve kene, aynı döngü, sadece profilde kontrol edilmesi tavsiye edilmez :)

 
frank2020 :
gösterge
Ve bu göstergeden ne elde etmek istiyorsunuz?
 
frank2020 :
gösterge

Bir şey varsa, buradan alındı

Ищу канальные индикаторы для MT5
Ищу канальные индикаторы для MT5
  • 2017.03.28
  • www.mql5.com
Все привет, ищу любые канальные индикаторы, которых нет по умолчанию в MT5 Нужны для оптимизации ТС (какой их индикаторов покажет устойчивые резуль...
 
Vitaly Muzichenko :

Global değişken - aynı dosya, terminal onunla çok çalışır ve diski öldürür ve kene, aynı döngü, sadece profilde kontrol edilmesi tavsiye edilmez :)

Hayır hayır. EA başlatıldığında, grafiğinin numarasını global değişkene yazar. Ardından, başlangıçta bir kez, gösterge bu değişkeni okur ve ardından nesne her oluşturulduğunda, yalnızca Uzman Danışman ile grafiğe bir olay gönderir.
 
Vitaly Muzichenko :

Global değişken - aynı dosya, terminal onunla çok çalışır ve diski öldürür ve kene, aynı döngü, sadece profilde kontrol edilmesi tavsiye edilmez :)

aynı dosya zorla temizlenirse, geri kalan zaman ram'den çok iş yapılır

 

Genel olarak, danışmanlar/göstergeler arasında normal bir verici şu şekildedir:

alıcı:

 int OnInit ()
   {
   GlobalVariableSet ( "A" , ChartID ());
   return ( INIT_SUCCEEDED );
   }

void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam) 
   {
   if (id== CHARTEVENT_CUSTOM + 777 )
      {
       printf ( "Сообщение принято: " +sparam);
      }
   }

verici:

 int OnInit ()
   {
   long a=( long ) GlobalVariableGet ( "A" );
   EventChartCustom (a, 777 , 0 , 0 , "Превед медвед!" );
   return ( INIT_SUCCEEDED );
   }

CPU yükü yok.

 
Aleksei Stepanenko :

Genel olarak, danışmanlar/göstergeler arasında normal bir verici şu şekildedir:

normal değil, bir şeyi aktarmak için 8 bayt işkence görüyorsun

işe yarayacak olsa da - @fxsaber İncil yaptı, daha karmaşık yapıları düzenlemek için TypeToByte kullanıyor gibi görünüyor


Not: çarpışmaları nasıl ele alacaksınız? - IMHO, tüm yollar veri alışverişi veritabanına çıkıyor, işin %90'ı sizin için yapılıyor ve çok kaliteli