Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1230

 
Igor Makanu:

ci sono molti errori nel tuo esempio

dovrebbe esserci:

qui i prezzi non sono normalizzati OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen);

Qui non capisco la logica per cui OnTick() dovrebbe uscire se la condizione è falsa.

probabilmente dovremmo continuare il cicloe contare solo il numero di ordini

Il tuo esempio è molto semplice nella logica e sarebbe difficile modificarlo per altri compiti... forse vorrà fare un po' di trailing.

È ancora presto)))) Ci saranno molte cose in una volta sola. Non c'è molto senso lì))))) E così sì, naturalmente dopo i calcoli per tutto ciò che la normalizzazione dell'ordine di invio è necessario))))

Lì la condizione per ordine, se non ci sono ordini sullo strumento corrente con la nostra magia, mettiamo l'ordine. E poi la condizione non raggiungerà l'ordine fino alla chiusura.

PS non piace la condizione Se no.

 

Saluti, potreste dirmi come leggere l'espressione

string sym=(symbol==NULL ? Symbol() : symbol);
 
Galim_V:

Saluti, potreste dirmi come leggere correttamente questa espressione?

Sesymbol è vuoto, restituisce il valore del simbolo corrente alla variabile sym, e se non è vuoto, restituisce il valore alla variabile sym

 
Vladimir Pastushak:

Se la variabile symbol è vuota, allora restituisce il valore del simbolo grafico corrente alla variabile sym, e se non è vuota, allora passa il suo valore alla variabile sym

Grazie!

 
Galim_V:

Saluti, potreste dirmi come leggere correttamente questa espressione?

Legge Symbol() se symbol è NULL, altrimenti assegna symbol alla variabile.

L'equivalente di questa voce

string sym;
if(symbol == NULL)
sym = Symbol();
else
sym = symbol;
L'unica differenza è il numero di linee.
 
Alexey Viktorov:

Si legge così: Assegnare una variabile a Symbol() se symbol è NULL altrimenti assegnare un valore a symbol.

Equivalente a questa voce

L'unica differenza è il numero di linee.

Grazie!

 
Valeriy Yastremskiy:

Che cosa poi, per esempio, si ha una finestra aperta non Eurobucks, ma Eurofunt, si confronta il simbolo dell'ordine selezionato con Eurobucks, se vero, allora c'è un ordine su Eurobucks, e se il nostro magik, poi tornare dalla funzione Onstart, e se non, quindi impostare un ordine su Eurobucks, ma Kloz, High, Asc, Bid si avrà per Eurofunt. sarà un errore quando si aprono gli ordini perché bid e ask per questi instuents diversi. E Symbol() restituirà il simbolo della finestra corrente e non ci saranno errori.

Usa il modello dal meta editor, c'è un pulsante Nuovo in alto a sinistra. La funzione OnStart è ancora usata, ma non è giusto, e OnStart è per gli script. Il modello giusto.

Il codice corretto. Manca il tuo commento all'ordine e il mago non è considerato nel tuo codice. Nelle avvertenze alla linea di apertura nota Conversione implicita del tipo di un numero in una stringa!!!

Sì, funziona come dovrebbe. Grazie!!!

Non sapevo che fosse così importante creare per modello. OnStart infatti. Avevo sbagliato la struttura di base. Bene, ora lo saprò.

 
Alexey Belyakov:

Sì, funziona come dovrebbe. Grazie!

Non sapevo che fosse così importante creare da un modello. OnStart, appunto. Avevo sbagliato la struttura di base. Bene, ora lo saprò.

Bene, e tutto ciò che si mette nelle funzioni di lavoro con gli ordini dovrebbe essere normalizzato. Se il punto decimale è seguito da 6 cifre, l'ordine non sarà effettuato e genererà un errore.

Cerca l'argomento con "Solo funzioni utili da KimIV" o cercalo in KodoBase.

Igor Makanu ha scritto sopra altri errori. E le funzioni di Kim sono davvero utili per iniziare. I commenti sono chiari.

 

Per favore, aiutatemi. Perché il test dà un errore - "" 2020.08.13 13:09:11.393 2018.08.01 00:00:123456 GBPUSD,M30: array out of range in '123456.mq4' (59,13)"" ????


#property link "2020, Grey".

#proprietà link "uirnP0215@mail.ru"

#proprietà versione "1.00"

#proprietà rigorosa


ingresso doppio lotti = 0,01;

input int Magic = 1546;



doppio ibufUP[];

doppio ibufDN[];


//+------------------------------------------------------------------+

//| Funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int OnInit()

{


return(INIT_SUCCEED);

}

//+------------------------------------------------------------------+

//| Funzione di deinizializzazione dell'esperto |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

//---


}

//+------------------------------------------------------------------+

//| funzione tick esperto |

//+------------------------------------------------------------------+

void OnTick()

{

CountFractals();

se(ibufUP[3]>0)

{

if(!OrderSend(Symbol(), OP_SELL, lots, Bid, 30, 0, 0, 0, "", Magic, 0, clrRed))

Stampa("Impossibile aprire un ordine di vendita");

}

se(ibufDN[3]>0)

{

if(!OrderSend(Symbol(), OP_BUY, lots, Bid, 30, 0, 0, 0, "", Magic, 0, clrGreen))

Print("Impossibile aprire un ordine di acquisto");

}



}

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

void CountFractals()

{

for(int i=150; i>=0; i--)

{

ibufUP[i] = iFractals(NULL, 0, MODE_UPPER, i);

ibufDN[i] = iFractals(NULL, 0, MODE_LOWER, i);

}

}

//+------------------------------------------------------------------+



 
Madmas:

Per favore, aiutatemi. Perché il test dà un errore - "" 2020.08.13 13:09:11.393 2018.08.01 00:00:123456 GBPUSD,M30: array out of range in '123456.mq4' (59,13)"" ????


#property link "2020, Grey".

#proprietà link "uirnP0215@mail.ru"

#proprietà versione "1.00"

#proprietà rigorosa


ingresso doppio lotti = 0,01;

input int Magic = 1546;



doppio ibufUP[];

doppio ibufDN[];


//+------------------------------------------------------------------+

//| Funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int OnInit()

{


return(INIT_SUCCEED);

}

//+------------------------------------------------------------------+

//| Funzione di deinizializzazione dell'esperto |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

//---


}

//+------------------------------------------------------------------+

//| funzione tick esperto |

//+------------------------------------------------------------------+

void OnTick()

{

CountFractals();

se(ibufUP[3]>0)

{

if(!OrderSend(Symbol(), OP_SELL, lots, Bid, 30, 0, 0, 0, "", Magic, 0, clrRed))

Stampa("Impossibile aprire un ordine di vendita");

}

se(ibufDN[3]>0)

{

if(!OrderSend(Symbol(), OP_BUY, lots, Bid, 30, 0, 0, 0, "", Magic, 0, clrGreen))

Print("Impossibile aprire un ordine di acquisto");

}



}

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

void CountFractals()

{

for(int i=150; i>=0; i--)

{

ibufUP[i] = iFractals(NULL, 0, MODE_UPPER, i);

ibufDN[i] = iFractals(NULL, 0, MODE_LOWER, i);

}

}

//+------------------------------------------------------------------+



Aggiungete un contatore di decremento nella funzioneCountFractals per cominciare.

Motivazione: