초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 790

 
Vladimir Karputov :

항목의 정의를 찾았습니다. 어떤 동물인지 알아봤습니다. mql5에서 정의를 찾지 못한 것이 유감입니다.

경제학에서 포인트 는 이 지표에 더 작은 변화가 없을 때 지표의 최소 변화입니다. 1 포인트 는 가장 최근에 발표된 지표 수치의 단일 변경에 해당합니다.

도와 주셔서 감사합니다.

 
pivomoe :

경제학에서 포인트 는 이 지표에 더 작은 변화가 없을 때 지표의 최소 변화입니다. 1 포인트 는 가장 최근에 발표된 지표 수치의 단일 변경에 해당합니다.

더 간단합니다: Point = 10^(-Digits) . 예를 들어, 포지션을 여는 가격이 포인트의 정수와 같지 않을 수 있다는 것은 분명합니다.

 
fxsaber :

예를 들어, 포지션을 여는 가격이 포인트의 정수와 같지 않을 수 있다는 것은 분명합니다.

이와 같이 ? 예를 들어도 될까요?

 
pivomoe :

이와 같이 ? 예를 들어도 될까요?

네팅시 BUY 1랏을 만들고 매도호가가 변경되면 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 :

네팅시 BUY 1랏을 만들고 매도호가가 변경되면 6랏을 구매합니다.

흥미로운 정보.
 

MT4에서 iHighest 기능의 아날로그에 대한 도움을 요청합니다. 가장 올바르게 수행하는 방법은 무엇입니까?

내가 알기로는 값을 배열에 복사해야하지만 배열의 크기를 결정하려면 막대 수 를 계산해야한다는 것이 밝혀졌습니다 ...

최대 막대를 찾기 위해 두 날짜를 아는 작업이 있습니다.

주어진 시간에 막대의 수를 계산하는 방법을 알려주십시오.

 
Aleksey Vyazmikin :

MT4에서 iHighest 기능의 아날로그에 대한 도움을 요청합니다. 가장 올바르게 수행하는 방법은 무엇입니까?

내가 알기로는 값을 배열에 복사해야하지만 배열의 크기를 결정하려면 막대 수 를 계산해야한다는 것이 밝혀졌습니다 ...

최대 막대를 찾기 위해 두 날짜를 아는 작업이 있습니다.

주어진 시간에 막대의 수를 계산하는 방법을 알려주십시오.

세 번째 매개변수를 사용해야 합니다.

또한 배열을 구성한 후 ArrayMaximum 함수를 사용하여 최대값을 구합니다.

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

세 번째 매개변수를 사용해야 합니다.

또한 배열을 구성한 후 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);
  }
//+------------------------------------------------------------------+
사유: