Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2560

 
Volodymyr Zubov #:

Добавил контроль открытия на текущей свече, не допускается открытие заново, если уже есть или было открытие.

спасибо!

а с " MaximumRisk и DecreaseFactor из кода и открывал позиции по фиксированному лоту?" не получилось?

 
Volodymyr Zubov #:

Добавил контроль открытия на текущей свече, не допускается открытие заново, если уже есть или было открытие.

разобрался с лотом. еще раз спасибо!



 
Igor Nagorniuk #:
if(StringFind(vName, name_n) != -1) ObjectDelete(vName);

ObjectDelete(0,vName);

 
Здравствуйте, уважаемые форумчане! 
Не могли бы вы подсказать, как можно реализовать следующую функцию:
Есть пересечение двух МА. Если произошло пересечение, то необходимо место пересечения + два бара вперед окрасить другим цветом(Не всю линию МА). Я пользовался следующим методом отрисовки:
//--- plot ColorSection
#property indicator_label4  "ColorSection"
#property indicator_type4   DRAW_COLOR_SECTION
//--- зададим 2 цвета для раскраски секций (они хранятся в специальном массиве)
#property indicator_color4  clrSeaGreen,clrPink
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1

и для отрисовки написал такой код:

      for(bar=limit; bar>=0 && !IsStopped();bar--)
        {
         if(Fast_Ma[bar+1]>Slow_Ma[bar+1]){
         //--- конец отрезка установим на цену High этого бара
         ColorSectionBuffer[bar+1]=Fast_Ma[bar+1];
         }  
              //--- если остаток от деления равен bars, 
      else
       if(Fast_Ma[bar+1]<Slow_Ma[bar+1]){
         //--- конец отрезка установим на цену High этого бара
         ColorSectionBuffer[bar+1]=Fast_Ma[bar+1];
         }  
     else  
        {
         //--- если ничего не подошло, то этот бар пропускаем - ставим значение 0
         ColorSectionBuffer[bar+1]=0;
        }  

Однако это работает не так, как хотелось бы. Моих знаний программирования к сожалению не хватает, поэтому прошу помощи у вас. Заранее спасибо!

 
W1nd ReD #:
Есть пересечение двух МА. Если произошло пересечение, то необходимо место пересечения + два бара вперед окрасить другим цветом(Не всю линию МА).

лучше делать отдельный буфер с DRAW_ARROW и сдвигом на 2 бара. Когда ма-шки пересеклись ставишь ему значения. Всё :-)

if (Crossed(Fast_Ma,Slow_Ma,i)) SignalBuffer[i]=close[i]; else SignalBuffer[i]=EMPTY_VALUE;

иначе изменение цвета МA на одном баре мягко говоря плохо заметно. К тому-же ты хочешь подкрашивать на 2 бара вперёд, всё равно где-то придётся добавлять сдвиг

 
Maxim Kuznetsov #:

лучше делать отдельный буфер с DRAW_ARROW и сдвигом на 2 бара. Когда ма-шки пересеклись ставишь ему значения. Всё :-)

if (Crossed(Fast_Ma,Slow_Ma,i)) SignalBuffer[i]=close[i]; else SignalBuffer[i]=EMPTY_VALUE;

иначе изменение цвета МA на одном баре мягко говоря плохо заметно. К тому-же ты хочешь подкрашивать на 2 бара вперёд, всё равно где-то придётся добавлять сдвиг

Спасибо за ваш ответ!

У меня МА сдвиг имеют. + если я использую функцию 

DRAW_COLOR_SECTION

то я могу при пересечение МА менять толщину. Про DRAW_ARROW, я думал, но там проблема в том, что можно ставить только значки, а я хотел, чтобы линяя МА меняла цвет, а в дальнейшем и толщину 

 
Начал разбираться с MT5, написал простой код (ниже). 
Почему график рисуется для баров в левой части графика, а не для баров от 0 до 199  (т.е. в правой части)?

#property copyright "Your Name"
#property link      ""
#property version   "1.00"
#property strict

#property indicator_separate_window

#property indicator_buffers 2
#property indicator_plots   2

#property indicator_type1   DRAW_LINE
#property indicator_label1  "ExtMapBuffer1"
#property indicator_color1  clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3

#property indicator_type2   DRAW_LINE
#property indicator_label2  "ExtMapBuffer2"
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3

double    ExtMapBuffer1[];
double    ExtMapBuffer2[];

//#define EMPTY_VALUE   DoubleToString(0, 8)




int OnInit() {
   EventSetTimer(1);             // Устанавливаем таймер на 1 секунду
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexBuffer(1, ExtMapBuffer2);

   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {
   EventKillTimer();                // Остановка таймера при удалении индикатора
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
   return(rates_total);
}

void OnTimer() {
   for(int i=0; i<200; i++) {
           ExtMapBuffer1[i] = iOpen( _Symbol, PERIOD_CURRENT, i);
           ExtMapBuffer2[i] = iClose(_Symbol, PERIOD_CURRENT, i);
   }
}
 
grezky #:
Начал разбираться с MT5, написал простой код (ниже). 
Почему график рисуется для баров в левой части графика, а не для баров от 0 до 199  (т.е. в правой части)?

Вы забыли ArraySetAsSeries() указать. Он как раз и отвечает за отрисовку баров в правой части графика. Указывать необходимо в функцию OnInit()

 
Sergei Gurov #:

Вы забыли ArraySetAsSeries() указать. Он как раз и отвечает за отрисовку баров в правой части графика. Указывать необходимо в функцию OnInit()

Спасибо!

 
Вопрос по МТ5 - у меня для пары EURUSD каким-то образом с сервера загрузилась история с 1971 года, битая конечно. 
Как удалить все до 2000 года?

ПС В МТ4 кнопкой F2 можно вызвать окно и в нем удалить лишнее, но в МТ5 похоже такого нет?