Questions des débutants MQL5 MT5 MetaTrader 5 - page 790

 
Vladimir Karputov:

J'ai trouvé la définition de la clause. J'ai découvert ce qu'est cette bête. Dommage que je n'aie pas trouvé la définition dans mql5.

Un point en économie est un changement minimal dans un indicateur lorsqu'aucun changement plus important n'est envisagé pour cet indicateur. Un point correspond à un seul changement dans le chiffre publié le plus récent de l'indicateur.

Merci pour votre aide.

 
pivomoe:

Un point dans l'économie est le changement minimum d'un indicateur lorsqu'aucun changement plus important n'est prévu pour cet indicateur. Un point correspond à un seul changement dans le chiffre le plus récent publié pour un indicateur.

Encore plus simple : Point = 10^(-Digits). Et il est clair que le prix d'ouverture d'une position, par exemple, peut ne pas être égal à un nombre entier de points.

 
fxsaber:

Et il est compréhensible que le prix d'ouverture d'une position, par exemple, ne soit pas égal à un nombre entier de pips.

Comment c'est ? Je peux vous donner un exemple ?

 
pivomoe:

Comment cela fonctionne-t-il ? Pouvez-vous donner un exemple ?

Lors de la compensation, achetez 1 lot et, lorsque le prix Ask change, achetez 6 lots.

#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:

Lors de la compensation, ACHETER 1 lot et, lorsque le prix Ask change, ACHETER 6 lots.

Informations intéressantes.
 

S'il vous plaît aidez avec la fonction iHighest de MT4 - Je suis intéressé par une question pour un EA, comment le faire de la bonne façon ?

Je comprends que vous devez copier les valeurs dans un tableau, mais il s'avère que pour déterminer la taille du tableau, vous devez calculer le nombre de barres...

J'ai pour tâche de trouver la barre maximale lorsque je connais deux dates.

Pouvez-vous me dire comment calculer le nombre de barres dans un cadre temporel donné ?

 
Aleksey Vyazmikin:

S'il vous plaît aidez avec la fonction iHighest de MT4 - Je suis intéressé par une question pour un EA, comment le faire de la bonne façon ?

Je comprends que vous devez copier les valeurs dans un tableau, mais il s'avère que pour déterminer la taille du tableau, vous devez calculer le nombre de barres...

J'ai pour tâche de trouver la barre maximale lorsque je connais deux dates.

Pouvez-vous me dire comment calculer le nombre de barres dans un cadre temporel donné ?

Vous devez utiliser le 3ème paramètre

Ensuite, après avoir formé le tableau, trouvez le maximum avec la fonctionArrayMaximum

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

Vous devez utiliser le 3ème paramètre

En outre, après la formation d'un tableau pour trouver le maximum avec la fonctionArrayMaximum


C'est compréhensible, mais sans connaître le nombre de barres, je ne peux pas utiliser la fonctionArrayMaximum car je ne connais pas la taille du tableau - vous pouvez simplement définir le maximum, mais je veux utiliser la bonne solution.

 

Je l'ai fait de cette façon :

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

Mais je ne suis pas sûr que ce soit la meilleure option.

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