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

 
Vitaly Muzichenko :

모든. 보다 정확하게는 설정에서 지정한 막대의 수를 차트 창에 표시하며 기간에 의존하지 않습니다.

추신 저는 이 값을 변경한 적이 없는데 방금 확인해보니 1000 미만으로 설정하는 것은 불가능합니다.

따라서 iBars() 를 통해 확인해야 합니까?

 

안녕하세요. 스크립트가 작동하지 않는 이유는 무엇입니까?

실수는 어디에 있습니까?


 //+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   
   if (! ChartSetInteger ( 0 , CHART_IS_MAXIMIZED , true ))
     {
       //--- выведем сообщение об ошибке в журнал "Эксперты"
       Print ( __FUNCTION__ + ", Error Code = " , GetLastError ());
       //return(false);
     };


  }
//+------------------------------------------------------------------+
 
이 주제와 관련이 없는 댓글은 " MQL4 MT4 MetaTrader 4 초보자의 질문 "으로 이동되었습니다.
 

안녕 친구들!

질문:

1. 매도 스탑 리밋 주문이 브로커나 터미널에 저장되어 있습니까?

2. 프로그램을 종료할 때 조건이 충족되면 이 명령이 작동합니까?

거래는MICEX 주식 시장에서 수행됩니다. 미리 감사드립니다!

Акции: новости и аналитика фондовых рынков - Блоги трейдеров и аналитика финансовых рынков
Акции: новости и аналитика фондовых рынков - Блоги трейдеров и аналитика финансовых рынков
  • www.mql5.com
Акция — это ценная бумага, которая выпускается каким-либо предприятием (акционерным обществом) и дает ее владельцу права на получение части прибыли от этого предприятия в виде дивидендов. Также
 

안녕하세요! 친애하는 프로그래머. MQL5에 대한 질문

Expert Advisor에서 위치를 제어하는 방법은 무엇입니까? 따라서 하나의 막대에는 하나의 열린 위치 만 있습니다. 즉, 포지션의 청산은 어디에 - 어느 바에 있는지는 중요하지 않지만 오프닝은 한 바에만 있어야 합니다.

이 코드는 완전히 무시되었습니다. 오류가 무엇인지 이해할 수 없습니다.

 if ( OrderSelect ( HistoryDealsTotal ()- 1 ))

{
datetime Cu= PositionsTotal ();
int hd= iBarShift ( Symbol (), _Period ,Cu);
if (hd<= 1 )
{
return ;
}
}



Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Belyakov :

안녕하세요! 친애하는 프로그래머. MQL5에 대한 질문

Expert Advisor에서 위치를 제어하는 방법은 무엇입니까? 따라서 하나의 막대에는 하나의 열린 위치 만 있습니다. 즉, 포지션의 청산은 어디에 - 어느 바에 있는지는 중요하지 않지만 오프닝은 한 바에만 있어야 합니다.

간단한 방법 - 포지션이 열린 바의 오픈 시간을 전역 변수에 저장하고 새로운 포지션을 열 때 바의 오픈 시간을 확인하고 값이 저장된 값보다 크면 오픈한다.

 
Alexey Belyakov :

안녕하세요! 친애하는 프로그래머. MQL5에 대한 질문

Expert Advisor에서 위치를 제어하는 방법은 무엇입니까? 따라서 하나의 막대에는 하나의 열린 위치 만 있습니다. 즉, 포지션의 청산은 어디에 - 어느 바에 있는지는 중요하지 않지만 오프닝은 한 바에만 있어야 합니다.

이 코드는 완전히 무시되었습니다. 오류가 무엇인지 이해할 수 없습니다.



오류: 파리와 커틀릿을 한 묶음으로 혼합했습니다. PENDING ORDERS 및 POSITIONS를 혼합했습니다.

혼란을 피하기 위해 다음 도움말을 읽으십시오. 일반 원칙


위에서 제안한 간단한 방법 - 포지션을 열 때 현재 바의 오픈 시간을 기억하십시오. 또한, 새로운 포지션을 오픈하고 싶다면 저장된 시간과 현재 바의 오픈 시간을 비교합니다.

OnTradeTransaction 에서 포지션 개시 시간을 기억하는 것이 편리합니다:

 //+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       if ( HistoryDealSelect (trans.deal))
         m_deal.Ticket(trans.deal);
       else
         return ;
       if (m_deal. Symbol ()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if (m_deal.DealType()== DEAL_TYPE_BUY || m_deal.DealType()== DEAL_TYPE_SELL )
           {
             if (m_deal.Entry()== DEAL_ENTRY_IN || m_deal.Entry()== DEAL_ENTRY_INOUT )
               m_last_deal_in= iTime (m_symbol.Name(),InpTimeFrame, 0 );
             int size_need_position= ArraySize (SPosition);
             if (size_need_position> 0 )
              {
               for ( int i= 0 ; i<size_need_position; i++)
                 {
                   if (SPosition[i].waiting_transaction)
                     if (SPosition[i].waiting_order_ticket==m_deal.Order())
                       {
                         Print ( __FUNCTION__ , " Transaction confirmed" );
                        SPosition[i].transaction_confirmed= true ;
                         break ;
                       }
                 }
              }
           }
        }
     }
  }

신호가 발생 하면 시간을 확인하십시오 .

 //+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals( void )
  {
   if (m_prev_bars==m_last_deal_in) // on one bar - only one deal
       return ( true );


OHLC Check 2 코드에서 가져온 예

Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит и...
 

뭔가 어려운 .... 어쩐지. 첫 번째 단계에서는 " 현재 바 의 오픈 시간을 기억 "하는 데 문제가 없습니다.

기억나는 것은 다음과 같습니다.

 if ( PositionsTotal ()== 1 )   // Здесь проверяю, что открыта одна позиция
{
datetime Cu= iTime ( NULL , _Period , 0 );         // Здесь в переменную - время открытия бара при открытой позиции

하지만 여기에서는 " 저장된 시간과 현재 바의 여는 시간을 확인하고 있습니다." 문제.

나는 같은 일을 마쳤다. 여기를 봐:

 if ( PositionsTotal ()== 1 )   // Здесь проверяю, что открыта одна позиция (или была открыта, неважно, любое торговое действие)
{
datetime Cu= iTime ( NULL , _Period , 0 );         // Здесь в переменную - время открытия бара при открытой позиции
int hd=+ iBarShift ( Symbol (), _Period ,Cu)+1;     // Здесь в переменную - бар на котором произошло открытие позиции 
if (hd>=1)                                 //Здесь проверяем - если этих баров, больше чем один, то.......   
{
return ; //....то зацикливанием программу, НО проблема только в return
}
}

여기서는 "return(-1)"과 같은 프로그램을 반복해야 하지만 void 때문에 반환에 표현식을 할당할 수 없습니다. 이 순간을 우회하는 방법.? 루프하지만 반환하지 않는 방법은 무엇입니까?

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
datetime PR= iTime ( NULL , _Period , 0 );   // проверяю время открытие бара
if ( PositionsTotal ()== 1 )  
{
datetime TK= iTime ( NULL , _Period , 0 );   // время открытия бара при открытой позиции                        
if (PR==TK)                         // сравниваю
{
return ( true );   // НЕ катит true - ошибка 
}
}


이 옵션도 작동하지 않았습니다.

 
Alexey Belyakov :

뭔가 어려운 .... 어쩐지. 첫 번째 단계에서는 " 현재 바 의 오픈 시간을 기억 "하는 데 문제가 없습니다.

기억나는 것은 다음과 같습니다.

하지만 여기에서는 " 저장된 시간과 현재 바의 여는 시간을 확인하고 있습니다." 문제.

나는 같은 일을 마쳤다. 여기를 봐:

여기서는 "return(-1)"과 같은 프로그램을 반복해야 하지만 void 때문에 반환에 표현식을 할당할 수 없습니다. 이 순간을 우회하는 방법.? 루프하지만 반환하지 않는 방법은 무엇입니까?

반복 프로그램의 경우 목까지 손을 자르는 치료가 사용됩니다. 앞으로도 습관적이지 않도록.


필요한 것은 다음과 같습니다. 프로그램의 전체 내용은 신호 수신을 처리하기만 하면 됩니다.

 //+------------------------------------------------------------------+
//|                              Example One position on one bar.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\DealInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
CTrade         m_trade;                       // object of CTrade class
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
CDealInfo      m_deal;                       // object of CDealInfo class
//--- input parameters
input ulong     InpMagic             = 200 ;       // Magic number
//---
datetime m_prev_bars                = 0 ;         // "0" -> D'1970.01.01 00:00';
datetime m_last_deal_in             = 0 ;         // "0" -> D'1970.01.01 00:00';
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   if (!m_symbol.Name( Symbol ())) // sets symbol name
     {
       Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: CSymbolInfo.Name" );
       return ( INIT_FAILED );
     }
   RefreshRates();
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- we work only at the time of the birth of new bar
   datetime time_0= iTime (m_symbol.Name(), Period (), 0 );
   if (time_0==m_prev_bars)
       return ;
   m_prev_bars=time_0;
   if (!RefreshRates())
     {
      m_prev_bars= 0 ;
       return ;
     }
//--- search for trading signals
   if (!SearchTradingSignals())
     {
      m_prev_bars= 0 ;
       return ;
     }
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
                         const MqlTradeRequest &request,
                         const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if (type== TRADE_TRANSACTION_DEAL_ADD )
     {
       if ( HistoryDealSelect (trans.deal))
         m_deal.Ticket(trans.deal);
       else
         return ;
       if (m_deal. Symbol ()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if (m_deal.DealType()== DEAL_TYPE_BUY || m_deal.DealType()== DEAL_TYPE_SELL )
           {
             if (m_deal.Entry()== DEAL_ENTRY_IN || m_deal.Entry()== DEAL_ENTRY_INOUT )
               m_last_deal_in= iTime (m_symbol.Name(), Period (), 0 );
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals( void )
  {
   if (m_prev_bars==m_last_deal_in) // on one bar - only one deal
       return ( true );
//--- signal
//---
   return ( false );
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if (!m_symbol.RefreshRates())
     {
       Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: " , "RefreshRates error" );
       return ( false );
     }
//--- protection against the return value of "zero"
   if (m_symbol.Ask()== 0 || m_symbol.Bid()== 0 )
     {
       Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: " , "Ask == 0.0 OR Bid == 0.0" );
       return ( false );
     }
//---
   return ( true );
  }
//+------------------------------------------------------------------+


' m_prev_bars ' 변수는 현재 바의 개장 시간을 저장하고 변수 ' m_last_deal_in ' - 포지션이 열린 바의 개장 시간을 저장합니다.

이 두 변수는 ' SearchTradingSignals ' 신호 수신 블록에서 비교됩니다.

사유: