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

 
Roll:

БОЛЬШУЩЕЕ СПАСИБО!

В Вашем варианте индикатор работает!

При этом появились три небольшие проблемки.Я их пытался решить при помощи учебника MQL4,пересмотрел примеры индикаторов,но так ничего у меня не вышло.

Если есть желание,время и настроение,то помогите мне разобраться ПОЧЕМУ:

1. При установке индикатора линия получает значение 0 (ноль) и только с приходом первого тика принимает значение переменной top,или же надо открыть окно параметров индикатора и сразу закрыть его;

2. Параметр top вычисляется до 4-ого знака,хотя в init() есть строка

IndicatorDigits(Digits+1);

и строку

top=WindowPriceMax(win_idx);

я заменил на

top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);

Не помогает! А числовые значения шкалы окна индикатора 5-значные.

3. С удалением индикатора Comment не удаляется с графика.



Код

--------

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],
ExtMapBuffer2[];
//--------------------------------
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min_v2");

IndicatorDigits(Digits+1);

return(0);
}
//--------------------------------
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),limit,win_idx;
double top;

if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
win_idx=WindowFind("MACD_max-min_v2");

for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
}

// top=WindowPriceMax(win_idx);
top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);
Comment( "\n"," top = ",top);
ObjectDelete("max");

if(ObjectFind("max")!=win_idx)
{
ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
}

return(0);
}
//+------------------------------------------------------------------+


Файлы:
 
MK07:

Техническая правка - пользуйтесь кнопкой SRC на верхней панели для вставки кода, как делают ваши советчики. Будет значительно удобнее читать.

P.S.
для очистки строки Comment вставьте в deinit() Comment("");
 
granit77:
Техническая правка - пользуйтесь кнопкой SRC на верхней панели для вставки кода, как делают ваши советчики. Будет значительно удобнее читать.

P.S.
для очистки строки Comment вставьте в deinit() Comment("");
Благодарю за информацию.Я на форумах впервые.Отдельное СПАСИБО за фрагмент кода.
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){Comment("");return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
  ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}
  Comment( "\n"," top = ",DoubleToStr(top,5));return(0);}
//+------------------------------------------------------------------+
 
https://docs.mql4.com/ru/common/Comment
void Comment( ...)
Функция выводит комментарий, определенный пользователем, в левый верхний угол графика. Параметры могут иметь любой тип. Количество параметров не может превышать 64.
Массивы нельзя передавать в функцию Comment(). Массивы должны печататься поэлементно.
Данные типа double выводятся с 4 десятичными цифрами после точки. Для вывода чисел с большей точностью необходимо использовать функцию DoubleToStr().
Типы bool, datetime и color будут напечатаны как числа.
Чтобы вывести данные типа datetime в виде строки используйте функцию TimeToStr().

Для разделения выводимой информации на несколько строк можно использовать символ перевода строки "\n" либо "\r\n".
См. также функции Alert() и Print().
 
Подскажите, как в формуле написать:
Цена пересекла горизонтальную линию вверх....
И как эта линия должна быть описана?
 
Roll:
Благодарен Вам за науку.
 

Здравствуйте,

Вот какой проблем у меня.

Работа на PERIOD_H1.

Для закрiтия в конца часа делаю так:

   for(j = OrdersTotal()-1; j >= 0; j--){ 
       if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
          if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){
            OpenTime= OrderOpenTime();          
          if(OrderType() == OP_BUY){
            if(TimeCurrent()>Time[0]+3580){ 
             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),0,Red);}
             }
           else 
          if(OrderType() == OP_SELL){
            if(TimeCurrent()>Time[0]+3580){
             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),0,Blue);}
             }
           }
         }
Для открития позиции в начале часа делаю так
   if(TimeCurrent()<Time[0]+3500 && HaveBuy==false && HaveSell==false)
     if(Ask <= EnBuy && IsFreeLevel==true){
          ticket = OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),0,0,forecast-5*MyPoint,"",MagicNumber,0,Blue);
         }
     if(Bid >= EnSel && IsFreeLevel==true){
          ticket = OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),0,0,forecast+5*MyPoint,"",MagicNumber,0,Red);
         }

Но на тест получается так

Не могу понят-где ошибаюсь?

Не всегада так получается,но имеет такие моменти.

Спосибо,кто отзавется :)

 
alsu:
Я не про это, а про то, что какая разница где навешен эксперт? Если он правильно написан, то ему все равно, где он висит: повесьте его хоть на график монгольской биржи, но если внутри задано работать по евродоллар 1 минута, то он так и будет делать. И это совсем не сложно напрограммировать, буквально пару строк поменять как правило.

Большое спасибо за разъяснение!

Только меня волнует, чтобы на тестере моделировались одноминутки для модификаций на открытии каждого минутного бара.

Попробую поменять Open[0] на iOpen(NULL,1,0) и прибавить функцию проверки открытия одноминутного бара.

Прошло несколько минут, в течение которых подправил код, попробовал на тестере в М5 и убедился, что в этом случае тестер не открывает 1минутные бары, хотя прописаны, и модифицирует только каждые 5 минут, чего я и опасался. В режиме на всех тиках немного получше, поскольку модифицировал чаще. Но на М1 только на открытии бара работает одинаково, как с Open[0], так и с iOpen(NULL,1,0), за что всё равно вам благодарен!

Теперь буду всегда пользоваться зелёным iOpen, т.к. вижу, что можно обойтись и без красного Open. Зелёный цвет профита приятнее красного лосса. (:))

 
mario065:

Здравствуйте,

Вот какой проблем у меня.

Работа на PERIOD_H1.

Для закрiтия в конца часа делаю так:

Для открития позиции в начале часа делаю так
Но на тест получается так

Не могу понят-где ошибаюсь?

Не всегада так получается,но имеет такие моменти.

Спосибо,кто отзавется :)


Друг подсказал:
Наместо TimeCurrent()

TimeSeconds(TimeCurrent())

И сработало.

Причина обращения: