FORTS. Yürütme soruları - sayfa 58

 
Andrey Khatimlianskii :
Bu doğru, ağ gecikmesi. Ve sipariş uzun süre gönderilir (veya onay alınır) ve olay kaybolur.

Hayır, doğru değil!

1. Bu bir "ağ" gecikmesi değil, MT5 sunucusunun gecikmesidir ( belki aracının donanımı )

2. TradeTransaction her zaman kaybolmaz (BAZENLER), yukarıda görüldüğü gibi gecikme 409 ms idi ve olay kaybolmadı

Bu nedenle, gecikmelerin sorumlusunun ağ değil, MT5 sunucusu (broker'ın donanımı) olduğunu savunuyorum .

CheckOrders() işlevinin sunucu yanıt zaman aşımı 700 ila 1200 ms arasındadır (bağlı olarak

normal modda (7-9 ms) 100 kat daha uzun olan (benim konfigürasyonumda) zamanlayıcının hangi noktasında (500 ms periyodu) komut gönderildi)

18 ms'lik bir gecikmeyle olayın kaybolduğu, ancak 409 ms'lik bir gecikmeyle olmadığı gerçeği, bunun MT5 sunucusunun bir "cant" olduğunu ve diğerlerinin değil olduğunu söylememize izin veriyor.

neden olur.

Ve bir şey daha... Arkadaşım, evimde yaşıyor, evdeki aynı yönlendirici üzerinden sağlayıcım aracılığıyla robotumla iki terminalde işlem yapıyor ve nedense

Şu anda hiçbir gecikme yoktu!

 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
 
Michael, lütfen gönderileri düzenleme. Güncellemeleri gözlerinizle aramak zorunda kalmamak için yenilerini eklemek daha iyidir.
 
Andrey Khatimlianskii :
Michael, lütfen gönderileri düzenleme. Güncellemeleri gözlerinizle aramak zorunda kalmamak için yenilerini eklemek daha iyidir.
Çok hata var düzelttim...
 
akuloff :

Chigo?

Scriptte, silmeden önce her sipariş için bir OrderSelect yapılır ve seçilirse, o zaman geçmişe değil ve aktifse, hatalar nelerdir?

Bir sipariş silindikten sonra, kalan işlenmemiş siparişlerin sayısı 1'e kaydırılır.
 
Yury Kirillov :
Bir sipariş silindikten sonra, kalan işlenmemiş siparişlerin sayısı 1'e kaydırılır.
Bunu anlamayalı uzun zaman oldu....
 

Mikhail, gecikmeli başka bir "sayfa" alalım, yoksa bir şeyler sıkıcı hale geldi. :))))

Discovery'ye ne zaman gideceksin? :)))))))

 
İşte uzmanlara bir sorum var. Bir pozisyon nasıl sıfırlanır? (FORTS, Otkritie-Broker, Gerçek)

Aşağıdaki kod var:

 #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()

yani   pozisyon aç   sipariş verin, ters sırayla kapatın, sonuç olarak pozisyon hacmine bakın.

Beklenen 0 (sıfır), elimizde 1 (bir) var. Aşağıdaki günlükler (alttan başlayarak).

 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

Sebebi ne?

 
Yury Kirillov :
İşte uzmanlara bir sorum var. Bir pozisyon nasıl sıfırlanır? (FORTS, Otkritie-Broker, Gerçek)

Aşağıdaki kod var:

yani   pozisyon aç   sipariş verin, ters sırayla kapatın, sonuç olarak pozisyon hacmine bakın.

Beklenen 0 (sıfır), elimizde 1 (bir) var. Aşağıdaki günlükler (alttan başlayarak).

Sebebi ne?

Daha kolay değil:

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

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

?

 
Yury Kirillov :

Sebebi ne?

Ön PositionSelect olmadan PositionGet'te .
 
Vasiliy Sokolov :

Daha kolay değil:

?

Hayır, daha kolay değil. Kodumla bu şekilde ilgileniyorum ve sizin sürümünüzde, benim tarafımdan yazılmamış bir kitaplığı analiz etmem gerekecek. Bu kitaplığın içine bakarsanız, orada benimkiyle yaklaşık olarak aynı işlemler kümesini bulacaksınız. Bu nedenle, önce FORTS'a sipariş verme mekanizmasını anlamak ve ancak o zaman belki de standart kitaplıkları kullanmak istiyorum.