FORTES. Questões de aplicação da lei - página 58

 
Andrey Khatimlianskii:
Isso mesmo, a latência da rede. E o pedido leva muito tempo para enviar (ou receber confirmação) e o evento é perdido.

Não, não é!

1. isto não é um atraso "rede", mas um atraso do servidor MT5(talvez o hardware do corretor)

2. a TradeTransaction NÃO se perde sempre (SEMPRE), como visto acima, o atraso foi de 409 ms e o evento não foi perdido

É por isso que argumento que não é a rede mas o servidor MT5 (o hardware do corretor) que é o culpado pelos atrasos.

O tempo de resposta do servidor da função CheckOrders() é de 700 a 1200 ms (dependendo do

em que ponto do timer (período 500 ms) o comando foi enviado), que é 100 vezes maior do que o tempo de execução (na minha configuração) em modo normal ( 7-9 ms)

O fato de que com um atraso de 18 ms o evento foi perdido, e com 409 ms não foi, nos permite dizer que este é um "bug" do servidor MT5 e não outro

causas.

Também... Meu amigo, que mora em minha casa, negocia em dois terminais com meu robô através do meu provedor através do mesmo roteador da casa, e por alguma razão ele

nenhuma latência no momento!

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, por favor, não edite os postos. É melhor adicionar novas para não ter que procurar por atualizações com os olhos.
 
Andrey Khatimlianskii:
Michael, por favor, não edite os postes. É melhor acrescentar novas, para não ter que procurar por atualizações com os olhos.
Houve muitos erros, então os corrigi...
 
akuloff:

O quê?

O script faz OrderSelect em cada ordem antes de ser apagado e se for selecionado significa que não está na história e ativo, quais são os erros?

Após eliminar uma ordem, os números dos restantes não processados são deslocados por 1.
 
Yury Kirillov:
Após eliminar uma ordem, os números dos restantes não processados são deslocados por 1.
Classificado há muito tempo....
 

Michael, vamos ter outra "folha" com atrasos, está ficando entediante. :))))

Quando você vai para a abertura? :)))))))

 
Tenho uma pergunta para Consultores Especialistas. Como zerar a posição?(FORTS, Otkrytie-Broker, Real)

Há o seguinte código:

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

Ou seja,abrimos uma posiçãocom uma ordem, fechamo-la com uma ordem inversa, e observamos o volume da posição como resultado.

Esperamos 0 (zero), temos 1 (um). Os toros estão abaixo (começar na parte inferior).

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

Qual é a razão?

 
Yury Kirillov:
Eis uma pergunta que eu tenho, para os conhecedores. Como zerar uma posição?(FORTS, Otkrytie-Broker, Real)

Há o seguinte código:

Ou seja,abrimos uma posiçãocom uma ordem, fechamo-la com uma ordem inversa, e observamos o volume da posição como resultado.

Esperamos 0 (zero), temos 1 (um). Os toros estão abaixo (começar na parte inferior).

Qual é a razão?

Não é mais simples?

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

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

?

 
Yury Kirillov:

Qual é a razão?

Em PositionGet sem PositionSelect de antemão.
 
Vasiliy Sokolov:

Não é mais simples?

?

Não, não é. É assim que eu lido com meu próprio código, enquanto em sua versão eu teria que analisar uma biblioteca não escrita por mim. Se você olhar dentro desta biblioteca, você encontrará aproximadamente o mesmo conjunto de operações que eu. É por isso que quero primeiro entender o mecanismo de fazer pedidos em FORTS e depois, talvez, usar as bibliotecas padrão.

Razão: