Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 246

 
Valeriy Yastremskiy:

Grazie. Farò un tentativo. Non so se funzionerà).

 
Ho ordini aperti e chiusi.
1. Quando si apre un ordine, ho bisogno di scrivere il suo Ticket in un array, se l'array non è occupato (probabilmente =0), in modo da poterlo segnalare più tardi nell'overshoot.
2. Dopo che l'ordine è stato chiuso (potrebbe non essere chiuso), si dovrebbe iniziare il rapporto sul profitto degli ordini chiusi. Quando si raggiunge un certo profitto, cioè: profitto + Take Profit >= profitto di un ordine aperto (chiamiamolo Ordine 123), aperto prima di tutti gli altri, o con una perdita massima (non ho ancora deciso).
3. se le condizioni sono soddisfatte: "somma del profitto + profitto taka >= profitto dell'ordine aperto (chiamiamo l'ordine 123)", l'ordine 123 viene chiuso e l'array si azzera (probabilmente diventa = 0).

1. Quando metti un EA, hai già degli ordini aperti e chiusi che vuoi prendere in considerazione o no e l'EA parte sempre senza ordini aperti e non prende in considerazione gli ordini aperti già chiusi?

2. Non è affatto chiaro. Hai diversi ordini. Quando un ordine viene chiuso, viene calcolato il profitto totale e ci sono i dati del profitto dell'ordine chiuso. E ci sono i dati sui profitti degli ordini che non sono chiusi; potete calcolarli. Cosa viene paragonato a cosa. Per esempio, abbiamo 3 ordini. 1 è chiuso, 2 è in fase di chiusura, 3 è aperto. Abbiamo i profili Pr1, Pr2 e Pr3 stimato. Confrontiamo cosa con cosa. Capiamo che non teniamo conto delle commissioni e degli swap quando l'ordine non è chiuso.

3. In realtà, se si azzera l'array con i biglietti, cosa succederà dopo? Gli ordini di mercato rimarranno sul mercato. Come li chiuderesti?

 
Oksana_Timakova:
Domanda: come faccio a mantenere il valore di High bar ae Low bar b percollegarli con una linea dell'indicatore?
Devo creare due array aggiuntivi per questo?
Sì, array di buffer.
 
Valeriy Yastremskiy:
Sì, array di buffer.
Quindi è lo stesso di ZigZag. E bisogna applicare qualche funzione speciale per non disegnarne due?
 
Oksana_Timakova:
Quindi, si scopre come in ZigZag. E bisogna applicare qualche funzione speciale per non disegnarne due?
Il tipo di linea è lo stesso. Non capisco cosa non avrebbe disegnato. Si dichiarano 2 array di buffer. Si impostano le proprietà. Questo è il tipo di linea, il colore dello spessore. E si assegna il primo prezzo alto e il secondo basso per barra dalla serie temporale.
 
Valeriy Yastremskiy:

1. Quando metti un EA, hai già degli ordini aperti e chiusi che vuoi prendere in considerazione o no, e ogni volta l'EA parte senza ordini aperti e non prende in considerazione gli ordini precedentemente chiusi?

2. Non è affatto chiaro. Hai diversi ordini. Quando un ordine viene chiuso, viene calcolato il profitto totale e ci sono i dati del profitto dell'ordine chiuso. E ci sono i dati sui profitti degli ordini che non sono chiusi; potete calcolarli. Cosa viene paragonato a cosa. Per esempio, abbiamo 3 ordini. 1 è chiuso, 2 è in fase di chiusura, 3 è aperto. Abbiamo i profili Pr1, Pr2 e Pr3 stimato. Confrontiamo cosa con cosa. Capiamo che non teniamo conto delle commissioni e degli swap quando l'ordine non è chiuso.

3. In realtà, se si azzera l'array con i biglietti, cosa succederà dopo? Gli ordini di mercato rimarranno sul mercato. Come si fa a chiuderli?

Ancora una volta ))))

Abbiamo ordini aperti, supponiamo 5 ordini che sono tutti negativi. Il primo ordine (123) con 0,5 lotti è caduto in meno. Apriamo un nuovo ordine (456) con 0.1 lotto, il ticket di questo ordine viene scritto nell'array quando viene aperto. Poi procediamo con un'altra serie di ordini con lo stesso lotto; guadagniamo alcuni profitti e ne perdiamo altri. Ma l'ordine 123 rimane negativo e aperto. Una volta che il profitto di tutti gli ordini chiusi dopo l'ordine 456 (anch'esso chiuso) è superiore al profitto dell'ordine 123, troviamo l'ordine 123 perché è il primo ordine ancora aperto, lo chiudiamo e azzeriamo l'array.

Se abbiamo diversi ordini aperti, ne apriamo un altro a certe condizioni. Supponiamo che se ordertotal>=5

fine degli ordini (biglietto 456)

se l'ordine è stato aperto con successo

se l'array non è occupato

il biglietto 456 viene scritto nell'array

L'ordine 456 ha chiuso in profitto (non importa quale sia il profitto o la perdita), dopo di che altri ordini sono stati aperti e chiusi, ma l'array memorizza il ticket 456.


CalCloseProfi () - questa funzione controlla il profitto degli ordini chiusi

passa in rassegna gli ordini chiusi per magia, comprare, vendere, a partire dall'ordine con il ticket 456 (preso dall'array) in su, e conta il loro profitto


FirstOrder() - questa funzione cerca il primo ordine aperto (dovrebbe trovare 123)

Se il profiloCalCloseProfi> FirstOrder, allora chiudete l'ordine 123 e azzerate l'array, in modo da potervi scrivere nuovamente quando le condizioni sono soddisfatte.


Non so come altro spiegarlo)

Le condizioni in cui verrà eseguita questa funzione, posso scrivere, ma non mi trovo di fronte ad array.
Ho bisogno di un esempio, come ottenere informazioni nell'array, cioè OrederTicket quando è aperto, e come ottenerlo dopo.
È auspicabile utilizzare un doppio array e scrivere il mago in una sola parte, in modo che quando si lavora su un account a diverse impostazioni non sono mescolati (o forse no, io non sono bravo a array).

Grazie in anticipo

 
makssub:

Ancora una volta ))))

Ci sono ordini aperti, supponiamo 5, tutti negativi. Il primissimo (123) con 0,5 lotti era negativo. Apriamo un nuovo ordine (456) con 0.1 lotto, il ticket di questo ordine viene scritto nell'array quando viene aperto. Poi procediamo con un'altra serie di ordini con lo stesso lotto; guadagniamo alcuni profitti e ne perdiamo altri. Ma l'ordine 123 rimane negativo e aperto. Una volta che il profitto di tutti gli ordini chiusi dopo l'ordine 456 (anch'esso chiuso) è superiore al profitto dell'ordine 123, troviamo l'ordine 123 perché è il primo ordine ancora aperto, lo chiudiamo e azzeriamo l'array.

Se abbiamo diversi ordini aperti, ne apriamo un altro a certe condizioni. Supponiamo che se ordertotal>=5

fine degli ordini (biglietto 456)

se l'ordine è stato aperto con successo

se l'array non è occupato

il biglietto 456 viene scritto nell'array

L'ordine 456 ha chiuso in profitto (non importa quale sia il profitto o la perdita), dopo di che altri ordini sono stati aperti e chiusi, ma l'array memorizza il ticket 456.


CalCloseProfi () - questa funzione controlla il profitto degli ordini chiusi

passa in rassegna gli ordini chiusi per magia, comprare, vendere, a partire dall'ordine con il ticket 456 (preso dall'array) in su, e conta il loro profitto


FirstOrder() - questa funzione cerca il primo ordine aperto (dovrebbe trovare 123)

Se il profiloCalCloseProfi> FirstOrder, allora chiudete l'ordine 123 e azzerate l'array, in modo da potervi scrivere nuovamente quando le condizioni sono soddisfatte.


Non so come altro spiegarlo)

Le condizioni in cui verrà eseguita questa funzione, posso scrivere, ma non mi trovo di fronte ad array.
Ho bisogno di un esempio, come ottenere informazioni nell'array, cioè OrederTicket quando è aperto, e come ottenerlo dopo.
È auspicabile utilizzare un doppio array e scrivere il mago in una parte di esso, in modo che quando si lavora su un account a diverse impostazioni non siano mescolate (o forse no, non sono bravo con gli array).

Grazie in anticipo

Scrivi le condizioni per le funzioni.
 

Buon pomeriggio. Potete dirmi perché c'è un errore: array out of range in '.......' (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
if (ticket <1)
{
Print("Sell open error");
}
if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
{
FindTicket();
Print(" Ordine del biglietto: ", FindTicket(), " Ordine Array: ", SaveTick[1], " Array Magic: ", SaveTick[0]);
}

int FindTicket()
{
int oldticket;
int tick=0;
ticket=0;
ArrayResize( SaveTick, 2 );
for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
tick = OrderTicket();
SaveTick[1] = tick;
SaveTick[0] = Magic;
}
}
}
}
return(tick);
}

 
makssub #:

Buon pomeriggio. Potete dirmi perché c'è un errore: array out of range in '.......' (152,41)


ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
            if (ticket <1)
            {
               Print("Ошибка открытия на продажу");
            }
               if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
            {
               FindTicket();
               Print(" Тикет ордера: ", FindTicket(), " Массив ордера: ", SaveTick[1], " Магик массива: ", SaveTick[0]);
    }

int FindTicket()
   {
   int oldticket;
   int tick=0;
   ticket=0;
   ArrayResize( SaveTick, 2 );
   for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
      {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
         {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
            oldticket = OrderTicket();
            if (oldticket > ticket)
               {
               ticket = oldticket;
               tick = OrderTicket();
               SaveTick[1] = tick;
               SaveTick[0] = Magic;
               }
            }
         }
      }
   return(tick);
  }              

Inserisci il codice correttamente, alt S o per icona, hint code.

Perché avete bisogno dell'arraySaveTick?

Si usano solo 2 elementi dell'array. Sostituitele con variabili globali o statiche se le dichiarate in una funzione.

Non ha senso usare un array per 2 variabili.

E sembra che tu chiami gli array prima che venga chiamata la funzioneFindTick(), dove viene impostata la dimensione dell'array SaveTick. E c'è un superamento dell'array.

 
Ha smesso di funzionare 🤖?