初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 790

 
Vladimir Karputov:

条項の定義が見つかりました。この獣が何であるかがわかった。mql5で定義が見つからなかったのが残念です。

経済学でいうポイントとは、ある指標について、それよりも小さな変化が想定されない場合の最小の変化のことである。1ポイントは、指標の直近の公表数値の1変化分に相当します。

ご協力ありがとうございました。

 
pivomoe:

景気のポイントとは、ある指標について、これより小さな変化が予測されない場合の最小の変化のことである。1ポイントは、ある指標の直近の公表数値の変化1回分に相当します。

もっと単純に、Point = 10^(-Digits) とします。そして、例えばポジションを建 てるときの価格が、全部のポイントに等しくない場合があることは明らかです。

 
fxsaber:

また、例えばポジションを建 てる際の価格が、全部のpipsに相当しないことも理解できる。

どうですか?例を挙げてみましょうか。

 
pivomoe:

どのように機能するのですか?具体的な例を教えてください。

ネッティングで1ロット買い、Ask価格が変わったら6ロット買い。

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

ネッティングで、1ロット買い、Ask価格が変わったら、6ロット買い。

興味深い情報です。
 

MT4からiHighest機能で助けてください - EAの質問に興味があるのですが、正しいやり方は?

値を配列にコピーする必要があることはわかりましたが、配列のサイズを決定するためには、バーの 数を計算する必要があることがわかりました...。

2つの日付がわかっているときに、最大の棒を見つけるというタスクがあります。

指定した時間枠のバーの数を計算する方法を教えてください。

 
Aleksey Vyazmikin:

MT4からiHighest機能で助けてください - EAの質問に興味があるのですが、正しいやり方は?

値を配列にコピーする必要があることはわかりましたが、配列のサイズを決定するためには、バーの 数を計算する必要があることがわかりました...。

2つの日付がわかっているときに、最大の棒を見つけるというタスクがあります。

指定した時間枠のバーの数を計算する方法を教えてください。

第3パラメータを 使用する必要があります

そして、配列を形成した後、ArrayMaximum 関数で最大値を求めます。

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

第3パラメータを 使用する必要があります

さらに,配列を形成した後,関数ArrayMaximum で最大値を求める。


これは理解できるのですが、バーの数が分からないと配列のサイズが分からないのでArrayMaximum 関数が使えません。最大値を設定すればいいのですが、正しい解決策を使いたいのです。

 

私はこのようにしました。

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

でも、これがベストな選択かどうかはわかりません。

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