Yeni yapı 604'teki test cihazı doğru çalışmıyor - sayfa 4

 

Bu basit EA, 509 ve 604'te her ikisi de MQ demo hesabı 444'te aynı sunucuda test etmek için oluşturuldu, aynı tarihlerde geriye dönük test.

  • EA alternatif alım satım alım satım işlemleri yapıyor
  • sabit SL/TP. Hesap bakiyesine göre parti büyüklüğü . Aşağıdaki kaynak kodları.
  • 509, 509'da derlendi ve 509'da test edildi
  • 600, 604'te derlendi ve 604'te test edildi
Strateji Test Kullanıcısı Raporu
EA 509'u Test Edin
MetaQuotes-Yeni MT4 Testi (Derleme 509)

sembol EURUSD (Euro vs ABD Doları)
Dönem 1 Saat (H1) 2013.10.14 06:00 - 2013.12.30 23:00 (2013.01.01 - 2013.12.31)
modeli Her onay işareti (mevcut tüm minimum zaman dilimlerini temel alan en kesin yöntem)
Testteki çubuklar 1384 Modellenmiş keneler 1448514 modelleme kalitesi %46,42
Uyumsuz grafik hataları 0
İlk para yatırma 10000.00
Toplam net kar -1199.25 Brüt kazanç 20200,90 Brüt kayıp -21400.15
kar faktörü 0.94 Beklenen getiri -8.75
Mutlak düşüş 2515.20 maksimum düşüş 3725.52 (%33.23) göreceli düşüş %33,23 (3725,52)
Toplam işlemler 137 Kısa pozisyonlar (kazanılan %) 68 (%41.18) Uzun pozisyonlar (% kazandı) 69 (%44,93)
Karlı işlemler (toplamın yüzdesi) 59 (%43.07) Zarar işlemleri (toplamın yüzdesi) 78 (%56.93)
En büyük kar ticareti 394,33 zarar ticareti -337,74
Ortalama kar ticareti 342.39 zarar ticareti -274.36
Maksimum ardışık kazançlar (para olarak kar) 4 (1494.97) ardışık kayıplar (para kaybı) 12 (-3337.77)
maksimum ardışık kar (kazanç sayısı) 1494,97 (4) ardışık kayıp (kayıp sayısı) -3337,77 (12)
Ortalama ardışık kazançlar 2 ardışık kayıplar 2
Ortalama ardışık kazançlar 2 ardışık kayıplar 2

 
EA 600+'ı test edin
MetaQuotes-Yeni MT4 Testi (Derleme 604)

sembol EURUSD (Euro vs ABD Doları)
Dönem 1 Saat (H1) 2013.10.14 06:00 - 2013.12.30 23:00 (2013.01.01 - 2013.12.31)
modeli Her onay işareti (mevcut tüm minimum zaman dilimlerini temel alan en kesin yöntem)
Testteki çubuklar 1384 Modellenmiş keneler 1459801 modelleme kalitesi %46,42
Uyumsuz grafik hataları 0
İlk para yatırma 10000.00 Yayılmış Akım (6)
Toplam net kar -1985.08 Brüt kazanç 19147.44 Brüt kayıp -21132.52
kar faktörü 0.91 Beklenen getiri -14.81
Mutlak düşüş 2677.75 maksimum düşüş 4021.28 (%35.45) göreceli düşüş %35.45 (4021.28)
Toplam işlemler 134 Kısa pozisyonlar (kazanılan %) 67 (%40.30) Uzun pozisyonlar (% kazandı) 67 (%44,78)
Karlı işlemler (toplamın yüzdesi) 57 (%42.54) Zarar işlemleri (toplamın yüzdesi) 77 (%57,46)
En büyük kar ticareti 394,33 zarar ticareti -337,74
Ortalama kar ticareti 335.92 zarar ticareti -274.45
Maksimum ardışık kazançlar (para olarak kar) 4 (1494.97) ardışık kayıplar (para kaybı) 12 (-3336.50)
maksimum ardışık kar (kazanç sayısı) 1494,97 (4) ardışık kayıp (kayıp sayısı) -3336.50 (12)
Ortalama ardışık kazançlar 2 ardışık kayıplar 2
 
//========================================================================
//|                                                      Test EA 509.mq4 |
//|                                                  Copyright 2014, SDC |
//|                                        https://www.mql5.com/en/users/sdc |
//========================================================================
#property copyright "Copyright 2014, SDC"
#property link      "https://www.mql5.com/en/users/sdc"

//========================================================================
  int start()
//========================================================================
 {
//----
  static int ticket;
//----
  if(OrderSelect(ticket,SELECT_BY_TICKET))
  {if(OrderCloseTime()<=0) //-------------------- last order is still open
   {return(0);
   }else //------------------------------------------ last order is closed
   {if(OrderType()==0) ticket = maketrade(1);
    if(OrderType()==1) ticket = maketrade(0);
  }}else //-------------------------------------- cant find previous order
  {ticket = maketrade(0);
  }
//----
  return(0);
 }
//========================================================================
  int maketrade(int op)
//========================================================================
 {
  int errcnt=0;
  int mn = 777;
  int ticket=0;
  double lot=lots();
  double price=0;
  double sl=30;
  double tp=40;
//----
  if(lot<=0)return(0);
  if(Digits == 5 || Digits ==3)
  {sl*=10;
   tp*=10;
  }
  if(op == 0)
  {price = Ask;
   tp = Bid + tp*Point;
   sl = Bid - sl*Point;
  }
  if(op == 1)
  {price = Bid;
   tp = Ask - tp*Point;
   sl = Ask + sl*Point; 
  }
  while(ticket < 1)
  {ticket=OrderSend(Symbol(),op,lot,price,0,sl,tp,"",mn,0,Gold);
   if(ticket>0)return(ticket);
   else errcnt++;
   if(errcnt>2)return(0); //-------------------------------- 3 tries abort
   if(errors(GetLastError())==1) continue; //------------------- try again
   else return(-1);
  }
//----
  return(0);
 }
//========================================================================
  double lots()                                  //---- generic lot sizing
//========================================================================
 {
  string pair    = Symbol();
  double free    = AccountFreeMargin();
  double maxlot  = MarketInfo(pair,MODE_MAXLOT);
  double minlot  = MarketInfo(pair,MODE_MINLOT);
  double onelot  = MarketInfo(pair,MODE_MARGINREQUIRED);
  double lot     = AccountBalance()/10000;
  double newlot  = 0;
  double step    = MarketInfo(pair,MODE_LOTSTEP);
//----
  if(lot*onelot < free) newlot=MathFloor(lot/step)*step;
  else newlot=MathFloor(free/onelot/step)*step;
  if(newlot > maxlot) newlot = maxlot;
  if(newlot < minlot) newlot = minlot;
  if(newlot*onelot < free) return(newlot);
//----   
  return(0);
 }
//========================================================================
  int errors(int error)                     //---- generic errror handling 
//========================================================================
 {
  Print("Test EA 509 Error: ",error);
  if(error==0) return(0);
  switch(error)
  {
//recoverable error
   case  129:  RefreshRates();               return(1); //---- wrong price    
   case  135:  RefreshRates();               return(1); //-- price changed
   case  136:  while(RefreshRates()==false)
               Sleep(1);                     return(1); //------ no quotes
   case  138:  RefreshRates();               return(1); //-------- requote     
   case  146:  Sleep(500);
               RefreshRates();               return(1); //---- system busy
//logical error
   case  130:                                return(2); //-- invalid stops
   case 4108:                                return(2); //- invalid ticket
//critical error
   case   2:                                 return(3); //--- common error
   case   5:                                 return(3); //---- version old
   case  64:                                 return(3); //---- acc blocked
   case 133:                                 return(3); //----- prohibited
   default :                                 return(3); //---- other error
  }
//----
  return(0);
 }
//========================================================================
 
//========================================================================
//|                                                     Test EA 600+.mq4 |
//|                                                  Copyright 2014, SDC |
//|                                        https://www.mql5.com/en/users/sdc |
//========================================================================
#property copyright "Copyright 2014, SDC"
#property link      "https://www.mql5.com/en/users/sdc"
#property version   "1.00"
#property strict
//========================================================================
  void OnTick()
//========================================================================
 {
//----
  static int ticket;
//----
  if(OrderSelect(ticket,SELECT_BY_TICKET))
  {if(OrderCloseTime()<=0) //-------------------- last order is still open
   {return;
   }else //------------------------------------------ last order is closed
   {if(OrderType()==0) ticket = maketrade(1);
    if(OrderType()==1) ticket = maketrade(0);
  }}else //-------------------------------------- cant find previous order
  {ticket = maketrade(0);
  }
//----
  return;
 }
//========================================================================
  int maketrade(int op)
//========================================================================
 {
  int errcnt=0;
  int mn = 777;
  int ticket=0;
  double lot=lots();
  double price=0;
  double sl=30;
  double tp=40;
//----
  if(lot<=0)return(0);
  if(Digits == 5 || Digits ==3)
  {sl*=10;
   tp*=10;
  }
  if(op == 0)
  {price = Ask;
   tp = Bid + tp*Point;
   sl = Bid - sl*Point;
  }
  if(op == 1)
  {price = Bid;
   tp = Ask - tp*Point;
   sl = Ask + sl*Point; 
  }
  while(ticket < 1)
  {ticket=OrderSend(Symbol(),op,lot,price,0,sl,tp,"",mn,0,Gold);
   if(ticket>0)return(ticket);
   else errcnt++;
   if(errcnt>2)return(0); //-------------------------------- 3 tries abort
   if(errors(GetLastError())==1) continue; //------------------- try again
   else return(-1);
  }
//----
  return(0);
 }
//========================================================================
  double lots()                                  //---- generic lot sizing
//========================================================================
 {
  string pair    = Symbol();
  double free    = AccountFreeMargin();
  double maxlot  = MarketInfo(pair,MODE_MAXLOT);
  double minlot  = MarketInfo(pair,MODE_MINLOT);
  double onelot  = MarketInfo(pair,MODE_MARGINREQUIRED);
  double lot     = AccountBalance()/10000;
  double newlot  = 0;
  double step    = MarketInfo(pair,MODE_LOTSTEP);
//----
  if(lot*onelot < free) newlot=MathFloor(lot/step)*step;
  else newlot=MathFloor(free/onelot/step)*step;
  if(newlot > maxlot) newlot = maxlot;
  if(newlot < minlot) newlot = minlot;
  if(newlot*onelot < free) return(newlot);
//----   
  return(0);
 }
//========================================================================
  int errors(int error)                     //---- generic errror handling 
//========================================================================
 {
  Print("Test EA 600+ Error: ",error);
  if(error==0) return(0);
  switch(error)
  {
//recoverable error
   case  129:  RefreshRates();               return(1); //---- wrong price    
   case  135:  RefreshRates();               return(1); //-- price changed
   case  136:  while(RefreshRates()==false)
               Sleep(1);                     return(1); //------ no quotes
   case  138:  RefreshRates();               return(1); //-------- requote     
   case  146:  Sleep(500);
               RefreshRates();               return(1); //---- system busy
//logical error
   case  130:                                return(2); //-- invalid stops
   case 4108:                                return(2); //- invalid ticket
//critical error
   case   2:                                 return(3); //--- common error
   case   5:                                 return(3); //---- version old
   case  64:                                 return(3); //---- acc blocked
   case 133:                                 return(3); //----- prohibited
   default :                                 return(3); //---- other error
  }
//----
  return(0);
 }
//========================================================================
 

509 Grafik:

604 Grafik:

 

Son çeyrek dışında aynı testler yapıyorlar gibi görünüyorlar, bunun nedeni aynı sunucuda bir beta test sürümü çalıştırıyor olmamdır (farklı bir demo hesabı olsa da) Muhtemelen içinde boşluklar olabilecek canlı yayın verileri testi engelliyor. Grafik geçmişini sileceğim ve her iki terminalin de aynı grafik geçmişini indirmesine izin vereceğim, ardından testi yeniden yapacağım.

Düzenleme: Bunun başlı başına bir deneme olacağını biliyor olabilirdim. MQ'nun 1974'e kadar giden 1 dakikalık grafik verisine sahip olması güzel ama ben hepsini istemedim !! Sanki hiç ya da o kadar çok şeye sahip olamazsınız ki, PC'nizde silcon vadisinin yarısına ihtiyacınız var !! terminalim şu anda 700mb RAM *yuvarlak seyir* kullanıyor

 
SDC :

Son çeyrek dışında aynı testleri yapıyorlar gibi görünüyorlar, bunun nedeni aynı sunucuda bir beta test sürümü çalıştırıyor olmamdır (farklı bir demo hesabı olsa da) Muhtemelen içinde boşluklar olabilecek canlı yayın verileri testi engelliyor. Grafik geçmişini sileceğim ve her iki terminalin de aynı grafik geçmişini indirmesine izin vereceğim, ardından testi yeniden yapacağım.

Düzenleme: Bunun başlı başına bir deneme olacağını biliyor olabilirdim. MQ'nun 1974'e kadar giden 1 dakikalık grafik verisine sahip olması güzel ama ben hepsini istemedim !! Sanki hiç ya da o kadar çok şeye sahip olamazsınız ki, PC'nizde silcon vadisinin yarısına ihtiyacınız var !! terminalim şu anda 700mb RAM *yuvarlak seyir* kullanıyor


merhaba, bunun için M15 ve M1 testlerini deneyebilir misiniz? kodu eski mq4'ten yenisine dönüştürdünüz mü? Lütfen yeni mq4'e dönüştürme ile eski bir karmaşık mq4 EA ile deneyebilir misiniz?

dahili ve özel göstergeler dahil olmak üzere tarih saat vb. diğer veri türleri dahil .. bu kodda kullanılan herhangi bir gösterge göremedim ..

604'ün olası sorunu, göstergeler ve diğer sayılar için bazı sayı hassasiyetlerinin kaybedilmesidir.

iki ortam için değişkenlerin tam değerlerini karşılaştırmak için bir sayı test yöntemi geliştirmem gerekiyor ...

 

Muhtemelen sorununuzun asıl nedeni bu değil, ancak 60x'te bir yere ResetLastError() eklemeniz gerekiyor mu? (1. komut while döngüsü içinde mi?)

 
cbalta :


merhaba, bunun için M15 ve M1 testlerini deneyebilir misiniz? kodu eski mq4'ten yenisine dönüştürdünüz mü? Lütfen yeni mq4'e dönüştürme ile eski bir karmaşık mq4 EA ile deneyebilir misiniz?

dahili ve özel göstergeler dahil olmak üzere tarihsaat vb. diğer veri türleri dahil .. bu kodda kullanılan herhangi bir gösterge göremedim ..

604'ün olası sorunu, göstergeler ve diğer sayılar için bazı sayı hassasiyetlerinin kaybedilmesidir.

iki ortam için değişkenlerin tam değerlerini karşılaştırmak için bir sayı test yöntemi geliştirmem gerekiyor ...


Yayınladığım kaynak kodun aynısını kullandım, 509 test kodunu 509 Metaeditor'da derledim, 600 kaynak kodunu 604 metaeditörde derledim, ikisi arasındaki tek fark yenisinin void OnTick() kullanması, eskisinin kullandığı Başlat()

Herhangi bir gösterge kullanmadım çünkü bunun mümkün olduğunca az bilinmeyenle temel bir test olmasını istedim, test parametrelerini genişletmek istiyorsanız EA'ları göstergeleri ve diğer ticaret kriterlerini kullanacak şekilde değiştirebiliriz.

 
ydrol :

Muhtemelen sorununuzun asıl nedeni bu değil, ancak 60x'te bir yere ResetLastError() eklemeniz gerekiyor mu? (1. komut while döngüsü içinde mi?)

Emin değilim, ihtiyacım var mı? Bakacağım, EA testleri hatasız yaptı, bu yüzden GetLastError()'un yeni terminalde nasıl performans gösterdiğini göremedim. Yoğun RAM kullanımım (maks. 1 GB'ın üzerinde), tarih merkezindeki indirme düğmesine bastığımda metaquotes demo sunucusundan indirilen onlarca yıllık 1 dakikalık grafik verisinden kaynaklanıyordu, bir kısmını silmek zorunda kaldım.