Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 996

 
Alexey Viktorov:


O que você está tentando imprimir não é correto. A maneira correta é esta.

Aqui está a repartição:

42 é um identificador numérico: ACCOUNT_MARGIN_FREE

ou seja, podemos obter a margem livre da constante

AccountInfoDouble(ACCOUNT_MARGIN_FREE)

Ou por seu identificador numérico:

AccountInfoDouble(42)

Obrigado!

 
killer67:

Aqui está a repartição:

42 é um identificador numérico: ACCOUNT_MARGIN_FREE

ou seja, podemos obter a margem livre da constante

Ou por seu identificador numérico:

Obrigado!

A primeira versão da escrita é mais informativa.

 

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

Esta é provavelmente uma pergunta boba, mas estas funções podem ser usadas na MQL4? É que as ferramentas MQL4 são mais limitadas.

Como obter os dados na MQL4:

SYMBOL_SESSION_DEALS

Número de negócios na sessão atual

ORDEM_SESSÃO_DE_COMPRA_SÍMBOLO

Número total de ordens de compra no momento

longo

SÍMBOLO_SESSION_SELL_ORDERS

Número total de ordens de venda no momento

longo

SYMBOL_VOLUME

Volume - Volume do último comércio

longo

SYMBOL_VOLUMEHIGH

Volume máximo para o dia

longo

SYMBOL_VOLUMELOW

Volume mínimo para o dia

SYMBOL_BID

Licitação - melhor oferta

duplo

SYMBOL_BIDHIGH

Licitações máximas por dia

duplo

SYMBOL_BIDLOW

Licitações mínimas para o dia

duplo

SYMBOL_ASK

Perguntar - melhor oferta

duplo

SYMBOL_ASKHIGH

Pedido Máximo para o dia

duplo

SYMBOL_ASKLOW

Pedido mínimo para o dia

VOLUME_SESSÃO_SÍMBOLO

Volume total de negócios na sessão atual

duplo

SÍMBOLO_SESSION_TURNOVER

Rotatividade total na sessão atual

duplo

SÍMBOLO_SESSÃO_INTERESSE

Volume total de posições abertas

duplo

SÍMBOLO_SESSION_BUY_ORDERS_VOLUME

Volume total de pedidos de compra no momento

duplo

VOLUME_DE_SESSÃO_DE_ENCOMENDAS_DE_SESSÃO

Volume total de pedidos de venda no momento

duplo

SÍMBOLO_SESSION_OPEN

Preço da sessão aberta

duplo

SÍMBOLO_SESSION_CLOSE

Fechar preço

duplo


É um tesouro de dados úteis de uma só vez. A única questão é como fazer isso na MQL4. A questão pode surgir, porque não estou estudando a MQL5, uma vez que ela tem uma funcionalidade mais ampla. É simples. Nem todos os corretores o apóiam. No momento, a MQL4 ainda é a mais popular e procurada.

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
 
Gilmor:

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants

Esta é provavelmente uma pergunta boba, mas estas funções podem ser usadas na MQL4? É que as ferramentas MQL4 são mais limitadas.

Como obter dados na MQL4:


É um tesouro de dados úteis em um clique. Mas como fazer isso na MQL4. Este artigo também conterá algumas dicas sobre como preparar a MQL5 para estudar na MQL5. É simples. Nem todos os corretores o apóiam. No momento, a MQL4 ainda é a mais popular e procurada.

Na documentação do mql4 estão marcados todos os que não funcionam.

SYMBOL_BID

Licitação - melhor oferta

duplo

SYMBOL_BIDHIGH

Não suportado

duplo

SYMBOL_BIDLOW

Não suportado

duplo

SYMBOL_ASK

Pergunte - melhor oferta para comprar

duplo

SYMBOL_ASKHIGH

Não suportado

duplo

SYMBOL_ASKLOW

Não suportado

duplo

SYMBOL_LAST

Não suportado

duplo

SÍMBOLO_LASTHIGH

Não suportado

duplo

SYMBOL_LASTLOW

Não suportado

duplo

SYMBOL_POINT

Valor de ponto único

duplo

Esta não é a mesa inteira. Há mais de um na documentação, basta pressionar F1 e lê-lo.

 
Alexey Viktorov:

Na documentação mql4, todos aqueles que não funcionam estão marcados.

Obrigado.
 
Ajuda a entender, não pode definir corretamente a parada das perdas.
Linhas de log:
2019.11.16 12:38:40.660 2019.01.02:35:00 Para calcular as paradas, obter valor do corretor = 30
2019.11.16 13:20:18.791 2019.01.02:03:00 Abrir um pedido: Preço = 1.14595, Stop Loss = 1.14565, Take Profit = 1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 falhou a compra imediata 0,01 EURUSD a 1.14595 sl: 1.14565 tp: 1.14625 [paradas inválidas]
2019.11.16 13:20:18.792 2019.01.02:03:00 CTrade::OrderSend: compra imediata 0.01 EURUSD a 1.14595 sl: 1.14565 tp: 1.14625 [paradas inválidas]


E agora um pouco de clareza para este caso:
No código antes de abrir um pedido eu calculo:
preço = melhor preço de mercado para comprar, dependendo do pedido, neste caso uma compra.
SL = calcular uma parada certa (o corretor permite uma parada de pelo menos 30 unidades do preço), ou seja
preço (1.14595) - 0.0003 = SL (1.14565)
TP = calcular uma parada certa (o corretor permite uma parada de pelo menos 30 unidades do preço), ou seja
preço (1.14595) + 0.0003 = TP (1.14625)
Bem, tudo parece correto, eu tenho 30 pontos, mas recebo um erro de ajuste.

Se definirmos SL = 0, então tudo está bem, o pedido e TP são definidos.
Eu recebo um erro no cálculo do SL, onde está o erro?
 
killer67:
Ajude-me a entender, não consigo definir corretamente a parada de perda.
Linhas de log:
2019.11.16 12:38:40.660 2019.01.02 02:35:00 Para calcular as paradas, tirar valor do corretor = 30
2019.11.16 13:20:18.791 2019.01.02 02:03:00 Abrir um pedido: Preço = 1.14595, Stop Loss = 1.14565, Take Profit = 1.14625
2019.11.16 13:20:18.791 2019.01.02 02:03:00 compra imediata falhada 0.01 EURUSD a 1.14595 sl: 1.14565 tp: 1.14625 [Paradas inválidas]
2019.11.16 13:20:18.792 2019.01.02 02:03:00 CTrade::OrderSend: compra imediata 0.01 EURUSD a 1.14595 sl: 1.14565 tp: 1.14625 [paradas inválidas]


E agora alguma clareza para este caso:
No código eu calculo antes de abrir um pedido:
preço = melhor preço de mercado para comprar, dependendo do pedido, neste caso, uma compra.
SL = calcular uma parada correta (o corretor permite paradas a pelo menos 30 unidades de distância do preço), ou seja
preço (1.14595) - 0.0003 = SL (1.14565)
TP = Calcular parada correta (o corretor permite paradas a pelo menos 30 unidades de distância do preço), ou seja
preço (1.14595) + 0.0003 = TP (1.14625)
Bem, tudo parece estar certo, eu tenho 30 pips, mas recebo um erro de ajuste.

Definimos SL = 0, então tudo está OK, o pedido e TP são definidos.
Acontece que é um erro no cálculo do SL, onde está o erro?

que tipo de preço?

 
Iurii Tokman:

que tipo de preço?

Ao comprar Preço = SYMBOL_ASK

Preço à venda = SYMBOL_BID

 
killer67:

Ao comprar Preço = SYMBOL_ASK

Ao vender Preço = SYMBOL_BID

Você já tentou adicionar um spread?

 
Iurii Tokman:

Você já tentou adicionar um spread?

Fixou-o desta forma:

double CheckSetSL(ENUM_ORDER_TYPE OrderT, double price)
  {
   if(InpSL != 0)
     {
      double CalcSL = 0.0;
      double SL = 0.0;
      if(InpSL < 0.0003)
        {
         CalcSL = 0.0003; // Если SL в настройках указано меньше 30 (установки брокером) то ставим минимально допустимую.
        }
      else
        {
         CalcSL = InpSL;
        }

      // Формируем стоп-лимит.
      if(OrderT == ORDER_TYPE_BUY)
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_BID) - CalcSL;

        }
      else
        {

         SL = SymbolInfoDouble(_Symbol,SYMBOL_ASK) + CalcSL;

        }

      return SL;
     }

   return 0.0;
  }