¿MT4 en una máquina virtual? - página 5

 
DayTrader:

Sí, eso es bueno en sí mismo, pero hasta que al menos MI corredor (y preferiblemente más de ellos) ofrezca MT5 ni siquiera pensaré en reescribir todo mi código.

Mientras tanto, voy a hacer el trabajo por el aumento de +4 veces en la velocidad en W7/64, combinado con el aumento de 10 veces de la omisión de garrapatas.... combinado obtenemos un aumento de 40 veces en la velocidad.

Tu código salta los ticks, pero lo hace de una manera que puede perder información importante.

Utiliza un 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 saltar los ticks sin perder información importante.

Todas las aperturas de barras, así como los nuevos máximos y mínimos no se saltan.

 
¡Buena idea!
 
zzuegg:

Tu código salta los ticks, pero lo hace de una manera que puede perder información importante.

Utilice un código como este

para saltar los ticks sin perder información importante.

Todas las aperturas de barras, así como los nuevos máximos y mínimos no se saltan.


No sé si esto sería un equivalente. Sin embargo, se podría eliminar la información de Volumen mientras se importan los datos en mt4. Por defecto, utilizará el mínimo O-H-L-C o 4-Ticks, esto ayuda a acelerar el back-testing.

En este sentido, ¿alguien ha probado a introducir volúmenes de, por ejemplo, 100 durante una importación de datos M1? Mi opinión es que esto debería ser una alternativa viable a los Datos-Tick si funciona. Yo planeaba probarlo pero nunca llegué a hacerlo :)

 
zzuegg:
Todas las aperturas de barras, así como los nuevos máximos y nuevos mínimos no se saltan.
Alternativamente, ver aumentar la velocidad del probador de estrategias - foro MQL4
 

Mi corredor ha habilitado MT5 en las cuentas reales y eso lo hace menos académico. Anoche escribí mi primer indicador MQL5 (para mostrar el spread) y esta tarde he intentado convertir el EA de prueba de velocidad de la primera página de este hilo. Aquí 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;
}

Ahora la idea era comparar las velocidades en el probador de estrategias haciendo operaciones similares. Por supuesto, me olvido del cambio más fundamental en MQL5. Usted no puede cubrir. De hecho sólo se puede tener una posición abierta por símbolo por lo que parece. Eso significa que la multi-estrategia, separados por MAGIC_NUMBERS, parece ser imposible.

Mi EA de prueba fracasó estrepitosamente, ya que sólo coloca una operación cada hora para ver cuánto tiempo tarda. Hacer una comparación de igual a igual de esta manera no es posible :-(

Razón de la queja: