인사말. 나는 유능한 비디오 "MQL4에서 MQL5로 - Metatrader 5를 위한 Expert Advisor를 다시 작성하는 방법"을 보았습니다. 작가님께 큰 존경을 표합니다. 직접 시도하기로 결정했습니다. 썼다. 아이디어는 다음과 같습니다. 1. 입력에서 dtriger = 1로 설정 - 매수가 열립니다. 2. 입력에 dtriger = -1을 설정했습니다. - Sell이 열립니다. 3. 입력에서 dtriger = 0으로 설정했습니다. 열려 있는 모든 항목이 닫힙니다. 도움말 페이지에서 MT5에서 반대 위치를 유지할 수 없다는 것을 읽었습니다. 그리고 나는 그것들을 가지고 있다. 질문: 현재 위치의 마감을 올바르게 등록하는 방법은 다음과 같습니다. 카운터 열기(역방향). 매우 감사합니다.
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo o_position;
CTrade o_trade;
CSymbolInfo o_symbol;
COrderInfo o_order;
inputint triger = 0 ;
inputdouble StartLot = 0.01 ;
inputdouble lpos_volume = 1.0 ;
inputint Step = 10 ;
inputint MagicNumber = 12345 ; // Magic nuaberinputint Slippage = 30 ; // slippageint dtriger;
int dStep;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
dStep = Step ;
dtriger = triger ;
if (!o_symbol.Name( Symbol ()))
return ( INIT_FAILED );
RefreshRates();
o_trade.SetExpertMagicNumber(MagicNumber) ;
if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK ))
{
o_trade.SetTypeFilling( ORDER_FILLING_FOK );
}
elseif (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC ))
{
o_trade.SetTypeFilling( ORDER_FILLING_IOC );
}
else
{
o_trade.SetTypeFilling( ORDER_FILLING_RETURN );
}
o_trade.SetDeviationInPoints(Slippage);
if (o_symbol. Digits () == 3 || o_symbol. Digits () == 5 )
{
dStep = 10 ;
}
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
datetime lpos_time = 0 ;
double lpos_price_open = 0.0 ;
ENUM_POSITION_TYPE lpos_type = - 1 ;
int pos_count = 0 ;
double sum_profit = 0 ;
for ( int i = PositionsTotal () - 1 ; i>= 0 ; i--)
{
if (o_position.SelectByIndex(i))
{
if (o_position. Symbol () == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
if (o_position.Time() > lpos_time)
{
lpos_time = o_position.Time(); //OrderOpenTime();
lpos_price_open = o_position.PriceOpen(); //OrderOpenPrice();
lpos_type = o_position.PositionType() ; //OrderTipe();
}
pos_count++;
sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit() ;
}
}
}
// Считаем кол-во отложенных ордеровint stop_count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i >= 0 ; i--)
{
if (o_order.SelectByIndex(i))
{
if (o_order. Symbol () == o_symbol.Name() && o_order.Magic() == MagicNumber)
stop_count++;
}
}
if (!RefreshRates())
return ;
if (dtriger == 0 )
{
CloseAll();
return ;
}
// + ----- Откраваем Первый ордер ++++++++++if (pos_count == 0 && stop_count == 0 )
{
if ( dtriger == - 1 && lpos_type != POSITION_TYPE_SELL )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111
}
if ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111
}
}
// + ----- Переворот ++++++++++++++++++++++++++++ if (pos_count> 0 )
{
if (lpos_type == POSITION_TYPE_BUY )
{
if ( dtriger == - 1 )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++
}
}
if (lpos_type== POSITION_TYPE_SELL )
{
if ( dtriger == 1 )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++
}
}
}
if (pos_count> 0 && stop_count> 0 )
DeleteStopOrders() ;
}
//-----------------------------------------------------------bool RefreshRates()
{
if (!o_symbol.RefreshRates())
return ( false ) ;
if (o_symbol.Ask() == 0 || o_symbol.Bid() == 0 )
return ( false );
return ( true );
}
//--- --------------------------------------------------------- bool IsFillingTypeAllowed ( string symbol, int fill_type)
{
int filling = ( int ) SymbolInfoInteger (symbol, SYMBOL_FILLING_MODE );
return ((filling && fill_type) == fill_type) ;
}
// -------------------------------------------------- void CloseAll()
{
for ( int index = PositionsTotal ()- 1 ; index >= 0 ; index--)
{
if (o_position.SelectByIndex(index))
{
if (o_position. Symbol () == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
o_trade.PositionClose(o_position.Ticket());
}
}
}
}
//----------------------------------------------------------- // Delete all pending orders//-------------------------------------void DeleteStopOrders()
{
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i-- )
{
if (o_order.SelectByIndex(i))
if (o_order. Symbol () == o_symbol.Name() && o_order.Magic() == MagicNumber)
o_trade.OrderDelete(o_order.Ticket());
}
}
//+------------------------------------------------------------------+
인사말. 나는 유능한 비디오 "MQL4에서 MQL5로 - Metatrader 5를 위한 Expert Advisor를 다시 작성하는 방법"을 보았습니다. 작가님께 큰 존경을 표합니다. 직접 시도하기로 결정했습니다. 썼다. 아이디어는 다음과 같습니다. 1. 입력에서 dtriger = 1로 설정했습니다. 구매가 열립니다. 2. 입력에서 dtriger = -1로 설정 - Sell이 열립니다. 3. 입력에서 dtriger = 0으로 설정했습니다. 열려 있는 모든 항목이 닫힙니다. 도움말 페이지에서 MT5에서 반대 위치를 유지할 수 없다는 것을 읽었습니다. 그리고 나는 그것들을 가지고 있다. 질문: 현재 위치의 마감을 올바르게 등록하는 방법은 다음과 같습니다. 카운터 열기(역방향). 매우 감사합니다.
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
1. dtriger = 1 - 매수를 엽니다. 2. dtrigger = -1 - 매도가 열립니다. 3. dtriger = 0 - 열려 있는 모든 항목이 닫힙니다.
그리고 고문은 다음과 같이 해야 합니다.
BUY를 열어야 하는 경우 - 먼저 SELL을 닫아야 합니다(SELL 위치를 닫으라는 명령을 내립니다. 존재 여부는 중요하지 않음)
SELL을 열어야 하는 경우 먼저 BUY를 닫아야 합니다(BUY 위치를 닫으라는 명령을 내립니다. 존재 여부는 중요하지 않음)
모든 것을 닫아야 하는 경우 모든 것을 닫으십시오(구매 또는 판매 여부는 중요하지 않음).
구현을 위해서는 두 가지 알고리즘이 필요합니다(고유 식별자도 여기에 포함됨 - 매직 넘버) - 끌 수도 있습니다.
//+------------------------------------------------------------------+//| Close positions |//+------------------------------------------------------------------+void ClosePositions( constENUM_POSITION_TYPE pos_type)
{
for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of current positionsif (m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==InpMagic)
if (m_position.PositionType()==pos_type) // gets the position type
m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
}
그리고
//+------------------------------------------------------------------+//| Close all positions |//+------------------------------------------------------------------+void CloseAllPositions( void )
{
for ( int i= PositionsTotal ()- 1 ;i>= 0 ;i--) // returns the number of current positionsif (m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif (m_position. Symbol ()==m_symbol.Name() && m_position.Magic()==InpMagic)
m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
}
일반적인 의미는 주기의 모든 위치를 PositionsTotal() -1에서 0으로 우회하는 것입니다. 즉, PositionsTotal()-1에서 0으로, 0에서 PositionsTotal()-1로가 아니라 그것은 중요하다.
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
인사말. 나는 유능한 비디오 "MQL4에서 MQL5로 - Metatrader 5를 위한 Expert Advisor를 다시 작성하는 방법"을 보았습니다.
작가님께 큰 존경을 표합니다. 직접 시도하기로 결정했습니다. 썼다. 아이디어는 다음과 같습니다.
1. 입력에서 dtriger = 1로 설정 - 매수가 열립니다.
2. 입력에 dtriger = -1을 설정했습니다. - Sell이 열립니다.
3. 입력에서 dtriger = 0으로 설정했습니다. 열려 있는 모든 항목이 닫힙니다.
도움말 페이지에서 MT5에서 반대 위치를 유지할 수 없다는 것을 읽었습니다.
그리고 나는 그것들을 가지고 있다.
질문: 현재 위치의 마감을 올바르게 등록하는 방법은 다음과 같습니다.
카운터 열기(역방향).
매우 감사합니다.
인사말. 나는 유능한 비디오 "MQL4에서 MQL5로 - Metatrader 5를 위한 Expert Advisor를 다시 작성하는 방법"을 보았습니다.
작가님께 큰 존경을 표합니다. 직접 시도하기로 결정했습니다. 썼다. 아이디어는 다음과 같습니다.
1. 입력에서 dtriger = 1로 설정했습니다. 구매가 열립니다.
2. 입력에서 dtriger = -1로 설정 - Sell이 열립니다.
3. 입력에서 dtriger = 0으로 설정했습니다. 열려 있는 모든 항목이 닫힙니다.
도움말 페이지에서 MT5에서 반대 위치를 유지할 수 없다는 것을 읽었습니다.
그리고 나는 그것들을 가지고 있다.
질문: 현재 위치의 마감을 올바르게 등록하는 방법은 다음과 같습니다.
카운터 열기(역방향).
매우 감사합니다.
설명서를 잘 안 읽으신 것 같습니다.
참조: 일반 원칙 - 거래 운영 .
결론: MetaTrader 5에는 네팅 시스템 과 헤징 시스템 이 모두 있습니다.
그리고 나는 당신의 작업을 다른 방식으로 공식화할 것입니다:
1. dtriger = 1 - 매수를 엽니다.
2. dtrigger = -1 - 매도가 열립니다.
3. dtriger = 0 - 열려 있는 모든 항목이 닫힙니다.
그리고 고문은 다음과 같이 해야 합니다.
구현을 위해서는 두 가지 알고리즘이 필요합니다(고유 식별자도 여기에 포함됨 - 매직 넘버) - 끌 수도 있습니다.
그리고
일반적인 의미는 주기의 모든 위치를 PositionsTotal() -1에서 0으로 우회하는 것입니다. 즉, PositionsTotal()-1에서 0으로, 0에서 PositionsTotal()-1로가 아니라 그것은 중요하다.
또 다른 팁: MetaTrader 5에서 작업할 때 주문은 PENDING ORDER 입니다. 따라서 초기 단계에서 생각에 혼란을 일으키지 않도록 "주문"이라는 단어를 기억조차하지 않는 것이 좋습니다.
또한 매수 및 매도 시장 주문과 CloseBy 마감 주문이 있습니다.
시계처럼 정말 감사합니다.
시계처럼 정말 감사합니다.
그럼 너무 친절하세요.
무효가 삽입되어 예비폐쇄를 규정하고 있지만 여기저기서 또 주문이 걸려 있다.
그럼 너무 친절하세요.
무효가 삽입되어 예비폐쇄를 규정하고 있지만 여기저기서 또 주문이 걸려 있다.
시계처럼 정말 감사합니다.
오프닝 시그널은? 그렇지 않으면 결과가 완전한 코드가 아닙니다. 포지션을 닫고 포지션 도 열어야 합니다...
무역 명령.mq5
#속성 버전 "1.000"
지금까지는 다음 세 가지만 수행합니다.