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

 
MikeM:
Есть такая функция: TimeCurrent().
При открытии позиции надо запомнить значение этой функции, а при возникновении желания открыть новую позицию проверять разность текущего и запомненного значений этой функции.
Уточните своё желание. Может вы хотели бы открыть новую позицию по истечении какого-то времени, напр.: 15 мин / 4 часов / 10 часов, 17 мин. и 38 сек.?
 
Это не моё желание. Это ответ на Ваш вопрос от 12:08.
 
MikeM:
Это не моё желание. Это ответ на Ваш вопрос от 12:08.
Ок. на посте жмите на "ответить" а то не сообразил, что это ответ на мой вопрос. А совет хороший, сделаю так как вы предложили. Благодарю.
 
paladin80:
Ок. на посте жмите на "ответить" а то не сообразил, что это ответ на мой вопрос. А совет хороший, сделаю так как вы предложили. Благодарю.

Я понимаю так, если у вас несколько экспертов и чтоб не было накладок с отправкой торговых приказов,

можно использовать это:

if(IsTradeContextBusy())Sleep(5000);//Торговый поток занят. Подождите 5 ceкунд

вставьте перед OrderSend();

 

А лучше вот, функция открытия позиций.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.04.2008                                                     |
//|  Описание : Открывает позицию по рыночной цене.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//|    co - комментарий                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0, string co="") {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb;
  int      dg, err, it, ticket=0;

  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  if (co=="") co=WindowExpertName()+" "+GetNameTF(Period());
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("OpenPosition(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    ot=TimeCurrent();
    if (MarketWatch)
      ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, co, mn, 0, clOpen);
    else
      ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, co, mn, 0, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(SoundSuccess); break;
    } else {
      err=GetLastError();
      if (UseSound) PlaySound(SoundError);
      if (pa==0 && pb==0) Message("Проверьте в Обзоре рынка наличие символа "+sy);
      // Вывод сообщения об ошибке
      Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(SoundSuccess); break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
  if (MarketWatch && ticket>0 && (sl>0 || tp>0)) {
    if (OrderSelect(ticket, SELECT_BY_TICKET)) ModifyOrder(-1, sl, tp);
  }
}
 
Доброго времени суток!Вопрос по тралу.Ставлю трейлинг стоп 25 пунктов.Вечером прихожу с работы,а сделка не закрыта,хотя цена днем уходила на 70 пунктов.Я что то не вкуриваю:стоп по идее не должен двигатся вниз
 
demid61:
Доброго времени суток!Вопрос по тралу.Ставлю трейлинг стоп 25 пунктов.Вечером прихожу с работы,а сделка не закрыта,хотя цена днем уходила на 70 пунктов.Я что то не вкуриваю:стоп по идее не должен двигатся вниз

Где код? Без кода - сюда.
 
demid61:

Доброго времени суток!Вопрос по тралу.Ставлю трейлинг стоп 25 пунктов.

наверно тут идет небольшой опус в стиле "и выключаю компьютер"

 
sergeev:

наверно тут идет небольшой опус в стиле "и выключаю компьютер"




:)) Я думал без компа будет работать
 
gawara:
Всем привет господа... долго гуглил но так и не нагуглился... У меня вопрос, есть стейтмент в html, его нужно визуализировать на графике для наглядности, мне кажется с точки зрения программирования это возможно, кто сталкивался с нечто подобным подскажите плиз... мне кажется должен быть какой либо скрипт который выполняет эту работу... заранее спасибо...

https://www.mql5.com/ru/code/10425
Причина обращения: