[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 614

 
Urain:

MathRand перед использованием инициализировать с помощью MathSrand(),

и рекомендую как параметр MathSrand() передать TimeLocal().

Инициализация требуеться единожды, далее на 32768 запросов MathRand() повторений не обнаруживаеться,

поcле можете ещё раз проинициализировать если хотите новую последовательность, иначе начнёться таже самая.

Можна конечно и инициализировать на каждом шаге но нужно отслеживать чтоб параметр инициализации менялся,

иначе это будет таже последовательность


Так и делаю. Что такое таймлокал?

У меня на одной и той же истории - один и тот же набор.

 
ПОДСКАЖИТЕ КТО НИТЬ.. УЖЕ ТРЕТИЙ РАЗ ПИШУ И НИКТО НЕ ОТВЕЧАЕТ..AccountEquity() ОДИН БАР НАЗАД (НА ПРОШЕДШЕМ БАРЕ ) КАК НАПИСАТЬ?
 
vlad123:


Так и делаю. Что такое таймлокал?

У меня на одной и той же истории - один и тот же набор.


Примеры из учебника:

datetime TimeLocal()

Функция возвращает локальное компьютерное время в виде количества секунд, прошедших после 00:00 1 января 1970 года.
Замечание: при тестировании локальное время моделируется и совпадает с моделированным последним известным временем сервера.

Пример:

MathSrand(TimeLocal());
  // Отображает 10 чисел.
  for(int i=0;i<10;i++ )Print("произвольная величина ", MathRand());

 

 

 
sllawa3:
ПОДСКАЖИТЕ КТО НИТЬ.. УЖЕ ТРЕТИЙ РАЗ ПИШУ И НИКТО НЕ ОТВЕЧАЕТ..AccountEquity() ОДИН БАР НАЗАД (НА ПРОШЕДШЕМ БАРЕ ) КАК НАПИСАТЬ?

Ответ: никак.
AccountEquity() возвращает сумму собственных средств, и не зависит от количества баров.
Узнать его предыдущие значения нельзя, просто откатывая историю баров.
Его значение зависит от количества открытых/закрытых, прибыльных/убыточных сделок.
Для того чтобы записать «историю эквити», нужно например создать статический массив, и записывать в него значение AccountEquity(), например на открытии каждого бара.
И соответственно проматывая массив получать историю изменения эквити.

 
sllawa3:
ПОДСКАЖИТЕ КТО НИТЬ.. УЖЕ ТРЕТИЙ РАЗ ПИШУ И НИКТО НЕ ОТВЕЧАЕТ..AccountEquity() ОДИН БАР НАЗАД (НА ПРОШЕДШЕМ БАРЕ ) КАК НАПИСАТЬ?

Похоже, нужно его запоминать на каждом новом баре в переменной, например таким макаром:

1. запоминаем начальное значение эквити в функции init() в переменной, допустим EquAkk=AccountEquity();

2. проверяем появление нового бара (уже не в init естественно), если да, то
{
LastEqu=EquAkk; // сохраняем прошлое (искомое нами) значение эквити в переменной
EquAkk=AccountEquity(); // записываем новое значение эквити (для следующего "прошлого" значения)
}

Таким образом переменная LastEqu будет хранить в себе значение эквити на прошлом баре в течении текущего, а при открытии следующего её значение будет перезаписано по-новой...

... Писал на коленке, не проверял, да и засыпал уже, так что не пинайте сильно...
Думаю, идею я выразил....

 
ToLik_SRGV:

Ответ: никак.
AccountEquity() возвращает сумму собственных средств, и не зависит от количества баров.
Узнать его предыдущие значения нельзя, просто откатывая историю баров.
Его значение зависит от количества открытых/закрытых, прибыльных/убыточных сделок.
Для того чтобы записать «историю эквити», нужно например создать статический массив, и записывать в него значение AccountEquity(), например на открытии каждого бара.
И соответственно проматывая массив получать историю изменения эквити.



НУ ЗНАЧИТ МОЖНО ВСЁТАКИ
 
sllawa3:
НУ ЗНАЧИТ МОЖНО ВСЁТАКИ


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

Для того чтобы записать «историю эквити», нужно например создать статический массив, и записывать в него значение AccountEquity(), например на открытии каждого бара.
И соответственно проматывая массив получать историю изменения эквити.

 
Ребят, не могу понять как сделать, чтобы на графике установить стрелки одну на самом максимальном баре за последние 80 дней, другую на самом минимальном баре за те же 80 дней. Я наваял такой вот код, но он гроздями сыплет стрелки... и то, только на минимумах каждого бара, а мне нужно по одной стрелке на минимуме и максимуме за 80 дней, потом за следующие 80 дней и т.д. Мож чё подскажете?
//====================================================================================
   int      NBars,MostHiBar, MostLoBar;
   double   MostHiPrice,MostLoPrice;
   datetime TMostHiBar,TMostLoBar;
   
//-----------------------------------------------------------------
   NBars       = 80;
   MostHiBar   = iHighest(NULL,PERIOD_D1,MODE_HIGH,NBars,0);      // Номер "максимального" бара
   MostLoBar   = iLowest (NULL,PERIOD_D1,MODE_LOW, NBars,0);      // Номер "минимального" бара
   MostHiPrice = iHigh   (NULL,PERIOD_D1,MostHiBar);              // Цена  "максимального" бара
   MostLoPrice = iLow    (NULL,PERIOD_D1,MostLoBar);              // Цена  "минимального" бара
   
   TMostHiBar  = iTime   (NULL,PERIOD_D1,MostHiBar);              // Время открытия "максимального" бара
   TMostLoBar  = iTime   (NULL,PERIOD_D1,MostLoBar);              // Время открытия "минимального" бара

   Comment (
            "\n", 
            "Наибольшая цена за ", NBars, " дней = ", MostHiPrice, "\n",
            "Наименьшая цена за ", NBars, " дней = ", MostLoPrice, "\n",
            "Время наибольш. бара = ", Time[MostHiBar], "\n",
            "Время наименьш. бара = ", Time[MostLoBar]   // сюда пробовал и TMostLoBar вставлять - пофигу...           
           );
           
   SetArrow(241, MediumSpringGreen, "", Time[MostHiBar], High[MostHiBar], 0);
   SetArrow(242, OrangeRed, "", Time[MostLoBar], Low[MostLoBar], 0);
//====================================================================================
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объект OBJ_ARROW.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl, string nm="", datetime t1=0, double p1=0, int sz=0) 
{
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
//====================================================================================
 
Подскажите, в МТ можно открывать позицию по стопу? К примеру, поставили стоп за поддержку/сопр., если пробивает то по стопу открывается позиция.
 
Craft:
Подскажите, в МТ можно открывать позицию по стопу? К примеру, поставили стоп за поддержку/сопр., если пробивает то по стопу открывается позиция.

Конечно. Только это называется не стопом, а отложенным ордером. Откройте терминал. Нажмите в нём F1. В появившемся окошке откройте Содержание -  Торговля - Типы ордеров.
Причина обращения: