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

 
EgorKim :

나는 점 A와 B의 시간과 가격을 가지고 있다

C 지점의 시간과 가격을 찾는 방법은 무엇입니까? A와 B의 중간에 있습니다.

어디에서도 예를 찾을 수 없습니다.


 //+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect( const int left_bar, const double left_price, const int right_bar, const double right_price, const int bar_to_search) 
  {
   return (right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+
 
EgorKim :

나는 점 A와 B의 시간과 가격을 가지고 있다

C 지점의 시간과 가격을 찾는 방법은 무엇입니까? A와 B의 중간에 있습니다.

어디에서도 예를 찾을 수 없습니다.


시간 C = 시간 B - ( (시간 B - 시간 A) / 2)

시간 가격 시작

 
Сергей Таболин :

시간 C = 시간 B - ( (시간 B - 시간 A) / 2)

시간 가격 시작

확인해보니 주말에 가끔 옴)

선 자체에서 중심을 찾을 수 있습니까?

여기 내 라인이 있습니다

 void SetLow( double price_1, double price_2, datetime time_1, datetime time_2)
  {
   ObjectCreate ( 0 , "Low" , OBJ_TREND , 0 ,time_2,price_2,time_1,price_1);
   ObjectSetInteger ( 0 , "Low" , OBJPROP_COLOR , clrAqua );
   ObjectSetInteger ( 0 , "Low" , OBJPROP_WIDTH , 2 );
   ObjectSetInteger ( 0 , "Low" , OBJPROP_STYLE , STYLE_DOT );
   ObjectSetInteger ( 0 , "Low" , OBJPROP_BACK , false );
   ObjectSetInteger ( 0 , "Low" , OBJPROP_RAY_RIGHT , true );
  }
 
Igor Makanu :

마지막으로 열린 주문의 티켓을 찾는 방법은 무엇입니까? 다음과 같이 작동하지 않습니다.

정확히 무엇을 알고 싶습니까? ORDER, DEAL, POSITIONS의 개념을 명확히 구분할 필요가 있습니다.

둘째, CTrade 클래스의 객체에 "order_1" ""order_2"라는 단어로 이름을 붙여 즉시 혼동을 일으켰습니다. CTrade 클래스의 객체는 일반적으로 "m_trade_1" 및 "m_trade_2"라고 합니다. 이는 성능에 영향을 미치지 않지만 혼란을 야기합니다.

세 번째: PositionClose 메서드는 0과 같은 위치 티켓을 전달하기 때문에 작동하지 않습니다(OnInit()에서 0으로 초기화). 첫 번째 위치에 "0" 티켓이 있는 경우 이러한 이상적인 조건은 테스터에서 얻었습니다.

넷째: 구매 방법

메모

Buy(...) 메서드의 성공적인 완료가 항상 성공적인 거래 작업을 의미하는 것은 아닙니다. ResultRetcode() 메서드를 호출하여 거래 요청(거래 서버 반환 코드 ) 실행 결과와 메서드에서 반환된 값을 확인해야 합니다.   결과 거래() .


ResultDeal() 메서드

DEAL 티켓을 받습니다.

 
Vladimir Karputov :

정확히 무엇을 알고 싶습니까? ORDER, DEAL, POSITIONS의 개념을 명확히 구분할 필요가 있습니다.

둘째, CTrade 클래스의 객체에 "order_1" ""order_2"라는 단어로 이름을 붙여 즉시 혼동을 일으켰습니다. CTrade 클래스의 객체는 일반적으로 "m_trade_1" 및 "m_trade_2"라고 합니다. 이는 성능에 영향을 미치지 않지만 혼란을 야기합니다.

세 번째: PositionClose 메서드는 0과 같은 위치 티켓을 전달하기 때문에 작동하지 않습니다(OnInit()에서 0으로 초기화). 첫 번째 위치에 "0" 티켓이 있는 경우 이러한 이상적인 조건은 테스터에서 얻었습니다.

넷째: 구매 방법

메모

Buy(...) 메서드의 성공적인 완료가 항상 성공적인 거래 작업을 의미하는 것은 아닙니다. ResultRetcode() 메서드를 호출하여 거래 요청(거래 서버 반환 코드 ) 실행 결과와 메서드에서 반환된 값을 확인해야 합니다.   결과 거래() .


ResultDeal() 메서드

DEAL 티켓을 받습니다.

고맙습니다! 이미 알아 냈어

일반적으로 문제는 풍부한 정보, 가십 및 기회에서 비롯되었습니다. .... Result()에서 티켓을 포착할 수 없을 것이라고 확신했습니다. 왜냐하면 시간이 지나면 OnTradeTransaction() 이벤트를 기억하기 시작하기 때문입니다. .. 그리고 우리는 간다!

이제 나는 MT5 테스터를 다루고 있습니다. 우리는 단순히 재현 가능한 예제가 필요하지만 기능 코드에 대해 이야기하는 것이 아닙니다. 지금까지는 테스터에 대해서만

도움을 주셔서 다시 한 번 감사드립니다!

이 코드는 테스터에서 최신 주문의 티켓을 얻을 수 있습니다.

 //+------------------------------------------------------------------+
//|                                                   tst_CTrade.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"

input double Lot_1 = 0.10 ;
input double Lot_2 = 0.20 ;
input ulong   Magic1 = 12345 ;
input ulong   Magic2 = 67890 ;
#include<Trade\Trade.mqh>
CTrade order_1,order_2;
ulong    ticket_1,ticket_2;
//_______________________________________________________________________ 
class CNewbar
  {
private :
   datetime           mnewtime;
   ENUM_TIMEFRAMES    mperiod;
public :
                     CNewbar()                        { mperiod= PERIOD_CURRENT ;  mnewtime= TimeCurrent (); }
                     CNewbar( ENUM_TIMEFRAMES period)  { mperiod=period;          mnewtime= TimeCurrent (); }
   bool               NewBar(){ datetime t= iTime ( NULL ,mperiod, 0 ); if (mnewtime<t){ mnewtime=t; return ( true ); } return ( false );  }
  };
//_______________________________________________________________________ 

CNewbar Bar_H1( PERIOD_H1 );
CNewbar Bar_M30( PERIOD_M30 );
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   order_1.SetExpertMagicNumber(Magic1);
   order_2.SetExpertMagicNumber(Magic2);
   ticket_1 = 0 ;
   ticket_2 = 0 ;
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   if (Bar_H1.NewBar())
     {
      order_1.PositionClose(ticket_1);
       if (order_1.Buy(Lot_1))
        {
         ticket_1=order_1.ResultOrder();
         Print ( "NewBar H1, ticket_1 = " ,ticket_1);
        }
     }

   if (Bar_M30.NewBar())
     {
      order_2.PositionClose(ticket_2);
       if (order_2.Sell(Lot_2))
        {
         ticket_2=order_2.ResultOrder();
         Print ( "NewBar M30, ticket_2 = " ,ticket_2);
        }
     }
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

고맙습니다! 이미 알아 냈습니다.

일반적으로 문제는 풍부한 정보, 가십 및 기회에서 비롯되었습니다. .... Result()에서 티켓을 포착할 수 없을 것이라고 확신했습니다. 왜냐하면 시간이 지나면 OnTradeTransaction() 이벤트를 기억하기 시작하기 때문입니다. .. 그리고 우리는 간다!

이제 나는 MT5 테스터를 다루고 있습니다. 우리는 단순히 재현 가능한 예제가 필요하지만 기능 코드에 대해 이야기하는 것이 아닙니다. 지금까지는 테스터에 대해서만

도움을 주셔서 다시 한 번 감사드립니다!

이 코드는 테스터에서 최신 주문의 티켓을 얻을 수 있습니다.

예, ResultOrder의 도움으로 주문 티켓 을 받게 됩니다.

 
Vladimir Karputov :

예, ResultOrder의 도움으로 주문 티켓 을 받게 됩니다.

좋아, 이제 이것에 대한 문제가 보이지 않지만 CTrade를 사용할 때 또 다른 문제가 나타났습니다. 기억된 주문 티켓이 있고 PositionClose(m_ticket)를 사용하여 티켓을 닫을 수 있습니다.

내 주문이 마감되었는지 확인하는 방법 MQL4에서는 간단했습니다. OrderSelect()를 통해 주문을 선택하고 if(OrderCloseTime()>0)을 확인했습니다. 마감 시간이 0과 같지 않으면 주문 닫혀있다

CTrade SB를 사용하여 주문이 마감되었는지 어떻게 알 수 있습니까?

 
Igor Makanu :

좋아, 이제 이것에 대한 문제가 보이지 않지만 CTrade를 사용할 때 또 다른 문제가 나타났습니다. 기억된 주문 티켓이 있고 PositionClose(m_ticket)를 사용하여 티켓을 닫을 수 있습니다.

내 주문이 마감되었는지 확인하는 방법 MQL4에서는 간단했습니다. OrderSelect()를 통해 주문을 선택하고 if(OrderCloseTime()>0)을 확인했습니다. 마감 시간이 0과 같지 않으면 주문 닫혀있다

CTrade SB를 사용하여 주문이 마감되었는지 어떻게 알 수 있습니까?

주문을 잊어 버려! 입장이 있습니다!

결국, 나는 즉시 물었습니다. 주문, 거래 또는 위치 중 정확히 무엇이 필요합니까? 용어를 혼동하지 마십시오. 거래 주문 실행 후 POSITION이 나타납니다! 주문하지 마세요!


그러므로 무엇을 하고 있고 무엇을 받고 싶은지 먼저 말로 설명하십시오. ORDER 대신 "BUY trade order" 및 "SELL trade order"를 사용하십시오. 결과적으로 "BUY 포지션" 또는 "SELL 포지션"을 얻습니다.

 
Igor Makanu :

좋아, 이제 이것에 대한 문제가 보이지 않지만 CTrade를 사용할 때 또 다른 문제가 나타났습니다. 기억된 주문 티켓이 있고 PositionClose(m_ticket)를 사용하여 티켓을 닫을 수 있습니다.

내 주문이 마감되었는지 확인하는 방법 MQL4에서는 간단했습니다. OrderSelect()를 통해 주문을 선택하고 if(OrderCloseTime()>0)을 확인했습니다. 마감 시간이 0과 같지 않으면 주문 닫혀있다

CTrade SB를 사용하여 주문이 마감되었는지 어떻게 알 수 있습니까?

위치 티켓이 일반적으로 주문 티켓에 해당한다는 점을 고려하지 않지만 절대적으로 항상 그렇지 않은 경우 SB 없이 PositionSelectByTicket 기능 을 사용할 수 있습니다.

Документация по MQL5: Торговые функции / PositionSelectByTicket
Документация по MQL5: Торговые функции / PositionSelectByTicket
  • www.mql5.com
Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Функция PositionSelectByTicket() копирует данные о позиции в программное окружение, и...
 
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[])
  {

지표 계산 코드에 자신의 계산 공식을 대체할 수 있습니까?

예를 들어 열기/2

사유: