Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 818
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {
// время time[i] попало внутрь бара открытого в time_m1
}
OK) una freccia, ma per questa condizione a M15 e oltre la freccia è impostata alle 21:00
e se usate solo+PeriodSeconds(PERIOD_M1) senzaPeriod()*, non viene impostato affatto)
OK) una freccia, ma per questa condizione a M15 e oltre la freccia è impostata alle 21:00
E se usate solo+PeriodSeconds(PERIOD_M1) senzaPeriod()*, non viene impostato affatto)
Leggete la documentazione :-) Periodo() restituisce solo l'id del periodo corrente - perché state moltiplicando per esso?
invece di PERIOD_M1 (che è dato come esempio), passatelo a PeriodSeconds( Period() ) - poi ottenere quanti secondi in 1 barra del periodo corrente.
Così tanto per l'enigma del "parallelepipedo delle Bermuda"
Funziona per me :) Ho anche provato ad aprire/chiudere il terminale.
PS: Artyom, hai spostato la domanda sul cinque all'argomento quattro... L'ho trovato per caso.
EMA linea 20 23.04.2019 00:00
Quando si accende MT5, SENZA connessione online, il messaggio "array out...." appare immediatamente.
Gli errori variano, ma sono sempre presenti. Può replicarsi online, ma più spesso è presente quando MT è accesa.
Tale è il mistero del "parallelepipedo delle Bermuda"
Funziona per me :) Ho anche provato ad aprire/chiudere il terminale.
PS: Artyom, hai spostato la domanda sul cinque all'argomento quattro... L'ho trovato per caso.
Questo è un tema comune - qui aiutiamo non solo con MQL4, ma anche per la migrazione a MQL5. Quindi è nel tema.
Ciao!
Ho scaricato il video tutorial di programmazione MQL4.
Ho creato un Expert Advisor secondo la lezione.
Ma non funziona quando faccio trading.
Non ho nessun errore durante la compilazione.
Dato che sono all'inizio del mio viaggio, è difficile trovare l'errore finora.
Chiedo aiuto se qualcuno può aiutarmi.
Grazie!
Codice:
/+----Входные параметры----------------+
extern inttern BarCount=10;
extern int int HourStart=14;
extern double Lots=0.1;
extern int StopLoss=120;
extern int TakeProfit=300;
extern int Magic=1456;
//+------------Глобальные переменные----------------+
doppio minprice=999999,mp,
maxprice=-99999,SL,TP;
biglietto int;
//+------------------------------------------------------------------+
//| 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()
{
GetMinPrice();
GetMaxPrice();
if(TimeHour(TimeCurrent())==HourStart)
{
if(BuyLimitCount()&& BuyCount() ==0)
{
SL=NormalizeDouble(minprice-StopLoss*Point,5);
TP=NormalizeDouble(minprice+TakeProfit*Point,5);
ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"",Magic,0,Blue);
se(biglietto<0)
Print("Failed to open buy limit");
}
if(SellLimitCount()&& SellCount()==0)
{
SL=NormalizeDouble(maxprice+StopLoss*Point,5);
TP=NormalizeDouble(maxprice-TakeProfit*Point,5);
ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"",Magic,0,Red);
se(biglietto<0)
Stampa("Mancata apertura del limite di vendita");
}
}
Comment("MinPrice: "+DoubleToStr(minprice,5)+"\n "+"MaxPrice: "+DoubleToStr(maxprice,5));
}
//+FUNZIONE PER DEFINIRE IL PREZZO MINIMO SUL NUMERO DI BARRE BARCOUNT
void GetMinPrice()
{
for(int i=0; i<BarCount; i++)
{
mp=iLow(Symbol(),PERIOD_CURRENT,i);
se(mp<prezzo minimo)
minprice=mp;
}
ritorno;
}
//+FUNZIONE PER LA DETERMINAZIONE DEL PREZZO MASSIMO SUL NUMERO DI BARRE
void GetMaxPrice()
{
for(int i=0; i<BarCount; i++)
{
mp=iHigh(Symbol(),PERIOD_CURRENT,i);
se(mp>maxprice)
maxprice=mp;
}
ritorno;
}
//+FUNZIONE DEL NUMERO DI ORDINI LIMITE APERTI DA COMPRARE
int BuyLimitCount()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT)
{
count++;
}
}
return(count);
}
//+-FUNZIONE DEL NUMERO DI ORDINI LIMITE DI VENDITA APERTI
int SellLimitCount()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELLLIMIT)
{
count++;
}
}
return(count);
}
//+FUNZIONE DEL NUMERO DI ORDINI DI LIBRO DEL MERCATO APERTO
int BuyCount()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
count++;
}
}
return(count);
}
//+-FUNZIONE DEL NUMERO DI ORDINI DI VENDITA SUL MERCATO APERTO
int SellCount()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
{
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
Seric29
Grazie, aggiungerò le tue informazioni al mio bagaglio.
Potete per favore consigliarmi come scrivere concettualmente il codice EA, che prende i prezzi di scambio dal file .csv. Perché sorge questa domanda: ad ogni tick l'EA confronta il prezzo corrente con il prezzo nel file .csv, che viene letto interamente dalla funzione fileopen, se ho capito bene. Ma il file contiene più di 5000 linee per l'anno scorso, ogni linea ha il nome dello strumento, il prezzo, il tipo di operazione (acquisto/vendita), la data di registrazione, la data di cancellazione dell'ordine. Durante il test, l'Expert Advisor passerà in rassegna tutte le linee di file su ogni tick per capire se è il momento di piazzare un ordine? Oppure, per i test, dovremmo fare in modo che il nostro EA imposti tutti gli ordini con la data di cancellazione in una volta sola durante l'inizializzazione e controllare gli ordini effettivi in base alla loro data di scadenza su ogni tick per il trading reale? Forse non è proprio quello che mi aspettavo. Forse questa è la cosa giusta da fare dal punto di vista delle risorse o ci sono altre varianti (per esempio, dovremmo fare degli oggetti grafici e confrontare il prezzo attuale con essi, ma sembra essere lo stesso ciclo); non capisco, per favore consigliatemi.
Di solito si cerca di leggere (scrivere) sul file il minor numero di volte possibile.
Per il tuo compito, sarebbe meglio leggere i dati in un array al caricamento (anche se probabilmente è più conveniente in una struttura) e poi confrontare i valori attuali di prezzo e tempo con i valori dell'array
SZY: ricerca su codebase "file" o "csv" era una volta tali Expert Advisors pronti - leggere da un file commercio sui dati
Di solito si cerca di leggere (scrivere) sul file il minor numero di volte possibile.
Per il tuo compito, sarebbe meglio leggere i dati in un array al caricamento (anche se probabilmente è più conveniente in una struttura) e poi confrontare i valori attuali di prezzo e tempo con i valori dell'array
ZS: ricerca su codebase "file" o "csv" era una volta tali EA pronti - leggere da un file commercio su quei dati
Grazie mille, ho avuto la risposta che volevo.