Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1056

 
ara66676:

Выручайте пожалуйста, не могу найти ответа на простой вопрос.

int  TimeSeconds(,,,,,)   Возвращает количество секунд, прошедших с начала минуты указанного времени.

Если я вставлю в функцию время открытия бара  

TimeSeconds(iTime(NULL,PERIOD_M5,0))  

то как мне определить что до закрытия бара осталось 10 секунд? 

Ну так из количества секунд в периоде вычти прошедшее время...

PeriodSeconds(PERIOD_M5) - TimeSeconds(iTime(_Symbol, PERIOD_M5, 0));



 
AlexeyVik:

Потому, что читать документацию надо до конца. А там есть пример

Спасибо! В примере этот "ArrayResize" всё голову попутал. :)

А в документации, думаю, эти скобки лишние "array[]", из самого слова понятно что это массив. :)

int  ArrayInitialize( 
   int     array,     // инициализируемый массив 
   int     value        // значение, которое будет установлено 
   );
 
AlexeyVik:

Ну так из количества секунд в периоде вычти прошедшее время...



Спасибо большое, уже пять лет кружусь в mql4, а что есть такая функция не знал, ещё раз спасибо большое ))

Увы , не помогло, на пятом эта проверка не работает...((( 

 
if(id==CHARTEVENT_MOUSE_MOVE)
                                       {
                                       // получ и преобраз координ мыши
                                       ChartXYToTimePrice(0,lparam,dparam,huin,timeVline,priceVline);
                                       // переместить нa них линию
                                       ObjectSet(stockname+"timeVline",OBJPROP_TIME1,timeVline);                                     
                                              
                                        } 
 
такой вот кусок. на реальном графике, где индикатор запущен с нуля работает как надо. 
а если запустить индикатор в тестере, то линия не перемещается вслед за мышкой. только если держать нажатой левую кнопку, или если сделать клик. что не так ? 
еще непонятно что делает переменная которую я обозвал huin

 
ara66676:

Спасибо большое, уже пять лет кружусь в mql4, а что есть такая функция не знал, ещё раз спасибо большое ))

Увы , не помогло, на пятом эта проверка не работает...((( 

 

Ну так надо было уточнить... Принцип остаётся тем-же

TimeCurrent() - (datetime) SeriesInfoInteger(_Symbol, PERIOD_M5, SERIES_LASTBAR_DATE);


Можно ещё через CopyTime()...


Нет... Немного не так.

(datetime) SeriesInfoInteger(_Symbol, PERIOD_M5, SERIES_LASTBAR_DATE) + PeriodSeconds(PERIOD_M5) - TimeCurrent():
 

ГУРУ ПОДСКАЖИТЕ!!!! Почему не открывается ордер Sell????

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

//|                                                      ProjectName |

//|                                      Copyright 2012, CompanyName |

//|                                       http://www.companyname.net |

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

#property strict

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

//| Expert initialization function                                   |

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


input double L=0.01;

input int TakeProfit = 150;

input int StopLoss   = 150;

input int  Magic     = 0;

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

int b=0;

int s=0;

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

int OnInit()

  {

   return(0);

  }

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

//| Expert tick function                                             |

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

void OnTick()

  {

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

//| Открываем ордер Buy                                              |

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

   if(b==0)

     {

      b=My_Fun_b();

     }

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

//| Открываем ордер Sell                                             |

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

   if(s==0)

     {

      double priceb=My_Fun_p();

      Comment("Цена ордера Buy",priceb);

      if(priceb==Bid)  /*НЕ ВЫПОЛНЯЕТСЯ, ПОЧЕМУ*/

        {

        s=My_Fun_s(priceb);/*НЕ ВЫПОЛНЯЕТСЯ, ПОЧЕМУ*/

        }

     }

  }

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

//| Expert deinitialization function                                 |

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

void OnDeinit(const int reason)

  {


  }

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

//| Пользовательская Функция открытия первого ордера (buy)           |

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

int My_Fun_b()

  {

   b=OrderSend(_Symbol,0,0.01,Ask,0,0,0,"",414,0,clrBlue);

   return(b);

  }

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

//| Пользовательская функция определенияцены первого ордера (buy)    |

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

double My_Fun_p()

  {

   double pb=0;

   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true)

      if(OrderMagicNumber()==414)

        {

         pb=OrderOpenPrice();

        }

   return(pb);

  }

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

//| Пользовательская Функция открытия первого ордера (sell)          |

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

int My_Fun_s(double priceb)

  {

   s=OrderSend(_Symbol,1,0.01,priceb,0,0,0,"",0,0,clrRed);

   return(b);

  }

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


Файлы:
test.mq4  2 kb
 
AlexeyVik:

Ну так надо было уточнить... Принцип остаётся тем-же


Можно ещё через CopyTime()...


Нет... Немного не так.

Спасибо, получилось , работает. Правильный вариант :

(TimeCurrent() - (datetime) SeriesInfoInteger (NULL , PERIOD_M5 , SERIES_LASTBAR_DATE))>290 

Ещё раз спасибо, теперь горы кода можно убрать и пользоваться этой строчкой!!! )) 

 
ara66676:

Спасибо, получилось , работает. Правильный вариант :

(TimeCurrent() - (datetime) SeriesInfoInteger (NULL , PERIOD_M5 , SERIES_LASTBAR_DATE))>290 

Ещё раз спасибо, теперь горы кода можно убрать и пользоваться этой строчкой!!! )) 

Видимо было не важно, прошедшее время от открытия бара или время до завершения бара. Этот вариант будет давать именно прошедшее время от начала бара, а не до завершения его.

А что за число 290? Зачем проверка на больше 290???

 
AlexeyVik:

Видимо было не важно, прошедшее время от открытия бара или время до завершения бара. Этот вариант будет давать именно прошедшее время от начала бара, а не до завершения его.

А что за число 290? Зачем проверка на больше 290???

В ДАННОМ ВАРИАНТЕ ЧИСЛО 290 ПОКАЗЫВАЕТ ЧТО С НАЧАЛА ОТКРЫТИЯ БАРА ПРОШЛО БОЛЬШЕ 290 СЕКУНД. ИЗВИНЯЮСЬ ЗА КАПС, ЗАКЛИНИЛО ))) 
 

Ошибки (2) при компиляции: Magic - undeclared identifier

Помогите исправить

bool CheckExists(int Type)                                 
 {
  bool Result = True;
  for(int i = 0; i < OrdersTotal(); i++)
   if(OrderSelect(i, SELECT_BY_POS))
    if(OrderType() == Type && OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
     if(OrderOpenTime() >= Time[0])
      Result = False;
  for(i = 0; i < OrdersHistoryTotal(); i++)
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
     if(OrderType() == Type && OrderOpenTime() >= Time[0]
        && OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
      Result = False;
    }

  return(Result);
  }

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