Caratteristiche utili da KimIV - pagina 35

 
xrust писал (а) >>
Un'altra domanda, ti dispiacerebbe se usassi la tua sintassi e i tuoi nomi di variabili nelle mie funzioni, per così dire, per standardizzarle.

Fate quello che pensate sia giusto.

 

La funzione SetLabel().

Questa funzione imposta l'oggetto etichetta di testo OBJ_LABEL nel grafico corrente.

  • nm - Nome dell'oggetto. Parametro richiesto.
  • tx - Testo. Parametro richiesto.
  • cl - Colore del marcatore. Parametro richiesto.
  • xd - Coordinata X in pixel rispetto all'angolo di riferimento. Parametro richiesto.
  • yd - Coordinata Y in pixel relativa all'angolo di riferimento. Parametro obbligatorio.
  • cr - Numero dell'angolo di riferimento. Valori validi: 0 in alto a sinistra, 1 in alto a destra, 2 in basso a sinistra, 3 in basso a destra. Il valore predefinito è 0.
  • fs - Dimensione del carattere. Il valore predefinito è 9.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
 

Esempi di come usare SetLabel().

  • Tre etichette di testo blu in alto a sinistra, carattere 9.
    SetLabel("Label1", "Текстовая метка", Blue, 5, 15);
    SetLabel("Label2", "Ещё одна текстовая метка", Blue, 5, 30);
    SetLabel("Label3", "Параметр cr=0", Blue, 5, 45);

  • Tre etichette di testo viola in alto a destra, carattere 12.
    SetLabel("Label1", "Текстовая метка", Magenta, 5, 15, 1, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Magenta, 5, 30, 1, 12);
    SetLabel("Label3", "Параметр cr=1", Magenta, 5, 45, 1, 12);

  • Tre etichette di testo verdi in basso a destra, carattere 12.
    SetLabel("Label1", "Текстовая метка", Green, 5, 15, 3, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Green, 5, 30, 3, 12);
    SetLabel("Label3", "Параметр cr=3", Green, 5, 45, 3, 12);


ZS. In allegato c'è uno script per testare la funzione SetLabel().

File:
 
SergNF писал (а) >>

Creare un file "inluder" (mqh) (probabilmente 2 - "trade" e "other"), concordare il suo nome e forzare gli "sviluppatori" a includerlo nella distribuzione.

Non si può uccidere l'idea, è stata a lungo in attesa di consolidamento. Il mio sogno di non professionista è quello di lasciare all'utente comune solo il processo decisionale, liberandolo dalle complessità del software.

Gli sviluppi di Igor (stupefacenti nella loro consistenza e nei loro dettagli) si sono avvicinati il più possibile a questo. Inoltre, l'autore non solo programma, ma mantiene anche costantemente il suo

Advisors nel trading reale, il che aumenta il valore pratico del codice.

Sarebbe interessante conoscere l'opinione di Igor sulla possibilità di incorniciare in mqh i suoi sviluppi e sui vantaggi e gli svantaggi di una tale implementazione.

 
granit77 писал (а) >>
Mi piacerebbe conoscere l'opinione di Igor sulla possibilità di mqh-design dei suoi sviluppi, vantaggi e svantaggi di una tale implementazione.

Circa le possibilità...

Ho fatto fare i file MQH da un po' di tempo... Non li sto ancora pubblicando... Ho un asso nella manica... L'accordo finale sarà... Posterò tutte le caratteristiche e riassumerò postando i file mqh.

I pro e i contro...

I file MQH sono convenienti. Puoi usarli in diversi Expert Advisors. Il codice di uno specifico EA è significativamente ridotto. Solo la logica nuda e alcune altre cose sono rimaste, e tutti i gadget e gli involucri sono fuori.

Tuttavia, uso raramente i file mqh, in generale, solo uno. È stdlib.mqh. Ho copiato tutte le funzioni necessarie nel file di Expert Advisor. Per me è più conveniente. Ho preso questa abitudine quando lavoravo molto sugli ordini e spesso dimenticavo di inviare l'uno o l'altro file mqh al mio cliente. Inoltre, voglio copiare un file EA in diverse cartelle del terminale invece di trascinare l'intero mucchio di inludi dopo di esso.

 
Non è solo una delizia! È delizioso! Non è lontano il giorno in cui una distribuzione senza tale biblioteca sarà considerata incompleta.
 

Forse avete uno script in funzioni utili che potrebbe fare l'apertura di ordini descritto nell'articolo http://www.kroufr.ru/content/view/1027/124/.

Se no, consigliatemi dove trovarne uno. .

 

La funzione CrossPointOfLines().

Questa funzione calcola le coordinate del punto di intersezione di due linee. Ogni linea è definita da una coppia di coordinate dei suoi punti. Tre array sono passati alla funzione come parametri:

  • x - Matrice di ascissa. Dovrebbe contenere quattro elementi: x[0], x[1] - l'ascissa della prima linea, x[2], x[3] - l'ascissa della seconda linea.
  • y - Matrice di ordinate. Dovrebbe contenere quattro elementi: y[0], y[1] - le ordinate della prima linea, y[0], y[1] - le ordinate della seconda linea.
  • t - Matrice di coordinate del punto di intersezione delle due linee. Dopo la normale esecuzione della funzione questa matrice conterrà due elementi: t[0] è l'ascissa del punto di intersezione cercato delle due linee e t[1] è l'ordinata dello stesso punto.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}
 

Un esempio di utilizzo della funzione CrossPointOfLines().

Come esempio di utilizzo della funzione CrossPointOfLines(), offro tradizionalmente il mio script (vedi allegato). Affinché lo script funzioni correttamente, è necessario disegnare due linee intersecanti sul grafico corrente di uno dei seguenti tipi: verticale, orizzontale o di tendenza. Poi lo script dovrebbe essere allegato al grafico. Lo script risulterà nel segnare il prezzo di sinistra nel punto di intersezione delle due linee.

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

 

La funzione SetRegression().

Questa funzione imposta l'oggetto OBJ_REGRESSION del canale di regressione lineare sul grafico corrente.

  • cl - Colore dell'oggetto. 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.
  • t2 - Seconda coordinata del tempo di impostazione dell'oggetto. Il valore predefinito è 0 - il tempo aperto della barra corrente.
  • 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_REGRESSION канал линейной регрессии.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ( ""   - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10])                      |
//|    t2 - время открытия бара        (  0   - Time[0])                       |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetRegression(color cl, string nm="", datetime t1=0, datetime t2=0,
                    bool ry=False, int st=STYLE_SOLID, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_REGRESSION, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_TIME2, t2);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}