Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1855

 

Подскажите. Поставил вопрос в тупик.

iOpen как считается-то по Аску или Бид? 

double DayOpenone = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 0), Digits);

double DayOpentwo = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 1), Digits); 

Дело в том, чтобы сравнить цену открытия на сегодня с ценой открытия на вчера возникает видимо спрэдовая колизия и потом далее в коде начинаются траблы. торгуется либо только баи или селлы из-за того, что в какие-то дни цены по  iOpen некорректные. 

 
Порт-моне тв #:

Подскажите. Поставил вопрос в тупик.

iOpen как считается-то по Аску или Бид? 

Дело в том, чтобы сравнить цену открытия на сегодня с ценой открытия на вчера возникает видимо спрэдовая колизия и потом далее в коде начинаются траблы. торгуется либо только баи или селлы из-за того, что в какие-то дни цены по  iOpen некорректные. 

График строится по цене Bid

 

Ребят подскажите пожалуйста.

Пишу мультивалютный советник, все работает как запланировано, кроме открытия ордеров. Подскажите в чем ошибка.

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

Не выдает ошибок никаких, просто не открывает ордер

 
Sergey Dymov #:

Ребят подскажите пожалуйста.

Пишу мультивалютный советник, все работает как запланировано, кроме открытия ордеров. Подскажите в чем ошибка.

Не выдает ошибок никаких, просто не открывает ордер

OrderSend

Возвращаемое значение

Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

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

Покупка делается по Ask. Но может сработать и с Bid, если проскальзывание будет не меньше спреда, что может усложнить поиск этого бага.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

Sergey Dymov, 2022.01.14 18:03

Ребят подскажите пожалуйста.

Пишу мультивалютный советник, все работает как запланировано, кроме открытия ордеров. Подскажите в чем ошибка.

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

Не выдает ошибок никаких, просто не открывает ордер

Обратили внимание где ошибка?

       if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         int nDigits = (int)MarketInfo("USDJPY", MODE_DIGITS);
         OrderSend("USDJPY", OP_SELL, 0.1, NormalizeDouble(Bid1, nDigits), 3, NormalizeDouble((Ask1-StopLoss*Point1), nDigits), NormalizeDouble((Ask1+TakeProfit*Point1), nDigits), NULL, magic, 0, 0);
        }

https://docs.mql4.com/ru/trading/ordersend

Примечание

При открытии рыночного ордера (OP_SELL или OP_BUY) в качестве цены открытия могут использоваться только самые последние цены Bid (для продажи) или Ask (для покупки). Если операция проводится по финансовому инструменту, отличному от текущего, то для получения последних котировок по этому инструменту необходимо воспользоваться функцией MarketInfo() с параметром MODE_BID или MODE_ASK.

Нельзя использовать расчетную либо ненормализованную цену. Если запрашиваемой цены открытия не было в ценовом потоке, либо запрашиваемая цена не нормализована в соответствии с количеством знаков после десятичной точки, то будет сгенерирована ошибка 129 (ERR_INVALID_PRICE). Если запрашиваемая цена открытия сильно устарела, то независимо от значения параметра slippage будет сгенерирована ошибка 138 (ERR_REQUOTE). Если же запрашиваемая цена устарела, но еще присутствует в ценовом потоке, то ордер открывается по текущей цене и только в том случае, если текущая цена попадает в диапазон price+-slippage.

...

Также для робота желательно задать уникальный magic.

OrderSend - Торговые функции - Справочник MQL4
OrderSend - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrderSend - Торговые функции - Справочник MQL4
 
Mihail Matkovskij #:

цены открытия не было в ценовом потоке, либо запрашиваемая цена не нормализована в соответствии с количеством знаков после десятичной точки, то

Насколько я знаю, Ask и Bid уже нормализованы. Подобный вопрос уже поднимался и противоречий не было.

Про магик и приведению к digits стоплоса и профита, возможно и уместно, но задумка автора не известна.

 
Andrey Sokolov #:

Насколько я знаю, Ask и Bid уже нормализованы. Подобный вопрос уже поднимался и противоречий не было.

Про магик и приведению к digits стоплоса и профита, возможно и уместно, но задумка автора не известна.

На сколько я знаю в документации ни слова об этом. Так что лучше перестраховаться. Хуже точно не будет.

Относительно СЛ и ТП то они являются расчётными.  И поэтому их обязательно следует нормализировать в соответствии со значением digits.

 

Привет друзья.

 
 подскажите прибыль на истории обведена синим, это уже с вычетом комиссии и свопа??
 

Добрый день.

Как получить время открытия второго и последующих ордеров ведь OpenOrderTime() выдает только первый, а также  как получить цену открытия второго и последующих ордеров, т.к. аналогом  OpenOrderPrice() выдает также цену первого

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