Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2581

 
DanilaMactep #:
Всем добрый день. Продолжаю пробовать реализовать код для перемещения графика к местам открытия ордеров после теста в тестере. Переписал скрипт в индикатор, вот его код.

Кнопки появились, но по их нажатию нужное место на графике не показывается.

Что я делаю не так и как поправить код, чтобы при нажатии кнопок мне на графике отображалось место открытия ордеров от которого рисуется трендовая линия до закрытия ордера?

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

А подход "разберитесь за меня", это больше для фриланса.

 
Tretyakov Rostyslav #:

OrdersHistoryTotal() - учитывает ордера тестера, только во время теста.

Для перемещения по по сделкам после теста надо использовать объекты

спасибо за подсказку- попробую объекты помучить- надеюсь обойдётся без жертв 😋🤓😎😁😁😁😉
 
DanilaMactep #:
спасибо за подсказку- попробую объекты помучить- надеюсь обойдётся без жертв 😋🤓😎😁😁😁😉

Выведи в печать нужные параметры, все станет ясно.

 
DanilaMactep #:
Всем добрый день. Продолжаю пробовать реализовать код для перемещения графика к местам открытия ордеров после теста в тестере. Переписал скрипт в индикатор, вот его код.

Кнопки появились, но по их нажатию нужное место на графике не показывается.

Что я делаю не так и как поправить код, чтобы при нажатии кнопок мне на графике отображалось место открытия ордеров от которого рисуется трендовая линия до закрытия ордера?

Первый мой комм видимо не заметили. Попробую ещё раз, но по другому.

Вот так эта функция не работает.

ChartSetInteger(0, CHART_FIRST_VISIBLE_BAR, barIndex);

В справке это указано


В справочнике MQL5 аббревиатура r/o в столбце «Тип свойства» означает, что свойство предназначено только для чтения и не может быть изменено.
 
DanilaMactep #:
спасибо за подсказку- попробую объекты помучить- надеюсь обойдётся без жертв 😋🤓😎😁😁😁😉

А зачем вам это? Ведь двойной клик по строке 

двигает график к метке открытия или закрытия ордера. Только надо предваоительно отключить автопрокрутку.

 
Добрый день!

Уважаемые опытные программисты, помогите пожалуйста!
Мне нужно отобразить в переменной финансовый результат последней закрытой позиции из истории.

В MQL4 я добился этого так:

for (int i=0; i<OrdersHistoryTotal(); i++)   //создаю цикл проверяет с начала истории
{// Цикл открыт
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))  // выбираю ордер
  {
   double pos=OrderProfit(); // переменная фин. результ.
   if (pos<0) // если этот ордер закрыт c убытком
   {
    То .......
  }
}
}

Как сделать это в MQL5 не понимаю, кучу противоречивой информации перечитал. 

 
Alexey Belyakov #:
Добрый день!

Уважаемые опытные программисты, помогите пожалуйста!
Мне нужно отобразить в переменной финансовый результат последней закрытой позиции из истории.

В MQL4 я добился этого так:

Как сделать это в MQL5 не понимаю, кучу противоречивой информации перечитал. 

Вот функция подсчета профита по тикету. Думаю она даст ответы.

double HistoryProfit(ulong in_ticket_in)
{
        HistorySelect(0, TimeCurrent());
        double profit = 0.0;
        ulong ticket_out = 0;
        for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
        {
                ulong  deal_ticket = HistoryDealGetTicket(i);
                
                if(HistoryDealGetInteger(deal_ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT
                && HistoryDealGetInteger(deal_ticket, DEAL_POSITION_ID) == HistoryDealGetInteger(in_ticket_in, DEAL_POSITION_ID)) 
                {
                        ticket_out = deal_ticket;
                        break;
                }
        }
        profit += HistoryDealGetDouble(ticket_out, DEAL_PROFIT);
        profit += HistoryDealGetDouble(ticket_out, DEAL_SWAP);
        profit += HistoryDealGetDouble(ticket_out, DEAL_COMMISSION);
        profit += HistoryDealGetDouble(ticket_out, DEAL_FEE);
        return profit;
}   
 

Такая попытка......


ulong ticket;
double profit;

for (int i=0; i<HistoryDealsTotal(); i++)  // Цикл перебора ордеров
     {
if  ((ticket=HistoryDealGetTicket(i))>0) // нашли последний закрытый ордер
{
profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);  //-  профит

if (profit<0) // Если "profit" меньше нуля 
{
Print("Закрыт с убытком");
}
else
{
Print("Закрыт с прибылью");
}
}
} 


Попытка завершилась неудачей...

 
Alexey Belyakov #:

Такая попытка......

Попытка завершилась неудачей...

HistorySelect(0, TimeCurrent());
 
Andrei Sokolov #:

Вот функция подсчета профита по тикету. Думаю она даст ответы.

Выглядит интересно, но такая ошибка при компилировании:

"function declarations are allowed on global, namespace or class scope only "

Понимаю, что он от меня хочет -"Объявить функцию на глобальном уровне". ОК.Объявил. И для отображения поставил в конце функции "Print ("ПРОФИТ",profit);


И... ничего не показывает.