Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 302

 
mavar:

Ура! Сегодня запустил первого своего советника в MT5!  

Наступила нужная на рынке ситуация и советник как давай покупать и покупать!!! Хорошо хоть успел отреагировать. Подскажите, что не правильно в коде. По моей задумке он должен купить только один лот и сразу поставить стоп и тейкпрофит. Как только он что-то купил, переменная Bye_opened должна стать истиной и это не должно позволять совершать последующую сделку, пока не сработают стопы. И еще, как узнать цену последней сделки чтобы от нее ставить стопы?


Но что-то похоже не так я сделал. Укажите, пожалуйста, на мою ошибку.

Тики могут приходить быстрее, чем позиция попадет в список отрытых. Поэтому, Ваша проверка

if(PositionSelect(_Symbol)==true)

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

 
pako:

закиньте этот скрипт в папку скриптов, откройте в едиторе этот скрипт, компиллируйте

когда биржа откроется, перетащите этот скрипт на график 

Спасибо за помощь, сам разобрался, все заработало.  
 
Всем добрый вечер! Поделитесь кодом для трала. Спасибо.  
 
PokrovMT5:
Всем добрый вечер! Поделитесь кодом для трала. Спасибо.  

Пользуйтесь, пожалуйста, поиском по сайту - это не трудно: https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

 
barabashkakvn:

Пользуйтесь, пожалуйста, поиском по сайту - это не трудно: https://www.mql5.com/ru/search#!keyword=%D1%82%D1%80%D0%B0%D0%BB

Спасибо!
 
Dima_S:

Тики могут приходить быстрее, чем позиция попадет в список отрытых. Поэтому, Ваша проверка

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

Дима, код в блоке обработки тиков. А как правильно тогда решить этот затык? В квике у меня такая же проблема была, частенько покупает робот больше чем положено. Я списывал это на его секундную задержку и просто  добавлял отдельную переменную, которая меняется при выполнении условия, но и тут тоже были косяки. Иногда заявка отвергалась биржей а переменная уже имела значение "сделка", и робот не торговал.


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

 

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

Sleep(1000);    //Хватит?

 

не двигается стоп-лосс

пишет:

--Modify order ->  price open:1.3111 BID :1.3121 sl 1.3109
failed modify order #3 buy limit 1.00  at 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [Invalid stops]

--Modify order <- результат:10016

Почему???

void MoveStopLoss()
{
   ulong  ticket     = OrderGetTicket(0);
   double price      = OrderGetDouble(ORDER_PRICE_OPEN);
   double slossPrev  = OrderGetDouble(ORDER_SL);
   double sloss      = SymbolInfoDouble(_SYMBOL, SYMBOL_ASK) - SymbolInfoDouble(_SYMBOL, SYMBOL_POINT)*15;

      if (slossPrev < sloss)
      {
         MqlTradeRequest request={0};
         MqlTradeResult  result={0};
         request.action       = TRADE_ACTION_MODIFY;        // Тип выполняемого действия
         request.order        = ticket;                     // Тикет ордера (для модификации ордеров)
         request.price        = price;                      // Цена 
         request.sl           = sloss;                      // Уровень Stop Loss ордера
         request.tp           = 0;                          // Уровень Stop Loss ордера
         request.type_time    = ORDER_TIME_DAY;             // Тип ордера по времени действия
   
         Print ("--Modify order -> ", " price open:", price, " BID :", SymbolInfoDouble(_SYMBOL, SYMBOL_BID), " sl ", request.sl);
         bool ret = OrderSend (request, result);
         Print ("--Modify order <- результат:", result.retcode);      
      }
}
 
mq35:

не двигается стоп-лосс

пишет:

--Modify order ->  price open:1.3111 BID :1.3121 sl 1.3109
failed modify order #3 buy limit 1.00  at 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [Invalid stops]

--Modify order <- результат:10016

Почему???

Попробуйте нормализовать СЛ.
 

Нормализация не помогает. Таже фигня соп-лосс не подтягивается

--Create Order -> ASK:1.3121 price:1.3111 sl 1.3106

buy limit 1.00 EURUSD at 1.3111 (1.3121) sl: 1.3106 (1.3118 / 1.3121 / 1.3118)
--Create Order <- результат:10009

--Modify order ->  price open:1.3111 BID :1.3119 sl 1.3107
order modified [#3 buy limit 1.00 EURUSD at 1.3111]

--Modify order <- результат:10009

--Modify order ->  price open:1.3111 BID :1.312 sl 1.3108
order modified [#3 buy limit 1.00 EURUSD at 1.3111]

--Modify order <- результат:10009

--Modify order ->  price open:1.3111 BID :1.3121 sl 1.3109
failed modify order #3 buy limit 1.00  at 1.31110 sl: 1.31080 tp: 0.00000 -> 1.31110, sl: 1.31090 tp: 0.00000 [Invalid stops]
--Modify order <- результат:10016
Причина обращения: