Советник - в скрипт

 

Добрый день!

Возникла необходимость переделать советник в скрипт.

Советник отображает на графике одного инструмента (напр. FDAXZ5, last) цены аск-бид  другого инструмента (напр., тикера FDAX#I) ! Иных задач у него нет.

Вот код:

#property copyright "L-553"
#property link      "l-------ru"
//---Внешние параметры советника---
extern string  tiker_ = "#I";
extern color  Сolor_AskTiker   = Lime;//цвет линии 
extern color  Сolor_BidTiker   = Aqua;//цвет линии 
extern int    WIDTH            = 1; //толщина линий
string    Tiker;//заявляем наименование инструмента
double Ask_Tiker, Bid_Tiker;
//-------------------------------------------
int init()//создаем горизонт. линии на графике
{ObjectCreate("lowline",OBJ_HLINE,0,0,0,0,0);
 ObjectCreate("highline",OBJ_HLINE,0,0,0,0,0); 
 ObjectSet("lowline", OBJPROP_BACK,1); 
 ObjectSet("highline", OBJPROP_BACK,1);  }
//-------------------------------------------
int deinit()
{ObjectDelete("lowline"); ObjectDelete("highline");}
//-------------------------------------------------
int start() {
Tiker  = Symbol()+tiker_ ;//наименование
 while(!IsStopped()) {//зацикливаем код советника
 RefreshRates();
//Задаем цены аск и бид тикера
Ask_Tiker = MarketInfo(Tiker,MODE_ASK);
Bid_Tiker = MarketInfo(Tiker,MODE_BID);
Comment (//отображаем тикер и все цены на графике
" Тикер = ", Tiker ,"\n",
"Ask_Tiker = ",Ask_Tiker,"\n",
"Last_Price= ",Ask,"\n",
"Bid_Tiker = ",Bid_Tiker);
//устанавливаем горизонтальные линии на ценах аск и бид
SetHLine(Сolor_AskTiker,"highline",Ask_Tiker,0 ,WIDTH); 
SetHLine(Сolor_BidTiker,"lowline" ,Bid_Tiker,0 ,WIDTH);

      Sleep(1000);  }//конец цикла
}//Конец функции СТАРТ

//+---------------------------------------------------------------------+
//|   Функция  : Установка объекта OBJ_HLINE - горизонтальная линия     |
//|   Автор функции  : Ким Игорь В. aka KimIV,  http://www.kimiv.ru/    |
//+---------------------------------------------------------------------+
//|  Параметры:                                                         |
//|    cl - цвет линии                                                  |
//|    nm - наименование            ("" - время открытия текущего бара) |
//|    p1 - ценовой уровень         (0  - Bid)                          |
//|    st - стиль линии             (0  - простая линия)                |
//|    wd - ширина линии            (0  - по умолчанию)                 |
//+---------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_PRICE1, p1);ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_STYLE , st);ObjectSet(nm, OBJPROP_WIDTH , wd); }

 Пож. подскажите, где (в каких строках) и как нужно исправить код, чтобы превратить советник в скрипт?

Благодарю. 

 

Всё что в инит в начало старт перенести.

Всё что в деинит перенести в конец старта.

Инит и деинит удалить.

В самом начале кода прописать

#proprty show_inputs 

 

Благодарю, eevviill

Сделал всё, как вы сказали! Комментарий работает. Но при этом перестали отображаться линии аск-бид другого инструмента! Которые я перенес из ИНИТА в СТАРТ:

#property copyright "L-553"
#property link      "l-----ya.ru"
#property show_inputs 
//---Внешние параметры советника---
extern string  tiker_ = "#I";
extern color  Сolor_AskTiker   = Lime;//цвет линии 
extern color  Сolor_BidTiker   = Aqua;//цвет линии 
extern int    WIDTH            = 1; //толщина линий
string    Tiker;//заявляем наименование инструмента
double Ask_Tiker, Bid_Tiker;
//-------------------------------------------

//-------------------------------------------

//-------------------------------------------------
int start() {
//создаем горизонт. линии на графике
{ObjectCreate("lowline",OBJ_HLINE,0,0,0,0,0);
 ObjectCreate("highline",OBJ_HLINE,0,0,0,0,0); 
 ObjectSet("lowline", OBJPROP_BACK,1); 
 ObjectSet("highline", OBJPROP_BACK,1);  }


Tiker  = Symbol()+tiker_ ;//наименование
 while(!IsStopped()) {//зацикливаем код советника
 RefreshRates();
//Задаем цены аск и бид тикера
Ask_Tiker = MarketInfo(Tiker,MODE_ASK);
Bid_Tiker = MarketInfo(Tiker,MODE_BID);
Comment (//отображаем тикер и все цены на графике
" Тикер = ", Tiker ,"\n",
"Ask_Tiker = ",Ask_Tiker,"\n",
"Last_Price= ",Ask,"\n",
"Bid_Tiker = ",Bid_Tiker);
//устанавливаем горизонтальные линии на ценах аск и бид
SetHLine(Сolor_AskTiker,"highline",Ask_Tiker,0 ,WIDTH); 
SetHLine(Сolor_BidTiker,"lowline" ,Bid_Tiker,0 ,WIDTH);
{ObjectDelete("lowline"); ObjectDelete("highline");}
      Sleep(500);  }//конец цикла
}//Конец функции СТАРТ

//+---------------------------------------------------------------------+
//|   Функция  : Установка объекта OBJ_HLINE - горизонтальная линия     |
//|   Автор функции  : Ким Игорь В. aka KimIV,  http://www.kimiv.ru/    |
//+---------------------------------------------------------------------+
//|  Параметры:                                                         |
//|    cl - цвет линии                                                  |
//|    nm - наименование            ("" - время открытия текущего бара) |
//|    p1 - ценовой уровень         (0  - Bid)                          |
//|    st - стиль линии             (0  - простая линия)                |
//|    wd - ширина линии            (0  - по умолчанию)                 |
//+---------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_PRICE1, p1);ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_STYLE , st);ObjectSet(nm, OBJPROP_WIDTH , wd); }

 Может быть, ещё надо что-нибудь исправить?

 

Нет просто надо нормально переносить

   Sleep(500);  }//конец цикла
{ObjectDelete("lowline"); ObjectDelete("highline");}
}//Конец функции СТАРТ
 
Rolli:

Благодарю, eevviill

Сделал всё, как вы сказали! Комментарий работает. Но при этом перестали отображаться линии аск-бид другого инструмента! Которые я перенес из ИНИТА в СТАРТ:

 Может быть, ещё надо что-нибудь исправить?

Лучше бы Вы индикатор сделали. Скрипт отработал свое и все. А индикатор будет все время работать
 
Vinin:
Лучше бы Вы индикатор сделали. Скрипт отработал свое и все. А индикатор будет все время работать
while(!IsStopped()) {//зацикливаем код советника
 

Благодарю, получилось всё норм!

Индикатор мне на графике постоянно  не нужен.

А работа скрипта нужна только в момент открытия/закрытия фьючерасных позиций! (Чтобы визуально видеть цены аск-ласт-бид).

 
Здравствуйте
Пытаюсь написать советник вроде как всё получилось а вот добавить в маркет не могу пишет что это скрипт в чем причина?

 
Yaroslav Varankin:
Здравствуйте
Пытаюсь написать советник вроде как всё получилось а вот добавить в маркет не могу пишет что это скрипт в чем причина?

https://www.mql5.com/ru/docs/runtime/running

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Каждый скрипт, сервис и эксперт работает в собственном отдельном потоке. Все индикаторы, рассчитываемые на одном символе, даже если они запущены на разных графиках, работают в одном потоке. Таким образом, все индикаторы на одном символе делят между собой ресурсы одного потока. В одном потоке с индикаторами также последовательно выполняются...
Причина обращения: