Проблема думаю вся в функции OrdersTotal() по определению, она используется для общего количества всех отложек и рыночных ордеров. Но у меня она повела себя по другому. Альтернативы для нее я не нашел.
Подскажите кому не жалко как мне ограничить выставление отложек.
Проблема думаю вся в функции OrdersTotal() по определению, она используется для общего количества всех отложек и рыночных ордеров. Но у меня она повела себя по другому. Альтернативы для нее я не нашел.
Подскажите кому не жалко как мне ограничить выставление отложек.
Силой воли
Задайте вопрос точно, ничего не ясно
Доброго все времени суток! Не могу разобраться, казалось бы в простых вещах. Собрал простой код для открытия стоповых ордеров. Добавил условие, что бы отложки открывались, если нет других отложек. Но что то не работает! Советник открывает отложки 2 раза. ни больше ни меньше. Причем первый раз срабатывает отложка и перекрывается противоположной. остается одна позиция а второй раз срабатывают обе отложки и остаются еще 2 противоположные позиции. Таким образом всего 3 позиции на тесте.
Код как в учебнике вот такой:
if(OrdersTotal()<=0)
Надо знак поменять на >
Надо знак поменять на >
И вообще все неверно. Надо определять количество ордеров и делать по ним цикл.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго все времени суток! Не могу разобраться, казалось бы в простых вещах. Собрал простой код для открытия стоповых ордеров. Добавил условие, что бы отложки открывались, если нет других отложек. Но что то не работает! Советник открывает отложки 2 раза. ни больше ни меньше. Причем первый раз срабатывает отложка и перекрывается противоположной. остается одна позиция а второй раз срабатывают обе отложки и остаются еще 2 противоположные позиции. Таким образом всего 3 позиции на тесте.
Код как в учебнике вот такой:
if(OrdersTotal()<=0)
{
if(Sell==true)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
//--- параметры для установки отложенного ордера
request.action =TRADE_ACTION_PENDING; // тип торговой операции
request.symbol =Symbol(); // символ
request.volume =0.1; // объем в 0.1 лот
request.deviation=2; // допустимое отклонение от цены
request.magic =EXPERT_MAGIC; // MagicNumber ордера
int offset = 200; // отступ от текущей цены для установки ордера, в пунктах
double price; // цена срабатывания ордера
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // размер пункта
int digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // кол-во знаков после запятой (точность)
request.type =ORDER_TYPE_SELL_STOP; // тип ордера
price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; // цена для открытия
request.price =NormalizeDouble(price,digits); // нормализованная цена открытия
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки
//--- информация об операции
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
}
if(Buy==true)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
//--- параметры для установки отложенного ордера
request.action =TRADE_ACTION_PENDING; // тип торговой операции
request.symbol =Symbol(); // символ
request.volume =0.1; // объем в 0.1 лот
request.deviation=2; // допустимое отклонение от цены
request.magic =EXPERT_MAGIC; // MagicNumber ордера
int offset = 200; // отступ от текущей цены для установки ордера, в пунктах
double price; // цена срабатывания ордера
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // размер пункта
int digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // кол-во знаков после запятой (точность)
request.type =ORDER_TYPE_BUY_STOP; // тип ордера
price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; // цена для открытия
request.price=NormalizeDouble(price,digits); // нормализованная цена открытия
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки
//--- информация об операции
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
}
Тест выглядит вот так: