MT4 sanal bir makinede mi? - sayfa 5

 
DayTrader :

Evet, kendi içinde bu kadar iyi, ancak en azından MY brokerim (ve tercihen çoğu) MT5 sunana kadar tüm kodumu yeniden yazmayı düşünmem bile.

Bu arada, W7/64'te hızdaki +4 katlık artışla işi halledeceğim, kene atlamadan kaynaklanan 10 katlık artışla birleştiğinde... toplamda yaklaşık 40 katlık bir artış elde ediyoruz.

Kodunuz keneleri atlar, ancak bunu bir şekilde önemli bilgilerin kaybolmasına neden olabilir.

Bunun gibi bir kod kullanın:

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

önemli bilgileri kaybetmeden keneleri atlamak için.

Tüm Bar açılışlarının yanı sıra yeni yüksekler ve yeni düşükler atlanmaz.

 
İyi bir fikir!
 
zzuegg :

Kodunuz keneleri atlar, ancak bunu bir şekilde önemli bilgilerin kaybolmasına neden olabilir.

Bunun gibi bir kod kullanın:

önemli bilgileri kaybetmeden keneleri atlamak için.

Tüm Bar açılışlarının yanı sıra yeni yüksekler ve yeni düşükler atlanmaz.


Bunun bir eşdeğer olup olmadığını bilmiyorum. Ancak, verileri mt4'e aktarırken Hacim bilgisi kaldırılabilir. Varsayılan olarak, minimum OHLC veya 4-Tick kullanır, bu, geriye dönük testi hızlandırmaya yardımcı olur.

Bu satırlar boyunca, M1-veri içe aktarma sırasında 100'lük Hacim (ler) girmeyi deneyen var mı? Benim tahminim, eğer işe yararsa, bunun Tick-Data'ya uygun bir alternatif olması gerektiğidir. Denemeyi planladım ama bir türlü beceremedim :)

 
zzuegg :
Tüm Bar açılışlarının yanı sıra yeni yüksekler ve yeni düşükler atlanmaz.
Alternatif olarak, strateji test cihazı için hızı artırma konusuna bakın - MQL4 forum
 

Aracım şimdi Canlı hesaplarda MT5'i etkinleştirdi ve bu da onu daha az akademik hale getiriyor. Dün gece ilk MQL5 göstergemi (yayılımı göstermek için) yazdım ve bu akşam bu konunun ilk sayfasından hız testi EA'yı dönüştürmeye çalıştım. İşte burada ...

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

Şimdi fikir, benzer işlemler yapan strateji test cihazındaki hızları karşılaştırmaktı. Tabii ki MQL5'teki en temel değişikliği unutuyorum. Hedge yapamazsınız. Aslında, görünüşe göre sembol başına yalnızca bir açık pozisyona sahip olabilirsiniz. Bu, MAGIC_NUMBERS ile ayrılmış çoklu stratejinin imkansız göründüğü anlamına gelir.

Testim EA, ne kadar sürdüğünü görmek için her saat başı bir ticaret yaptığı için sefil bir şekilde başarısız oldu. Bu şekilde benzer bir karşılaştırma yapmak mümkün değil :-(