[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 308
Alex, sei qui per me? Sono nuovo di mql4 e sto cercando di capire questo codice.
#proprietà indicator_chart_window #proprietà indicator_buffers 2 extern int TimeFrame=0;//se=0, allora quello corrente extern int Distanse=0;//distanza della linea dal frattale in punti extern string FrApNam="Ap";//nome della linea corrispondente al frattale verso l'alto. extern string FrDnNam="Dn";//nome della linea secondo il frattale verso il basso. extern color ClAp=Blu;//il colore della linea corrisponde a Fractal verso l'alto. extern color ClDn=Red;//colore della linea secondo Fractal Down. extern bool comment=true;//permesso di commentare //-----------------------------------------------------------------------------+ doppio FrPrise,znach1,znach2; doppio FrApPrise=0,FrDnPrise=0; doppio ind_buffer1[]; doppio ind_buffer2[]; //+----------------------------------------------------------------------------+ void init() {if(TimeFrame==0){TimeFrame=Period();} SetIndexBuffer(0,ind_buffer1);//Buffer
//+----------------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); limite int; doppio tmp; int i, j, k; if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //-----------------------------------------------------------------------------+ LineAp(); LineDn(); double FAP=NormalizeDouble((FrApPrise-Distanse*Point),5);//Normalize double FDP=NormalizeDouble((FrDnPrise+Distanse*Point),5); int diap=MathRound((FrApPrise-FrDnPrise)/Point); ind_buffer1[0]=FAP; ind_buffer2[1]=FDP; Commento("TimeFrame="+TimeFrame+ "\nApPrise =",FAP, "\nDnPrise =",FDP, "Canale nFractal =" ,diap+"Punto");
ritorno(0); } //-----------------------------------------------------------------------------+ // cerca una linea orizzontale per nome, ridisegna se il prezzo cambia | //-----------------------------------------------------------------------------+ void LineDn(){ FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_LOWER),MarketInfo(Symbol(),MODE_DIGITS)); FrPrise=NormalizeDouble(FrPrise-Distance*Point,MarketInfo(Symbol(),MODE_DIGITS)); //Commento(FrPrise); se(ObjectFind(FrDnNam)==0){ if(ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){return;}} FrDnPrise=FrPrise; ObjectDelete(FrDnNam); SetHLine(ClDn,FrDnNam,FrDnPrise,0,1); WindowRedraw(); return;} //-----------------------------------------------------------------------------+ // cerca una linea orizzontale per nome, la ridisegna se il prezzo è cambiato | //-----------------------------------------------------------------------------+ void LineAp(){ FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_UPPER),MarketInfo(Symbol(),MODE_DIGITS)); FrPrise=NormalizeDouble(FrPrise+Distanse*Point,MarketInfo(Symbol(),MODE_DIGITS)); se(ObjectFind(FrApNam)==0){ if(ObjectGet(FrApNam,OBJPROP_PRICE1)==FrPrise){return;}} FrApPrise=FrPrise; ObjectDelete(FrApNam); SetHLine(ClAp,FrApNam,FrApPrise,0,1); WindowRedraw(); return;} //-----------------------------------------------------------------------------+ //| Descrizione: Cerca il frattale più vicino. Restituisce un livello di prezzo. //+----------------------------------------------------------------------------+ //| Parametri: | //| sy - nome dello strumento ("" o NULL - simbolo corrente) | //| tf - timeframe ( 0 - TF corrente) | //| mode - tipo di frattale (MODE_LOWER|MODE_UPPER) | //+----------------------------------------------------------------------------+ double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) { if (sy=="" || sy=="0") sy=Symbol(); doppio f=0; int d=MarketInfo(sy, MODE_DIGITS), s; if (d==0) if (StringFind(sy, "JPY"<0) d=4; altrimenti d=2;
per (s=2; s<100; s++) { f=iFractals(sy, tf, mode, s); se (f!=0) return(NormalizeDouble(f, d)) } Print("FindNearFractal(): frattale non trovato"); ritorno(0); }
//+----------------------------------------------------------------------------+ //| Descrizione: imposta l'oggetto OBJ_HLINE linea orizzontale | //+----------------------------------------------------------------------------+ //| Parametri: | //| cl - colore della linea | //| nm - nome ("" - tempo di apertura della barra corrente) | //| p1 - livello dei prezzi (0 - Offerta) | //| st - stile della linea (0 - linea semplice) | //| wd - larghezza della linea (0 - predefinito) | //+----------------------------------------------------------------------------+ void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); se (p1<=0) p1=Bid; se (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0;) ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_STYLE , st); ObjectSet(nm, OBJPROP_WIDTH , wd); }
È necessario scrivere un Expert Advisor per questo indicatore che passi il prezzo superiore e inferiore sui timeframe М1 e М5.
Come posso implementare questa funzione nel mio EA? Quando il TP o lo SL viene attivato su un ordine Bay, tutti gli ordini Bay dovrebbero essere chiusi.
David non è una funzione, è un piccolo Expert Advisor, in poche parole si tratta di confrontare quanti ordini erano e quanti ordini sono chiusi nel campione, vi aiuterò nei dettagli non appena mi occuperò del trasferimento dei dati dall'indicatore all'Expert Advisor, ho già dato sopra i ToR
Non ho ancora scoperto come passare i valori dall'indicatore all'Expert Advisor. Ho effettivamente descritto il problema, ma ho ottenuto una sorta di silenzio ((. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
palomnik: Signore, qualcuno capisce come passare i valori da un indicatore a un EA? Ho bisogno di aiuto, io stesso non lo capisco, solo un momento e poi è finita. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
5. Mappatura. È possibile trasferire dati da un terminale a un altro terminale. O in un terminale per trasferire dati da una finestra all'altra senza limitazione delle variabili globali di MT4.
Potrebbe essere utile. Questo funziona bene!
Nel meta-editor, premete F5 per compilare.
Importante: il meta editor deve essere eseguito dalla stessa cartella del terminale.
Alex, sei qui per me? Sono nuovo di mql4 e sto cercando di capire questo codice.
#proprietà indicator_chart_window
#proprietà indicator_buffers 2
extern int TimeFrame=0;//se=0, allora quello corrente
extern int Distanse=0;//distanza della linea dal frattale in punti
extern string FrApNam="Ap";//nome della linea corrispondente al frattale verso l'alto.
extern string FrDnNam="Dn";//nome della linea secondo il frattale verso il basso.
extern color ClAp=Blu;//il colore della linea corrisponde a Fractal verso l'alto.
extern color ClDn=Red;//colore della linea secondo Fractal Down.
extern bool comment=true;//permesso di commentare
//-----------------------------------------------------------------------------+
doppio FrPrise,znach1,znach2;
doppio FrApPrise=0,FrDnPrise=0;
doppio ind_buffer1[];
doppio ind_buffer2[];
//+----------------------------------------------------------------------------+
void init()
{if(TimeFrame==0){TimeFrame=Period();}
SetIndexBuffer(0,ind_buffer1);//Buffer
SetIndexBuffer(1,ind_buffer2);
return;}
void deinit(){
return;}
//+----------------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
limite int;
doppio tmp;
int i, j, k;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//-----------------------------------------------------------------------------+
LineAp();
LineDn();
double FAP=NormalizeDouble((FrApPrise-Distanse*Point),5);//Normalize
double FDP=NormalizeDouble((FrDnPrise+Distanse*Point),5);
int diap=MathRound((FrApPrise-FrDnPrise)/Point);
ind_buffer1[0]=FAP;
ind_buffer2[1]=FDP;
Commento("TimeFrame="+TimeFrame+
"\nApPrise =",FAP,
"\nDnPrise =",FDP,
"Canale nFractal ="
,diap+"Punto");
ritorno(0);
}
//-----------------------------------------------------------------------------+
// cerca una linea orizzontale per nome, ridisegna se il prezzo cambia |
//-----------------------------------------------------------------------------+
void LineDn(){
FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_LOWER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise-Distance*Point,MarketInfo(Symbol(),MODE_DIGITS));
//Commento(FrPrise);
se(ObjectFind(FrDnNam)==0){
if(ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrDnPrise=FrPrise;
ObjectDelete(FrDnNam);
SetHLine(ClDn,FrDnNam,FrDnPrise,0,1);
WindowRedraw();
return;}
//-----------------------------------------------------------------------------+
// cerca una linea orizzontale per nome, la ridisegna se il prezzo è cambiato |
//-----------------------------------------------------------------------------+
void LineAp(){
FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_UPPER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise+Distanse*Point,MarketInfo(Symbol(),MODE_DIGITS));
se(ObjectFind(FrApNam)==0){
if(ObjectGet(FrApNam,OBJPROP_PRICE1)==FrPrise){return;}}
FrApPrise=FrPrise;
ObjectDelete(FrApNam);
SetHLine(ClAp,FrApNam,FrApPrise,0,1);
WindowRedraw();
return;}
//-----------------------------------------------------------------------------+
//| Descrizione: Cerca il frattale più vicino. Restituisce un livello di prezzo.
//+----------------------------------------------------------------------------+
//| Parametri: |
//| sy - nome dello strumento ("" o NULL - simbolo corrente) |
//| tf - timeframe ( 0 - TF corrente) |
//| mode - tipo di frattale (MODE_LOWER|MODE_UPPER) |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
if (sy=="" || sy=="0") sy=Symbol();
doppio f=0;
int d=MarketInfo(sy, MODE_DIGITS), s;
if (d==0) if (StringFind(sy, "JPY"<0) d=4; altrimenti d=2;
per (s=2; s<100; s++) {
f=iFractals(sy, tf, mode, s);
se (f!=0) return(NormalizeDouble(f, d))
}
Print("FindNearFractal(): frattale non trovato");
ritorno(0);
}
//+----------------------------------------------------------------------------+
//| Descrizione: imposta l'oggetto OBJ_HLINE linea orizzontale |
//+----------------------------------------------------------------------------+
//| Parametri: |
//| cl - colore della linea |
//| nm - nome ("" - tempo di apertura della barra corrente) |
//| p1 - livello dei prezzi (0 - Offerta) |
//| st - stile della linea (0 - linea semplice) |
//| wd - larghezza della linea (0 - predefinito) |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
if (nm=="") nm=DoubleToStr(Time[0], 0);
se (p1<=0) p1=Bid;
se (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0;)
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_STYLE , st);
ObjectSet(nm, OBJPROP_WIDTH , wd);
}
È necessario scrivere un Expert Advisor per questo indicatore che passi il prezzo superiore e inferiore sui timeframe М1 e М5.
Alex, sei qui per me? Sono nuovo di mql4 e sto cercando di capire questo codice.
Signore, qualcuno capisce come passare i valori da un indicatore a un EA? Ho bisogno di aiuto, io stesso non lo capisco, solo un momento e poi è finita. https://forum.mql4.com/ru/52892/page308 palomnik 23.04.2013 09:56
1. Attraverso una variabile globale.
2. Tramite file.
3. Tramite iCustom().
4. Tramite variabili grafiche globali.
5. Mappatura. È possibile trasferire dati da un terminale a un altro terminale. O in un terminale per trasferire dati da una finestra all'altra senza limitazione delle variabili globali di MT4.