[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 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 минута, то он так и будет делать. И это совсем не сложно напрограммировать, буквально пару строк поменять как правило.
[Deleted]  

Уважаемые господа программисты! Не могу нарисовать горизонтальную линию по максимальному числовому значению окна индикатора 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()
[Deleted]  
alsu:
IndicatorShortName лучше бы перенести в init()
В Вашем варианте при открытии индикатора объект не появляется.Дополнительно необходимо открыть окно со свойствами индикатора,закрыть его и тогда объект станет видимым.В моём варианте объект появляется сразу при вызове индикатора.Эту конструкцию я взял из учебного примера,где рассказывалось о работе с объектами.Но оба эти варианта не решают мою проблему!Господа профессионалы,может eщё кто-нибудь посмотрит?