Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 197

 
Aleksandr Verkhozin:


 Посмотрел видео по работе с внешним индикатором, написал небольшой код посмотреть значения буферов в тестере:

void OnTick()

{

  double Buf1=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",0,1);

  double Buf2=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",1,1);

  double Buf3=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",2,1);

  double Buf4=iCustom(NULL,0,"Shved-Supply-and-Demand-e600",3,1);

  

  Comment("Buf1=",Buf1,"\n", "Buf2=",Buf2,"\n","Buf3=",Buf3,"\n","Buf4=",Buf4);

}  

Зоны в режиме визуализации появляются и исчезают. А значение буферов все равно, всегда ноль. Неужели никак нельзя формализовать эти зоны в коде? 

Может есть какая-то функция , кроме iCustom, которая подходит для таких индикаторов? Может кто-то сам писал сов с подобными индикаторами?


 С помощью индикаторных буферов никак, в них хранятся значения фракталов.

В свойствах индикатора  fractals_show = true;   вы увидите их на графике 

Зоны, графический обьект    OBJ_RECTANGLE

Узнать значение этих зон, можно с помощью 


ObjectGet

Возвращает значение указанного свойства объекта.

double  ObjectGet(
   string   object_name,   // имя объекта
   int      index          // идентификатор свойства
   );


В цикле перебираете все обьекты, находите нужный, и путь.

 int obj_total=ObjectsTotal(); 
  string name; 
  for(int i=0;i<obj_total;i++) 
    { 
     name = ObjectName(i);
     Print(i," - объект ",name); 
    }

Примерно, как то так.

 
Artyom Trishkin:
Знаете, а ведь прямо в этой ветке я выкладывал шаблон для трала, который в своих расчётах использует переданное в него значение индикатора. Поищите, не ленитесь.

Мне именно трейлинг корректный нужен по прибыли открытых позиций. их в конечном счёте либо 1 либо 3 и они связаны значением шага Step то есть стоппереворотная система. Отсюда и сложность, а может и наоборот проще по функции CalculateProfit() по всем ордерам трейлить. Я сейчас не могу понять как в данной схеме работы с ордерами значение индикатора может быть  с  трейлингом по общему профиту открытых позиций связано.
 
geratdc:

Мне именно трейлинг корректный нужен по прибыли открытых позиций. их в конечном счёте либо 1 либо 3 и они связаны значением шага Step то есть стоппереворотная система. Отсюда и сложность, а может и наоборот проще по функции CalculateProfit() по всем ордерам трейлить. Я сейчас не могу понять как в данной схеме работы с ордерами значение индикатора может быть  с  трейлингом по общему профиту открытых позиций связано.

Индикатором, его значением, ведь может служить не только значение, например, МАшки на нужном баре. В трал можно передавать значение цены, рассчитанное для перемещения общего стопа позиций.

Впрочем, не понятно что у вас за трал по прибыли открытых позиций - что, и когда именно он тралит.

 
geratdc:   Мне именно трейлинг корректный нужен по прибыли

Все тралы  здесь.  Из файла  TrailingFuncLib.mq4 беру  функцию TrailingStairs - ТРЕЙЛИНГ СТАНДАРТНЫЙ-СТУПЕНЧАСТЫЙ. Каждый ордер тралится независимо.

 
Artyom Trishkin:

Индикатором, его значением, ведь может служить не только значение, например, МАшки на нужном баре. В трал можно передавать значение цены, рассчитанное для перемещения общего стопа позиций.

Впрочем, не понятно что у вас за трал по прибыли открытых позиций - что, и когда именно он тралит.


Впринципе, да, по средней цене мне как-то предлагали тралить. Вроде всё логично, но что значит средняя цена? Это (цена 1 ордера + Step*Point + (цена 2 ордера + Step*Point) + цена 3 ордера) / 3 ? То есть это много параметров - надо вызывать открытые позиции и текущую цену каждой позиции. Да в общем меня этот трейлинг не так напрягает как то что на тестах советник сливается. Это что же в реале будет. Нет можно настроить, но ведь опятьже мы ничего не знаем какой оборот примет график валюты через неделю месяц, то есть есть слабость одна - если открыто 3 ордера и контр-движение рынка - советник сливается от просадки. Значит надо думать об ограничении просадки и закрытии позиций до того как обнулится депозит. Короче говоря меня сейчас больше всего именно Фокс интересует)))
 

  Сам додуматься не могу и инфы тоже конкретной не нашел(( Суть такая -  обозначить в коде ценовые границы, ближайших зон, построенных индикатором. Начал писать код, но запутался, и не знаю правильно я делаю, или совсем не туда. Гляньте и направьте на путь истинный, плиз.                                                

 int obj_total=ObjectsTotal();       

  string name; 

  for(int i=0;i<obj_total;i++)

  {

  name = ObjectName(i); 

  if(ObjectType(name)==OBJ_RECTANGLE)

  {

    pr1=ObjectGet(name,OBJPROP_PRICE1);// верхняя цена зоны

    pr2=ObjectGet(name,OBJPROP_PRICE2);// нижняя цена зоны

  }  

  }  

  И почему у меня код не вставляется сюда, как в оригинале, чтобы разноцветный и строки рядом?
Файлы:
 
-Aleks-:

 Разобрался - видимо терминалу не хватало памяти - закрыл пару чартов и заработало.

Спасибо - действительно, вычисления происходят.

А если переменные не int типа, а bool , то как быть?


//+------------------------------------------------------------------+
//|                                                       Decode.mq4 |
//|                                            Copyright 2017, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int N=162;  //0..162
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for (int n=0;n<N;n++)
   {
      int tmp=n;
      int a=(int) MathMod(tmp,3);
      tmp=(tmp-a)/3;
      int b=(int) MathMod(tmp,3);
      tmp=(tmp-b)/3;
      bool c= (bool) MathMod(tmp,2);
      tmp=(tmp-c)/2;
      int d=tmp;
   
      Print("N=",n,"; A=", 2+2*a, "; B=", b+1,"; C=",c,"; D=", 16+4*d);
   }
  }
//+------------------------------------------------------------------+
 
Victor Nikolaev:

 

Извиняюсь, но разве этот код отличается от прошлого?
 
-Aleks-:

 

Извиняюсь, но разве этот код отличается от прошлого?


Различия минимальные. Одна из переменных логическая.

При выводе будет написано true или false

 
Victor Nikolaev:


Различия минимальные. Одна из переменных логическая.

При выводе будет написано true или false

 

Вы точно посмотрели, последний код, что опубликовали? Если да, то мне нужен отдых... спасибо.