[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 651

 
xtonic:

Вечерние загадки от меты:

В архиве котировок импортировал котировки, написано в 1 минута: База данных: 0 / 3665972, окно пустое - что это может значить ?

Когда открываю автономно график EURUSD,M1 - показывает большие буквы: "Ожидание Обновления" - что это может значить ?

Запускаю тест - TestGenerator: no history data 'EURUSD1'

Перегрузите терминал. Если все было сделано правильно, то должна появится.

 

где почитать как рисует индикатор у которого в параметрах

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2) 

никак не пойму почему иногда он рисует иногда нет, прекрасно понимаю когда рисуешь обычную линию DRAW_LINE - значение буфера индикатора будет задавать ось y,а номер элемента соответствует номеру бара на графике

что за параметры в буфере индикатора когда тип DRAW_HISTOGRAM ??? почему когда два буфера индикатора оказываются на одном баре появляется горизонтальный отрезок на баре, а когда один из буферов индикатора равен EMPTY_VALUE вообще ничего,да и логику раскрашивания тож не пойму 

 
ToLik_SRGV:

Перегрузите терминал. Если все было сделано правильно, то должна появится.


Так уже все это делал, даже систему перегружал, в том-то и дело.

 
xtonic:


Так уже все это делал, даже систему перегружал, в том-то и дело.


Импортировали котировки откуда??

Вы бы не поленились да объяснили, что конкретно вы делали, пошагово - тогда вам бы здесь скорее помогли.

 

Люди добрые, сжальтесь - не могу добиться: покупка/продажа после очередного пика сглаженного CCI.

Попробовал объявить второй буфер (мне так понятней), ошибок - нет, журнал - молчит, принт, видимо, как козе баян прилаживаю - ничего не понял.

 // Торговые критерии
   double c1b[];
   ArrayResize(c1b,PeriodB);
   double c1b_1[];
   ArrayResize(c1b_1,AvgB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   {
   c1b_1[i]=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   }
   }
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   double c1s_1[];
   ArrayResize(c1s_1,AvgS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   {
   c1s_1[i]=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   }
   }

if (NormalizeDouble(c1b_1[i],4)<NormalizeDouble(c1b_1[i+2],4)&&NormalizeDouble(c1b_1[i+2],4)>NormalizeDouble(c1b_1[i+3],4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1[i],4)>NormalizeDouble(c1s_1[i+2],4)&&NormalizeDouble(c1s_1[i+2],4)<NormalizeDouble(c1s_1[i+3],4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Во вложении советник целиком. После тестирования на визуализации CCI рисует и в этом и в старом варианте (во вложенном файле заремлен), а сглаженную - нет и соответственно сделки не открываются. 

Старый вариант:

// Торговые критерии
   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

 Понимаю, время ни у кого нет проблемы других разгребать, подскажите хоть куда конкретно Print вставлять и где смотреть отзыв в журнале или логах и на что необходимо внимание обращать.

Файлы:
21.mq4  15 kb
 

Добрый день! 

вопрос про частичное закрытие, дело в том что у каждого ДЦ свои правила. Что-то непойму как правельнее зделать учет ордеров:

Задача: Необходимо найти тик вновь появившегося ордера именно по этой ТС не используя магик. 

 1) я заметил что у частично закрытого ордера есть свое образные коменнты, поидее можно читайть комент // не уверен что все ДЦ пишут коммент

 2) искать по дате открытия ордера   // не уверен что будет на все ДЦ работать

3) искать новый тик сразу после исполнения частичного закрытия и проверив  обьем и т.д., что мол это тот ордер который и должен быть 

 4) что-то другое

 
wenay:

как правельнее зделать учет ордеров:

читаем хелп там:
comment - Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.

magic - Магическое число ордера. Может использоваться как определяемый пользователем идентификатор.

 magic Вам в помощь

свой искать ордер так:

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { 

....... 

 
Craft:

 подскажите хоть куда конкретно Print вставлять и где смотреть отзыв в журнале или логах и на что необходимо внимание обращать.

поставьте Print там где Вы хотите отловить ситуацию (к примеру выставление ордера - значит выведите себе в журнал факт выставления или ошибку выставления ордера )

если Вы сомневаетесь в возможности вызова своей функции, т.е ну условие вызова функции никогда не выполнится поставьте Print сразу на входе в функцию

Print читать в  терминале в закладке "эксперты"

 

 
IgorM:

где почитать как рисует индикатор у которого в параметрах

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2) 

никак не пойму почему иногда он рисует иногда нет, прекрасно понимаю когда рисуешь обычную линию DRAW_LINE - значение буфера индикатора будет задавать ось y,а номер элемента соответствует номеру бара на графике

что за параметры в буфере индикатора когда тип DRAW_HISTOGRAM ??? почему когда два буфера индикатора оказываются на одном баре появляется горизонтальный отрезок на баре, а когда один из буферов индикатора равен EMPTY_VALUE вообще ничего,да и логику раскрашивания тож не пойму 

Стиль DRAW_HISTOGRAM ничем принципиально не отличается от других стилей рисования линий, по оси Х номера баров, по оси Y значения индикаторного массива, но как говорится, есть нюанс.
Для примера возьмем простой индикатор:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2
double SIMPLE[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = 1;
   }
}
//+------------------------------------------------------------------+

Один индикаторный массив, отдельное окно, всем элементам присваивается значение 1. Бросаем его на график, и что мы видим (Рис. 1 слева):

 

В «Окне данных» отображаются показания индикатора, но в его окне ничего нет. Это и есть тот самый нюанс, МТ4 просто не знает 1 это сколько? Как высоко надо рисовать столбик? Ему не отчего оттолкнуться, то есть проще говоря нет цены деления для столбиков. Как вы заметили отдельного параметра задающего высоту столбиков нет, их высота задается автоматически, относительно других элементов. Поможем МТ4, и зададим цену деления, можно программно:

#property indicator_minimum 0
#property indicator_maximum 2

Можно просто в настройках индикатора закрепить минимумы (допустим 0) и максимумы (например 2).
И все тут же встает на свои места (Рис. 2 справа), теперь терминал знает какой высоты столбец нужно нарисовать, 1 это по середине между 0 и 2 :))) Теперь вспомним MACD, вроде там жестко цену деления не задаем, а столбики рисуются как надо, все потому что они рисуются относительно друг друга, в этом примере весь индикаторный массив имеет одно значение (специально для показа «нюанса»), поэтому нужно самим показывать терминалу, сколько это много или мало. Стоит нам заменить данные массивов с 1, например на Close[shift], то жесткое ограничение можно не ставить терминал сам определится и нарисует нам картинку «аля МАКД».

Немного другая картинка, если рисовать гистограмму не в отдельном окне, а в общем. Оставим для первого индикаторного массива значение Close[shift], просто поменяем параметр:

#property indicator_chart_window

И опят таже картина (Рис. 3 слева). Значения есть, отображения нет.

  

Терминалу для того чтобы автоматически рассчитывать высоту столбиков нужно от чего-то отталкиваться, а так как в общем окне закрепить минимумы и максимумы нельзя, то тут та и выходит на сцену второй индикаторный массив. Добавляем вторую линию и задаем ей значение 0.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Red
#property indicator_width2 2
double SIMPLE[];
double SIMPLE2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, SIMPLE2);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = Close[shift];
      SIMPLE2[shift] = 0;
   }
}
//+------------------------------------------------------------------+

Индикаторные массивы начинают отображаться относительно друг друга. И все становится как надо (Рис 4 справа). Столбцы рисуются от SIMPLE[shift] до SIMPLE2[shift].

Ну и на последок код индикатора закрашивающего свечи, если вверх то голубая, если вниз то розовая. И опять же по два массива на каждый цвет (зарисовка происходит от home к end (от Open к Close)). 

//+------------------------------------------------------------------+
//|                                                       SIMPLE.mq4 |
//|                        Copyright © 2010,Анатолий Сергеев  |
//|                                            mql.sergeev@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_width1 2
#property indicator_color2 Blue
#property indicator_width2 2
#property indicator_color3 Pink
#property indicator_width3 2
#property indicator_color4 Pink
#property indicator_width4 2
double Blue_home[];
double Blue_end[];
double Pink_home[];
double Pink_end[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, Blue_home);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, Blue_end);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2, Pink_home);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3, Pink_end);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      if(Close[shift] > Open[shift]){
         Blue_home[shift] = Open[shift];
         Blue_end[shift] = Close[shift];
      }else{
         Pink_home[shift] = Open[shift];
         Pink_end[shift] = Close[shift];
      }
   }
}
//+------------------------------------------------------------------+

 

 
IgorM:
читаем хелп там:
comment - Текст комментария ордера. Последняя часть комментария может быть изменена торговым сервером.

magic - Магическое число ордера. Может использоваться как определяемый пользователем идентификатор.

 magic Вам в помощь

свой искать ордер так:

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { 

....... 



Задача: Необходимо найти тик вновь появившегося ордера именно по этой ТС не используя магик. 
Причина обращения: