Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 63

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
Gumko:
È in piedi da due giorni ormai.
Ciao a tutti.
Modifiche e problemi.
Funzione esterna:
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){
//---- struttura vincolante e risultati commerciali
Richiesta MqlTradeRequest;
MqlTradeResult risultato;
//---- struttura di inizializzazione della ricerca di trade MqlTradeRequest per la modifica della posizione
request.action = TRADE_ACTION_SLTP;
richiesta.simbolo = simbolo;
richiesta.sl = StopLoss;
request.tp = Takeprofit;
parola stringa = "";
StringConcatenate(parola,
"<< ============ Modifyposition(): Modifica la posizione ",
simbolo," ============ >>>");
Stampa(parola);
//---- modificare la posizione e controllare i risultati della ricerca commerciale
if(!OrderSend(request,result)|| result.deal==0)
{
Print("Modifica errore =", GetLastError();
return(false);
}
return(true);
}
Ma non funziona così.
Come fare?
Grazie :)
Provate in questo modo:
Prova in questo modo:
Yedelkin,
Grazie, non ha funzionato.
Ho controllato se conta correttamente l'inizio della chiamata di funzione.
Ecco come ho fatto:
double Bid = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits);
double Ask = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits);
double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
se(Open > 0){
start_buy = Ask - Open; Print("start_buy=",start_buy);
start_sel = Open - Bid; Print("start_sel=",start_sel);
}
Sorpresa nel registro:
MR 0 Core 1 10:21:49 2012.10.01 10:12:42 affare #2 vendere 0.10 EURUSD a 1.28146 fatto (basato sull'ordine #2)
GH 0 Core 1 10:21:49 2012.10.01 01 01:12:42 operazione eseguita [#2 vendere 0,10 EURUSD a 1,28146]
NI 0 Core 1 10:21:49 2012.10.01 01 01:12:42 ordine eseguito vendere 0.10 a 1.28146 [#2 vendere 0.10 EURUSD a 1.28146 (0.00000)
OF 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_buy=0.000129999999999999635
DR 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_sel=5.000000000010552e-005
LE 0 Core 1 10:21:49 2012.10.01 01:12:43 start_buy=0.0001099999999998325
IT 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005
Naturalmente mi chiedevo proprio Sela, da dove vengono i numeri?
Penso di aver scritto correttamente la funzione come mostrato:
Modifica SL e TP
Ordine di trading per la modifica dei livelli di StopLoss e/o TakeProfit. Richiede 4 campi:
Quindi cosa esattamente "ha fallito"?
Inserisci il codice correttamente (Ctrl+Alt+M):
Qui la normalizzazione deve essere usata in una sequenza diversa.
1. poiché i valori di tipo SymbolInfoDouble(Currency,SYMBOL_BID) provengono dal server, sono già considerati normalizzati. E non c'è bisogno di normalizzarli una seconda volta. Cioè potete semplicemente scriverli:
2. Ma dopo qualsiasi operazione aritmetica la normalizzazione non c'è più, quindi se hai bisogno di ottenere un numero normalizzato, dovresti scriverlo così:
Sto ancora pensando al resto.
DR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
EN 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=7.0000000145e-005
Naturalmente, interessato solo al sel - da dove vengono questi numeri?
7.00000000000145e-005 è solo uno dei modi di registrare il valore di un numero reale. Credo che si chiami "scientifico". Per maggiori dettagli vedere."Guida di riferimento MQL5 / Fondamenti del linguaggio / Tipi di dati / Tipi reali (double, float)".
Yedelkin,
Grazie per aver affrontato il problema.
Ecco il codice. Le funzioni per aprire la posizione sono state scritte da Nikolay Kositsin.
Per esempio, ho aggiunto una MA a MFI e voglio registrare questa MA nel mio EA. Non so dove e come farlo.
Grazie per la vostra risposta)
1. Direi questo: usate il codice di qualcun altro con molta attenzione. Perché il codice di qualcun altro significa anche gli errori di qualcun altro.
2. Qui(https://www.mql5.com/ru/forum/6343/page64#comment_357008) ho suggerito di provare ad azzerare correttamente le variabili prima di usarle. Ma il tuo codice non ha ancora implementato questo suggerimento. Inoltre, il vostro codice contiene costrutti del tipo seguente:
Vedete, in questo costrutto le variabili request e result sono azzerate non prima del loro utilizzo, ma dopo il loro utilizzo. Inoltre, quando queste variabili locali sono azzerate, la funzione smette di funzionare, cioè l'azzeramento stesso non ha senso. In altre parole, tale costruzione è un buon esempio di come le variabili MqlTradeRequest e MqlTradeResult non dovrebbero essere azzerate. Quindi, se siete impazienti, per favore, provate a cancellare le variabili correttamente. Se qualcosa va storto, per favore, descrivete in dettaglio cosa "non funziona".
3. La Libreria Standard ha una classe commerciale"MQL5 Reference / Standard Library / Trade Classes / CTrade". Cercate di capire come applicarlo nella pratica. Nella fase iniziale di immersione nella lingua, questa classe può essere abbastanza sufficiente. Per esempio, questa classe ha il seguente metodo:"MQL5 Reference / Standard Library / Trade Classes / 2CTrade/ PositionModify". È implementato come segue:
La linea "ClearStructures();" cancella la variabile m_request prima di usarla.