[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 292

 

Salve.

Per favore, aiutatemi a capire cosa sto sbagliando.

Condizionalmente: Ask = 1,3000

PriceAsk = 1,3055 (incl. dove Step=50 e Srpead=3)

bool BuyOrder=1 ,

if (Ask-PriceAsk+Step-Spread<=0 && BuyOrder==0) perché questa condizione è vera?
 
ed3sss:

Immediatamente prima dell'istruzione if, stampa i valori di tutte le variabili nella condizione

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
È probabile che alcuni valori delle variabili siano diversi da quelli immaginati.
 
Ciao, nel mio terminale mt4, quando clicco su una delle coppie di valute che sono direttamente sotto il terminale, per esempio (eurusd) per aprire una finestra del terminale con solo questa coppiaHo bisogno di aprire una piccola finestra e poi espanderla nell'angolo in alto a destra, questo non è mai successo prima, per favore ditemi perché questo succede e come risolvere il problema?
 
GaryKa:

Immediatamente prima dell'istruzione if, registra i valori di tutte le variabili nella condizione

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
È probabile che alcuni valori delle variabili siano diversi da quelli immaginati.

Controlla, grazie)
 
a hoz : Prima, un po' di teoria.


E ora la conclusione

hoz:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Voglio capire come funziona. Ecco perché ho chiesto.
L'espressionesottolineata restituisce il logaritmo decimale (logaritmo in base 10) di bd_LOTSTEP, che è la potenza di 10 per ottenere bd_LOTSTEP.
 

GaryKa:

Immediatamente prima dell'istruzione if, registra i valori di tutte le variabili nella condizione

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Sicuramente alcuni dei valori delle variabili non saranno quelli che avete immaginato.


ed3sss:


Controlla, grazie)

Grazie, ho trovato un errore logico nel programma, ora tutto funziona.
 

Salve.

Come posso visualizzare sul grafico l'iscrizione sullo strumento corrente Profitto/perdita degli ordini aperti.

È difficile controllare nell'Expert Advisor se ha aperto posizioni o no (terminale on/off) e prendere il volume dell'ultimo lotto prima di chiudere il terminale.

Grazie.

 
hoz:

Mi sono appena imbattuto in una funzione qui:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Voglio capire come funziona. Ecco perché ho chiesto.

Se mi sbaglio, mi scuso. MathLog(x) è ln(x) (logaritmo naturale). La formula di conversione è log_a(b)=ln(b)/ln(a), in questo caso si ottiene ln(x)/ln(10)=lg(x)(logaritmo decimale). La parte intera del logaritmo decimale lg(1...9) è 0, lg(10...99) è 1, lg(100...999) è 2, lg(1000...9999) è 3 e così via, cioè il logaritmo di un numero maggiore di uno è uguale al numero di cifre di quel numero(prima del punto decimale, dopo non conta) meno uno. Se x è da 0 a uno, allora la parte intera di lg(0,1...0,9) è uguale a -1, lg(0,01...0,09) è uguale a -2, lg(0,001...0,009) è uguale a -3 e così via, cioè, se non si guarda il meno, il logaritmo decimale del numero da 0 a uno è uguale al numero totale di zeri prima della prima cifra significativa. Non so come funziona MathCeil, ma se restituisce la parte intera di un numero, questa funzione dovrebbe restituire il numero di cifre nel numero prima del punto decimale meno uno se il numero è maggiore di 1, e il numero di zeri nel numero prima della prima cifra significativa se il numero è da 0 a uno. Il minimo di questa funzione è nell'intervallo x uguale a 1...9. Da qui, per 10...99 e 0,1...0,9 la funzione è uguale a 1, per 100...999 e 0,01...0,09 è uguale a 2, e così via. L'idea è...
 

Buon pomeriggio, c'è un bug nel programma, mi sono già scervellato, per favore punta il dito su ciò che non va. Voglio solo sapere perché la condizione per il modifi non funziona. Anche se la condizione non è vera, è comunque soddisfatta e, quindi, quando si modificano gli errori o 1, o 130. Grazie a tutti.

//--------------- modificare gli ordini sotto TP-------------------
per (i = OrdiniTotali() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continua;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
se (OrderType() == OP_BUY) {
se (OrderTakeProfit() == 0 || OrderTakeProfit() > OprTPB(TP)){
RefreshRates();
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPB(TP),0,CLR_NONE);
}
}
se ((OrderType() == OP_SELL)) {
if(OrderTakeProfit() == 0 || OrderTakeProfit() < OprTPS(TP)){
RefreshRates();
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPS(TP),0,CLR_NONE);
}
}
}
}
ritorno(0);
}

doppio LastOpPrBuy(double va=0)
{
per (i = OrdiniTotali() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (va == 0) va = OrderOpenPrice();
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continua;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() == OP_BUY && OrderOpenPrice()<va) va = OrderOpenPrice()
}
ritorno (va);
}
//----------------------------------------------------------------------------------
double LastOpPrSell(double va=0)
{
per (i = OrdiniTotali() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (va == 0) va = OrderOpenPrice();
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continua;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
se (OrderType() == OP_SELL && OrderOpenPrice()>va) va = OrderOpenPrice()
}
ritorno (va);
}
//----------------------------------------------------------------------------------
doppio OprTPB(int TP)
{
int j=0;
doppio TPB=0;
per (i = OrdiniTotali() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continua;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
se (OrderType() == OP_BUY)
{
TPB+=OrderOpenPrice();
j++;
}
}
se (j==0) {
j++;
TPB = Chiedi;
}
TPB=(TPB/j)+TP*Point;
ritorno (TPB);
}
//----------------------------------------------------------------------------------
doppio OprTPS(int TP)
{
int j=0;
doppio TPS=0;
per (i = OrdiniTotali() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
se (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continua;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
se (OrderType() == OP_SELL)
{
TPS+=OrderOpenPrice();
j++;
}
}
se (j==0) {
j++;
TPS = Offerta;
}
TPS=(TPS/j)-TP*Point;
ritorno (TPS);
}
//----------------------------

 
borilunad:
Siamo tutti neofiti qui! Non vedi che non sappiamo cose semplici! Dove altro potremmo scoprirlo! Almeno noi vogliamo saperlo, non come pensano alcune persone che chiedono solo di inserire il codice e subito pompano i soldi!


))) Dall'umorismo di un commerciante:

- Dove posso trovare un Expert Advisor redditizio?

- Guarda da qualche parte sopra nel thread, hanno postato un robot chiamato @MOZG@v4.12.