Questions des débutants MQL5 MT5 MetaTrader 5 - page 963

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

Que signifie cette erreur de compilation et comment puis-je la corriger ? J'ai une classe d'environ 80 000 lignes. Est-ce que je dois faire deux cours avec ça ? C'est absurde. Quel est le sens de cette version 64 bits si tout est limité de cette manière ?
 
Juer:
Comment pouvez-vous savoir ce qui cause la longue compilation (plus de 10 minutes). Le fichier ex5 résultant pèse environ 12mb, ce qui n'est pas beaucoup. Comment puis-je diagnostiquer et réparer les raisons qui provoquent une compilation aussi longue ?

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

Optimiser=0

Je crois que j'ai réglé la question.

Время компиляции
Время компиляции
  • 2017.01.02
  • www.mql5.com
Всем привет! Код компилируется очень долго (около минуты). Строк кода - около 4000. От чего зависит время и как можно ускорить...
 
Lors de la modification d'un ordre, vous devez préciser l'ordre auquel se réfère OrderGetDouble avant de pointer=.
 
Ivan Ivanov:
Lorsque l'on modifie un ordre, il faut préciser l'ordre auquel se réfère OrderGetDouble, avant de pointer=.

Merci Ivan, j'essaie mais ça ne marche pas pour moi.

Je ne comprends pas la logique même, comment sélectionner un ordre de modification par type et non par ticket et ensuite se référer à ses propriétés.

Je ne comprends pas la logique, car dans la modification de la commande elle-même, le ticket est le champ obligatoire à remplir et il n'y a pas de type de commande.

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

Dans mon cas, il y a deux ordres ouverts : Buy_Stop et Sell_Stop. La séquence de leur ouverture peut être quelconque.

Le numéro de ticket ne m'est d'aucune utilité ici.

Dans la condition de contrôle, je peux savoir si Sell_Stop (par exemple) figure parmi les ordres ouverts.

Mais je n'arrive pas à trouver comment je dois adresser à cet ordre particulier Sell_Stop, de sorte que lorsque l'OrderModify est appelé

pour modifier exactement Sell_Stop, et non pas quelque chose qui se trouve être sous le ticket.

J'ai l'impression que la syntaxe du langage m'oblige à passer en revue toutes les commandes du ticket, juste pour remplir le champ du ticket dansOrderModify.

C'est là que je me suis embrouillé avec la modification de l'ordre. J'ai perdu la logique du processus.

 

Existe-t-il une fonction permettant de joindre un graphique EA ? Comme ChartIndicatorAdd().

Ou comment puis-je attacher programmatiquement un EA à un graphique donné, s'il n'y a pas de modèle ?

 

Comment traduire en mql5 ?

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:

Comment traduire en mql5 ?

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);
Fonctionne dans les deux versions.
 

Veuillez me conseiller.

Il existe un exemple dans l'aide : Algorithme général de travail avec les commandes.

  {
//--- получим общее количество ордеров
   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());
   }
   }
  }

À la compilation, je reçois un avertissement sur le typedatetime, apparemment, il y a un conflit de conversion de type.

Je ne comprends pas quel est le problème ; selon l'aide,ORDER_TIME_SETUP a le typedatetime.

Quel est le problème et comment le résoudre ?

 
vladzeit:

Veuillez me conseiller.

Il existe un exemple dans l'aide : Algorithme général de travail avec les commandes.

À la compilation, je reçois un avertissement sur le typedatetime, apparemment, il y a un conflit de conversion de type.

Je ne comprends pas quel est le problème ; selon l'aide,ORDER_TIME_SETUP a le typedatetime.

Quel est le problème et comment le résoudre ?

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

OrderGetInteger doit être converti au type correct, de même que INT

 
Konstantin Nikitin:

OrderGetInteger doit être converti en type correct, de même que INT.

Merci pour l'exemple.

Veuillez clarifier... si j'ai bien compris.

avec this=(datetime)OrderGetInteger. nous demandons à OrderGetInteger d'adopter le typedatetimeexplicite.?

Cette règle s'applique-t-elle à toutes les fonctions qui n'ont pas de type explicite ou qui ne correspondent pas au type de la variable assignée, ou s'agit-il d'un cas particulier ?

Je veux savoir s'il s'agit d'une règle ou s'il faut simplement s'en souvenir comme d'un cas particulier.