MT4 em uma máquina virtual ? - página 5

 
DayTrader:

Sim, isso é bom por si só, mas até que pelo menos o meu corretor (e de preferência mais deles) ofereça ao MT5 eu não vou nem pensar em reescrever todo o meu código.

Nesse meio tempo, conseguirei fazer o trabalho com o aumento de velocidade de +4 vezes em W7/64, combinado com o aumento de 10 vezes do tick saltar.... combinado, obtemos um aumento de velocidade de cerca de 40 vezes.

O código salta carrapatos, mas faz com que, de certa forma, informações importantes possam ser perdidas.

Use um código como este:

bool SkipTick(){
   static datetime curr=0;
   static double askHi=0;
   static double askLo=0;
   static double bidHi=0;
   static double bidLo=0;
   if(curr!=Time[0]){
      curr=Time[0];
      askHi=Ask;
      askLo=Ask;
      bidHi=Bid;
      bidLo=Bid;
      return (false);
   }else{
      if(Ask>askHi || Ask<askLo){
         askHi=MathMax(Ask,askHi);
         askLo=MathMin(Ask,askLo);
         return(false);
      }
      if(Bid>bidHi || Bid<bidLo){
         bidHi=MathMax(Bid,bidHi);
         bidLo=MathMin(Bid,bidLo);
         return(false);
      }
   }
   return(true);
}

para pular carrapatos sem perder informações importantes.

Todas as aberturas de barras, assim como novos altos e novos baixos não são pulados.

 
Boa idéia!
 
zzuegg:

O código salta carrapatos, mas faz com que, de certa forma, informações importantes possam se perder.

Use um código como este:

para pular carrapatos sem perder informações importantes.

Todas as aberturas de bares, assim como novos altos e novos baixos não são pulados.


Não sei se isto seria um equivalente. No entanto, pode-se remover as informações de Volume ao importar dados para o mt4. Por padrão, ele usará o mínimo de O-H-L-C ou 4-Ticks, isto ajuda a acelerar o teste de retorno.

Nesse sentido, alguém tentou entrar Volume(s) de, digamos, 100 durante uma importação de dados M1? Meu palpite é que esta deve ser uma alternativa viável ao Tick-Data, se funcionar. Eu planejava testá-lo, mas nunca cheguei a ele :)

 
zzuegg:
Todas as aberturas de bares, assim como novos altos e novos baixos não são ignorados.
Alternativamente, veja aumentar a velocidade para o testador de estratégia - Fórum MQL4
 

Meu corretor agora habilitou o MT5 em contas Live e isso o torna menos acadêmico. Escrevi meu primeiro indicador MQL5 (para exibir o spread) na noite passada e esta noite tive a oportunidade de converter o teste de velocidade EA da primeira página deste tópico. Aqui está ...

// MQL5 code

const int SECONDSPERHOUR=3600;

input int stops = 250;

double lots= 0.0;

//+-------------------------------------------------------------------------------------------+
int OnInit(){
    lots = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
    return(0);
}
//+-------------------------------------------------------------------------------------------+
void OnDeinit(const int reason){ 
}
//+-------------------------------------------------------------------------------------------+
void OnTick(){
    static long lastHour=0;
    
    datetime now= TimeCurrent();
    long hourNow = SECONDSPERHOUR *(((long)now) / SECONDSPERHOUR); 
    
    if( lastHour== hourNow )
        return;
    
    lastHour= hourNow;
    
    MqlTick lastTick;
    SymbolInfoTick(_Symbol,lastTick);
    
    MqlTradeResult result={0};
    
    MqlTradeRequest requestA={0};
    requestA.action=TRADE_ACTION_DEAL;
    requestA.symbol= Symbol();
    requestA.type = ORDER_TYPE_BUY;
    requestA.volume= lots;                  
    requestA.sl=    NormalizeDouble( lastTick.ask - stops*_Point, _Digits );
    requestA.tp=    NormalizeDouble( lastTick.ask + stops*_Point, _Digits );

    OrderSend(requestA,result);
    if( result.retcode != TRADE_RETCODE_DONE )
        Print("BUY order failed: " + IntegerToString(result.retcode));
    
    SymbolInfoTick(_Symbol,lastTick);
      
    MqlTradeRequest requestB={0};
    requestB.action=TRADE_ACTION_DEAL;
    requestB.symbol= Symbol();
    requestB.type = ORDER_TYPE_SELL;

    requestB.volume= lots;                  
    requestB.sl=    NormalizeDouble( lastTick.bid + stops*_Point, _Digits );
    requestB.tp=    NormalizeDouble( lastTick.bid - stops*_Point, _Digits );
    
    OrderSend(requestB,result);
    if( result.retcode != TRADE_RETCODE_DONE )
        Print("SELL order failed: " + IntegerToString(result.retcode));
    
    return;
}

Agora a idéia era comparar as velocidades no testador de estratégia fazendo o mesmo tipo de comércio. É claro que esqueci a mudança mais fundamental na MQL5. Você não pode se proteger. Na verdade, você só pode ter uma posição aberta por símbolo, pelo aspecto. Isso significa que a estratégia múltipla, separada por MAGIC_NUMBERS, parece ser impossível.

Meu teste EA falhou miseravelmente, pois ele apenas coloca uma profissão a cada hora para ver quanto tempo leva. Não é possível fazer uma comparação semelhante desta maneira :-(