Caratteristiche utili da KimIV - pagina 116

 

La funzione SetChannel().

Questa funzione imposta l'oggettoOBJ_CHANNEL su un canale equidistante sul grafico corrente.

  • cl- Colore dell'oggetto. Parametro obbligatorio.
  • t[]- Matrice di tre valori sull'asse del tempo.Parametro obbligatorio.
  • p[]- Matrice di tre valori sull'asse dei prezzi. Parametroobbligatorio.
  • nm- Nome dell'oggetto. Quando viene passato il valore predefinito -"", il tempo corrente di apertura della barra viene usato come nome.
  • ry- Flag della proprietàBOW. Il valore predefinito èFalse.
  • st- Stile di linea. I valori validi sonoSTYLE_SOLID(default),STYLE_DASH,STYLE_DOT,STYLE_DASHDOT.
  • wd- Spessore della linea. Il valore predefinito è1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2013                                                     |
//|  Описание : Установка объекта OBJ_CHANNEL Равноудаленный канал.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl  - цвет линии                                                        |
//|    t[] - время открытия бара                                               |
//|    p[] - ценовой уровень                                                   |
//|    nm  - наименование              (  ""  - время открытия текущего бара)  |
//|    ry  - луч                       (False - по умолчанию)                  |
//|    st  - стиль линии               (  0   - простая линия)                 |
//|    wd  - ширина линии              (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetChannel(color cl, datetime& t[], double& p[],
                string nm="", bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t[0]<=0) t[0]=Time[20];
  if (p[0]<=0) p[0]=High[20];
  if (t[1]<=0) t[1]=Time[0];
  if (p[1]<=0) p[1]=High[0];
  if (t[2]<=0) t[2]=Time[15];
  if (p[2]<=0) p[2]=Low[15];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_CHANNEL, 0, 0,0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t[0]);
  ObjectSet(nm, OBJPROP_PRICE1, p[0]);
  ObjectSet(nm, OBJPROP_TIME2 , t[1]);
  ObjectSet(nm, OBJPROP_PRICE2, p[1]);
  ObjectSet(nm, OBJPROP_TIME3 , t[2]);
  ObjectSet(nm, OBJPROP_PRICE3, p[2]);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
ZZY. In allegato c'è uno script per testare la funzione SetChannel().
File:
 

Buon pomeriggio.

Sto usando la funzione SetTLine() di KimIV https://forum.mql4.com/ru/38949/page6#434255 . Il problema è che ho bisogno di due linee (in alto e in basso), ma non mi funziona. Ho fatto un'altra funzione SetTLine1() con altre variabili, ma ancora non funziona. Come fare?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
datetime d1=TimeCurrent()-24*60*60;
while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
d1=StrToTime(TimeToStr(d1, TIME_DATE));
datetime d2=d1-24*60*60;
while (TimeDayOfWeek(d2)==0 || TimeDayOfWeek(d2)==6) d2-=24*60*60;
d2=StrToTime(TimeToStr(d2, TIME_DATE));
int b2=iBarShift(NULL, 0, d2);     // номер бара начала второго дня
int b1=iBarShift(NULL, 0, d1);     // номер бара начала первого дня
int b0=iBarShift(NULL, 0, d0);     // номер бара начала текущего дня
int n2=iLowest(NULL, 0, MODE_LOW, b2-b1-1, b1);
int n1=iLowest(NULL, 0, MODE_LOW, b1-b0-1, b0);
datetime t1=Time[n2];
double   p1=Low[n2];
datetime t2=Time[n1];
double   p2=Low[n1];
SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);   


datetime di0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
datetime di1=TimeCurrent()-24*60*60;
while (TimeDayOfWeek(di1)==0 || TimeDayOfWeek(di1)==6) di1-=24*60*60;
di1=StrToTime(TimeToStr(di1, TIME_DATE));
datetime di2=di1-24*60*60;
while (TimeDayOfWeek(di2)==0 || TimeDayOfWeek(di2)==6) di2-=24*60*60;
di2=StrToTime(TimeToStr(di2, TIME_DATE));
int bi2=iBarShift(NULL, 0, di2);     // номер бара начала второго дня
int bi1=iBarShift(NULL, 0, di1);     // номер бара начала первого дня
int bi0=iBarShift(NULL, 0, di0);     // номер бара начала текущего дня
int ni2=iHighest(NULL, 0, MODE_HIGH, bi2-bi1-1, bi1);
int ni1=iHighest(NULL, 0, MODE_HIGH, bi1-bi0-1, bi0);
datetime t1i=Time[ni2];
double   p1i=High[ni2];
datetime t2i=Time[ni1];
double   p2i=High[ni1];
SetTLine1(Magenta, "", t1i, p1i, t2i, p2i, True, STYLE_SOLID, 3);
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}


void SetTLine1(color cli, string nmi="",
              datetime t1i=0, double p1i=0, datetime t2i=0, double p2i=0,
              bool ryi=False, int sti=0, int wdi=1) {
  if (nmi=="") nmi=DoubleToStr(Time[0], 0);
  if (t1i<=0) t1i=Time[10];
  if (p1i<=0) p1i=Low[10];
  if (t2i<=0) t2i=Time[0];
  if (p2i<=0) p2i=Bid;
  if (ObjectFind(nmi)<0) ObjectCreate(nmi, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nmi, OBJPROP_TIME1 , t1i);
  ObjectSet(nmi, OBJPROP_PRICE1, p1i);
  ObjectSet(nmi, OBJPROP_TIME2 , t2i);
  ObjectSet(nmi, OBJPROP_PRICE2, p2i);
  ObjectSet(nmi, OBJPROP_COLOR , cli);
  ObjectSet(nmi, OBJPROP_RAY   , ryi);
  ObjectSet(nmi, OBJPROP_STYLE , sti);
  ObjectSet(nmi, OBJPROP_WIDTH , wdi);
}
 

Non c'è bisogno di fare due funzioni. Dovete chiamarne uno con parametri diversi. Avete chiamato due funzioni, ma avete passato un nome vuoto dell'oggetto LINE ad entrambe. Per impostazione predefinita, la funzione SetTLine() imposta il tempo corrente di apertura della barra come nome. Nel vostro caso, questo causerebbe che non importa quante volte chiamateSetTLine(), ogni volta si crea un oggetto con lo stesso nome, cioè UN oggetto LINE.

Ho rielaborato il tuo codice. Vedere l'allegato. E per un esempio di ciò che il tuo codice disegna, un'immagine

File:
 
KimIV:

Non c'è bisogno di fare due funzioni. Dovete chiamarne uno con parametri diversi. Avete chiamato due funzioni, ma avete passato un nome vuoto dell'oggetto LINE ad entrambe. Per impostazione predefinita, la funzione SetTLine() imposta il tempo corrente di apertura della barra come nome. Nel vostro caso, questo causerebbe che non importa quante volte chiamateSetTLine(), ogni volta si crea un oggetto con lo stesso nome, cioè UN oggetto LINE.

Ho rielaborato il tuo codice. Vedere l'allegato. E per un esempio di ciò che il tuo codice disegna, un'immagine


Capisco, grazie.

 

Ciao!

Voglio dire un GRANDE GRAZIE per il vostro lavoro. Ho scaricato 2 file(ByMarketBuy(Sell)+e-SARTrailing) dal vostro sito per costruire il mio sistema di trading. Mando lo scriptByMarketBuy(Sell) sulla coppia EUR/USD su 1 schermo, prescrivendo MAGIC 30 per un ordine eMAGIC 60 per un altro ordine (rispettivamente M30 e H1) ee-SARTrailing advisor su 2 e 3 schermi con impostazioniSAR.TF=30 e 60rispettivamente. E dal momento che due ordini sono aperti sulla stessa coppia di valute, in modo da andare co-rotato e si scopre che senzaMagicNumber Advisorse-SARTrailing su due schermi sarà in conflitto con l'altro. Ho una granderichiestaa voise si potrebbe modificare il consigliere (per scrivere) una tale caratteristica comeMagicNumber può essere un tale supplemento sarebbe apprezzato molti. E questo funzionerà su tutti i timeframes allo stesso tempo senza conflitti tra loro, indipendentemente dalla direzionalità.

Molte grazie in anticipo!

 
tim-time:

Ho una GRANDE RICHIESTA da farvi se potete modificare il vostro Expert Advisor con lafunzioneMagicNumber.

Grazie per il suggerimento. Ho aggiunto un filtro per i maghi...
 

Funzione GetTimeOpenBar().

Questa funzione restituisce il tempo di apertura di un simbolo arbitrario e di una barra timeframe arbitraria. In generale, è solo una combinazione delle funzioni di base iBarShift() e iTime(). Pertanto, non c'è nulla di nuovo qui, e l'uso di una particolare variante è una questione di convenienza. Si possono passare i seguenti parametri opzionali alla funzione

  • sy- Nome dello strumento commerciale (simbolo). I valori "" e NULL indicano il simbolo corrente. Il valore predefinito è "".
  • tf- Tempo. Valore predefinito - 0 - l'intervallo di tempo corrente.
  • dt- Data e ora. Valore predefinito - 0 - ora corrente.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия бара.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий)                 |
//|    dt - дата/время                 (    0       - текущее)                 |
//+----------------------------------------------------------------------------+
datetime GetTimeOpenBar(string sy="", int tf=0, int dt=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  if (tf==0) tf=Period();
  if (dt==0) dt=TimeCurrent();
  
  int sh=iBarShift(sy, tf, dt, False);

  return(iTime(sy, tf, sh));
}

 
KimIV:
Grazie per il suggerimento. Ho aggiunto un filtro per i maghi...

CIAO!

WOW !!! QUESTO È IL RITMO !!! (Lo faccio da solo o dico NO!)

UNENORME RISPETTOPER I PROFESSIONISTI(un professionista deve conoscere tutti i più piccoli dettagli + il duro lavoro nel suo campo e naturalmente l'esperienza che si accumula negli anni).

Sono impegnato nel mobile incorporato già 4 5 anni e 1 5 anni finisce Forex trading (duro lavoro + esperienza di momenti di successo e non successo nel commercio, rimane per imparare i più piccoli dettagli).

IL MIO OBIETTIVO È DIVENTARE UN PROFESSIONISTA DEL TRADING.

APPREZZO ILVOSTRO AIUTO!

CON RISPETTO!

 

Ho messo insieme la funzione ErrorRU(), che restituisce una descrizione russa breve o dettagliata di un errore in base al suo codice. Vengono rilevati sia gli errori restituiti dal server commerciale che gli errori di esecuzione dei programmi MQL. Non tutti gli errori, però, hanno una descrizione dettagliata con le raccomandazioni "Cosa fare", ma è così.

Sto pubblicando la funzione nello script per testarla.

Se qualcuno ha bisogno di una variazione sotto forma di file MQH, può ottenerla dal mio sito web.

File:
 

Ciao!

È possibile aggiungere notifiche PUSH al tuoe-SignalOfTrade EA?

https://www.mql5.com/ru/forum/6960

https://www.mql5.com/ru/docs/common/sendnotification

(Il serverVPS affittato si rifiuta di dare i dati SMTP-server che dovrebbe essere specificato nelle impostazioni di posta MT4 per il lavoro del consulente conUseSendMail=True- e-mail. )

Grazie in anticipo!