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

 
Vladimir Karputov:

Encontrei a definição da cláusula. Descobriu o que é esta besta. Pena não ter encontrado a definição em mql5.

Um ponto em economia é uma mudança mínima num indicador quando não estão previstas mudanças menores para esse indicador. Um ponto corresponde a uma única alteração na mais recente figura publicada do indicador.

Obrigado pela vossa ajuda.

 
pivomoe:

Um ponto na economia é a mudança mínima num indicador quando não estão previstas mudanças menores para esse indicador. Um ponto corresponde a uma única alteração na mais recente figura publicada de um indicador.

Ainda mais simples: Ponto = 10^(-Dígitos). E é evidente que o preço da abertura de uma posição, por exemplo, pode não ser igual a um número inteiro de pontos.

 
fxsaber:

E é compreensível que o preço de abrir uma posição, por exemplo, possa não ser igual a um número inteiro de pips.

Como é que é? Posso dar-vos um exemplo?

 
pivomoe:

Como é que funciona ? Pode dar um exemplo?

Na rede comprar 1 lote e, quando o preço Ask mudar, COMPRAR 6 lotes.

#include <MT4Orders.mqh>

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnInit()
{
  OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0);
  Sleep(1 e4);
  OrderSend(_Symbol, OP_BUY, 6, Ask, 100, 0, 0);

  if (PositionSelect(_Symbol))
    Print(PositionGetDouble(POSITION_PRICE_OPEN));
}
 
fxsaber:

Na rede, COMPRAR 1 lote e, quando o preço Ask mudar, COMPRAR 6 lotes.

Informação interessante.
 

Por favor, ajude com a função mais elevada do MT4 - estou interessado numa pergunta para uma EA, como fazê-lo da forma correcta?

Compreendo que é preciso copiar os valores para uma matriz, mas acontece que para determinar o tamanho da matriz é preciso calcular o número de barras...

Tenho a tarefa de encontrar a barra máxima quando conheço duas datas.

Pode dizer-me como calcular o número de barras num determinado período de tempo?

 
Aleksey Vyazmikin:

Por favor, ajude com a função mais elevada do MT4 - estou interessado numa pergunta para uma EA, como fazê-lo da forma correcta?

Compreendo que é preciso copiar os valores para uma matriz, mas acontece que para determinar o tamanho da matriz é preciso calcular o número de barras...

Tenho a tarefa de encontrar a barra máxima quando conheço duas datas.

Pode dizer-me como calcular o número de barras num determinado período de tempo?

É necessário utilizar o 3º parâmetro

Depois de formar a matriz, encontrar o máximo com a funçãoArrayMaximum

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyHigh
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyHigh
  • www.mql5.com
Функция получает в массив high_array исторические данные максимальных цен баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар. При копировании заранее неизвестного количества...
 
Vitaly Muzichenko:

É necessário utilizar o 3º parâmetro

Além disso, após a formação de uma matriz para encontrar o máximo com a funçãoArrayMaximum


Isto é compreensível, mas sem saber o número de barras não posso usar a funçãoArrayMaximum, porque não sei o tamanho da matriz - pode simplesmente definir o máximo, mas quero a solução certa.

 

Fi-lo desta forma:

MqlDateTime strDt;  
datetime         StartDt=TimeTradeServer();
datetime         StopDt=TimeTradeServer();
double          arrTimeD[];
TimeToStruct(StartDt,strDt);
   strDt.hour=0;
   strDt.min=0;
   strDt.sec=0;
StartDt=StructToTime(strDt);   
int BarsGo=iBarShift(_Symbol,0,StartDt,false); //Узнаем, индекс бара с начала временного периода (открытия дня)
ArrayFree(arrTimeD);
ArrayResize(arrTimeD,BarsGo);
CopyHigh(_Symbol,_Period,StartDt,StopDt,arrTimeD);
double Max=arrTimeD[ArrayMaximum(arrTimeD,0,BarsGo)];
Print("StartDt=",TimeToString(StartDt,TIME_DATE|TIME_MINUTES)," Max=",Max," BarsGo=",BarsGo);

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int iBarShift(string symbol,int tf,datetime time,bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
     {
      if(ArraySize(Arr)>2) return(ArraySize(Arr)-1);
      if(time<time1) return(1);
      else return(0);
     }
   else return(-1);
  }

Mas não tenho a certeza se esta é a melhor opção.

 
//+------------------------------------------------------------------+
//|                                                          max.mq5 |
//|                                                   Copyright 2017 |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_plots 0
#property indicator_chart_window

double high_array[];
int CountBars;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  datetime start_time = D'2017.11.03 04:00', 
           stop_time  = D'2017.11.03 12:00';
   
  if(CopyHigh(Symbol(),PERIOD_CURRENT,start_time,stop_time,high_array) < 0) return(0);
  
  CountBars = Bars(Symbol(),PERIOD_CURRENT,start_time,stop_time);
  
   Print( "high_array=",high_array[ArrayMaximum(high_array)],", CountBars=",CountBars ); // максимум во временном диапазоне, и количество баров
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+