요새. 실행 질문 - 페이지 58

 
Andrey Khatimlianskii :
바로, 네트워크 지연입니다. 그리고 주문을 오랫동안 보내거나(또는 확인을 받았을 때) 이벤트가 손실됩니다.

아니, 옳지 않아!

1. 이것은 "네트워크" 지연이 아니라 MT5 서버( 중개자의 하드웨어 )의 지연입니다.

2. TradeTransaction이 항상 손실되는 것은 아닙니다(가끔). 위에서 볼 수 있듯이 지연은 409ms이고 이벤트는 손실되지 않았습니다.

그렇기 때문에 지연의 원인은 네트워크가 아니라 MT5 서버(브로커의 하드웨어)라고 주장합니다 .

CheckOrders() 함수의 서버 응답 시간 초과는 700~1200ms입니다(

타이머의 어느 시점(500ms 기간)에 명령이 전송되었는지, 이는 일반 모드(7-9ms)에서 100배 더 긴(내 구성에서)

18ms의 지연으로 이벤트가 손실되었지만 409ms의 지연으로 이벤트가 손실되지 않았다는 사실은 이것이 MT5 서버의 "캔트"이고 다른 것은 아니라고 말할 수 있습니다.

원인.

그리고 한 가지 더... 제 친구는 저희 집에 살고 있는데 집에 있는 같은 라우터를 통해 제 제공자를 통해 제 로봇과 두 개의 터미널 에서 거래를 하고 있습니다. 어떤 이유에서인지 그는

이때 지연이 없었습니다!

 2015.10 . 22 14 : 14 : 05.041 Trades 'xxxxx' : modify order # 22486145 buy limit 2.00 ED- 6.16 at 1.1326 sl: 0.0000 tp: 0.0000 -> 1.1332 , sl: 0.0000 tp: 0.0000
2015.10 . 22 14 : 14 : 05.049 Trades 'xxxxx' : modify order # 22486145 buy limit 2.00 ED- 6.16 at 1.1326 sl: 0.0000 tp: 0.0000 -> 1.1332 , sl: 0.0000 tp: 0.0000 placed for execution in 8 ms
2015.10 . 22 14 : 14 : 38.389 Trades 'xxxxx' : cancel order # 22486314 sell limit 2.00 Eu- 12.16 at 82867
2015.10 . 22 14 : 14 : 38.397 Trades 'xxxxx' : cancel order # 22486314 sell limit 2.00 Eu- 12.16 at 82867 placed for execution in 8 ms
 
마이클, 게시물을 편집하지 마십시오. 눈으로 업데이트를 찾을 필요가 없도록 새 항목을 추가하는 것이 좋습니다.
 
Andrey Khatimlianskii :
마이클, 게시물을 편집하지 마십시오. 눈으로 업데이트를 찾을 필요가 없도록 새 항목을 추가하는 것이 좋습니다.
오타가 많아서 수정했습니다...
 
akuloff :

치고?

스크립트에서 삭제하기 전에 주문별로 OrderSelect를 하고, 선택하면 히스토리에 없고 활성 상태인 경우 오류는 무엇입니까?

하나의 주문을 삭제한 후 나머지 미처리 주문의 수는 1만큼 이동합니다.
 
Yury Kirillov :
하나의 주문을 삭제한 후 나머지 미처리 주문의 수는 1만큼 이동합니다.
우리가 그것을 알아 낸지 오래되었습니다 ....
 

Mikhail, 지연이 있는 또 다른 "시트"가 있습니다. 그렇지 않으면 뭔가 지루해집니다. :)))))

디스커버리 언제 가세요? :))))))))

 
여기 전문가들에게 질문이 있습니다. 위치를 재설정하는 방법? (FORTS, Otkritie-Broker, Real)

다음 코드가 있습니다.

 #property strict
long      gTicks= 0 ;
int       Step= 0 ;
//=====
void OnTick ()
{
   gTicks++;
   PositionSelect ( _Symbol );
   //----- Блок 1
   { if ((gTicks> 1000 )&&(Step== 0 ))
   {
       Print ( "OPEN>> *** VOLUME=" , PositionGetDouble ( POSITION_VOLUME ),
                         " *** ID=" , PositionGetInteger ( POSITION_IDENTIFIER ),
                         " *** TYPE=" , EnumToString (( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE )),
                         " *** OrdersTotal()=" , OrdersTotal ());
       MqlTradeRequest request={ 0 };                                   //Обнулим записи запроса
       MqlTradeResult result={ 0 };                                     //Обнулим записи ответа
      request.action= TRADE_ACTION_PENDING ;                           //Отложенный ордер
      request.symbol= _Symbol ;                                         //Инструмент
      request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );             //Прайс (цена) исполнения ордера
      request.type= ORDER_TYPE_SELL_STOP ;                             //Тип ордера
      request.type_filling= ORDER_FILLING_RETURN ;                     //Разрешить исполнять частями (ORDER_FILLING_RETURN)
      request.type_time= ORDER_TIME_SPECIFIED_DAY ;                     //В очереди до экспирации
      request.expiration=
         ( datetime ) SymbolInfoInteger ( _Symbol , SYMBOL_EXPIRATION_TIME ); //Время истечения фьючерсного контракта
      request.volume= 1 ;                                               //Объем
       Print ( "OPEN OrderSend=" , OrderSend (request,result));
       Print ( "OPEN Retcode=" ,result.retcode);
       Print ( "OPEN Order=" ,result.order);
       Print ( "OPEN Deal=" ,result.deal);
       Print ( "OPEN OrdersTotal()=" , OrdersTotal ());
       Print ( "OPEN Volume=" , PositionGetDouble ( POSITION_VOLUME ));
      Step= 1 ;
       return ;
   }} //if((gTicks>1000)&&(Step==0))
   //----- Блок 2
   { if ((gTicks> 2000 )&&(Step== 1 ))
   {
   Print ( "CLOSE>> *** VOLUME=" , PositionGetDouble ( POSITION_VOLUME ),
                     " *** ID=" , PositionGetInteger ( POSITION_IDENTIFIER ),
                     " *** TYPE=" , EnumToString (( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE )),
                     " *** OrdersTotal()=" , OrdersTotal ());
       MqlTradeRequest request={ 0 };                                   //Обнулим записи запроса
       MqlTradeResult result={ 0 };                                     //Обнулим записи ответа
      request.action= TRADE_ACTION_DEAL ;                               //Отложенный ордер
      request.symbol= _Symbol ;                                         //Инструмент
      request.price= SymbolInfoDouble ( _Symbol , SYMBOL_ASK );             //Прайс (цена) исполнения ордера
      request.type= ORDER_TYPE_BUY ;                                   //тип ордера
      request.type_filling= ORDER_FILLING_FOK ;                         //Исполнять только в полном объёме
      request.type_time= ORDER_TIME_DAY ;                               //В очереди до снятия
      request.volume= 1 ;                                               //Объем Правильно
       Print ( "CLOSE OrderSend=" , OrderSend (request,result));
       Print ( "CLOSE Retcode=" ,result.retcode);
       Print ( "CLOSE Order=" ,result.order);
       Print ( "CLOSE Deal=" ,result.deal);
       Print ( "CLOSE OrdersTotal()=" , OrdersTotal ());
       Print ( "CLOSE Volume=" , PositionGetDouble ( POSITION_VOLUME ));
      Step= 2 ;
       return ;
   }} //if((gTicks>2000)&&(Step==1))        
   //----- Блок 3
   { if ((gTicks> 3000 )&&(Step== 2 ))
   {
       Print ( "INFO>> *** VOLUME=" , PositionGetDouble ( POSITION_VOLUME ),
                         " *** ID=" , PositionGetInteger ( POSITION_IDENTIFIER ),
                         " *** TYPE=" , EnumToString (( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE )),
                         " *** OrdersTotal()=" , OrdersTotal ());
      Step= 3 ;
       return ;
   }} //if((gTicks>3000)&&(Step==2))
   { if ((gTicks> 4000 )&&(Step== 3 ))
   {
       ExpertRemove ();
   }} //if((gTicks>4000)&&(Step==3))
} //OnTick()

  포지션을 열다   주문, 역순으로 닫고 결과적으로 위치 볼륨을 확인하십시오.

예상되는 0(영), 1(일)이 있습니다. 아래의 로그(하단에서 시작).

 2015.10 . 27 16 : 28 : 11.476 2015.10 . 26 10 : 05 : 08    ExpertRemove () function called
2015.10 . 27 16 : 28 : 11.465 2015.10 . 26 10 : 03 : 14    INFO>> *** VOLUME= 1.0 *** ID= 2 *** TYPE= POSITION_TYPE_SELL *** OrdersTotal ()= 0
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE Volume= 1.0
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE OrdersTotal ()= 0
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE Deal= 3
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE Order= 3
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE Retcode= 10009
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE OrderSend = true
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    order performed buy 1.00 at 9249 [ # 3 buy 1.00 SBRF- 12.15 at 9249 ]
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    deal performed [ # 3 buy 1.00 SBRF- 12.15 at 9249 ]
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    deal # 3 buy 1.00 SBRF- 12.15 at 9249 done (based on order # 3 )
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    exchange buy 1.00 SBRF- 12.15 at 9249 ( 9242 / 9249 / 9242 )
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    CLOSE>> *** VOLUME= 1.0 *** ID= 2 *** TYPE= POSITION_TYPE_SELL *** OrdersTotal ()= 0
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    order performed sell 1.00 at 9205 [ # 2 sell stop 1.00 SBRF- 12.15 at 9205 ]
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    deal performed [ # 2 sell 1.00 SBRF- 12.15 at 9205 ]
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    deal # 2 sell 1.00 SBRF- 12.15 at 9205 done (based on order # 2 )
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    order [ # 2 sell stop 1.00 SBRF- 12.15 at 9205 ] triggered
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN Volume= 0.0
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN OrdersTotal ()= 1
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN Deal= 0
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN Order= 2
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN Retcode= 10009
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN OrderSend = true
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    sell stop 1.00 SBRF- 12.15 at 9205 ( 9205 / 9227 / 9205 )
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN>> *** VOLUME= 0.0 *** ID= 0 *** TYPE= POSITION_TYPE_BUY *** OrdersTotal ()= 0
2015.10 . 27 16 : 28 : 11.344 SBRF- 12.15 ,M1: testing of Experts\Projects\CoinAge5\Helper_v01\mq5\Tst\TST006_Open_Close_Positions_001.ex5 from 2015.10 . 26 00 : 00 to 2015.10 . 27 00 : 00 started

이유는 무엇입니까?

 
Yury Kirillov :
여기 전문가들에게 질문이 있습니다. 위치를 재설정하는 방법? (FORTS, Otkritie-Broker, Real)

다음 코드가 있습니다.

  포지션을 열다   주문, 역순으로 닫고 결과적으로 위치 볼륨을 확인하십시오.

예상되는 0(영), 1(일)이 있습니다. 아래의 로그(하단에서 시작).

이유는 무엇입니까?

쉽지 않음:

 #include <Trade\Trade.mqh>
CTrade Trade;

void OnTick ()
{
   Trade.PositionClose( Symbol ());
}

?

 
Yury Kirillov :

이유는 무엇입니까?

Pre-PositionSelect가 없는 PositionGet 에서.
 
Vasiliy Sokolov :

쉽지 않음:

?

아니, 더 쉽지 않습니다. 이것이 내가 내 코드를 다루는 방법이며 귀하의 버전에서는 내가 작성하지 않은 라이브러리를 분석해야 합니다. 이 라이브러리를 살펴보면 나와 거의 동일한 작업 세트를 찾을 수 있습니다. 따라서 먼저 FORTS에 주문하는 메커니즘을 이해하고 그 다음에야 표준 라이브러리를 사용하고 싶습니다.