[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 271

 
int start()
  {
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);

int LastDay = iBarShift(Symbol(), PERIOD_D1,iTime(Symbol(), PERIOD_D1, i))-1;
if(LastDay>0)   // тут я запутался 
buffer[i]= CL;
}
return(0);

Per favore, aiutatemi a capire questo. Voglio che la linea sia corretta. Ma il buffer dà solo una linea, dovrebbe essere piatta a metà giornata, come le linee pivot .... Ho una linea che viene dal livello dell'ora X del giorno precedente.

PER FAVORE CAPISCILO.... Non riesco a capire.

 
nlp2311:

Per favore, aiutatemi a capire questo. Voglio che la linea sia corretta. Ma il buffer dà solo una linea, dovrebbe essere piatta a metà giornata, come le linee pivot .... Ho una linea che viene dal livello dell'ora X del giorno precedente.

PER FAVORE CAPISCILO.... Non riesco a capirlo((((

Bene, diciamo che hai bisogno di prendere un muving a ore 5 su qualsiasi timeframe, ovviamente non sul giornaliero, ma su uno più piccolo. Diciamo a partire dall'una o meno.

E disegnare alle 5 del giorno dopo. Ecco come si fa.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 4;
//==============================
double fx[];
double mai;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx);
   
   p=hrma*60/Period(); // пересчет периода мувинга на любой таймфрейм
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) mai=iMA(NULL,0,p,0,0,0,i); // сам простой мувинг, в момент, когда час равен нашему и не неравен на предыдущем баре
      
      fx[i]=mai; // просто приравнивание индикаторного буффера к глобальной переменной 
   }
  
   return(0);
}
//***************************************************************
 

Sì, l'ho fatto, stessa risposta... con

ti=Time[i]; // время текущего бара
      
      tiip=tii; // предыдущее состояние времени
      tii=(ti-dth)/dtd*dtd;// время начала суток сдвинутое на нужный нам час
      
      if (tiip!=tii)

MA IL RISULTATO È SBAGLIATO!!!!!!!!!!!!!!! Ho preso un esempio dal python attraverso

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
La visione generale è così

int start()
  {
double LastHigh,LastLow;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(Period() > 240)  return(-1);

int LastPrevDay = iBars(Symbol(), PERIOD_D1);
int barnH= iBars(Symbol(),PERIOD_H1);

for (int i = LastPrevDay-1; i >= 0; i--)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, i);
int PrevDay = iBarShift(Symbol(), PERIOD_D1, NowDay);
datetime LastD =  iTime(Symbol(), PERIOD_D1, i+1);
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{ 
datetime x_time= StrToTime(TimeToStr(NowDay, TIME_DATE)+" "+shift_time); 
int x_shift= iBarShift(Symbol(),PERIOD_H1,x_time);
double CL= iClose(Symbol(),PERIOD_H1,x_shift);
}

buffer[i]= CL;
}

return(0);
}

NON È ANCORA IL RISULTATO GIUSTO.

Il problema è semplice mettere una linea COME pivot è piatto, ma non a livello di pivot, ma da un valore di qualche ora. Questo è tutto!!! E sto lottando e non capisco come...GIUSTIFICARE la linea da X ora a Time[0] !!!!!!!!!!!!!!!!

 
nlp2311:

Sì, l'ho fatto, stessa risposta... con

MA IL RISULTATO È SBAGLIATO!!!!!!!!!!!!!!! Ho preso un esempio dal python attraverso

La visione generale è così

NON È ANCORA IL RISULTATO GIUSTO.

Il problema è semplice mettere una linea COME pivot è piatto, ma non da livello pivot, ma da un valore di qualche ora. Questo è tutto!!! E io sto lottando e non capisco come... RANGE la linea da X ore a Time[0] !!!!!!!!!!!!!!!!

Beh, ho scritto un esempio più semplice lì.

Se abbiamo scritto qualche valore nel punto dell'ora richiesto, allora la linea è semplicemente equiparata a questo valore.

for(int i=cbi; i>=0; i--)
{
hrp=TimeHour(Time[i+1]);
hr=TimeHour(Time[i]);

if (hr==hour && hrp!=hr) x=

fx[i]=x; // basta equiparare il buffer degli indicatori alla variabile globale
}

Lo stesso per qualsiasi cosa, pivot o altro. Semplicemente, se si tratta di un Pivot giornaliero, allora i livelli giornalieri sono calcolati in questo punto per la quantità giornaliera di barre.

Ecco i massimi giornalieri a ore 5, per esempio. Lo stesso può essere fatto con tutti gli altri livelli. Copia il codice in un indicatore vuoto, compila e guarda, penso che questo sia giusto.

Se non avete bisogno di disegnare tutti i giorni, ma solo l'ultimo, allora si fa in un modo leggermente diverso. Sto solo suggerendo un approccio più professionale.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2
//==============================
extern int    hour = 5;
extern int    hrma = 24;
//==============================
double fx[];
double hm;
int p,hr,hrp;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,fx); SetIndexEmptyValue(0,EMPTY); 
   
   p=hrma*60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) cbi=Bars-p-1;
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hr==hour && hrp!=hr) 
      {
         fx[i+1]=EMPTY;
         hm=High[iHighest(NULL,0,MODE_HIGH,p,i+1)];
      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************
 
Ciao a tutti. Come si aggiungono gli indicatori al grafico? Cioè, ho un EA che calcola un certo valore di, diciamo, iMA. Come si disegna l'indicatore sul grafico? Penso di sì, usando la funzione speciale o "manualmente" attraverso la linea di tendenza? C'è un modo più semplice per visualizzare l'indicatore con i parametri dell'EA?
 
Pyro:
Ciao a tutti. Se volessi metterli sul grafico, non dovrei disegnarli io stesso. Cioè, ho un EA dove calcolo alcuni valori come iMA. Come si disegna l'indicatore sul grafico? Penso di sì, usando la funzione speciale o "manualmente" attraverso la linea di tendenza? C'è un modo più semplice per visualizzare l'indicatore con i parametri dell'EA?

Non ho incontrato, forse qualcuno ha scritto una ricerca sul forum per la mappatura dei buffer attraverso la trendline.

O scrivetelo voi stessi, non c'è niente di complicato.

 
Pyro:
Ciao a tutti. Come posso aggiungere indicatori al grafico? Cioè, ho un Expert Advisor che calcola alcuni valori come iMA. Come si disegna l'indicatore sul grafico? Penso di sì, usando la funzione speciale o "manualmente" attraverso la linea di tendenza? C'è un modo più semplice per visualizzare l'indicatore con i parametri dell'EA?


Se l'EA è attaccato al grafico e c'è qualcosa al suo interno, allora per vedere cos'è, dobbiamo creare un indicatore con esattamente la stessa funzione e impostare gli stessi parametri dell'EA e applicarli al grafico. Oppure, se si tratta di una funzione standard di MT, come un muving, deve anche essere applicata a un grafico e sono stati impostati gli stessi parametri dell'Expert Advisor. L'Expert Advisor stesso non disegna indicatori sul grafico. Viene disegnato nello Strategy Tester solo dopo il test. Non li disegna durante il trading. Un altro modo, ma fastidioso, è quello di disegnare oggetti, come trattini ObjectCreate(name+Time[0],OBJ_ARROW,0,Time[0],price); ObjectSet(name+Time[0],OBJPROP_ARROWCODE,4); o segmenti di trendline, ma poi lo stato della funzione sulla barra precedente deve essere salvato. Ma è quando l'indicatore non può essere applicato, per esempio, quando qualcosa deve essere disegnato da Askum, ma MT non memorizza l'array di Askum o qualche sintetico di due coppie. Quindi, bisogna ruotarlo per controllarlo.

Bene, puoi anche fare un modello (tpl) su cui allegare ciò che ti serve. Ma praticamente è meglio fare un indicatore personalizzato, e impostare manualmente e scrivere un nuovo profilo e quando si vuole fare trading, basta chiamare il profilo appropriato. È una tecnica al limite della fantasia.

 
È una rottura di scatole se i parametri cambiano costantemente nell'Expert Advisor. OK, grazie colleghi, ora c'è la certezza.
 
Trasferimento dall'EA all'indicatore tramite GV.
 

1) Creare modelli con parametri EA e indicatori preimpostati

2) Trasferire i parametri agli indicatori usando GV

3) Chiamare gli indicatori al grafico dall'EA usando WINAPI

Preferisco disegnare un grafico indicatore da un EA tramite l'oggetto Arrow

Motivazione: