Вопрос по Objectget и Objectgetvaluebyshift

 

Здравствуйте, может ли кто-нибудь помочь с этим. У меня есть ea, которая получает значение цены от горизонтальной линии или линии тренда. Однако у меня есть следующий код, но он не получает ни одно из значений. Если я уберу Objectgetvaluebyshift, то он будет получать цену горизонтальной линии и наоборот. Но мне нужно, чтобы он распознавал обе линии и получал значение от той линии, которая у меня есть на графике (либо trand, либо h_line). Может кто-нибудь выложит немного кода, чтобы я мог понять, что делать.

спасибо.

tp =(ObjectGetValueByShift( TP_P, OBJPROP_PRICE1)) || (ObjectGet( TP_P, OBJPROP_PRICE1));

 

ObjectGetValueByShift( string name, int shift)

OBJPROP_PRICE1 не является "сдвигом"... Shift - это номер бара, на котором вы хотите взять значение - применимо к трендовой линии и подобным объектам

double tp = ObjectGetValueByShift( TP_P, 0); // предполагая, что TP_P - это строковая переменная, содержащая имя объекта, и вы хотите получить значение линии на текущем баре

 
phy:

ObjectGetValueByShift( string name, int shift)

OBJPROP_PRICE1 не является "сдвигом"... Shift - это номер бара, на котором вы хотите взять значение - применимо к трендовой линии и подобным объектам

double tp = ObjectGetValueByShift( TP_P, 0); // предполагая, что TP_P - это строковая переменная, содержащая имя объекта, и вы хотите получить значение линии на текущем баре


Я попробовал то, что вы объяснили. Не похоже, что это работает. Любая другая информация была бы очень кстати.
 

gavin:

I have tried what you have explianed. It doesnt seen to work. Any other info would be great.

Получает ли то, что вы объяснили, расхождение как с линией тренда, так и с h_линией, в зависимости от того, что я загрузил на график в данный момент?

 

Опубликуйте свой код, мы понятия не имеем, что вы сделали.

 

Вот что у меня было.

--------------------------------------------------------

строка TP_P;
if (OrderType()==OP_BUY) TP_P = BTP;
if (OrderType()==OP_SELL) TP_P = STP;

double tp;

tp =(ObjectGetValueByShift( TP_P, OBJPROP_PRICE1)) || (ObjectGet( TP_P, OBJPROP_PRICE1));

-----------------------------------------------------------------------------------------------------------------

Затем я вставил это вместо того, что вы сказали, да?

----------------------------------------------------------

tp = ObjectGetValueByShift( TP_P,0);

 

есть помощники???

 
if (ObjectType(TP_P) == OBJ_TREND) tp = ObjectGetValueByShift(TP_P, shift);
else                               tp = ObjectGEt(TP_P, OBJPROP_PRICE1)
 
WHRoeder:


Теперь все просто. Большое спасибо за помощь. Все получилось, как я и хотел. Будь здоров!
 

Здравствуйте,

У меня есть следующий код для получения цены от линии тренда. Он не работает. Помогите, пожалуйста.

int obj_total = ObjectsTotal();
строковое имя;
for(int j = 0; j<obj_total; j++)
{
name = ObjectName(j);
Print(j, "Объект - ", name);
}
if(ObjectType(name) == OBJ_TREND && name == "Trendline1-m30")
{
price1 = ObjectGetValueByShift(name, 0);
}

if(ObjectType(name) == OBJ_TREND && name == "Trendline2-m30")
{
price2 = ObjectGetValueByShift(name, 0);
}

 

Здравствуйте, пожалуйста, используйте кнопку SRC при размещении кода.

Весь код, выделенный желтым цветом, находится ВНЕ цикла 'for'.

Поэтому значение 'name' всегда является именем конечного объекта.

int obj_total = ObjectsTotal();
   string name;
   for(int j = 0; j<obj_total; j++)
   {
   name = ObjectName(j);
   Print(j, "Object - ", name);
   }
      if(ObjectType(name) == OBJ_TREND && name == "Trendline1-m30")
      {
       price1 = ObjectGetValueByShift(name, 0);
      }

      if(ObjectType(name) == OBJ_TREND && name == "Trendline2-m30")
      {
       price2 = ObjectGetValueByShift(name, 0);
      }


Возможно, попробуйте следующее (при условии, что price1 и price2 уже объявлены где-то еще):

   int obj_total = ObjectsTotal();
   string name;
   for(int j = 0; j<obj_total; j++)
     {
      name = ObjectName(j);
      Print(j, "Object - ", name);
      if(ObjectType(name) == OBJ_TREND && name == "Trendline1-m30")
        {
         price1 = ObjectGetValueByShift(name, 0);
        }

      if(ObjectType(name) == OBJ_TREND && name == "Trendline2-m30")
        {
         price2 = ObjectGetValueByShift(name, 0);
        }
     }
Причина обращения: