Auguri per MT5 - pagina 14

 
stringo:
L'ho risolto e aggiustato. Grazie.

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1,time2,rates);
      err++;
     }

Grazie per la correzione, quasi bene, perché quasi...

Nell'aiuto si dice

start_time [in] Il tempo della barra corrispondente al primo elemento.

E il primo elemento è 0.

Ma l'ultimo elemento va bene.

Se questo è il modo in cui è stato inteso, per favore correggete l'aiuto.

 
vdv2001:

Grazie per la correzione, quasi buono, perché quasi...

Nell'aiuto si dice

start_time [in] Il tempo della barra corrispondente al primo elemento.

E il primo elemento è 0.

Ma l'ultimo elemento va bene.

Se è così che deve essere, per favore correggete l'aiuto.

La situazione è che start_time e stop_time nella variante date-to-date possono essere qualsiasi cosa - in ogni caso formano un intervallo. Cerchiamo di renderlo più chiaro nella documentazione
 
stringo:
La situazione è che start_time e stop_time nel caso date-to-date possono essere qualsiasi - in ogni caso formano un intervallo. Cerchiamo di mappare questo più precisamente nella documentazione

Cioè state dicendo che le funzioni Copy* in caso di date to date restituiranno tutti gli elementi tranne quello iniziale? Quindi ho bisogno di scrivere l'espressione in questo modo:

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1-PeriodSeconds(PERIOD_M1),time2,rates);
      err++;
     }

questa domanda è molto importante per me.

 

Si prega di notare che quando si passa a un nuovo giorno, questo è il tipo di cosa che accade:

Dopo l'aggiornamento, tutto va a posto.

Osservare la formazione della transizione a un nuovo giorno, spesso noto questo spostamento, e la cosa più interessante al momento della formazione della prima barra del grafico di aggiornamento giorno successivo non porta risultati. (Potrei sbagliarmi, ma credo che anche il mio post precedente abbia qualcosa a che fare con questo).

 

Bild 252.

Menu principale: <Graphics> -<Graphics INSTRUMENTS> vengono visualizzati i tempi.

 
uncleVic:

Sfortunatamente, l'ultima versione di CAccountInfo non è stata inserita nella build.

Nel file allegato, troverete il metodo FreeMarginCheck (finora solo per SYMBOL_CALC_MODE_FOREX).

Se avete commenti e (o) idee, scrivete pure.

Ho trovato che il metodo FreeMarginCheck deve essere migliorato.

1. Consideriamo il caso SYMBOL_CALC_MODE_FOREX:

work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);
margine=offerta*volume*dimensione_contratto/leva;
margin=free_margin;
pausa;

Se i valori delle due sommatorie SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN) e Currency() risultano uguali, allora la variabile bid ottiene il valore 0 e la variabile margin ottiene il valore free_margin.

Per risolvere il problema, ho fatto quanto segue:

caso SYMBOL_CALC_MODE_FOREX:

offerta=1.0;

se (SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())

{

work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);
}

margine=offerta*volume*dimensione_contratto/leva;
margin=free_margin;
pausa;

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Posso chiedere quando le funzioni Copy*() funzioneranno normalmente?

In ogni nuova costruzione smettono di funzionare, non li usa nessuno?

 
vdv2001:

Grazie per la correzione, quasi bene, perché quasi...

Nell'aiuto si dice

start_time [in] Il tempo della barra corrispondente al primo elemento.

E il primo elemento è 0.

Ma l'ultimo elemento va bene.

Se questo è ciò che intendevate, per favore correggete l'aiuto.

Non è chiaro dal vostro esempio come viene acquisito il valore di time1. Il tentativo di riprodurre la situazione non ha avuto successo.

File:
 
Yedelkin:

Ho scoperto che il metodo FreeMarginCheck deve essere perfezionato.

Grazie per il commento. Corretto.
 
Yedelkin:

Ho scoperto che il metodo FreeMarginCheck deve essere perfezionato.

2. Un altro problema è il seguente. Ancora una volta considerate il caso SYMBOL_CALC_MODE_FOREX:
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);

Se la variabilesimbolo ha una valuta che non è direttamente quotata (ad esempio CADJPY) come valuta base, SymbolInfoDouble(work,SYMBOL_BID) produrrà 0.

2.1 Inoltre, non è chiaro perché il prezzo BID sia usato nel calcolo della seconda variabile (offerta). Dopo tutto, dobbiamo assicurarci che la valutain cui sono calcolate le offerte sia comprataa spese della valuta di deposito, cioè "comprare la valuta di margine, vendere la valuta di deposito". E se in una particolare coppia di valute, la valuta di deposito è al secondo posto, allora dobbiamo usare il prezzo ASK per eseguire l'operazione specificata.

Per correggere la situazione, ho fatto quanto segue:

doppio corso;
//---
switch(SymbolInfoInteger(symbol,SYMBOL_TRADE_CALC_MODE))
{
caso SYMBOL_CALC_MODE_FOREX:
corso=1.0;

//---Controlla se la valuta di deposito è la valuta base della coppia di valute corrente
//coppia. Se lo è, allora il valore della variabile di corso rimarrà 1.0
if(SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())
{
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();

//---Controlla se c'è una coppia di valute la cui valuta di base è la stessa del
//la valuta di base della coppia corrente, e la valuta di quotazione è la stessa della valuta di deposito
//(cioè, se il deposito è in USD, controllate per una quotazione diretta)
if(SymbolInfoDouble(work,SYMBOL_ASK)!=0)
corso=SymbolInfoDouble(lavoro,SYMBOL_ASK);

//--- Se la condizione precedente non è soddisfatta, cambia la sequenza di simboli
//currencies nella variabile di lavoro non è soddisfatta e otteniamo una coppia di valute con valuta base
//cambia la valuta del deposito, e la valuta della quotazione è la stessa della valuta di base
//coppia corrente (se il deposito è in USD, otteniamo la coppia di valute con la quotazione inversa).
else
{
work=Currency()+SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN);
course=1/SymbolInfoDouble(work,SYMBOL_BID);
}
}
margine=corso*volume*dimensione_contratto/leva;
margin=free_margin;
pausa;

Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5