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

 
Vasili Puşkaryev :
Nasıl görüneceğine dair bir resim var mı? Ve tamamen net değil, OBJ_CHART henüz kullanılmadı

Resim yok. Ama elle inşa edebilirsiniz. Ekle -> Nesneler -> Grafik Nesneleri -> Grafik'i seçin ve OBJ_CHART'ın bu şekilde eklenmesinden sonra, nesne özelliklerinde "Nesneyi arka plan olarak çiz" seçeneğini seçerek ölçekleri kapatın.

 
fxsaber :

Resim yok. Ama elle inşa edebilirsiniz. Ekle -> Nesneler -> Grafik Nesneleri -> Grafik'i seçin ve OBJ_CHART'ın bu şekilde eklenmesinden sonra, nesne özelliklerinde "Nesneyi arka plan olarak çiz" seçeneğini seçerek ölçekleri kapatın.


Teşekkürler, harika görünüyor

 

Hata ayıklama modunda, bir işlevin veya ifadenin döndürdüğü değeri bulamazsınız.

örneğin

 void OnStart ()
{
   double Angle = 1 ;
   double d = MathSin (Angle / 2 ) * MathSin (Angle * 2 ) ;
}

Örneğin, vurgulanan işlevlerin ne döndürdüğü.


Bu yöntemi kullanıyorum (yalnızca hata ayıklama modunda değil)

 template < typename T>
T MyPrint( const T Value, const string Str )
{
   static const bool IsDebug = MQLInfoInteger ( MQL_DEBUG );

//  if (IsDebug)
  {
//    DebugBreak(); // если хочется посмотреть средствами дебага

     Print (Str + " = " + ( string )Value);
  }
  
   return (Value);
}

#define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + ( string ) __LINE__ + ": " + #A)

void OnStart ()
{
   double Angle = 1 ;
   double d = _P( MathSin (Angle / 2 )) * _P( MathSin (Angle * 2 )) ;
}


Sonuç

 void OnStart (), Line = 21 : MathSin (Angle/ 2 ) = 0.479425538604203
void OnStart (), Line = 21 : MathSin (Angle* 2 ) = 0.9092974268256817
 

Ticaret talebi kontrol sonucu yapısı (MqlTradeCheckResult)

Alanların açıklaması

Tarla

Tanım

denge

Ticaret işleminin yürütülmesinden sonra olacak bakiyenin değeri

Eşitlik

Ticaret operasyonunun yürütülmesinden sonra olacak özkaynakların değeri

marj

Gerekli alım satım işlemi için gerekli marj

margin_free

Gerekli ticaret işleminin yürütülmesinden sonra kalacak ücretsiz özkaynak miktarı

sınır seviyesi

Gerekli alım satım işlemi tamamlandıktan sonra belirlenecek teminat seviyesi

Bu alanlar Ticaret sekmesindeki satıra karşılık gelir.


Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата проверки торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата проверки торгового запроса
  • www.mql5.com
Прежде чем отправить торговому серверу запрос на торговую операцию, рекомендуется провести его проверку. Проверка осуществляется функцией OrderCheck(), которой передается сам проверяемый запрос и переменная типа структуры MqlTradeCheckResult. В эту переменную и будет записан результат проверки.
 
fxsaber :

Bu alanlar Ticaret sekmesindeki satıra karşılık gelir.


Aynı değerler mevcut durumu gösteriyor ama hesaplanan değer ticaret işleminin gerçekleşmesinden sonra olacak yapıda döndürülmüyor mu?

 
Artyom Trishkin :

Aynı değerler mevcut durumu gösteriyor ama hesaplanan değer ticaret işleminin gerçekleşmesinden sonra olacak yapıda döndürülmüyor mu?

İşlem emri gerçekleştirilmiş olsaydı bu satırda olacak hesaplanan değerleri gösterir.

 

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

Genel sınıf kitaplığı - hatalar, açıklama, sorular, kullanım ve öneriler

Renat Fatkhullin , 2017.12.08 23:34

Bir MqlDeal yapımız yok, çünkü ticari kayıt biçimleri dalgalanıyor ve periyodik olarak genişliyor. Bu olmadan, platformun işlevselliğini genişletmek imkansızdır.

Bu nedenle, tek seçenek bunlara Get işlevi aracılığıyla erişmektir. Ayrıca, daha önce etkilenen kaydın kalan alanlarına erişim, kayıt önbelleğe girdiğinden, ilk erişimden birçok kat daha hızlıdır .

Yukarıdaki testte, anlaşma numaraları her seferinde yenidir ve bu, önceden seçilen anlaşmanın önbelleğini sürekli olarak düşürür.

 

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

MT5, MT4'e karşı. Dizileri doldurma hızı.

Renat Fatkhullin , 2017.12.12 12:19

1) Fikir yanlış, yerel diziler daha hızlı dolmaz (kabaca mikro seviyeye inmeden)

2) Dizilerin düzenli başlatma işlevleriyle hızla doldurulması gerekir

3) Hızı en üst düzeye çıkarmak için, diziyi bir vektör (tek boyutlu) olarak tutmak daha iyidir, böylece elinizde erişimi optimize etme şansınız daha fazla olur. Çok boyutluluk için sizi katı bir şekilde zorunlu çerçevelerle sınırlar ve derleyiciyi çok boyutlu dizinlerin ek sabit hesaplamalarını yapmaya zorlar.

4) Hızlı erişim için diziler statik tutulmalıdır, bu da sınır dışı kontrollerin miktarını önemli ölçüde azaltır.

 

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

mql5'te satış pozisyonu açma

fxsaber , 2017.12.12 21:56

 // true - not for trade by market-orders
bool IsBadFilling( const string Symb )
{
   return (!( SymbolInfoInteger ( _Symbol , SYMBOL_FILLING_MODE ) & ( SYMBOL_FILLING_IOC | SYMBOL_FILLING_FOK )));
}

void OnTick ()
{
   if (IsBadFilling( _Symbol ))
  {
     Print ( "Change symbol " + _Symbol + " or server " + AccountInfoString ( ACCOUNT_SERVER ) + " for trade by market!" );
    
     ExpertRemove ();    
  }
}


sonuç

 2017.12 . 05 00 : 00 : 00    Change symbol EURUSD or server AMPGlobalClearing-Demo-CQG for trade by market!

Piyasaların neden test cihazında açılmadığını hızlı bir şekilde anlamanızı sağlar. Belki de bu, piyasa emirlerinin bu şekilde yasaklandığı, ancak bekleyen emirlerin yasaklanmadığı testçinin yanlış davranışıdır.


SYMBOL_FILLING_MODE sıfır olduğunda, test cihazının bu değeri (SYMBOL_FILLING_IOC | SYMBOL_FILLING_FOK) ile değiştirmesini öneriyorum. Onlar. ilgili sembol alanının geçersiz bir komisyoncu görevi olması durumunda tam teşekküllü ticarete izin verilir.

 
// Опознает кривые COPY_TICKS_INFO-тики
// Отсутствие цены (высохшая сторона стакана - нулевая цена) не признается валидной ситуацией
bool IsTickInfoBad( const MqlTick &Tick )
{
   return (!Tick.ask || !Tick.bid || Tick.last || Tick.volume || ((Tick.flags & ( 0x7F ^ ( TICK_FLAG_ASK | TICK_FLAG_BID ))) != 0 ));
}

#define DEFINE_FIELD(A)             \
   if (!Ticks[i]. ##A)                 \
    Ticks[i]. ##A = Ticks[i - 1 ]. ##A

// Корректирует ошибочные COPY_TICKS_INFO-тики
void CorrectTicksInfo( MqlTick &Ticks[] )
{
   const int Size = ArraySize (Ticks);
  
   for ( int i = 1 ; i < Size; i++)
     if (IsTickInfoBad(Ticks[i]))
    {
      DEFINE_FIELD(bid);
      DEFINE_FIELD(ask);      
      
      Ticks[i].last = 0 ;
      Ticks[i].volume = 0 ;
      Ticks[i].flags = TICK_FLAG_ASK | TICK_FLAG_BID ;
    }
}
CopyTicks(COPY_TICKS_INFO)'dan sonra her seferinde böyle bir şey yapmanızı öneririm, böylece TS yanlışlıkla hesabı sızdırmaz .