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

 

но в советнике есть еще один код:

int CloseMarket()
   {
    for (int j=0; j<OrdersTotal(); j++)
      {
       OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()<2)
         {
          CloseOrder(OrderTicket(),OrderLots());
          j--;
         }
      }
   } 
 
alex12:

но в советнике есть еще один код:

поставьте например Print("закрытие по CloseMarket ", j); в этой функции и что-то аналогичное в предыдущей выложенной Вами . запускайте и просматривайте логи на предмет появления результатов этих принтов для анализа который из них срабатывает. потом аналогично выведете в лог значения переменных, проверяемых в условиях выполнения закрытия и обнаружите причины их срабатывания...

 
alsu:
А что вам вообще мешает повесить советник именно на то окно, где надо рисовать?


Мой советник лучше работает на М1, поскольку на М1 тралит лучше, а открывает 1 сделку на открытии бара на М5, также доливает, если позволяют условия. И индикаторы использую на М5 и других ТФ. И тестить лучше на М1 на открытии бара, а на других ТФ со всеми тиками тестит плохо.

Я не рисую, а только вижу результаты вычислений, произведённые советником и выведенные в сомментах, чтобы быть уверенным, что всё в порядке. Спасибо вам за внимание и помощь!

 
borilunad:


Мой советник лучше работает на М1, поскольку на М1 тралит лучше, а открывает 1 сделку на открытии бара на М5, также доливает, если позволяют условия. И индикаторы использую на М5 и других ТФ. И тестить лучше на М1 на открытии бара, а на других ТФ со всеми тиками тестит плохо.

Я не рисую, а только вижу результаты вычислений, произведённые советником и выведенные в сомментах, чтобы быть уверенным, что всё в порядке. Спасибо вам за внимание и помощь!

и на М1, и на М5 тики берутся из одного и того же источника, и работать можно по любому таймфрейму с любого графика, достаточно просто заменить Close[] на iClose и т.п. Чтоб лучше тестил, надо самому fxt-файлы покачественнее делать из тиков, пример здесь, а вообще в гугл, инфы на этот счет есть.
 
alsu:
и на М1, и на М5 тики берутся из одного и того же источника, и работать можно по любому таймфрейму с любого графика, достаточно просто заменить Close[] на iClose и т.п. Чтоб лучше тестил, надо самому fxt-файлы покачественнее делать из тиков, пример здесь, а вообще в гугл, инфы на этот счет есть.

Практика показала, что лучше открывать на Ореn и тестить тоже лучше, чем на тиках. И тиками вообще не увлекаюсь. Когда позволит депо, могу перейти на более старшие ТФ, которые покажут лучше в пределах дня. Сделки на ночь не оставляю, чтобы спать спокойно. Ещё раз спасибо!
 
smshev:

поставьте например Print("закрытие по CloseMarket ", j); в этой функции и что-то аналогичное в предыдущей выложенной Вами . запускайте и просматривайте логи на предмет появления результатов этих принтов для анализа который из них срабатывает. потом аналогично выведете в лог значения переменных, проверяемых в условиях выполнения закрытия и обнаружите причины их срабатывания...

Спасибо.
 
borilunad:

Практика показала, что лучше открывать на Ореn и тестить тоже лучше, чем на тиках. И тиками вообще не увлекаюсь. Когда позволит депо, могу перейти на более старшие ТФ, которые покажут лучше в пределах дня. Сделки на ночь не оставляю, чтобы спать спокойно. Ещё раз спасибо!
Я не про это, а про то, что какая разница где навешен эксперт? Если он правильно написан, то ему все равно, где он висит: повесьте его хоть на график монгольской биржи, но если внутри задано работать по евродоллар 1 минута, то он так и будет делать. И это совсем не сложно напрограммировать, буквально пару строк поменять как правило.
 

Уважаемые господа программисты! Не могу нарисовать горизонтальную линию по максимальному числовому значению окна индикатора MACD.Мне здесь уже дали дельные советы,но я не могу их реализовать,хотя делаю всё по учебнику MQL4.

Код


#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Red
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double topBuffer[];


bool initFinished=false; // добавляем переменную, которая будет запоминать состояние инициализации.
// false - инициализации еще не было
// true - была
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limit;

if(counted_bars>0)
counted_bars--;

limit=Bars-counted_bars;
//----
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);

if(initFinished==false)
{
IndicatorShortName("MACD_max-min");

int win_idx=WindowFind("MACD_max-min");
// находим номер подокна нашего индикатора

if(win_idx<0)
{
// если номер подокна равен -1, то возникла ошибка
Print("Окно не найдено");
return(0);
}

double top=WindowPriceMax(win_idx);
//находим максимальное значение вертикальной шкалы указанного подокна текущего графика


ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// рисуем горизонтальную линию в подокне нашего индикатора

ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);

WindowRedraw();
// перерисовываем окно, чтобы увидить линиию

initFinished=true;
// рисование закончено

}

topBuffer[i]=top;


}

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

//+------------------------------------------------------------------+


Похоже,что в строке

double top=WindowPriceMax(win_idx);

переменная top не получает никакого значения и в строке

ObjectCreate("max",OBJ_HLINE,win_idx,0,top);

вместо неё (т.е. вместо переменной top) автоматически выставляется 0(ноль).И я получаю в нужном окне и нужного цвета,но нулевую линию.Также пуст и topBuffer[]. Если же в этой строке вместо переменной top поставить числовое значение,то линия принимает это фиксированное значение.Где-то у меня клиническая ошибка.Помогите разобраться!Зарание БЛАГОДАРЮ.

Файлы:
 
IndicatorShortName лучше бы перенести в init()
 
alsu:
IndicatorShortName лучше бы перенести в init()
В Вашем варианте при открытии индикатора объект не появляется.Дополнительно необходимо открыть окно со свойствами индикатора,закрыть его и тогда объект станет видимым.В моём варианте объект появляется сразу при вызове индикатора.Эту конструкцию я взял из учебного примера,где рассказывалось о работе с объектами.Но оба эти варианта не решают мою проблему!Господа профессионалы,может eщё кто-нибудь посмотрит?
Причина обращения: