Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 404
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ho iniziato a scrivere un wrapper per le funzioni di apertura e modifica degli ordini (ho pensato che avrebbe risolto i miei problemi con il ritorno dei valori da questi operatori) ma c'è lo stesso problema.
Spiegare qual è il problema (non importa cosa scrivo, c'è sempre un problema con il ritorno dei valori da OrderSend, OrderSelex e ModifyOrder)
Codice Wrapper .
int start()
{
se (segnale == 1)
{
OrderSendX(Symbol(),OP_BUY,0.1,Ask,0,500,500,"123",123,0,Red);
}
ritorno(0);
}
//-----------------------------------------------
int OrderSendX (simbolo stringa, int cmd, doppio volume, doppio prezzo, int slippage, doppio stoploss, doppio takeprofit, commento stringa,
int magic,datetime expiration,color arrow_color)
{
int err=GetLastError();
errare = 0;
bool exit_loop = false;
int ticket = -1;
int Retry = 10;
int cnt = 0;
if(cmd == OP_BUY || cmd == OP_SELL) //controlla il tipo di ordine da aprire
{
mentre(!exit_loop)
{
ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);
err = GetLastError();
interruttore(err)
{
caso ERR_NO_ERROR:
exit_loop = true;
pausa;
{ caso ERR_SERVER_BUSY:
caso ERR_NO_CONNECTION:
caso ERR_INVALID_PRICE:
caso ERR_BROKER_BUSY:
caso ERR_TRADE_CONTEXT_BUSY:
cnt++;
pausa;
caso ERR_PRICE_CHANGED:
caso ERR_OFF_QUOTES:
caso ERR_REQUOTE:
RefreshRates();
continuare;
default:
exit_loop = true;
pausa;
}
se(cnt>Retry)
exit_loop = true;
se(!exit_loop)
{
Dormire(1000);
RefreshRates();
}
else
{
se(err !=ERR_NO_ERROR)
{
Stampa("Errore : " + err);
}
}
se(err ==ERR_NO_ERROR)
{
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
return(ticket);
}
Print("Errore di apertura dell'ordine dopo" + cnt + "tentativi");
ritorno(-1);
}
}
}
Ho iniziato a scrivere un wrapper per le funzioni di apertura e modifica degli ordini (ho pensato che avrebbe risolto i miei problemi con il ritorno dei valori da questi operatori) ma c'è lo stesso problema.
Spiegatemi qual è il problema (non importa cosa ho scritto, ho sempre problemi con il ritorno dei valori da OrderSend, OrderSelex e ModifyOrder)
https://docs.mql4.com/ru/trading/ordermodify
OrderModify() restituisce sì, no
Nessuno può spiegare.
Proviamo un altro esempio invece di copiare l'aiuto 100 volte a me.
Come dovrebbe essere corretto? Userò un esempio per capire le correzioni
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
se(OrderStopLoss()!=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
non inserire
"""ticket """= OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0); ogni volta è corretto?
E grazie a tutti quelli che hanno cercato di spiegare.
Purtroppo non capisco come designare una variabile ad una variabile che è predefinita come funzione.
E grazie a tutti quelli che hanno cercato di spiegare.
Purtroppo non capisco come designare una variabile ad una variabile che è predefinita come funzione.
CaroLeanid. Imparate a leggere l'aiuto e a lavorare con gli errori e gli avvertimenti. Se non imparate a farlo, non riuscirete nemmeno a programmare correttamente. Queste sono le basi. Avete provato a tradurre ciò che è scritto negli avvertimenti? Capite il significato di funzioni che "devono essere controllate"? La guida descrive un esempio corretto di gestione di queste funzioni. Per esempio, OrderModify(). Guarda l'aiuto:
Valore di ritorno
Restituisce true se la funzione si completa con successo o false in caso di errore. Per ottenere informazioni sull'errore, è necessario chiamare la funzioneGetLastError().
e poi segue un esempio:
Come potete vedere, il valore di ritorno della funzione è gestito nell'operatore if-else. La variabile res è necessaria "per bellezza" per una ragione. È il risultato dell'esecuzione di una funzione di trading! La funzione da cui dipende il vostro denaro! Di conseguenza, per elaborare correttamente tutte le possibili varianti (l'elaborazione in questo esempio non è prevista), abbiamo bisogno della variabile res e del codice di errore restituito dalla funzione GetLastError(). Gli sviluppatori hanno intenzionalmente incluso gli avvertimenti come promemoria per non dimenticare che ci sono funzioni "importanti" per prestare attenzione all'elaborazione dei valori! Notate anche che se il valore non è controllato non ci sarà alcun errore! Cioè, in questo caso, la funzione funzionerà così com'è, ma se si verifica una situazione anomala, non verrà elaborata. La lista delle situazioni non standard sono codici di ritorno della funzione GetLastError().
Spero che sia più chiaro così.
Ho iniziato a scrivere un wrapper per le funzioni di apertura e modifica degli ordini (pensavo che avrebbe risolto il mio problema con la restituzione dei valori da questi operatori) ma c'è lo stesso problema.
E in questo caso non abbiamo bisogno di scrivere un wrapper. Non risolverà il problema con l'avvertimento sul controllo del valore di ritorno! Date un'occhiata agli esempi di queste funzioni e fate lo stesso!
Come indicato nel riferimento dà un errore.
L'ho scritto così e va bene
if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0))
{
Print("La modifica ha avuto successo");
}
else Print("Errore nella modifica dell 'ordine");
Inserire correttamente il codice nei messaggi:Inserire correttamente il codice nel forum
Perché Trawling non funziona per vendere? Funziona per comprare!
Nessun errore o avvertimento, nella compilazione genetica.
Ecco il codice: