[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 105

 

Ciao a tutti,

Ho fatto un indicatore che disegna due linee a 45 gradi e quando si intersecano voglio che siano orizzontali.

Quindi come si calcola l'intersezione?

Ho disegnato con Low/High del giorno precedente, attraverso un punto.

Per ottenere una tale linea traccio da un punto all'inizio del giorno e dall'altra parte dal punto del raggio.

Come posso scrivere il codice per ricalcolarlo? Non l'ho ancora fatto:

Вот начну искат как цена двигается-толко надо увидет ее-первая ест,но вторая 0:
price1 = NormalizeDouble(ObjectGet("Dn",OBJPROP_PRICE1),Digits);
price2 = NormalizeDouble(ObjectGet("Dn",OBJPROP_PRICE2),Digits);
Time_start - ето синяя вертикалная линия
double b3=iBarShift(Symbol(),0,Time_start);      
double b4=iBarShift(Symbol(),0,TimeCurrent());
ну и цикл поиска
for(int j = b4;j <= b3;j++){
Ну що искат,если я не вижу то,что ищу?
Застрял.
 
bond007:
.... e come possono scoprirlo???)
Solo che non capisco.... dicono che si può fare trading con gli EA, altri dicono che non si può - se per esempio una società di brokeraggio permette di usare un EA, allora come?? Sono interessato al codice dell'EA che scopriranno?

la società di intermediazione non può vedere il codice.... vedono solo l'intensità dell'ordine e i commenti negli ordini ... ci sono alcuni DT dove il lavoro degli EA nel terminale è proibito... significa che quando si attacca un EA a un grafico non fa trading ... se non è permesso dalle impostazioni del server, il vostro broker vi darà un errore xxx o qualcosa come 2013.01.18 22:45:03 '30xxxxx': il trading da parte di esperti è vietato



cioè, non so perché sono diventato ossessionato dal codice?

 
hoz:

Grazie, ora ti verrà l'appetito :)
Buon per te, e gradualmente dal semplice al complesso programmerai la tua comprensione, che è necessaria per scrivere qualsiasi programma. Buona fortuna!
 
mario065:

Ciao a tutti,

Ho fatto un indicatore che disegna due linee a 45 gradi e quando si intersecano voglio che siano orizzontali.

Quindi come si calcola l'intersezione?

Ho disegnato con Low/High del giorno precedente, attraverso un punto.

Per ottenere una tale linea disegno da un punto all'inizio del giorno e nell'altro lato dal punto del raggio.

Come posso scrivere il codice per ricalcolarlo? Non l'ho ancora fatto:

Per aiutare.
 
drknn:

Cosa intendete con il termine "grafico logaritmico"? Per favore, mi faccia un esempio. Io, per esempio, ho incontrato solo il concetto di una scala logaritmica. Il terminale MT4 ha già questa scala.
Intendo la scala logaritmica, come posso trovarla in MT? L'ho usato per tanti anni e non so cosa ci sia già.
 
mario065:

Ciao a tutti,

Ho fatto un indicatore che disegna due linee a 45 gradi e quando si intersecano voglio che siano orizzontali.

Quindi come si calcola l'intersezione?

Ho disegnato con Low/High del giorno precedente, attraverso un punto.

Per ottenere una tale linea disegno da un punto all'inizio del giorno e nell'altro lato dal punto del raggio.

Come posso scrivere il codice per ricalcolarlo? Non l'ho ancora fatto:



Igor Kim's:

Funzione CrossPointOfLines()

 

Alexei, Artem, grazie.

Imparerò le funzioni di Igor Kim.

 

Quindi non ho due punti, ne ho solo uno.

Ecco i sors:

//+------------------------------------------------------------------+
//|                                                     TRIANGLE.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013,mario"
#property link      ""

#property indicator_chart_window
extern string   TimeStart  = "Час за начало";
extern datetime Time_start = D'17.01.2013';
extern int      Days       = 1;
bool            New_Bar    = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){
   ObjectsDeleteAll(0,OBJ_TRENDBYANGLE);
   ObjectsDeleteAll(0,OBJ_VLINE);
   Comment("");return(0);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  { 
   datetime New_Time,time_next,time_barh,time_barl;
   time_next = Time_start + Days*86400;
   datetime new_day = iTime(Symbol(),PERIOD_D1,0);
//+------------------------------------------------------------------+
   if(New_Time != new_day)                        
           {
           New_Time = new_day;                         
           New_Bar  = true;
           }
//+------------------------------------------------------------------+ 
//Шифтвам 
   double b1=iBarShift(Symbol(),0,Time_start);      
   double b2=iBarShift(Symbol(),0,time_next);
   double min = 3,max = 0;
   for(int i = b2;i <= b1;i++){
      if(iHigh(Symbol(),0,i)>max){ max=iHigh(Symbol(),0,i);time_barh = Time[i];}
      if(iLow (Symbol(),0,i)<min){ min=iLow (Symbol(),0,i);time_barl = Time[i];}
      }
   if(New_Bar == true){ 
      ObjectsDeleteAll(0,OBJ_TRENDBYANGLE);
      ObjectsDeleteAll(0,OBJ_VLINE);
      DrawLine("Start",0,Time_start,0,Time_start,0,0,0,2,Aqua,false);
      DrawLine("Up",3,time_barh,max,0,0,315.0,0,2,DeepSkyBlue,true);
      DrawLine("Up1",3,time_barh,max,Time_start,0,315.0,0,2,DeepSkyBlue,false);
      DrawLine("Dn",3,time_barl,min,0,0,45.0,0,2,Orange,true);
      DrawLine("Dn1",3,time_barl,min,Time_start,0,45.0,0,2,Orange,false);
    }
//+------------------------------------------------------------------+
   double spead = MarketInfo(Symbol(),MODE_SPREAD);
//+------------------------------------------------------------------+ 
   Comment("\nВреме на брокера: ",TimeToStr(TimeCurrent(),TIME_SECONDS),", Локално време: "+TimeToStr(TimeLocal(),TIME_SECONDS),
           "\nТекущ спред: ",DoubleToStr(spead/10,1),
           "\n min:        ",DoubleToStr(min,Digits),
           "\n max:       ",DoubleToStr(max,Digits)
           );
   return(0);
  }
//+------------------------------------------------------------------+
void DrawLine(string name,int lines,datetime time1,double value,datetime time2,double value1,double grd,int style,int wid,color col,bool ray)
{
   ObjectCreate(name,lines,0,time1,value,time2,value1);
   ObjectSet(name,OBJPROP_ANGLE,grd);
   ObjectSet(name,OBJPROP_COLOR,col);
   ObjectSet(name,OBJPROP_STYLE,style);
   ObjectSet(name,OBJPROP_WIDTH,wid);
   ObjectSet(name,OBJPROP_RAY,ray);
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}

Il codice in sé è molto semplice, ma c'è solo un punto.

 

Chi sa perché l'indicatore DailyPivotPoints nel tester in modalità visiva mostra solo i dati di oggi in tutte le date?

E se possibile, cosa si dovrebbe aggiungere per mostrare cosa c'era nella storia? Grazie!

 
lenalebedeva:
Intendo la scala logaritmica nello specifico, come la trovate in MT? L'ho usato per tanti anni e non so cosa ci sia già.

Vedere

P.S.

Per esempio, guardate un trend basso passato sul grafico e vedete che verso il bordo del grafico si sposta ancora più in basso fuori dalla finestra. Scorri il grafico verso il futuro e guarda come il grafico si sposta automaticamente verso l'alto, liberando spazio per visualizzare le candele del grafico sottostante. E ciò che prima era visibile nella parte superiore della finestra del grafico è ora spostato ancora più in alto, fuori dalla finestra del grafico. Questa è l'implementazione di una scala logaritmica dei prezzi sul grafico. Se non esistesse, si dovrebbe scorrere il grafico non solo da destra a sinistra, ma anche in alto e in basso. Ecco perché la scala temporale è lineare e la scala dei prezzi è logaritmica, per poter visualizzare facilmente i dati nella finestra del grafico.

In passato, quando i computer non erano disponibili, i commercianti usavano un grafico millimetrato e tracciavano i prezzi su di esso per prevedere le tendenze e i punti di svolta. Pertanto, c'erano due scale sulla carta: il prezzo e il tempo. Si tratta di due scale lineari. Riuscite a immaginare quanto dovrebbe essere grande un foglio di carta millimetrata per contenere tutti i quindici minuti di candele dell'ultimo anno? Sicuramente sarebbe grande come il muro di una stanza (se non più grande). Così, quando stai scorrendo il grafico sullo schermo, puoi immaginare questo modello: un grafico a candele dei prezzi è disegnato sulla parete. C'è anche una cornice rettangolare (per esempio rossa) - è il tuo monitor. Muoversi lungo il grafico non è altro che spostare questo rettangolo rosso lungo la tendenza. Ma allora diresti che entrambe le scale del tuo monitor sono lineari. Questo è vero, ma solo parzialmente - notate che quando si scorre il grafico, la candela che era grande (percepita visivamente come grande) diventa più piccola dopo un leggero spostamento, anche se se misuriamo la distanza tra i suoi estremi, il numero di punti rimane lo stesso.

Guarda, qui ci sono 2 screenshot dello stesso grafico. Il primo screenshot è solo uno screenshot. Il secondo è uno screenshot della stessa schermata, ma dopo aver fatto girare la rotellina del mouse con un clic, il grafico si è spostato indietro di qualche candela. Prendi un pezzo di carta, attaccalo al primo screenshot e segna i prezzi alti e bassi della candela segnata in rosso. Poi sposta i rischi segnati sulla stessa candela nel secondo screenshot. Capirete di cosa stiamo parlando e cos'è uno spostamento nella scala logaritmica (che è l'essenza dell'uso diseguale delle scale qui).

E perché avete bisogno di entrare nelle sfumature delle scale logaritmiche? Cosa sperava di trovarci?

Motivazione: