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

 
Vinin:

Questa formula è abbastanza facile da adattare alle esigenze. Devi solo prendere in considerazione il lotto minimo

Questo sembra un po' diverso

lot=Min_Lot+lotstep*MathRound((AccountBalance()-X)*0.001/lotstep);

Dove X - Saldo per l'apertura del lotto minimo,

Ma dobbiamo ancora controllare il lotto minimo.

Perché abbiamo bisogno di tutte queste complessità, X che devono essere calcolate separatamente? Inoltre, avremo bisogno di ulteriori controlli...

Non sarebbe più facile controllare direttamente e onestamente la validità e l'accettabilità di tutti i valori della formula, e poi calcolarla onestamente?

A proposito, MathRound() arrotonda all'intero più vicino, cioè può facilmente sovrastimare erroneamente, il che può causare ulteriori conseguenze.

 

Povero piccolo ragazzo.

 
simpleton:
Non tu.
 
Salve. Sto cercando di calcolare lo StopLoss dal minimo e dal massimo della prima barra, dopo aver piazzato un ordine pendente, rispettivamente per comprare e vendere. Ma non ho ottenuto alcun risultato, solo 130 errori, tutto qui. Grazie in anticipo.
if(ticket>0)
           {
            SL = NormalizeDouble(Low[1] - StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...
//+-------------------------------------------------------------------------+
if(ticket>0)
           {
SL = NormalizeDouble(High[1] + StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...                     																							
 
State normalizzando la cosa sbagliata.
 
Petiyashaket:
Se potete spiegarlo in una linea di codice e con commenti, come nel mio codice precedente, ve ne sarò estremamente grato.

"Ho dei dubbi", e non posso fare a meno di sentire che si tratta del meccanismo di caching dell'ambiente di mercato.

In modo che il terminale non debba "correre al server" per ogni occasione, come OrdersTotal(), OrderSymbol() ecc., l'ambiente di mercato viene copiato in una cache, che sembra essere diversa per ogni script, ma lo script tratta solo questa cache. La cache NON viene aggiornata automaticamente durante tutto il tempo di esecuzione della funzione principale dello script anche dopo l'esecuzione con successo di funzioni come OrderSend() che cambiano l'ambiente di mercato sul server, quindi, l'ordine che appare nello script "non è visibile", cioè fa un'illusione della sua assenza. Semplicemente non può essere rilevato nel ciclo for, ed è per questo che OrderModify() non viene chiamato. Questa è un'ipotesi che è nata sulla base di vaghi dubbi e sentimenti incomprensibili.

La cache descritta può essere forzatamente aggiornata usando la chiamata RefreshRates(), per esempio, immediatamente dopo la chiamata di OrderSend(). Controlla se l'ipotesi è corretta.

Se, tra l'altro, RefreshRates() ritorna vero, allora questa è un'ulteriore conferma indiretta dell'ipotesi.

 
Petiyashaket:
Se me lo spieghi in una linea di codice e con commenti, come nel mio codice precedente, te ne sarò estremamente grato.
Se non lo capisci, leggilo qui. E qui. Poi fate in modo che le variabili non perdano il loro significato ad ogni spunta e organizzate il ciclo in modo adeguato.
 
simpleton:

"Ho dei dubbi", e non posso fare a meno di sentire che si tratta di un meccanismo di caching dell'ambiente di mercato.

In modo che il terminale non debba "correre al server" per ogni occasione, come OrdersTotal(), OrderSymbol() ecc., l'ambiente di mercato viene copiato in una cache, che sembra essere diversa per ogni script, ma lo script tratta solo questa cache. La cache NON viene aggiornata automaticamente durante tutto il tempo di esecuzione della funzione principale dello script anche dopo l'esecuzione con successo di funzioni come OrderSend() che cambiano l'ambiente di mercato sul server, quindi, l'ordine che appare nello script "non è visibile", cioè fa un'illusione della sua assenza. Semplicemente non può essere rilevato nel ciclo for, ed è per questo che OrderModify() non viene chiamato. Questa è l'ipotesi che è nata sulla base di vaghi dubbi e sensazioni poco convincenti.

La cache descritta può essere forzatamente aggiornata usando la chiamata RefreshRates(), per esempio, subito dopo la chiamata OrderSend(). Controlla se l'ipotesi è corretta.

Se, tra l'altro, RefreshRates() ritorna vero, questa è un'ulteriore conferma indiretta dell'ipotesi.

Prende droghe?
 
noob1:
Salve. Per favore consigliatemi, se lo so, sto cercando di calcolare uno StopLoss dal basso e dall'alto della prima barra, dopo che un ordine pendente è stato piazzato, rispettivamente per comprare e vendere. Ma non ho ottenuto nulla, solo 130 errori e nient'altro. Grazie in anticipo.

Controlla se OrderOpenPrice() è troppo vicino a SL, e se gli stop sono "sul lato destro del prezzo". Potete leggere qui:

I prezzi di StopLoss e TakeProfit non possono essere troppo vicini al mercato. La distanza minima di stop in pip può essere ottenuta utilizzando la funzione MarketInfo() con il parametro MODE_STOPLEVEL. L'errore 130 (ERR_INVALID_STOPS) sarà generato in caso di fermate sbagliate o non normalizzate.

In questo caso, cioè per un ordine pendente, il "mercato" è il suo "prezzo aperto pendente".

 
tara:
State normalizzando la cosa sbagliata.
Dalla documentazione:
Motivazione: