Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 790

 
Vladimir Karputov:

Ich habe die Definition der Klausel gefunden. Ich habe herausgefunden, was dieses Biest ist. Schade, dass ich die Definition nicht in mql5 gefunden habe.

Ein Punkt in den Wirtschaftswissenschaften ist eine minimale Veränderung eines Indikators, wenn keine kleineren Veränderungen für diesen Indikator vorgesehen sind. Ein Punkt entspricht einer einzigen Veränderung des zuletzt veröffentlichten Wertes des Indikators.

Vielen Dank für Ihre Hilfe.

 
pivomoe:

Ein Punkt in der Wirtschaft ist die minimale Veränderung eines Indikators, wenn keine kleineren Veränderungen für diesen Indikator vorgesehen sind. Ein Punkt entspricht einer einzigen Veränderung der zuletzt veröffentlichten Zahl für einen Indikator.

Noch einfacher: Punkt = 10^(-Stellen). Und es ist klar, dass der Preis für die Eröffnung einer Position beispielsweise nicht unbedingt einer ganzen Zahl von Punkten entspricht.

 
fxsaber:

Und es ist verständlich, dass der Preis für die Eröffnung einer Position zum Beispiel nicht einer ganzen Anzahl von Pips entspricht.

Wie ist das möglich? Darf ich Ihnen ein Beispiel nennen?

 
pivomoe:

Wie funktioniert das? Können Sie ein Beispiel nennen?

Beim Netting kauft man 1 Lot und wenn sich der Ask-Preis ändert, kauft man 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:

Beim Netting kauft man 1 Lot und wenn sich der Ask-Preis ändert, kauft man 6 Lots.

Interessante Informationen.
 

Bitte helfen Sie mit der iHighest-Funktion von MT4 - Ich interessiere mich für eine Frage für einen EA, wie es der richtige Weg zu tun?

Ich verstehe, dass Sie die Werte in ein Array kopieren müssen, aber es stellt sich heraus, dass Sie zur Bestimmung der Größe des Arrays die Anzahl der Balken berechnen müssen...

Ich habe die Aufgabe, den maximalen Balken zu finden, wenn ich zwei Daten kenne.

Können Sie mir sagen, wie ich die Anzahl der Balken in einem bestimmten Zeitrahmen berechnen kann?

 
Aleksey Vyazmikin:

Bitte helfen Sie mit der iHighest-Funktion von MT4 - Ich interessiere mich für eine Frage für einen EA, wie es der richtige Weg zu tun?

Ich verstehe, dass Sie die Werte in ein Array kopieren müssen, aber es stellt sich heraus, dass Sie zur Bestimmung der Größe des Arrays die Anzahl der Balken berechnen müssen...

Ich habe die Aufgabe, den maximalen Balken zu finden, wenn ich zwei Daten kenne.

Können Sie mir sagen, wie ich die Anzahl der Balken in einem bestimmten Zeitrahmen berechnen kann?

Sie müssen den 3. Parameter verwenden

Nachdem Sie das Array gebildet haben, ermitteln Sie das Maximum mit der FunktionArrayMaximum

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

Sie müssen den 3. Parameter verwenden

Weiter, nach Bildung eines Arrays, um das Maximum mit der FunktionArrayMaximum zu finden


Das ist verständlich, aber ohne die Anzahl der Balken zu kennen, kann ich die FunktionArrayMaximum nicht verwenden, weil ich die Größe des Arrays nicht kenne - Sie können einfach das Maximum festlegen, aber ich möchte die richtige Lösung verwenden.

 

Ich habe es so gemacht:

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

Aber ich bin mir nicht sicher, ob das die beste Option ist.

 
//+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+
Grund der Beschwerde: