MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 4

 
Artyom Trishkin :

표시기에서 임의의 프랙탈을 얻는 기능을 완전히 분리하려면 high[] 및 low[] 배열과 한계값을 참조로 전달해서는 안 되며 함수로도 필요한 값을 얻어야 합니다.

코드를 MQL5에 최대한 가깝게 만들기 때문에 High[], Low[], iHigh(), iLow() 함수를 포기하고 자체 함수를 사용하여 필요한 가격을 얻어야 합니다. 동일한 표시기에서 다음과 같이 표시됩니다.

사실, GetPriceHigh() 및 GetPriceLow() 함수에서 -1을 가져오는지 확인해야 합니다.
고맙습니다.
 
strongflex :
RSI는 15분이 필요합니다. 어드바이저는 시장 개장(9-00, 9-20, 9-40 등)부터 20분마다 확인해야 합니다. 10-20에 레벨 70의 상향 교차가 있었다고 가정해 보겠습니다. 가격과 10-40에서 그들은 가격이 10-20에서 그가 공매도보다 낮은지 확인할 것입니다.

뭐, 처음에는 몇 분 전에 설정 한 시간을 확보할 필요가 있습니다. 테스트 스크립트는 다음과 같습니다.

//+------------------------------------------------------------------+
//|                                                sTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link        "https://login.mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input ENUM_TIMEFRAMES    TimeframeRSI   = PERIOD_M15 ;   // Таймфрейм RSI
input int                MinutesBefore  = 20 ;           // Количество минут назад
int minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore);   // Количество минут назад

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   datetime time_before= TimeCurrent ()-minutesBefore* PeriodSeconds ( PERIOD_M1 );
   int shift= Bars ( Symbol (),TimeframeRSI, TimeCurrent (),time_before);
   double value= iRSI ( Symbol (),TimeframeRSI, 14 , PRICE_CLOSE ,shift);
   Comment ( "\nCurrent time: " , TimeToString ( TimeCurrent ()),
           "\nВремя " ,minutesBefore, " минут назад: " , TimeToString (time_before),
           "\nБар времени " , TimeToString (time_before), " = " ,shift, " на таймфрейме " , EnumToString (TimeframeRSI),
           "\nЗначение RSI на баре " ,shift, " периода " , EnumToString (TimeframeRSI), ": " , DoubleToString (value, Digits ()));
  }
//+------------------------------------------------------------------+

이 스크립트는 현재 서버에서 시간을 계산합니다. 지정된 시간(분) 전에 RSI 데이터를 가져오기 위한 테스트일 뿐입니다.

 

다음으로, 현재 시간 과 그 분 값이 확인 빈도의 분의 배수인지 여부를 알아내야 합니다. 테스트 고문으로 만들었습니다.

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link        "https://login.mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES       TimeframeRSI   = PERIOD_M15 ;   // Таймфрейм RSI
input int                   PeriodRSI      = 14 ;           // Период расчёта RSI
input ENUM_APPLIED_PRICE    PriceRSI       = PRICE_CLOSE ; // Цена расчёта RSI
input int                   MinutesBefore  = 20 ;           // Количество минут назад
//--- global variables
int       minutesBefore; // Количество минут назад
int       periodRSI;     // Период расчёта RSI
double    prevRSIValue;   // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore);   // Количество минут назад
   periodRSI=(PeriodRSI< 1 ? 1 :PeriodRSI);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   MqlDateTime server_time;
   TimeToStruct ( TimeCurrent (),server_time);
   if (server_time.min%minutesBefore== 0 ) prevRSIValue=GetLastDataRSI( Symbol (),TimeframeRSI, TimeCurrent (),minutesBefore);
   Comment ( "\nТекущее время: " , TimeCurrent (), "\nМинуты текущего времени: " ,server_time.min, "\nЗначение RSI: " , DoubleToString (prevRSIValue, Digits ()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                       int period_rsi= 14 , ENUM_APPLIED_PRICE price_rsi= PRICE_CLOSE )
  {
   datetime time_before=start_time-minutes_before* PeriodSeconds ( PERIOD_M1 );
   int shift= Bars (symbol_name,timeframe,start_time,time_before);
   return ( iRSI (symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

다음에 무엇을 알아야 합니까?

 
안녕하세요. 나는 거래의 초보자이므로 소프트웨어 질문을 포함하여 많은 질문이 발생합니다. 제 경우에는 MT4입니다. 그런 것, 예를 들어 차트 창에 숫자로 표시되는 통화 쌍의 스프레드와 같은 방식으로 ATR 표시기를 만드는 것이 가능합니까? Tobish, 차트는 없고 숫자만 있습니다. 두 번째 지점은 ATR 기반 후행 정지점입니다. 자동으로 하는게 가능한가요? 포즈를 취하고 있다면 계산기와 좋은 시력 덕분에 정지점을 계산하고 수동으로 설정하는 것이 문제가 되지 않습니다. 그러나 이 프로세스를 자동으로 만드는 것은 단점이 있더라도 거래자에게 신의 선물이라고 생각합니다. 하지만 좋은 추세에서 후행 정지는 초보자가 '막대기' 또는 잘못 설정한 정지의 위험을 줄여줍니다. . 미리 감사드립니다.
 
Artyom Trishkin :

다음으로,현재 시간 과 그 분 값이 확인 빈도의 분의 배수인지 여부를 알아내야 합니다. 테스트 고문으로 만들었습니다.

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link        "https://login.mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES       TimeframeRSI   = PERIOD_M15 ;   // Таймфрейм RSI
input int                   PeriodRSI      = 14 ;           // Период расчёта RSI
input ENUM_APPLIED_PRICE    PriceRSI       = PRICE_CLOSE ; // Цена расчёта RSI
input int                   MinutesBefore  = 20 ;           // Количество минут назад
//--- global variables
int       minutesBefore; // Количество минут назад
int       periodRSI;     // Период расчёта RSI
double    prevRSIValue;   // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore);   // Количество минут назад
   periodRSI=(PeriodRSI< 1 ? 1 :PeriodRSI);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   MqlDateTime server_time;
   TimeToStruct ( TimeCurrent (),server_time);
   if (server_time.min%minutesBefore== 0 ) prevRSIValue=GetLastDataRSI( Symbol (),TimeframeRSI, TimeCurrent (),minutesBefore);
   Comment ( "\nТекущее время: " , TimeCurrent (), "\nМинуты текущего времени: " ,server_time.min, "\nЗначение RSI: " , DoubleToString (prevRSIValue, Digits ()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                       int period_rsi= 14 , ENUM_APPLIED_PRICE price_rsi= PRICE_CLOSE )
  {
   datetime time_before=start_time-minutes_before* PeriodSeconds ( PERIOD_M1 );
   int shift= Bars (symbol_name,timeframe,start_time,time_before);
   return ( iRSI (symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

다음에 무엇을 알아야 합니까?

또한 RSI가 20분 전에 레벨을 넘었다면 가격을 확인합니다. 매우 감사합니다. 모든 것이 나와 함께 작동한다면 약속))
 
Vladymyr Glushko :
안녕하세요. 나는 거래의 초보자이므로 소프트웨어 질문을 포함하여 많은 질문이 발생합니다. 제 경우에는 MT4입니다. 그런 것, 예를 들어 차트 창에 숫자로 표시되는 통화 쌍의 스프레드와 같은 방식으로 ATR 표시기를 만드는 것이 가능합니까? Tobish, 차트는 없고 숫자만 있습니다. 두 번째 지점은 ATR 기반 후행 정지점입니다. 자동으로 하는게 가능한가요? 포즈를 취하면 계산기와 좋은 시력 덕분에 정지를 계산하고 수동으로 설정하는 것이 문제가되지 않습니다. 그러나 이 프로세스를 자동으로 만드는 것은 단점이 있더라도 거래자에게 신의 선물이라고 생각합니다. 하지만 좋은 추세에서 후행 정지는 초보자가 '막대기' 또는 잘못 설정한 정지의 위험을 줄여줍니다. . 미리 감사드립니다.

모든 것이 쉽고 간단하게 수행됩니다. 특히 차트에 필요한 데이터가 있는 텍스트 레이블과 같은 그래픽 개체를 표시하고 각 눈금마다 업데이트합니다.

그리고 코드 기반 의 다양한 트롤에 관해서는 - 12센트 - 자신에게 적합한 트롤을 찾으십시오.)

 
strongflex :
또한 RSI가 20분 전에 레벨을 넘었다면 가격을 확인합니다. 매우 감사합니다. 모든 것이 나와 함께 작동한다면 약속))
해당 시간에 해당하는 양초의 시가/종가/고가/저가가 되는 즉시 "그때"의 가격을 "지금" 확인할 수 있습니다. MT4에는 틱 이력 이 없습니다. 따라서 사용 가능한 기회의 가장 정확한 가격 결정을 위해 의사록에서 교차점을 찾아야 합니다. 그러나 RSI 크로스오버는 무엇을 의미합니까?
 

Artyom Trishkin :
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории . Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?

RSI 레벨 70을 넘는 것은 허용됩니다. 10-00에서 RSI는 70 미만이었습니다. 10-20에서는 70을 초과했고 10-40에서는 따옴표를 확인합니다. 10-20은 10-40보다 높아야 합니다.
 
Artyom Trishkin :

모든 것이 쉽고 간단하게 수행됩니다. 특히 차트에 필요한 데이터가 있는 텍스트 레이블과 같은 그래픽 개체를 표시하고 각 눈금마다 업데이트합니다.

그리고 코드 기반 의 다양한 트롤에 관해서는 - 12센트 - 자신에게 적합한 트롤을 찾으십시오.)

대단히 감사합니다 ...... 우리가 볼 것입니다))

 
Artyom Trishkin :

모든 것이 쉽고 간단하게 수행됩니다. 특히 차트에 필요한 데이터가 있는 텍스트 레이블과 같은 그래픽 개체를 표시하고 각 눈금마다 업데이트합니다.

그리고 코드 베이스 에는 다양한 트롤이 있습니다. 자신에게 맞는 트롤을 찾으세요.)

그러나 단계별로 수행하는 방법은 무엇입니까? ..... 그래픽 개체 (무엇이며 어떻게 넣을 것인지), 차트에 데이터로 레이블 표시 (어디에 입력하고 어떤 데이터로) ...... 어리석은 질문 죄송합니다.
사유: