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

 
zfs:
Средняя прибыльная сделка не покроет проскальзывание и прибыльность маленькая, а еще это может быть подгонкой).

Эксперта писал я сам. В нем нет стоплосса.

 
PetrovichV:

Эксперта писал я сам. В нем нет стоплосса.

Это еще хуже).
 
zfs:
Это еще хуже).
Спасибо.
 

Отвечу, пожалуй, на свой же вопрос, раз уж решение найдено - мало ли, кто будет гуглить...

Вопрос был о том, как правильно получить цену открытия последнего ордера из истории. Получилось (у меня, по крайней мере), что никак - надо было добывать цену сделки, а не ордера. На тестере, причем, работал и исходный вариант (не мной написанный) - подозреваю, что разница была в том, что на демке вместо цены пишется просто "market price", и при попытке запросить его как double почему-то возвращаются нули. Ну и черт бы с ними, теперь функция выглядит так:

PositionID = PositionGetInteger(POSITION_IDENTIFIER);

double FindLastPrice(long PositionID) {
   int  i = 0, DealsTotal;
   ENUM_DEAL_TYPE CheckType;
   long Ticket, OldTicket = 0, PosID, Magic, Type;
   double OrderPrice = 0;
   
   DealsTotal = HistoryDealsTotal();
   
   for (i = 0; i < DealsTotal; i++) {
      Ticket = (int)HistoryDealGetTicket(i);
      PosID  = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID);
      Magic  = HistoryDealGetInteger(Ticket, DEAL_MAGIC);
      Type   = HistoryDealGetInteger(Ticket, DEAL_TYPE);
      
      if (Sell) CheckType = DEAL_TYPE_SELL; 
      else CheckType = DEAL_TYPE_BUY;
      
      if ((PosID == PositionID) && (Magic == MagicNumber) && (Type == CheckType)) {
         if (Ticket > OldTicket) {
            OrderPrice = HistoryDealGetDouble(Ticket, DEAL_PRICE);
            OldTicket = Ticket;
         }
      }
   }
   if(!OrderPrice) Print("Ошибка получения цены открытия предыдущей сделки! Error ",GetLastError());
   return(OrderPrice);
}

Пришлось убить несколько часов на эту ерунду, но по крайней мере во всем есть свои плюсы: из-за этой неработающей функции пришлось придумывать обходной путь, параллельно освоив базовую работу с файлами, чтобы тупо записывать в файлик каждую новую цену ордера и считывать ее при необходимости...

 
Lone_Irbis:

Отвечу, пожалуй, на свой же вопрос, раз уж решение найдено - мало ли, кто будет гуглить...

Вопрос был о том, как правильно получить цену открытия последнего ордера из истории. ....

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

>>> Рецепты MQL5 - История сделок и библиотека функций для получения свойств позиции 

 
tol64:

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

>>> Рецепты MQL5 - История сделок и библиотека функций для получения свойств позиции 

Да я этот сайт уже неделю вдоль и поперек гуглю (именно через гугл, т.к. встроенный поиск тут какой-то странный: то выдает совсем невтемные вещи в случайном порядке, а не по релевантности; то вообще сообщает, что "ничего не найдено" даже на скопированные из этой же документации запросы)... Вот только чтобы найти что-то полезное, надо хотя бы конкретно знать, как это полезное называется, и чем оно отличается от уже имеющегося неработающего варианта :) Про поиск легко говорить с позиции человека, знающего язык на приличном уровне, но сложнее реализовать, если само название mql5 знаешь всего неделю и уже пытаешься что-то на нем сочинять... 

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

Тем не менее, за ссылку спасибо, почитаю. 

 

Добрый день.

Можно ли как нибудь закачать исторические данные для валют лет за 20-30?

А то в Альфа-форексе только за последние 12 лет, а перед этим какими то кусками.

 
PetrovichV:

Добрый день.

Можно ли как нибудь закачать исторические данные для валют лет за 20-30?

А то в Альфа-форексе только за последние 12 лет, а перед этим какими то кусками.

Вам в историю брокер предоставляет, при увеличении периода понижается качество.
 

Вот код, где выставляется ордер на покупку, а затем меняются его SL и TP.

Выдается ошибка: 2013.09.06 00:03:39    Trades    '10022332': failed modify order #0 buy 0.00 GBPUSD at market sl: 0.00000 tp: 0.00000 -> 1.56255, sl: 1.55787 tp: 1.56787 [Invalid request]
Что не так в запросе для изменения уровней?

int Positions;
double delta=0.00500;

MqlTradeRequest  Request;
MqlTradeResult   Result;
MqlTick         InfoTick;


void OnTick()

{
//---

 if(PositionsTotal()==0) // если открытых позиций нет, покупаем
   { 
      
    SymbolInfoTick(_Symbol, InfoTick);
                              
    Request.action=TRADE_ACTION_DEAL;
    Request.symbol=_Symbol;
    Request.volume=1;
    Request.price=InfoTick.bid;
    Request.sl=InfoTick.bid - delta;
    Request.tp=InfoTick.bid + delta;
    Request.deviation=50;
    Request.type=ORDER_TYPE_BUY;
    Request.type_filling=ORDER_FILLING_FOK;
               
    OrderSend(Request, Result);
   
  }else{                                     // меняем уровни
        SymbolInfoTick(_Symbol, InfoTick); 
        
        Request.action=TRADE_ACTION_MODIFY;
        Request.symbol=_Symbol;
        Request.sl=InfoTick.last - delta;
        Request.tp=InfoTick.last + delta;
                          
        OrderSend(Request, Result);
       }
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
agvozdezkiy:

Вот код, где выставляется ордер на покупку, а затем меняются его SL и TP.

Выдается ошибка: 2013.09.06 00:03:39    Trades    '10022332': failed modify order #0 buy 0.00 GBPUSD at market sl: 0.00000 tp: 0.00000 -> 1.56255, sl: 1.55787 tp: 1.56787 [Invalid request]
Что не так в запросе для изменения уровней?

Получите код ошибки для начала.
Причина обращения: