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

[Deleted]  

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);
}
[Deleted]  

screenshot

aggiunto tramite opera, non aggiunto in explorer

[Deleted]  
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.

[Deleted]  

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