Progetto aperto - tester-ottimizzatore in-house

 
Ho un'idea per scrivere il mio tester sotto forma di indicatore. Il requisito - con una rielaborazione minima l'Expert Advisor deve essere adatto sia per i tester standard che per quelli scritti in proprio. Questo si ottiene aggiungendo il prefisso my alle costanti e alle funzioni standard. Anche l'ottimizzazione è accettabile.
Il modello è scritto, è necessario implementare le funzioni di trading scrivendo le proprie funzioni.
Chi è bravo a farlo - si unisca a noi. Funzioni di trading attraverso la manipolazione di array. Inoltre abbiamo bisogno di un esperto nel disegno di oggetti sul grafico - utilizzare frecce/disegni per rappresentare i livelli di apertura, stop e take profit.
Inoltre abbiamo bisogno di organizzare l'output della storia degli ordini e delle serie numeriche in un file per aprire i grafici in Excel. In generale, tutto è molto serio :)

Ho pensato a tutto in linea di principio, ma non sono un universalista.

Posso dare delle idee, se qualcuno lo desidera. Inoltre, è possibile che la variante autocostruita in alcuni casi di ottimizzazione delle prestazioni sia in grado di superare quella costruita.

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




 
Non so che tipo di baggianate siano apparse. Se qualcuno lo vuole, lo posterò da qualche parte in un altro forum.
 
2 Rosh
Non sono sicuro di cosa vuoi dire con questo preset. Secondo me, volete ottenere un insieme di funzioni che calcolino il profitto e segnino i punti di entrata/arresto sul grafico allo stesso tempo? E il motore decisionale sarà diverso per ognuno di loro?

E un paio di consigli:
extern int       BeginYear=2002


meglio essere sostituito da

extern string       BeginDate="2002.01.01 18:00"


- è possibile lavorare immediatamente con una costruzione del tipo

Time[i] > StrToTime(BeginDate)



Sì e probabilmente cose come

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 


sarebbe anche più comodo da memorizzare come

#define LOTS 0;
#define OPEN_PRICE 1;

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


ma queste sono solo le piccole cose...

 
Filin, sei fuori di te. Perché dovreste definire la costante
?
#define LOTS 0;

Questa è la variabile di ingresso per il tester.

Da dove viene questo?

#define OPEN_PRICE 1;


Avete notato che tutte queste variabili (che potrebbero essere meglio definite da funzioni)

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 

Sono gemelli del costruito in mql-4. Ho scritto che l'obiettivo è che il nostro tester e il tester incorporato capiscano il
EA con una rielaborazione minima.

Il motore decisionale è il codice EA. E sarà facilmente integrabile in questo EA. E il motore del tester sono funzioni che suggerisco a
di "sovrascrivere" - cioè prendiamo la funzione standard incorporata, per esempio OrderSend(), e usandola, scriviamo una funzione simile completa - myOrderSend(). E così via.
Scriverò questa funzione stasera per renderla più chiara.

Devi essere più accurato, più accurato... :)

 
Non so che tipo di baggianate siano apparse. Se qualcuno lo vuole, lo posterò su un altro forum da qualche parte.

Questo è apparso non molto tempo fa. Quando si trasferisce un testo da MQL, le lettere russe appaiono in questo modo. La stessa cosa che fa FronPage con le lettere russe.
 
Pensavo che le lettere in corsivo sarebbero state riconvertite in lettere russe quando ho copiato e incollato nel file indicatore. Non è andata così. Lo posterò su un altro forum stasera
e posterò il link.
 
Rosh,
non puoi cancellare la spazzatura?
È impossibile da guardare.
Deve essere un difetto del forum, dell'hosting o di MT quando si copiano gli script con testo russo.
 
È possibile testare in questo modo. Ed è abbastanza buono. Ma, sfortunatamente, non otterrete l'universalismo.
Ho passato un paio di settimane su questi test. A prima vista sembra semplice. Si ottiene una serie di funzioni standard e via.
Ma questo set non è altro che un seme: apertura/chiusura, calcolo di profitto/perdita, disegno di frecce/barre.
Il principale e più importante è l'algoritmo di apertura/chiusura, che, diciamo, è già stato descritto in qualche Expert Advisor. Non puoi trascinare e rilasciare questo algoritmo
nella sua interezza. Si può fare solo in parti. E poi il monitoraggio "senza errori" del codice risultante... Inoltre, tutti i tipi di colpi di scena associati a questo processo...
tutti i tipi di armeggi... In breve, si finisce per scrivere un programma separato sullo stesso argomento da zero per la seconda volta. Dopo tutto questo, in 1 secondo si ottiene
o un risultato insoddisfacente, o le frecce sono nel posto sbagliato, o si chiudono nei posti sbagliati. Poi si torna al testo del programma e si riprova...
Il tuo cervello lavora al posto di un debugger, ti trasformi in un monitor per un po'... Alla fine, il terzo giorno, il test viene eseguito
sembra bene, ma ci si convince che la strategia non è "buona". E a questo punto, è praticamente tutto! Perché testare la prossima strategia in questo modo
non c'è il desiderio di testare la prossima strategia. Perché ho scritto tutto questo? L'idea è attraente. E in linea di principio, funziona. Ma, credetemi, non è qualcosa
non funzionerà. Se stiamo parlando di un template, deve essere un template molto fondamentale, cioè un design molto decente e ben pensato. In generale,
il programma non è il più semplice. E se qualcuno dopo aver letto questo opus non rompere una lancia nel quadro del descritto, cioè utilizzare questo mio
Se qualcuno usa la mia piccola, ma comunque pratica esperienza e va avanti senza perdere tempo, qualcosa potrebbe funzionare. Allora tutti coloro che stanno soffrendo
(me compreso) faranno una colletta e costruiranno un monumento all'autore. :)
 
OK, farò una funzione in serata (come promesso), tutto sarà più chiaro. Per ora, la mia opinione è che con un adeguato sviluppo del tester sarà possibile
per utilizzare gli Expert Advisors nativi con alcune modifiche cosmetiche. La prima "vittima" è MACD_sample.mq4 .
 
Rosh,<br / translate="no">non si può cancellare la spazzatura?
È impossibile da guardare.
Deve essere un difetto del forum, dell'hosting o di MT quando si copiano gli script con testo russo.


"Spazzatura" è stato rimosso. I programmatori probabilmente sanno quanto sia noioso scrivere (commenti) :).

Qualcuno sa - ho definito correttamente queste costanti in base allo standard?
  int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;


Significato dei valori specifici.

 
Sono un idiota, perché reinventare la ruota. Facciamola semplice:

   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;


Tuttavia, non conosco la reazione del compilatore in anticipo, lascerà passare le costanti commerciali nel corpo dell'indicatore o no?
Molto probabilmente lo farà.

Motivazione: