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

 
vladzeit:

***

1. Запрашиваем текущую цену по текущему инструменту.

***

2.1. Если текущая цена - Point >= 100 пунктов, то открываем позицию.  

***

Вы хотите поймать гэп?

 
Vladimir Karputov:

Вы хотите поймать гэп?

Vladimir, к своему стыду, я не уверен что я правильно понимаю что такое   Гэп) 

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

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

Ну вообщем работать с ней, преимущественно для определения точек для входа в рынок.

Я только начал осваивать mql5 преимущественно благодаря Вашим примерам советников, коих Вы пишите много, спасибо Вам)

Как то получается из Ваших примеров складывать свои алгоритмы, но вот с получением текущей цены и её сохранением в переменную запутался.

 
vladzeit:

***

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

***

Нужно понимать, что если Вы на текущем тике запоминаете цену, то на следующем тике эта цена может или совсем не измениться или измениться на очень мизерное количество points.

Поэтому Вам нужно уточнить своё желание:

  • например получать текущую цену раз в N-секунд
  • получать текущую цену только в момент рождения нового бара
  • ...
  • и только потом сравнивать эту цену с предыдущим запомненным значением.

 
Vladimir Karputov:

Нужно понимать, что если Вы на текущем тике запоминаете цену, то на следующем тике эта цена может или совсем не измениться или измениться на очень мизерное количество points.

Поэтому Вам нужно уточнить своё желание:

  • например получать текущую цену раз в N-секунд
  • получать текущую цену только в момент рождения нового бара
  • ...
  • и только потом сравнивать эту цену с предыдущим запомненным значением.

Ммм... Об этих особенностях я не подумал)

  • получать текущую цену только в момент рождения нового бара.
Этот пример мне будет более полезен. 
 
vladzeit:

Ммм... Об этих особенностях я не подумал)

  • получать текущую цену только в момент рождения нового бара.
Этот пример мне будет более полезен. 

Постараюсь вечером (поздно) показать пример.

 

Добрый день!
Пытаюсь ускорить индикатор. Торможение происходит из за того что есть массив с временами который должен сравнивается с индексам бара, здесь то и происходит торможение. Я уже проверял, если  приготовлен массив с индексами и сравниваю с индексам бара то 40К элементов проходит за 7 секунд, но если есть массив с временами то это проходит за 140 секунд. Есть какие то хитрости как ускорить индикатор?

   bool FindArr(int Bar)
     {
      int Size=CheckSizeTime;
      for(int i=restBars; i<Size; i++)
        {
         datetime BarTime=iTime(NULL,PERIOD_CURRENT,Bar);
         if(BarTime==ArrCol.BarTimeArray[i])
           {
            restBars++;
            return(true);
           }
        }
      return(false);
     }
if(prev_calculated==0)         
        for(int i=0;i<rates_total;i++)
           {
            if(Arr.FindArr(i))
              {
               ColorSectionBuffer[i]=low[i];
               ColorSectionColors[i]=0;
              }
            else
              {
               ColorSectionBuffer[i]=0;
               ColorSectionColors[i]=EMPTY_VALUE;
              }
           }
 
vladzeit:

Ммм... Об этих особенностях я не подумал)

  • получать текущую цену только в момент рождения нового бара.
Этот пример мне будет более полезен. 
Vladimir Karputov:

Постараюсь вечером (поздно) показать пример.

Вот для кого-то делал пример получения цен на каждом тике:

//+------------------------------------------------------------------+
//|                                               Display prices.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   Comment("Ask: ",DoubleToString(m_symbol.Ask(),m_symbol.Digits()),"\n",
           "Bid: ",DoubleToString(m_symbol.Bid(),m_symbol.Digits()));
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

Пояснения будут завтра, сегодня я уже спать.

Завтра же и пример будет про новый бар.

Файлы:
 
Vladimir Karputov:

Вот для кого-то делал пример получения цен на каждом тике:

Пояснения будут завтра, сегодня я уже спать.

Завтра же и пример будет про новый бар.

Vladimir, спасибо. С функцией обновления котировок RefreshRates из класса CSymbolInfo я уже немного познакомился. Видел её в Ваших работах, ну и в букваре почитал.

Вызов этой функции в OnTick и вывод значений цен в Comment мне тоже понятны из примера. Процедура в OnInit по проверке текущего символа мне тоже понятна.

Пока буду ждать примера с новым баром, поупражняюсь с Вашим примером, не применял его ещё на практике. Попробую.


 
fxsaber:

Спасибо, исправил.

Спасибо - теперь вроде правильно выдает только директории.

Однако, осознал, что поддиректории отделяются одной "\", в то время как в стандарте MQL предусмотрено две черты "\\". Т.е. код нужен для генерации путей к файлам, а из-за одной косой черты это сделать получается невозможно без дополнительной пост обработки, может есть возможность получать сразу две косые черты?

 
Aleksey Vyazmikin:

Спасибо - теперь вроде правильно выдает только директории.

Однако, осознал, что поддиректории отделяются одной "\", в то время как в стандарте MQL предусмотрено две черты "\\". Т.е. код нужен для генерации путей к файлам, а из-за одной косой черты это сделать получается невозможно без дополнительной пост обработки, может есть возможность получать сразу две косые черты?

Print("\\");
Причина обращения: