[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 564

 
Ekburg:

no, il problema di cambiare il numero d'ordine di una posizione quando una di esse è chiusa è stato risolto, ho controllato più di una volta pensando che ci potesse essere un errore, ma tutto è a posto, l'ordine richiesto è selezionato e lo stoploss è calcolato correttamente per esso, ma l'ordine non vuole essere modificato...

L'errore 1 è generato solo se tutti i parametri passati alla funzioneOrderModify( ) sono uguali a tutti i parametri dell'ordine da modificare, che voi (per numero di ticket) o la funzioneOrderSelect() avete selezionato per la modifica. Esempio di utilizzo del controllo:

Solo "Funzioni utili da KimIV".

Funzione ModifyOrder()https://www.mql5.com/ru/forum/131859

 
rigonich:

L'errore 1 è generato solo se tutti i parametri passati alla funzioneOrderModify( ) sono uguali a tutti i parametri dell'ordine modificabile che avete selezionato (per numero di biglietto) o la funzioneOrderSelect() per la modifica.

1 (ERR_NO_RESULT) - se nessuno dei parametri è stato cambiato o non c'è errore, ma il risultato è sconosciuto, molto probabilmente, l'ordine non è stato modificato per qualche motivo...
 
abeiks:

Sì, sono d'accordo, la programmazione non è il mio forte, ecco perché sto imparando e facendo domande qui. Ho provato ad aggiungere la chiusura delle posizioni al tuo algoritmo ma non ha funzionato (tutte le posizioni di acquisto si chiudevano) così ho deciso di affrontare il problema dall'altro lato e vedere la soluzione di chiudere le ultime due posizioni di acquisto su un blocco di chiusura già pronto che mi è stato fornito e offerto.

Vi sarei molto grato se poteste mostrarmi come chiudere le ultime due posizioni di acquisto. Capirò dove ho fatto un errore.

 int Slippage = 3;
int Close_buy_2pos()
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != Symbol()) continue;
        if (OrderMagicNumber() != magic) continue;
        if (OrderType() != OP_BUY) continue;
        if (OrderClose (OrderTicket(), OrderLots(), Bid, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == 2) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}

In un caso generale è così. Se usiamo la variante "idiota" (è quella che uso io), allora dobbiamo iniziare un ciclo: prima, trovare l'ultima posizione BUY aperta, poi cancellarla dal ticket, e ripetere il ciclo tante volte quanto necessario.

P.S. Scrivere funzioni per comprare e vendere separatamente - è un'idea sbagliata fin dall'inizio (IMHO).

E la funzione in questo caso non sarà molto più complicata:

int Slippage = 3;
int Close_LastPos (string fs_Symbol,
                   int fi_Magic,
                   int fi_Type = -1,   // тип закрываемых позиций
                   int fi_cnt = 1)     // количсетво закрываемых позиций
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    double ld_PriceClose;
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != fs_Symbol) continue;
        if (OrderMagicNumber() != fi_Magic) continue;
        if (OrderType() != fi_Type) if (fi_Type != -1) continue;
        if (OrderType() > 1) continue;
        if (OrderType() == OP_BUY) ld_PriceClose = NormalizeDouble (Bid, Digits);
        else ld_PriceClose = NormalizeDouble (Ask, Digits);
        if (OrderClose (OrderTicket(), OrderLots(), ld_PriceClose, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == fi_cnt) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}
 
Ekburg:

1 (ERR_NO_RESULT) - se nessuno dei parametri è stato modificato o Non c'è nessun errore ma il risultato è sconosciuto, molto probabilmente solo che l'ordine non viene modificato per qualche motivo...
ERR_NO_RESULT non è un o, ma non c'è un errore ma il risultato è sconosciuto . In quali casi questo errore ritorna è descritto sopra. Se la funzione GetLastError() è chiamata dopo la funzioneOrderModify(), restituirà sicuramente il codice di errore(cioè il motivo per cui l'ordine non è stato modificato) o 0 (in caso di modifica riuscita).

 
TarasBY:

Nel caso generale quindi. Se usiamo la variante "idiota" (è quella che uso io), allora dobbiamo iniziare un ciclo: prima trovare l'ultima posizione BUY aperta, poi cancellarla dal ticket e ripetere il ciclo tante volte quanto necessario.

P.S. Scrivere funzioni per comprare e vendere separatamente - è un'idea sbagliata fin dall'inizio (IMHO).

E la funzione in questo caso non sarebbe molto più complicata:


Grazie, ci darò un'occhiata.

 

Buona sera a tutti, potreste dire ai verdi e agli inesperti perché MetaTrader4 (ultimo) non si aggiorna affatto? L'ho installato ieri, ma la data dell'ultimo aggiornamento è il 30 novembre, e non c'è dinamica su nessuna coppia di valute, e quando compro qualsiasi valuta il mercato è chiuso. (Ho un conto demo). Potete dirmi come abilitare l'aggiornamento o cosa devo fare per tenere traccia dei cambiamenti di prezzo?

 
Lucifer982:

Buona sera a tutti, potreste dire ai verdi e agli inesperti perché MetaTrader4 (ultimo) non si aggiorna affatto? L'ho installato ieri, ma la data dell'ultimo aggiornamento è il 30 novembre, e non c'è dinamica su nessuna coppia di valute, e quando compro qualsiasi valuta il mercato è chiuso. (Ho un conto demo). Potete dirmi come abilitare l'aggiornamento o cosa devo fare per tenere traccia dei cambiamenti di prezzo?


Il sistema inizierà ad aggiornarsi entro poche ore (a seconda del tuo fuso orario). Il DoC ha un giorno di riposo il sabato, la domenica. Quindi non hanno nulla di cui preoccuparsi)))).

O la seconda opzione: scrivere un reclamo al Service Desk del Ministero delle Finanze.

 
T1000:


Si accenderà da solo entro poche ore (a seconda del vostro fuso orario). Il service desk ha un giorno di riposo il sabato, la domenica. quindi non hanno nessun jerks))))

O la seconda opzione: scrivere un reclamo al Service Desk del Ministero delle Finanze.


Capisco, grazie, aspetterò)
 

come ottenere il numero totale di ordini aperti di una certa coppia?

Ho un grafico aperto, l'EA lavora su 10 simboli.

Ho deciso di lasciare che i commenti sul grafico mostrino il numero totale di ordini aperti per ogni simbolo.

Se OrdersTotal mostra il totale di

 
gheka:

In che modo?

Per esempio, così.