Ваши вопросы по языку MQL4

Allis Amazing

Интересующийся
Ты может быть не представляешь сколько вариантов понимания слова "отобрать"?
Если по нашему... "лишить чего-либо, то-есть, отнять у вас и приумножить у нас"... то просто надо найти все строки содержащие OrderModify и их удалить или закомментировать...

Как найти именно модификацию открытых ордеров? Как эта функция называется?
 

Allis Amazing

Интересующийся
Хех, ну суть вопроса заключалась именно по открытым ордерам, ведь OrderModify может и отложки править? Или там по-другому называется?
 

Ugar

Гуру форума
Хех, ну суть вопроса заключалась именно по открытым ордерам, ведь OrderModify может и отложки править? Или там по-другому называется?
OrderModify модифицирует ордера любого типа. Обычно перед модификацией выбирается ордер, потом проверяется тип ордера, потом проверяются надобность модификации, а уже потом сама модификация. Хотя конечно, есть и другие варианты.
 
Последнее редактирование:

Allis Amazing

Интересующийся
OrderModify - там таких оооочень много....
Код:
PrevTime = 0;  
   forsmaj = false;
   if (Minute() <= 18) 
      ForsTime = 18;
   if (Minute() >= 42)
      ForsTime = 48;

А вот эти цифры что могут означать? Мне надо что бы обработка Форс-Мажора, ну отключение терминала или и-нета, не включалась планово, по времени (это происходит несколько раз в сутки), а только когда я сама захочу или когда действительно пропадёт связь....
 

Ugar

Гуру форума
Хех, ну суть вопроса заключалась именно по открытым ордерам, ведь OrderModify может и отложки править? Или там по-другому называется?

OrderModify - там таких оооочень много....
Код:
PrevTime = 0;  
   forsmaj = false;
   if (Minute() <= 18) 
      ForsTime = 18;
   if (Minute() >= 42)
      ForsTime = 48;
А вот эти цифры что могут означать? Мне надо что бы обработка Форс-Мажора, ну отключение терминала или и-нета, не включалась планово, по времени (это происходит несколько раз в сутки), а только когда я сама захочу или когда действительно пропадёт связь....
Здесь прошедшее количество минут текущего часа сравнивается с цифрой и присваивается значение переменной.
Поможет вот эта функция
Код:
[COLOR=blue]bool[/COLOR] IsConnected( )Возвращает состояние главного соединения 
 клиентского терминала с сервером, по которому производится 
подкачка данных. 
TRUE  - связь с сервером установлена, 
FALSE - связь с сервером отсутствует или  прервана.
 
Последнее редактирование:

Allis Amazing

Интересующийся
Здесь прошедшее количество минут текущего часа сравнивается с цифрой и присваивается значение переменной.

Что-то чую совсем потеплело!!! А как мне так сделать, что бы он всё время считал что время НЕ настало?!!!))))
 

Allis Amazing

Интересующийся
Приведён слишком маленький кусок кода.

Вы добрый человек, не хотелось бы этим злоупотре*****...
(Модераторы улыбнули)) Слово в общем не плохое)
Там добрых полторы тЫщи строк..... Модификация упоминается я даже не в состоянии посчитать сколько раз, а Форс-Мажор в двух местах, но ооочень длинно....
Может быть можно Вам его отправить на почту?
 

Ugar

Гуру форума
Вы добрый человек, не хотелось бы этим злоупотре*****...
(Модераторы улыбнули)) Слово в общем не плохое)
Там добрых полторы тЫщи строк..... Модификация упоминается я даже не в состоянии посчитать сколько раз, а Форс-Мажор в двух местах, но ооочень длинно....
Может быть можно Вам его отправить на почту?
Это не ко мне. В подписи красным написано.
 

Allis Amazing

Интересующийся
Это не ко мне. В подписи красным написано.

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

Может быть этот?

Код:
// счетчик времени для контроля пропадания связи
datetime PrevTime = 0;
// флаг наступления форс-мажора
bool forsmaj = false;
// счетчик времени с последнего планового форс-мажора
datetime ForsTime = 0;
// размер стопов
int StopLevel = 18;
// c учетом новостей
int StopLoss_News = 0;
int TakeProfit_News = 0;
int TP_Perev_News = 0;
int SL_Perev_News = 0;
Или этот?
Код:
void CheckForsMajor()
{
//13
   writeLogs("13. Старт форсмажора. Флаг форсмажора в труе");
   forsmaj = true;
   writeLogs("13. Обнуляем все верхние и нижние массивы");
   for (int i = 0; i < numCen; i++)
Или ещё вот так...
Код:
writeLogs("13. Завершение обработки форсмажора. Флаг в фалсе");    
   PrevTime = 0;  
   forsmaj = false;
   if (Minute() <= 18) 
      ForsTime = 18;
   if (Minute() >= 42)
      ForsTime = 48;
}

bool OrderOpen(int typeOrder, double lot, double OpenPrice, double StopLoss, double TakeProfit, int NumOtl, bool up=true, bool perev = false, bool otlperev = false)
А ещё вот здесь:
Код:
bool CheckTimeFors()
{
//18
   int i;
   bool up = false;
   bool down = false;
   bool upfind = true;
   bool downfind = true;
   if (MarketInfo(Symbol(), MODE_STOPLEVEL) < 20)
   {
      if ((Minute() >= 12 && Minute() <= 18) || (Minute() >= 42 && Minute() <= 48))
      {
         if (MathAbs(Minute() - ForsTime) > 10)
         {
            writeLogs("18. Проверяем возможность запуска форсмажора по расписанию. Счетчик времени: " + ForsTime);
            up = true;
            down = true;
            for (i = 1; i < numCen; i++)
            {
               if (arrayOtlUp[i] > 0 && up && upfind)
               {
                  if (OrderSelect(arrayOtlUp[i], SELECT_BY_TICKET))
                  {
                     upfind = false;
                     if (MathAbs(OrderOpenPrice() - Bid) < 110*Point)
                     {
                        up = false;
Не исключено что уже повторяюсь, но это ниже, почти в конце:
Код:
 if (Minute() > 18 && Minute() < 42)
         {
            if (ForsTime != 18)
               writeLogs("18. Счетчик времени: 18");
            ForsTime = 18;
         }
         else
         {
            if (ForsTime != 48)
               writeLogs("18. Счетчик времени: 48");
            ForsTime = 48;
         }
      }
      if (up && down)
      {
         writeLogs("18. Начинаем форсмажор по расписанию");
         step = 0;
         ForsTime = Minute();
         return(false);
      }
   }
   return(true);
 
Последнее редактирование модератором:

Ugar

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

Allis Amazing

Интересующийся
А по этим кусочкам не видно где можно сделать так, что бы Сова думала что время Форс-мажора не настало? Того который по расписанию.....
Там есть же минуты 48 и 12, как Вы сказали это ЧАС, а если это сделать ДНЁМ или НЕДЕЛЕЙ?
А лучше сразу ГОДОМ, вот бы там были 235 и 130 дней
 
Последнее редактирование:

Ugar

Гуру форума
А по этим кусочкам не видно где можно сделать так, что бы Сова думала что время Форс-мажора не настало? Того который по расписанию.....
Там есть же минуты 48 и 12, как Вы сказали это ЧАС, а если это сделать ДНЁМ или НЕДЕЛЕЙ?
А лучше сразу ГОДОМ, вот бы там были 235 и 130 дней
Там не указывается час, указаны только минуты. Так уж повелось на свете что 48, 18 минут случается каждый час.
А условие Minute() <= 18 истинно от 00 минут, до 18 минут. Соответственно условие Minute() >= 42 истинно от 42 минут, до 59 минут.
Естественно каждый час, если конечно не задан час где то в других кусках кода.
 

hoz

Активный участник
Ого :oops:
PHP:
  for (i = 1; i < numCen; i++)
            {
               if (arrayOtlUp[i] > 0 && up && upfind)
               {
                  if (OrderSelect(arrayOtlUp[i], SELECT_BY_TICKET))
                  {

интересно как выборка ордеров происходит у той совы, что кусок кода выложен Allis Amazing...
 

Allis Amazing

Интересующийся
Там не указывается час, указаны только минуты. Так уж повелось на свете что 48, 18 минут случается каждый час.
А условие Minute() <= 18 истинно от 00 минут, до 18 минут. Соответственно условие Minute() >= 42 истинно от 42 минут, до 59 минут.
Естественно каждый час, если конечно не задан час где то в других кусках кода.

А условие Minute() вот можно заменить на Month() и что б там было <= 2 и >= 11, в Новый год пусть хоть уработается этот Форс-мажор по плану)))

Ого :oops:
PHP:
  for (i = 1; i < numCen; i++)
            {
               if (arrayOtlUp[i] > 0 && up && upfind)
               {
                  if (OrderSelect(arrayOtlUp[i], SELECT_BY_TICKET))
                  {

интересно как выборка ордеров происходит у той совы, что кусок кода выложен Allis Amazing...
Если бы знала о чём речь, ответила бы....
 

AlexeyVik

Программист mql4 mql5
А по этим кусочкам не видно где можно сделать так, что бы Сова думала что время Форс-мажора не настало? Того который по расписанию.....
Там есть же минуты 48 и 12, как Вы сказали это ЧАС, а если это сделать ДНЁМ или НЕДЕЛЕЙ?
А лучше сразу ГОДОМ, вот бы там были 235 и 130 дней
Я не совсем понял что ты хочешь сделать, но если надо чтобы никогда небыло выполнено условие if (Minute() > 18 && Minute() < 42) Можно просто поставить одинаковое количество минут if (Minute() > 30 && Minute() < 30) или if (Minute() > 60 && Minute() < 0)
Но надо понимать, что происходит по этому условию и чего надо получить исключая из советника это действие.
 
Последнее редактирование:

Allis Amazing

Интересующийся
А можно после

bool CheckTimeFors()
{

написать

return(false);

Код:
bool CheckTimeFors()
{
[COLOR="Red"]return(false);[/COLOR]
//18
   int i;
   bool up = false;
   bool down = false;
   bool upfind = true;
   bool downfind = true;

Благодарствую что не оставили без внимания! Вот в сюда?

Я не совсем понял что ты хочешь сделать, но если надо чтобы никогда небыло выполнено условие if (Minute() > 18 && Minute() < 42) Можно просто поставить одинаковое количество минут if (Minute() > 30 && Minute() < 30) или if (Minute() > 60 && Minute() < 0)
Но надо понимать, что происходит по этому условию и чего надо получить исключая из советника это действие.

Ой, совсем где-то уже горячо, почти нашли, а вот с этим тогда что делать?
РАВНО (=) чему должно быть? 30? А не будет тупо каждые полчаса срабатывать?
Код:
writeLogs("13. Завершение обработки форсмажора. Флаг в фалсе");    
   PrevTime = 0;  
   forsmaj = false;
   if (Minute() <= 18) 
      ForsTime = 18;
   if (Minute() >= 42)
      ForsTime = 48;
}
 

Ugar

Гуру форума
Ой, совсем где-то уже горячо, почти нашли, а вот с этим тогда что делать?
РАВНО (=) чему должно быть? 30? А не будет тупо каждые полчаса срабатывать?
Код:
writeLogs("13. Завершение обработки форсмажора. Флаг в фалсе");    
   PrevTime = 0;  
   forsmaj = false;
   if (Minute() <= 18) 
      ForsTime = 18;
   if (Minute() >= 42)
      ForsTime = 48;
}
Можно подставить несуществующие значения. Тогда условия всегда будут ложными.
if (Minute() <= -1)
ForsTime = 18;
if (Minute() >= 60)
ForsTime = 48;
Только вот что от этого будет происходить в программе не известно.
Метод научного тыка не очень практичен в программировании.
 
Верх