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

 
Maxim Kuznetsov:

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

 if(time[i]>=StringToTime("2019.04.22 20:55:00") && time[i]<StringToTime("2019.04.22 20:55:00")+Period()*PeriodSeconds(PERIOD_M1))

e se usate solo+PeriodSeconds(PERIOD_M1) senzaPeriod()*, non viene impostato affatto)

 
yiduwi:

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.

 
kopeyka2:

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.

 
kopeyka2:


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"

il messaggio di errore mostra il numero di linea in cui si è verificato l'errore. Inizia a scavare da lì
 
Igor Zakharov:

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.

 
Si prega di consigliare come scrivere concettualmente il codice EA, che prende i prezzi dei trade da un file .csv di testo. Perché sorge questa domanda: ad ogni tick l'EA confronta il prezzo corrente con il prezzo nel file .csv, che viene letto interamente da un ciclo nella 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 i 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); per favore consigliatemi.
 

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.

 
WinProject:
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

 
Igor Makanu:

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.

Motivazione: