[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 274

 

Салют!

Не могу понять, почему в создаваемом файле Open=Close=High=Low - без разницы, все цены одинаковые, четыре столбика одинаковых цен. Ниже привожу код советника, выгружающего данные.

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);
  }
 

Добрый день господа программисты! Будте так любезны посмотреть вот этот очень интересный советник! Нужно кое что подправить, а именно: Очень хочется приделать к нему (желательно отключаемый) настраевыемый трал по тейк профиту. Думаю (и надеюсь) специалисту будет не очень сложно это сделать!

/*Декомпилят на этом форуме вне закона. на первый раз предупреждение. повтор - вечный бан (FAQ)*/

 
Andrew1001:

Добрый день господа программисты! Будте так любезны посмотреть вот этот очень интересный советник! Нужно кое что подправить, а именно: Очень хочется приделать к нему (желательно отключаемый) настраевыемый трал по тейк профиту. Думаю (и надеюсь) специалисту будет не очень сложно это сделать!

/*Декомпилят на этом форуме вне закона. на первый раз предупреждение. повтор - вечный бан (FAQ)*/



Ну вот! А как код тогда выложить что бы можно было его посмотреть, доработать? (вопрос модераторам)
 
ANG3110:

Ну вот я там написал пример попроще.

***

А если не нужно чертить все дни а только последний, то это делается чуть по другому. Я просто предлагаю более профессиональный подход.

#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);
}
//***************************************************************

ТОЛЬКО НЕ ЯСНО как ТУДА вставить iHigh и iLow для конкретного часа, того же hour = 5; ??????????? получается опять теже яйца...

ПРОФИССИОНАЛЬНО было у меня через iClose iHigh iLow, НО я блин забыл как был написан код по такому варианту... принцип помню, детали забыл

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);
}

ПОМОГИТЕ КРИЗИС ПОНИМАНИЯ КАК ЭТО сделать???????????????????

 

Профи еще раз прошу помощи ПОЖАЛУЙСТА!!!!

Как корректно положить в буфер iHigh iLow iClose???? конкретного (Н1) таймфрема, чт о бы он корректно читался на ниже стоящих графиках????

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);
}
 

Добрый день! Подскажите, пожалуста, как корректно написать

Дело в том, что ObjectSetText так видимо ничего не делает, вместо подписи вершина я получаю надпись текст.

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

Не могу понять, почему в создаваемом файле Open=Close=High=Low - без разницы, все цены одинаковые, четыре столбика одинаковых цен. Ниже привожу код советника, выгружающего данные.


Нет соотв. данных по инструменту и таймфрейму -- откройте нужные графики.

Некоррекная запись в коде:

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

Правильнее:

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

При соблюдении условий код рабочий.

 
Roll:


Нет соотв. данных по инструменту и таймфрейму -- откройте нужные графики.

Некоррекная запись в коде:

Правильнее:

При соблюдении условий код рабочий.

Ок попробую!)
 
nlp2311:

ТОЛЬКО НЕ ЯСНО как ТУДА вставить iHigh и iLow для конкретного часа, того же hour = 5; ??????????? получается опять теже яйца...

ПРОФИССИОНАЛЬНО было у меня через iClose iHigh iLow, НО я блин забыл как был написан код по такому варианту... принцип помню, детали забыл

ПОМОГИТЕ КРИЗИС ПОНИМАНИЯ КАК ЭТО сделать???????????????????


На графиках часовок и ниже можно отрисовать бары часового таймфрейма и без взятия цен с другого таймфрейма. Связываться с iHigh и т.д. не очень целесообразно, так как это замедляет работу идикатора и нуждается в подкачке другого таймфрейма.

Если есть возможность выполнить все на одном таймфрейме, то это предпочтительней.

А как практически отрисовать линиями часовые данные на меньшем таймфрейме? Ну примерно так.

#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:


На графиках часовок и ниже можно отрисовать бары часового таймфрейма и без взятия цен с другого таймфрейма. Связываться с iHigh и т.д. не очень целесообразно, так как это замедляет работу идикатора и нуждается в подкачке другого таймфрейма.

Если есть возможность выполнить все на одном таймфрейме, то это предпочтительней.

А как практически отрисовать линиями часовые данные на меньшем таймфрейме? Ну примерно так:


СПАСИБО что подсказали):
Причина обращения: