Açık proje - kendin yap test cihazı optimize edici

 
Kendi test cihazınızı bir gösterge şeklinde yazma fikri vardı. Gereklilik - minimum değişiklikle, danışman her iki testçi için de uygun olmalıdır - normal ve kendi kendine yazılmış. Bu, standart sabitlere ve fonksiyonlara my öneki eklenerek elde edilir. Optimizasyon da oldukça kabul edilebilir.
Şablon yazıldı, kendi fonksiyonlarınızı yazarak alım satım fonksiyonlarını uygulamanız gerekiyor.
Kim özel - katılın. Dizi manipülasyonu yoluyla ticaret fonksiyonları. Ayrıca grafik üzerinde nesneler çizme konusunda uzmanlara ihtiyacımız var - oklar / tirelerle açılma, durma ve kar elde etme seviyelerini göstermek için.
Çıktıyı, Excel'de çizelgeleri açmak için sipariş geçmişi ve sayısal serilerin bir dosyasına düzenlemek de gereklidir. Genel olarak, her şey yetişkin :)

Prensip olarak her şeyi düşündüm, ama genelci değilim.

İlgilenenler olursa fikir verebilirim. Ek olarak, bazı performans optimizasyonu durumlarında kendi kendine yapılan bir sürümün yerleşik olanı atlayabilmesi mümkündür.

//+------------------------------------------------------------------+
//|                                                   SelfTester.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 DarkBlue
#property indicator_color3 LawnGreen
//---- input parameters
extern int       mySpread=4;
extern int       BeginYear=2002;
extern int       BeginMonth=1;
extern int       BeginDay=1;
extern string    ReportName="report";
extern int       Param1=8;
extern int       Param2=13;
extern double    myDepo=10000.0;
extern double    mylots=0.1;
extern int       myTakeProfit=100.0;
extern int       myStopLoss=80.0;
extern int       myTrailingStop=20;
//---- buffers
double myBalance[];
double myEquity[];
double myProfit[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,myBalance);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,myEquity);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,myProfit);
   double TradeOrdersArray[100][14];
   double ClosedOrdersArray[2000][14];
   int myOrdersTotal=0;
   double myOrderOpenPrice=0.0;
   double myOrderLots=0.0; 
   string myOrderComment=""; 
   int myOrderMagicNumber;
   int myOrderOpenTime;
   double myOrderProfit=0.0;
   double myOrderStopLoss=0.0;
   double myOrderTakeProfit=0.0;
   int myOrderTicket;
   int myOrderType; 

   int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Ne tür bir kryakozyabliki ortaya çıktı - ve bilmiyorum. İsteyenler olacak - başka bir forumda bir yere göndereceğim.
 
2Roş
Bu boşlukla ne söylemek istediğiniz tam olarak belli değil. Bence, kârı hesaplayan ve aynı zamanda grafikte meydana gelen/durakları işaretleyen bir dizi fonksiyon almalı mıyız? Herkesin kendi karar verme motoru olacak mı?

Ve sadece birkaç ipucu:
extern int       BeginYear=2002


değiştirmek daha iyi

extern string       BeginDate="2002.01.01 18:00"


- tipin yapımı ile hemen çalışabilirsiniz

Time[i] > StrToTime(BeginDate)



Evet ve muhtemelen böyle şeyler

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 


olarak saklamak da daha uygun olacaktır.

#define LOTS 0;
#define OPEN_PRICE 1;

double MyOrder[2] = {0.0, 0.0};
.....................
MyOrder[OPEN_PRICE] = Open[i];
.....................
 


ama genelde küçük...

 
Filin, konu dışısın. Neden bir sabit tanımla
#define LOTS 0;

Bu, test cihazı için giriş değişkenidir.

Bu nereden geldi?

#define OPEN_PRICE 1;


Tüm bu değişkenlerin (fonksiyonlar tarafından daha iyi tanımlanabilir) olduğunu fark etmediniz mi?

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 

mql-4'te yerleşik ikizlerdir. Amacın test cihazımız ve yerleşik test cihazının Uzman Danışmanı anlaması olduğunu yazdım.
minimal değişikliklerle.

Karar motoru EA kodudur. Ve bu Uzman Danışmana entegre etmek kolay olacak. Ve test motoru önerdiğim işlevler
"geçersiz kılma" - yani, standart bir yerleşik işlev alınır, örneğin OrderSend() ve buna göre tam bir benzerlik yazılır - myOrderSend(). Vb.
Akşam daha açık hale getirmek için bu işlevi yazacağım.

Daha dikkatli, daha dikkatli.. :)

 
Ne tür bir kryakozyabliki ortaya çıktı - ve bilmiyorum. İsteyenler olacak - başka bir forumda bir yere göndereceğim.

Bu yakın zamanda ortaya çıktı. Burada MQL'den metin aktarırken, Rusça harfler bu şekilde temsil edilir. FronPage, Rus harfleriyle aynı şeyi yapar.
 
Gösterge dosyasına kopyalayıp yapıştırırken çıtırtıların tekrar Rusça harflere dönüştürüleceğini düşündüm. Öyle olmadığı ortaya çıktı. Akşam başka bir forumda paylaşırım.
ve sana linki göndereceğim.
 
Roş,
çöpü dışarı çıkaramaz mısın?
Ve izlemek imkansız.
Bu, muhtemelen Rusça metin içeren komut dosyalarını kopyalarken forum, barındırma veya MT'nin bir hatasıdır.
 
Bu şekilde test edebilirsiniz. Ve yeterli kalite. Ama ne yazık ki, evrenselcilik işe yaramayacak.
Bu testler için birkaç hafta geçirdim. İlk bakışta, her şey basit görünüyor. Bir dizi standart işlev - ve ileri.
Ancak bu set sadece tohumdur: açılış/kapanış, kar/zarar hesaplama, ok/tire çizme.
Ana ve en önemli şey, diyelim ki bazı Expert Advisor'da zaten tanımlanmış olan açma/kapama algoritmasıdır. Bu algoritmayı sürükleyin
tamamen çalışmayacak. Sadece parçalar halinde. Ve sonra alınan kodun "hatasız" takibi ... Artı, herhangi bir
bir nevi bela... Kısacası, aynı konuda ikinci kez sıfırdan ayrı bir program yazmak ortaya çıkıyor. Tüm bunlardan sonra, 1 saniyede
ya tatmin edici olmayan bir sonuç ya da oklar orada değil ya da bu yerlerde kapatma yok. Ve yine programın metnine tırmanıyorsunuz ve yine yeni bir şekilde ...
Beyin bir hata ayıklayıcı yerine çalışır, bir süre monitör için bir konsola dönüşürsünüz ... Sonunda, üçüncü günde test geçer
Normal görünüyor, ancak stratejinin "pek iyi olmadığına" ikna oldunuz. Ve bu aşamada, neredeyse her şey! Çünkü aşağıdaki stratejiyi bu şekilde kontrol edin
arzu doğmaz. Bütün bunları neden yazdım? Fikir çekici. Ve temelde çalışıyor. Ama inan bana, daldı
çözülmez. Bir kalıp hakkında konuşursak, o zaman çok temel bir kalıp olmalıdır, yani. çok iyi düşünülmüş tasarım. Genel olarak,
Program en kolayı değil. Ve eğer birisi bu eseri okuduktan sonra tarif edilen çerçevede mızrak kırmazsa, yani. bu madeni kullan
biraz, ama yine de pratik deneyim ve zaman kaybetmeden devam edin, o zaman belki bir şeyler işe yarar. Sonra tüm acı çekenler
(ben dahil) yazara bir anıt yapacak ve dikecek. :)
 
Tamam, akşam bir işlem yapacağım (söz verdiğim gibi), her şey daha net olacak. Şimdiye kadar, kendi fikriniz ile - test cihazının doğru gelişimi ile mümkün olacak
kozmetik değişikliklerle yerel danışmanları kullanın. İlk "kurban" MACD_sample.mq4 .
 
Roş,
çöpü dışarı çıkaramaz mısın?
Ve izlemek imkansız.
Bu, muhtemelen Rusça metin içeren komut dosyalarını kopyalarken forum, barındırma veya MT'nin bir hatasıdır.


"Çöp" kaldırıldı. Programcılar muhtemelen bu çöpü (yorumları) hurdaya nasıl yazacaklarını biliyorlar :)

Bu sabitleri standart olanlara göre doğru bir şekilde belirleyip belirlemediğimi bilen var mı?
  int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;


belirli değerler anlamına gelir.

 
Ben bir çaydanlık, neden tekerleği yeniden icat edeyim? Hadi aptalca yapalım:

   int myOP_BUY=OP_BUY;
   int myOP_SELL=OP_SELL;
   int myOP_BUYLIMIT=OP_BUYLIMIT;
   int myOP_BUYSTOP=OP_BUYSTOP;
   int myOP_SELLLIMIT=OP_SELLLIMIT;
   int myOP_SELLSTOP=OP_SELLSTOP;


Doğru, derleyicinin tepkisini önceden bilmiyorum, gösterge gövdesindeki ticaret sabitlerini atlayacak mı, atlamayacak mı?
Büyük olasılıkla özleyecek.