Caratteristiche utili da KimIV - pagina 96

 
KimIV >> :

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.

 
KimIV >> :

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

???

 
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_window

extern int SignalBars=30;              // кол-во баров для сигнала
extern int TrendBars=300;              // кол-во баров для т. линий
extern color CostMaxColor=FireBrick;   // цвет максимальной цены
extern color CostMinColor=SteelBlue;   // цвет минимальной цены
extern color VLineColor=DarkSlateGray; // цвет минимальной цены
extern color TrendColor=Gray;          // цвет трендовых линий
extern color OrderColor=Green;         // цвет сигнала ордера
extern color 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     - значение, для которого вычислить Y

  if( x2== x1)return( y1);
  else
  return(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);
}
 

screenshot

aggiunto tramite opera, non aggiunto in explorer

 
come si può determinare il tempo finale (da sinistra) che è visibile sul grafico?
 
DECIDE писал(а) >>
Come posso determinare il tempo finale (da sinistra) che è visibile nel grafico?

TempoCorrente()

 
KimIV писал(а) >>

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()]