Non c'è bisogno di aggiungere nulla... È già in linea.
Vorrei chiedere a Igor e a tutti quelli che scrivono regolarmente in questo thread. Ho sfogliato il ramo e non ho trovato la funzione che determina l'angolo del trend. Avete una funzione che determina l'angolo del trend su un grafico a 15 minuti per 6 o più candele?
mazepa писал(а)>> Vorrei chiedere a Igor e a tutti quelli che scrivono regolarmente in questo thread. Ho cercato nel ramo e non ho trovato la funzione che determina l'angolo del trend. Avete una funzione che determina l'angolo del trend su una candela a 15 minuti a 6 o più candele?
Possiamo parlare non dell'angolo, ma del tasso di variazione del prezzo
Saluti! Grazie per il vostro lavoro, state facendo un buon lavoro.
Sto facendo un indicatore ma la funzione EquationDirect a volte calcola il punto di incrocio in modo errato :(
Ho calcolato i punti delle linee sul mio grafico e li ho allegati in un indicatore di prova per chiarezza. La funzione non calcola correttamente l'incrocio con un offset, cioè in qualche angolo la formula della funzione non è appropriata e deve essere corretta in qualche modo, così quando succede i calcoli saranno fatti con una formula diversa IMHO
#define CPR "DECIDE"#define mName "Signal"#property indicator_chart_windowexternint SignalBars=30;// кол-во баров для сигналаexternint TrendBars=300;// кол-во баров для т. линийexterncolor CostMaxColor=FireBrick;// цвет максимальной ценыexterncolor CostMinColor=SteelBlue;// цвет минимальной ценыexterncolor VLineColor=DarkSlateGray;// цвет минимальной ценыexterncolor TrendColor=Gray;// цвет трендовых линийexterncolor OrderColor=Green;// цвет сигнала ордераexterncolor LabelColor=Navy;// цвет меток// Инициализация - функция начальных установокint init(){if(!IsDemo())return(0);if( SignalBars<30) SignalBars=30;}// ДеИнициализация - функция завершения работыint deinit(){ObjectDelete("UpTrend");ObjectDelete("DownTrend");ObjectDelete("MaxCost");ObjectDelete("MinCost");ObjectDelete("SignOrder");ObjectDelete("Trend");ObjectDelete("Volume");}// СТАРТ - основная функция обработкиint start(){int bar;double val, upb, t1, t2, h1, h2;
val=173;
bar=iHighest(NULL,0,MODE_HIGH,100,0);
t1=Time[0]-273600;
h1=High[ bar];
t2= t1-518400;
h2=High[ bar]- val*Point;
SetTLine( TrendColor,"DownTrend", t2, h2, t1, h1, True,STYLE_SOLID,2);
upb= EquationDirect( t1, h1, t2, h2,Time[0]);
SetArrow(6,DarkViolet,"UpBorder",Time[0], upb,2);
SetVLine( VLineColor,"VLine",Time[0],STYLE_SOLID);}// --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---// вертикальная временная линияvoid SetVLine(color cl,string nm="",datetime t1=0,int st=0,int wd=1){// Параметры:// cl - цвет линии// nm - наименование ("" - время открытия текущего бара)// t1 - время (0 - время открытия текущего бара)// st - стиль линии (0 - простая линия)// 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);}// установка трендовой линии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){// Параметры:// cl - цвет линии// nm - наименование ( "" - время открытия текущего бара)// t1 - время открытия бара ( 0 - Time[10]// p1 - ценовой уровень ( 0 - Low[10])// t2 - время открытия бара ( 0 - текущий бар)// p2 - ценовой уровень ( 0 - Bid)// ry - луч (False - по умолчанию)// st - стиль линии ( 0 - простая линия)// wd - ширина линии ( 1 - по умолчанию)if( nm=="") nm=DoubleToStr(Time[0],0);if( t1<=0) t1=Time[10];if( t2<=0) t2=Time[0];if( p1<=0) p1=Low[10];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);}// вычисление точки пересеченияdouble EquationDirect(double x1,double y1,double x2,double y2,double x){// Параметры:// x1,y1 - координаты первой точки,// x2,y2 - координаты второй точки,// x - значение, для которого вычислить Yif( x2== x1)return( y1);elsereturn(NormalizeDouble(( y2- y1)/( x2- x1)*( x- x1)+ y1,Digits));}// установка значькаvoid SetArrow(int cd,color cl,string nm="",datetime t1=0,double p1=0,int sz=0){// Параметры:// cd - код значка// cl - цвет значка// nm - наименование ("" - время открытия текущего бара)// t1 - время открытия бара (0 - текущий бар)// p1 - ценовой уровень (0 - Bid)// 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);}
non è a causa della funzione EquationDirect, il calcolo è corretto, è a causa di un bug nel terminale, la linea è disegnata con un offset
ecco perché ho dovuto prima determinare il punto di incrocio con Time[0] e poi disegnare una linea di tendenza dal punto iniziale al punto di incrocio con Time[0], in questo caso tutto funziona bene
il tempo più a destra nel grafico è necessario per posizionare l'icona dell'interruttore del segnale dell'indicatore (quando la scala del grafico viene cambiata), cioè se si sposta l'icona dell'interruttore oltre il tempo più a destra, cioè non ancora raggiunto, l'icona commuta (il segnale per piazzare un ordine si accende o si spegne, significa che si può proibire o permettere all'EA di operare commutando il segnale)
Il tempo di sinistra è determinato come segue: otteniamo la barra più esterna visibile sul grafico
WindowFirstVisibleBar() e ottenere il tempo Time[WindowFirstVisibleBar()]
Non c'è bisogno di aggiungere nulla... È già in linea.
Grazie mille!
Il tuo thread è un tesoro su internet, non ne ho mai abbastanza di quello che ho trovato.
Non c'è bisogno di aggiungere nulla... È già in linea.
Vorrei chiedere a Igor e a tutti quelli che scrivono regolarmente in questo thread. Ho sfogliato il ramo e non ho trovato la funzione che determina l'angolo del trend. Avete una funzione che determina l'angolo del trend su un grafico a 15 minuti per 6 o più candele?ci sono delle funzioni che permettono di tirare (grilletto)
profilo
modello
???
Vorrei chiedere a Igor e a tutti quelli che scrivono regolarmente in questo thread. Ho cercato nel ramo e non ho trovato la funzione che determina l'angolo del trend. Avete una funzione che determina l'angolo del trend su una candela a 15 minuti a 6 o più candele?
Possiamo parlare non dell'angolo, ma del tasso di variazione del prezzo
Saluti! Grazie per il vostro lavoro, state facendo un buon lavoro.
Sto facendo un indicatore ma la funzione EquationDirect a volte calcola il punto di incrocio in modo errato :(
Ho calcolato i punti delle linee sul mio grafico e li ho allegati in un indicatore di prova per chiarezza. La funzione non calcola correttamente l'incrocio con un offset, cioè in qualche angolo la formula della funzione non è appropriata e deve essere corretta in qualche modo, così quando succede i calcoli saranno fatti con una formula diversa IMHO
screenshot
aggiunto tramite opera, non aggiunto in explorer
Come posso determinare il tempo finale (da sinistra) che è visibile nel grafico?
TempoCorrente()
TempoCorrente()
Questo sembra essere sulla destra.
L'ho già capito.
non è a causa della funzione EquationDirect, il calcolo è corretto, è a causa di un bug nel terminale, la linea è disegnata con un offset
ecco perché ho dovuto prima determinare il punto di incrocio con Time[0] e poi disegnare una linea di tendenza dal punto iniziale al punto di incrocio con Time[0], in questo caso tutto funziona bene
il tempo più a destra nel grafico è necessario per posizionare l'icona dell'interruttore del segnale dell'indicatore (quando la scala del grafico viene cambiata), cioè se si sposta l'icona dell'interruttore oltre il tempo più a destra, cioè non ancora raggiunto, l'icona commuta (il segnale per piazzare un ordine si accende o si spegne, significa che si può proibire o permettere all'EA di operare commutando il segnale)
Il tempo di sinistra è determinato come segue: otteniamo la barra più esterna visibile sul grafico
WindowFirstVisibleBar() e ottenere il tempo Time[WindowFirstVisibleBar()]