Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
13.05.2017, 15:46
Лучший ответ
Накопленные выплаты: 182 RUB
Сообщение от traderEvgen Посмотреть сообщение
Нужно что-бы эксперт отправлял сообщения после каждой открытой и закрытой сделки в терминале. Сделки открывает не этот эксперт а другие. Возможно открытие и закрытие сделок вручную. После этого тоже должно быть сообщение. Думаю тема не из новых, возможно уже есть готовое решение. Если кто знает, поделитесь пожалуйста.

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

MQL код:
int    OpenOrderTicket;
int CloseOrderTicket;
double MaxLot = 3;

//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTick()
{
int type;
string stype;
string message;
string symbol;
double open_price;
double profit;
double close_price;
double lot;
double sl;
double tp;
double digits;

int ticket = GetTicketLastPos();
if(OpenOrderTicket != ticket)
{
OpenOrderTicket = ticket;
if(OrderSelect(ticket, SELECT_BY_TICKET))
{
symbol = OrderSymbol();
digits = MarketInfo(symbol, MODE_DIGITS);
open_price = NormalizeDouble(OrderOpenPrice(), digits);
lot = OrderLots();
sl = NormalizeDouble(OrderStopLoss(), digits);
tp = NormalizeDouble(OrderTakeProfit(), digits);
type = OrderType();


if(type == OP_BUY) stype = "BUY";
if(type == OP_SELL) stype = "SELL";
if(type == OP_BUYLIMIT) stype = "BUYLIMIT";
if(type == OP_SELLLIMIT) stype = "SELLLIMIT";
if(type == OP_BUYSTOP) stype = "BUYSTOP";
if(type == OP_SELLSTOP) stype = "SELLSTOP";

message = "Відкрито ордер " + stype + " по " + symbol + " price = " + open_price + " lot = " + lot + " sl = " + sl + " tp = " + tp;
SendMail("експерт", message);
Print(message);
if(lot >= MaxLot) CloseOrder(ticket);
}
}

int close_ticket = GetLastOrderHist();
if(close_ticket != CloseOrderTicket)
{
CloseOrderTicket = close_ticket;
if(OrderSelect(close_ticket, SELECT_BY_TICKET))
{

symbol = OrderSymbol();
digits = MarketInfo(symbol, MODE_DIGITS);
close_price = NormalizeDouble(OrderClosePrice(), digits);
lot = OrderLots();
sl = NormalizeDouble(OrderStopLoss(), digits);
tp = NormalizeDouble(OrderTakeProfit(), digits);
type = OrderType();
profit = NormalizeDouble(OrderProfit(), digits);

if(type == OP_BUY) stype = "BUY";
if(type == OP_SELL) stype = "SELL";
if(type == OP_BUYLIMIT) stype = "BUYLIMIT";
if(type == OP_SELLLIMIT) stype = "SELLLIMIT";
if(type == OP_BUYSTOP) stype = "BUYSTOP";
if(type == OP_SELLSTOP) stype = "SELLSTOP";

message = "Закрито ордер " + stype + " по " + symbol + " close_price = " + close_price + " lot = " + lot + " sl = " + sl + " tp = " + tp
+ " profit = " + profit + "$";
SendMail("експерт", message);
Print(message);
}
}

}

//+------------------------------------------------------------------+

// Описание : Возвращает тикет последней открытой позиции или -1
int GetTicketLastPos()
{
datetime o;
int i, k=OrdersTotal(), r=-1;

for (i=0; i<k; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (o<OrderOpenTime())
{
o=OrderOpenTime();
r=OrderTicket();
}
}
}
return(r);
}


//Получить тикет последнего закрытого ордера из истории.
//Если тип ордера не указан, берется самый последний ордер любого типа.
//Если ордеров, отвечающих указанным критерию не найдено, возвращает -1.
int GetLastOrderHist(int type = -1)
{
int ticket = -1;
datetime dt = 0;
int cnt = OrdersHistoryTotal();

for (int i=0; i < cnt; i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderCloseTime() > dt)
{
dt = OrderCloseTime();
ticket = OrderTicket();
}
}

return (ticket);
}

void CloseOrder(int ticket)
{
RefreshRates();
if(OrderSelect(ticket, SELECT_BY_TICKET))
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(Or derSymbol(), MODE_BID),10,0);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),O rderLots(),MarketInfo(OrderSymbol(), MODE_ASK),10,0);
}
Вопрос решается просто, если тебя задержка на время, намного меньше, чем задержка по времени прихода тика не напрягает, то весть свой код перенеси в функцию ОнТаймер(), и определись с самим таймером, его значением. Т.е., через какое время таймер должен сработать, одна десятая секунды, секунда, минута.
22.05.2017, 13:25
Лучший ответ
Сообщение от MonyaMaker Посмотреть сообщение
Вопрос решается просто, если тебя задержка на время, намного меньше, чем задержка по времени прихода тика не напрягает, то весть свой код перенеси в функцию ОнТаймер(), и определись с самим таймером, его значением. Т.е., через какое время таймер должен сработать, одна десятая секунды, секунда, минута.
Ерунда всё это! Таймер не поможет если сам алгоритм в функциях неверный!
Сообщение от traderEvgen Посмотреть сообщение
Если запустить на каком-то символе, и долгое время не будет тика по этому символу, то за все это время можно открыть кучу позиций и закрыть их (по других инструментах), а советник увидит только последнюю позицию и отправит ее в сообщении.
Естественно только последнюю, ведь даже функция так называется!
Сообщение от traderEvgen Посмотреть сообщение
MQL код:
// Описание : Возвращает тикет последней открытой позиции или -1  
int GetTicketLastPos()
{
datetime o;
int i, k=OrdersTotal(), r=-1;

for (i=0; i<k; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (o<OrderOpenTime())
{
o=OrderOpenTime();
r=OrderTicket();
}
}
}
return(r);
}
Почему бы не собрать все тикеты ордеров в файлик или хотя бы массив структуры! Как пример:
MQL код:
struct info
{
int Ticket;
bool Closed;
} Orders[];

А потом просто отслеживать его актуальность, появились новые ордера которых нет в массиве - отправить сообщение о том что открыты новые ордера и добавить тикет в массив, если в истории появились ордера с тикетами из массива - отправить сообщение о том что закрылся ордер и повесить флаг на тикет!
22.05.2017, 13:57
Лучший ответ
Накопленные выплаты: 182 RUB
Сообщение от Viktor1987 Посмотреть сообщение
Ерунда всё это! Таймер не поможет если сам алгоритм в функциях неверный!

Естественно только последнюю, ведь даже функция так называется!

Почему бы не собрать все тикеты ордеров в файлик или хотя бы массив структуры! Как пример:
MQL код:
struct info
{
int Ticket;
bool Closed;
} Orders[];

А потом просто отслеживать его актуальность, появились новые ордера которых нет в массиве - отправить сообщение о том что открыты новые ордера и добавить тикет в массив, если в истории появились ордера с тикетами из массива - отправить сообщение о том что закрылся ордер и повесить флаг на тикет!
Микросекундный таймер, решит, если не углубляться в детали.
Ну а логика в коде, на совести автора. И повод научиться работать с ордерами.
22.05.2017, 14:22
Лучший ответ
Сообщение от MonyaMaker Посмотреть сообщение
Микросекундный таймер, решит, если не углубляться в детали.
Ну а логика в коде, на совести автора. И повод научиться работать с ордерами.
Ну зачем ходить вокруг да около, я бы такого совета не давал! ИМХО
22.05.2017, 14:24
Лучший ответ
Накопленные выплаты: 182 RUB
Сообщение от Viktor1987 Посмотреть сообщение
Ну зачем ходить вокруг да около, я бы такого совета не давал! ИМХО
Какого конкретно?
22.05.2017, 14:26
Лучший ответ
Сообщение от MonyaMaker Посмотреть сообщение
Какого конкретно?
Такого!
Сообщение от MonyaMaker Посмотреть сообщение
Вопрос решается просто, если тебя задержка на время, намного меньше, чем задержка по времени прихода тика не напрягает, то весть свой код перенеси в функцию ОнТаймер(), и определись с самим таймером, его значением. Т.е., через какое время таймер должен сработать, одна десятая секунды, секунда, минута.
По мне такие ответы только в сторону от нормального решения уводят! Уж лучше сразу сказать человеку, что он неверно мыслит изначально!
  • #1 Свернуть

    Уведомление о каждой открытой и закрытой сделки

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

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

    MQL код:
    int    OpenOrderTicket;
    int CloseOrderTicket;
    double MaxLot = 3;

    //+------------------------------------------------------------------+
    int OnInit()
    {
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    void OnTick()
    {
    int type;
    string stype;
    string message;
    string symbol;
    double open_price;
    double profit;
    double close_price;
    double lot;
    double sl;
    double tp;
    double digits;

    int ticket = GetTicketLastPos();
    if(OpenOrderTicket != ticket)
    {
    OpenOrderTicket = ticket;
    if(OrderSelect(ticket, SELECT_BY_TICKET))
    {
    symbol = OrderSymbol();
    digits = MarketInfo(symbol, MODE_DIGITS);
    open_price = NormalizeDouble(OrderOpenPrice(), digits);
    lot = OrderLots();
    sl = NormalizeDouble(OrderStopLoss(), digits);
    tp = NormalizeDouble(OrderTakeProfit(), digits);
    type = OrderType();


    if(type == OP_BUY) stype = "BUY";
    if(type == OP_SELL) stype = "SELL";
    if(type == OP_BUYLIMIT) stype = "BUYLIMIT";
    if(type == OP_SELLLIMIT) stype = "SELLLIMIT";
    if(type == OP_BUYSTOP) stype = "BUYSTOP";
    if(type == OP_SELLSTOP) stype = "SELLSTOP";

    message = "Відкрито ордер " + stype + " по " + symbol + " price = " + open_price + " lot = " + lot + " sl = " + sl + " tp = " + tp;
    SendMail("експерт", message);
    Print(message);
    if(lot >= MaxLot) CloseOrder(ticket);
    }
    }

    int close_ticket = GetLastOrderHist();
    if(close_ticket != CloseOrderTicket)
    {
    CloseOrderTicket = close_ticket;
    if(OrderSelect(close_ticket, SELECT_BY_TICKET))
    {

    symbol = OrderSymbol();
    digits = MarketInfo(symbol, MODE_DIGITS);
    close_price = NormalizeDouble(OrderClosePrice(), digits);
    lot = OrderLots();
    sl = NormalizeDouble(OrderStopLoss(), digits);
    tp = NormalizeDouble(OrderTakeProfit(), digits);
    type = OrderType();
    profit = NormalizeDouble(OrderProfit(), digits);

    if(type == OP_BUY) stype = "BUY";
    if(type == OP_SELL) stype = "SELL";
    if(type == OP_BUYLIMIT) stype = "BUYLIMIT";
    if(type == OP_SELLLIMIT) stype = "SELLLIMIT";
    if(type == OP_BUYSTOP) stype = "BUYSTOP";
    if(type == OP_SELLSTOP) stype = "SELLSTOP";

    message = "Закрито ордер " + stype + " по " + symbol + " close_price = " + close_price + " lot = " + lot + " sl = " + sl + " tp = " + tp
    + " profit = " + profit + "$";
    SendMail("експерт", message);
    Print(message);
    }
    }

    }

    //+------------------------------------------------------------------+

    // Описание : Возвращает тикет последней открытой позиции или -1
    int GetTicketLastPos()
    {
    datetime o;
    int i, k=OrdersTotal(), r=-1;

    for (i=0; i<k; i++)
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
    if (o<OrderOpenTime())
    {
    o=OrderOpenTime();
    r=OrderTicket();
    }
    }
    }
    return(r);
    }


    //Получить тикет последнего закрытого ордера из истории.
    //Если тип ордера не указан, берется самый последний ордер любого типа.
    //Если ордеров, отвечающих указанным критерию не найдено, возвращает -1.
    int GetLastOrderHist(int type = -1)
    {
    int ticket = -1;
    datetime dt = 0;
    int cnt = OrdersHistoryTotal();

    for (int i=0; i < cnt; i++)
    {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
    if (OrderCloseTime() > dt)
    {
    dt = OrderCloseTime();
    ticket = OrderTicket();
    }
    }

    return (ticket);
    }

    void CloseOrder(int ticket)
    {
    RefreshRates();
    if(OrderSelect(ticket, SELECT_BY_TICKET))
    if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(Or derSymbol(), MODE_BID),10,0);
    if(OrderType()==OP_SELL)OrderClose(OrderTicket(),O rderLots(),MarketInfo(OrderSymbol(), MODE_ASK),10,0);
    }
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

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

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

    MQL код:
    int    OpenOrderTicket;
    int CloseOrderTicket;
    double MaxLot = 3;

    //+------------------------------------------------------------------+
    int OnInit()
    {
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    void OnTick()
    {
    int type;
    string stype;
    string message;
    string symbol;
    double open_price;
    double profit;
    double close_price;
    double lot;
    double sl;
    double tp;
    double digits;

    int ticket = GetTicketLastPos();
    if(OpenOrderTicket != ticket)
    {
    OpenOrderTicket = ticket;
    if(OrderSelect(ticket, SELECT_BY_TICKET))
    {
    symbol = OrderSymbol();
    digits = MarketInfo(symbol, MODE_DIGITS);
    open_price = NormalizeDouble(OrderOpenPrice(), digits);
    lot = OrderLots();
    sl = NormalizeDouble(OrderStopLoss(), digits);
    tp = NormalizeDouble(OrderTakeProfit(), digits);
    type = OrderType();


    if(type == OP_BUY) stype = "BUY";
    if(type == OP_SELL) stype = "SELL";
    if(type == OP_BUYLIMIT) stype = "BUYLIMIT";
    if(type == OP_SELLLIMIT) stype = "SELLLIMIT";
    if(type == OP_BUYSTOP) stype = "BUYSTOP";
    if(type == OP_SELLSTOP) stype = "SELLSTOP";

    message = "Відкрито ордер " + stype + " по " + symbol + " price = " + open_price + " lot = " + lot + " sl = " + sl + " tp = " + tp;
    SendMail("експерт", message);
    Print(message);
    if(lot >= MaxLot) CloseOrder(ticket);
    }
    }

    int close_ticket = GetLastOrderHist();
    if(close_ticket != CloseOrderTicket)
    {
    CloseOrderTicket = close_ticket;
    if(OrderSelect(close_ticket, SELECT_BY_TICKET))
    {

    symbol = OrderSymbol();
    digits = MarketInfo(symbol, MODE_DIGITS);
    close_price = NormalizeDouble(OrderClosePrice(), digits);
    lot = OrderLots();
    sl = NormalizeDouble(OrderStopLoss(), digits);
    tp = NormalizeDouble(OrderTakeProfit(), digits);
    type = OrderType();
    profit = NormalizeDouble(OrderProfit(), digits);

    if(type == OP_BUY) stype = "BUY";
    if(type == OP_SELL) stype = "SELL";
    if(type == OP_BUYLIMIT) stype = "BUYLIMIT";
    if(type == OP_SELLLIMIT) stype = "SELLLIMIT";
    if(type == OP_BUYSTOP) stype = "BUYSTOP";
    if(type == OP_SELLSTOP) stype = "SELLSTOP";

    message = "Закрито ордер " + stype + " по " + symbol + " close_price = " + close_price + " lot = " + lot + " sl = " + sl + " tp = " + tp
    + " profit = " + profit + "$";
    SendMail("експерт", message);
    Print(message);
    }
    }

    }

    //+------------------------------------------------------------------+

    // Описание : Возвращает тикет последней открытой позиции или -1
    int GetTicketLastPos()
    {
    datetime o;
    int i, k=OrdersTotal(), r=-1;

    for (i=0; i<k; i++)
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
    if (o<OrderOpenTime())
    {
    o=OrderOpenTime();
    r=OrderTicket();
    }
    }
    }
    return(r);
    }


    //Получить тикет последнего закрытого ордера из истории.
    //Если тип ордера не указан, берется самый последний ордер любого типа.
    //Если ордеров, отвечающих указанным критерию не найдено, возвращает -1.
    int GetLastOrderHist(int type = -1)
    {
    int ticket = -1;
    datetime dt = 0;
    int cnt = OrdersHistoryTotal();

    for (int i=0; i < cnt; i++)
    {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
    if (OrderCloseTime() > dt)
    {
    dt = OrderCloseTime();
    ticket = OrderTicket();
    }
    }

    return (ticket);
    }

    void CloseOrder(int ticket)
    {
    RefreshRates();
    if(OrderSelect(ticket, SELECT_BY_TICKET))
    if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(Or derSymbol(), MODE_BID),10,0);
    if(OrderType()==OP_SELL)OrderClose(OrderTicket(),O rderLots(),MarketInfo(OrderSymbol(), MODE_ASK),10,0);
    }
    Вопрос решается просто, если тебя задержка на время, намного меньше, чем задержка по времени прихода тика не напрягает, то весть свой код перенеси в функцию ОнТаймер(), и определись с самим таймером, его значением. Т.е., через какое время таймер должен сработать, одна десятая секунды, секунда, минута.

    Комментарий

    • #3 Свернуть

      Сообщение от MonyaMaker Посмотреть сообщение
      Вопрос решается просто, если тебя задержка на время, намного меньше, чем задержка по времени прихода тика не напрягает, то весть свой код перенеси в функцию ОнТаймер(), и определись с самим таймером, его значением. Т.е., через какое время таймер должен сработать, одна десятая секунды, секунда, минута.
      Ерунда всё это! Таймер не поможет если сам алгоритм в функциях неверный!
      Сообщение от traderEvgen Посмотреть сообщение
      Если запустить на каком-то символе, и долгое время не будет тика по этому символу, то за все это время можно открыть кучу позиций и закрыть их (по других инструментах), а советник увидит только последнюю позицию и отправит ее в сообщении.
      Естественно только последнюю, ведь даже функция так называется!
      Сообщение от traderEvgen Посмотреть сообщение
      MQL код:
      // Описание : Возвращает тикет последней открытой позиции или -1  
      int GetTicketLastPos()
      {
      datetime o;
      int i, k=OrdersTotal(), r=-1;

      for (i=0; i<k; i++)
      {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if (o<OrderOpenTime())
      {
      o=OrderOpenTime();
      r=OrderTicket();
      }
      }
      }
      return(r);
      }
      Почему бы не собрать все тикеты ордеров в файлик или хотя бы массив структуры! Как пример:
      MQL код:
      struct info
      {
      int Ticket;
      bool Closed;
      } Orders[];

      А потом просто отслеживать его актуальность, появились новые ордера которых нет в массиве - отправить сообщение о том что открыты новые ордера и добавить тикет в массив, если в истории появились ордера с тикетами из массива - отправить сообщение о том что закрылся ордер и повесить флаг на тикет!
      "Правила рынка" (с)

      Комментарий

      • #4 Свернуть

        Сообщение от Viktor1987 Посмотреть сообщение
        Ерунда всё это! Таймер не поможет если сам алгоритм в функциях неверный!

        Естественно только последнюю, ведь даже функция так называется!

        Почему бы не собрать все тикеты ордеров в файлик или хотя бы массив структуры! Как пример:
        MQL код:
        struct info
        {
        int Ticket;
        bool Closed;
        } Orders[];

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

        Комментарий

        • #5 Свернуть

          Сообщение от MonyaMaker Посмотреть сообщение
          Микросекундный таймер, решит, если не углубляться в детали.
          Ну а логика в коде, на совести автора. И повод научиться работать с ордерами.
          Ну зачем ходить вокруг да около, я бы такого совета не давал! ИМХО
          "Правила рынка" (с)

          Комментарий

          • #6 Свернуть

            Сообщение от Viktor1987 Посмотреть сообщение
            Ну зачем ходить вокруг да около, я бы такого совета не давал! ИМХО
            Какого конкретно?

            Комментарий

            • #7 Свернуть

              Сообщение от MonyaMaker Посмотреть сообщение
              Какого конкретно?
              Такого!
              Сообщение от MonyaMaker Посмотреть сообщение
              Вопрос решается просто, если тебя задержка на время, намного меньше, чем задержка по времени прихода тика не напрягает, то весть свой код перенеси в функцию ОнТаймер(), и определись с самим таймером, его значением. Т.е., через какое время таймер должен сработать, одна десятая секунды, секунда, минута.
              По мне такие ответы только в сторону от нормального решения уводят! Уж лучше сразу сказать человеку, что он неверно мыслит изначально!
              "Правила рынка" (с)

              Комментарий

              • #8 Свернуть

                Сообщение от Viktor1987 Посмотреть сообщение
                Такого!

                По мне такие ответы только в сторону от нормального решения уводят! Уж лучше сразу сказать человеку, что он неверно мыслит изначально!
                Нормальное решение, и нормальный совет - это переписать всё, и ты считаешь, что человек соорудил код, копируя его по частям из разных источников, поймёт почему?
                То что тебе очевидно и понятно, и ты на этом не одну граблю поймал, другому не под силу понять сразу, пока он не сделает свои ошибки, и не поймёт, что к чему, зачем и почему.
                Ты где то у него в коде структуры видишь?!! Массивы видишь?!!
                Напиши готовый код и отдай, и решение по дальнейшему обучению для человека, будет следующим - задача решена, чего дальше напрягаться?

                Комментарий

                • #9 Свернуть

                  Сообщение от MonyaMaker Посмотреть сообщение
                  Нормальное решение, и нормальный совет - это переписать всё, и ты считаешь, что человек соорудил код, копируя его по частям из разных источников, поймёт почему?
                  То что тебе очевидно и понятно, и ты на этом не одну граблю поймал, другому не под силу понять сразу, пока он не сделает свои ошибки, и не поймёт, что к чему, зачем и почему.
                  Ты где то у него в коде структуры видишь?!! Массивы видишь?!!
                  Напиши готовый код и отдай, и решение по дальнейшему обучению для человека, будет следующим - задача решена, чего дальше напрягаться?
                  А кто готовый код дал? Я?? Да ни за что!!! Мне тупо лень!!! А вот наводку дать, это всегда пожалуйста! Да и как ты верно заметил: НЕТ у человека в коде ни структур ни массивов! И не появится, если будут советы про таймер! А так вдруг человек захочет узнать что-то новое!? А!?
                  "Правила рынка" (с)

                  Комментарий

                  • #10 Свернуть

                    Сообщение от Viktor1987 Посмотреть сообщение
                    А кто готовый код дал? Я?? Да ни за что!!! Мне тупо лень!!! А вот наводку дать, это всегда пожалуйста! Да и как ты верно заметил: НЕТ у человека в коде ни структур ни массивов! И не появится, если будут советы про таймер! А так вдруг человек захочет узнать что-то новое!? А!?
                    Когда у него передоз переменными будет для начала, тогда и возникнет реальное желание бардак немного причесать, и ознакомиться со способами как это можно ещё сделать.
                    Тебя таймер зацепил за живое?
                    Я вот попробовал сам написать, но есть одна проблемка Если запустить на каком-то символе, и долгое время не будет тика по этому символу, то за все это время можно открыть кучу позиций и закрыть их (по других инструментах), а советник увидит только последнюю позицию и отправит ее в сообщении.
                    Перечитай часть первичного поста и предложи своё решение. Для текущих условий. Логику мы уже обсудили.

                    Комментарий

                    • #11 Свернуть

                      Сообщение от MonyaMaker Посмотреть сообщение
                      Тебя таймер зацепил за живое?
                      Есть тут на форуме умный человек....
                      Сообщение от ir0407 Посмотреть сообщение
                      Обижаются тут в основном либо бездари либо ленивые. Ну с бездарями все понятно, а ленивым, которые нахватавшись вершков возмнили себя великими, просто в лом залезть в гугль и слегка поднять свой общеобразовательный уровень. Вот сколько общаюсь тут с людьми, если человек хоть что-то понимает в коде, он никогда не обижается ни на какие технические "подколки" в свой адрес, а те кто вообще "ни в зуб ногой" самые обидчивые.
                      Сообщение от MonyaMaker Посмотреть сообщение
                      Перечитай часть первичного поста и предложи своё решение. Логику мы уже обсудили.
                      А это что?
                      Сообщение от Viktor1987 Посмотреть сообщение
                      Естественно только последнюю, ведь даже функция так называется!
                      MQL код:
                      // Описание : Возвращает тикет последней открытой позиции или -1  
                      int GetTicketLastPos()
                      {
                      datetime o;
                      int i, k=OrdersTotal(), r=-1;

                      for (i=0; i<k; i++)
                      {
                      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
                      {
                      if (o<OrderOpenTime())
                      {
                      o=OrderOpenTime();
                      r=OrderTicket();
                      }
                      }
                      }
                      return(r);
                      }

                      Почему бы не собрать все тикеты ордеров в файлик или хотя бы массив структуры! Как пример:
                      MQL код:
                      struct info
                      {
                      int Ticket;
                      bool Closed;
                      } Orders[];

                      А потом просто отслеживать его актуальность, появились новые ордера которых нет в массиве - отправить сообщение о том что открыты новые ордера и добавить тикет в массив, если в истории появились ордера с тикетами из массива - отправить сообщение о том что закрылся ордер и повесить флаг на тикет!
                      "Правила рынка" (с)

                      Комментарий

                      • #12 Свернуть

                        Сообщение от Viktor1987 Посмотреть сообщение
                        Есть тут на форуме умный человек....


                        А это что?
                        С вновь открытыми позициями понятно, а закрытие, а отложки вошедшие в рынок, нет же уточнений.
                        Ты про кого то умного рассказываешь, ну поведи себя так.
                        Ты что обиделся?
                        Выбор теперь за человеком. Почитает, посмотрит решение для себя примет.

                        Комментарий

                        • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                        • #13 Свернуть

                          Сообщение от MonyaMaker Посмотреть сообщение
                          Почитает, посмотрит решение для себя примет.
                          На том и порешили!
                          "Правила рынка" (с)

                          Комментарий

                          X