Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 790

 
Vladimir Karputov:

Encontré la definición de la cláusula. Descubrí lo que es esta bestia. Lástima que no haya encontrado la definición en mql5.

Un punto en economía es un cambio mínimo en un indicador cuando no se prevén cambios menores para ese indicador. Un punto corresponde a un solo cambio en la cifra más reciente publicada del indicador.

Gracias por su ayuda.

 
pivomoe:

Un punto en la economía es el cambio mínimo de un indicador cuando no se prevén cambios menores para ese indicador. Un punto corresponde a un solo cambio en la cifra publicada más reciente de un indicador.

Más sencillo aún: Punto = 10^(-Digitos). Y está claro que el precio de apertura de una posición, por ejemplo, puede no ser igual a un número entero de puntos.

 
fxsaber:

Y es comprensible que el precio de apertura de una posición, por ejemplo, no equivalga a un número entero de pips.

¿Cómo es? ¿Puedo darle un ejemplo?

 
pivomoe:

¿Cómo funciona? ¿Puede dar un ejemplo?

En la red haga la COMPRA de 1 lote y, cuando el precio Ask cambie, compre 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:

En la red, COMPRAR 1 lote y, cuando el precio Ask cambia, COMPRAR 6 lotes.

Información interesante.
 

Por favor, ayuda con la función iHighest de MT4 - Estoy interesado en una pregunta para un EA, ¿cómo hacerlo de la manera correcta?

Entiendo que hay que copiar los valores a un array, pero resulta que para determinar el tamaño del array hay que calcular el número de barras...

Tengo una tarea para encontrar la barra máxima cuando conozco dos fechas.

¿Puede decirme cómo calcular el número de barras en un marco temporal determinado?

 
Aleksey Vyazmikin:

Por favor, ayuda con la función iHighest de MT4 - Estoy interesado en una pregunta para un EA, ¿cómo hacerlo de la manera correcta?

Entiendo que hay que copiar los valores a un array, pero resulta que para determinar el tamaño del array hay que calcular el número de barras...

Tengo una tarea para encontrar la barra máxima cuando conozco dos fechas.

¿Puede decirme cómo calcular el número de barras en un marco temporal determinado?

Es necesario utilizar el tercer parámetro

A continuación, después de formar la matriz, encuentre el máximo con la funciónArrayMaximum

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

Es necesario utilizar el tercer parámetro

Además, después de la formación de una matriz para encontrar el máximo con la funciónArrayMaximum


Esto es comprensible, pero sin saber el número de barras no puedo usar la funciónArrayMaximum, porque no sé el tamaño del array - se puede poner simplemente el máximo, pero quiero la solución correcta.

 

Lo hice así:

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);
  }

Pero no estoy seguro de que esta sea la mejor opción.

 
//+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+