Системы стратегического прогнозирования - страница 39

 
-Aleksey-:
Уточняющий вопрос: значения условного индикатора в каждый момент времени нужны для всех свечек графика или для какого-то количества последних?
желательно, для последних, заданных неким окном.
 

Вот кусок из моего рабочего кода. Никогда не было проблем с закрытием (немножко подправил)

int i, total = OrdersTotal(), slippage = 50;

bool Ans;
for (i = total-1; i >=0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if(OrderType()==OP_BUY) {
Print("ЗАКРЫТЬ ПОКУПКУ");
Ans = false;
while(Ans==false) {
Ans = OrderClose(OrderTicket(),OrderLots(),Bid, slippage, DodgerBlue);
Sleep(1000);
RefreshRates();
}
}
if(OrderType() == OP_SELL) {
Print("ЗАКРЫТЬ ПРОДАЖУ");
Ans = false;
while(Ans==false) {
Ans = OrderClose(OrderTicket(),OrderLots(),Ask, slippage, Orange);
Sleep(1000);
RefreshRates();
}
}
}
}

 
rulabs:

Вот кусок из моего рабочего кода. Никогда не было проблем с закрытием (немножко подправил)

...

Спасибо огромное!!! Буду пробовать.
 
Farnsworth:
Спасибо огромное!!! Буду пробовать.
Вам спасибо за ветку. Спрашивайте, если что.
 
Farnsworth:
желательно, для последних, заданных неким окном.

У меня это реализовано так:

//---начало блока глобальных переменных---------------
int GLOBAL_DATA_LIMIT;
bool first_run=true;
//---конец блока глобальных переменных
//++++++++++++++++++++++++++++++++++++
//---начало блока инициализации
void OnInit()
   {
      GLOBAL_DATA_LIMIT= расчет числа данных(длины окна данных), необходимых для расчета окна условного индикатора заданной длины
      ....инициализация
  }
//---конец блока инициализации индикатора
//+++++++++++++++++++++++++++++++++++++++
//---начало блока обновления индикатора--
int OnCalculate (
                  const int rates_total,      // current size of the timeseries array
                  const int prev_calculated,  // size of the timeseries array got by reurn value the last time
                  const datetime& time[],     // Time
                  const double& open[],       // Open
                  const double& high[],       // High
                  const double& low[],        // Low
                  const double& close[],      // Close
                  const long& tick_volume[],  // Tick Volume
                  const long& volume[],       // Real Volume
                  const int& spread[]         // Spread
                )
   {
      if(rates_total<0)
      {
         printf("На графике отсутствуют исторические данные");
         return(0);
      }
      if(rates_total<GLOBAL_DATA_LIMIT)
      {
         printf("Недостаточно исторических данных, необходимое количество: "+string(GLOBAL_DATA_LIMIT));
         return(0);
      }
      if(prev_calculated==0) // срабатывает при первом запуске, или когда история поменялась
      {
         if (first_run==true) первый расчет при запуске - в момент первого тика после инициализации
         *{
            ArrayCopy(cur_price_array, close, 0, (rates_total-1)-GLOBAL_DATA_LIMIT, GLOBAL_DATA_LIMIT); - копируем в массив необходимое количество значений цены
            ...
            Со скопированным массивом проводим расчет
            Отображаем результат
            ...   
            first_run=false;
         *}
         else расчет на каждом тике
         {
         в это место вставить код *(без first_run=false;), если считать на каждом тике. Если считать не на каждом тике, а по новому бару, то вставить * в функцию isNewBar
         }         
      }
      
      if(isNewBar(_Period)) расчет на каждом баре
      {
          *{
                      ArrayCopy(cur_price_array, close, 0, (rates_total-1)-GLOBAL_DATA_LIMIT, GLOBAL_DATA_LIMIT); - копируем в массив необходимое количество значений цены
                      ...
                      Со скопированным массивом проводим расчет
                      Отображаем результат
                      ...
         *}
      }
      return(rates_total);
   } 
//---конец блока обновления индикатора---
 

Это схема для расчета одного или нескольких n значений индикатора на основе скопированных m(GLOBAL_DATA_LIMIT) значений цены на каждом баре или тике.

Если прошлые значения рассчитанного окна значений не меняются, то в расчете(внутри) можно действовать так:

-рассчитывать только новое значение(одно);

-сдвинуть рассчитанное окно значений(массив с результатами) влево на 1 индекс;

-записать в последний индекс массива с результатами новое значение.


Не знаю, понятно ли. Код на MQL5, 4-ку я не знаю, но должно быть похоже, наверное.

 
-Aleksey-:

...

Спасибо, буду разбираться.
 
Risk:

Админы, абсолютная власть ведет к диктатуре. Даже наш политкорректный timbo не выдержал этого маразама и куда-то свалил :)

Должна быть оппозиция, которая хоть иногда всё расставит на свои места, а то здесь непонятно кто уже всерьез дает определения разделам математики, при этом не могут ордер закрыть без помощи школьников. Завтра то что будет ?

Если Вы оппозиция, то я папа римский. Вы автору не даете слова сказать, а содержания в Ваших постах ноль. Настоящая оппозиция есть и она оппонирует конструктивно. А тролли оппозицией быть не могут, это разрушители тем в чистом виде.
Вы представлены к очередному бану.
 
rulabs:
Вам спасибо за ветку. Спрашивайте, если что.
пока ругался с коллегой, чуть было не пропустил душевный пост. Каждый из нас на сайте вносит что то свое, так, что не могу полностью принять "спасибо", - если ветка получается интересной, то это благодаря всем ее участникам :о)
 

Чтобы ветка не затухала:)

В понедельник в 11:15 по моск.врем., тупо по времени без анализа, открыл правда в МТ5(привыкать уже надо:), наблюдаемые пары.

EURUSD и GBPUSD не открывал потому что показывали флет. Тупо подержим до пятницы, хотя по правильному надо смотреть и возможно корректировать каждый день.

Если кому интересно можно посмотреть.

Login: 729566

Investor: iuj2seh


Причина обращения: