Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1050

 

Como acrescentar minutos ao bloco de horas do conselheiro?

//input parametrs
input uchar                InpStartHour            = 1;           // Start hour
input uchar                InpEndHour              = 23;           // End hour

//---------------------------

void OnTick()
  { 
   MqlDateTime STimeCurrent;
   TimeToStruct(TimeCurrent(),STimeCurrent);
  
   if(STimeCurrent.hour<InpStartHour || STimeCurrent.hour>InpEndHour)
      return;
   }

 
Vladimir Baskakov:

Como acrescentar minutos ao bloco horário de uma EA?

Estratégia High Low On Time 2:

O bool TimeControl() é uma função responsável pela verificação do tempo. Pode funcionar em dois estados: ambas as datas dentro de um dia ou datas ao longo de um dia.

//--- input parameters
***
input bool     InpTimeControl       = true;        // Use time control
input uchar    InpStartHour         = 10;          // Start Hour 
input uchar    InpStartMinute       = 01;          // Start Minute 
input uchar    InpEndHour           = 15;          // End Hour 
input uchar    InpEndMinute         = 02;          // End Minute 
***
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!TimeControl())
      return;
  }
//+------------------------------------------------------------------+
//| TimeControl                                                      |
//+------------------------------------------------------------------+
bool TimeControl(void)
  {
   if(!InpTimeControl)
      return(true);
   MqlDateTime STimeCurrent;
   datetime time_current=TimeCurrent();
   if(time_current==D'1970.01.01 00:00')
      return(false);
   TimeToStruct(time_current,STimeCurrent);
   if((InpStartHour*60*60+InpStartMinute*60)<(InpEndHour*60*60+InpEndMinute*60)) // intraday time interval
     {
/*
Example:
input uchar    InpStartHour      = 5;        // Start hour
input uchar    InpEndHour        = 10;       // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  +  +  +  +  +  _  _  _  _  _  _
*/
      if((STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60) && 
         (STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60))
         return(true);
     }
   else if((InpStartHour*60*60+InpStartMinute*60)>(InpEndHour*60*60+InpEndMinute*60)) // time interval with the transition in a day
     {
/*
Example:
input uchar    InpStartHour      = 10;       // Start hour
input uchar    InpEndHour        = 5;        // End hour
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
_  _  _  _  _  _  _  _  _  _  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  _  _  _  _  _  +  +  +  +  +  +
*/
      if(STimeCurrent.hour*60*60+STimeCurrent.min*60>=InpStartHour*60*60+InpStartMinute*60 || 
         STimeCurrent.hour*60*60+STimeCurrent.min*60<InpEndHour*60*60+InpEndMinute*60)
         return(true);
     }
   else
      return(false);
//---
   return(false);
  }
 

Por favor, aconselhar,

Na MQL5 preciso de fechar metade de uma posição, mas preciso de verificar se metade da posição é inferior ao lote mínimo e depois fechar todo o volume, será isso correcto?

double volume=MathMax(PositionGetDouble(POSITION_VOLUME)/2,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN)/AccountInfoInteger(ACCOUNT_LEVERAGE));
 
Evgeny Dyuka:

Por favor, aconselhar,

Na MQL5 preciso de fechar metade de uma posição, mas preciso de verificar se metade da posição é inferior ao lote mínimo, depois fechar todo o volume, será isso correcto?

Talvez seja mais fácil verificar antes de dividir, se o lote for inferior a 2x o mínimo, então não há necessidade de incomodar o terminal?

 

Não posso passar o teste para o mercado, devolve um erro, mas não há erro no relatório

O que fazer?


 
Evgeny Dyuka:

Não posso passar o teste para o mercado, devolve um erro, mas não há erro no relatório

O que fazer?


Por favor, tente novamente mais tarde.
 

Como posso obter o preço de fecho de uma encomenda (comércio, posição - qualquer coisa)?

Para encomendas, apenas ORDER_PRICE_OPEN está disponível, mas ORDER_PRICE_CLOSE não está.

As posições têm apenas POSITION_PRICE_OPEN.

Os ofícios não têm absolutamente nada de abstracto: DEAL_PRICE.

Procurei no Google o fórum, não o encontrei.

 
secret:

Como posso obter o preço de fecho de uma encomenda (comércio, posição - qualquer coisa)?

Para encomendas, apenas ORDER_PRICE_OPEN está disponível, mas ORDER_PRICE_CLOSE não está.

As posições têm apenas POSITION_PRICE_OPEN.

Os ofícios não têm absolutamente nada de abstracto: DEAL_PRICE.

Procurei através do fórum, não o encontrei.

Para facilitar a compreensão e o trabalho na MQL5:

1. ***

2. Se precisar de um preço de fecho, não pode passar sem aceder ao histórico comercial. OHistorySelect é responsável por solicitar o histórico comercial

3. O exemplo de trabalhar com o histórico, com saída de informação num ficheiro ou no separador "Especialistas", está no código deHistórico de Negócios e Encomendas

Para compreender o que é este acordo, é necessário saber

ENUM_DEAL_ENTRY-direcção do comércio - entrada no mercado, saída do mercado ou inversão

ENUM_DEAL_ENTRY

Identificador

Descrição

DEAL_ENTRY_IN

Entrada no mercado

DEAL_ENTRY_OUT

Saída do mercado

DEAL_ENTRY_INOUT

U-turn

DEAL_ENTRY_OUT_BY

Fechar posição do contador


ENUM_DEAL_TYPE-Tipo de negócio

ENUM_DEAL_TYPE

Identificador

Descrição

DEAL_TYPE_BUY

Comprar

DEAL_TYPE_SELLVenda

***



Estas são as noções básicas.

 
Vladimir Karputov:

Obrigado pela resposta, olhei tanto para a documentação como para o vosso exemplo, mas ainda não descobri como obter um parâmetro semelhante ao OrderClosePrice() em MT4.

 
secret:

Obrigado pela resposta, olhei tanto para a documentação como para o vosso exemplo, mas ainda não consegui encontrar como obter um parâmetro semelhante ao OrderClosePrice() em MT4.

em alternativa, abrirhttps://www.mql5.com/ru/code/16006

e veja a implementação de@fxsaber

ou simplesmente ligar a biblioteca acima e transferir o código de MT4 para MT5, em 99% dos casos não terá de afinar nada, tudo funcionará da mesma forma que em MT4

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...