-Alexey-: Por qué cuando presiono el botón "Start" el probador no hace la prueba desde el nivel de depósito inicial, sino desde el nivel donde terminó la última prueba. No existe ese problema en la 4. ¿Cómo empezar a probar desde el nivel de depósito inicial?
Genero una parabólica en el asistente sobre la media con un stop. Hago una prueba sobre los precios abiertos, hago clic en "Cancelar". Lo ejecuto por segunda vez y obtengo la situación descrita anteriormente (el gráfico de saldo y patrimonio no se dibuja de nuevo sino que continúa). Los Asesores Expertos que no son del Asistente están bien.
Вы хотите быстро проверить торговую идею, не тратя времени на программирование? Выберите в "Мастере MQL5" нужный тип торговых сигналов, подключите модули сопровождения позиций и управления капиталом - на этом вся работа закончена. Создайте свои реализации модулей или закажите их через сервис "Работа" - и комбинируйте новые модули с уже существующими.
En el modo de prueba multidivisa, cuando se espera la aparición de una nueva barra en dos instrumentos, el probador no se comporta correctamente.
Una pequeña aclaración. En la función isNewBar, cuando aparece una nueva barra en el símbolo principal, esperamos a que aparezca una nueva barra en el bucle del otro símbolo.
Pego el código.
//в тестере баг в режиме мультивалютного тестирования//позиция открывается если на двух инструментах появился новый бар #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 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
En el modo de prueba multidivisa, cuando se espera la aparición de una nueva barra en dos instrumentos, el probador no se comporta correctamente.
Qué es exactamente lo que ve como un error, por favor explíquelo. No ha dado ningún detalle de las pruebas, ni del resultado obtenido, ni del resultado esperado.
Qué es exactamente lo que ve como un error, por favor explíquelo. No has dado ningún detalle de las pruebas ni del resultado que has obtenido, y no sabes el resultado esperado.
Iniciamos el Asesor Experto para la optimización y vemos el resultado.
Por ejemplo, elegimos la 4ª pasada, ejecutamos el Asesor Experto, y obtenemos su funcionamiento normal con todas las operaciones, y aquí está el informe.
Tengo un presentimiento. En el modo de optimización multidivisa, el probador no puede vincular una operación a la barra si no se ha abierto en la barra abierta.
Si la función isNewBar ha comentado el bucle y no espera la aparición de una nueva barra en otro símbolo, todo funciona. Terminal versión 5 build 642.
He leído los artículos y leído los códigos de allí. Aunque, me conozco, tendré que releerlos.
-Alexey-: Genero en el asistente un EA en medio con un stop parabólico. Hago una prueba con precios abiertos y hago clic en "cancelar". Lo ejecuto por segunda vez y obtengo la situación descrita anteriormente (el gráfico de saldo y patrimonio no se vuelve a dibujar sino que continúa). Los Asesores Expertos que no son del Asistente están bien.
Aquí hay un trozo de código. Cómo hacer que los parámetrosinput int grusdchf=100; input int grusdjpy=100; no se optimicen cuandotrpar2=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;//
Aquí hay un trozo de código. Cómo hacer que los parámetrosinput int grusdchf=100; input int grusdjpy=100; no se optimicen cuandotrpar2=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;
}
Las casillas se activan en las tres entradas y se bloquean en falso.
Por qué cuando presiono el botón "Start" el probador no hace la prueba desde el nivel de depósito inicial, sino desde el nivel donde terminó la última prueba. No existe ese problema en la 4. ¿Cómo empezar a probar desde el nivel de depósito inicial?
No podemos reproducir la situación que describe.
Vamos a dar más detalles
No podemos reproducir la situación que describe.
Danos más detalles
Esto parece ser un error.
En el modo de prueba multidivisa, cuando se espera la aparición de una nueva barra en dos instrumentos, el probador no se comporta correctamente.
Una pequeña aclaración. En la función isNewBar, cuando aparece una nueva barra en el símbolo principal, esperamos a que aparezca una nueva barra en el bucle del otro símbolo.
Pego el código.
Esto parece ser un error.
En el modo de prueba multidivisa, cuando se espera la aparición de una nueva barra en dos instrumentos, el probador no se comporta correctamente.
Qué es exactamente lo que ve como un error, por favor explíquelo. No ha dado ningún detalle de las pruebas, ni del resultado obtenido, ni del resultado esperado.
Además, me gustaría llamar su atención sobre los fundamentos de las pruebas en MetaTrader 5. Explica el mecanismo de generación de garrapatas y los conceptos básicos.
Qué es exactamente lo que ve como un error, por favor explíquelo. No has dado ningún detalle de las pruebas ni del resultado que has obtenido, y no sabes el resultado esperado.
Además, me gustaría llamar su atención sobre los fundamentos de las pruebas en MetaTrader 5. Explica el mecanismo de generación de garrapatas y los conceptos básicos.
Es fácil.
Iniciamos el Asesor Experto para la optimización y vemos el resultado.
Por ejemplo, elegimos la 4ª pasada, ejecutamos el Asesor Experto, y obtenemos su funcionamiento normal con todas las operaciones, y aquí está el informe.
Tengo un presentimiento. En el modo de optimización multidivisa, el probador no puede vincular una operación a la barra si no se ha abierto en la barra abierta.
Si la función isNewBar ha comentado el bucle y no espera la aparición de una nueva barra en otro símbolo, todo funciona. Terminal versión 5 build 642.
He leído los artículos y leído los códigos de allí. Aunque, me conozco, tendré que releerlos.
Felices fiestas.
Genero en el asistente un EA en medio con un stop parabólico. Hago una prueba con precios abiertos y hago clic en "cancelar". Lo ejecuto por segunda vez y obtengo la situación descrita anteriormente (el gráfico de saldo y patrimonio no se vuelve a dibujar sino que continúa). Los Asesores Expertos que no son del Asistente están bien.
Crear una aplicación servicedesk, especificando
Aquí hay un trozo de código. Cómo hacer que los parámetrosinput int grusdchf=100; input int grusdjpy=100; no se optimicen cuandotrpar2=false
Aquí hay un trozo de código. Cómo hacer que los parámetrosinput int grusdchf=100; input int grusdjpy=100; no se optimicen cuandotrpar2=false
No marque las casillas de verificación en el comprobador de estos parámetros. O aclare la pregunta, de lo contrario veo ambigüedad. :)
Pregunta:
Es necesario pasar un array de punteros a objetos a una función. Por referencia, por supuesto (un array).
¿Qué sintaxis utilizar?
¿O debería utilizarlo de otra manera?
Aquí hay un trozo de código. Cómo hacer que los parámetrosinput int grusdchf=100; input int grusdjpy=100; no se optimicen cuandotrpar2=false