Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 124

 
Игорь:
Ciao!
Puoi dirmi come ridipingere le barre senza usare modelli in mt4?
O come applicare una combinazione di colori!?
Menu contestuale grafico, proprietà, colori - hai provato?
 
Ihor Herasko:

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.




 
Игорь:

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().

 
novichok2018:

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 strict

input       int 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                                                                                                                                                                    |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit()
{
   return INIT_SUCCEEDED;
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert deinitialization function                                                                                                                                                                  |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert tick function                                                                                                                                                                              |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnTick()
{
    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;
}
 
novichok2018:

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.

 
Ihor Herasko:

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?
 
STARIJ:
Grafica del menu di contesto, proprietà, colori - hai provato?

Grazie l'ho già trovato!!!

 
Ihor Herasko:

Se programmaticamente, vedere le funzioni ChartSetInteger() e ChartGetInteger().

Grazie per averlo trovato già con il tuo aiuto!!!

 
novichok2018:

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.

Учебник по MQL4
Учебник по MQL4
  • book.mql4.com
В настоящее время персональный компьютер стал незаменимым помощником в жизни каждого человека. Благодаря развитию Интернета и увеличению мощности современных компьютеров открылись новые возможности во многих областях деятельности. Ещё десять лет назад торговля на финансовых рынках была доступна только банкам и узкому кругу специалистов. Сегодня...
 
Ihor Herasko:

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?

Motivazione: