[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 500

 
yosuf:

Думаю, это самое удачное решение проблемы в данном случае, попробую с понедельника, большое спасибо.

Один вопрос- указываю серверное или местное время? 

Откуда планировщик Вашей Винды знает про серверное время терминального сервера ДЦ??? - время Вашего компьютера конечно.
 
Reshetov:
Зачем Вам творить,  ведь Вы же не Творец и даже не его Пророк, а всего лишь доцент? Достаточно включить службу расписаний (если она не выключена) и в "Панели управления" настроить эти самые расписания (ярлык "Назначенные задания"). Пущай компьютер сам запускает поочередно советников через командную строку терминала  в назначенное время.
Если Вам не трудно, опишите, пожалуйста,  по пунктам, как я должен поступить, чтобы запустить этот механизм, поскольку, я пока не знаю, где и как включить службу расписаний, панель управления в ней, командную строку терминала.
 
Reshetov:
Объем ОЗУ зависит от операционной системы и битности железа. Судя по тому, что у Вас комп одноядерный, то значит железо 32-битное и до 3-х гигов можно ОЗУ нарастить. Но лучше свериться с данными по материнской плате, т.к. не все старые компы могут более 2 гиг поддерживать.
Можно больше для 32. Ограничивает только материнская плата. Кажется до 200 Гб можно подключить. Где-то таблицу видел.
 
yosuf:
Если Вам не трудно, опишите, пожалуйста,  по пунктам, как я должен поступить, чтобы запустить этот механизм, поскольку, я пока не знаю, где и как включить службу расписаний, панель управления в ней, командную строку терминала.
Можете поГуглить по запросу "Планировщик задач Windows". Можете глянуть здесь.
 
Zhunko:
Можно больше для 32. Ограничивает только материнская плата. Кажется до 200 Гб можно подключить. Где-то таблицу видел.
Вадим, ты о такой разблокировке имеешь ввиду?
 
TarasBY:
Можете поГуглить по запросу "Планировщик задач Windows". Можете глянуть здесь.
На отключения включенных терминалов нужно создавать отдельные программы (задачи)?
 
yosuf:
На отключения включенных терминалов нужно создавать отдельные программы (задачи)?
Доцент, читайте внимательно доку по ссылке от TarasBY и не выдумывайте ерунду.
 

 Вот мой тестовый учебный сырец-сова:

//+---------------------------------------------------------------------------------------+
//|                               Strategy №1 for H1.mq4                                  |
//|                                        hoz                                            |
//|                                                                                       |
//+---------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

//----- Входные параметры -----------
extern string     H1 = "___ Общие параметры индикаторов ___";
extern int        i_TF = 60;
extern string     H2 = "_____ Параметры быстрой машки _____";
extern int        i_maFastPeriod = 5,
                  i_maFastShift = 0,
                  i_maFastMethod = 1;
extern string     H3 = "____ Параметры медленной машки ____";
extern int        i_maSlowPeriod = 19,
                  i_maSlowShift = 0,
                  i_maSlowMethod = 1;
extern string     H4 = "_______ Параметры Моментума _______";
extern int        i_momPeriod = 18;
extern string     H5 = "_______ Параметры Стохастика ______";
extern int        i_stoch_D = 3,                   // Сигнальная линия
                  i_stoch_K = 13,                  // Главная линия
                  i_stoch_slowing = 3;             // Замедление
                  
int g_ticket,                                      // Тикет текущей позиции
    g_type;                                        // Тип текущей позиции

//Иднентификаторы типов сигналов
#define CROSSINGTOUP                 1             // Пересечение быстрой медленную снизу вверх
#define CROSSINGTODOWN              -1             // Пересечение быстрой медленную сверху вниз
#define CROSSINGWAIT                 0             // Отсуствие пересечения машек

#define SIGNAL_BUY                   1             // Сигнал покупки
#define SIGNAL_SELL                 -1             // Сигнал продажи
#define SIGNAL_NO                    0             // Отсуствие сигнала

//+---------------------------------------------------------------------------------------+
//| Функция инициализации эксперта                                                        |
//+---------------------------------------------------------------------------------------+
int init()
  {
   
   return(0);
  }
//+---------------------------------------------------------------------------------------+
//| Функция деинициализации эксперта                                                      |
//+---------------------------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)
{
      if ((i_maFast2<i_maSlow2) && (i_maFast1>i_maSlow1))             // Если быстрая скользящая пересекла медленную снизу вверх..
      return(CROSSINGTOUP);                                           //.. значит, - пересечение вверх
                                                 
      if ((i_maFast2>i_maSlow2) && (i_maFast1<i_maSlow1))             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
      return(CROSSINGTODOWN);                                         //..значит, - пересечение вниз
 
   return(CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)
{
   for(int i=1;i<=Bars;i++)
   {
      if((stochD2<stochK2) && (stochD1>stochK1))                     // Если сигнальная линия пересекла главную снизу вверх..
      return(CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if((stochD2>stochK2) && (stochD1<stochK1))                     // Если сигнальная линия пересекла главную сверху вниз..
      return(CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   }
   return(CROSSINGWAIT);                                             // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
void GetMomentumSignal()
{
   double momentum = iMomentum(Symbol(),i_TF,i_momPeriod,0,0);
}

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}

//+---------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                   |
//+---------------------------------------------------------------------------------------+
void FindOrders()
{
   
}
//+---------------------------------------------------------------------------------------+
//| Функция start эксперта                                                                |
//+---------------------------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }

ф-ция int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2) получает сигнал пересечения. 

Ф-ция int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2) получает сигнал от стохастика.

Ф-ция void GetMomentumSignal() получает значение моментума.

Ф-ция int GetSignal() будет получать общий сигнал исходя из предыдущих 3 функций и не только их.. Вопрос такой. Поскольку ф-ция int GetSignal() самая главная так сказать и в ней получается основной синал я получаю все значения машек(i_maFast1,i_maFast2,i_maSlow1 и i_maSlow2) и значения значения стохастиков(stochD1,stochD2,stochK1,stochK2)

 Правильно ли я сделал с точки зрения оптимизации кода?

 Есс-но все параметры полученные в ф-ции  GetSignal() передаются по ссылкам в соответствующие ф-ции.

Но вот этом участке

     if( GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);

 

при компиляции выскакивает ошибка:

'&' - variable expected E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 31)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 50)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 69)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 88)
4 ошибок, 0 предупреждений
  
Почему?

 

 
Не люблю копаться в левых кодах, но сразу бросилось в глаза, зачем в функциях после double стоит & (!). Это и даёт ошибки!
 
hoz:

 Вот мой тестовый учебный сырец-сова:

при компиляции выскакивает ошибка:

 Почему?

Потому что:

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(i_maFast1, i_maFast2, i_maSlow1, i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}