Ответить
14.10.2014, 04:56
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Похоже что mql5 не пользуется популярностью?
По крайней мере на этом форуме....

Все же спрошу.
В mql5 OrdersTotal() возвращает кол-во отложенных ордеров?
Как получить кол-во действующих, если это возможно?
14.10.2014, 05:36
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Похоже что mql5 не пользуется популярностью?
По крайней мере на этом форуме....

Все же спрошу.
В mql5 OrdersTotal() возвращает кол-во отложенных ордеров?
Как получить кол-во действующих, если это возможно?
OrdersTotal() возвращает количество рыночных и отложенных ордеров, как в mql5 так и в mql4 одинаково.
Получить количество рыночных ордеров можно только написав собственную функцию.
matro3 
14.10.2014, 07:14
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Код:
int CountOpenOrders()
{
   int i, k=OrdersTotal(), kp=0;
   for (i=0; i<k; i++)
      if(OrderGetTicket(i)>0)
         if(orderInfo.Type() == ORDER_TYPE_BUY || orderInfo.Type() == ORDER_TYPE_SELL)
            if(orderInfo.Magic() == magicNumber) kp++;
   return(kp);
}
}
В тестере видно что ордер висит. Однако OrdersTotal() возвращает 0
14.10.2014, 07:53
Аватар для vadynik
vadynik vadynik вне форума Активный участник
Регистрация: 12.02.2011 / Сообщений: 51
Поблагодарили 85 раз(а) / Репутация: 86
Ордер или позиция? в 5ке это разные вещи
PositionsTotal()
OrdersTotal()
14.10.2014, 09:04
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Пользую это:
_http://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade

Код:
bool pos_open = positionInfo.Select(_Symbol);
int pos_type=(ENUM_POSITION_TYPE)positionInfo.PositionType();
lot = symbolInfo.NormalizePrice(GetSizeLot());
   
ResetLastError();
   
if(nResult == ENTER_BUY) // сигнал на покупку
{
   if(!pos_open) // Позиции нет
   {
      comment = "Открыта позиция BUY";
         if(!trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,lot,Ask,StopLoss,TakeProfit,comment))
            Print("Ошибка при открытии позиции BUY: ",GetLastError()," - ", ErrorDescription(GetLastError()));
      }
На самом деле positionInfo.Select(_Symbol) на следующем тике говорит false.
Хотя, если вывести в лог это же сразу после PositionOpen, то будет true.

Что-то не так, не пойму где ошибся.

Последний раз редактировалось NSerega; 14.10.2014 в 14:11.
14.10.2014, 12:00
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Взял код из статьи, может кому пригодится:
Код:
int    total       =0;  // Всего сделок в списке выбранной истории
   int    count       =0;  // Счетчик сделок по символу позиции
   string deal_symbol =""; // символ сделки
//--- Если история позиции получена
   bool pos_open = positionInfo.Select(_Symbol);
   if(HistorySelect(positionInfo.Time(),TimeCurrent()))
     {
      //--- Получим количество сделок в полученном списке
      total=HistoryDealsTotal();
      //--- Пройдем по всем сделкам в полученном списке
      for(int i=0; i<total; i++)
        {
            //--- Получим символ сделки
            deal_symbol=HistoryDealGetString(HistoryDealGetTicket(i),DEAL_SYMBOL);
            //--- Если символ сделки и текущий символ совпадают, увеличим счетчик
            if(deal_symbol==_Symbol)
               count++;
        }
     return(count);
     }
14.10.2014, 16:22
Аватар для rendi38
rendi38 rendi38 вне форума Новичок форума
Регистрация: 16.05.2013 / Сообщений: 9
Поблагодарили 8 раз(а) / Репутация: 9
Помогите пожалуйста, не могу скомпилировать выдает ошибки.
Спасибо.
12.11.2014, 21:52
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 601
Поблагодарили 708 раз(а) / Репутация: 711
скачал МТ5 билд1010, не могу запустить тестер на проверку советника...нажимаю кнопку старт, и ничего не происходит вапще...что за хрень с тестером, ктонить подскажет???
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
13.11.2014, 03:35
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Что за ошибки в журнале?
01.02.2015, 11:58
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 601
Поблагодарили 708 раз(а) / Репутация: 711
Что за ошибки в журнале?
ошибок вроде нету,все запустилось!

правда скорость черепаховая по сравнению с тестером МТ4, кошмар, а обещали что скорость вырастет....
кошмар комп завис напрочь, когда посмотрел в диспетчер запущенных программ, там было аж 5ть запущенных тестеров...вот дурдом...
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 01.02.2015 в 12:06.
11.02.2015, 21:23
Аватар для bondv
bondv bondv вне форума Программист
Регистрация: 28.05.2009 / Сообщений: 656
Поблагодарили 1,024 раз(а) / Репутация: 1026
Плюс ко всему в новом билде почему-то "облачное" тестирование сделали доступным только для 64-х битных систем. Что за несправедливость!?
Помогу реализовать Ваши идеи для MT4, MT5
Спасибо можно "сказать" сюда: Яндекс - 4100144612271, WMZ - Z396265059022, WMR - R248495080679
25.10.2015, 18:18
Аватар для paylesss
paylesss paylesss вне форума Интересующийся
Регистрация: 22.09.2015 / Сообщений: 7
Поблагодарили 0 раз(а) / Репутация: 1
здравствуйте! есть специалисты? подскажите плз.


Написал советника в mql4 самого простейшего, так потренироваться ну и появилась необходимость перевести в mql5. Перевел, но возникла проблема переменные «input» которые я задаю в самом начале почему-то не "задаются". Например, переменная lot=1 в тестере выскакивает ошибка, что объем ордера равен 0 и не может быть открыт. Если в функции открытия ордера жестко вбить 1 лот, тогда все ОК ордер срабатывает открываю ордер с помощью CTrade в чем проблема то?!И переменная трейлинг стоп, которая задается там же почему-то равна 150(а стоит 100).стопы тоже по 0.
26.10.2015, 09:16
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
здравствуйте! есть специалисты? подскажите плз.


Написал советника в mql4 самого простейшего, так потренироваться ну и появилась необходимость перевести в mql5. Перевел, но возникла проблема переменные «input» которые я задаю в самом начале почему-то не "задаются". Например, переменная lot=1 в тестере выскакивает ошибка, что объем ордера равен 0 и не может быть открыт. Если в функции открытия ордера жестко вбить 1 лот, тогда все ОК ордер срабатывает открываю ордер с помощью CTrade в чем проблема то?!И переменная трейлинг стоп, которая задается там же почему-то равна 150(а стоит 100).стопы тоже по 0.
Ну как можно найти ошибку не видя кода?
05.12.2015, 10:04
Аватар для CastEt
CastEt CastEt вне форума Активный участник
Регистрация: 19.10.2012 / Адрес: мАсква-рИка, сердце упокоит на века :-) / Сообщений: 159
Поблагодарили 53 раз(а) / Репутация: 51
Я скопировал MqlRates в R и обращаюсь к её элементам типа (R[x].high+R[x].low)/2,
можно-ли это дело как-нибудь расширить\унаследовать так, что бы вместо этого писать типа R[x].medprice ???
07.12.2015, 20:47
Аватар для CastEt
CastEt CastEt вне форума Активный участник
Регистрация: 19.10.2012 / Адрес: мАсква-рИка, сердце упокоит на века :-) / Сообщений: 159
Поблагодарили 53 раз(а) / Репутация: 51
Сам себе отвечу, НИЗЯ!
MqlRates и иже с ней суть тупо СТРУКТУРА, а не класс.
28.12.2015, 18:35
Аватар для Drotik
Drotik Drotik вне форума Интересующийся
Регистрация: 13.06.2015 / Сообщений: 33
Поблагодарили 0 раз(а) / Репутация: 1
Помогите начинающему разобраться с функцией OrderSend. Мало в интернете материалов по понятному обучению MQL5:
{
int ticet;
ticet =OrderSend (TRADE_ACTION_DEAL,"EURUSD",0.01,ORDER_TYPE_BUY,OR DER_FILLING_FOK,111,"ордер на покупку");
}
При компиляции выходит ошибка:"OrderSend'- wrong parameters count.Что неправильно? И если можно исправьте на правильно.
28.12.2015, 18:51
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Помогите начинающему разобраться с функцией OrderSend. Мало в интернете материалов по понятному обучению MQL5:
{
int ticet;
ticet =OrderSend (TRADE_ACTION_DEAL,"EURUSD",0.01,ORDER_TYPE_BUY,OR DER_FILLING_FOK,111,"ордер на покупку");
}
При компиляции выходит ошибка:"OrderSend'- wrong parameters count.Что неправильно? И если можно исправьте на правильно.
Неправильно ВСЁ... А почему не почитать документацию? -https://www.mql5.com/ru/docs/trading/ordersend
Код:
bool  OrderSend( 
   MqlTradeRequest&  request,      // структура запроса 
   MqlTradeResult&   result        // структура ответа 
   );
29.12.2015, 11:20
Аватар для bondv
bondv bondv вне форума Программист
Регистрация: 28.05.2009 / Сообщений: 656
Поблагодарили 1,024 раз(а) / Репутация: 1026
Я скопировал MqlRates в R и обращаюсь к её элементам типа (R[x].high+R[x].low)/2,
можно-ли это дело как-нибудь расширить\унаследовать так, что бы вместо этого писать типа R[x].medprice ???
Можно. Структуры могут наследоваться только от структур.
Можно сделать так:
Код:
  
struct MyMQLRates : MqlRates
  {
      double MedPrice()
      {
         return (high + low)/2;
      }
  }
Помогу реализовать Ваши идеи для MT4, MT5
Спасибо можно "сказать" сюда: Яндекс - 4100144612271, WMZ - Z396265059022, WMR - R248495080679
07.01.2016, 16:14
Аватар для paylesss
paylesss paylesss вне форума Интересующийся
Регистрация: 22.09.2015 / Сообщений: 7
Поблагодарили 0 раз(а) / Репутация: 1
Здравствуйте! Прошу вашей помощи. Сразу поясню, что я новичок. Написал простого эксперта. При появлении позиции, например селл, советник выставляет отложенные ордера бай стоп и бай лимит. зачем? вместо стоп лосса и тейк профита т.к у них проскальзывание до нескольких пунктов, а лимитки срабатывают четко.
так вот...как только один из отложенных ордеров сработал(позиция соответсвенно закрывается), то оставшийся отложеный ордер удаляется.
вот вся проблема в удалении этого отложенного ордера.

failed cancel order #0 buy 0.00 at market [Invalid request]
уже 12 часов бьюсь.
в терминале, в колонке ордер, соответсвенно тикеты ордеров. когда начинаю тестировать , тикет ордера начинается с 1 и т.д...ну как и положено по порядку.
Но в переменной, в которой должен хранится этот тикет, почему-то совершенно другой номер например...2147332096. поэтому нифига оставшийся отложеный ордер не удаляется. т.к его номер(в терминале), например,5, а в переменной тикета 2147332096. и я не понимаю почему так! помогите
PHP код:
int tiket;
 
double TPL,SPL,price;
 
int limit,stop;
 
CTrade m_trade;
   if( !
PositionSelect(Symbol()))
   
m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,lot,SYMBOL_BID,0,0,"");
   if(
PositionSelect(Symbol()) && OrdersTotal()==0  )  
     {  
       
price=PositionGetDouble(POSITION_PRICE_OPEN);
       if(
PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL
         {
           
TPL=price-TP*_Point;
           
SPL=price+SL*_Point;
           
m_trade.BuyLimit(lot,TPL,Symbol(),0,0,ORDER_TIME_GTC,0,"");
           
limit m_trade.RequestOrder();
           
m_trade.BuyStop(lot,SPL,Symbol(),0,0,ORDER_TIME_GTC,0,"");
           
stop m_trade.RequestOrder();
         }
       else
         {
           
TPL=price+TP*_Point;
           
SPL=price-SL*_Point;
           
limit m_trade.SellLimit(lot,TPL,Symbol(),0,0,ORDER_TIME_GTC,0,"");
           
stop m_trade.SellStop(lot,SPL,Symbol(),0,0,ORDER_TIME_GTC,0,"");
         }           
     }
    if ( 
OrdersTotal()==1)
         {
           if (
OrderSelect(Symbol()));
           {
           if (
limit!=0)
           {
m_trade.OrderDelete(limit);Print(limit,"лимит");}
           if (
stop!=0)
           {
m_trade.OrderDelete(stop);Print(stop,"стоп");}
           
            }  
         }  
   } 
28.01.2016, 09:58
Аватар для Алекc1234
Алекc1234 Алекc1234 на форуме Местный житель
Регистрация: 24.03.2011 / Сообщений: 700
Поблагодарили 276 раз(а) / Репутация: 276
5

Alix11 2016.01.28 10:13 # RU


Приветствую всех!

Вот какая проблемка. Есть советник(прикрепляю), который модифицирует отложенный байлимит ордер. Когда пишу его в таймере, то выдает ошибку - вот такую -

2016.01.28 13:07:36.063 Trades : failed modify order #9296101 buy limit 1.00 at 1.08990 sl: 0.00000 tp: 0.00000 -> 1.09000, sl: 0.00000 tp: 0.00000 [Invalid request]
2016.01.28 13:07:36.050 Trades : failed modify order #9296101 buy limit 1.00 at 1.08990 sl: 0.00000 tp: 0.00000 -> 1.09000, sl: 0.00000 tp: 0.00000 [Invalid request]
2016.01.28 13:07:36.050 Trades : modify order #9296101 buy limit 1.00 ED-3.16 at 1.0899 sl: 0.0000 tp: 0.0000 -> 1.0900, sl: 0.0000 tp: 0.0000 placed for execution in 36 ms
2016.01.28 13:07:36.013 Trades : modify order #9296101 buy limit 1.00 ED-3.16 at 1.0899 sl: 0.0000 tp: 0.0000 -> 1.0900, sl: 0.0000 tp: 0.0000

То есть после первой успешной модификации, идет модификация на ту же цену, но уже почему то пятизначную(котировки в терминале четырехзначные).

А вот когда делаю советника в тике, то все отлично работает - без ошибок проходит модификация. Но мне нужно именно в таймере чтоб он был. Подскажите, пожалуйста, как сделать, чтоб и в таймере было без ошибок.
Мой тейкпрофит-магнит, а стоплосс-паразит
Тебе повезло,ты не такой как все
Ты работаешь на форексе
Ответить


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 00:26. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO