-Alexey-: Perché quando premo il pulsante "Start" il tester non fa il test dal livello di deposito iniziale, ma dal livello in cui è finito l'ultimo test. Non c'è un tale problema nel 4. Come iniziare i test dal livello di deposito iniziale?
Non possiamo riprodurre la situazione che descrive.
Non possiamo riprodurre la situazione che descrive.
Dacci più dettagli
Genero una parabolica nel wizard sulla media con uno stop. Eseguo un test sui prezzi aperti e clicco su annulla. Lo eseguo per la seconda volta e ottengo la situazione descritta sopra (il grafico del saldo e del capitale non viene disegnato di nuovo ma continua). Gli Expert Advisors che non provengono dal Wizard sono OK.
Вы хотите быстро проверить торговую идею, не тратя времени на программирование? Выберите в "Мастере MQL5" нужный тип торговых сигналов, подключите модули сопровождения позиций и управления капиталом - на этом вся работа закончена. Создайте свои реализации модулей или закажите их через сервис "Работа" - и комбинируйте новые модули с уже существующими.
Nella modalità di test multivaluta, quando si aspetta la comparsa di una nuova barra su due strumenti, il tester non si comporta correttamente.
Un piccolo chiarimento. Nella funzione isNewBar, quando una nuova barra appare sul simbolo principale, aspettiamo che una nuova barra appaia nel ciclo sull'altro simbolo.
Sto incollando il codice.
//в тестере баг в режиме мультивалютного тестирования//позиция открывается если на двух инструментах появился новый бар #include <Trade\Trade.mqh>#include <Trade\OrderInfo.mqh>#include <Trade\PositionInfo.mqh>//--- input parametersinputint Per=10;//период средней inputstring Instrum1="EURUSD";//первый инструментinputstring Instrum2="GBPUSD";//второй инструмент//-------------------------------------------------------
CTrade trade;//торговые функции
COrderInfo orderinfo;//информация об ордере
CPositionInfo posinfo;//информация о позицииint hiMA ;//хэндл индикатора intOnInit()
{
hiMA=iMA(_Symbol,_Period,Per,0,MODE_SMA,PRICE_OPEN) ;
if(hiMA < INVALID_HANDLE) return(-1) ;
return(0);
}
//====================================================================voidOnDeinit(constint reason)
{
IndicatorRelease(hiMA) ;
}
//=====================================================================voidOnTick()
{
if(!isNewBar(Instrum2)) return ;
//Print(" Это новый бар ");double Ma[1] ;//показания индикатора CopyBuffer(hiMA,0,0,1,Ma) ;
MqlTick price;// будет использоваться для получения текущих/последних котировок ценыbool possel=posinfo.Select(Instrum1) ;
SymbolInfoTick(Instrum1,price) ;
if(possel && price.bid > Ma[0] && posinfo.PositionType() == POSITION_TYPE_SELL)
{//цена выше средней закрываем короткую позу
trade.PositionClose(Instrum1) ; return ;
}
if( !possel && price.bid > Ma[0])
{//цена выше средней нет поз открываем длинную позу
trade.Buy(0.1,Instrum1,0,0,0,NULL) ; return ;
}
if( possel && price.ask < Ma[0] && posinfo.PositionType() == POSITION_TYPE_BUY)
{//цена ниже средней закрываем длинную позу
trade.PositionClose(Instrum1) ; return ;
}
if(!possel && price.ask < Ma[0])
{// цена ниже средней нет поз открываем короткую позу
trade.Sell(0.1,Instrum1,0,0,0,NULL) ;
}
return ;
}
//=======================================================================bool isNewBar(string other_symbol)
{//возвращает труе если новый бар на двух инструментахstaticdatetime last_bar_time=0;
int cntsleep ;
if(last_bar_time==0)
{//--- это первый вызов, запишем время открытия и выйдем
last_bar_time=(datetime)SeriesInfoInteger(_Symbol,Period(),SERIES_LASTBAR_DATE);
return(false);
}
datetime curr_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
if(curr_time!=last_bar_time)
{//время открытия не совпадает это новый бар
last_bar_time=curr_time;
cntsleep=0 ;
while(!(curr_time == (datetime)SeriesInfoInteger(other_symbol,Period(),SERIES_LASTBAR_DATE)))
{// ждем появления нового бара на втором инструменте Sleep(5000);
if(cntsleep >10) return(false) ;// недождались
cntsleep++ ;
}
return(true) ;
}
return(false) ;
}
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
In modalità test multivaluta, quando si aspetta che una nuova barra appaia su due strumenti, il tester non si comporta correttamente.
Cosa vedi esattamente come un bug, per favore spiega. Non avete dato alcun dettaglio dei test, né del risultato ottenuto, né del risultato atteso.
Inoltre, vorrei attirare la vostra attenzione sulle basi del test in MetaTrader 5. Spiega il meccanismo di generazione delle zecche e i concetti di base.
Cosa vedi esattamente come un bug, per favore spiega. Non hai fornito alcun dettaglio dei test o del risultato che hai ottenuto, e non conosci il risultato atteso.
Inoltre, vorrei attirare la vostra attenzione sulle basi del test in MetaTrader 5. Spiega il meccanismo di generazione delle zecche e i concetti di base.
È facile.
Avviamo l'Expert Advisor per l'ottimizzazione e vediamo il risultato.
Per esempio, scegliamo il 4° passaggio, eseguiamo l'Expert Advisor e otteniamo il suo funzionamento normale con tutti i trade, ed ecco il rapporto.
Ho una sensazione. Nella modalità di ottimizzazione multi-valuta il tester non può legare un trade alla barra se non è stato aperto sulla barra aperta.
Se la funzione isNewBar ha commentato il ciclo e non aspetta la comparsa di una nuova barra su un altro simbolo, tutto funziona. Terminale versione 5 build 642.
Ho letto gli articoli e ho letto i codici da lì. Anche se, mi conosco, dovrò rileggerli.
-Alexey-: Genero nella procedura guidata un EA su medio con uno stop parabolico. Eseguo un test sui prezzi aperti e clicco su "annulla". Lo eseguo per la seconda volta e ottengo la situazione descritta sopra (il grafico del saldo e del capitale non viene ridisegnato ma continua). Gli Expert Advisors che non provengono dal Wizard sono OK.
Ecco un pezzo di codice. Come rendere i parametriinput int grusdchf=100; input int grusdjpy=100; da non ottimizzare quandotrpar2=false
//------------------------------------------------------------inputbool trpar1=true ;//разрешение торговли по EURUDSDinputint greurusd=100;//сетка для EURUSDinputint grgbpusd=100;//сетка для GBPUSD//------------------------------------------------------------inputbool trpar2=true;//inputint grusdchf=100;//inputint grusdjpy=100;////------------------------------------------------------------inputbool trpar3=true;//inputint graudjpy=100;//inputint grchfjpy=100;//
Ecco un pezzo di codice. Come rendere i parametriinput int grusdchf=100; input int grusdjpy=100; da non ottimizzare quandotrpar2=false
inputbool trpar2=true;
inputint grusdchf=100;
inputint grusdjpy=100;
if (trpair2==false) // если false то всегда 100
{
x_grusdchf=100;
x_grusdjpy=100;
}
else// если true то значения с перебора
{
x_grusdchf=grusdchf;
x_grusdjpy=grusdjpy;
}
Le caselle di controllo sono abilitate su tutti e tre gli ingressi e poi si blocca a false.
Perché quando premo il pulsante "Start" il tester non fa il test dal livello di deposito iniziale, ma dal livello in cui è finito l'ultimo test. Non c'è un tale problema nel 4. Come iniziare i test dal livello di deposito iniziale?
Non possiamo riprodurre la situazione che descrive.
Diamo più dettagli
Non possiamo riprodurre la situazione che descrive.
Dacci più dettagli
Questo sembra essere un bug.
Nella modalità di test multivaluta, quando si aspetta la comparsa di una nuova barra su due strumenti, il tester non si comporta correttamente.
Un piccolo chiarimento. Nella funzione isNewBar, quando una nuova barra appare sul simbolo principale, aspettiamo che una nuova barra appaia nel ciclo sull'altro simbolo.
Sto incollando il codice.
Questo sembra essere un bug.
In modalità test multivaluta, quando si aspetta che una nuova barra appaia su due strumenti, il tester non si comporta correttamente.
Cosa vedi esattamente come un bug, per favore spiega. Non avete dato alcun dettaglio dei test, né del risultato ottenuto, né del risultato atteso.
Inoltre, vorrei attirare la vostra attenzione sulle basi del test in MetaTrader 5. Spiega il meccanismo di generazione delle zecche e i concetti di base.
Cosa vedi esattamente come un bug, per favore spiega. Non hai fornito alcun dettaglio dei test o del risultato che hai ottenuto, e non conosci il risultato atteso.
Inoltre, vorrei attirare la vostra attenzione sulle basi del test in MetaTrader 5. Spiega il meccanismo di generazione delle zecche e i concetti di base.
È facile.
Avviamo l'Expert Advisor per l'ottimizzazione e vediamo il risultato.
Per esempio, scegliamo il 4° passaggio, eseguiamo l'Expert Advisor e otteniamo il suo funzionamento normale con tutti i trade, ed ecco il rapporto.
Ho una sensazione. Nella modalità di ottimizzazione multi-valuta il tester non può legare un trade alla barra se non è stato aperto sulla barra aperta.
Se la funzione isNewBar ha commentato il ciclo e non aspetta la comparsa di una nuova barra su un altro simbolo, tutto funziona. Terminale versione 5 build 642.
Ho letto gli articoli e ho letto i codici da lì. Anche se, mi conosco, dovrò rileggerli.
Buone feste.
Genero nella procedura guidata un EA su medio con uno stop parabolico. Eseguo un test sui prezzi aperti e clicco su "annulla". Lo eseguo per la seconda volta e ottengo la situazione descritta sopra (il grafico del saldo e del capitale non viene ridisegnato ma continua). Gli Expert Advisors che non provengono dal Wizard sono OK.
Creare un'applicazione servicedesk, specificando
Ecco un pezzo di codice. Come rendere i parametriinput int grusdchf=100; input int grusdjpy=100; da non ottimizzare quandotrpar2=false
Ecco un pezzo di codice. Come rendere i parametriinput int grusdchf=100; input int grusdjpy=100; da non ottimizzare quandotrpar2=false
Non spuntare le caselle di controllo nel tester contro questi parametri. O chiarisci la domanda, altrimenti vedo un'ambiguità. :)
Domanda:
Dovete passare un array di puntatori a oggetti a una funzione. Per riferimento, ovviamente (un array).
Quale sintassi usare?
O dovrei usarlo in qualche altro modo?
Ecco un pezzo di codice. Come rendere i parametriinput int grusdchf=100; input int grusdjpy=100; da non ottimizzare quandotrpar2=false