Тут не ясно, почему после октрытия позиции, код лезет выполняться опять внутрь этого:
Вполне возможно, что список позиций не успевает измениться после операции открытия. Помнится, такой баг ранее был в МТ5 при работе с функциями отправки синхронных торговых приказов. Потом его исправили. Возможно, сейчас опять всплыл этот баг. А может быть экземпляр класса trade, который Вы используете, основан на асинхронных торговых приказах? Тогда это и есть ответ.
Вполне возможно, что список позиций не успевает измениться после операции открытия. Помнится, такой баг ранее был в МТ5 при работе с функциями отправки синхронных торговых приказов. Потом его исправили. Возможно, сейчас опять всплыл этот баг. А может быть экземпляр класса trade, который Вы используете, основан на асинхронных торговых приказах? Тогда это и есть ответ.
Вот этого не знаю. Было бы хорошо, если кто-то из админов ответил
Была подобная ситуация и не так давно. Проблема заключалась в том что иногда так-же открывались пачки позиций, и не совсем корректно шел перебор и установка SL.
Была подобная ситуация и не так давно. Проблема заключалась в том что иногда так-же открывались пачки позиций, и не совсем корректно шел перебор и установка SL.
У меня аналогичные коды в советниках, но множественности ордеров не возникает.
Попробуйте, буквально после каждой строчки кода, проверять сплошняком все значения, типа
Alert(__FUNCTION__," ",__LINE__," ... ");
Причина найдётся. Подозреваю, где-то теряется количество позиций, поэтому несколько раз выскакивает "0" и советник тиражирует ордера.
Sleep(1000); может добавить?
Konstantin Nikitin:
Была подобная ситуация и не так давно. Проблема заключалась в том что иногда так-же открывались пачки позиций, и не совсем корректно шел перебор и установка SL.
Когда перешел на
Все стало работать корректно.
Ребят, у меня была включена асинхронная хрень в OnInit():
trade.SetAsyncMode(true);
Стало:
trade.SetAsyncMode(false);
Пожалуй, совокупность изложенных в ветке рекомендаций решит проблему.
Была подобная ситуация и не так давно. Проблема заключалась в том что иногда так-же открывались пачки позиций, и не совсем корректно шел перебор и установка SL.
Когда перешел на
Все стало работать корректно.
Это вот сюда ее надо засунуть?
//+------------------------------------------------------------------+//| Возвращает число открытых позиций и помещает в массивы информацию|//| о текущих открытых позициях. |//+------------------------------------------------------------------+int ExCheckPositions(string sy="", long mg=0)
{
//---string pos_symbol;
long pos_magic;
int positions=0;
//---int pos_total = PositionsTotal();
//--- Получаем информацию об открытых ордерах ---for(int p=0; p<pos_total; p++)
{
if( _Symbol != PositionGetSymbol(p)) continue;ResetLastError();
pos_symbol=PositionGetSymbol(p); // хотя это аналогif(pos_symbol=="")
{
Print(__FUNCTION__+", Error Code = ",GetLastError());
continue;
}
pos_magic=PositionGetInteger(POSITION_MAGIC);
if((pos_symbol==sy || sy=="") && (pos_magic==mg || mg==0))
{
positions++;
}
}
return positions;
}
А изнчально так:
Тут не ясно, почему после октрытия позиции, код лезет выполняться опять внутрь этого:
Вполне возможно, что список позиций не успевает измениться после операции открытия. Помнится, такой баг ранее был в МТ5 при работе с функциями отправки синхронных торговых приказов. Потом его исправили. Возможно, сейчас опять всплыл этот баг. А может быть экземпляр класса trade, который Вы используете, основан на асинхронных торговых приказах? Тогда это и есть ответ.
А изнчально так:
Тут не ясно, почему после октрытия позиции, код лезет выполняться опять внутрь этого:
Попробуйте так считать позиции, напрямую.
Попробуйте так считать позиции, напрямую.
Да, согласен. В общем, сделаю так:
1. Разнесу эту хрень по советам выше;
2. Подсчет позиций сделаю функцией без использования библиотеки.
Всем спасибо!
Вполне возможно, что список позиций не успевает измениться после операции открытия. Помнится, такой баг ранее был в МТ5 при работе с функциями отправки синхронных торговых приказов. Потом его исправили. Возможно, сейчас опять всплыл этот баг. А может быть экземпляр класса trade, который Вы используете, основан на асинхронных торговых приказах? Тогда это и есть ответ.
Вот этого не знаю. Было бы хорошо, если кто-то из админов ответил
Вот этого не знаю. Было бы хорошо, если кто-то из админов ответил
В функции OnInit обычно настраивают, в классе trade есть метод устанавливающий режим работы.
SetAsyncMode
Устанавливает асинхронный режим торговых операций
А изнчально так:
Тут не ясно, почему после октрытия позиции, код лезет выполняться опять внутрь этого:
У меня аналогичные коды в советниках, но множественности ордеров не возникает.
Попробуйте, буквально после каждой строчки кода, проверять сплошняком все значения, типа
Alert(__FUNCTION__," ",__LINE__," ... ");
Причина найдётся. Подозреваю, где-то теряется количество позиций, поэтому несколько раз выскакивает "0" и советник тиражирует ордера.
Sleep(1000); может добавить?Была подобная ситуация и не так давно. Проблема заключалась в том что иногда так-же открывались пачки позиций, и не совсем корректно шел перебор и установка SL.
Когда перешел на
Все стало работать корректно.
Была подобная ситуация и не так давно. Проблема заключалась в том что иногда так-же открывались пачки позиций, и не совсем корректно шел перебор и установка SL.
Когда перешел на
Все стало работать корректно.
тоже такой строчкой всегда пользуюсь...
В функции OnInit обычно настраивают, в классе trade есть метод устанавливающий режим работы.
SetAsyncMode
Устанавливает асинхронный режим торговых операций
У меня аналогичные коды в советниках, но множественности ордеров не возникает.
Попробуйте, буквально после каждой строчки кода, проверять сплошняком все значения, типа
Alert(__FUNCTION__," ",__LINE__," ... ");
Причина найдётся. Подозреваю, где-то теряется количество позиций, поэтому несколько раз выскакивает "0" и советник тиражирует ордера.
Sleep(1000); может добавить?Была подобная ситуация и не так давно. Проблема заключалась в том что иногда так-же открывались пачки позиций, и не совсем корректно шел перебор и установка SL.
Когда перешел на
Все стало работать корректно.
Ребят, у меня была включена асинхронная хрень в OnInit():
trade.SetAsyncMode(true);Стало:
trade.SetAsyncMode(false);Пожалуй, совокупность изложенных в ветке рекомендаций решит проблему.
Была подобная ситуация и не так давно. Проблема заключалась в том что иногда так-же открывались пачки позиций, и не совсем корректно шел перебор и установка SL.
Когда перешел на
Все стало работать корректно.
Это вот сюда ее надо засунуть?