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

 
secret:

Еще раз: за сегодня в сделках ошибки. За предыдущие дни ошибок нет.

Чтобы понять в чем ошибка, нужно прогнать в тестере за сегодня. Т.е. ждать до завтра.

При чем здесь "Отладка на исторических данных"? Она точно так же за сегодня не работает.

Если Вы определили "что есть ошибка" - значит Вы точно знаете причину. 

И пожалуйста уже хватит мусолить эту темы: ВАм четко ответили и показали справку: тест не идёт за текущий день.
 
secret:

Еще раз: за сегодня в сделках ошибки. За предыдущие дни ошибок нет.

Чтобы понять в чем ошибка, нужно прогнать в тестере за сегодня. Т.е. ждать до завтра.

При чем здесь "Отладка на исторических данных"? Она точно так же за сегодня не работает.

Вы это писали вчера. И до завтра ждать не нужно уже.

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

Или вы преследуете иную цель? Отвечать не нужно - этот пост - руководство к действию.

 
Кому реально надо тестить за сегодня, найдет на форуме бородатое решение.
 

У меня есть время и цена точек A и В

Как узнать время и цену точки С ?  Она посередине между A и В

Не найду нигде примера


 
EgorKim:

У меня есть время и цена точек A и В

Как узнать время и цену точки С ?  Она посередине между A и В

Не найду нигде примера


//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+
[Удален]  
EgorKim:

У меня есть время и цена точек A и В

Как узнать время и цену точки С ?  Она посередине между A и В

Не найду нигде примера


Время С = Время Б - ( (Время Б - Время А) / 2)

Цена по Времени С

 
Сергей Таболин:

Время С = Время Б - ( (Время Б - Время А) / 2)

Цена по Времени С

Проверил, иногда попадаю на выходные)

А можно как то в самой линии центр узнать?

Вот моя линия

void SetLow(double price_1,double price_2,datetime time_1,datetime time_2)
  {
   ObjectCreate(0,"Low",OBJ_TREND,0,time_2,price_2,time_1,price_1);
   ObjectSetInteger(0,"Low",OBJPROP_COLOR,clrAqua);
   ObjectSetInteger(0,"Low",OBJPROP_WIDTH,2);
   ObjectSetInteger(0,"Low",OBJPROP_STYLE,STYLE_DOT);
   ObjectSetInteger(0,"Low",OBJPROP_BACK,false);
   ObjectSetInteger(0,"Low",OBJPROP_RAY_RIGHT,true);
  }
 
Igor Makanu:

как узнать тикет последнего открытого ордера? так не работает:

Что именно Вы хотите узнать? Нужно четко разделять понятия ОРДЕР, СДЕЛКА и ПОЗИЦИЙ.

Второе: сразу внесли путаницу наименовав объекты торгового класса CTrade словами "order_1" " "order_2". Объекты класса CTrade принято называть "m_trade_1" и "m_trade_2". Это на работоспособность не влияет, но путаницу вносит.

Третье: метод PositionClose не сработает уже только потому, что вы ему передаёте тикет позиции равный нулю (а нулём Вы их инициализируете в OnInit() ) - таких идеальных условий, когда первая позиция имеет тикет "0" можно получить только в тестере.

Четвёртое: метод Buy

Примечание

Успешное окончание работы метода Buy(...) не всегда означает успешное совершение торговой операции. Необходимо проверять результат выполнения торгового запроса ( код возврата торгового сервера) вызовом метода  ResultRetcode(), а также значение, возвращаемое методом ResultDeal().


Метод ResultDeal()

Получает тикет СДЕЛКИ.

 
Vladimir Karputov:

Что именно Вы хотите узнать? Нужно четко разделять понятия ОРДЕР, СДЕЛКА и ПОЗИЦИЙ.

Второе: сразу внесли путаницу наименовав объекты торгового класса CTrade словами "order_1" " "order_2". Объекты класса CTrade принято называть "m_trade_1" и "m_trade_2". Это на работоспособность не влияет, но путаницу вносит.

Третье: метод PositionClose не сработает уже только потому, что вы ему передаёте тикет позиции равный нулю (а нулём Вы их инициализируете в OnInit() ) - таких идеальных условий, когда первая позиция имеет тикет "0" можно получить только в тестере.

Четвёртое: метод Buy

Примечание

Успешное окончание работы метода Buy(...) не всегда означает успешное совершение торговой операции. Необходимо проверять результат выполнения торгового запроса ( код возврата торгового сервера) вызовом метода  ResultRetcode(), а также значение, возвращаемое методом ResultDeal().


Метод ResultDeal()

Получает тикет СДЕЛКИ.

Спасибо! разобрался уже

в общем проблема была от обилия информации, сплетен и возможностей.... была уверенность, что в Result() не смогу поймать тикет, ибо через раз начинают вспоминать событие OnTradeTransaction() ... и понеслось!

сейчас с тестером МТ5 разбираюсь, пока нужны просто воспроизводимые примеры, речи не идет о функциональном коде - пока только тестер

еще раз спасибо за помощь!

такой код может получить тикеты последних ордеров в тестере:

//+------------------------------------------------------------------+
//|                                                   tst_CTrade.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"

input double Lot_1 = 0.10;
input double Lot_2 = 0.20;
input ulong  Magic1 = 12345;
input ulong  Magic2 = 67890;
#include<Trade\Trade.mqh>
CTrade order_1,order_2;
ulong   ticket_1,ticket_2;
//_______________________________________________________________________ 
class CNewbar
  {
private:
   datetime          mnewtime;
   ENUM_TIMEFRAMES   mperiod;
public:
                     CNewbar()                        { mperiod=PERIOD_CURRENT;  mnewtime=TimeCurrent(); }
                     CNewbar(ENUM_TIMEFRAMES period)  { mperiod=period;          mnewtime=TimeCurrent(); }
   bool              NewBar(){ datetime t=iTime(NULL,mperiod,0); if(mnewtime<t){ mnewtime=t; return(true); } return(false);  }
  };
//_______________________________________________________________________ 

CNewbar Bar_H1(PERIOD_H1);
CNewbar Bar_M30(PERIOD_M30);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   order_1.SetExpertMagicNumber(Magic1);
   order_2.SetExpertMagicNumber(Magic2);
   ticket_1 = 0;
   ticket_2 = 0;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Bar_H1.NewBar())
     {
      order_1.PositionClose(ticket_1);
      if(order_1.Buy(Lot_1))
        {
         ticket_1=order_1.ResultOrder();
         Print("NewBar H1, ticket_1 = ",ticket_1);
        }
     }

   if(Bar_M30.NewBar())
     {
      order_2.PositionClose(ticket_2);
      if(order_2.Sell(Lot_2))
        {
         ticket_2=order_2.ResultOrder();
         Print("NewBar M30, ticket_2 = ",ticket_2);
        }
     }
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

Спасибо! разобрался уже

в общем проблема была от обилия информации, сплетен и возможностей.... была уверенность, что в Result() не смогу поймать тикет, ибо через раз начинают вспоминать событие OnTradeTransaction() ... и понеслось!

сейчас с тестером МТ5 разбираюсь, пока нужны просто воспроизводимые примеры, речи не идет о функциональном коде - пока только тестер

еще раз спасибо за помощь!

такой код может получить тикеты последних ордеров в тестере:

Да при помощи ResultOrder получится тикет ордера.