Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 790

 
Vladimir Karputov:

Ho trovato la definizione della clausola. Ho capito cos'è questa bestia. Peccato che non ho trovato la definizione in mql5.

Un punto in economia è un cambiamento minimo in un indicatore quando non sono previsti cambiamenti minori per quell'indicatore. Un punto corrisponde a un singolo cambiamento nella cifra più recente pubblicata dell'indicatore.

Grazie per il vostro aiuto.

 
pivomoe:

Un punto nell'economia è il cambiamento minimo di un indicatore quando non sono previsti cambiamenti minori per quell'indicatore. Un punto corrisponde a un singolo cambiamento nella cifra più recente pubblicata per un indicatore.

Ancora più semplice: Punto = 10^(-Cifre). Ed è chiaro che il prezzo di apertura di una posizione, per esempio, può non essere uguale a un numero intero di punti.

 
fxsaber:

Ed è comprensibile che il prezzo di apertura di una posizione, per esempio, possa non essere uguale a un numero intero di pip.

Com'è? Posso fare un esempio?

 
pivomoe:

Come funziona? Puoi fare un esempio?

Sul netting fai COMPRA 1 lotto e, quando il prezzo Ask cambia, COMPRA 6 lotti.

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

Sul netting, COMPRA 1 lotto e, quando il prezzo Ask cambia, COMPRA 6 lotti.

Informazioni interessanti.
 

Per favore aiutatemi con la funzione iHighest di MT4 - mi interessa una domanda per un EA, come farlo nel modo giusto?

Capisco che è necessario copiare i valori in un array, ma risulta che per determinare la dimensione dell'array è necessario calcolare il numero di barre...

Ho un compito per trovare la barra massima quando conosco due date.

Potete dirmi come calcolare il numero di barre in un dato lasso di tempo?

 
Aleksey Vyazmikin:

Per favore aiutatemi con la funzione iHighest di MT4 - mi interessa una domanda per un EA, come farlo nel modo giusto?

Capisco che è necessario copiare i valori in un array, ma risulta che per determinare la dimensione dell'array è necessario calcolare il numero di barre...

Ho un compito per trovare la barra massima quando conosco due date.

Puoi dirmi come calcolare il numero di barre in un dato periodo di tempo?

È necessario utilizzare il 3° parametro

Poi, dopo aver formato l'array, trovate il massimo con la funzioneArrayMaximum

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

È necessario utilizzare il 3° parametro

Inoltre, dopo la formazione di una matrice per trovare il massimo con la funzioneArrayMaximum


Questo è comprensibile, ma senza conoscere il numero di barre non posso usare la funzioneArrayMaximum perché non conosco la dimensione dell'array - si può semplicemente impostare il massimo, ma voglio usare la soluzione giusta.

 

L'ho fatto in questo modo:

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

Ma non sono sicuro che questa sia l'opzione migliore.

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