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

 

Salud!!!

Non riesco a capire perché Open=Close=High=Low - nessuna differenza, tutti i prezzi sono gli stessi, quattro colonne degli stessi prezzi nel file che viene creato. Di seguito il codice per l'EA che scarica i dati.

int init()  
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
   FileSeek(h, 0, SEEK_END);
   FileWrite(h,"Date","DayOfWeek","CLOSE","OPEN","High","LOW" );
   FileClose(h);        
  }
int start()
  {
   int h=FileOpen("H"+(Period()/60)+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
    if(h<1)
      {
      Print("Файл не найден : ", GetLastError());
      return(false);
      }
      string Wtime=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
      string Wday=DoubleToStr(DayOfWeek(),0);
      FileSeek(h, 0, SEEK_END);
      FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iOpen("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iHigh("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),
                             DoubleToStr(iLow("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)));
      FileClose(h);   
      Print("Close=",Close[0]);
      Print("Open=",Open[0]);
      Print("Low=",Low[0]);
      Print("High=",High[0]);
     
   return(0);
  }
 

Buon pomeriggio signori programmatori! Date un'occhiata a questo interessantissimo Expert Advisor! Voglio correggere qualcosa, cioè: voglio davvero allegare ad esso (preferibilmente commutabile) trawl personalizzabile su take profit. Penso (e spero) che non sarà troppo difficile da fare per uno specialista!

/*La decompilazione su questo forum è contro la legge. primo avviso. ripetizione - divieto eterno (FAQ)*/

 
Andrew1001:

Buon pomeriggio signori programmatori! Date un'occhiata a questo interessantissimo Expert Advisor! Voglio correggere qualcosa, cioè: voglio davvero allegare ad esso (preferibilmente commutabile) trawl personalizzabile su take profit. Penso (e spero) che non sarà troppo difficile da fare per uno specialista!

/*La decompilazione su questo forum è contro la legge. primo avvertimento. ripetizione - divieto eterno (FAQ)*/



Ecco fatto! E come il codice poi stabilisce che sarebbe possibile vederlo, migliorarlo? (domanda ai moderatori)
 
ANG3110:

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

***

E se non vuoi disegnare tutti i giorni, solo l'ultimo, si fa un po' diversamente. 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=Close[i]; // я вставил закрытие оно работает на нижних таймфремах

//КАК ТУТ вставить High Low для  hour = 5 для ВСЕХ таймфремов ниже ограниченного таймфрема???????????

      }
      
      fx[i]=hm; 
   }
  
   return(0);
}
//***************************************************************

SOLO non è chiaro come inserire iHigh e iLow per un'ora particolare, la stessa ora = 5; ??????????? si ottengono di nuovo le stesse uova...

PROFESSIONALMENTE stavo usando iClose iHigh iLow, ma ho dimenticato come è stato scritto il codice per questa variante... Ricordo il principio, ma ho dimenticato i dettagli.

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 LastD =  iTime(Symbol(), PERIOD_D1, i-1); 
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(PrevDay>LastDay)  /// что было дальше НЕПОМНЮ!!!!, НО вариант ЛУЧШЕ, можно непарясь ставить уровни iHigh iLow iClose iOpen
{ 
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);
}

per favore aiutatemi a capire come farlo???????????????????

 

Ancora una volta, per favore aiutatemi per favore!!!!

Come mettere correttamente iHigh iLow iClose???? di un timeframe specifico (H1) nel buffer, in modo che possa essere letto correttamente sui grafici sotto????

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 LastD =  iTime(Symbol(), PERIOD_D1, i-1); 
int LastDay = iBarShift(Symbol(), PERIOD_D1, LastD);

if(PrevDay>LastDay)  
/// что было дальше НЕПОМНЮ!!!!, НО вариант ЛУЧШЕ, можно непарясь ставить уровни iHigh iLow iClose iOpen
{ 
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);
}
 

Ciao, potresti dirmi come scriverlo correttamente?

Il fatto è che ObjectSetText non fa nulla, quindi ottengo un testo al posto della didascalia del vertice.

ObjectCreate( "вершина",  OBJ_TEXT , WindowOnDropped( ) , Time[бар_вершина],  вершина+(10*Point)) ;  
       ObjectSet(  "вершина",  OBJPROP_COLOR, Crimson) ;
    ObjectSetText( "вершина", "вершина", 5, NULL, CLR_NONE) ;   
 
orb:

Non riesco a capire perché nel file creato Open=Close=High=Low - nessuna differenza, tutti i prezzi sono uguali, quattro colonne degli stessi prezzi. Di seguito è riportato il codice dell'Expert Advisor che scarica i dati.


Nessun dato rilevante per lo strumento e il timeframe - apri i grafici corretti.

Voce non corretta nel codice:

FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo(Symbol(),MODE_DIGITS)),..

Corretto:

FileWrite(h,Wtime,Wday,DoubleToStr(iClose("GBPUSD",0,0),MarketInfo("GBPUSD",MODE_DIGITS)),..

Il codice funziona se le condizioni sono soddisfatte.

 
Roll:


Nessun dato rilevante per lo strumento e il timeframe - apri i grafici corretti.

Inserimento errato nel codice:

Corretto:

Finché le condizioni sono soddisfatte, il codice funziona.

Ok, farò un tentativo).
 
nlp2311:

SOLO NON è chiaro come inserire iHigh e iLow per un'ora specifica, la stessa ora = 5; ??????????? risulta di nuovo le stesse uova...

PROFESSAMENTE stavo usando iClose iHigh iLow, ma ho dimenticato come è stato scritto il codice per questa variante... Ricordo il principio, ma ho dimenticato i dettagli.

per favore aiutatemi a capire come farlo???????????????????


Puoi disegnare le barre del timeframe orario sui grafici orari e inferiori senza prendere i prezzi da un altro timeframe. Il collegamento con iHigh ecc. non è molto utile perché rallenta l'indicatore e ha bisogno di urtare l'altro timeframe.

Se è possibile fare tutto in una sola volta, è preferibile.

E come si fa praticamente a disegnare linee con dati orari su un orizzonte temporale più piccolo? Va più o meno così.

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 Lime
//==============================
double H[],L[],O[],C[];
double hm,lm,om,cm;
int hr,hrp,di,f=0;
//************************************************************
int init()  
{   
   SetIndexBuffer(0,H);
   SetIndexBuffer(1,L);
   SetIndexBuffer(2,O);
   SetIndexBuffer(3,C);
   
   if (Period()>1440) f=1;
   
   di=60/Period();
   
   return(0);
}
//************************************************************
int start()
{
   if (f==1) {Comment("Период больше H1!"); return(0);}
   //-------------------------------
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==1) cbi--;
   if (cbi>1) 
   {
      cbi=Bars-1;
      hm=High[cbi]; 
      lm=Low[cbi]; 
      om=Open[cbi]; 
      cm=Close[cbi]; 
   }
   //-------------------------------
   for(int i=cbi; i>=0; i--)
   {
      hrp=TimeHour(Time[i+1]); 
      hr=TimeHour(Time[i]);
      
      if (hrp!=hr) 
      {
         for (int j=i+1; j<=i+di; j++)
         {
            H[j]=hm;
            L[j]=lm;
            O[j]=om;
            C[j]=cm;
         }
         
         hm=High[i];
         lm=Low[i];
         om=Open[i];
         cm=Close[i];
      }
      else
      {
         if (High[i]>hm) hm=High[i];
         if (Low[i]<lm) lm=Low[i];
         cm=Close[i];
      }
      
      H[i]=hm;
      L[i]=lm;
      O[i]=om;
      C[i]=cm;
   }
   
   return(0);
}
//***************************************************************
 
ANG3110:


Sui grafici orari e inferiori, è possibile disegnare barre a timeframe orario e senza prendere i prezzi da un altro timeframe. Il collegamento con iHigh, ecc. non è molto utile perché rallenta l'indicatore e deve urtare l'altro timeframe.

Se è possibile fare tutto in una sola volta, questo è preferibile.

E come si fa praticamente a disegnare dati orari su un arco di tempo più piccolo? Beh, è più o meno così:


GRAZIE per il suggerimento):