[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 81

 

extern bool BUY = true;
extern int Magic = 0;
extern double Lot = 0.1;
extern int takeprofit = 0;
extern int stoploss = 0;
extern int slippage = 3;
double SL,TP;
int init(){
return(0);
}
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;

BUY=false;
}

return(0);
}
void OPENORDER(string ord)
{
int error;
while (true)
{ error=true;
if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,",Magic,0){BUY = false;}
}
return;
}

 
nemo811:

Per favore, mi faccia un esempio. Sto imparando e non ho ancora affrontato il compito di impostare una bandiera. )
Basta cambiare la variabile in false e questo è tutto, al prossimo tick l'EA non entrerà in questo blocco e non aprirà nient'altro fino al riavvio.
 
nemo811:

Per favore consigliate come permettere una singola esecuzione di una condizione in un EA (ad esempio l'apertura di un ordine), piuttosto che ripeterla ad ogni tick. In questo caso, quando si chiude una posizione, l'EA non dovrebbe aprirne una nuova. Ho provato a visualizzarlo, ma non funziona come previsto.

Grazie in anticipo.



perché hai dato il nome alla variabile dove il biglietto d'ordine sarà salvato errore?

se (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0){BUY = false;}

Leggete su OrderSend(), penso che le domande spariranno da sole, io scriverei qualcosa del genere:

void OPENORDER(string ord)
{
int ticket = -1;
 while (ticket<0)
 {ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
  sleep(500);
}
return;
}
 
IgorM:



Forse avete letto prima che ho espresso il mio problema. Sembra che abbiano trovato una soluzione, ma non riesco a trovare nel libro come lavorare con le stringhe in mql(

come faccio a togliere i numeri dalla linea per linea?

 
NameLess:


Forse avete letto prima che ho espresso il mio problema. Sembra che abbiano trovato una soluzione, ma non riesco a trovare nel libro come lavorare con le stringhe in mql(

come faccio a togliere i numeri dalla linea per linea?


Creare uno script per sperimentare le funzioni di stringa MQL4 - vedere qui https://docs.mql4.com/ru/strings
 

ZERO

secondo quali regole, per esempio?

 
drknn:

Creare uno script che sperimenti le funzioni di stringa MQL4 - vedere qui https://docs.mql4.com/ru/strings/StringSubstr

Grazie!
 
NameLess:


Forse hai letto un po' prima che ho espresso il mio problema. Sembra essere una soluzione, ma non riesco a trovare un modo per lavorare con le stringhe in mql nel libro (

come si toglie un numero da una stringa di numeri?

per convertire un numero in una stringa https://docs.mql4.com/ru/convert/DoubleToStr

taglia una parte della stringa https://docs.mql4.com/ru/strings/StringSubstr dall'inizio https://docs.mql4.com/ru/strings/StringLen

e riconvertirlo al tipo reale https://docs.mql4.com/ru/convert/StrToDouble

questo è tutto quello che dovete fare con le stringhe, forse StrToDouble() sarà sufficiente per voi.

ma questo "brutto modo" taglierà il numero, non lo arrotonderà. Un altro modo: moltiplicare un numero reale a potenza di x per 10, e dare il risultato al tipo int - se non mi sbaglio, non ci sarà arrotondamento, poi dividere int per 10 a potenza di x.

 
IgorM:

tradurre un numero nella stringa https://docs.mql4.com/ru/convert/DoubleToStr

taglia una parte della stringa https://docs.mql4.com/ru/strings/StringSubstr dall'inizio di https://docs.mql4.com/ru/strings/StringLen

e riconvertire tutto in un tipo reale https://docs.mql4.com/ru/convert/StrToDouble

questo è tutto quello che dovete fare con le stringhe, forse StrToDouble() è sufficiente per voi.

ma questo "brutto modo" taglierà il numero, non lo arrotonderà. Un altro modo: moltiplicate un numero reale per 10 alla potenza di x, e date il risultato al tipo int - se non mi sbaglio, non ci sarà arrotondamento, poi dividete int per 10 alla potenza di x


almeno *tagliare*, poiché il numero può essere tolto solo dall'indicatore a una stringa... grazie per il consiglio, sperimenterò)
 

IgorM:

NameLess :

Grazie per l'aiuto. Capisco la logica con l'impostazione della bandiera e la funzione di restituzione del numero di ordini. Ma mi interessa anche il momento in cui l'ordine viene chiuso. Sembra che la condizione di bandiera provi a piazzare di nuovo un ordine ma la funzione che restituisce il numero d'ordine dice che c'è 1 ordine in meno e inizializza anche l'apertura di una posizione. Correggetemi se mi sono perso qualcosa.