Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как социальный трейдинг увеличит твой доход
Rolli
38
Rolli 2015.12.01 06:53 

Добрый день!

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

Советник отображает на графике одного инструмента (напр. 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); }

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

Благодарю. 

Vasyl Nosal
18212
Vasyl Nosal 2015.12.01 08:12  

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

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

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

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

#proprty show_inputs 

Rolli
38
Rolli 2015.12.01 08:55  

Благодарю, 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); }

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

Vasyl Nosal
18212
Vasyl Nosal 2015.12.01 13:24  

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

   Sleep(500);  }//конец цикла
{ObjectDelete("lowline"); ObjectDelete("highline");}
}//Конец функции СТАРТ
Victor Nikolaev
Модератор
14056
Victor Nikolaev 2015.12.01 13:51  
Rolli:

Благодарю, eevviill

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

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

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

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

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

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

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий