Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 190

 
Vladimir Pastushak :

Bir gösterge veya danışman tarafından oluşturulan bir nesneden manuel olarak oluşturulan bir grafik nesneyi bir şekilde ayırt etmek mümkün müdür?

işlevde

OBJPROP_HIDDEN

"Grafikler" - "Nesneler" - "Nesnelerin listesi" terminal menüsündeki nesneler listesinde bir grafik nesnenin adını görüntüleme yasağı. Gerçek değer, kullanıcı için gereksiz olan bir nesneyi listeden gizlemenizi sağlar. Varsayılan olarak, takvim olaylarını, işlem geçmişini ve   bir MQL5 programından yaratılmıştır . böyle görmek   grafik nesneleri   ve özelliklerine erişmek için, "Nesne Listesi" penceresindeki "Tümü" düğmesini tıklamanız gerekir.

bool

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Все объекты, используемые в техническом анализе, имеют привязку на графиках по координатам цены и времени – трендовая линия, каналы, инструменты Фибоначчи и т.д.  Но есть ряд вспомогательных объектов, предназначенных для улучшения интерфейса, которые имеют привязку к видимой всегда части графика (основное окно графика или подокна индикаторов...
 
Belki de iyi bilinen bir şey, ama kendisi böyle bir nüansı bilmiyordu.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Kütüphaneler: Uzman

fxsaber , 2020.10.09 04:55

 bool ReloadChart( const long Chart )
{
   return ( ChartSaveTemplate (Chart, "\\Files\\" + __FILE__ + ".tpl" ) &&
           ChartApplyTemplate (Chart, "\\Files\\" + __FILE__ + ".tpl" ) && // Поставили задание в очередь чарта.
           ChartGetInteger (Chart, CHART_WINDOW_HANDLE ));                 // Заставляем двигаться очередь.
}

Kodda önemli bir yer vurgulanmıştır. Onsuz, şablon, komut dosyasının sonuna kadar uygulanmayacaktır.

 
EventChartCustom'daki ilk giriş parametresi hakkında

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MT5 ve iş başında hız

Anton , 2020.10.08 11:00

Farklı anlam ve farklı yürütme mekanizması. 0 - "kendi" grafik kuyruğundaki olay. -1 - kendi kuyruğundaki olay.

 
Vladimir Pastushak :

Haftanın sonunda, kafa kaynamaz.

MT5'te bir çit üzerinde açık pozisyon bileti var, örneğin 123456

Pozisyonu kapattıktan sonra karı hesaplamak istiyorum ama bir şekilde yapamıyorum.

Bunu yapıyorum, ama sadece bir komisyon alıyorum ...

Bir bilette kapalı bir pozisyondan nasıl kar elde edilir?

HistorySelectByPosition () ile anlaşmaları daha iyi seçmeye çalışın.

Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 

Bir mqh'nin içinde daha önce başka bir mqh'den bir şeyin çağrılıp çağrılmadığını öğrenmek gerekiyordu. Aynı zamanda mqh birbirlerinin varlığından haberdar değildir. Bazıları dahil edilebilir, bazıları olmayabilir.

Genel olarak, görev olağandışıdır (benim için). Oldukça koltuk değneği bir şekilde çözdü.

 void f1()
{
   SetUserError ( 0 );
}

void f2()
{
   if ( _LastError == ERR_USER_ERROR_FIRST )
     Print ( "f1() была вызвана." );
   else
     Print ( "f1() не была вызвана" );
}

void OnStart ()
{
  f1();
  f2();
}

Bunun çok kötü bir uygulama olduğunu düşünüyorum, ama işe yarıyor.

 
Birinin Uyarı penceresini kapatması gerekiyorsa.
 // Закрытие Alert-окна
bool CloseAlert()
{  
   const long Chart = ChartOpen ( _Symbol , _Period );  
   const bool Res = Chart && ! ChartSaveTemplate (Chart, NULL );
                            
   if (Chart)
     ChartClose (Chart);
    
   return (Res);  
}
 
fxsaber :

Bir mqh'nin içinde daha önce başka bir mqh'den bir şeyin çağrılıp çağrılmadığını öğrenmek gerekiyordu. Aynı zamanda mqh birbirlerinin varlığından haberdar değildir. Bazıları dahil edilebilir, bazıları olmayabilir.

Genel olarak, görev olağandışıdır (benim için). Oldukça koltuk değneği bir şekilde çözdü.

Bunun çok kötü bir uygulama olduğunu düşünüyorum, ama işe yarıyor.

_LastError kullanmanın önemli bir sorunu vardır, üçüncü taraf kitaplıkları dahil edildiğinde, kullanıcı hata kodlarının sıfır olmayan bir çarpışma olasılığı vardır. Bir seçenek olarak, lastError'ınızı saklayın. Ya tüm mqh'lerde ya da tek başına includeguard'a sarılmış bir global değişken başlatın.
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MT5 ve iş başında hız

fxsaber , 2020.10.20 12:28

Hızlı boşaltılan bir makine için ara toplam.

Fiyat verilerinin alaka düzeyi ile, çubuklar ve göstergeler aracılığıyla ticaret yapanlar için çok belirsizdir.

Tiki ve gözlükler - gerçek zamanlı olmak zor.

 
MT5'te Uyku(0) == Uyku(1) . Bu nedenle, MT4'te olduğu gibi Uyku (0) kullanılırken çok büyük bir CPU yükü yoktur.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

Slava , 2018.09.20 15:40

not. MQL5'teki Sleep() işlevi , win api işlevi ::Sleep()'e bir yönlendirme değildir. Bunun yerine, değer 100'den küçükse bu bir yönlendirmedir. Ve 100'den fazlası, IsStopped'de kesintiye uğramanız için, içinde wine API slipi bulunan bir döngüdür.

Ve başka bir nüans var. Milisaniye sayısı <=0 olduğunda, 1 değiştirilir.Yani, asla ::Sleep(0) demeyiz.

Zaten unutulmuş. Yalnızca MT5 için geçerlidir. MT4'te Uyku (0) Terminali asabilir.

 
Her aramada ek kontrol etmemek için işaretçiler için Virtual'ı yeniden yapmak için bir fikir vardı. koşul.
   static double VirtualSymbolInfoDouble( const string Symb, const ENUM_SYMBOL_INFO_DOUBLE Property )
  {
     return ( VIRTUAL::SelectOrders ? VIRTUAL::SelectOrders. SymbolInfoDouble (Symb, Property) : :: SymbolInfoDouble (Symb, Property) );
  }


Ama önce performansı basit bir örnekle karşılaştırmaya karar verdim.

 // Сравнение производительности функции с доп. условием и указателя на функцию.

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

typedef double (*TFunc)( const int ); // Определяем нужный тип указателя на функцию.

double Prices[];

double GetPrices2( const int Pos )
{
   return (Prices[Pos]);
}

double GetPrices( const int Pos )
{
   return (Pos >= 0 ? GetPrices2(Pos) : 0 ); // Специально введено доп. условие, чтобы уменьшить производительность.
}

void OnStart ()
{
   const int Size = ArrayResize (Prices, 1 e7);
  
   double Sum1 = 0 ;
   double Sum2 = 0 ;

  TFunc Func = GetPrices2;
    
   // Замер производительности через указатель функции.
  _BV(
   for ( int i = 0 ; i < Size; i++)
    Sum2 += Func(i);
      , 1 )


   // Замер производительности через функцию с доп. условием.
  _BV(
   for ( int i = 0 ; i < Size; i++)
    Sum1 += GetPrices(i);
      , 1 )  

   Print (Sum1);
   Print (Sum2);
}


Sonuç.

 2020.10 . 21 01 : 07 : 00.745 Test9 (AUDCAD,H1)       Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 29 in OnStart : for (inti= 0 ;i<Size;i++)Sum2+=Func(i);] = 33906 mcs.
2020.10 . 21 01 : 07 : 00.756 Test9 (AUDCAD,H1)       Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 36 in OnStart : for (inti= 0 ;i<Size;i++)Sum1+=GetPrices(i);] = 10923 mcs.


typedef-variant üç kez kaybeder. Kritik olduğu yerde kullanmayı reddetti. Örneğin, aynı TS Sipariş Toplamı, Optimize Edici'deki her geçiş onayında en az bir kez çağrılır.


Tehdit Hata ayıklama modunda durum tersine çevrilir. Bu nedenle, MT4 altında, hızlandırmak için typedef kullanmak mantıklıdır.