Скачать MetaTrader 5

Несколько переменных или массив в одной строке окна inputs - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Yurij Kozhevnikov
5174
Yurij Kozhevnikov  
Вообще я бы добавил строковую переменную, в которую формировал имя, а в функции уже её добавлял.
Syzal
42
Syzal  

Проще, наверно, код всей программы дать?

//+------------------------------------------------------------------+
//|                                                Расчет лота 3.mq4 |
//|                                                            Syzal |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Syzal"
#property version   "2.00"
#property strict
#property script_show_inputs
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Color
#property indicator_label1  "Color"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
extern int MaxRisk=2;            //Размер риска в процентах
extern int Razmer_SL_1=5;        //Размер SL первой строки в пунктах
extern int Kol_SL=6;             //Количество строк SL
extern int Shag_SL=5;            //Шаг SL для последующих строк
extern int Corner = 3;           //Угол: 1-Пр.верх, 2-Лев.низ ,3-Пр.низ, 4-Лев.верх
extern int Coordinata_Y = 5;     //Отступ от горизонтального края
extern int Coordinata_X= 5;      //Отступ от вертикального края
extern color Color = Blue;       //Цвет текста
extern bool Flag_Proc=True;      //Показывать размер риска в процентах
extern bool Flag_Сurrency=True;  //Показывать размер риска в валюте депозита
extern bool Flag_Spread=True;    //Показывать размер текущего спреда
//--- indicator buffers
double         ColorBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ColorBuffer);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

string Text_0, Text_1;
for(int i=0, j=Coordinata_Y; i <= Kol_SL; i++, j=j+15)
{

   if(ObjectFind("Obj_Name_"+(string)i==-1))                                 // Если объекта нет..
   {
      ObjectCreate("Obj_Name_"+(string)i,OBJ_LABEL,0,0,0);
      ObjectSet    ("Obj_Name_"+(string)i,OBJPROP_CORNER, Corner);              // Угол привязки            
      ObjectSet    ("Obj_Name_"+(string)i,OBJPROP_XDISTANCE, Coordinata_X);     // Координата Х
      ObjectSet    ("Obj_Name_"+(string)i,OBJPROP_YDISTANCE,Coordinata_Y+15);  // Координата Y
   }
}

if(!IsConnected())  //Если нет подлючения
{
   Text_1 = "Расчет лота - Нет подлючения!";
   Comment("Расчет лота: Нет подключения!");
}

if (IsConnected())   //Если есть подключение
{

/*int sl_1, sl_2, sl_3, sl_4, sl_5, sl_6;
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Free =AccountBalance();
double Posle_zap = MarketInfo("EURUSD",MODE_DIGITS);
double cena_tika = MarketInfo(Symbol(),MODE_TICKVALUE);
double Spread = MarketInfo(Symbol(),MODE_SPREAD);
string Razmer_Riska = DoubleToStr((Free/100*MaxRisk), 0);
string valuta = AccountInfoString(ACCOUNT_CURRENCY);*/
Text_0 = "Есть подключение";
Text_1 = "Есть 2";
   Comment ("TEST");
}
for(int i=0; i <= Kol_SL; i++)
{
   ObjectSetText("Obj_Name_"+IntegerToString(i), "Text_"+IntegerToString(i), 8, "MS Sans Serif", Color);// Текстовое описание объект
}
//Comment(Obj_Name_1);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
int deinit()      //Подчищаем за собой
{for(int i=ObjectsTotal() -1;i>=0;i--)
{string name=ObjectName(i);
if(StringFind(name,"Razmer_Lota")==0) ObjectDelete(name);}
return(0);}

 Это заготовка для новой версии старого индикатора со всем бредом ();

Syzal
42
Syzal  
Y.A.K._:
Вообще я бы добавил строковую переменную, в которую формировал имя, а в функции уже её добавлял.

Примерно такая идеи посещают...  как реализовать - =) (не бейте чайника)

Syzal
42
Syzal  

Y.A.K, Я не хочу чтобы Вы за меня его написали, хочу понять как писать =) 

Yurij Kozhevnikov
5174
Yurij Kozhevnikov  

Скобка всё ещё не там.

Я бы вместо

for(int i=0, j=Coordinata_Y; i <= Kol_SL; i++, j=j+15)
{

   if(ObjectFind("Obj_Name_"+(string)i==-1))                                 // Если объекта нет..
   {
      ObjectCreate("Obj_Name_"+(string)i,OBJ_LABEL,0,0,0);
      ObjectSet    ("Obj_Name_"+(string)i,OBJPROP_CORNER, Corner);              // Угол привязки            
      ObjectSet    ("Obj_Name_"+(string)i,OBJPROP_XDISTANCE, Coordinata_X);     // Координата Х
      ObjectSet    ("Obj_Name_"+(string)i,OBJPROP_YDISTANCE,Coordinata_Y+15);  // Координата Y
   }
}

написал примерно так:

for(int i=0, j=Coordinata_Y; i <= Kol_SL; i++, j=j+15)
{
   string ObName=StringConcatenate("Obj_Name_",i);
   if(ObjectFind(ObName)==-1)                                 // Если объекта нет..
   {
      ObjectCreate(ObName,OBJ_LABEL,0,0,0);
      ObjectSet    (ObName,OBJPROP_CORNER, Corner);              // Угол привязки            
      ObjectSet    (ObName,OBJPROP_XDISTANCE, Coordinata_X);     // Координата Х
      ObjectSet    (ObName,OBJPROP_YDISTANCE,Coordinata_Y+15);  // Координата Y
   }
}
Весь код не смотрел.
Syzal
42
Syzal  
Y.A.K._:

Скобка всё ещё не там.

Я бы вместо

написал примерно так:

Весь код не смотрел.

Спасибо, весь код не смысла смотреть - там бред.

Спасибо, буду копать. 

Syzal
42
Syzal  
Буду разбираться, столько нового... на неделю хватит =)
Syzal
42
Syzal  

YAK, у меня вопрос по string ObName=StringConcatenate("Obj_Name_",i

Т.е. мы можем объявлять любую перменную в теле цикла, она умирает в конце цикла? 

Yurij Kozhevnikov
5174
Yurij Kozhevnikov  

При наличии

#property strict

переменная живёт в пределах фигурных скобок, внутри которых она объявлена (для i, объявленной в операторе цикла, - в пределах этого цикла).

Syzal
42
Syzal  
Спасибо, все получилось!
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий