Ответ
 
Опции темы
Старый 30.09.2016, 16:13   #5061 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,518
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,110
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2004
Сообщение от Kayros Посмотреть сообщение
Блин, ну я не знаю уже! Очень зол.
Мой эксперт не хочет открывать лоты на покупку. На продажу - сколько угодно. А на покупку -балалайка! Прошу показать, может у меня глаз кривой. Вот часть кода про продажу и про покупку:

Скрытый текст

void OnTick()
{
PriceHigh = NormalizeDouble(iCustom(Symbol(), PERIOD_CURRENT,"X_C_O_D_E", SignalPeriod, Deviat, 1, 2),Digits);
PriceLow = NormalizeDouble(iCustom(Symbol(), PERIOD_CURRENT,"X_C_O_D_E", SignalPeriod, Deviat, 0, 2),Digits);
Comment("верх"+DoubleToString(PriceHigh, Digits())+"\n"+ "низ"+DoubleToString(PriceLow, Digits()));
//+--- Выставляем ордер на покупку
if (OrdersTotal()<=0)
{
if(Open[2]<PriceHigh && Close[1]>PriceHigh) //Если ордеров на покупку нет, открытие бара ниже, а закрытие выше или равно, и прошло тиков не более 4, то...
ticket=OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, PriceLow, NormalizeDouble(Ask+TakeProfit*Point, Digits), "TMA", Magic, 0, Green); // Открываем сделку на покупку
Alert (GetLastError());
}
//+---Задаем цикл для расчета количества активных ордеров на продажу -------------------+

if (CountSell()<=0)
{
if(Open[1]>=PriceLow && Close[1]<PriceLow && Volume[0]<2) //Если открытие бара выше, а закрытие ниже ил равно, и прошло тиков не более 4, то...
ticket=OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, PriceHigh, NormalizeDouble(Bid-TakeProfit*Point, Digits), "TMA", Magic, 0, Red); // Открываем сделку на продажу
}
[свернуть]


Ну и далее по тексту. Вначале идет оператор своего индюка и он берет данные корректно - это подтверждено комментами и в продажном лоте потом СтопЛосс на это ориентируется. А вот покупной скрипт не фигачит. Вообще не ставит лоты. И алерта ошибки нету. Хрень какая-то...
Сначала проверь тут
Миниатюры:
Нажмите на изображение для увеличения
Название: 00.png
Просмотров: 18
Размер:	26.0 Кб
ID:	254584  
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Kayros (30.09.2016)
Старый 30.09.2016, 19:04   #5062 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 74
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 74 раз(а) в 60 сообщениях
Поинты: 284
Сообщение от Kayros Посмотреть сообщение
Блин, ну я не знаю уже! Очень зол.
Мой эксперт не хочет открывать лоты на покупку. На продажу - сколько угодно. А на покупку -балалайка! Прошу показать, может у меня глаз кривой. Вот часть кода про продажу и про покупку:

Скрытый текст

void OnTick()
{
PriceHigh = NormalizeDouble(iCustom(Symbol(), PERIOD_CURRENT,"X_C_O_D_E", SignalPeriod, Deviat, 1, 2),Digits);
PriceLow = NormalizeDouble(iCustom(Symbol(), PERIOD_CURRENT,"X_C_O_D_E", SignalPeriod, Deviat, 0, 2),Digits);
Comment("верх"+DoubleToString(PriceHigh, Digits())+"\n"+ "низ"+DoubleToString(PriceLow, Digits()));
//+--- Выставляем ордер на покупку
if (OrdersTotal()<=0)
{
if(Open[2]<PriceHigh && Close[1]>PriceHigh) //Если ордеров на покупку нет, открытие бара ниже, а закрытие выше или равно, и прошло тиков не более 4, то...
ticket=OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, PriceLow, NormalizeDouble(Ask+TakeProfit*Point, Digits), "TMA", Magic, 0, Green); // Открываем сделку на покупку
Alert (GetLastError());
}
//+---Задаем цикл для расчета количества активных ордеров на продажу -------------------+

if (CountSell()<=0)
{
if(Open[1]>=PriceLow && Close[1]<PriceLow && Volume[0]<2) //Если открытие бара выше, а закрытие ниже ил равно, и прошло тиков не более 4, то...
ticket=OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, PriceHigh, NormalizeDouble(Bid-TakeProfit*Point, Digits), "TMA", Magic, 0, Red); // Открываем сделку на продажу
}
[свернуть]


Ну и далее по тексту. Вначале идет оператор своего индюка и он берет данные корректно - это подтверждено комментами и в продажном лоте потом СтопЛосс на это ориентируется. А вот покупной скрипт не фигачит. Вообще не ставит лоты. И алерта ошибки нету. Хрень какая-то...

Я тут не вникал в подробности твоей логики, но думаю идею ты поймёшь:
Код:
//+------------------------------------------------------------------+
void OnTick(){
  PriceHigh = NormalizeDouble(iCustom(Symbol(), PERIOD_CURRENT, "X_C_O_D_E", SignalPeriod, Deviat, 1, 2),Digits);
  PriceLow  = NormalizeDouble(iCustom(Symbol(), PERIOD_CURRENT, "X_C_O_D_E", SignalPeriod, Deviat, 0, 2),Digits);
  Comment("верх"+DoubleToString(PriceHigh, Digits())+"\n"+ "низ"+DoubleToString(PriceLow, Digits()));
  //+--- Выставляем ордер на покупку
  if ( OrdersTotal() == 0 ){  //  Эт типа если нет рыночных и отложенных ордеров
    if ( CountBuy() == 0){ // [Оригинал: [CountBuy() <= 0]] - Эт какое число должно быть, если меньше ноля?
       //Если ордеров на покупку нет, открытие бара ниже, а закрытие выше или равно, и прошло тиков не более 4, то...
       if(Open[2]<PriceHigh && Close[1]>PriceHigh && Volume[0]<2){ 
         // Открываем сделку на покупку
         ticket=OrderSend(Symbol(), 
                          OP_BUY, 
                          Lots, 
                          Ask, 
                          Slippage, 
                          PriceLow, 
                          NormalizeDouble(Ask+TakeProfit*Point, Digits), 
                          "TMA", 
                          Magic, 
                          0, 
                          Green);
         Alert (GetLastError());
       } // EIF_2
   } // EIF_1  
    //+---Задаем цикл для расчета количества активных ордеров на продажу -------------------+
    if ( CountSell() == 0){ // [Оригинал: [CountSell() <= 0]]- Эт какое число должно быть, если меньше ноля?
      if(Open[1]>=PriceLow && Close[1]<PriceLow && Volume[0]<2){     
        // Открываем сделку на продажу
        ticket = OrderSend(Symbol(),
                           OP_SELL, 
                           Lots, 
                           Bid, 
                           Slippage, 
                           PriceHigh, 
                           NormalizeDouble( Bid - TakeProfit * Point, Digits), 
                           "TMA", 
                           Magic, 
                           0, 
                           Red);
         Alert (GetLastError());                  
      } // EIF_2
    } // EIF_1  
  } // EIF
} // EOF
Короче, не аккуратненько!
Сделай аккуратненько, будет очевидненько, и заработает.
Скобочки там и другое.

P.S. Валерьянка тебе в помощь.

Последний раз редактировалось _SERG_; 30.09.2016 в 19:15.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Kayros (30.09.2016), vladradon (02.10.2016)
Старый 30.09.2016, 22:54   #5063 (permalink)
Интересующийся
 
Аватар для Kayros
 
Регистрация: 22.09.2016
Сообщений: 8
Репутация: 1
Kayros
Сказал(а) спасибо: 5
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 8
Благодарю, прям сейчас и проверю
Kayros вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.09.2016, 22:58   #5064 (permalink)
Интересующийся
 
Аватар для Kayros
 
Регистрация: 22.09.2016
Сообщений: 8
Репутация: 1
Kayros
Сказал(а) спасибо: 5
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 8
Сообщение от _SERG_ Посмотреть сообщение
Я тут не вникал в подробности твоей логики, но думаю идею ты поймёшь:
Сделай аккуратненько, будет очевидненько, и заработает.
Скобочки там и другое.

P.S. Валерьянка тебе в помощь.
Благодарю. Щас внимательно с утра еще раз все пересмотрю
Kayros вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 09.10.2016, 07:46   #5065 (permalink)
Прохожий
 
Аватар для star603
 
Регистрация: 09.10.2016
Сообщений: 1
Репутация: 1
star603
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2

По умолчанию Ошибка в коде.


Я новичок. Мне нужно чтобы при текущем одном ордере будь то сел будь то бай. Код проверял какой это ордер и открывал противоположный. А дальнейшую его модернизацию я потом придумаю. Не все сразу. Вот этот код:

PHP код:
if (OrdersTotal() == 1)
 {
   if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {
   if (
OrderMagicNumber() == Magic)
   {
    if (
OrderType() == OP_BUY)
    {
      
//- открываем ордер селл
    
}
    if (
OrderType() == OP_SELL)
    {
     
//- открываем ордер бай
    
}
   }
  }

star603 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.10.2016, 08:30   #5066 (permalink)
Новичок форума
 
Аватар для Rennela
 
Регистрация: 04.01.2013
Адрес: 俄罗斯
Сообщений: 102
Репутация: 24
Rennela
Сказал(а) спасибо: 27
Поблагодарили 23 раз(а) в 17 сообщениях
Поинты: 81
PHP код:
[PHP
[/PHP]
Сообщение от star603 Посмотреть сообщение
Я новичок. Мне нужно чтобы при текущем одном ордере будь то сел будь то бай. Код проверял какой это ордер и открывал противоположный. А дальнейшую его модернизацию я потом придумаю. Не все сразу. Вот этот код:

PHP код:
if (OrdersTotal() == 1)
 {
   if(
OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {
   if (
OrderMagicNumber() == Magic)
   {
    if (
OrderType() == OP_BUY)
    {
      
//- открываем ордер селл
    
}
    if (
OrderType() == OP_SELL)
    {
     
//- открываем ордер бай
    
}
   }
  }

Я тоже новичек, но я бы написал так:

PHP код:
int H=1;
int start()
  {
  for(
int i=OrdersTotal();i>=0;i--)
    {
    if(
OrderSelect(i,SELECT_BY_POS)==true)
      {
      if(
OrderSymbol()!=Symbol())continue;
      if(
OrderType()==OP_BUY&&OrderMagicNumber()==Magic)
        {
        while(
H==1)
          {
          
int t=OrderSend(...
          if(
t>0)H=2;
          }
        }
      }  
    }
  return(
0);
  } 
Наверняка есть способ попроще, но я пока не научился.
Rennela на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 10.10.2016, 15:17   #5067 (permalink)
Новичок форума
 
Аватар для Rennela
 
Регистрация: 04.01.2013
Адрес: 俄罗斯
Сообщений: 102
Репутация: 24
Rennela
Сказал(а) спасибо: 27
Поблагодарили 23 раз(а) в 17 сообщениях
Поинты: 81
Или так еще точнее:
PHP код:
int H,J,V;
int start()
  {
  
RefreshRates();
  for(
int i=OrdersTotal();i>=0;i--)
    {
    if(
OrderSelect(i,SELECT_BY_POS)==true)
      {
      if(
OrderSymbol()!=Symbol())continue;
      if(
OrderMagicNumber()!=Magic)continue;
      if(
OrderType()==OP_BUY)H=1;
      if(
OrderType()==OP_SELL)J=2;
      }  
    }
  
V=H+J;
//-------------------------------------------------------------    
  
while(V==1)
    {
    
int sell=OrderSend(Symbol(),OP_SELL,0.01,Bid,100,0,0);
    if(
sell>0)break;
    }
  while(
V==2)
    {
    
int buy=OrderSend(Symbol(),OP_BUY,0.01,Ask,100,0,0);
    if(
buy>0)break;
    }
  
V=0;H=0;J=0;      
  return(
0);
  } 
Это приблизительный макет, там нужно Magic обозначить и другие параметры.

Последний раз редактировалось Rennela; 10.10.2016 в 15:24.
Rennela на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 12.10.2016, 16:22   #5068 (permalink)
Активный участник
 
Аватар для yurez83
 
Регистрация: 15.08.2013
Сообщений: 151
Репутация: 91
yurez83
Сказал(а) спасибо: 267
Поблагодарили 90 раз(а) в 43 сообщениях
Поинты: 70
ребята подскажите пжл не злым тихим словом.. головушка кипит.
задание:
мне нужно сравнить 2 переменные и получить сигнал вверх или вниз.
1. приходит 1 тик - просчитываются 2 уровня.
2. эти два уровня нужно сохранить. расчёт больше не ведётся пока не получаем 3-е или 4-е условие.
3. если цена оказывается выше первого уровня,то сигнал вверх. пересчитываются наново уровни и сохраняются(старые удаляются)
4. если цена оказывается ниже второго уровня - то сигнал вниз. также пересчитываются наново уровни и сохраняются (старые удаляются).

в чём загвоздка - сохранить эти уровни, чтобы они не пересчитывались с каждым тиком до тех пор пока не наступит условие..

набросайте в общих чертах кому не тяжело логику. спасибки заранее.
yurez83 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 12.10.2016, 19:37   #5069 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,252
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 347
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1270
Отправить сообщение для Ugar с помощью ICQ
Сообщение от yurez83 Посмотреть сообщение
ребята подскажите пжл не злым тихим словом.. головушка кипит.
задание:
мне нужно сравнить 2 переменные и получить сигнал вверх или вниз.
1. приходит 1 тик - просчитываются 2 уровня.
2. эти два уровня нужно сохранить. расчёт больше не ведётся пока не получаем 3-е или 4-е условие.
3. если цена оказывается выше первого уровня,то сигнал вверх. пересчитываются наново уровни и сохраняются(старые удаляются)
4. если цена оказывается ниже второго уровня - то сигнал вниз. также пересчитываются наново уровни и сохраняются (старые удаляются).

в чём загвоздка - сохранить эти уровни, чтобы они не пересчитывались с каждым тиком до тех пор пока не наступит условие..

набросайте в общих чертах кому не тяжело логику. спасибки заранее.
Используй статические переменные для запоминания или переменные объявленные на глобальном уровне. Ну а если нужно что бы значения не были забыты даже при перезапуске терминала, сохраняй их в GV переменные. Если значений много или их количество меняется, то пиши в файл.
static int a;//Статическая перменная

int a;//Переменная объявлена на глобальном уровне
void OnTick()
{

}

GlobalVariableSet(a,0);//GV переменная

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
yurez83 (12.10.2016)
Старый 12.10.2016, 20:00   #5070 (permalink)
Активный участник
 
Аватар для yurez83
 
Регистрация: 15.08.2013
Сообщений: 151
Репутация: 91
yurez83
Сказал(а) спасибо: 267
Поблагодарили 90 раз(а) в 43 сообщениях
Поинты: 70
Сообщение от Ugar Посмотреть сообщение
Используй статические переменные для запоминания или переменные объявленные на глобальном уровне
спасибо. я как бы и пытался всё связать в кучу со статическими переменными, но меня "путала" логика сравнения и запоминания уровней.
всё оказалось элементарно. просто нужно было в
int OnInit()
прописать расчёт первичный уровней (на первом тике), а потом в теле:

if ( находится цена между уровнями)
{signal=0;}

else if (выше)
{signal=2;
вычисление уровней}
else if (ниже)
{signal=1;
вычисление уровней}
yurez83 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 15.10.2016, 14:41   #5071 (permalink)
Почётный гражданин
 
Аватар для блондинка
 
Регистрация: 21.11.2012
Адрес: Санкт-Петербург
Сообщений: 213
Репутация: 379
блондинка - блондинка - блондинка - блондинка -
Сказал(а) спасибо: 127
Поблагодарили 378 раз(а) в 111 сообщениях
Поинты: 137
Всем привет!Особенно кто понимает этот язык.)
В индикаторе что прикрепила две EMA(с периодом 2 и 3) и две границы Боллинжера(период 11и 5).
Мне бы русскими словами условие когда рисуются бары(алгоритм),т.е.обратный перевод с языка MQL4)
Очень было бы приятно.Заранее спасибо.
Миниатюры:
Нажмите на изображение для увеличения
Название: Screenshot_14.png
Просмотров: 27
Размер:	57.2 Кб
ID:	255835  
Вложения:
Тип файла: mq4 TrendStrength.mq4 (2.8 Кб, 3 просмотров)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Happiness is a choice.And it is free.Play on.
_____________________-Roy H.WiIIiams.
блондинка на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 15.10.2016, 16:14   #5072 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,252
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 347
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1270
Отправить сообщение для Ugar с помощью ICQ
Сообщение от блондинка Посмотреть сообщение
Всем привет!Особенно кто понимает этот язык.)
В индикаторе что прикрепила две EMA(с периодом 2 и 3) и две границы Боллинжера(период 11и 5).
Мне бы русскими словами условие когда рисуются бары(алгоритм),т.е.обратный перевод с языка MQL4)
Очень было бы приятно.Заранее спасибо.
Если упрощённо:
Если EMA больше верхней границы Боллинжера - зелёные.
Если EMA меньше нижней границы Боллинжера - красные.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
блондинка (15.10.2016)
Старый 15.10.2016, 19:22   #5073 (permalink)
Почётный гражданин
 
Аватар для блондинка
 
Регистрация: 21.11.2012
Адрес: Санкт-Петербург
Сообщений: 213
Репутация: 379
блондинка - блондинка - блондинка - блондинка -
Сказал(а) спасибо: 127
Поблагодарили 378 раз(а) в 111 сообщениях
Поинты: 137
Сообщение от Ugar Посмотреть сообщение
Если упрощённо:
Если EMA больше верхней границы Боллинжера - зелёные.
Если EMA меньше нижней границы Боллинжера - красные.
Разобралась)))
Если EMA(3) выше верхней границы Боллинжера(11) - зелёные.
Если EMA(3) ниже нижней границы Боллинжера(11) - красные.
Сдвиг 0 отклонение 1.
Тоже для EMA(2) и Боллинжера(5)
Огромное спасибо!

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Happiness is a choice.And it is free.Play on.
_____________________-Roy H.WiIIiams.
блондинка на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 18.10.2016, 19:09   #5074 (permalink)
Интересующийся
 
Аватар для Семен12345
 
Регистрация: 15.10.2016
Сообщений: 3
Репутация: 1
Семен12345
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Вот подскажите. Бывает, что свеча закончилась, а цены на новой еще нет и брокер не открывает ордер пока не пройдет тик. Это может длиться несколько секунд.
У меня включен советник и мне нужно чтобы он открывал ордер не позднее чем через 5 секунд после начала минуты по серверу брокера, если в течении этих 5 секунд ордер не открыт, то нужно отменить функцию открытия ордера.
Вопрос: Как написать это в коде MQL?
Семен12345 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 18.10.2016, 20:34   #5075 (permalink)
Интересующийся
 
Аватар для Дмитрий 2010
 
Регистрация: 13.08.2010
Сообщений: 12
Репутация: 2
Дмитрий 2010
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
Поинты: 18
Доброго времени суток, помогите пожалуйста, пишу советник для ручного тестирования, такая проблема-для быстрой перемотки графика (например 5,5 часа) бросаю на график вертикальную линию с именем (780) когда цена подходит к метке график должен остановиться или замедлиться, я зацыклил Sleep(10000000); но когда наступает момент остановки терминал подвисает на секунду и выключается полностью. Посоветуйте как можно решить эту проблему. Тестер пишу для себя (несколько лет-всё дописую и дописую новые возможности). Буду благодарен за помощь.
Дмитрий 2010 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.10.2016, 07:25   #5076 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,252
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 347
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1270
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Семен12345 Посмотреть сообщение
Вот подскажите. Бывает, что свеча закончилась, а цены на новой еще нет и брокер не открывает ордер пока не пройдет тик. Это может длиться несколько секунд.
У меня включен советник и мне нужно чтобы он открывал ордер не позднее чем через 5 секунд после начала минуты по серверу брокера, если в течении этих 5 секунд ордер не открыт, то нужно отменить функцию открытия ордера.
Вопрос: Как написать это в коде MQL?
В окне "Обзор рынка" вытащить все символы и использовать системный таймер, задать ему щёлкать по секундам. Весь код советника кинуть в OnTimer. Так вряд ли пропустишь нужное время открытия.
Ну а на случай если в нужное время не было тиков не по одному символу, то ещё условие при открытии
if(TimeCurrent()-нужное время открытия <= 5)
Если разница между текущим временем и нужным временем открытия меньше или равно 5 секунд-можно открывать.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.10.2016, 07:32   #5077 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,252
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 347
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1270
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Дмитрий 2010 Посмотреть сообщение
Доброго времени суток, помогите пожалуйста, пишу советник для ручного тестирования, такая проблема-для быстрой перемотки графика (например 5,5 часа) бросаю на график вертикальную линию с именем (780) когда цена подходит к метке график должен остановиться или замедлиться, я зацыклил Sleep(10000000); но когда наступает момент остановки терминал подвисает на секунду и выключается полностью. Посоветуйте как можно решить эту проблему. Тестер пишу для себя (несколько лет-всё дописую и дописую новые возможности). Буду благодарен за помощь.
При работе в тестере Sleep не вызывает никаких задержек.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.10.2016, 08:23   #5078 (permalink)
Интересующийся
 
Аватар для Семен12345
 
Регистрация: 15.10.2016
Сообщений: 3
Репутация: 1
Семен12345
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Сообщение от Ugar Посмотреть сообщение
В окне "Обзор рынка" вытащить все символы и использовать системный таймер, задать ему щёлкать по секундам. Весь код советника кинуть в OnTimer. Так вряд ли пропустишь нужное время открытия.
Ну а на случай если в нужное время не было тиков не по одному символу, то ещё условие при открытии
if(TimeCurrent()-нужное время открытия <= 5)
Если разница между текущим временем и нужным временем открытия меньше или равно 5 секунд-можно открывать.
а если использовать время компьютера?
Семен12345 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.10.2016, 09:33   #5079 (permalink)
Интересующийся
 
Аватар для Семен12345
 
Регистрация: 15.10.2016
Сообщений: 3
Репутация: 1
Семен12345
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Сообщение от Ugar Посмотреть сообщение
В окне "Обзор рынка" вытащить все символы и использовать системный таймер, задать ему щёлкать по секундам. Весь код советника кинуть в OnTimer. Так вряд ли пропустишь нужное время открытия.
Ну а на случай если в нужное время не было тиков не по одному символу, то ещё условие при открытии
if(TimeCurrent()-нужное время открытия <= 5)
Если разница между текущим временем и нужным временем открытия меньше или равно 5 секунд-можно открывать.
сделал так:
if (m<TimeSeconds(TimeLocal()))
{
if(m>5);
return;
}
работает, но есть предупреждения:

possible use of uninitialized variable 'm'
empty controlled statement found
Семен12345 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.10.2016, 17:57   #5080 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,252
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 347
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1270
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Семен12345 Посмотреть сообщение
сделал так:
if (m<TimeSeconds(TimeLocal()))
{
if(m>5);
return;
}
работает, но есть предупреждения:

possible use of uninitialized variable 'm'
empty controlled statement found
Мммдааа...
Если время открытия сделки должно быть привязано к первым 5 секундам любой минуты, то это делается так:
if(Seconds()<=5)
{
//здесь открытие сделки
}
Если надо выходить из функции прервав её выполнение
if(Seconds()>5)return;

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 00:35. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO