Caratteristiche utili da KimIV - pagina 33

 

La funzione SetVLine().

Questa funzione imposta la linea verticale dell'oggetto OBJ_VLINE sul grafico corrente.

  • cl - Colore dell'oggetto LINEA VERTICALE. Parametro obbligatorio.
  • nm - nome dell'oggetto. Quando viene passato il valore predefinito - "", il tempo di apertura della barra corrente viene usato come nome dell'oggetto.
  • t1 - Tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo corrente di apertura della barra.
  • 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2008                                                     |
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время                      (0  - время открытия текущего бара)     |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (1  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetVLine(color cl, string nm="", datetime t1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_VLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Esempi di come usare SetVLine().

  1. Linea verticale solida blu sulla barra corrente.
    SetVLine(Aqua);
  2. Linea spessa lilla sull'ottava barra.
    SetVLine(Magenta, "", Time[8], STYLE_SOLID, 3);
  3. Griglia di linee tratteggiate sulle barre 14:00.
    for (int i=0; i<7; i++) {
      datetime dt=StrToTime((TimeToStr(TimeCurrent()-i*1440*60, TIME_DATE))+" 14:00");
      int nb=iBarShift(NULL, 0, dt, True);
      SetVLine(Coral, "VLine"+i, Time[nb], STYLE_DOT);
    }

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

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

ESECUTIVO. >> LO FARÒ.

Mostrami una foto, proviamo a farne una.

 
TheXpert писал (а) >>

Mostralo nella figura, proviamo a farlo.

Una funzione personalizzata che calcola le aree descritte dall'indicatore, ad esempio RSI e la linea mediana.

Lo spazio delimitato dalla curva sotto la linea di mezzo e la linea di mezzo stessa è area -S1, e sopra la linea di mezzo è +S2.

Inviato a https://www.mql5.com/ru/forum/109590 per non interferire.

 

La funzione SetTLine().

Questa funzione imposta l'oggetto OBJ_TREND trendline sul grafico corrente.

  • cl - Colore dell'oggetto TREND LINE. È un parametro obbligatorio.
  • 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. Valore predefinito - 0 - barra corrente bassa.
  • ry - Flag della proprietà BLUE. 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_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);
}
 

Esempi di come usare SetTLine().

  1. Linea solida arancione attraverso i minimi della quindicesima barra e della barra attuale.
    SetTLine(Orange, "", Time[15], Low[15], 0, Low[0], True);
  2. Linea di tendenza rossa attraverso i massimi della 35a e della 10a barra.
    SetTLine(Red, "", Time[35], High[35], Time[10], High[10]);
  3. Raggio lilla denso attraverso i massimi dei due giorni precedenti.
    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=iHighest(NULL, 0, MODE_HIGH, b2-b1-1, b1);
    int n1=iHighest(NULL, 0, MODE_HIGH, b1-b0-1, b0);
    datetime t1=Time[n2];
    double   p1=High[n2];
    datetime t2=Time[n1];
    double   p2=High[n1];
    SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);

HH. In allegato c'è uno script per testare la funzione SetTLine().

File:
 

Igor, mi rivolgo a te come codificatore MQL4 più esperto.

Ho iniziato a scrivere una libreria per la rete di Kohonen.

Voglio renderlo il più flessibile e conveniente possibile, ma ho affrontato un momento che non posso ancora superare.

Esempio1:

int& value; // так нельзя, интересует аналог на MQL4, если он есть
 
void AssignValue(int& newValue)
{
   value = newValue;
}
 
void SetValue(int newValue)
{
   value = newValue;
}
 
int init()
{
   int someValue = 5;
   AssignValue(someValue);
   SetValue(10);
   Print(someValue); // очень хочется, чтобы вывелось 10
}

È possibile farlo usando MQL4, e come, se sì?



Esempio2:

void SetSize(double& matrix[][], int inSize, int outSize)
{
    // требуется установить размеры матрицы, не осилил
}
 
void Init(double& matrix[][])
{
    // допустим, требуется проиниализировать всю матрицу значением 1, также не осилил
}

Di nuovo, se è possibile, per favore datemi il codice. Questo esempio mi sembra realizzabile.



Grazie in anticipo.

 
TheXpert писал (а) >>
Voglio renderlo il più flessibile e conveniente possibile, ma ho affrontato un momento che non posso ancora superare.
>> Esempio1:
È possibile farlo con gli strumenti MQL4 e come, se sì?

Capisco che si voglia organizzare il lavoro con i puntatori. In modo che una variabile indichi un'altra... O forse mi sono sbagliato? Cercate di spiegare a parole ciò di cui avete bisogno.

TheXpert ha scritto >>.
Esempio2:
Di nuovo, se è possibile fare una cosa del genere, per favore datemi il codice. Questo esempio mi sembra implementabile.
void start()
{
  double arr[3][2];
  Init(arr);
  for (int i=0; i<3; i++)
  {
    for (int j=0; j<2; j++)
    {
      Print("arr[",i,"][",j,"]=",arr[i][j]);
    }
  }
}
void Init(double& matrix[][])
{
  ArrayInitialize(matrix, 1);
}
 
KimIV писал (а) >>

Capisco che si voglia organizzare il lavoro con i puntatori. In modo che una variabile punti ad un'altra... O forse mi sono sbagliato? Cercate di spiegare a parole ciò di cui avete bisogno.

Sì, più o meno.


Riguardo al secondo, che ne dite di inizializzare con valori casuali?

Sì, inoltre, ho bisogno di array esattamente dinamici.

 
TheXpert писал (а) >>
Sì, più o meno.

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.

TheXpert ha scritto (a) >>.
Riguardo al secondo - che ne dite di inizializzare con valori casuali?

MathRand()

TheXpert ha scritto (a) >>.
Sì, inoltre, ho bisogno di array esattamente dinamici.
Solo la prima dimensione dell'array può essere cambiata programmaticamente. La funzione ArrayResize(). La seconda, la terza e la quarta dimensione devono essere impostate rigidamente.
Motivazione: