Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1265

 
Roni Iron:

Buongiorno a tutti!


Domanda: qual è il modo più semplice per determinare i tempi alti e bassi di una barra?

L'orario di apertura/chiusura del bar non è interessante.

Su MT4.

Grazie!

ha fatto questo

pubblicato in KBhttps://www.mql5.com/ru/code/25897

 

Per favore, ditemi, in MT4 c'era una variabile predefinita doppio Ask, e come ho capito, dentro void OnTick() senza forzare

RereshRates il suo valore NON cambierebbe.

In MT5, Ask è sostituito da MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask ; il suo valore è sempre aggiornato da un nuovo tick.

Il mio problema è che ho bisogno di impostare la coordinata della linea dal valore di Ask + X ma non posso farlo in MT5 perché la linea cambia le sue coordinate dopo il cambiamento del valore

Ask=last_tick.ask. Qual è il tuo consiglio?

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
WinProject:

Per favore, ditemi, in MT4 c'era una variabile predefinita doppio Ask, e come ho capito, dentro void OnTick() senza forzare

RereshRates il suo valore NON cambierebbe.

In MT5, Ask è sostituito da MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); double Ask=last_tick.ask ; il suo valore è sempre aggiornato da un nuovo tick.

Il mio problema è che ho bisogno di impostare la coordinata della linea dal valore di Ask + X ma non posso farlo in MT5 perché la linea cambia le sue coordinate dopo il cambiamento del valore

Ask=last_tick.ask. Qual è il tuo consiglio?

Come non è cambiato? Cambiava ad ogni ticchettio. Ma nel loop non è cambiato. Forse vi siete un po' confusi con esso?

Ma in mql5 si può determinare il prezzo corrente prima del ciclo e non cambierà fino a quando non si esce dal ciclo.

 
Gente, scusate la domanda stupida. Nel terminale mt4 mostra il profitto comprese le commissioni, gli swap ecc. In mt5 mostra "nudo". Non riesco a trovarlo, c'è qualche impostazione per mt5 per mostrarlo come mt4? O non è in grado di farlo?
 

C'è un modo per misurare la larghezza in pixel del testo scritto in OBJ_TEXT?

 
Alexey Viktorov:

Come non è cambiato? Cambiava ad ogni ticchettio. Ma nel ciclo, sì, non è successo. Forse, ti sei un po' confuso con questo?

Ma in mql5 si può determinare il prezzo corrente prima del ciclo e non cambierà fino a quando non si esce dal ciclo.

Sì, grazie, la mia supposizione si è rivelata sbagliata, ma la domanda è un po' diversa. Ho un codice, lo stessoper MT4 e MT5:

 void OnTick()
              {
              string S=Symbol();
              double LastAsk= SymbolInfoDouble(S,SYMBOL_ASK);
              ObjectCreate(0,"hLine",OBJ_HLINE,0,0,LastAsk +500*Point());
              }

La questione è che in MT4 la linea creata sarà fissata al prezzo al quale è stata creata, ma in MT5 ogni volta su un nuovo tick la linea sarà disegnata ad un nuovo valore di LastAsk e la sua posizione cambierà insieme al prezzo. Come posso evitarlo in MT5?

 
WinProject:

Sì, grazie, la mia supposizione si è rivelata sbagliata, ma la domanda è un po' diversa. C'è un codice,lo stesso per MT4 e MT5:

La questione è che in MT4 la linea creata sarà ferma al prezzo al quale è stata creata, ma in MT5 ogni volta su un nuovo tick la linea sarà disegnata ad un nuovo valore di LastAsk e la sua posizione cambierà insieme al prezzo. Come posso evitarlo in MT5?

Controlla la disponibilità della linea per nome. Se non c'è, creane uno. Queste sono le basi in generale
 
Artyom Trishkin:
Controlla una linea per nome. Se non c'è una linea, creane una. Queste sono le basi in generale.

Grazie, cos'altro posso leggere su queste basi di logica di programmazione? Sembra elementare, ma è difficile da capire da zero.

 if(ObjectFind(0,"hLine"))

Ho aggiunto una condizione e tutto ha funzionato.

 
WinProject:

Grazie, cos'altro posso leggere su queste basi di logica di programmazione? Sembra elementare, ma è difficile da capire da zero.

Ho aggiunto una condizione e tutto ha funzionato.

Improvvisamente (come al solito) ObjectGetInteger(0,objectName,OBJPROP_TYPE) funziona più velocemente.

ObjectFind è un comando sincrono, cioè aspetta un aggiornamento completo (e la disponibilità) degli oggetti del grafico.

Se lavorate con i vostri oggetti (cioè creati nel vostro magazzino), non dovreste usare ObjectFind - sapete già in quale finestra l'oggetto è stato creato e che molto probabilmente esiste ed è del tipo giusto.
Il peggio che può succedere è che l'utente cancelli l'oggetto o cambi la proprietà

 
WinProject:

Sì, grazie, la mia supposizione era sbagliata, ma la domanda è un po' diversa. C'è un codice,lo stesso per MT4 e MT5:

La questione è che in MT4 la linea creata sarà ferma al prezzo al quale è stata creata, ma in MT5 ogni volta su un nuovo tick la linea sarà disegnata ad un nuovo valore LastAsk e la sua posizione cambierà insieme al prezzo. Come posso evitarlo in MT5?

Non me lo ricordo, devo controllare ma non voglio. Forse, in mql4 quando si cerca di creare un oggetto con il nome di uno già esistente, viene semplicemente restituito un errore, mentre in mql5 non è un errore ma la modifica del parametro, se le coordinate sono diverse.

Come ha detto Artem - controlla l'esistenza dell'oggetto

int  ObjectFind( 
   long    chart_id,     // идентификатор графика 
   string  name          // имя объекта 
   );