Semplificherò un po' la risposta per evitare confusione. Il segno (&) indica che l'argomento della funzione può cambiare il suo valore in fase di esecuzione e tornerà da dove la funzione è stata chiamata con un valore diverso. Nel caso in questione, la funzione SaveOrder può cambiare il contenuto degli array g_arrstBuyOrderInfo e g_arrstSellOrderInfo, così come le variabili g_nBuyOrdersCnt e g_nSellOrdersCnt.
Grazie. Diventa un po' più chiaro. Non è chiaro come tutto questo possa essere scoperto senza fare riferimento al forum. Non ho trovato tali spiegazioni nei tutorial.
Per favore, datemi qualche altro consiglio:
1) Il compilatore scrive - 'g_nBuyOrdersCnt' - dichiarazione senza tipo; 'g_nSellOrdersCnt' - dichiarazione senza tipo. È corretto supporre che g_nBuyOrdersCnt e g_nSellOrdersCnt debbano essere dichiarati globalmente per evitare un errore del compilatore?
2) Compilatore:'for' - le espressioni non sono permesse in uno scopo globale. Qui non è chiaro.
3) Nella funzionevoid SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt), il compilatore scrive: la dichiarazione di 'arrstOrderInfo' nasconde la dichiarazione globale. Non è nemmeno molto chiaro.
4) 'nOrderCnt' è un identificatore non dichiarato. Perché non è dichiarato da nessuna parte?
E un'ultima cosa: non ho ancora capito da dove vengono.n e.f e cosa sono.
Grazie. Comincia ad avere un po' più senso. Non è chiaro come si possa scoprire tutto questo senza fare riferimento a un forum. Non ho trovato tali spiegazioni nei libri di testo.
Per favore, datemi qualche altro consiglio:
1) Il compilatore scrive - 'g_nBuyOrdersCnt' - dichiarazione senza tipo; 'g_nSellOrdersCnt' - dichiarazione senza tipo. È corretto supporre che g_nBuyOrdersCnt e g_nSellOrdersCnt debbano essere dichiarati globalmente per evitare un errore del compilatore?
2) Compilatore:'for' - le espressioni non sono permesse in uno scopo globale. Qui non è chiaro.
3) Nella funzionevoid SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt), il compilatore scrive: la dichiarazione di 'arrstOrderInfo' nasconde la dichiarazione globale. Non è nemmeno molto chiaro.
4) 'nOrderCnt' è un identificatore non dichiarato. Perché non è dichiarato da nessuna parte?
Ecco come dovrebbe essere nel codice se si guarda il codice nel suo insieme:
#property strictinputint i_nMagicNumber = 12876;
#define MAX_ORDERS_CNT int(500)
struct OrderInfo
{
int nTicket;
int nType;
double fOpenPrice;
double fSL;
double fTP;
datetime dtOpenTime;
};
int g_nBuyOrdersCnt,
g_nSellOrdersCnt;
OrderInfo g_arrstBuyOrderInfo[MAX_ORDERS_CNT],
g_arrstSellOrderInfo[MAX_ORDERS_CNT];
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Expert initialization function |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+intOnInit()
{
returnINIT_SUCCEEDED;
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Expert deinitialization function |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Expert tick function |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+voidOnTick()
{
FindOrders();
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Fills the orders arrays |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+void FindOrders()
{
g_nBuyOrdersCnt = 0;
g_nSellOrdersCnt = 0;
for (int i = OrdersTotal() - 1; i >= 0; --i)
{
if (!OrderSelect(i, SELECT_BY_POS))
continue;
if (OrderSymbol() != Symbol()) // Если нужны ордера только по текущему символу, к графику которого прикреплен советникcontinue;
if (OrderMagicNumber() != i_nMagicNumber) // Если имеется входной параметр советника i_nMagicNumber, в котором указан ID ордеров советникаcontinue;
if (OrderType() == OP_BUY)
SaveOrderInfo(g_arrstBuyOrderInfo, g_nBuyOrdersCnt);
if (OrderType() == OP_SELL)
SaveOrderInfo(g_arrstSellOrderInfo, g_nSellOrdersCnt);
}
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+//| Saves one selected order in the specified array |//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt)
{
if (nOrdersCnt >= MAX_ORDERS_CNT)
return;
arrstOrderInfo[nOrdersCnt].nTicket = OrderTicket();
arrstOrderInfo[nOrdersCnt].nType = OrderType();
arrstOrderInfo[nOrdersCnt].fOpenPrice = OrderOpenPrice();
arrstOrderInfo[nOrdersCnt].fSL = OrderStopLoss();
arrstOrderInfo[nOrdersCnt].fTP = OrderTakeProfit();
++nOrdersCnt;
}
Un'ultima cosa: non ho ancora capito da dove vengono.n e.f e cosa sono.
L'operatore "punto" indica l'accesso a un membro di una struttura o di una classe. In questo caso, si tratta di una struttura.
Le lettere n e f sono un modo per specificare il tipo di dati memorizzati in una variabile. Dopo tutto, con un numero enorme di variabili, è impossibile ricordare il tipo di ciascuna. E se in un nome di una variabile ci sarà l'indicazione del suo tipo, la necessità di ricordare scompare da sola. n è un segno di un numero intero (da Numeric), f è un numero reale (da float - floating point number). Questo modo di scrivere i nomi delle variabili è chiamato notazione ungherese.
L'operatore punto indica l'accesso a un membro di una struttura o di una classe. In questo caso, una struttura.
Le lettere n e f sono un modo per specificare il tipo di dati memorizzati in una variabile. Dopo tutto, con un numero enorme di variabili, è impossibile ricordare il tipo di ciascuna. E se in un nome di una variabile ci sarà l'indicazione del suo tipo, la necessità di ricordare scompare da sola. n è un segno di un numero intero (da Numeric), f è un numero reale (da float - floating point number). Questo modo di annotare i nomi delle variabili è chiamato notazione ungherese.
Eccolo!!! Si scopre cheg_ eg_n non sono solo delle abbreviazioni, ma prefissi che dicono che sono variabili globali e globali intere!!! Ugh... E non riuscivo a capire perché questi trattini nelle denominazioni variabili... Come è possibile che un principiante, che non ha familiarità con queste sottigliezze, scriva codice usando array, strutture, ecc. Ho pensato che la mia semplice strategia potesse essere scritta in un linguaggio semplice, senza tuffarsi nel selvaggio.
Potresti darmi un link a un tutorial dettagliato (esteso) su mcl4 da studiare insieme ai tuoi consigli?
E potresti scrivere il codice di cui sopra senza usare la notazione ungherese per il confronto? Sei sicuro che la piattaforma MT4 lo capisca chiaramente?
E una domanda sul codice: a cosa serve ilcontinue;?
for (int i = OrdersTotal() - 1; i >= 0; --i)
{
if (!OrderSelect(i, SELECT_BY_POS))
continue;
Se un ordine non viene selezionato nella prima iterazione, allora non sarà selezionato nelle iterazioni successive e il ciclo continuerà indefinitamente? Perché il numero di ordini non cambia. Non sarebbe più correttorompere con un messaggio di errore?
Eccolo!!! Si scopre cheg_ eg_n non sono solo delle abbreviazioni, ma prefissi che dicono che sono variabili globali e globali intere!!! Ugh... E non riuscivo a capire perché questi trattini nelle denominazioni variabili... Come è possibile che un principiante, che non ha familiarità con queste sottigliezze, scriva codice usando array, strutture, ecc. Ho pensato che la mia semplice strategia potesse essere scritta in un linguaggio semplice, senza tuffarsi nel selvaggio.
Per fare qualcosa, dobbiamo approfondire le sottigliezze. Non c'è altro modo.
Potresti darmi un link a un tutorial dettagliato (esteso) su mcl4 da studiare insieme ai tuoi consigli?
Conosco solo un libro di testo su MQL4 - quello di Sergey Kovalev.
E potreste scrivere il codice di cui sopra senza usare la notazione ungherese per il confronto? Sei sicuro che la piattaforma MT4 lo capisca chiaramente?
Abituati subito a una formattazione corretta del codice )) La notazione ungherese è stata inventata da programmatori abbastanza esperti.
E una domanda sul codice: a cosa serve ilcontinue;?
Quindi, se un ordine non è selezionato nella prima iterazione, non sarà selezionato in quelle successive e il ciclo andrà avanti all'infinito? Perché il numero di ordini non cambia. Non sarebbe più correttorompere con un messaggio di errore?
Se non siamo riusciti a selezionare un ordine, non significa che non saremo in grado di selezionare l'ordine successivo. Quindi è ragionevole continuare il ciclo.
В настоящее время персональный компьютер стал незаменимым помощником в жизни каждого человека. Благодаря развитию Интернета и увеличению мощности современных компьютеров открылись новые возможности во многих областях деятельности. Ещё десять лет назад торговля на финансовых рынках была доступна только банкам и узкому кругу специалистов. Сегодня...
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Ciao!
Puoi dirmi come ridipingere le barre senza usare modelli in mt4?
O come applicare una combinazione di colori!?
Semplificherò un po' la risposta per evitare confusione. Il segno (&) indica che l'argomento della funzione può cambiare il suo valore in fase di esecuzione e tornerà da dove la funzione è stata chiamata con un valore diverso. Nel caso in questione, la funzione SaveOrder può cambiare il contenuto degli array g_arrstBuyOrderInfo e g_arrstSellOrderInfo, così come le variabili g_nBuyOrdersCnt e g_nSellOrdersCnt.
Grazie. Diventa un po' più chiaro. Non è chiaro come tutto questo possa essere scoperto senza fare riferimento al forum. Non ho trovato tali spiegazioni nei tutorial.
Per favore, datemi qualche altro consiglio:
1) Il compilatore scrive - 'g_nBuyOrdersCnt' - dichiarazione senza tipo; 'g_nSellOrdersCnt' - dichiarazione senza tipo. È corretto supporre che g_nBuyOrdersCnt e g_nSellOrdersCnt debbano essere dichiarati globalmente per evitare un errore del compilatore?
2) Compilatore:'for' - le espressioni non sono permesse in uno scopo globale. Qui non è chiaro.
3) Nella funzionevoid SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt), il compilatore scrive: la dichiarazione di 'arrstOrderInfo' nasconde la dichiarazione globale. Non è nemmeno molto chiaro.
4) 'nOrderCnt' è un identificatore non dichiarato. Perché non è dichiarato da nessuna parte?
Ciao!
Puoi dirmi come ridipingere le barre senza usare modelli in mt4?
O come applicare una combinazione di colori!
Se programmaticamente, vedere le funzioni ChartSetInteger() e ChartGetInteger().
Grazie. Comincia ad avere un po' più senso. Non è chiaro come si possa scoprire tutto questo senza fare riferimento a un forum. Non ho trovato tali spiegazioni nei libri di testo.
Per favore, datemi qualche altro consiglio:
1) Il compilatore scrive - 'g_nBuyOrdersCnt' - dichiarazione senza tipo; 'g_nSellOrdersCnt' - dichiarazione senza tipo. È corretto supporre che g_nBuyOrdersCnt e g_nSellOrdersCnt debbano essere dichiarati globalmente per evitare un errore del compilatore?
2) Compilatore:'for' - le espressioni non sono permesse in uno scopo globale. Qui non è chiaro.
3) Nella funzionevoid SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt), il compilatore scrive: la dichiarazione di 'arrstOrderInfo' nasconde la dichiarazione globale. Non è nemmeno molto chiaro.
4) 'nOrderCnt' è un identificatore non dichiarato. Perché non è dichiarato da nessuna parte?
Ecco come dovrebbe essere nel codice se si guarda il codice nel suo insieme:
Un'ultima cosa: non ho ancora capito da dove vengono.n e.f e cosa sono.
L'operatore "punto" indica l'accesso a un membro di una struttura o di una classe. In questo caso, si tratta di una struttura.
Le lettere n e f sono un modo per specificare il tipo di dati memorizzati in una variabile. Dopo tutto, con un numero enorme di variabili, è impossibile ricordare il tipo di ciascuna. E se in un nome di una variabile ci sarà l'indicazione del suo tipo, la necessità di ricordare scompare da sola. n è un segno di un numero intero (da Numeric), f è un numero reale (da float - floating point number). Questo modo di scrivere i nomi delle variabili è chiamato notazione ungherese.
L'operatore punto indica l'accesso a un membro di una struttura o di una classe. In questo caso, una struttura.
Le lettere n e f sono un modo per specificare il tipo di dati memorizzati in una variabile. Dopo tutto, con un numero enorme di variabili, è impossibile ricordare il tipo di ciascuna. E se in un nome di una variabile ci sarà l'indicazione del suo tipo, la necessità di ricordare scompare da sola. n è un segno di un numero intero (da Numeric), f è un numero reale (da float - floating point number). Questo modo di annotare i nomi delle variabili è chiamato notazione ungherese.
Eccolo!!! Si scopre cheg_ eg_n non sono solo delle abbreviazioni, ma prefissi che dicono che sono variabili globali e globali intere!!! Ugh... E non riuscivo a capire perché questi trattini nelle denominazioni variabili... Come è possibile che un principiante, che non ha familiarità con queste sottigliezze, scriva codice usando array, strutture, ecc. Ho pensato che la mia semplice strategia potesse essere scritta in un linguaggio semplice, senza tuffarsi nel selvaggio.
Potresti darmi un link a un tutorial dettagliato (esteso) su mcl4 da studiare insieme ai tuoi consigli?
E potresti scrivere il codice di cui sopra senza usare la notazione ungherese per il confronto? Sei sicuro che la piattaforma MT4 lo capisca chiaramente?
E una domanda sul codice: a cosa serve ilcontinue;?
Se un ordine non viene selezionato nella prima iterazione, allora non sarà selezionato nelle iterazioni successive e il ciclo continuerà indefinitamente? Perché il numero di ordini non cambia. Non sarebbe più correttorompere con un messaggio di errore?Grafica del menu di contesto, proprietà, colori - hai provato?
Grazie l'ho già trovato!!!
Se programmaticamente, vedere le funzioni ChartSetInteger() e ChartGetInteger().
Grazie per averlo trovato già con il tuo aiuto!!!
Eccolo!!! Si scopre cheg_ eg_n non sono solo delle abbreviazioni, ma prefissi che dicono che sono variabili globali e globali intere!!! Ugh... E non riuscivo a capire perché questi trattini nelle denominazioni variabili... Come è possibile che un principiante, che non ha familiarità con queste sottigliezze, scriva codice usando array, strutture, ecc. Ho pensato che la mia semplice strategia potesse essere scritta in un linguaggio semplice, senza tuffarsi nel selvaggio.
Per fare qualcosa, dobbiamo approfondire le sottigliezze. Non c'è altro modo.
Potresti darmi un link a un tutorial dettagliato (esteso) su mcl4 da studiare insieme ai tuoi consigli?
Conosco solo un libro di testo su MQL4 - quello di Sergey Kovalev.
E potreste scrivere il codice di cui sopra senza usare la notazione ungherese per il confronto? Sei sicuro che la piattaforma MT4 lo capisca chiaramente?
Abituati subito a una formattazione corretta del codice )) La notazione ungherese è stata inventata da programmatori abbastanza esperti.
E una domanda sul codice: a cosa serve ilcontinue;?
Quindi, se un ordine non è selezionato nella prima iterazione, non sarà selezionato in quelle successive e il ciclo andrà avanti all'infinito? Perché il numero di ordini non cambia. Non sarebbe più correttorompere con un messaggio di errore?Se non siamo riusciti a selezionare un ordine, non significa che non saremo in grado di selezionare l'ordine successivo. Quindi è ragionevole continuare il ciclo.
La mancata selezione di un ordine non significa che l'ordine successivo non possa essere selezionato. Pertanto, è ragionevole continuare il ciclo.
E non c'è bisogno di visualizzare un messaggio di errore? Forse sarebbe utile sapere perché un ordine non viene trovato e come evitarlo?