MT4 in una macchina virtuale? - pagina 5

 
DayTrader:

Sì, questo è un bene in sé, ma fino a quando almeno il MIO broker (e preferibilmente più di uno) offrirà MT5 non penserò nemmeno a riscrivere tutto il mio codice.

Nel frattempo farò il lavoro con l'aumento di 4 volte della velocità in W7/64, combinato con l'aumento di 10 volte dal tick skipping.... combinato si ottiene un aumento di 40 volte della velocità.

Il tuo codice salta i tick, ma lo fa in un modo che potrebbe far perdere informazioni importanti.

Usate un codice come questo:

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);
}

per saltare i tick senza perdere informazioni importanti.

Tutte le aperture delle barre, così come i nuovi massimi e i nuovi minimi non vengono saltati.

 
Buona idea!
 
zzuegg:

Il tuo codice salta i tick, ma lo fa in un modo che potrebbe far perdere informazioni importanti.

Usate un codice come questo:

per saltare i tick senza perdere informazioni importanti.

Tutte le aperture delle barre, così come i nuovi massimi e i nuovi minimi non vengono saltati.


Non so se questo sarebbe un equivalente. Tuttavia, si potrebbe rimuovere l'informazione del volume durante l'importazione dei dati in mt4. Per default, userà il minimo O-H-L-C o 4-Ticks, questo aiuta a velocizzare il back-testing.

Su questa linea, qualcuno ha provato a inserire un volume di 100 durante l'importazione dei dati M1? La mia ipotesi è che questa dovrebbe essere una valida alternativa a Tick-Data se funziona. Ho pianificato di testarlo ma non sono mai riuscito a farlo :)

 
zzuegg:
Tutte le aperture delle barre, così come i nuovi massimi e i nuovi minimi non vengono saltati.
In alternativa, vedere aumentare la velocità del tester di strategia - MQL4 forum
 

Il mio broker ha ora abilitato MT5 sui conti Live e questo rende il tutto meno accademico. Ho scritto il mio primo indicatore MQL5 (per visualizzare lo spread) ieri sera e questa sera ho provato a convertire lo speed test EA dalla prima pagina di questo thread. Eccolo qui ...

// 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;
}

Ora l'idea era quella di confrontare le velocità nel tester di strategia facendo operazioni simili. Naturalmente ho dimenticato il cambiamento fondamentale in MQL5. Non si può fare hedging. Infatti si può avere solo una posizione aperta per simbolo, a quanto pare. Questo significa che la multi-strategia, separata da MAGIC_NUMBERS, sembra essere impossibile.

Il mio test EA ha fallito miseramente perché piazza un trade ogni ora per vedere quanto tempo ci vuole. Fare un confronto simile in questo modo non è possibile :-(

Motivazione: