Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 963

 
the size of local variables is too large (more than 512 kb)

Böyle bir derleme hatası ne anlama gelir ve nasıl tedavi edilir? Burada bir sınıfım var, yaklaşık 80.000 satır var. Peki, şimdi iki dersten ne yapmalıyım? Biraz saçmalık. Her şey bu kadar sınırlıysa, bu 64-bit sürümde ne anlamı var?
 
Juer :
Uzun bir derlemeye tam olarak neyin neden olduğunu nasıl belirleyebilirsiniz (10 dakikadan fazla). Ortaya çıkan ex5 dosyası, o kadar değil, yaklaşık 12mb ağırlığındadır. Bu kadar uzun bir derlemeye neden olan nedenler nasıl teşhis edilir ve ortadan kaldırılır?

https://www.mql5.com/ru/forum/165399#comment_3968004

Optimize et=0

Anladım.

Время компиляции
Время компиляции
  • 2017.01.02
  • www.mql5.com
Всем привет! Код компилируется очень долго (около минуты). Строк кода - около 4000. От чего зависит время и как можно ускорить...
 
Bir Siparişi değiştirirken, point= 'dan önce, OrderGetDouble'ın başvurduğu siparişi belirtmeniz gerekir.
 
Ivan Ivanov :
Bir Siparişi değiştirirken, point= 'dan önce, OrderGetDouble'ın başvurduğu siparişi belirtmeniz gerekir.

Teşekkürler Ivan, deniyorum ama bir şey benim için çalışmıyor.

Mantığın kendisini, bilete göre değil, türe göre değişiklik için bir siparişin nasıl seçileceğini ve ardından özelliklerine döneceğini anlamıyorum.

Emir değiştirme yapısının kendisinde olduğu için, gerekli alan bilettir ve herhangi bir emir türü yoktur.

m_trade. OrderModify ( ticket , Bid -(SHAG_s* _Point ), Ask +((SLL_s-SHAG_s) * _Point ), Ask -((TPP_s+SHAG_s)* _Point ), 0 , 0 , 0 );

Benim durumumda Buy_Stop ve Sell_Stop olmak üzere iki açık emir var. Açılışlarının sırası herhangi biri olabilir.

Bilet numarası burada bana yardımcı olmuyor.

Test koşulunda açık emirler arasında (örneğin) Sell_Stop emri olup olmadığını öğrenebilirim.

Ancak bu belirli Sell_Stop siparişini nasıl ele alacağımı çözemiyorum. OrderModify'ı çağırırken ne olurdu

Değiştirilen Sell_Stop idi ve yanlışlıkla biletin altına düşen bir şey değildi.

Dilin sözdiziminin, yalnızca OrderModify'daki bilet alanını doldurmak uğruna, bilet başına tüm siparişleri gözden geçirmemi sağladığını hissediyorum.

Emirlerin değiştirilmesi ile kafam karıştı. İşlem mantığını kaybettim...

 

Bir uzman çizelgesine eklenecek bir işlev var mı? ChartIndicatorAdd() gibi.

Veya şablon yoksa belirli bir çizelgeye program aracılığıyla bir Uzman Danışman nasıl eklenir?

 

mql5'e nasıl çevrilir?

OP_LOTS = ((( AccountBalance () * _LosPercent) / 100 ) / MarketInfo ( Symbol (), MODE_TICKVALUE )) / (pp);
        OP_LOTS = MathRound (OP_LOTS / MarketInfo ( Symbol (), MODE_LOTSTEP )) * MarketInfo ( Symbol (), MODE_LOTSTEP );
        OP_LOTS = MathMax (OP_LOTS, MarketInfo ( Symbol (), MODE_MINLOT ));
        OP_LOTS = MathMin (OP_LOTS, MarketInfo ( Symbol (), MODE_MAXLOT ));
 
Sprut112 :

mql5'e nasıl çevrilir?

 double point = SymbolInfoDouble ( _Symbol , SYMBOL_POINT );
double lotMax = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
double lotMin = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
double lotStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
int digits = ( int ) SymbolInfoInteger ( _Symbol , SYMBOL_DIGITS );
Her iki versiyonda da çalışacak.
 

Lütfen sor.

Yardımda bir örnek var: Siparişlerle çalışmak için genel algoritma.

  {
//--- получим общее количество ордеров
   int orders= OrdersTotal ();
//--- пробежим по списку ордеров
   for ( int i= 0 ;i<orders;i++)
   {
   ResetLastError ();
//--- скопируем в кэш ордер по его номеру в списке
   ulong ticket= OrderGetTicket (i);
   if (ticket!= 0 ) // если ордер успешно скопирован в кэш, работаем с ним
   {
   double price_open   = OrderGetDouble ( ORDER_PRICE_OPEN );
   datetime time_setup = OrderGetInteger ( ORDER_TIME_SETUP );
   string symbol       = OrderGetString ( ORDER_SYMBOL );
   long magic_number   = OrderGetInteger ( ORDER_MAGIC );
   if (magic_number    ==m_magic)
   {
//  обработаем ордер с заданным ORDER_MAGIC
   }
   PrintFormat ( "Ордер #%d по %s был выставлен %s, ORDER_MAGIC=%d" ,ticket,symbol, TimeToString (time_setup),magic_number);
   }
   else    // вызов OrderGetTicket() завершился неудачно
   {
   PrintFormat ( "Ошибка при получении ордера из списка в кэш. Код ошибки: %d" , GetLastError ());
   }
   }
  }

Derlerken, tarih saat türünde bir uyarı görünür, görünüşe göre türden türe bir dönüşüm çakışması.

Sorunun ne olduğunu anlayamıyorum, yardıma göre ORDER_TIME_SETUP tarih saat türüne sahip.

Sorun nedir ve nasıl çözülür?

 
vladzeit :

Lütfen sor.

Yardımda bir örnek var: Siparişlerle çalışmak için genel algoritma.

Derlerken, tarih saat türünde bir uyarı görünür, görünüşe göre türden türe bir dönüşüm çakışması.

Sorunun ne olduğunu anlayamıyorum, yardıma göre ORDER_TIME_SETUP tarih saat türüne sahip.

Sorun nedir ve nasıl çözülür?

 datetime time_setup =( datetime ) OrderGetInteger ( ORDER_TIME_SETUP );
//....
long magic_number   =( long ) OrderGetInteger ( ORDER_MAGIC );

OrderGetInteger'ın, INT ile aynı şekilde, istenen türe dönüştürülmesi ihtiyacı vardır.

 
Konstantin Nikitin :

OrderGetInteger'ın, INT ile aynı şekilde, istenen türe dönüştürülmesi ihtiyacı vardır.

Örnek için teşekkürler.

Yine de belirtin lütfen... doğru anlaşılıp anlaşılmadığını.

bununla =( datetime ) OrderGetInteger . OrderGetInteger'a açık bir tarih saat türü almasını söyleriz . ?  

Bu kural, açık bir türü olmayan veya atanan değişkenin türüyle eşleşmeyen tüm işlevler için geçerli midir? Yoksa bu sadece özel bir durum mu?

Bunun bir kural mı yoksa özel bir durum olarak mı hatırlanması gerektiğini anlamak istiyorum.