Hizmetler. Zaten çalışıyor? - sayfa 19

 
Sergey Golubev :

Yıllar önce, iş parçacığının İngilizce bölümünde (şimdi uzun bir arama, üzgünüm) ticaret yaparken (ve piyasayı analiz ederken ) bir metin dosyası oluşturan ve güncelleyen bir danışman vardı. aynı Metatrader'da, ancak farklı bir çiftte (veya aynı, ancak farklı bir grafikte) çalışan başka bir danışman tarafından belirli aralıklarla. Ve her ikisi de bu dosya ile birbirleriyle iletişim kurarak ticaret yaptılar.

Bunu, diğer terminallerde scalper-master ve scalper-slave ile iletişim kurmak için yaptım. Ancak burada yalnızca tüccardan gelen kontrol komutları iletilir, böylece tüm terminallerdeki aynı düğmeler manuel olarak tıklanmaz. Hiçbir şey veri iletimini engellemese de.

Bellek haritalama yoluyla iletişim kurabilir, ardından pazara elveda

 

Özel sembollerle çok çalışıyorum. Neredeyse her zaman özel olanı patlatmanız gerekir, ancak bunu manuel olarak yapmanız gerekir. Otomatikleştirmeye karar verdi.

Ve bunun sadece Hizmet için senaryo olduğu ortaya çıktı. Belki bu, Hizmetler için oldukça standart bir yaklaşım değildir, ancak çizelgelere bağlı olmayan bir komut dosyasına ihtiyacım vardı. Ve bu yüzden

 // Удаляет символ активного графика из Обзора рынка (кастомный - удаляет полностью).

#property service

// Находит чарт в фокусе.
long GetFocusChart()
{
   long Chart = ChartFirst ();

   for (; Chart != - 1 ; Chart = ChartNext (Chart))
     if ( ChartGetInteger (Chart, CHART_BRING_TO_TOP ))
       break ;

   return (Chart);
}
   
// Удаляет чарты символа.
int DeleteCharts( const string Symb )
{
   int Res = 0 ;
  
   for ( long Chart = ChartFirst (); Chart != - 1 ; Chart = ChartNext (Chart))
     if ( ChartSymbol (Chart) == Symb)
      Res += ChartClose (Chart);
  
   return (Res);
}

// Удаляет символ из Обзора рынка (кастомный - удаляет полностью).
bool DeleteSymbol( const string Symb )
{
  DeleteCharts(Symb);

   return ( SymbolSelect (Symb, false ) && (! SymbolInfoInteger (Symb, SYMBOL_CUSTOM ) || CustomSymbolDelete (Symb)));
}

void OnStart ()
{
   const long Chart = GetFocusChart();
  
   if (Chart != - 1 )
    DeleteSymbol( ChartSymbol (Chart));
}

Bu komut dosyasına/hizmete bir kısayol tuşu asmayı ve sakıncalı bir sembolün grafiğini gördüğümde içinden bir sembol çakmayı düşündüm. Çok uygun olurdu. Ancak zorluklarla karşılaştı.

  • Serviste bir kısayol tuşunu kapatmak mümkün değildir.
  • Hizmetin yeniden başlatılması için öncelikle silinmesi gerekir. Terminali başlatmanın ilk aşamasında Hizmetleri başlatmak için bunun gerekli olduğu varsayılmıştır. Ama benim durumum farklı.
  • SymbolSelect başarısız - sembol kaldırılamıyor. Görünüşe göre hata.
Sonuç olarak, bir serseri. Hizmetlerin pratik tarafını bir şekilde çözmek mümkün müdür?


ZY Etkin grafiğin sembolünü silme sorununu çözmek için bir geçici çözüm vardır.

 
fxsaber :

Özel sembollerle çok çalışıyorum. Neredeyse her zaman özel olanı patlatmanız gerekir, ancak bunu manuel olarak yapmanız gerekir. Otomatikleştirmeye karar verdi.

Ve bunun sadece Hizmet için senaryo olduğu ortaya çıktı. Belki bu, Hizmetler için oldukça standart bir yaklaşım değildir, ancak çizelgelere bağlı olmayan bir komut dosyasına ihtiyacım vardı. Ve bu yüzden

Bu komut dosyasına/hizmete bir kısayol tuşu asmayı ve sakıncalı bir sembolün grafiğini gördüğümde içinden bir sembol çakmayı düşündüm. Çok uygun olurdu. Ancak zorluklarla karşılaştı.

  • Serviste bir kısayol tuşunu kapatmak mümkün değildir.
  • Hizmetin yeniden başlatılabilmesi için öncelikle silinmesi gerekir. Terminali başlatmanın ilk aşamasında Hizmetleri başlatmak için bunun gerekli olduğu varsayılmıştır. Ama benim durumum farklı.
  • SymbolSelect başarısız - sembol kaldırılamıyor. Görünüşe göre hata.
Sonuç olarak, bir serseri. Hizmetlerin pratik tarafını bir şekilde çözmek mümkün müdür?


ZY Etkin grafiğin sembolünü silme sorununu çözmek için bir geçici çözüm vardır.

OnChartEvent() işlevi orada çalışmadığından, Hizmete bir kısayol tuşu atamak mümkün değildir; Ama sanırım farkındasın. Bu, Expert Advisor'ın kısayol tuşları ile çalışması ve kaynaklar aracılığıyla Servis'e komut aktarması gerektiği anlamına gelir. Hizmeti kaynaklar aracılığıyla yönetmeye çalışın.

not. Elbette bu, Hizmeti kullanmanın anlamını kaybeder. Sonuçta, kısayol tuşlarına basarak danışmandan çizelgeleri kapatabilirsiniz...

ZYY. Tek nokta Expert Advisor'larda ekstra işlevsellik üretmemek. Hizmetteki farklı danışmanların genel işlevlerini atar ve ona kaynak üzerinden erişiriz. Ne yapacağımızı komut veriyoruz.

 
Реter Konow :

OnChartEvent() işlevi orada çalışmadığından Hizmete bir kısayol tuşu atamak mümkün değildir.


 
fxsaber :


Teşekkür ederim. Öyleyse problem nedir?

Tuş vuruşlarına yanıt vermek için Hizmetin kendisine de (sürekli çalışan) ihtiyacınız vardır.

 
Реter Konow :

Teşekkür ederim. Öyleyse problem nedir?

Tuş vuruşlarına yanıt vermek için Hizmetin kendisine de (sürekli çalışan) ihtiyacınız vardır.

Numara. Hizmetin bir grafiğe bağlı kalmadan Komut Dosyası modunda çalışabilmesi gerekir.

 
fxsaber :

Numara. Hizmetin bir çizelgeye bağlı kalmadan Komut Dosyası modunda çalışabilmesi gerekir.

Ama başka bir şekilde çalışıyor mu?

 
Реter Konow :

Ama başka bir şekilde çalışıyor mu?

Evet.

 
fxsaber :

Evet.

Böylece herhangi bir grafiği yönetebilir mi? Kolayca.

 
Hizmet, ayarlama olasılığı olan verilerle (teklifler) çalışır, ancak hiçbir şeyi yönetmenize izin vermez; özellikle - terminal pencereleri ve tam da ihtiyacınız olan şey bu. Buradan çıkan bariz sonuç şudur: Bir veya başka bir pencereyi kapatmak gerekirse, hizmet bu pencere için açıkça imkansız bir teklif oluşturur ve bu pencereye eklenen komut dosyası, bu teklif alındığında onu kapatır.