나는 최근에 재오픈 주문에 대한 주제를 제기했습니다. 문제를 해결했다고 생각했기 때문입니다. 일주일 동안 모든 것이 잘 작동했습니다. 그러나 오늘은 열 때만 비슷한 문제가 발생했습니다. 오프닝 9에 Finam에서 많은 주문이 열렸지만... 모든 경우에 하나의 주문만 열렸어야 했습니다.
다음은 EA의 코드 스니펫입니다.
if (OpenOrders< 1 ) { Coment=" Open Sell "+ string (OpenOrders+ 1 ); ret=OpenSellPosition( _Symbol ,volume,Coment,Sleeppage,Filling); }
나는 최근에 재오픈 주문에 대한 주제를 제기했습니다. 문제를 해결했다고 생각했기 때문입니다. 일주일 동안 모든 것이 잘 작동했습니다. 그러나 오늘은 열 때만 비슷한 문제가 발생했습니다.
오프닝 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를 반환합니다.
무엇이 잘못되었는지 설명하고 이 문제를 해결하는 방법은 무엇입니까?
do
{
n++;
}
while (! PositionSelectByTicket (tradeResult.deal) && n < 5 );
그리고 OrderCheck(Request, checkResult) 체크가 없다는 것도 알아차렸습니다.
예, 그리고 시장 주문에서도 - 가격 = 0
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID ); 잊어버려
{
MqlTradeRequest request={ 0 };
MqlTradeResult result={ 0 };
order_ticket= 0 ;
request.action = TRADE_ACTION_DEAL ;
request.magic = 9876543211 ;
request.symbol = Symbol ();
request.volume = 1 ;
request.price = 0 ;
request.type= ORDER_TYPE_BUY ;
request.comment= "Sync mode" ;
request.type_filling=ORDER_FILLING_FOK;
request.type_time= ORDER_TIME_DAY ;
if ( OrderSend (request,result))
{
if ((result.retcode== TRADE_RETCODE_DONE ) || (result.retcode== TRADE_RETCODE_PLACED ))
{
if (result.order> 0 )
{
order_ticket=result.order;
Print ( __FUNCTION__ , " Order sent in sync mode" );
return ( true );
}
else
{
Print ( __FUNCTION__ , " Error order sent in sync mode! Retcode = " ,result.retcode);
}
}
else
{
Print ( __FUNCTION__ , " Error order sent in sync mode! Retcode = " ,result.retcode);
}
}
else
{
Print ( __FUNCTION__ , " Order not sent in sync mode." );
}
return ( false );
}
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch (trans.type)
{
case TRADE_TRANSACTION_HISTORY_ADD :
if ((order_ticket > 0 ) && (trans.order == order_ticket))
{
//Вот здесь и смотрим что произошло
}
break ;
}
}
또한 선택을 시도하여 위치의 열림을 확인할 수 있습니다. 그리고 몇 가지를 시도하는 것이 좋습니다
do
{
n++;
}
while (! PositionSelectByTicket (tradeResult.deal) && n < 5 );
그리고 OrderCheck(Request, checkResult) 체크가 없다는 것도 알아차렸습니다.
이미 자리가 있었다면?
아니면 이미 포지션이 있는데 주문이 완전히 채워지지 않았나요?
또한 선택을 시도하여 위치의 열림을 확인할 수 있습니다. 그리고 몇 가지를 시도하는 것이 좋습니다
do
{
n++;
}
while (! PositionSelectByTicket (tradeResult.deal) && n < 5 );
그리고 OrderCheck(Request, checkResult) 체크가 없다는 것도 알아차렸습니다.
글쎄요, 가능합니다 . OrderCheck(Request, checkResult)를 삽입하겠습니다 .
감사해요
그러나 나는 이 주기를 별로 좋아하지 않는다.
예, 그리고 시장 주문에서도 - 가격 = 0
Request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID ); 잊어버려
{
MqlTradeRequest request={ 0 };
MqlTradeResult result={ 0 };
order_ticket= 0 ;
request.action = TRADE_ACTION_DEAL ;
request.magic = 9876543211 ;
request.symbol = Symbol ();
request.volume = 1 ;
request.price = 0 ;
request.type= ORDER_TYPE_BUY ;
request.comment= "Sync mode" ;
request.type_filling=ORDER_FILLING_FOK;
request.type_time= ORDER_TIME_DAY ;
if ( OrderSend (request,result))
{
if ((result.retcode== TRADE_RETCODE_DONE ) || (result.retcode== TRADE_RETCODE_PLACED ))
{
if (result.order> 0 )
{
order_ticket=result.order;
Print ( __FUNCTION__ , " Order sent in sync mode" );
return ( true );
}
else
{
Print ( __FUNCTION__ , " Error order sent in sync mode! Retcode = " ,result.retcode);
}
}
else
{
Print ( __FUNCTION__ , " Error order sent in sync mode! Retcode = " ,result.retcode);
}
}
else
{
Print ( __FUNCTION__ , " Order not sent in sync mode." );
}
return ( false );
}
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch (trans.type)
{
case TRADE_TRANSACTION_HISTORY_ADD :
if ((order_ticket > 0 ) && (trans.order == order_ticket))
{
//Вот здесь и смотрим что произошло
}
break ;
}
}
그리고 가격에 대해 .... 예, 저는 MT4에 더 익숙합니다. 그리고 거기에서 항상 가격을 설정해야합니다 ...
반복합니다
또한 주문 현황과 이미 내역에 나타난 적이 있는지 여부도 확인해야 합니다.
거래소는 포지션이 아닌 주문만 가능합니다.
지연을 두는 것이 옳겠지만 저는 시장에서 일하고 있으며 여기서 티켓은 Results.deal 을 사용하여 얻습니다.
나는 당신의 미소가 무엇을 의미하는지 이해하지 못합니까?
당신에게서 그런 소식을 들을 줄은 몰랐습니다. 무슨 일시 중지 또는 농담입니까?
나쁜 유전 외환.
...
이미 자리가 있었다면?
아니면 이미 자리가 있는데 주문이 완전히 채워지지 않았습니까?