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

 
fxsaber :
 for ( int i =:: ArrayResize (TmpSort, :: ArraySize (ARRAY)) - 1 ; i >= 0 ; i--)

Böyle yazmanı tavsiye etmem. Sistem, dizi için gerekli miktarda bellek tahsis edemezse, program sessizce çalışmaya devam edecek ve öngörülemeyen sonuçlara yol açacaktır.

 
Alexey Navoykov :

Böyle yazmanı tavsiye etmem. Sistem, dizi için gerekli miktarda bellek tahsis edemezse, program sessizce çalışmaya devam edecek ve öngörülemeyen sonuçlara yol açacaktır.

Gerçekten, hatasız koydum.

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

Kitaplıklar: TarihTicks

fxsaber , 2019.09.10 18:58

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

Kitaplıklar: TarihTicks

fxsaber , 2018.12.10 13:55

Herhangi bir MT4/5 Expert Advisor'da ise, başına aşağıdaki satırı yazarsanız
 #include <fxsaber\HistoryTicks\ ArrayResize .mqh> // https://www.mql5.com/ru/code/20298

ArrayResize veya ArrayCopy gerçekleştirirken bir hata oluşması durumunda ayrıntılı bir bildirim alacaksınız.

Bu, diziler arasında bilgi aktarırken tespit edilmesi zor sorunları görmenize, ancak daha da önemlisi, menzil dışında bir dizi nedeniyle EA'nın durduğuna dair bir mesaj almanıza (EA'nın yazarının hatası değil) izin verir. Örneğin, bellek eksikliği veya başka bir arıza nedeniyle. Onlar. Danışmanın anormal bir şekilde durduğunu hemen bileceksiniz ve birkaç saat sonra bunu yanlışlıkla fark etmeyeceksiniz.


HistoryTicks kitaplığı bu satırı zaten içeriyor (ek satırlar yazmanıza gerek yok), çünkü araç setinin temel amacı, gerçek hesaplarda savaş danışmanlarıdır.


Başka bir projede sadece Terminal günlüğünde böyle bir giriş vardı.

MemoryException 4471871064 bytes not available, 0 heapmin result


Eklenen satır sayesinde, yaşananların ayrıntıları kullanıcı günlüğünde görünür hale geldi.

 Alert : ThirdPartyTicks - ERROR in int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int )! - see the logs.
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 64 : :: MQLInfoString ( MQL_PROGRAM_PATH ) = C:\Program Files\ICMarkets - MetaTrader 5 \MQL5\Scripts\fxsaber\ThirdPartyTicks.ex5
PROGRAM_SCRIPT
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 66 : typename (T) = MqlTick
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 67 : sizeof (T) = 60
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 68 : Res = - 1
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 69 : NewSize = 129140
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 70 : Reserve = 74402041
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 71 : :: ArraySize (Array) = 129139
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 72 : PrevSize = 129139
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 73 : NewSize* sizeof (T) = 7748400
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 74 : PrevSize* sizeof (T) = 7748340
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 75 : Reserve* sizeof (T) = 169155164
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 76 : :: GetLastError () = 4004
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 77 : DuringTime = 1195
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 79 : :: TerminalInfoInteger ( TERMINAL_BUILD ) = 2138
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 80 : :: TerminalInfoInteger ( TERMINAL_DISK_SPACE ) = 6344
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 81 : :: TerminalInfoInteger ( TERMINAL_MEMORY_PHYSICAL ) = 16301
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 82 : :: TerminalInfoInteger ( TERMINAL_MEMORY_AVAILABLE ) = 31530
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 83 : :: TerminalInfoInteger ( TERMINAL_MEMORY_TOTAL ) = 32602
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 84 : :: TerminalInfoInteger ( TERMINAL_MEMORY_USED ) = 1072
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 86 : :: ChartID () = 132088214536525342
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 87 : :: PeriodSeconds () = 60
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 88 : :: Symbol () = EURUSD
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 89 : :: TimeCurrent () = 2019.09 . 10 19 : 49 : 15
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 90 : :: TimeLocal () = 2019.09 . 10 19 : 49 : 12
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 94 : :: SymbolInfoTick ( _Symbol ,Tick) = true
 time = 2019.09 . 10 19 : 49 : 13.178 bid = 1.10436 ask = 1.10439 last = 0.00000 volume = 0 2 TICK_FLAG_BID
int ARRAYRESIZE::ArrayResize_Real< MqlTick >( MqlTick &[], const int , const int ), Line = 97 : :: ChartSetInteger ( 0 , CHART_BRING_TO_TOP , true ) = true
array out of range in 'Array.mqh' ( 11 , 10 )
 

Lütfen bana MQL5'teki MQL4 işlevinin MarketInfo(asymbol, MODE_MARGIN_REQUIRED) analogunu söyler misiniz?

Satın alma için 1 lot açmak için gerekli olan ücretsiz fon miktarını almanız gerekir.

MQL5'te SymbolInfoDouble(symbol, ...) işlevinin farklı türevlerini inceledim, gerekli değişkeni bulamıyorum, her yerde 0 döndürülüyor.

 
Elena Baranova :

Lütfen bana MQL5'teki MQL4 işlevinin MarketInfo(asymbol, MODE_MARGIN_REQUIRED) analogunu söyler misiniz?

Satın alma için 1 lot açmak için gerekli olan ücretsiz fon miktarını almanız gerekir.

MQL5'te SymbolInfoDouble(symbol, ...) işlevinin farklı türevlerini inceledim, gerekli değişkeni bulamıyorum, her yerde 0 döndürülüyor.

https://www.mql5.com/ru/articles/2555#not_enough_money

Какие проверки должен пройти торговый робот перед публикацией в Маркете
Какие проверки должен пройти торговый робот перед публикацией в Маркете
  • www.mql5.com
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
 

Üzgünüm, neden bu bağlantıya ihtiyacım olduğunu anlamıyorum. Orada soruma cevap göremedim.

 
Elena Baranova :

Üzgünüm, neden bu bağlantıya ihtiyacım olduğunu anlamıyorum. Orada soruma cevap göremedim.

Makalede tam olarak neyi görmediniz?

Doğrulama örnekleri:

MQL5

 bool CheckMoneyForTrade( string symb, double lots, ENUM_ORDER_TYPE type)
  {
//--- получим цену открытия
   MqlTick mqltick;
   SymbolInfoTick (symb,mqltick);
   double price=mqltick.ask;
   if (type== ORDER_TYPE_SELL )
      price=mqltick.bid;
//--- значения необходимой и свободной маржи
   double margin,free_margin= AccountInfoDouble ( ACCOUNT_MARGIN_FREE );
   //--- вызовем функцию проверки
   if (! OrderCalcMargin (type,symb,lots,price,margin))
     {
       //--- что-то пошло не так, сообщим и вернем false
       Print ( "Error in " , __FUNCTION__ , " code=" , GetLastError ());
       return ( false );
     }
   //--- если не хватает средств на проведение операции
   if (margin>free_margin)
     {
       //--- сообщим об ошибке и вернем false
       Print ( "Not enough money for " , EnumToString (type), " " ,lots, " " ,symb, " Error code=" , GetLastError ());
       return ( false );
     }
//--- проверка прошла успешно
   return ( true );
  }
 
Vladimir Karputov :

Makalede tam olarak neyi görmediniz?

Doğrulama örnekleri:

MQL5

Satın almak için 1 lot açmak için gereken marj miktarını almanız gerekir.

Ve işte makaledeki çek?

 
Elena Baranova :

Satın alma için 1 lot açmak için gerekli olan ücretsiz fon miktarını almanız gerekir .

Ve işte makaledeki çek?

Ayrıca, makale materyalin gayretli bir şekilde incelenmesini öğretir.

Örnek, bir ticaret talebi göndermeden önce kontrol etmek için eksiksiz bir işlev bile sağlar.


Bir kere:

 //--- значения необходимой и свободной маржи
   double margin,free_margin= AccountInfoDouble ( ACCOUNT_MARGIN_FREE );

ve hemen yardım edin:

ACCOUNT_MARGIN_FREE

Bir pozisyon açmak için mevcut mevduat para biriminde hesapta bulunan ücretsiz fon miktarı

HesapBilgiÇift


ve iki minimum kontroldür:

   //--- вызовем функцию проверки
   if (! OrderCalcMargin (type,symb,lots,price,margin))
     {
       //--- что-то пошло не так, сообщим и вернем false
       Print ( "Error in " , __FUNCTION__ , " code=" , GetLastError ());
       return ( false );
     }
   //--- если не хватает средств на проведение операции
   if (margin>free_margin)
     {
       //--- сообщим об ошибке и вернем false
       Print ( "Not enough money for " , EnumToString (type), " " ,lots, " " ,symb, " Error code=" , GetLastError ());
       return ( false );
     }
Документация по MQL5: Информация о счете / AccountInfoDouble
Документация по MQL5: Информация о счете / AccountInfoDouble
  • www.mql5.com
Информация о счете / AccountInfoDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Elena Baranova :

Satın alma için 1 lot açmak için gerekli olan ücretsiz fon miktarını almanız gerekir .

Ve işte makaledeki çek?

Kısa bir kodu okumakta zorlanacağınızı düşünmemiştim, ardından https://www.mql5.com/ru/docs/trading/ordercalcmargin yardımını okuyun.

 
Vladimir Karputov :

Ayrıca, makale materyalin gayretli bir şekilde incelenmesini öğretiyor.

Örnek, bir ticaret talebi göndermeden önce kontrol etmek için eksiksiz bir işlev bile sağlar.


Bir kere:

ve hemen yardım edin:

ACCOUNT_MARGIN_FREE

Bir pozisyon açmak için mevcut mevduat para biriminde hesapta bulunan ücretsiz fon miktarı

HesapBilgiÇift


ve iki minimum kontroldür:

Bir pozisyon açmak için mevcut mevduat para biriminde hesaptaki ücretsiz fon miktarına ihtiyacım yok

Parti büyüklüğünü bakiyenin yüzdesi olarak hesaplarım.

Satın alma için 1 lot açmak için gerekli olan ücretsiz fon miktarını almanız gerekir .