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

 
Alexey Belyakov :

안녕하세요!

여기서 한 가지 질문으로 괴로워합니다. 해결 방법을 알려주세요.

본질은 이것입니다: 캔들의 이전 고점을 따라 이 그려집니다. 나는 이전 고점에 따라 이동하는 라인이 필요합니다.

그리고 필요할 때 틱의 라인 가격을 단순히 변경하지 못하도록 막는 사람은 누구입니까?

 //+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version    "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit () {
  hLine.Create( 0 , "hLine" , 0 , 0 );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   double    o1 = iOpen ( NULL , PERIOD_CURRENT , 1 );
   double    h1 = iHigh ( NULL , PERIOD_CURRENT , 1 );
   double    l1 = iLow ( NULL , PERIOD_CURRENT , 1 );
   double    c1 = iClose ( NULL , PERIOD_CURRENT , 1 );
   double    c0 = iClose ( NULL , PERIOD_CURRENT , 0 );
   double    rt = 0 ;
   double    rs1 = 0 ;
   double    PRH;

  rt= MathAbs (c1 - o1) / Point (); //размер тела свечи
  rs1= MathAbs (h1 - c1) / Point (); // размер верхней тени свечи

   if (rs1 >= rt) // условие для построения уровней (если верхняя тень предыдущей свечи, больше, или равна телу этой же всечи, то...   
  {
    PRH = iHigh ( NULL , PERIOD_CURRENT , 1 ); // то это будет максимум
    hLine.Price( 0 , PRH);
     Comment ( "ЦЕНА МАКС =======" , PRH, "\n" ); // комментарий пред. максимума
  }
}
//+------------------------------------------------------------------+
파일:
 
MT5 내역에서 포지션을 열 때 첫 번째 거래의 가격과 시간과 이 포지션을 닫을 때 첫 번째 거래의 가격과 시간을 찾는 방법을 알려주실 수 있습니까? 목표는 때때로 수동 거래 중에 충전하기 때문에 기록에서 진입점 배열을 얻는 것입니다. 이것이 효과적인지 여부를 이해하고 싶습니다. 거래 작업 을 전혀 이해하지 못합니다. 이러한 기능이 구현되지 않은 클래스를 사용합니다.(
 
Aleksei Beliakov :
2가지 옵션이 있습니다
1. 생성 전 객체 삭제
2. 객체 생성 후 가격 설정

이름과 성으로 이름을 짓는 안녕하세요!)


void OnTick()
  {
//---
   double   o1 = iOpen(Symbol(),Period(),1);
   double   h1 = iHigh(Symbol(),Period(),1);
   double   l1 = iLow(Symbol(),Period(),1);
   double   c1 = iClose(Symbol(),Period(),1);
   double   c0 = iClose(Symbol(),Period(),0);
   double   rt = 0;
   double   rs1 = 0;
   double   rs2 = 0;
   
rt=MathAbs(c1-o1)/_Point; //размер тела свечи
rs1=MathAbs(h1-c1)/_Point;// размер верхней тени свечи
rs2=MathAbs(l1-c1)/_Point; // размер нижней тени свечи

ObjectDelete(0,"HL");

if ((rs1>=rt)&&(c1>o1)) //[для ростовых свечей] условие для построения уровней (если верхняя тень предыдущей свечи, больше, или равна телу этой же свечи, то...   
{
double PRH=iHigh(Symbol(),_Period,1); // то это будет максимум
ObjectCreate(0,"HL",OBJ_HLINE,0,_Period,PRH); // и строим по этому максимуму, горизонтальную линию
}

ObjectDelete(0,"lL");

if ((rs2>=rt)&&(c1<o1)) // [для падающих свечей]условие для построения уровней (если нижняя тень предыдущей свечи, больше, или равна телу этой же свечи, то...   
{
double PRL=iLow(Symbol(),_Period,1); // то это будет минимум
ObjectCreate(0,"lL",OBJ_HLINE,0,_Period,PRL); // и строим по этому минимум, горизонтальную линию
}
}

옵션 번호 1, 가까운 것으로 간주됩니다. 그런데 어쩐지 제대로 되지 않고, 처음에는 계획에 따라, 그 다음에는 실행된다.

 
Mihail Matkovskij :

그리고 필요할 때 틱의 라인 가격을 단순히 변경하지 못하도록 막는 사람은 누구입니까?


 //+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version    "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit () {
  hLine.Create( 0 , "hLine" , 0 , 0 );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   double    o1 = iOpen ( NULL , PERIOD_CURRENT , 1 );
   double    h1 = iHigh ( NULL , PERIOD_CURRENT , 1 );
   double    l1 = iLow ( NULL , PERIOD_CURRENT , 1 );
   double    c1 = iClose ( NULL , PERIOD_CURRENT , 1 );
   double    c0 = iClose ( NULL , PERIOD_CURRENT , 0 );
   double    rt = 0 ;
   double    rs1 = 0 ;
   double    rs2 = 0 ;
   double    PRH;
   double    PRL;

  rt= MathAbs (c1 - o1) / Point (); //размер тела свечи
  rs1= MathAbs (h1 - c1) / Point (); // размер верхней тени свечи
  rs2= MathAbs (l1 - c1) / Point (); // размер нижней тени свечи

   if ((rs1>= rt)&&(c1>o1)) //условия для растущих свечей
  {
    PRH = iHigh ( NULL , PERIOD_CURRENT , 1 ); // то это будет максимум
    hLine.Price( 0 , PRH);
  }
  
   if ((rs2>= rt)&&(c1<o1)) //условия для падающих свечей 
  {
    PRL = iLow ( NULL , PERIOD_CURRENT , 1 );
    hLine.Price( 0 , PRL);  
  }
  
  
}
//+------------------------------------------------------------------+

글쎄, 그것은 예와 더 비슷합니다. 약간의 조건을 추가하면 문제가 발생합니다. 그는 한 줄을 그립니다. 그리고 다음이 필요합니다. 새로운 고/저가 나타나지 않으면 저장됩니다.

 
Alexey Belyakov :


글쎄, 그것은 예와 더 비슷합니다. 약간의 조건을 추가하면 문제가 발생합니다. 그는 한 줄을 그립니다. 그리고 다음이 필요합니다. 새로운 고/저가 나타나지 않으면 저장됩니다.

누가 당신이 Low에 한 줄 더 추가하는 것을 막았는지 모르겠습니다....

 //+------------------------------------------------------------------+
//|                                                  HiBkExample.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version    "1.00"

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#include <ChartObjects\ChartObjectsLines.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CChartObjectHLine hLine, lLine;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit () {
  hLine.Create( 0 , "hLine" , 0 , 0 );
  hLine.Color( clrDarkViolet );
  lLine.Create( 0 , "lLine" , 0 , 0 );
  lLine.Color( clrDodgerBlue );
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason) {
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   double    o1 = iOpen ( NULL , PERIOD_CURRENT , 1 );
   double    h1 = iHigh ( NULL , PERIOD_CURRENT , 1 );
   double    l1 = iLow ( NULL , PERIOD_CURRENT , 1 );
   double    c1 = iClose ( NULL , PERIOD_CURRENT , 1 );
   double    c0 = iClose ( NULL , PERIOD_CURRENT , 0 );
   double    rt = 0 ;
   double    rs1 = 0 ;
   double    rs2 = 0 ;
   double    PRH;
   double    PRL;

  rt= MathAbs (c1 - o1) / Point (); //размер тела свечи
  rs1= MathAbs (h1 - c1) / Point (); // размер верхней тени свечи
  rs2= MathAbs (l1 - c1) / Point (); // размер нижней тени свечи

   if ((rs1 >= rt) && (c1 > o1)) //условия для растущих свечей
  {
    PRH = iHigh ( NULL , PERIOD_CURRENT , 1 ); // то это будет максимум
    hLine.Price( 0 , PRH);
  }
  
   if ((rs2 >= rt) && (c1 < o1)) //условия для падающих свечей 
  {
    PRL = iLow ( NULL , PERIOD_CURRENT , 1 );
    lLine.Price( 0 , PRL);  
  }
}
//+------------------------------------------------------------------+

최소한 전체 배열의 선 또는 기타 개체를 추가하고 최소한 모든 Low 및 High를 표시할 수 있습니다. 무엇이 문제인가?...

 
Aleksey Vyazmikin :
MT5 내역에서 포지션을 열 때 첫 번째 거래의 가격과 시간과 이 포지션을 닫을 때 첫 번째 거래의 가격과 시간을 찾는 방법을 알려주실 수 있습니까? 목표는 때때로 수동 거래 중에 충전하기 때문에 기록에서 진입점 배열을 얻는 것입니다. 이것이 효과적인지 여부를 이해하고 싶습니다. 거래 작업 을 전혀 이해하지 못합니다. 이러한 기능이 구현되지 않은 클래스를 사용합니다.(

HistorySelectByPosition 이 당신을 도울 것입니다

다음은 몇 가지 옵션입니다.

  • 거래를 하고 DEAL_ENTRY_IN 또는 DEAL_ENTRY_OUT 속성을 확인하여 시장에 진입하거나 종료하고 이 거래의 가격과 시간을 확인하십시오.
  • 명령을 받다. 인덱스가 0이면 각각 시장 진입이며 OrdersTotal()-1은 시장에서 퇴장합니다.
  • 두 가지 옵션을 모두 선택하는 것이 가장 좋습니다. 사실은 포지션이 슬리피지로 열리면 거래 가격 ≠ 주문 가격입니다. 따라서 필요한 것을 가져 가십시오.
Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 
어떻게 든 MT5에서 많은 버퍼를 압축적으로 선언할 수 있습니까?
 
Mihail Matkovskij :

누가 당신이 Low에 한 줄 더 추가하는 것을 막았는지 모르겠습니다....

최소한 전체 배열의 선 또는 기타 개체를 추가하고 최소한 모든 Low 및 High를 표시할 수 있습니다. 무엇이 문제인가?...

예! 제대로 작동합니다! 고마워 마이클!


그리고 만약 당신이 최종선을 깨고 당신이 돌파한 후에 그것을 삭제해야 한다면:

 if (c0<PRL)  
  {
  lLine.Delete( 0 , "lLine" ); 
  }

권리?

 
Alexey Belyakov :

예! 제대로 작동합니다! 고마워 마이클!


그리고 만약 당신이 최종선을 깨고 당신이 돌파한 후에 그것을 삭제해야 한다면:

권리?

프로그램은 레벨을 강조 표시하기 위해 두 줄만 사용합니다. 그냥 0으로 설정할 수 있는데 왜 삭제했다가 다시 생성합니까?...

lLine.Price( 0 , 0.0 );

선은 차트에 표시되지 않습니다... 그런 다음 다시 표시할 수 있습니다.

lLine.Price( 0 , PRL);
 
Mihail Matkovskij :

프로그램은 레벨을 강조 표시하기 위해 두 줄만 사용합니다. 그냥 0으로 설정할 수 있는데 왜 삭제했다가 다시 생성합니까?...

선은 차트에 표시되지 않습니다... 그런 다음 다시 표시할 수 있습니다.

따라서? 아니면 OnInit에서 다른 것을 선언해야 합니까?

 if (c0<PRL)  
{
lLine.Price( 0 , 0.0 );
}