{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
나는 최근에 재오픈 주문에 대한 주제를 제기했습니다. 문제를 해결했다고 생각했기 때문입니다. 일주일 동안 모든 것이 잘 작동했습니다. 그러나 오늘은 열 때만 비슷한 문제가 발생했습니다.
오프닝 9에 Finam에서 많은 주문이 열렸지만... 모든 경우에 하나의 주문만 열렸어야 했습니다.
다음은 EA의 코드 스니펫입니다.
{
Coment=" Open Sell "+ string (OpenOrders+ 1 );
ret=OpenSellPosition( _Symbol ,volume,Coment,Sleeppage,Filling);
}
if (ret)
{
OpenOrders++;
PriceLastOpen=price;
}
bool OpenSellPosition( string symbol, double volume, string comment="", ulong deviation= 10 , ENUM_ORDER_TYPE_FILLING filling= ORDER_FILLING_FOK )
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
저것들. 코드에서 성공적인 작업 시 OpenOrders 변수가 증가한다는 것을 알 수 있습니다. 이 변수는 초기에 0입니다.
0보다 크면 주문이 더 이상 열리지 않아야 하지만 전체 주문 더미가 Order1 주석과 함께 열려 있습니다.
주문을 여는 함수에서 긍정적인 응답과 주문 티켓의 수신을 확인 하지만 실제로 주문이 설정되었다는 사실에도 불구하고 어떤 이유로 이 함수는 false를 반환합니다.
무엇이 잘못되었는지 설명하고 이 문제를 해결하는 방법은 무엇입니까?
나쁜 유전 외환.
결과를 확인해야 합니다. 주문하다.
주문이 접수되었다고 해서 거래가 이미 이루어진 것은 아닙니다.
나쁜 유전 외환.
결과를 확인해야 합니다. 주문하다.
주문이 접수되었다고 해서 거래가 이미 이루어진 것은 아닙니다.
거래에 대한 정보가 아직 도착하지 않았다고 가정합니다. 여기( 빨간색으로 강조 표시)는 운에 의존합니다. 그리고 그녀는 변덕스러운 숙녀입니다 :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
거래에 대한 정보가 아직 도착하지 않았다고 가정합니다. 여기( 빨간색으로 강조 표시)는 운에 의존합니다. 그리고 그녀는 변덕스러운 숙녀입니다 :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
모든 거래 를 기록해야 합니다. 예를 들면 다음과 같습니다.
먼저 "헤더"에서 거래 클래스 CTrade를 연결합니다.
CTrade m_trade; // trading object
다음은 구매 작업의 예입니다.
{
if (m_trade.ResultDeal()== 0 )
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print ("Buy -> true . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
즉, 두 번 오류가 발생할 수 있습니다. 첫 번째 수준 - 작업이 기본 검사를 통과하지 못함 과 두 번째 수준의 방어 - 트랜잭션 티켓을 확인합니다 .
그런 다음 오버레이가 있으면 로그에서 알아낼 수 있습니다.
추가됨: 위의 내용은 SYNCHRONOUS 작동 모드에 해당됩니다.
바로 지금, 그리고 여기에서 전문가들이 가르칠 것입니다))
Объясните что не так, как решить данную проблему?
귀하의 경험에 비추어 볼 때 여기에서 그러한 질문을 하는 것은 무례합니다.
모든 거래 를 기록해야 합니다. 예를 들면 다음과 같습니다.
먼저 "헤더"에서 거래 클래스 CTrade를 연결합니다.
CTrade m_trade; // trading object
다음은 구매 작업의 예입니다.
{
if (m_trade.ResultDeal()== 0 )
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print ("Buy -> true . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
즉, 두 번 오류가 발생할 수 있습니다. 첫 번째 수준 - 작업이 기본 검사를 통과하지 못함 과 두 번째 수준의 방어 - 트랜잭션 티켓을 확인합니다 .
그런 다음 오버레이가 있으면 로그에서 알아낼 수 있습니다.
추가됨: 위의 내용은 SYNCHRONOUS 작동 모드에 해당됩니다.
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
모든 거래 를 기록해야 합니다. 예를 들면 다음과 같습니다.
먼저 "헤더"에서 거래 클래스 CTrade를 연결합니다.
CTrade m_trade; // trading object
다음은 구매 작업의 예입니다.
{
if (m_trade.ResultDeal()== 0 )
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print ("Buy -> true . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print ("Buy -> false . Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
즉, 두 번 오류가 발생할 수 있습니다. 첫 번째 수준 - 작업이 기본 검사를 통과하지 못함 과 두 번째 수준의 방어 - 트랜잭션 티켓을 확인합니다 .
그런 다음 오버레이가 있으면 로그에서 알아낼 수 있습니다.
추가됨: 위의 내용은 SYNCHRONOUS 작동 모드에 해당됩니다.
나는 최근에 재오픈 주문에 대한 주제를 제기했습니다. 문제를 해결했다고 생각했기 때문입니다. 일주일 동안 모든 것이 잘 작동했습니다. 그러나 오늘은 열 때만 비슷한 문제가 발생했습니다.
오프닝 9에 Finam에서 많은 주문이 열렸지만... 모든 경우에 하나의 주문만 열렸어야 했습니다.
다음은 EA의 코드 스니펫입니다.
{
Coment=" Open Sell "+ string (OpenOrders+ 1 );
ret=OpenSellPosition( _Symbol ,volume,Coment,Sleeppage,Filling);
}
if (ret)
{
OpenOrders++;
PriceLastOpen=price;
}
bool OpenSellPosition( string symbol, double volume, string comment="", ulong deviation= 10 , ENUM_ORDER_TYPE_FILLING filling= ORDER_FILLING_FOK )
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory (Request);
ZeroMemory (Results);
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
Request.action= TRADE_ACTION_DEAL ;
Request.type= ORDER_TYPE_SELL ;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res= false ;
res= OrderSend (Request,Results);
if (res)
{
if (Results.deal> 0 ) return ( true );
else return ( false );
}
return ( false );
}
저것들. 코드에서 성공적인 작업 시 OpenOrders 변수가 증가한다는 것을 알 수 있습니다. 이 변수는 초기에 0입니다.
0보다 크면 주문이 더 이상 열리지 않아야 하지만 전체 주문 더미가 Order1 주석과 함께 열려 있습니다.
주문을 여는 함수에서 긍정적인 응답과 주문 티켓의 수신을 확인 하지만 실제로 주문이 설정되었다는 사실에도 불구하고 어떤 이유로 이 함수는 false를 반환합니다.
무엇이 잘못되었는지 설명하고 이 문제를 해결하는 방법은 무엇입니까?