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

 
ALXIMIKS:

Вопрос туповат, но ответ как бы нигде не видал, а может просто криво искал:

В фунциях, а возможно где то еще можно, встретил после типа данных символ & и, если не ошибаюсь, когда-то && видал

func(int& mm_mode, string symbol, int magic,bool& stop) {

Для чего оно? что даєт и делает? Ссылочку если можно откуда подетальнее узнать)))

Это передача параметра по ссылке.
hoz:


А если ближе к теме? Уже сколько обсуждалось что ИНИТ может подвести при, например, дисконектах или ещё какие-то подобных ситуациях. Т.к. он сам не переинициирует данные потом, в случает непредвиденных ситуаций, и запускается только один раз! А значит, это не совсем верный вариант.
Никто не мешает вызвать init() там, где надо, по Вашему условию.
 
gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();
 

hoz:

gInitTrue = false;   // В глобальных
-------------------------------------
// Сама функция нашего ИНИТА
bool myInit()
{
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные.
   return(gInitTrue =true);
}
-------------------------------------
//Вызов из старта так:
if (gInitTrue = false)
   myInit();

Это тоже самое, что:

gInitTrue = false;   // В глобальных
-------------------------------------

bool init()
{
   if
   {
   // Инициализируем..
   // неоходимые..
   // нам..
   // переменные..
   }
   return(gInitTrue =true);
}
-------------------------------------
void start()
 {//Вызов из старта так:
  if (gInitTrue = false) init();
 }
 
001:

Никак не пойму как, с наименьшими затратами, реализовать логику.

if(...) установить стоповый ордер;

if(время жизни ордера>время) снять ордер и if(..) установить новый ордер;

Сложность в том, что может быть несколько уже открытых позиций и как их все сопроводить? Как легче всего?

Спасибо!

int MagicNumber=555;
//---
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  //--- фильтр по символу
         if (OrderSymbol()!=Symbol()) continue;
         //--- фильтр по магик номеру (если такая проверка предусмотрена)
         if (OrderMagicNumber()!=MagicNumber) continue;
         //--- срабатывает условие удаления отложенного ордера
         if (OrderOpenPrice()>vremya)
         {  
            if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
            {  
               if (OrderDelete(OrderTicket())==true)
               {  Sleep(5*1000); //после удачного удаления усыпляем советник на 5 секунд
                  if (/*установить стоповый ордер*/)
                  {   OrderSend(...)
                  }
               }
            }
            else return(0);
         }
}  }  }
 
Zhunko:
Это передача параметра по ссылке.
Никто не мешает вызвать init() там, где надо, по Вашему условию.


Тогда опять же нужно решить вопрос контроля данного момента. Ведь чтоб узнать, " где надо", нужно это узнать.. А узнать можно через флаг, например.  Получается, что например, флаг будет в глобальных:

gInitTrue = false;

В  init() в самом конце функции  присвоим значение:

gInitTrue = true;

А в самом начале функции старт будем контролировать:

if (gInitTrue != true)
    init();
Верно я понимаю? Или нужно ещё что-то учесть?
 
hoz:


А если ближе к теме? Уже сколько обсуждалось что ИНИТ может подвести при, например, дисконектах или ещё какие-то подобных ситуациях. Т.к. он сам не переинициирует данные потом, в случает непредвиденных ситуаций, и запускается только один раз! А значит, это не совсем верный вариант.
Для init() нет ограничения по времени для работы, теоретически расчёты могу идти несколько секунд/минут. Здесь не имеет смысл обрыв связи. Т.е. запустили сову на графике -> пришёл тик -> начались вычисления в init() (в это время может прийти много тиков или обрыв связи) -> дальше советник для первого срабатывания start() и так ждёт новый тик.
 
как нужно правильно писать код для того, чтобы, если указанный стоп лосс или тейк профит меньше чем минимальный стоп, то сделать их равным и использовать стопы как минимальный стоп. ?
 
webip:
как нужно правильно писать код для того, чтобы, если указанный стоп лосс или тейк профит меньше чем минимальный стоп, то сделать их равным и использовать стопы как минимальный стоп. ?
MathMax().
 
Подскажите небольшой код. Вот открыл файл.... При помощи каких функции можно записать запись, сохранить,а после чего закрыть...
 
Zolotai:
Подскажите небольшой код. Вот открыл файл.... При помощи каких функции можно записать запись, сохранить,а после чего закрыть...

https://docs.mql4.com/ru/files