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

 
Alexey Viktorov:

Non mi ricordo, devo controllare, ma non voglio. Forse, in mql4 quando si cercava di creare un oggetto con il nome di uno esistente, veniva restituito un errore, e in mql5 non un errore, ma la modifica dei parametri se le coordinate sono diverse.

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

Sì, proprio così.

 
Maxim Kuznetsov:

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 potrebbe accadere è che l'utente abbia cancellato l'oggetto o cambiato la proprietà.

Grazie. Questo è interessante.

 

Buona giornata a tutti voi.
Il libro di Kovalev dice che gli indici degli array possono essere impostati su valori interi come costanti,variabili o espressioni.
Quando imposto l'indice in mql4 come variabile, il compilatore mi dà solo un errore

Ecco come ho impostato l'indice
intW=1000;

doppio T_P[W]={0};

void OnTick()

{

codice

}
Per favore ditemi cosa sto sbagliando.
Grazie.

 
ANDREY:

Buona giornata a tutti voi.
Il libro di Kovalev dice che gli indici degli array possono essere impostati su valori interi come costanti,variabili o espressioni.
Quando imposto l'indice in mql4 come variabile, il compilatore mi dà solo un errore

Ecco come ho impostato l'indice
intW=1000;

doppio T_P[W]={0};

void OnTick()

{

codice

}
Per favore ditemi cosa sto sbagliando.
Grazie.

L'indice dell'array non è la dimensione dell'array.
 
Alexey Viktorov:
L'indice dell'array non è la dimensione dell'array.

Capito, grazie. C'è un modo per impostare la dimensione dell'array usando una variabile?

 
ANDREY:

Capito, grazie. C'è un modo per impostare la dimensione dell'array usando una variabile?

Imposta una nuova dimensione nella prima dimensione dell'array

intArrayResize(
void&array[],// array passato dal riferimento
intnew_size,// nuova dimensione dell'array
intreserve_size=0// valore reserve_size (ridondante)
)

 
Aleksey Vyazmikin:

Imposta la nuova dimensione nella prima dimensione dell'array

intArrayResize(
void&array[],// array passato per riferimento
intnew_size,// nuova dimensione dell'array
intreserve_size=0// valore reserve_size (ridondante)
);

Grazie per le preziose informazioni.

 

Ciao, per favore aiutami con un semplice codice.

Al momento mi sto occupando dei meccanismi di apertura/chiusura degli ordini e mi sono imbattuto in un problema con la chiusura delle posizioni aperte.

Il codice è semplice. L'idea dell'algoritmo è di disegnare la MA (media mobile) con un periodo di 100 sul grafico. Se la candela precedente [1] si è aperta sopra la MA, e ha chiuso sotto la MA, allora la candela successiva [0] apre un ordine SELLper vendere.

//(Le condizioni di acquisto sono diverse, non le descriverò)

Per la chiusura dell'ordine le seguenti condizioni - il prezzo corrente ha superato dal prezzo di apertura dell'ordine il valore impostato di punti, per esempio 40.

Esempio: un lotto è aperto a Bid= 1.20045, dovrebbe chiudere a Ask= 1.20005.

Il codice di apertura e chiusura è racchiuso in due funzioni corrispondenti - CheckForOpen() e CheckForClose() che a loro volta sono chiamate con la funzione OnTick(). Infatti, il prezzo può superare un certo valore di punti (andare oltre il livello di chiusura) ma l'ordine non sarà chiuso.

Non riesco a capire cosa c'è che non va.

p/s/ Screenshot e codice allegati.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
4elovechishe:

Ciao, per favore aiutami con un semplice codice.

Al momento mi sto occupando dei meccanismi di apertura/chiusura degli ordini e mi sono imbattuto in un problema con la chiusura delle posizioni aperte.

Il codice è semplice. L'idea dell'algoritmo è di disegnare la MA (media mobile) con un periodo di 100 sul grafico. Se la candela precedente [1] si è aperta sopra la MA, e ha chiuso sotto la MA, allora la candela successiva [0] apre un ordine SELLper vendere.

//(Le condizioni di acquisto sono diverse, non le descriverò)

Per la chiusura dell'ordine le seguenti condizioni - il prezzo corrente ha superato dal prezzo di apertura dell'ordine il valore impostato di punti, per esempio 40.

Esempio: un lotto è aperto a Bid= 1.20045, dovrebbe chiudere a Ask= 1.20005.

Il codice di apertura e chiusura è racchiuso in due funzioni corrispondenti - CheckForOpen() e CheckForClose() che a loro volta sono chiamate con la funzione OnTick(). Infatti, il prezzo può superare un certo valore di punti (andare oltre il livello di chiusura) ma l'ordine non sarà chiuso.

Non riesco a capire cosa c'è che non va.

p/s/ Screenshot e codice allegati.

Il CheckForOpen() non dovrebbe essere chiamato direttamente in OnTick, ma in un OnBar scritto in proprio (che dovrebbe essere chiamato in OnTick) - all'apertura della barra. Ma questa è una cosa banale

, invece di Open[1], Close[1] (la candela precedente ha sfondato MA100) dovremmo guardare Open[1],Open[0] (la candela precedente ha aperto da un lato della MA, quella attuale dall'altro lato). Altrimenti si vedrà un gap poco profondo tra le candele e la logica sarà perdonata.

La SMA della mediana cambia sulla 0a barra, cioè non è costante. Non può essere paragonato ad esso. Correggere l'algoritmo.

 
Aleksey Vyazmikin:

Imposta la nuova dimensione nella prima dimensione dell'array

intArrayResize(
void&array[],// array passato per riferimento
intnew_size,// nuova dimensione dell'array
intreserve_size=0// valore reserve_size (ridondante)
);

Grazie ancora per il tuo suggerimento, ma..... nella Guida è scritto che questa funzione si applica solo agli array dinamici. E il mio codice NON è un array dinamico, ma uno regolare.

Vi sarò molto grato se mi direte (o, meglio, mi mostrerete) come cambiare la dimensione di un array regolare nella prima dimensione.
Grazie ancora per il vostro aiuto.

Motivazione: