Características da linguagem mql5, subtilezas e técnicas - página 45

 
Alexey Viktorov:

Talvez sirva? Embora o forex nem sempre o mostre corretamente.

mostra valor errado, por exemplo para SBRF-9.17 hora de término do pregão na sexta-feira == 23:45:00 de acordo com o gráfico de minutos, e esta função mostra 00:00:00, de acordo com as informações do horário de término do pregão noturno da bolsa às 23:50

Não creio que o ponto principal seja a possibilidade de criar cheques onde estamos e usar constantes, mas talvez alguém já tenha implementado esta funcionalidade e eu não tenha de escrever a minha própria bicicleta.
 
Alexey Viktorov:

Não há dependência e não pode haver uma. Portanto, não pode haver um código especial.

Os desenvolvedores não usam o LFO em tais casos. Os algoritmos são claros - repetíveis.

 
Konstantin:

No mercado de futuros, como determinar a hora de fecho do mercado do dia anterior em diferentes variantes de encontrar o intervalo de tempo actual:

1. estamos no intervalo de sábado a domingo, precisamos da hora de encerramento da sessão comercial de sexta-feira à noite
2. Estamos no mercado fechado de segunda a sexta-feira; precisamos da hora de encerramento da sessão da noite de segunda a quinta-feira.
3. No intervalo de negociação de segunda a sexta-feira; precisamos de tempo de fecho para a sessão de negociação de sexta-feira à noite
4. No horário de terça a sexta-feira, precisamos do horário de encerramento das sessões de segunda a quinta-feira à noite.

Talvez alguém escreveu uma funcionalidade semelhante, eu não quero reinventar a roda ))

Acho que não há muito mais flexibilidade do que constantes:

/*!
   \brief   Расчет конечной даты запроса
*/
datetime CVolumeCluster::CalcStopDate(void) {
   MqlDateTime _date;
   datetime _time_t = TimeTradeServer(_date);

   if(_date.hour == 23 && _date.min >= 44) {          // определяем время окончания торговой сессии
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      _time_t    = StructToTime(_date);
   } else {
      TimeToStruct(_time_t - 86400, _date);
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      if(_date.day_of_week == 0 || _date.day_of_week == 6)
         _date.day_of_week = 5;
      _time_t = StructToTime(_date);
   }
//---
   return _time_t;
}
 

aconselhar quem trabalha com a classe CCanvas, como fazer a atualização da marca gráfica menos intensiva em recursos, por exemplo, temos algumas centenas de milhares de linhas no marcador gráfico, quando redimensionamos temos que repintar cada linha no marcador gráfico, porque sem repintar simplesmente redimensionando, as linhas no gráfico não são exibidas, embora o objeto da marca gráfica mude seu tamanho

 
Konstantin:

provavelmente não há nada mais flexível do que constantes:

Isso não é mais fácil?

/********************Script program start function*******************/
void OnStart()
{
 datetime timeArray[1], barArray[1];
 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);
 Print(barArray[0];
}/*******************************************************************/
 
Alexey Viktorov:

Isto não é mais fácil?

 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);              // время текущего дня 00:00:00
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);  // время открытия - 1 секунду

o resultado é basicamente correcto )) obrigado

 
Agora (1626) não está funcionando

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Peculiaridades da linguagem mql5, sutilezas e truques

fxsaber, 2017.05.05 23:48

// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
  const class CLASS_TMP {} Tmp;
  
  return((int)::StringFormat("%d", &Tmp) - 1);
}
Exemplo de aplicação
int OnInit()
{
  if (GetAmountObjects() > 0)
    Print("До " + __FUNCSIG__ + " были вызваны конструкторы!");

  return(INIT_SUCCEEDED);
}
 
// Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define  TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define  TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

void OnTradeTransaction(   const MqlTradeTransaction&, const MqlTradeRequest& Request, const MqlTradeResult& )
{
  if (Request.action)
    Print(ToString(Request));
}

Se houver um problema com o mesmo Filling, execute este EA e crie a ordem que você quer manualmente (F9 no terminal). O pedido comercial gerado será impresso pela EA.

Infelizmente, é problemático fazer isto em contas reais. Os desenvolvedores rejeitaram a sugestão.

 
fxsaber:

Se houver um problema com o mesmo Filling, execute este EA e crie a ordem que você quer manualmente (F9 no terminal). O pedido comercial gerado será impresso pela EA.

A única coisa que falta é um exemplo de como funciona

 
Rashid Umarov:

O que nós precisamos é de um exemplo de como funciona.

Expor manualmente


Recebemos o pedido comercial gerado no registo

Request.action = TRADE_ACTION_PENDING (5)
Request.magic = 0
Request.order = 157092716
Request.symbol = EURUSD
Request.volume = 0.01
Request.price = 1.13941
Request.stoplimit = 0.0
Request.sl = 1.13926
Request.tp = 1.13955
Request.deviation = 0
Request.type = ORDER_TYPE_BUY_LIMIT (2)
Request.type_filling = ORDER_FILLING_RETURN (2)
Request.type_time = ORDER_TIME_SPECIFIED (2)
Request.expiration = 2017.07.11 12:08:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Infelizmente, é muito caro para os verdadeiros comerciantes. Foi por isso que eu fiz uma proposta.