Caratteristiche utili da KimIV - pagina 34

 
KimIV писал (а) >>

I puntatori in MQL4 sono complicati. Non c'è supporto diretto. Qualcuno qui sul forum ha provato a farlo con gli array, credo. Non posso essere più preciso. Cercatelo voi stessi.

MathRand()

Potete cambiare solo la prima dimensione dell'array programmaticamente. La funzione ArrayResize(). La seconda, la terza e la quarta dimensione devono essere impostate rigidamente.

Bene, dimentichiamoci anche dei puntatori e degli array dinamici...

In attesa della quinta versione della lingua...

Grazie per l'aiuto...



Lavorare con una griglia è facile da implementare.

La cosa divertente è che per la mia idea una rete non era sufficiente, e volevo fare un algoritmo per passare da una rete all'altra, con i puntatori non è difficile.

Ma no... ...dovremo fare un hardcode.

 

La funzione SetTLineByAngle().

Questa funzione imposta l'oggetto OBJ_TRENDBYANGLE della linea di tendenza per l'angolo di pendenza sul grafico corrente.

  • cl - Colore dell'oggetto TRENDBYANGLE. Parametro richiesto.
  • nm - Nome dell'oggetto. Quando viene passato il valore predefinito - "", il tempo di apertura della barra corrente viene usato come nome.
  • t1 - Prima coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo di apertura della decima barra.
  • p1 - Prima coordinata dell'oggetto che fissa il prezzo. Valore predefinito - 0 - minimo della decima barra.
  • t2 - Seconda coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo aperto della barra corrente.
  • p2 - Seconda coordinata dell'oggetto che fissa il prezzo. Questo parametro è una specie di interruttore. Il suo valore diverso da zero equipara questa funzione a SetTLine(), cioè una linea di tendenza sarà disegnata usando la coppia di coordinate tempo/prezzo, mentre il valore dell'angolo di pendenza della linea di tendenza sarà ignorato. Valore predefinito - 0 - costruzione della linea di tendenza per angolo di pendenza.
  • an - Angolo di pendenza in gradi. Valore predefinito - 0 - Linea orizzontale.
  • ry - Flag della proprietà BOW. Il valore predefinito è False.
  • st - Stile di linea. I valori validi sono STYLE_SOLID (default), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Larghezza della linea. Il valore predefinito è 1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              double an=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 (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2);
  else ObjectSet(nm, OBJPROP_ANGLE, an);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Esempi di come usare SetTLineByAngle().

  1. Fascio solido arancione a 45° dal minimo della 5° barra.
    SetTLineByAngle(Orange, "", Time[5], Low[5], 0, 0, 45, True);
  2. Un ventaglio di raggi rossi punteggiati dal minimo della 13a barra.
    for (int i=0; i<90; i+=10)
      SetTLineByAngle(Red, "TL"+i, Time[13], Low[13], 0, 0, i, True, STYLE_DOT);

ZY. In allegato c'è uno script per testare SetTLineByAngle().

 

La funzione SetArrow().

Questa funzione imposta l'icona dell'oggetto OBJ_ARROW sul grafico corrente.

  • cd - codice dell'icona. Parametro richiesto.
  • cl - Colore dell'icona. Parametro richiesto.
  • nm - Nome dell'oggetto. Se il valore predefinito è trasferito - "", il tempo aperto della barra corrente è usato come nome.
  • t1 - Prima coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo corrente di apertura della barra.
  • p1 - Prima coordinata dell'oggetto che fissa il prezzo. Valore predefinito - 0 - prezzo di offerta corrente.
  • sz - Dimensione dell'icona. Valore predefinito - 0.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 

Esempi di come usare SetArrow().

  • L'indicatore di prezzo dorato a sinistra al massimo della nona barra.
    SetArrow(5, Gold, "", Time[9], High[9], 3);

  • Segno rosso del prezzo di destra al massimo della 2a barra.
    SetArrow(6, Red, "", Time[2], High[2], 3);

  • 3. Freccia blu sopra il massimo della 2a barra.
    SetArrow(242, Blue, "", Time[2], High[2]+50*Point, 2);
    

SZY. In allegato c'è uno script per testare la funzione SetArrow().

File:
 
Grazie mille per quello che fai, ti dispiace se raccolgo le caratteristiche di questo thread, e le pubblico sul mio sito web, in una sezione separata con un link al forum, e al tuo sito
 

In generale, sarebbe bello avere un "Indice" nella prima pagina di questo post. Una tabella con un elenco di funzioni, descrizioni e collegamenti alle pagine. Oppure tenere un archivio aggiornato sulla prima pagina, e le descrizioni possono essere trovate sulle altre pagine.

Quindi, se xrust farà il suo suggerimento, sarebbe bene ripeterlo qui. Per il bene della sistematizzazione di quanto duramente guadagnato :))

 
xrust писал (а) >>
...ti dispiace se raccolgo le caratteristiche di questo thread, e le pubblico sul mio sito, in una sezione separata con un link al forum, e al tuo sito

No, non lo farò...

 
xrust писал (а) >>
Grazie mille per quello che stai facendo, ti dispiacerebbe se raccolgo le funzioni di questo ramo, e le pubblico sul mio sito, in una sezione separata con un riferimento al forum e al tuo sito

Creare un file "inluder" (mqh) (probabilmente 2 - "trade" e "other"), concordare il suo nome e forzare gli "sviluppatori" a includerlo nella distribuzione. In modo che tutti in ogni EA non debbano reinventare la ruota.

:)

 
Grazie ancora, sono solo un po' pigro, voglio raccogliere tutto a portata di mano. Un'altra domanda, ti dispiace se uso la stessa sintassi e gli stessi nomi di variabili nelle mie funzioni come fai tu, per standardizzarle, per così dire.