Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 963

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

Cosa significa questo errore di compilazione e come lo risolvo? Ho una classe con circa 80.000 linee. Devo fare due classi? Questa è una sciocchezza. Che senso ha questa versione a 64 bit se tutto è limitato in questo modo?
 
Juer:
Come si può dire che cosa sta causando la lunga compilazione (più di 10 minuti). Il file ex5 risultante pesa circa 12mb, non molto. Come posso diagnosticare e risolvere i motivi che causano una compilazione così lunga?

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

Ottimizzare=0

Credo di aver risolto il problema.

Время компиляции
Время компиляции
  • 2017.01.02
  • www.mql5.com
Всем привет! Код компилируется очень долго (около минуты). Строк кода - около 4000. От чего зависит время и как можно ускорить...
 
Quando si modifica un ordine, è necessario specificare l'ordine a cui OrderGetDouble si riferisce prima di puntare=
 
Ivan Ivanov:
Quando si modifica un ordine, dovremmo specificare l'ordine, a cui OrderGetDouble si riferisce, prima di puntare=

Grazie Ivan, lo sto provando ma non funziona per me.

Non capisco la logica stessa, come selezionare un ordine da modificare per tipo e non per biglietto e poi fare riferimento alle sue proprietà.

Non capisco la logica, perché nella modifica dell'ordine stesso il biglietto è il campo obbligatorio da riempire e non c'è nessun tipo di ordine.

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

Nel mio caso, ci sono due ordini aperti: Buy_Stop e Sell_Stop. La sequenza della loro apertura può essere qualsiasi.

Il numero del biglietto non mi è di alcun aiuto qui.

Nella condizione di controllo, posso scoprire se Sell_Stop (per esempio) è tra gli ordini aperti.

Ma non riesco a capire come dovrei indirizzare a questo particolare ordine Sell_Stop, in modo che quandoOrderModify è chiamato

per modificare esattamente Sell_Stop, e non qualcosa che è capitato sotto il ticket.

Ho la sensazione che la sintassi del linguaggio mi faccia passare attraverso tutti gli ordini del biglietto, solo per il gusto di riempire il campo del biglietto inOrderModify.

È qui che mi sono confuso con la modifica dell'ordine. Ho perso la logica del processo.

 

C'è una funzione per allegare un grafico EA? Come ChartIndicatorAdd().

O come posso collegare programmaticamente un EA a un dato grafico, se non c'è un modello?

 

Come si traduce in 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:

Come faccio a tradurre in 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);
Funzionerà in entrambe le versioni.
 

Si prega di avvisare.

C'è un esempio nell'aiuto: Algoritmo generale di lavoro con gli ordini.

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

Alla compilazione ottengo un avvertimento sul tipodatetime, apparentemente, c'è un conflitto di conversione del tipo.

Non capisco qual è il problema; secondo l'Aiuto,ORDER_TIME_SETUP ha il tipodatetime.

Qual è il problema e come risolverlo?

 
vladzeit:

Si prega di avvisare.

C'è un esempio nell'aiuto: Algoritmo generale di lavoro con gli ordini.

Alla compilazione ottengo un avvertimento sul tipodatetime, apparentemente, c'è un conflitto di conversione del tipo.

Non capisco qual è il problema; secondo l'Aiuto,ORDER_TIME_SETUP ha il tipodatetime.

Qual è il problema e come risolverlo?

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

OrderGetInteger dovrebbe essere convertito al tipo corretto, lo stesso vale per INT

 
Konstantin Nikitin:

OrderGetInteger deve essere convertito al tipo corretto, lo stesso vale per INT

Grazie per l'esempio.

Si prega di chiarire... se ho capito bene.

Con this=(datetime)OrderGetInteger. stiamo dicendo a OrderGetInteger di adottare il tipodatetimeesplicito.?

Questa regola si applica a tutte le funzioni che non hanno un tipo esplicito o non corrispondono al tipo della variabile assegnata? O è solo un caso speciale?

Voglio capire se questa è una regola o solo bisogno di essere ricordato come un caso speciale.