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

 
KhuKhu:

Ciao amici.

Come fare in modo che i valori di stop loss, tekprofit e trailing siano visualizzati in percentuale invece che in pip.

Questa formula è troppo ingombrante e non funziona affatto

StopLoss=NormalizeDouble(Bid-(Bid-TrailingStop)/100*TRAL_PERCENT,Digits);

Vorrei avere la forma più semplice di percentuale.

Doppio Stoploss = 0,05;

--------

Profit=Bid-Stoploss in percentuale(è un esempio disordinato, ma solo per chiarezza)

Grazie.

Un esempio approssimativo porta ad una risposta approssimativa. Per capirlo, bisogna capire da cosa si misura la percentuale.

 
Андрей Касторский:
.. Chiunque abbia bisogno di aiutare a scrivere un EA, potete mandarmi un'email. Aiuterò

aiutare a prendere il prezzo da zero bar, ecco la discussione

https://www.mql5.com/ru/forum/160683/page237#comment_5350688

 
Alexey Viktorov:

Un esempio inconsistente dà luogo a una risposta inconsistente. Per capire, bisogna capire su cosa si misurano le percentuali.

Capito.

Cercherò di essere più chiaro.

Il mio codice è originariamente scritto nel modo seguente:

extern double StopLoss =0;

extern double TakeProfit =0;

extern double SL_PERCENT = 0,02;

extern double TP_PERCENT = 0,03;

extern double TRALL_PERCENT = 0,01;

extern double Lots =0.5;


Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,NormalizeDouble(OrderOpenPrice+(OrderOpenPrice + StopLoss)/100*SL_PERCENT,Digits),NormalizeDouble(OrderOpenPrice-(OrderOpenPrice - TakeProfit)/100*TP_PERCENT,Digits),",Magic,0,Red);

Lo StopLoss viene attivato, ma non dello 0,02%, bensì dello 0,43%, il che non è corretto. Non conosco TakeProfit perché non l'ho mai provato prima, ma sembra che anche questo non sia corretto.

Ho alcuni suggerimenti che il codice non è corretto.

Un'altra cosa, forse importante. I miei ordini sono aperti per tutti i miei depo per 3-4 coppie. A volte per cinque.


Inoltre voglio cambiare parametri come StopLoss, Takeprofit, TrailingStop in percentuale, non in punti.

Per esempio,

1) Takeprofit=OrderOnProfit+%TP_PERCENT

2) Stoploss=OrderOnPrice-%SL_PERCENT

Cioè

ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,%,%,",Magic,0,clrGreen);


Non so come modificarlo ulteriormente per il trailing.

Ho preso un esempio dal tutorial, ma ovviamente sto sbagliando qualcosa.

3.) TrailingStop=Bid-%TRALL_PERCENT

caso 0: // ordine di acquisto

if (NormalizeDouble(OrderOpenPrice-SL*Point,Digits)*SL_PERCENT/100<=(OrderOpenPrice-Ask) // Se sotto

NormalizeDouble(Bid-(Bid-TS)/100*TRAL_PERCENT,Digits)

|| NormalizeDouble(SL,Digits)==0)

{

SL=Bid-TS*Point; //allora modificatelo

string Text="Buy "; // Testo per Buy

Modify=true; // assegnato alla modifica.

}


Spero davvero di essere stato in grado di spiegare.

Grazie.

 

Come implementare correttamente l'apertura di un'operazione (OrderSend) rigorosamente all'inizio della candela - OnTimer e/o OnTick,

Per non sovraccaricare il terminale (20-30 grafici aperti e tracciati simultaneamente)?

ha scoperto che il ritardo nella comparsa di un nuovo tick all'inizio di una candela può essere fino a 5-10 secondi; il divario con il tick precedente è significativo (negativo per le condizioni di transazione)

p.s. allo stesso tempo nell'Expert Advisor si suppone di notificare un possibile accordo 1-2 minuti prima dell'apertura dell'accordo, cioè prima dell'inizio dell'apertura di una candela.

 
maxsoft:

Come implementare correttamente l'apertura di un'operazione (OrderSend) rigorosamente all'inizio della candela - OnTimer e/o OnTick,

per non sovraccaricare il terminale (20-30 grafici aperti e tracciati simultaneamente)?

Si è scoperto che il ritardo nell'apparizione di un nuovo tick all'inizio di una candela può essere fino a 5-10 secondi con un gap significativo rispetto al tick precedente (è negativo per condizioni di deal)

p.s. in questo caso, si suppone che l'Expert Advisor informi preliminarmente su un possibile accordo 1-2 minuti prima dell'apertura dell'accordo, cioè prima dell'inizio dell'apertura di una candela.

È necessario visualizzare tutti i grafici aperti nel timer per vedere se appare una nuova barra.

Devi creare un array di puntatori a istanze di classi - una classe per ogni timeframe di ogni grafico aperto.

La classe che controllerà l'apertura di una nuova barra può essere trovata in questo articolo.

Apri il grafico - aggiungilo alla serie di grafici aperti. Chiudi il grafico - cancellalo dalla matrice.

Nel ciclo nel timer si passa attraverso un array di puntatori a istanze di classi e si controlla il fatto dell'apertura di una nuova barra, che la classe restituirà in caso di formazione di una nuova barra.

 
Artyom Trishkin:

È necessario visualizzare tutti i grafici aperti nel timer per vedere se appare una nuova barra.

Dovete creare un array di puntatori alle istanze di classe ...

Che ne dite di usare MQL4?

E cosa fare con - "...si suppone che notifichi preliminarmente un possibile accordo 1-2 minuti prima dell'apertura dell'accordo, cioè prima dell'apertura di una candela...", cioè all'interno di una barra

 

Benvenuto nel topic https://www.mql5.com/ru/forum/208120#comment_5412193

Non riesco a trovare un consenso.

Играем в блиц ЧТО? ГДЕ? КОГДА? 3 вопроса по 20 секунд
Играем в блиц ЧТО? ГДЕ? КОГДА? 3 вопроса по 20 секунд
  • 2017.07.07
  • www.mql5.com
Народ, подскажите пожалуйста, заморочился я тут по поводу AccountBalance() и AccountLeverage(). 1...
 

Prima di visualizzare il tipo doubl, lo normalizzo a 2 cifre decimali, ma a volte non funziona. Perché? Ecco una parte del codice.

prof[num]=(string)NormalizeDouble((double)prof[num]+(double)profit2,2);

Tipo prof[] è una stringa

E si blocca nel seguente modo


 
Vladimir Tkach:

Prima di visualizzare il tipo doubl, lo normalizzo a 2 cifre decimali, ma a volte non funziona. Perché? Ecco una parte del codice.

Tipo prof[] è una stringa

Si blocca nel seguente modo


DoubleToString()

DoubleToString

Converte un valore numerico in una stringa di testo.

stringaDoubleToString(
valore doppio,//numero
intdigits=8//numero di posti decimali
);

Parametri

valore

[Il valore è un valore in virgola mobile.

cifre

[Il formato della precisione. Se il valore delle cifre è compreso tra 0 e 16, allora si otterrà la rappresentazione in stringa del numero, con il numero di posizioni decimali specificato. Se il valore delle cifre è compreso tra -1 e -16, allora si otterrà una rappresentazione stringa del numero in formato scientifico con il numero di posizioni decimali specificato. In tutti gli altri casi, la rappresentazione stringa del numero avrà 8 cifre decimali.

Valore restituito

Una stringa contenente la rappresentazione in caratteri del numero nel formato di precisione specificato.

Esempio:

Print("DoubleToString(120.0+M_PI) : ",DoubleToString(120.0+M_PI);
Print("DoubleToString(120.0+M_PI,16) : ",DoubleToString(120.0+M_PI,16);
Print("DoubleToString(120.0+M_PI,-16) : ",DoubleToString(120.0+M_PI,-16);
Print("DoubleToString(120.0+M_PI,-1) : ",DoubleToString(120.0+M_PI,-1));
Print("DoubleToString(120.0+M_PI,-20) : ",DoubleToString(120.0+M_PI,-20);

 

Un insetto meraviglioso o altro.

Aggiungiamo gli ingressi:

input datetime test                                =0;

Compilare. Con la data 1970.01.01 zero, non è possibile impostare l'ora su 00, 01 o 02 nelle impostazioni.