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

 

И похоже такой глюк происходит если в рынке есть другие ордера но другого обьема

Допустим у нас 4 селла по 1лоту и 4 бая по 1 лоту. И 1 бай 0.5 лота.

Как это обойти? Нужен цикл наверное какой то в этой функции?

 
EgorKim:

И похоже такой глюк происходит если в рынке есть другие ордера но другого обьема

Допустим у нас 4 селла по 1лоту и 4 бая по 1 лоту. И 1 бай 0.5 лота.

Как это обойти? Нужен цикл наверное какой то в этой функции?

Где-то барабашка пропал. Это его конёк работать через стандартную библиотеку. Я не знаю что выбирает

      if(m_position.SelectByIndex(i))

Да и разбираться лениво.

Я-бы подошёл к решению немного иначе. Создал-бы два массива с тикетами позиций Buy и Sell отдельно и во втором цикле закрывал-бы позиции попарно.

Или можно один двухмерный массив. Но надо внимательно распределить индексы. Чтобы небыло пропусков...

 
Alexey Viktorov:

Где-то барабашка пропал. Это его конёк работать через стандартную библиотеку. Я не знаю что выбирает

Да и разбираться лениво.

Я-бы подошёл к решению немного иначе. Создал-бы два массива с тикетами позиций Buy и Sell отдельно и во втором цикле закрывал-бы позиции попарно.

Или можно один двухмерный массив. Но надо внимательно распределить индексы. Чтобы небыло пропусков...

Я сам думал думал об этом. Можете кодом поделится с двумя массивами? Не могу сам реализовать.

Как временное решение сделал ограниченный цикл. Не знаю насколько этот код правильный но хоть что то. Правда закрывает странно с дроблением лотов.

Видимо ещё и обьемы встречных нужно сравнивать чтобы не было дробления. Все ,сдаюсь

void CloseBy()
  {
   int s=10;
   do // цикл
     {
      s--;
      ulong ticket_buy=ULONG_MAX;
      ulong ticket_sell=ULONG_MAX;
      for(int i=0;i<PositionsTotal();i++) // ATTENTION! Here, specially began a detour with "0"
         if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ticket_buy==ULONG_MAX)
               ticket_buy=m_position.Ticket();

            if(m_position.PositionType()==POSITION_TYPE_SELL && ticket_sell==ULONG_MAX)
               ticket_sell=m_position.Ticket();
           }
      if(ticket_buy!=ULONG_MAX && ticket_sell!=ULONG_MAX)
         m_trade.PositionCloseBy(ticket_buy,ticket_sell);
     }
   while(s>1);// цикл
   return;
  }
 
EgorKim:

Я сам думал думал об этом. Можете кодом поделится с двумя массивами?

Нет, по нескольким причинам.

1. Сам я не пользуюсь встречным закрытием.

2. Готового кода нет, а писать специально никакого желания.

3. Вчера у меня была такая мысль. Даже две. А сегодня другая, завтра, не дай Бог, будет ещё одна. Соответственно пишу только то, что в настоящий момент в голове.

И самая основная причина - считаю что помочь и сделать чужую работу, это две большие разницы.

Я могу только помогать. Но помогать вам, у меня не получится, я почти не пользуюсь стандартной библиотекой и мне чтобы разобраться в вашем коде, надо разобраться в СБ.

 

Всем привет

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

например с 1:00 до 2:35 по терминальному времени, Причем этот выбор надо делать мышкой прямо на графике. 


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

 
Milhail Novgorodcev:

Всем привет

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

например с 1:00 до 2:35 по терминальному времени, Причем этот выбор надо делать мышкой прямо на графике. 


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

Первое что пришло на ум:

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

 
Milhail Novgorodcev:

Всем привет

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

например с 1:00 до 2:35 по терминальному времени, Причем этот выбор надо делать мышкой прямо на графике. 


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

И в чём проблема?

В OnChartEvent() двум переменным, поочерёдно присваивается время клика мышкой в двух точках (не текущее время, а время бара по которому тыкнули) и при условии что обе переменные не равны нулю делается подсчёт в этом диапазоне. После вывода полученных значений эти переменные обнуляются и ждут следующего клика мышки.

Проблема видится только одна, если первый клик сделан ошибочно, как его отменить. Но, я думаю можно что-то придумать внимательно почитав документацию. Например нажатие какой либо клавиши или прокрутка колёсика мышки...

 

Помогите пожалуйста!

Замучился уже править скрипт на снятие скриншотов на истории. Скрипт должен прокрутить на 8 утра каждого дня и сделать скриншот.

Скрипт не работает как нужно.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ChartSetInteger(0,CHART_SHIFT,false);
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
   int _bars=Bars(Symbol(),0);
 
   for(int i=0; i<_bars; i++)
     {
      MqlDateTime time_now;
      //datetime candle_time=iTime(NULL,_period,0);
      TimeToStruct(iTime(NULL,_Period,i),time_now);  // change time to struct

      if(time_now.hour==8 && time_now.min==0)
        {
         //--- прокрутим на 10 баров вправо от начала истории 
         ChartNavigate(0,CHART_BEGIN,i);
         Sleep(5000);
         //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
         long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
         Print(first_bar);
         string name=_Sumbol_N(string(Symbol()))+"_"+Symbol()+"_"+TFMigrate(Period())+" "+string(time_now.year)+"."+string(time_now.mon)+"."+string(time_now.day)+" "+string(time_now.hour)+"."+string(time_now.min);

         ChartScreenShot(0,name+" 2560_1600.PNG",2560,1600,ALIGN_LEFT);
         //i=5;
        };
     };

//Print(iTime(NULL,_Period,0));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string _Sumbol_N(string ft)
  {
   if(ft ==  "EURUSD" ) return("01");
   if(ft ==  "GBPUSD" ) return("02");

   return "";
  }
//+------------------------------------------------------------------+
string TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return("CURRENT");
      case 1: return("M1");
      case 5: return("M5");
      case 15: return("M15");
      case 30: return("M30");
      case 60: return("H1");
      case 240: return("H4");
      case 1440: return("D1");
      case 10080: return("W1");
      case 43200: return("MN1");

     }
  }
//+------------------------------------------------------------------+
 
oleg360:

Помогите пожалуйста!

Замучился уже править скрипт на снятие скриншотов на истории. Скрипт должен прокрутить на 8 утра каждого дня и сделать скриншот.

Скрипт не работает как нужно.

Пока функция прокрутки работает со сбоями (точнее работает непредсказуемо). Администратор разбирается. 

 
Vladimir Karputov:

Пока функция прокрутки работает со сбоями (точнее работает непредсказуемо). Администратор разбирается. 

Спасибо!

Причина обращения: