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

 
ребят, такой вопрос, ответа на который нигде не нашел. какую функцию написать в индикатор чтобы новые бары не открывались и тикали в нулевом баре, пока не сработает мое условие, прошу ответить в лс)) 
 

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

Запутался в трех соснах:

Задаю числа extern int a =2; extern int b =3; extern int c =4; как теперь задать число abc, чтобы оно меняло свое значение при изменении  а, или b, или с, чтобы сравнить его с каким-то заданным d (например, d=344) ?

Спасибо!

 
novichok2018:

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

Запутался в трех соснах:

Задаю числа extern int a =2; extern int b =3; extern int c =4; как теперь задать число abc, чтобы оно меняло свое значение при изменении  а, или b, или с, чтобы сравнить его с каким-то заданным d (например, d=344) ?

Спасибо!

x = c + b*10 + a*100

 
Сергей Таболин:

x = c + b*10 + a*100

Госспадии! А я голову ломаю! Спасибо!

 
Здравствуйте! 2020.10.03_13:33 GMT+3. Я взял стандартный советник Moving Average для МетаТрейдера 4. И стал его менять так, чтобы он стал прибыльным. При попытке описать условия для закрытия сделки при помощи функции OrderProfit() в тестере стратегий советник перестал закрывать сделки по этому условию. До закрытия сделки у него дело не доходит. Я, правда, сомневаюсь, что написал условия для закрытия сделки правильно. Иначе бы советник закрывал сделки. Наверно попробую написать через цену открытия сделки и последние цены. После того, как достигнута максимальная разница между ценой открытия сделки и последней ценой и эта разница уменьшается, -- закрыть сделку. Прилагаю файл советника. 13:50 GMT+3. 
Файлы:
 
Николай Никитюк:
Здравствуйте! 2020.10.03_13:33 GMT+3. Я взял стандартный советник Moving Average для МетаТрейдера 4. И стал его менять так, чтобы он стал прибыльным. При попытке описать условия для закрытия сделки при помощи функции OrderProfit() в тестере стратегий советник перестал закрывать сделки по этому условию. До закрытия сделки у него дело не доходит. Я, правда, сомневаюсь, что написал условия для закрытия сделки правильно. Иначе бы советник закрывал сделки. Наверно попробую написать через цену открытия сделки и последние цены. После того, как достигнута максимальная разница между ценой открытия сделки и последней ценой и эта разница уменьшается, -- закрыть сделку. Прилагаю файл советника. 13:50 GMT+3. 
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
   //--- check order type
      // 
      if(OrderType()==OP_BUY)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;    
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())     // Исходя из ваших условий, то вот            
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }  
         else break;     
         break;
        }
      if(OrderType()==OP_SELL)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;     
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())        // Исходя из ваших условий, то вот
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         else break;  
         break;
        }
     }      

//+------------------------------------------------------------------+
 

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

Взялся за написание функции по нормализации входных данных. Но ни как не могу "заменить" исходные значения нормализованными. Т.е. ни как не могу обновить значения в буфере таймсерии Open новыми значениями из массива Temp. В чем моя ошибка? Есть ощущение, что я пытаюсь скрестить ООП и не ООП))

Open=new CiOpen();
   if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),PERIOD_CURRENT))
      return;
//---
   int bars=10;
   double Temp[];                //Создаем массив для временного хранения входных данных
   ArraySetAsSeries(Temp,true);  //Устанавливает флаг AS_SERIES
   Open.GetData(0,bars,Temp);    //Копируем необходимые данные в массив Temp
   InputNormalize(Temp,bars);    //Нормализуем данные в массиве
 
//---Как заменить значения в Open значениями из Temp?---

  }
//+------------------------------------------------------------------+
//| функция нормализации входных данных                              |
//+------------------------------------------------------------------+
void InputNormalize(double &buffer[],int bars)
  {
   double d1=-1;
   double d2=1;
   double x_min=buffer[ArrayMinimum(buffer,0,bars)];
   double x_max=buffer[ArrayMaximum(buffer,0,bars)];
   for(int i=0; i<bars; i++)
     {
      buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
     }
   return;
  }

Уверен, что это можно сделать проще! В этом случае прошу научить меня)

 
Aleksei Lesnikov:

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

Взялся за написание функции по нормализации входных данных. Но ни как не могу "заменить" исходные значения нормализованными. Т.е. ни как не могу обновить значения в буфере таймсерии Open новыми значениями из массива Temp. В чем моя ошибка? Есть ощущение, что я пытаюсь скрестить ООП и не ООП))

Уверен, что это можно сделать проще! В этом случае прошу научить меня)

Читайте документацию по языку

Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение. Предопределенные переменные константны и не могут быть изменены из mql4-программы.


Предопределенные переменные - Справочник MQL4
Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
 
Alexey Viktorov:

Читайте документацию по языку

Алексей, спасибо!  Теперь понятно, что это невозможно. 

Правда у меня не совсем mql4. Я пытаюсь заменить данные через класс CiOpen. Смутило меня наличие метода Update, который должен изменить элемент в указанной позиции массива.

Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
  • www.mql5.com
CiOpen - Таймсерии - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksei Lesnikov:

Алексей, спасибо!  Теперь понятно, что это невозможно. 

Правда у меня не совсем mql4. Я пытаюсь заменить данные через класс CiOpen. Смутило меня наличие метода Update, который должен изменить элемент в указанной позиции массива.

Поскольку вопрос задан в разделе mql4, я и отвечал относительно mql4. В вашем вопросе нет никаких намёков на mql5. Но результат одинаков.

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