Cari amici, cercherò di spiegare al meglio quello che voglio ottenere... ..o lo farò bene ..o confonderò tutti!
...
Continuiamo la conversazione... Come ho capito il compito può essere ridotto a quanto segue. Per semplificare, esamineremo solo ieri, il periodo H1.
Per prima cosa, cerchiamo la prima candela (guardando dal lato sinistro del grafico di ieri) con la chiusura superiore all'apertura, cioè cerchiamo la prima candela rialzista. Se questa viene trovata, allora partendo da essa (compresa) fino all'ultima candela del giorno corrente, dovremmo trovare la candela con il massimo più alto. Per esempio, se l'ora di apertura della prima candela rialzista è 10:00, allora da essa fino alla candela delle 23:00 dovremmo cercare la candela con il massimo più alto. Giusto?
Continuando la conversazione... Per come la vedo io, l'incarico può essere ridotto a quanto segue. Per semplificare, esamineremo solo la giornata di ieri, periodo H1.
In primo luogo, cerchiamo la prima candela (guardando dal lato sinistro del grafico di ieri) la cui chiusura è superiore all'apertura, cioè cerchiamo la prima candela rialzista. Se questa viene trovata, allora partendo da essa (compresa) fino all'ultima candela del giorno corrente, dovremmo trovare la candela con il massimo più alto. Per esempio, se l'ora di apertura della prima candela rialzista è 10:00, allora da essa fino alla candela delle 23:00 dovremmo cercare la candela con il massimo più alto. Giusto?
Oh, grazie al cielo... Ce l'ho! SÌ! YEAH! SÌ! È esattamente quello che sto cercando di fare. Se lo sai, puoi dirmi come fare?
Vadim_2015: Oh, grazie al cielo... Ho capito! SÌ! SÌ! SÌ! È esattamente quello che sto cercando di fare. Se lo sai, puoi dirmi come fare?
Capito, cercherò di pensarci, ma dipende dall'attualità. Se avete domande in futuro, per favore mettetele in un modo che renda più facile la comprensione da parte dei programmatori.
Vadim_2015: Oh, grazie al cielo... Ce l'ho! SÌ! SÌ! SÌ! È esattamente quello che sto cercando di fare. Se lo sai, puoi dirmi come fare?
Se è la candela di ieri, sarà la candela finale in iHigest(), e la candela iniziale sarà 00:00 del giorno successivo (cioè la candela di oggi) ottenuta da iBarShift().
Algoritmo di esempio:
1. Oggi stiamo cercando la prima barra a toro tra le barre orarie di ieri. Che sia l'indice endBar
Determinare la prima barra di un'ora oggi. Oppure sarà zero.
3. In iHighest() impostate il penultimo parametro come endBar (o endBar +1 per essere precisi), e l'ultimo come 1.
Il risultato cercato è High[iHighest(con i relativi parametri)] // O la variabile corrispondente, il cui valore è stato assegnato nella clausola precedente.
r772ra Grazie mille!!! Lo script fa quello che mi serve!!! Non tutto mi è chiaro nell'ultimo blocco di codice, ma lo capirò. Troverò il modo. Cercherò di usarlo nell'indicatore.
Cercheròdi usarlo in un indicatore:
Se avete domande in futuro, per favore mettetele in un modo che renda più facile la comprensione da parte dei programmatori.
r772ra Grazie mille!!! Lo script fa quello che mi serve!!! Non tutto mi è chiaro nell'ultimo blocco di codice, ma lo capirò. Troverò il modo. Cercherò di applicarlo all'indicatore.
Spiega se mi sbaglio, credo che la seconda metà del codice dello script _"void SetArrow(int cd, color cl," sia la parte che si riferisce alla funzione"_OnInit()" nell' indicatore.. indicatore, e la prima parte dello script _"voidOnStart()" si riferisce alla funzione "_OnCalculate" nell'indicatore? Cioè, grosso modo, lo script ha 1) calcolo all'inizio e poi 2) solo inizializzazione. Nell'indicatore è il contrario.
Spiega se mi sbaglio, penso che la seconda metà del codice dello script _"void SetArrow(int cd, color cl," sia la parte che si riferisce alla funzione"_OnInit()" nell' indicatore personalizzato.. indicatore, e la prima parte dello script _"voidOnStart()" si riferisce alla funzione "_OnCalculate" nell'indicatore? Cioè, grosso modo, lo script ha 1) calcolo all'inizio e poi 2) solo inizializzazione. Nell'indicatore è viceversa.
È una funzione definita dall'utente che è al di fuori dell'ambito di altre funzioni.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Penso che non ne abbiate bisogno nell'indicatore, il buffer è responsabile del disegno
In altre parole.
longBarsBuffer[i]=High[h]+5*Point(); - то что необходимо получить.
else
longBarsBuffer[i]=0.0;
Ulteriori
La funzione
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает реальный номер бара от начала суток. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| dt - дата и время открытия бара ( 0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayReal(string sy="", int tf=0, datetime dt=0) {
if (sy=="" || sy=="0") sy=Symbol();
if (tf<=0) tf=Period();
if (dt<=0) dt=TimeCurrent();
if (tf>PERIOD_D1) {
Print("iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1");
return(0);
}
int cd=TimeDay(dt); // текущий день месяцаint nb=iBarShift(sy, tf, dt, False); // номер текущего бараint bd=0; // номер бара от начала сутокwhile(TimeDay(iTime(sy, tf, nb))==cd) {
nb++;
bd++;
}
return(bd);
}
E la chiamata
trova il numero di barre dall'inizio del giorno (il giorno corrente non viene ricalcolato) e quella barra va nella storia.
int bStart = iBarOfDayReal();//бар, с которого уходим в историю
Cari amici, cercherò di spiegare al meglio quello che voglio ottenere... ..o lo farò bene ..o confonderò tutti!
...Continuiamo la conversazione... Come ho capito il compito può essere ridotto a quanto segue. Per semplificare, esamineremo solo ieri, il periodo H1.
Per prima cosa, cerchiamo la prima candela (guardando dal lato sinistro del grafico di ieri) con la chiusura superiore all'apertura, cioè cerchiamo la prima candela rialzista. Se questa viene trovata, allora partendo da essa (compresa) fino all'ultima candela del giorno corrente, dovremmo trovare la candela con il massimo più alto. Per esempio, se l'ora di apertura della prima candela rialzista è 10:00, allora da essa fino alla candela delle 23:00 dovremmo cercare la candela con il massimo più alto. Giusto?
Continuando la conversazione... Per come la vedo io, l'incarico può essere ridotto a quanto segue. Per semplificare, esamineremo solo la giornata di ieri, periodo H1.
In primo luogo, cerchiamo la prima candela (guardando dal lato sinistro del grafico di ieri) la cui chiusura è superiore all'apertura, cioè cerchiamo la prima candela rialzista. Se questa viene trovata, allora partendo da essa (compresa) fino all'ultima candela del giorno corrente, dovremmo trovare la candela con il massimo più alto. Per esempio, se l'ora di apertura della prima candela rialzista è 10:00, allora da essa fino alla candela delle 23:00 dovremmo cercare la candela con il massimo più alto. Giusto?
Oh, grazie al cielo... Ho capito! SÌ! SÌ! SÌ! È esattamente quello che sto cercando di fare. Se lo sai, puoi dirmi come fare?
Oh, grazie al cielo... Ce l'ho! SÌ! SÌ! SÌ! È esattamente quello che sto cercando di fare. Se lo sai, puoi dirmi come fare?
Se è la candela di ieri, sarà la candela finale in iHigest(), e la candela iniziale sarà 00:00 del giorno successivo (cioè la candela di oggi) ottenuta da iBarShift().
Algoritmo di esempio:
1. Oggi stiamo cercando la prima barra a toro tra le barre orarie di ieri. Che sia l'indice endBar
Determinare la prima barra di un'ora oggi. Oppure sarà zero.
3. In iHighest() impostate il penultimo parametro come endBar (o endBar +1 per essere precisi), e l'ultimo come 1.
Il risultato cercato è High[iHighest(con i relativi parametri)] // O la variabile corrispondente, il cui valore è stato assegnato nella clausola precedente.
Oh, grazie al cielo... Ho capito! SÌ! SÌ! SÌ! È esattamente quello che sto cercando di fare. Se lo sai, puoi dirmi come fare?
SCHIFO! provando.
r772ra Grazie mille!!! Lo script fa quello che mi serve!!! Non tutto mi è chiaro nell'ultimo blocco di codice, ma lo capirò. Troverò il modo. Cercherò di usarlo nell'indicatore.
Cercheròdi usarlo in un indicatore:
Se avete domande in futuro, per favore mettetele in un modo che renda più facile la comprensione da parte dei programmatori.Ho capito, ne terrò conto!
Grazie mille!
r772ra Grazie mille!!! Lo script fa quello che mi serve!!! Non tutto mi è chiaro nell'ultimo blocco di codice, ma lo capirò. Troverò il modo. Cercherò di applicarlo all'indicatore.
Va bene, ne terrò conto!
Grazie mille!
Esattamente cosa non è chiaro?
Spiega se mi sbaglio, credo che la seconda metà del codice dello script _"void SetArrow(int cd, color cl," sia la parte che si riferisce alla funzione"_OnInit()" nell' indicatore.. indicatore, e la prima parte dello script _"void OnStart()" si riferisce alla funzione "_OnCalculate" nell'indicatore? Cioè, grosso modo, lo script ha 1) calcolo all'inizio e poi 2) solo inizializzazione. Nell'indicatore è il contrario.
Spiega se mi sbaglio, penso che la seconda metà del codice dello script _"void SetArrow(int cd, color cl," sia la parte che si riferisce alla funzione"_OnInit()" nell' indicatore personalizzato.. indicatore, e la prima parte dello script _"void OnStart()" si riferisce alla funzione "_OnCalculate" nell'indicatore? Cioè, grosso modo, lo script ha 1) calcolo all'inizio e poi 2) solo inizializzazione. Nell'indicatore è viceversa.
È una funzione definita dall'utente che è al di fuori dell'ambito di altre funzioni.
Chiamata di funzione, da qualsiasi altra funzione
Penso che non ne abbiate bisogno nell'indicatore, il buffer è responsabile del disegno
In altre parole.
Ulteriori
La funzione
E la chiamata
trova il numero di barre dall'inizio del giorno (il giorno corrente non viene ricalcolato) e quella barra va nella storia.